Home » Eclipse Projects » GEF » Limitation in number of nodes in a graph
Limitation in number of nodes in a graph [message #106564] |
Mon, 24 November 2003 11:13  |
Eclipse User |
|
|
|
Originally posted by: smankovski-NO-SPAM-.cybermation.com
Hi All
Our application needs to generate graphs with amount of nodes in 100000 =
range.
I have modified flow example slightly to generate graphs programaticaly.=
It seems that I can not go past 2500 nodes in the graph.
This is what I get in the log for 3000 nodes
!SESSION =
------------------------------------------------------------ ----------
!ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
at org.eclipse.core.launcher.Main.run(Main.java:747)
at org.eclipse.core.launcher.Main.main(Main.java:583)
Caused by: java.lang.reflect.InvocationTargetException
at =
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader=
..java:861)
at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
... 7 more
Caused by: java.lang.StackOverflowError
-----------------------------
I am running vm with -Xss2M -Xms64M -Xmx512M
Does anybody have an idea why?
Does anybody use GEF with amount of nodes in 100K range?
Thanks
Serge Mankovski =
|
|
|
Re: Limitation in number of nodes in a graph [message #106581 is a reply to message #106564] |
Mon, 24 November 2003 11:49   |
Eclipse User |
|
|
|
So, you are saying that this works just fine with 2500 nodes?
I'd track what's causing the StackOverflow. Make sure there's no infinite
loop, cycle or recursion. My first guess would be that you don't have
sufficient memory for that, but then you'd get an Out of Memory exception.
If you have a heirarchical structure that's 30K deep, and you call
invalidateTree() on the root figure, there's a good chance you'll get a
stack overflow.
Try removing the min memory requirements on your VM and see if that helps.
Keep an eye on the system memory usage when running the program. See if it
actually hits 512M. Try allocating some more memory to the VM, and see if
that helps at all.
If memory consumption is the problem, I am not sure what can be done to
mitigate this problem. Some optimization is in call, of course. Maybe the
flyweight pattern will rescue you. However, going from a max of 2.5K to
100K is a tall order.
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:opry5gois4lhlh26@localhost...
Hi All
Our application needs to generate graphs with amount of nodes in 100000
range.
I have modified flow example slightly to generate graphs programaticaly.
It seems that I can not go past 2500 nodes in the graph.
This is what I get in the log for 3000 nodes
!SESSION
------------------------------------------------------------ ----------
!ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
at org.eclipse.core.launcher.Main.run(Main.java:747)
at org.eclipse.core.launcher.Main.main(Main.java:583)
Caused by: java.lang.reflect.InvocationTargetException
at
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
a:861)
at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
... 7 more
Caused by: java.lang.StackOverflowError
-----------------------------
I am running vm with -Xss2M -Xms64M -Xmx512M
Does anybody have an idea why?
Does anybody use GEF with amount of nodes in 100K range?
Thanks
Serge Mankovski =
|
|
|
Re: Limitation in number of nodes in a graph [message #106595 is a reply to message #106581] |
Mon, 24 November 2003 12:20   |
Eclipse User |
|
|
|
Originally posted by: smankovski-NO-SPAM-.cybermation.com
It does work with 2500 with the flat graph structure without any =
connectors.
It does not reach 512M when it runs. The highest it goes to is in upper =
300 range
Removing min memory size did not help.
There is no recursion in creation of flat structure, just a loop.
Since it gives stack overflow before it reaches upper limit of memory, i=
t =
does not seem to be a memory consumption problem.
Thank you for help
Serge
2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
> So, you are saying that this works just fine with 2500 nodes?
>
> I'd track what's causing the StackOverflow. Make sure there's no =
> infinite
> loop, cycle or recursion. My first guess would be that you don't have=
> sufficient memory for that, but then you'd get an Out of Memory =
> exception.
> If you have a heirarchical structure that's 30K deep, and you call
> invalidateTree() on the root figure, there's a good chance you'll get =
a
> stack overflow.
>
> Try removing the min memory requirements on your VM and see if that =
> helps.
> Keep an eye on the system memory usage when running the program. See =
if =
> it
> actually hits 512M. Try allocating some more memory to the VM, and se=
e =
> if
> that helps at all.
>
> If memory consumption is the problem, I am not sure what can be done t=
o
> mitigate this problem. Some optimization is in call, of course. Mayb=
e =
> the
> flyweight pattern will rescue you. However, going from a max of 2.5K =
to
> 100K is a tall order.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in messa=
ge
> news:opry5gois4lhlh26@localhost...
> Hi All
> Our application needs to generate graphs with amount of nodes in 10000=
0
> range.
> I have modified flow example slightly to generate graphs programatical=
y.
> It seems that I can not go past 2500 nodes in the graph.
>
> This is what I get in the log for 3000 nodes
>
> !SESSION
> ------------------------------------------------------------ ----------=
> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
> !MESSAGE Exception launching the Eclipse Platform:
> !STACK
> java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
> at org.eclipse.core.launcher.Main.run(Main.java:747)
> at org.eclipse.core.launcher.Main.main(Main.java:583)
> Caused by: java.lang.reflect.InvocationTargetException
> at
> org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoad=
er.jav
> a:861)
> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
> ... 7 more
> Caused by: java.lang.StackOverflowError
>
> -----------------------------
>
> I am running vm with -Xss2M -Xms64M -Xmx512M
>
> Does anybody have an idea why?
> Does anybody use GEF with amount of nodes in 100K range?
>
> Thanks
> Serge Mankovski =3D
>
>
-- =
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #106781 is a reply to message #106595] |
Tue, 25 November 2003 10:37   |
Eclipse User |
|
|
|
Originally posted by: none.us.ibm.com
Please post the full stack trace. thanks.
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:opry5jr9delhlh26@localhost...
It does work with 2500 with the flat graph structure without any
connectors.
It does not reach 512M when it runs. The highest it goes to is in upper
300 range
Removing min memory size did not help.
There is no recursion in creation of flat structure, just a loop.
Since it gives stack overflow before it reaches upper limit of memory, it
does not seem to be a memory consumption problem.
Thank you for help
Serge
2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
> So, you are saying that this works just fine with 2500 nodes?
>
> I'd track what's causing the StackOverflow. Make sure there's no
> infinite
> loop, cycle or recursion. My first guess would be that you don't have
> sufficient memory for that, but then you'd get an Out of Memory
> exception.
> If you have a heirarchical structure that's 30K deep, and you call
> invalidateTree() on the root figure, there's a good chance you'll get a
> stack overflow.
>
> Try removing the min memory requirements on your VM and see if that
> helps.
> Keep an eye on the system memory usage when running the program. See if
> it
> actually hits 512M. Try allocating some more memory to the VM, and see
> if
> that helps at all.
>
> If memory consumption is the problem, I am not sure what can be done to
> mitigate this problem. Some optimization is in call, of course. Maybe
> the
> flyweight pattern will rescue you. However, going from a max of 2.5K to
> 100K is a tall order.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
> news:opry5gois4lhlh26@localhost...
> Hi All
> Our application needs to generate graphs with amount of nodes in 100000
> range.
> I have modified flow example slightly to generate graphs programaticaly.
> It seems that I can not go past 2500 nodes in the graph.
>
> This is what I get in the log for 3000 nodes
>
> !SESSION
> ------------------------------------------------------------ ----------
> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
> !MESSAGE Exception launching the Eclipse Platform:
> !STACK
> java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
> at org.eclipse.core.launcher.Main.run(Main.java:747)
> at org.eclipse.core.launcher.Main.main(Main.java:583)
> Caused by: java.lang.reflect.InvocationTargetException
> at
>
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
> a:861)
> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
> ... 7 more
> Caused by: java.lang.StackOverflowError
>
> -----------------------------
>
> I am running vm with -Xss2M -Xms64M -Xmx512M
>
> Does anybody have an idea why?
> Does anybody use GEF with amount of nodes in 100K range?
>
> Thanks
> Serge Mankovski =
>
>
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #106830 is a reply to message #106781] |
Tue, 25 November 2003 11:07   |
Eclipse User |
|
|
|
Originally posted by: smankovski-NO-SPAM-.cybermation.com
------------APtarxL2121nm8aknEzjHo
Content-Type: text/plain; format=flowed; charset=iso-8859-15
Content-Transfer-Encoding: Quoted-Printable
Hi,
what I posted is the full stack trace as it appears in the .log file.
Eclips do not give any more information about what is going on.
In the attachment is the message that appears in the workbench.
!SESSION Nov 25, 2003 10:54:09.587 =
---------------------------------------------
java.version=3D1.4.2_01
java.vendor=3DSun Microsystems Inc.
BootLoader constants: OS=3Dwin32, ARCH=3Dx86, WS=3Dwin32, NL=3Den_US
Command-line arguments: -pdelaunch -dev bin -feature org.eclipse.platfor=
m =
-data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86 -=
nl =
en_US -configuration file:C:/eclipse =
2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse =
2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
!ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
!MESSAGE Unable to restore editor - createElement returned null for inpu=
t =
element factory: org.eclipse.ui.part.FileEditorInputFactory
!ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
!MESSAGE Unhandled exception caught in event loop.
!ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
!MESSAGE java.lang.StackOverflowError
!STACK 0
java.lang.StackOverflowError
---------------------------------------------
This is console output
Unable to restore editor - createElement returned null for input element=
=
factory: org.eclipse.ui.part.FileEditorInputFactory
Unhandled exception caught in event loop.
Reason:
java.lang.StackOverflowError
--------------------------------------------
This is the source code that I use to generate .flow file with 3000 node=
s
public class FlowWizardPage1 extends WizardNewFileCreationPage {
......
private ActivityDiagram createWakeupModel() {
ActivityDiagram diagram =3D new ActivityDiagram();
StringTokenizer tokenizer =3D new StringTokenizer(getFileName(), " xX."=
);
String chartType =3D tokenizer.nextToken();
if (chartType.equalsIgnoreCase("flat")) {
int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
for (int i =3D 0; i <=3D maxNodeCount; i++)
diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount=
));
} =
if (chartType.equalsIgnoreCase("pipe")) {
int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
Activity previous =3D null;
for (int i =3D 0; i <=3D maxNodeCount; i++) {
Activity current =3D new Activity("Node " + i + " out of " =
+ maxNodeCount);
diagram.addChild(current);
if (i > 0)
new Transition(previous, current);
previous =3D current;
}
} =
return diagram;
}
.......
}
File name that I use in case 3000 nodes is "flat 3000.flow
---------------------
Serge
On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> wrote=
:
> Please post the full stack trace. thanks.
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in messa=
ge
> news:opry5jr9delhlh26@localhost...
> It does work with 2500 with the flat graph structure without any
> connectors.
>
> It does not reach 512M when it runs. The highest it goes to is in uppe=
r
> 300 range
>
> Removing min memory size did not help.
>
> There is no recursion in creation of flat structure, just a loop.
>
> Since it gives stack overflow before it reaches upper limit of memory,=
it
> does not seem to be a memory consumption problem.
>
> Thank you for help
> Serge
>
> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>
>> So, you are saying that this works just fine with 2500 nodes?
>>
>> I'd track what's causing the StackOverflow. Make sure there's no
>> infinite
>> loop, cycle or recursion. My first guess would be that you don't hav=
e
>> sufficient memory for that, but then you'd get an Out of Memory
>> exception.
>> If you have a heirarchical structure that's 30K deep, and you call
>> invalidateTree() on the root figure, there's a good chance you'll get=
a
>> stack overflow.
>>
>> Try removing the min memory requirements on your VM and see if that
>> helps.
>> Keep an eye on the system memory usage when running the program. See=
if
>> it
>> actually hits 512M. Try allocating some more memory to the VM, and s=
ee
>> if
>> that helps at all.
>>
>> If memory consumption is the problem, I am not sure what can be done =
to
>> mitigate this problem. Some optimization is in call, of course. May=
be
>> the
>> flyweight pattern will rescue you. However, going from a max of 2.5K=
to
>> 100K is a tall order.
>>
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in mess=
age
>> news:opry5gois4lhlh26@localhost...
>> Hi All
>> Our application needs to generate graphs with amount of nodes in 1000=
00
>> range.
>> I have modified flow example slightly to generate graphs programatica=
ly.
>> It seems that I can not go past 2500 nodes in the graph.
>>
>> This is what I get in the log for 3000 nodes
>>
>> !SESSION
>> ------------------------------------------------------------ ---------=
-
>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>> !MESSAGE Exception launching the Eclipse Platform:
>> !STACK
>> java.lang.reflect.InvocationTargetException
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>> at java.lang.reflect.Method.invoke(Unknown Source)
>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>> Caused by: java.lang.reflect.InvocationTargetException
>> at
>>
> org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoad=
er.jav
>> a:861)
>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>> ... 7 more
>> Caused by: java.lang.StackOverflowError
>>
>> -----------------------------
>>
>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>
>> Does anybody have an idea why?
>> Does anybody use GEF with amount of nodes in 100K range?
>>
>> Thanks
>> Serge Mankovski =3D
>>
>>
>
>
>
-- =
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
------------APtarxL2121nm8aknEzjHo
Content-Disposition: attachment; filename=screen.gif
Content-Type: image/gif; name=screen.gif
Content-Transfer-Encoding: Base64
R0lGODlhtQICA/cAAAQCBISChBwChERCRMTCxBQGRCRChCwiTGRmxGyOxERi nGSm
xAQCbEROpAwmbNzm7FdGhBYydGRkZKSkpCQaTJym/HSC5J3C7FRypDQWZFxS jEQ0
ZGSCtDRSjO329ExCZKy+xAQC/CQKVKxqzCwihHOSxCwkZHx2VEQ+RGx63CwS ZFRC
lMzW5NTSzGxmrGSu3Ly+nCAWXLSW5FRyrCQ+hMyq5EQyfDxblJyefFxePExq pOju
9B46fIya/LyazCQcdHR2rFQ2hBwiVIRetF9mdHiG9FyevPz+/BwSVNTU1CxK hDx+
vH+izGRapFxOhJS25KTK7DQabHxanExWZHSaxDwifFx6rAQCNAwORGRipBQu dPTm
/CgWVFlSnExSnPT2/LS0tEQ6dFwylIiq1GRetGy29ExCVExmpCQqbOLm9FdK jDQ2
dKyqpGyMvExSjExGfDwqZHR0dHR+7BweZFlOlNTe7DwaXJSUlDQuVNzc3ERK hFRa
rDgcfDQWVJy+vEg+fIyNjLSOxJSWpGx6xEQWjFRSVJS13KSm9BQSFFwOfNye /KSG
1Jx+zDwyVHyevLzevFxOfDw+nEw6lMSy/MzO1AQCHDw+bIyu1CQuRBwGfLTG /Gx2
1ExOTGhwvGxsbEQudAwKLJycnFxdXD09XDkiXGw+nIRutGxufHRynEwmhLy8 vNze
vCwaZLyC3FRKZHyO/Hx6fHx+XCoeXDw+jDASXIS2/DQ+fDwibCwmXAwOTDxG XJy+
5HR+1FQ+bBQCdGRCnKya1FRmfDQuTBwKTBQqdBw2fHaF7DlVlFRGbHJ95EJe nCgc
fDBMjISl1HuczF19tFxKnCQebFRinOzq7GSGvCwOVPTy9IRyrNTW3KTK9BwS RPz6
/FQ+dKysrFxKfGRdrIyw3AwONBwSTGBSlDgadBQebLy+xMzW7BwSXFxOjFwy nDwq
bNze7CxGhEZmnA4qbFxKhBw2dKTG7CAOVHSWxHR+3FZ2rE9upCQ+fEw6hHyK 9Fxe
pJa65CgaVFxWnEw+dCH5BAAAAAAALAAAAAC1AgIDBwj/AFsIJLCKgMCCCFsY hHVE
oEOHBB8qfJiwRcGDBiVCXKWQo8aHGUFajBhxJMKSAy1OTLkSo8qMIVcaDNCw JcGY
Gyd6zOjRpEaYF0H2dMgw50ecOjVWlGnyZs+gGIe6jHnxps2gBilBlQqxI0qg XR1q
NRiSLEeYEss6vNjTKlKnONF+9Mp0bUyDQ+Wy3Eq1bFWWIwF7hZoW6te/IgOr tVoY
6VzCB1umHbhzrmLKeHGeTMwys+SNjBOHxix4ctOXKc0CRWn588GinDFXluxZ 9NGu
ZFWmDhu7cEu2tdWuXVkRNm/SFEP+lQuX62fGxk2XRIsVMeXIlt/ajjo6Muuo oq2L
/yRIyfdg83Z3nr0eGul6s0f50u2Y/DLo9fRd6hf8XflXiVVJtdltlgWImlA/ LUXa
WScBt9xL1X0UoFutgZYgSbEx6JpQwhlVn00HdqUgRbgZ1lRbK9Ek0BFHwIJi b9dZ
6OFvjoGVnW0kvVhgZhGGBRuLLh53nHv5XXjehiq2wGIATvn2HYB3TYTWXT3m B9mH
z0EGn1JwQQlYXD51xhtPczWXm25jfvjkfBLWyJlm/pU43X21TXbmfFZV151g hHWn
l5AVlvZmoBCu9tOhdqFGXZfdLRXXlcDlt6VsFDrWG0oFqUhAQ7Cwp+AEAk0j wTQt
iEoqhxKBWuqopZ5A6n+pCv+UhyekTkPrjGupqgosqrSgSgC9WmoaUTVx6imG gSXr
p5CznZjRjy10iiqBf64ZkYFDpinloQxG2d+VCPaFJn8dlcdhXmw+xlh7ISJK YLqp
aRgubYQm626jnznn2rrIlRbnhPjdKWWDMs5Z8GbCNvhnv34ROmBOe1JYJrqE ImtU
lMSu2EIAN7YwQRyhtLZnEh+HnKBsKyURCsjqzsZTKAGY3KtAMx/IbqJJGjvx zpMR
LGYLcQCa88bbPmQyjU9RyaNMbVVUp08lRSoeiYBK/Ki3SeX79ILTLuzlegqn lJBn
T1PI1Z6BOajabtK1MBaXMW7rltOQ5rgXXeBy6RG27vb/jDbcpDkGdpzg4UmX wBuK
LWyXJYbHeIV8z1RstMjhFMoAHJd6K088nhkKJ9LaemqiGqmMeaijulfbKqF8 kPmu
qrzHc2iweUD03DGFAosnvKv6ZZn2xkEAAMPG0tCmLcRCOg4EhNL8admmbamb 27Wd
HMIDM44pXok/yb2k7445VKRMY7yjoAELaGhjiQ93PdPpTXtyvfKbtzjD3K6f 499i
M9Xe2YYblrAkJD/c4WcwaCPP/FrGL/jlBFpM0tB38jAAAGSuSOhZhSoqeMGi fYR4
AKAgAKRVqPatQhSjeN1v8LY/jUCLhHPRHSBgAYs4iCJknNOPjRwSh20cYXgy GloH
/yESigmEomZH49yIWgLD0+SQPqyZ1EWORr9h9Y97V1PUkAyUp+eEzzQBgxcC 49av
+EzPcGsTmRV/Z6FInWk0Jmrj2rynLAxWEXeoCYq+krI97wTlbeIxUxnH5pw9 Mqth
lcNKm6RCu5psg3Jz8UQc7gCGFoiQhFuTyAB8VUESOo2IADgCTSYgwiEmKiOq mAAs
YrYKCYzCk4uyV3oi8sIxCkSSsJhhDSXASwmA6okjykgPfxgH4m1vaNJCiypC UcSZ
MXONiItW5hbmoL4d55nlG9uXUIQhDHWLYhczZPYIdidtdhE+dNzPGsV3tfHV a46G
0ZNusIgo1jgqnoISWd6k8//NKe1TO4eLY/RwBb1Aea1SIBpNOUFkUC8mbmjK S4wE
8mCNJHACEZbsZP4E0ksJDEACwNLomzhCk1CGcqIixZNHYAYLIxqxlSlET/VS gkzn
TNQanqChJ3w5gQBMoBCh0JdeiulDAhRzPAKB4NJacMQJLJOpUC0cnBxCkyaS bjuC
BFDInCdUCX6zoYjymbf0tMeoRQldzpGLlgAzoA6dCFWqURjfHvK2qxJnUk3C Uvt0
si61QeY92IuN3a6nl7m1xo3csU/2lFI+lMGqQt9hy1TYisel5pNxENwLATxx B0qC
oRCIAMMdNmhB2xREAqpYpgQIsEzSwvBhDGGRbI9wydb//MqIsn2pKD5g1bq4 axW1
HFgLPJEHD+QhDrtkQ097CgsJsDFScVDFNgBgVOIR5yG12xik7iAQkzHzu6Fg w1Sk
EtsAmNe8zaVXFZmJA/B292dgNWxwRMTQA4kTRsLpkf4kyJtPMraFSK3iheRF 2WaJ
JI5UopMdv3i4HclreuAisJOmpsPxrUlu5zvZanxWxrcYGEDtA4CIRSyhF9Yp Dkfw
wBGscVHagsG1d+0JakMBiBkDgmMidQxNWBSHQrAoZDlWJMxCcYRVOPUIRTwh b30r
kBGLOE/P+qGSICkRT2yDorj0pU8DsMpC3OcjcQADi6Zr3SgKBJl2cojJLOa8 GIVk
/8ezla0oEnsRJxvTQlS8jsnUltTzJtOQ4lKMekSUG3kG9DhLzKfDzmqoAboJ wfGk
3hP/tcO4KVSNcP3wLANItUM2GK6ydNuEgIequUJZUAP8omSVqDhKWVojI4Yi RIRI
Pk9YY8UsRkQSwACGOCSBg2yUAMwCMACYAWKTLQC2q2PbIk6waM7JLq1SYOG8 I7iU
mbo1Ayw3E+u5CPE8m6VoHiYgikKAlLkBkICX93OmAcTiFGLeBhisa57g2vGI Xopq
uG4o21X4+9/OFVa3r5REiTy1Navc8bnO2SfIMphGbk4zHwHrlznaK8IBRadc h/O9
GRlW1uuE0YLpactJgTiNh/+1eBb11qiKj0uwBzxwpa1EncA1XFI319o7KxMS ejeM
IQbRmURQbA1E5OGiSVAFGKA9gNhNhyMD+KgEOIECTkQdAMgeAAwsA+ceP9sh TQ9i
tb9rxFBAG7X7LDNy7P2QHopbFHCPu9xF8aiH5GHcYa6u/9aT2f0FBd8fCarX RDEB
fxfx8GavcM+/ZpCjDeXgVrsIQx6515DU1Yl/kevT8wpQOIK8TRUz414dvhhr hqsy
5GOcIrVlwsMwB3BZ1ef9NnqjzhW01QtO11QtpUe3araOXRuop/qF5s7YuugX 5cSu
lw4oh9B9mZxQRfM44T/eMBsWzj4CtPv6kJipwtqHN+L/9rGaNOklyXadQhZx rZEH
Ubz4/e9P/Dqtwf6VHdWyr6kJ+rvHul6B97uEFRQ5UHhyJwFwJxnkA2lM9X84 lGfq
JBCUpz2WpiMCZlcVZkd/gjDWYSbuhEjOonmDwmFXAT+85xnko1n4QU7dInIn Fzah
h0AW1lZhJEsbhmllJEBhlV8cqINNQ3Lxc1dQM2jS41UuNDmdshSxwH53gAic cES8
Rnf+FRIzRmwEgAPHFlm1QRM+5nXa9z4tATMTUGRHFgoSIC0PYzcD9EKDAzTs JwpK
94bvdweigD1QUVw+xH4VhEFyoYYid0QOyD8tIGzj92qDEkWK5FRt9jSax0jj onFb
/zNf1Rdg2YFPnfEUhXMoZyJQFeNXA7Y0hshGmyhTDjZpYZMwEshXZ7OBRIiF YVIw
EacmvReAC5RyADRSzCFOBqNospYkj8QxcuEJ8JdaLyZ/XmgQxXZjTRgAxxYv TJEp
R8AJ0AgyBnhIBfErzJRbZhcsXqgmPuJIRKMRxOV+8Bd/0MZxEnFrR7AN7IcC YOQZ
vPiNZjUfz/Q3d2IQouBcrYiBQqiLzLQ3kNgxVSJ7Q/iDYRGFKWhZ1qItNiI7 Ufgz
qeY1oUZGXMRG1IMbJdeOBPR6WuOPpuWDDldfC/kkhISQiYWDDglflfZ0pBcW sUR+
16FUUnEHhRB3OQB3NQkITP8WElE3AJwAAFYXde7zJDShCrwUCuyQA/6iEcN2 ePd4
BxSjkTTnEcVHF55wQwzITIUgO0VCUT60DVcGBlo5FzBZibIWVEYSjyNRjr5l I6WH
Vo23IWDCZH7DkonGNnyFgVADPGDCloPDiHiJhkRYOX7EkvzkQYNmMaRTJ1ED MX1Z
T8OHhuqFggukkawma/4FipKWF1opVqvIX9o0gs2oVi5Rl4kScxlRfE0yX5RG kAqx
SWSjYRszWxMQcPbSTQOxTHEHLAtigrx5HH2XNt1gk3N3gJFxJeiYjnlQM+Ah MMGV
SZN1aiYSi7zJkXdJnfQhNTxYnZCpHNp5Gb4nH6vXX4j/yRFV8k8oYyT3JXN5 qZ7W
8VfRFD/e1JsW2TGhmZ4k8kSKtSzYqVh9EyGrU18il3MCRmkosmrriZ+ISRv7 yHb7
sjf7QmgSBiGfBwuiUJMSkANwIoSEJEbxhXrQElE2OCcNA5goZ1ZSaYSi53mT GE7v
kpAQg2p6mFbyQje6GCYDEnPw2Sy2R4L+GZiMqY9Q1Jn3EqFStYKDaTGDlSVF IqSo
eHpB+qQgFxoSlqSH9aSb52apGJWsdmkSCphW+mEJpCNIuo8dExKwEQvmRZ+X VYvR
k2pwmZQVCFYDkSQ09GfrU0dpBV/59npnmqYcakXLQn6Esz77NJmrdzOUaSSf FpcB
/6QXmviCUEmYD1oXlHklt5iojgmETHZzhQVfhoapEEkt1tNXnSqXgmo9eiqd J0mp
/QMvXAqIrAqKEpEkKHmZgnWejHqromd6DgWqixSbo7dOvienYlkTNWqS1uSm lSep
dHmscdp8NjigaqqsDxdycUqtH0lqavqswQqp1Yqtz+qm4Kqn3OqsxzqsjIUd RUg1
Dgpi6tquheQ+BCSv9NquaGKJ7Iod8FohRWGf5RqnJGWsL1elA6uu/1ogBhuv B7uw
DOuu9NqwBluu/gqxFAux9hooE/us95WxFWux9YJedcplqzSy6FWyI3uyIstl Klun
NLSyIduyJHuyIauyNMuyIP8LsykrszFrszoLsjmLsjC7syvrsiQ7tAmXcH5G syVr
skzrsudVsyYLtDnLtDHrtFWLs0p7tEObtVuLtD8rsi1LtThbtFpLtktrtkub smf7
tEdbtGrrtl0Ltn42tm8LtVxrt1KLt0kLtVKrtUart0jrt14ruEr7tzVbtXb7 t2Wr
tz5Lt4EbtYy7uIubtVeLtjvrtnRbuGvLt5uLtpwbtnv7uC+btG4bZ7PllT4U Z6lr
uqxruirWurA7Zqy7uilmurSbjrP1unGmu7J1u7Grur/bu72bur6Lu6g7vLLb lcqL
vLKLu8HrvMI7ZsVbvNJru8kLva3rlc/bvKfrvNqrvbD/+72z25W/S7vUy73i m46+
C76qu7rgu77EK7zsa7zpy73Re7/dG7vna7zYO7v0G774y77m673xG73727/k C8DW
O7/bm7/Uy8DPm8ACnMD4y7/Aq77+O76x259Q6qvECpE0CjkzRz+Huqquhz5k IqIK
IoLb6B1h0iEjSjoTS4oiWZGPSlC/Wo+9px55BWmbx6bg9mD5hisnWJlLpTqo V4Od
V5tftjbuqaAmSpcXNid1A0BFLJ5LBGUuQ1eHyqkQqi1rpVLx+FV+56QliKug Z6t1
V493xHqXZcKsx6gw7MZtTJ9uBYmI6oJigjGxGGobuBvohIDyeacfd5f2wS9v FJ4y
/6yYwLc689XFyPJPYQQuB2WkW2No3aklsZiA+Jk/OIqouHKpQ9xARyKffSzK bZN6
FiY9o4mg+6HKpfl6hVqJqmM4qUeDHelwHNuxvNzLviytgFPH3DrLwPzLxsyt 4Oo1
xGytx7ytgizMLziguwyx4zqL0Uw/6Fqt0NwaT+tnLtHN4BzO4jzO5FzO5nzO 6JzO
6qzOmLu3bKu56Uy4XtvN8xzPoTvOfivO9bzOd5vP94zPaQu3+ny34ezP/HzQ BD3P
/jy47py2BV3O7by1EP3QmhvR5Py4CG3QA03P77zP+8y1GE3RIr3R4PzR8OzQ FU3O
tquM3ZfBtuu+/Su9EGy9Ef/cwDStwO27wDYdZ3+2iYvzMKZapgUqSBEzMXAk n1v0
RvM0V3njgYv1Tq6GaYRxhjQYSJ+mSBGWq4SWe3IMcd2ql7fHGBVhqdxEyZIK wxOJ
P60axuGhaI/ViiP6xIYsP/K0xfPqRoq8EcooXpIzUGDymWQkxpBlqZdCVgCK pIkl
abNkIqLEPhxqQE7apZ9nLThq1FJcsI6G1/IKWMkKMHXnmKRaVpyWUByMhU1d H5hM
RuIKcakJTtqkgmJcVo4yKNZcFzs8fLnnnk3jUMqiL4qUQIDsl5L6mY/TPjk0 arkx
rmYKCGwQEbR6repUNqssl0aKe8oawoImkPGYai0SFpf/Z0vO7EG7+tSJyWct vFin
Nk5qlNxF8j/UqhZAXbD8IVmxLDV0LTBos2oUCMVBmkN4pFe3cYL4NdgHdVV9 slb6
7cx3jIlC4sQ1csPcAqUZAhbfIoryBKsBHntLs9dUVRMEEAsgLlvGI+InMOJY gqBW
fMRTQ8WGqDTciB3snXvXlU0Z0SI+6qLcJ0byBSWpOHsJ6tUIK4kYrqRt1Fh9 nNi6
98k3WJjmeHtyskUFdmHN14OOvdruLWgSMy8W6B+z7cbC0U37uHI/KuX816xa jdur
LayJA047aKuEwuF9LRCxgAOrIOK9uwo4YOKCHINX4aI8TqWGiVd8kl+XSMqK 4xyi
/7SXjSzfSNPaV6TJcjxXgfOAT45yfryDm3aDyTx67YTjkt6SCuY9VN3gMqhE CFU/
oFbIEUmL6cQmimzqPKxHMo5zKew+bE02kYZG+bibb5xxlAWn3NFWAK6teroa HJ5U
xnoCqxALdX4EI15kzK7niBGpqzrX/MPlXj3I7DbfPM5QetHYay0uFCfr3RpI bC3J
goMx753r2TqJg0Wq+ihIG1pPZIogMAp7+0SmypowR5JID4vJ8M4e46Eg5nOB +97n
n8fKtnlWw57bt9FFoDfk/LlxbkphUEmjVCwRuSReZyZlSlJkNLENI77szc4i 4aov
9BaERfPTChofLeFzOiqgoP+nJC7ymreakAZT8BbIQguXJYHqV7E38wFvItfe UMus
7jG61f1tcyy46GxsZiqlngC1nMuxzA/34IQT3w+vyMT82f/lnfeJ4MlNYXJT qG2u
VmneWKDGFTLP23AOrCsiW34QCX7gQ8weZyvhZC1gZ3uv9xPB9yl/xgVhZ1OF qrA2
8ydIYnl/ZyPR3e/y6ZreTzYj3DL6X1nc5NisRaE4cmdtyZoZmYrHSDJPJON9 p5d4
+oGtqC4MhNgqyqF9aALPPmslX4WE3+SEJtph6A9PWJAD3lsP6Ocz7QfjL3ma 5Utv
F0+0185trL0bCasQCTkgZqbrECm/9y/vGj5n/Tp/+Hr/ePUiwfjL2mT0RmKs 0djp
TdYmR+lMjvZlX/AVqVh/TMiKmt4gshlT/eORX+tl6sl5tRsCLqEA0UJgi1UE Cg4U
aJAAwhYLGw50aLDhQYQKHx6kKHBVQogEFVIsuJHhSJIVR1ok6XBiSY4TVQ7M eNKl
x5YiCWp0GBIlzIUvE+qk6NOjzqEmjc7cyRCjypAtO0JcelOp0KcdQwYAxGZg gCMJ
jxwBESlStkiPcuRY9XXbV4EAHj50izDu07lt2wKI65aAXr125Q7ki/euW8Et 8BbO
WzhixY0SBRd+egRWSZU9bTJMOpPxycaNWUL9idKi55c7m5Zs+lEiwqAxcVKO eTDz
/1Cflt/epkn088PVTkPjXmy0t0vPnl8f5Un5bUaqpWWnRgpU4uyd0zETHQ41 6eLs
U3l/9w26tuuRzJXffl6ZpfqUSldOv2xS9ebZI2Fldch14BL+2W5kU2eVHFqI 5YRY
DsRhoboGA0DBwxoU6UHCDAOMQgvrehAuC//Ky665JvyQNdw6Oqyj1Y4IgLGc sivt
OqYisqk+1uYz7zOhTmtPuhGFY0k2zIiTKSUfVZTqN/JcfIsq5sh7LrmVtLtu OfYW
0u1H017CEUbfLuuuPSJhq6o9GansrrIjZ6RJM+9w0i0zMlvq7UiMkMwovSfB C5K3
M5NEM0istBIIlq4EukGZ//+UCUtAAc9i1K8SF5zrpbgcmtBDCiv1i6G+DHvU 0Q1B
zNAi+HYq0ckWJNMzzI9AU7Mq9qC0rTmNhGvNsvFE283W5OxELzwTY7IOtuF6 Wo9W
NJt0Dsk8f1w2TVbLg5GSWX1Ntjf48LSKz1lXhXLEa3U9b1gjn1UNuvV49TXH 8m5z
bjtq090M1niXqpXLGm1r4c+D9Fvoq7COMSKSRXH4qmC/FKRQJQCiaqu3CREG MWG7
fAoRYoQv1bBSqlh6bFOOUD3qyFdpm7HO2WyqdVt4bfRySCrvXBlNYkOTszmG me22
Omd3bLZVzUQzOVtXlwQXPWJffkrkPLm8Cek02z2Wuvj/aJtTvqlnXtnMN6dW Vc/F
fBTV2T3VNO21zrD2uSibOfMptoj+pFLQgQo+IpKA0aLb4IZCrGsvVyNdBVO+ KvyL
xAsr7NBvvj8FMuy74JoUpm1g6azrn+6UtWekeOYop/fOvnw0bd1WNcucoeV6 VFi5
/q1p1psuOdjWrXOtS1PZDWrH1380zsrcW6dpNO5+x3bnbtl2UWlutRMJ9N9X jG/4
cmHeHVqc1XObaazbHvHsoDMPckWS/txq0FML9iMSP/KmW65HM2zQyfgJL5Vx zyQ0
rKfEHvM0wwshC89BAMip+KBIdcdRWsp+9rQzAQ1L3tpNTbJDOqUZz2xQe1ME Ozck
/+SIykdtUhZMQqYeB/YJR7HhE7FAd5GZ6QhlE+TcysgjlDEJaWPa8pJ8PoMj OPGk
eiX04HxwdpzLAcc1lAAJrrBznuMw5SJSutpPyCcQ/QiEfbFYC/vMhyvrmUp6 2nJc
ruz1xItNaYbeAuFMUJRD3OGLJDy8Gc1s9xsYWctO1tIhcnLWuzDq0VmxIk6X ikNG
rvXOScMC2/EMIi2WWY5k1/JjF63ELHAlRUcbnJ4bMXkaTbaReUBzih3riDN6 tYhd
GrQRUFplSZs57YYifBXxrIM94LAEK6F4CL/Op5ZY4CAWWuyKkorGyqK8UZjp qRL4
9CISbhWnTFPhGqrYYxwe/v/KTai5oQOnBqwIZnA1uUMXJ1mHrlZxMpVhHNl8 asNE
Y1YudgqcSRI12Exd1eeabMqVMafFsuUxy14ZxCfLalcsKYnRJN6r4yVlxCYa PuVK
qTJa50jGpNW8yCpaIhL5ClLFVVijYL3s5Qm0yNA6DTGGQgwkKsXJrTlKFE5V oxZF
1igiNyZ0juJLJ/HEVE1CBvKHxWSjNRuYOmiS7TKq5CKYgsXSeG4MbSKM1/WS xEGX
NtJoTPuSu4Iz1XpGcamJDFcogceqSwbUlKekWQxR+dK29ROoaqVqmI7S1qj8 sHJT
zJf5CpbFX+Yti2EC6wE3d6Ph6CaNchVrLb85waM9jST/0oyrWsOG0jQh9YXw nCti
aTU83nkwZrmpzu84aNFImvBrTo1eahdIxC9aM6A8NZ50iKJKT2qWpNBsqQ/H c04W
uhO0R2UhGn0jPAQC9KJyZCsdgRocrRlxa330KSKTJdnVluQ+WllIFWMXUz8a 8lnb
Mg4Jh2iupQb0tiZFLUkdssZSVq687mHnyLpnRyh+K40nxONnsRPequC3d/IE aHmJ
WdcgMnNonPNvEc0rVfEsSa0nbd6qhGjGhh5PuHOFI8/OikP0evegrSQiNq3H R/O6
xsBrhVmQSimeUMaHvC3Bqy5nBsntEFjBwf2Ze5kZPceGTse13Sq+iJvMl1px Mkr9
/3GOR9maIpKWue7tJpTBGDqSbW6qn2tyDx9MnySPFUyArahvyZZC/nKVVWHG MpaZ
m+UAa9nHNyaeicUXwtoxmU9MHjKZbgZJC2OStzn2GZrl6+boqNBdm5vhjtW8 wq2S
5LoS0S6KJf1KSVfa0je+9Egm59BMd5rSBF1op0WNStl9mtSTjpmpLa3qUbfa pMMl
sWan62pPn0tIWyboqTGd2yjNk9a7mSIBAjBsYhe72LAwdrKRTexlL1vZw0a2 s5kN
bWM3O9nXpja2A2BtbR+72tuetrexLe1wczvb3z73s6N9bXKnu9vgNve7vx3v brdb
3uDWtr3jbW9vr3vd+L43u/8BHvB/C5zaBXe3wfWdcILnO+D45razJS7uh48b 4s9m
uLz5Le2Ft5ve/B74vRFe8Wxb2+P11nZWttK48KizoNKlbZE0HCUPUqLRZk4x jdA2
4CeaKNM4LRZlQ1wk6ni5ixOO6z/NRckDO9U9G26xZ1/Z0hkvXW1E8y9lnW4s 0TEv
zSkNMs1NVqPeVtqizT30mIbq8i/588mEtet7mjXZ/74poRCNYJ1no0W8Uo7L WWMd
pZfc6FDDzsHKGZsFa3lnmck27BRFdK4HKxM9J0dnKE6k4O3c1Bcy1HUtFLI8 yRUj
udrKmVcjPW7OOM8TY0mTLVqn5kBr9B1WPnk0wrGcxTz/ykMCK7I2BP7Y+wRB K484
VhnGdMk6eEdX9eg2fMfPRuElYKxizli1hxntoGt9zey5s6s0q5816OG0qcyI 353T
Qp04+gJv9aiVTPF3q0r8VzP4y2GucP3jtHWXJdeHRocecWmi9CMnmYuu/pM8 xOsg
7lqXbHIx04PAGKmSxSsd2wqe36O8zTs0CXodRaMyXLEO6AOUfBk+M8EceMKp 6vOa
sOKZ0Yo/5NmgdnommMIq8bpAGgKh/HIuPVqiARy0XmMgjAK+tNuV/HK84AEz 0ttA
utKS0wI/1+qO1CAqudq8D1M8GWqtHkG7lkPBiKKxgTouLys8zsCtEwtDDKuk Kbw8
/8kTwjJRqNL6DBFMiBQJrRfUJ6vzOtSaHlg6Hp6qp6jhsbR5KokaxOwDPuc7 Plkj
DRRCsM8pRFyTuvszQ9zBNaTiDEbyurYbvlSKqgx0ukIiPJ8zPyLRweEKHxyS s8/j
RAtEHtIAwkDrQbGaMdSRnT36NJSiL6TzJkMioT1pEiORuoMQQUjzNfHTPD2c QCQx
LhacwvAJvBN8RJ9SJN3jvU9MqZ7TIeOaxTW5qmrUQuOpqF6jsagTlohKtApr rg/K
P7SrPhVaQbhDMwaiveXYQcMDL1OZQNcDRoQCnkFDGr3brpFAIovanafCP/i6 QaMz
p1ZzGgPkPfTajWEMFLD7xf+boqNA7CQe4cboUjCwWSFKvL19op5yeab9+6e8 QzoE
u7uoOcGhSSpEjEW5E7sHW0iNbJkn+6Tm2Y2oqMOZGzrqAkogFJ1wfBZkMUVF LD94
yRIDW0RRTJet00Gbch3EEiU8eR3oQpdqrBdOwxrvCi2Ymxk5DJTqcS56ETsJ Sz1a
Qq7bWcDPGEjWypp6LMf8K79RUjWyk4k6I5ef7DGw+8YQipewSxrP8jxnEpGD orx3
9EWk0bOH2i7ngSIoVMF1TKvpO463hEsvIcyxapFf3BLhmS275LGY67An1KdC sypA
tENN7L1ykq44ZJ8YY6ugYSJWm0m8c0rHiTmS5D5xio7/liTFmjEdZfQt/goi kETF
ZVSwRfJJtQE12NFEqYnHOTukjewcb4yofEKrgloWrbOa8yvHl5PC5bQ+KSPP bCmb
BBRPSZw61sumaQQxYCxGrdMpSqpPS/yzmAIkiWyByRCkW4E18OtFFtHMCJNA dtop
pkvNwntJ0tJOPvM10cssMHOtmgkuFZwvwOyhZ7IerWFEFVOJt9S5zusz7HnP 39Kj
2Ps/g2o5Htyw9KtO3pydq9yZcVQTZKLPWNJHGBy6AyLJ1NmTXjQtWZrMPCk8 sSTB
0+kzPMwNs8lMFmNBTnPEygwZmXsZFV0+wppSHK1C4lQn0nEod1rD3Coa34GS j+RM
/+WzGsE0qTbZzajipha7tV3rL/kiStghStirT0eUQO4Qx+/7QfkLUzeREwpk 0TMr
0VwTum76rgKjxxGSpNnBJ/oaVJmKTUCYgIM4svi0vEbNTQ1LRhC8LOiBQwFt CHfM
ICk0tFS8xZ/iMANkJ5g6CsxcStHs0KrZwLEKzevZJoIUss9iKqp8vx0jPHBK Vdc7
UOJaJ9/qku1LwvNanS4qszW1Q/V7C8zsxx1xFz98DSGCraxyijiFKjbDscTq LjtF
z2i61BFMkSp7zXPywOX0TJU5UD8yJVVdpQ/VVhFjTZybJGk0q8xDFvMIsqWs wNN0
VvFxUwANqjYiWCSzy9vBT/9Z7ETvaiB7FaNSBCKUmdFaNMUa8kIMDU+wzL56 lb/0
mk2PbUtnNU9oLB7boc4rKz9kGiLugL5MXYgjU88rDTQLy5ztMcQmkkcLTMXu 0xXM
2lcxSxvYgjqRPE0+rNnbaa7ag9FX5Mt4IqMrPI0VGz8szcsdbb5QpVkc0kYg OVNV
u7lDvFNYSjphopoJKxaREdfM2FXDysgiVL279csQuiGARCnLQqNoRAnh2yW6 maJV
aNeHnNetA9UioymGeclGWr15xLVwNb2jDMJ/vVFAGpedW0RQkrCoYliVbdph Ssbt
BNfms8U0RcKsZcuaatidqUkLPFE5wq8nPMeYdE7EZDX/XuHQC4pXQmtLprsR RcxI
VzTJN2taBH3cZq3CQePPADCuM+LaF+nTTiy+nWRHIUxO3NpHXYyj7wsxpJ1c tuye
r9OcCjvdPmlMoYXVXONJC8XeU3tAw9MZWU1BD8VSu0siNx3UKwxT8S1V8yVC l0pJ
T7xaPAKJ2tpL23tY7FTGIko9QiMwrn054XVdGDwsJN1Uq1PZpztUs80qFHy/ Pwq/
PsM8PaRTOKyxXOQ63Z3a2fQaD2O715UZ1AzGqZMlhxwsPIu1uPxOX2FaIqog Xv0z
7qW9NTQzIfW8UXRPggJDmUyV3TLBHIrCooKhDCzK4ulOQ1qptLrS00XWh5DD 7ArP
/+DUzSx8F7fi16Qk0CoJL6IRPw2tUMfM0Ejqui/bxKmMsnm0J6mwTYGaWfFq yPdd
mqkdXKy13OcRGtf0zDz2M7TMuc/0mfi1NadUx4R8SNtts3JV05yMP+gaFY98 FdEQ
r0nk4uyNLa9l3t90M7FcBZ3VE0wsPPJru/csIaBER+Vo1o1US1deUAM7K6SN WM1V
Lq5c32hdPmz80Wj5UjsVrZKUY0ADTzH5zpPhX86p3flrZUuqy2Tew0500LVi YzIE
ULps5QtEsXiEqsW6SPBa298bZs6Fv+S7E0vNmxgTQgriIv2FY1cKX2lNw+Ds vdjL
443hSWFhvnzUSercUUnuMf80xcf/vEYYvKe7bE/SZBHZGl8I3eQ/nN1DTMCF wMwr
yR7eFEA+xEEHtKfRktAbhNGL9VcnVmnP28bj5D5Ortkd5ifesaCwsbHb3GPv RIjo
xdxo7FIrfkEfNd/kMdIx4uXrZenEk11x8ViJzhG7i2BZe8o4PsxpXMHstSmv Elkj
fReljUImLEAga0qY9d4nVmXuddYZ/eRT2ma6ltnI+0O2BC7WS7Wg3ZU9ckab 69YT
ytgzBjyj4GBzijnMSkvgOaNQO+meHUxUPk5XQh7lJNJ1aiyh1Nb+aymKykE+ Thft
EWHfJEOqec6dtsEGcyRYZOVzASjUXlPIJT6gtc5BQuH/YxbpRd4ungXZCa4/ 902h
GYZbDlyyIFYshYYhXFZMZG202VJSiELSdiXgFJ3lHv07L0UrxsXcAeRXb7VO LSUl
msq5sn4rCuvX/9utycPltdO/Lv3C6ZrXM2PSe0JCCGTU3ta1YhJTLgQkN1we YZZb
rd7ttVFW+xS0So6TFBZuLRbKCANA3m7vYnw6PIs/nhpG6RtE61Xg/VuTohvD +Zan
9vru9s2nh5LKPtTKEo1fLJXV/vrubmVFjlTqOU3lCS9BzSyttm1NWL2jitTP 3AFN
5fxlcD5Ja3ZehD5rD09mgBXqnxzrxnq7wjbyKGbpF8TX/6XIGe+aorOidV05 1kJl
/46I4kEWzh/tb1sj1fjc5C255M9CbCaiKv12RXX20xVt5sCruy0HyY/EIKyG aQ9/
27x1wQKNxpmE0HQGI2E25yiS6vzMrJilY8Ge808a2h1aMOP1YAJUZrP+MrJs sFx+
KyLxjOjFy+BC4gD82vna0wkdlwVC54Sc36oO67xtYlFlJS6d3q855J0MMcHD 4GWJ
8a4cssPu27SN1MesYlpEWuLlZCXMHkouVxNVSd01CWz9HtIc9mP+WUXdrBmv yr98
bXDV7Yc8Gt+latmm7MItmL5TkRj/9dtDPbfFySnlwWnxaG1WOuLiRMcJ5BpP TKjN
aSpDXi5LqrriyDmbEtmb4v/NE+62EkWtmlxTwubUFckgrfcLB1tVdMZk36+C f9SU
tbwuJUCJjzrSG6ezs9ov0sAk9w7aQZ1Je56UIe8bK2MSrCD+dWgzz+qCLira tfl0
P2X2HeDeWlRu5HleMdaLbMhtVKSeseU9PmpQRO6FZTleNtRaqqZ5Fa0nKWQq BLHZ
hvoD39c8indKhWA6/9W7pepc/Wcpz28iC8ge4lir6srdxpPtcbxwWs2eMSUO ts+O
XOb3OvtTbGAmQch1cS3dUt0aT8NqSeAdd8bAnHbCVKLqMugyf3wm7VpqzsM4 PXPH
9lyQzHOzp+SsjHuZJciTmvnGC8bPxkRz1ek5BfPutnr/+jh7c+ps1ufYdF/m RhV1
tAff0MU/ZrrZfdnM7sb1m1Rm0E1WPyTltSR6WJV4eLqXbxVaSJ9pHuqnYB3g MXbb
kDeKz70gzz5bDIx3bBriJ6f2tqxV3eJ2vdx03WsqNKRkiydn4W56vV/LzwYI Ai1a
rBI4sOCqgQMFCiyoUKHBhw5bEED4kOLFgZQmWqxI0WHEhyEnLrR4MCRGjAwJ foxI
MiPMjB4hDjxi8+aRAIDYKAwAs2LDmTNbQpzoESjBoSITxlwYEynTpjBfOkW6 FGVU
pzSfgiSq0KhEhlm3biVp8CVCoEyRqsWYEKvYlVLbar2IMuXSumSTlrSqlOhd vYH9
/1INafBoR7tjA4u0+7MxXq9z3y5++zjp2pJuI2vWK5Nl0cMxTX6MfJbzX62I OX9u
mZY045OvS8stTROlVdB7TYM02lssXpcEcN7UycZggNeMDUttrrJwXeChHQcF O/1r
bYmsVboWvbbrxbGsc1+vfha3+OXOg3oO272ww7Sd2VtPKX9obOoywQvVnf+g fZtJ
BV5K50F2mHxm8WWbZO2R11h6LP0V23nQ8cUWaNntt1JEy2V2G2VqpVaeb865 1eFu
TcVXoGIjdchRblSZOJ9lNRGX0049/VRiZ7T1BVhRGwZ5F5FZyWgZbmEpV2Bv Kh6l
24VmkbaddCddNp57GgKH4P9dUv6XYlNPZmSShyRKl9VfNfrYH2G1bfnjbh2p 2SCU
re141YcNTdcWlxIeKKd06PUXnlNo9jVlVIixhyeA6/02V3Sqybgad89l56KE huZV
V4J9ygeYeFa2cCOOPAkUgGiQ7jaiqIW6aGRuD8pKYKLYORfqokR6NdOk8ZmH 5qSu
+vcVk6KSGaaCxBoYXKNMpiqkYy8xF2SjcinqG3pahYrdlLr6OqNsHNJE0qOQ Qcje
l0lGaWdVIToWrqVEbesXsg5WWlV7tr5nK2U7FsntU5hNW+mnz+XL7mXP2kic cQrB
Yiuf18EZ2pyD0vnvVviNuau7cMZlcMSipgsmaj1KvKD/wfcGrOTHigGpV5Mp Kymv
bTxuip+hpx2MsJVvPjhkx4+xxV+9mg2W7IBxSUnbh+YKvG3GMkKK4ZgtR6bm UDGv
KOLOgl3lL8J0ccWg1OIRyOV3CO5HFqnGOZTcYLKx3POCAm2EVZgLQncsvNs1 pye4
R4pY37eyMqja1xBKRi9UCusWdNVMSQ241QMzCyLVzAp3KIq77jm2yF23W6V2 Gxac
ZMFWNtlymhRCDGBgwU5Js2Erhuf4uChaKOZelL7cc9OJU5cosB/HfeCJnPmq qelK
DdX2Tg09fLLlraKFs7gnBze7jyxj67nIyhEt/Gh+j2u6sovpC7B7eYtb5LOX Spv0
/48a9zua76KzOvujzKs+tNX0xbWPbcsykCOfn1TVnQbBhUHxu1y+LIc2TA2O ZyP6
jdRMVp+ZxWpJ6uuau+y3vgxFCi/fe1esRnWjhg0EVVSB0efyRrJMtQhliEMh uPiS
wam8SF2ao1uC4qWuHo7QM7NS2t9kdDfheXCAf3Ma7vCkqFX9jmtC4xbGeLhD oT2q
c435GcEa177mLE9twtIh+wwEFXmJ7XZPhNHqNnil2nmxPq9aWfKw+Km4IUk/ lMoa
hWIWE+jxpIXke1GWaKW2X7mpbPahI2YQNzQ6ee2G3eLb4U7jQ+24hJI+JFDG WjO4
Nk7SZKJrFmEYpZSOfWlIh/9r1WdIeaU9Bctj98Mfmbi3QKexqHPG2yIVRzfG Yanq
gW0y2jCLaMbutQiOr3uXA2vopNM5UJcB6+IqKMHFkBDSINPzljQzskQZJtNj KGtj
7pqFP0n96pVYms0ae1QheoGpcTCcm9xcMyO88UYu3xONhrQXQ07Rk07E89BK xvKt
YPKQjbfapBEpGa5a1UlOpQuf7mKETgqa0FpGi4o11zYeL70SLqm7ogBtuD1d sShy
0DxjpFjVN511hZA6iqTG4lbBdKZwpbN8XQPZOT53Ti1467kTYwA1sVkeb5hU W2Yq
yWa+SwZwPis7qUp/Zy689YksqyHinJoHJIBSlHeViWL/TsNqTtfxrKOsQctR pYjM
vODuaF+VYVTLIihTNmihChObgWLmvK91KXsKgd4EHDK9SpLoqodzJgd16EVO 8uao
aYOgzJJX0M2g6I8zdCMBrfI9OXL1g+zyTlcpRizh0WeU0OwhovQkRlaaNqv5 JKji
TJQzsxGRX3+1HWPB5tDhbs49JP3lX5NIV5CWUqIvBZz7zsq+pap1UfbaYW9v maEM
TsSmhlRjiKAmKXxNjDmTdVmxoGsnK7YHa3eq18BkekvWwfW5D03fEW25TBsu NGGk
CStbgRvLG7Z1vHs1L0XPZy3xtUtItRMo727jH9rKVLeXOuVFYWfHWv6UWvUr lwRt
/3YwSNJyxGXd3XTJCz4DnwSxb6sw5/CFtMk1TVrlMh9Zi3u7MibvoF9k8HX4 1lkQ
4bKr/bnPjaP41nXay75E9SdU0ynhzDEXePMUsZQhnCnZ8vVPWl2fXXE1v1by CVsn
JBQgkbS1rpy3Trt0L/Z4ScZjCjfGFoNl70CpXl5aqIjts+hhV5gjgvikwdad ysz6
qcVN+bZfzRWlmmMzZkNBTUMvFAqwpNlKP4/NiVaOl7bubGN9elFjeXbn/gra X/N9
mJOVsU2SnGed/YEazQHj2vLmtllW+9dN9YRUCDNL5EwWr2JmvmOMw4lo8kCV t4n5
qFbfpGmkQaabLVTP8DyqV//3pQiMRd1pl5fKbAUNtbyMNVxDfRpRJH8JmIxm 50vt
5KXw2quDh3Yj6NTtRwS6FbpZXFyP9mga54LtP+Q23o+0e8+nBZbLoFztwINH YmWP
qHrk++fVdMycDOanylCqKo3y5d0WJGeXoAIdpu386gB2lj+VNllPtx1bNZUx PY6e
DNMyl1WLYRdpLa/gJ2WN6QVjGJ+2pZavo2NseQK6RnEWmAAvK+eKJ1pAdC1Z rxdn
JIgnGOsRbOuStuTXTs0x01G72Y0/20eyAKppiAQgdwyzX4EmkiHeJQCqXIq9 2UDQ
dUv7M1ETh219BfGKm9ZyAmXJZIktK3fkKm5IzTPCo2X/eIqZy16EMfhgGoLZ 7Z89
UfDc7RmaM7vBJYs004BIMRjv+32t0mg07dY/1uVwMkgcMuKonR/YW5FXYnTs vdVZ
NeGz97XQViHDBr2KQrfZUY13lngZuNIloVzqEd0eKqNdKIk9nDuXjfC4aXRv CQpe
gc+8HOkQHfjQKfDCToJSF8H0cIRXM+kum5DT1dpn09fw5t4uu7nwSEgN33s0 UvPx
l+8VUMoJ1WBxGo55xcPdR9xRn7Mg1ZpJhbWR3LIoCOPskHZhjuiInslN1s/8 Hrzh
SpbcimR038nYzgEKiAl6IP3pnGTh2fQ5jsARIIZcj8q5X8f5Ehc9UTOZHN25 UZ9h
/1VdedhEjZKAiVZTCYs9bZqN5Uot7VXFqFbeIKEgndyAqEyGiVQKotsNGcTI PYzP
RZ8ryc+ZVIedadp0lEj+SFbP9RpJyZVHJVj+5VeobVW0MJUE6hbipR5Rpd3r cVdv
kdGhqJsTuh3fvaHY6QxSZd2I2aAgRkmEERxK8SHTsZUwVWDtLRPpCcYHwhs5 /dQJ
/ZKC8cjx8FMiriB7uNip8IuDndP7dRiOkYucHRVCidu7+ZkMSljdKGDkYArW gEVX
bRFYhJ3yZBwULVU4BdX/6ZccUaINPV+8DaLKwM8eJhwqRs0q8pZbgU9CZRL8 mZod
Es/GxNI/baEnKpskuRmdpf/OPKmfm2EWFD0e1FGJQozTRZRhCcXO29Uh9HkV u/3E
7U0hF3KgAj6bV+kRgiEbx22Qt23cKuEcqMwWQPqJtGlYcBHh6tkerxGg0m1W 65zi
s3Xg+UhUjQwgZFwPO7ZULqYYHTndsIUbzLGZTeog9/xdEYLcNd7ZD3HISuac fsUk
3UCM/0BPKDjMM6bOC7lTLSGjFUXff9SRN44U5CVh8TgNtZVT52whhsDd53GF xQ0U
st2iNhaflWGTuoQUQkpaVVKalkjg7igjD65iDcJTDjriVbFUUQIjSDoUdjXk IYnP
Kk3SxA0MMAFl+RAenfXN8KSETVUE88EKCsLOvahl9aT/Fgr1z0cS2wTilf9Q 0LHg
3xeJH6BpHZaAy7LcGWd+lFoa24OBX20hy+Fh4UMakXQBXF4FHjrtH2uiz22u UyAt
kuJMER4tIeclJ/jAR/Gx3rMY0GM9SYIxodCBGJt1pZNVopWMXN7xYctEYEZu zhLt
2dJxm20q4epRVW4N3qpcWklxJSKZHiMBWWu8JCbKm44x5zgmG2rII1Y90nRe SJYt
Wp153xDdp2tpFgyVDZetWK3RkjnKIlr1leNA0rhlC79NXihVYqnNnxwKYe2h 13Dh
oygFWvIdhyEZVNmVnvLYk31d4oJqmE8uFyeqFuUMo/+oJ3klY2XxlQh6Ivyw p0+l
/9a0iOUT3p8uceIlHgyAmdNn9iK1FI52llNlaYlxNel46aeeRZJzOWWV7F6d DFZq
1FXQ0FjICOefpIrFLOiM9g5htpqo+GMKmtySTpiYht1uEifEpeFgEoxEGRO0 OOOh
zQuHllCH3iEgYSbPLNxtrU9qOiTGsYqnHBNP9huB5pZI+mHlzBkjvsp+stYW TdFu
ehtYZml2Osi8rRHLzeJWpts1ytPR+c1gBam8WR3KcFw/CtpxJIRPRGO3WdWi DlwS
JejVqATaUIkiSU52tB0bdiZketIYEk6awNp/xSfbSVtr9l2vQJR/Ekrp0N+I olz5
AB2EDh0JkWWeaai3YuirNf/kg4Igk4HRtgIiMVLqe+Hqj7nhIanqNt1cNNFi Jz4m
yGwb52ASnT5j+zyr1WXUPZVlmQ1UPdbgRfDjWxmWupLpGCXG1lTUUY7hiR7s NqZc
raqODhJWV5qaUCarrhljQV7e/7AgVJJfa/HdON2SKtaKj6ql1jVeKKrXmRVW HtWd
wL1mTG0X6qxsI04kQkYICLIe/5ks1AZo4+0Zo03m8i0QOjaZsHbdXqxOK+6H NjFc
/agrMRFi3ZDo1M3PagrRf87nsUZjkJJfvHzL1gGNhqLhKUHtRAkoo85lP+Fi MdXK
AcLtNQZovGlS1PkdTIYs/fhXSYwtrj4IVdaQae6rqFH/IXJlYuCK69PAmq0h KkYk
7GleJSax1ME5qGlhSnDynr761vD9nNGtC/e121n2iU6JIptm65ZOLKhVZelS 317t
CwNSLQrGVku6zgz6j3MSqtaileadbUhCqQkx6AayKT4iJukVJFCV7SNFpBVC k63i
WwKOn6EmqbaZ6MLgBAu1wDdNJ/ew7vEV7kmZ0ZMAIceoB2x05O+Mol0NakcF kYua
EUiBmkmwYy4p3YDVETQqki1aomjeV1NpIzeayT4xpDO6Y7nqk/ClzIJp2yvB E6s1
nEp1UlyVIjH9z46VIHR00iZNEAXG5JBOCAPeDJwiH/tGz4qWX4m96GdwhN9u 1Y4W
/2IXcmGyNW9y4po1fq0Y+eVynSYo/mRwMSwYOarowhKpGu2nlSnR7BdFymzt GaaJ
mdRrwpnMYh4mdTAW85oB9Wctpm0Jpm3C5a/XElhhui7kWG16Cl0KR8tZptG5 mIQ/
VjGCSC5SKi4eKaagoN5tHZMeDx69cuwIo+znLVIM8ygUn9/YvW6tvvBCXbKW quPI
XKyYaTHZOvKZ6R1puZv2mi224q2luByZgtgcbScKe6VytaePPlTheM/vkluH BQpu
8SLlwthkkpz3ZKQX8tTsQR1Cqu2sPVEHBW8DX4bLmvK2gpsufqYyO+C+Md6W GZWJ
CK2lUtZeUuxVXtQpfuE4g/+zXpkowb7Lqs1PGgfOjr3fmv3elaHWHhGi3drb aSIw
wu1a7BqlgJJgV2SGx1UslmWmRkomr3rEr4Kk4X7ZuNarso3d3MVpzDphiWUk bFjU
4aUQeezktRBrYwHt6LUpfnkvqYHxVSYVYKkVYbEaToKVEf8op93rQZHd1RWF NjUQ
ACWGzn2oPt7nVGlowvyalMqxFMZPVCKn9TQxrCDTgYlZSUlnd/IqU+ZgYQ3x zr4s
8a5Wm91mE2HRPo3z5MRbp5SbKaHY9fUYXlJNL/tZx60fxWrz4loQBM8r4lYj rU7e
W2bw9G7H49VxvvHl6wVjrihLM/JSfVoXML+tTjvzc7b/gMWOddumy1rT3VdO XIpg
baHdM0maGcDc9a3BYNowzwDR9NTJ6zSDnPzK8TStGLphsHDU8SIyJ/WE0JhN ma2a
cgWmH8oG1egUIwd17HMpVANa62/hbuKutpjMJA6Na3bOdNgyZthodZUYFbB+ b1Mf
9P3cb1Pf0d4J4ubJaUTQqZIVET8mbbLt7qJq9/MNClTndvB1GnMHreB04hsD kTL3
CmEfLK8MLTW+S2YX8OZuNDaBayAXZx+mI/U6XkINLxPLHysmztnU9lHjFFv6 cyKf
Vtexagt/nMzoSpv8NryK13w+MzYXFf+ekXeS47k2YdHlU3PD4YS7lKaylGzp OMVl
/9NyB1RKMRAPAmZM8SRBTxmnwqaHhWVI1iFbTZC/fGBxQfl4OlL1ZG/sng1O cpiX
Ms4Ko/S4xh3m2pyRc+3ENLSs5lD5inM3HqiDu/TaQWX9JV5SZCAsrLbf/DYk 9l7a
KfKMAHFZk9DmcFX1zTa12mbqenNufcoAmhTyzCIH//ddk/gL6un65TcvDnqf 09f2
XbFFp3XHvLcfizO8TGE/t5Pqce6h5mMjoqk8Kmenfh2S3Roo5XOEfixgZyNS ZsTd
jfZhX8z5hkpUOxmSqh7vUKd8vsyjUVzoEngSEysNemFiIu2Pja19eqkwFbUk 79q/
CPd6oelImYmmgzB8VVNm5f+Jnu6UUsPSU9pfrPKnY18kjQZu21q7o6ikklIz WeqS
Han1xCFvw7JLN/kq1ll4AZo4XowT/vme7z4yGMYyFc658eHbH8pgMpb0635r OJ6L
1zlght7XZRqLgC6mf+8n2lLgcCaaVzPaLhL3CQOWviE5DNIOdgpz+Dg4Tf9p 5sJQ
tdfZRHJ7Wy35sfVz1XVpGDLqgsy4gxJ7audrtquY0rLJTVK3wIMMcvcdZd3w pjKT
0qRGt3xNKaPjkVrQzcFZIpIm9tEXpX7qwvb807U2Y0p6lcfTHpvbo6YfRLk7 byvX
XA9s81YxqjWU24OhWP7YRkq6Yr4xlooqOYfVjCuYFh3/KVyxV5wfuRr/by5e +8kK
bINmVF7aezM2osR6dPeCOQS2plyyi4Bt6Hsz11ayLcF38IW6ORx7bY1Wyps2 FBL3
8PQJyR/mr21D5j1Vbroll1w/ZfJXcriZ/vDiJEyyrqKT8dWvb3HoMN4VrCup LVrj
zKZ72MuTbb+nUrjHcFuTufPTO3qS9WmJpCWjLh8FuezOv0wxMDI9qXnVmmeK uUEH
LEC0EDiQwMAWBVusIrDKYMODCiEuRGhQocOHDRkKXHjR4USLAiF+tFgx4cGG E0ma
fIhQYsiCDCVSXKmxpMiZBWPSHBiSZsuWHV1+3KjTIEKeCYde9EgyJ9GZIj0O PDKV
/+qRAIDYDIQFsmjKjU17VoyqsmPRnUlxOjxqESxZthFtEoybkmnFuixp3kW6 Fy7e
o2m/woUJ8uXSpBQLc+zqEe9ZlxlfvmVMdGJiwjYnOx6bcS/bnZ812mUJ12xo n3sP
k20MlbTJlKY1jpXruqlRxncjvoZNG2jck4idmsUpVjfwy2bXzm6rc7XKvpyD K37K
9Xjn4zltp6xK9SqbjQFU/owr3m54zsux96ZcenhU8SuJYwzvVKzw0qHHQ/c9 0jJ+
35Flc68+qKZ76ivV1BrtvenKU+o+t3KCScKlboKwq55MGm4/+Pz7D7+hDmSO wN/U
gi03twiDbLYNCzwLtbJuwv9ttdOkw6y8ylysDkeh4sOoNqFcnNGztFaMDsbL tpuq
u4ECSC0sBUkkSD+U2tNvMAv50mmtwabETK7XrgRuKNL+gu+9mE5DkzjZVCMN TdQm
JGlAHkfz0bEOFWNzMeMy9Ew5MOf7TTZK6MpsRDX7m64xy5yUzivocFwTKTej DPK3
ExV9csQEewRtrkZNxE63zXZMMMji9vQRMjKjao1GntyUU9TCVDQpSauwegi8 3UCV
8kEO3WIqRtc+23HU+FYbMEQU1USwM8NO0k+uw1D1kk+bqn0wt2aBco/HaJ1F scUb
OYpMMmDJuhFTC+P0SdrrwkyxWEgpEzZSKetk8Vl67RT/l1Mb8w232wwlLdI8 b+mU
MLhlER44TvbG+xVPpyiU+L7Dbl1SIPD0rO01DaMTTV/AUjWYxPrelTU5fFMm sjmX
o2UzJr1etHS3HDV99lBUbQsUw7sIvS1Ai9dcF8aPgRTMXxKXy3NFoTnL1mbj Ekuv
aSJF1nLRmnlrCunOitbTz7pMPSzRi4WVNUtaGw6Up1JBLElmfPFs71wQw8w4 14PA
oxm486QNjEgY3Q3Y15jrdZC9OS2k0b5073yIEnlrFHhpo0z2Fuprha3ctKAi TwpV
wGP+q92lMbxQQAN5llvEcs9beNUvF9bs87HetG4/bpVdVexKCVcYeNXl3na2 Rzt2
/91BwaHzSjndge35WMXFHAxkz1ukHluE9PaOoV3pnBbxj2heuXS0QhbbaM3S BpK/
2qtrE9ptVewRa1pTFB33knG2W6RRJfamzQ2vRAI80gEjVrWoma1Wk3raxco1 tffp
pkv0c5zFgqOumWGObZUDjNou9z+zMQ1l18OeuCyzpf0Vpzm2U98DfUY35Dgr Kt1j
EmzQAzgBGSpKlVkfweblsQ/ur2nX+dwRW3U/CL2rTzZ6y/F4KL8PDSw7A2si UTr1
uxHmy2qMywj9YvQTRB3RWjLkyuoY6DnGUS9AzuuVZGIXIudRDIFWfN+pQLaj zPTI
fL8Cy7Kso0eT3edta4ST3f80RC28oUVpACpLQbqHkCYJj3+GoUu67Bam1kVn cNeq
yfO6VCQnyQxMpJqWaL64tUsNEFyYfJcPW1WWaolsk0ox3hX5dbh+/U5fsvRf 7gRl
sRy20IiC8V/Q/KRKFLYSOYmSFM1I1RojfYlKYNtfMxmEnn2tzlEKbMzXSiO1 iIly
Zfdyl1SStCSFgM+MFzKS//y0HmYpbIRYNOBlcHO4He5plIsRZ6TwRrC2pS5Y nXxK
OVMXNxwCjJ7xkokEO2WmXeasi1AaZIl4s83X8c8/FxRnnh5jS5GexmiG0x70 ypYt
cyEycPFElxa7JTWxFXGKWuuQHhtpvekNDXbTFIjeQqH/FYP1JZz+q6CCCgUp mWbN
kCh1Kfo8mbPREYtb9ZTOOekjHlKG72xyQeaQPpqjN5HNaxdVFuXqptQ9odKi 3PJU
87qKvxCS8Ee9HJkHfcnP1nQpQib8JG8Kpk0cGnOWfqHSWc9XyIn9zVxHUuSH 6JVG
56jShhuzpWwm9E6LlpGMFZrrlf74vMu6M7SeE6TljjS9J6KuaOGKZXY8xrIx QSxQ
M00g7EqFs7S6c7E+pVqfhhi8PwWXOZSUlyqRu1HznK+4BAzm1eBF3Lm087EG yy1f
MMtIngIpPYIiq1Kv6699+mooNiwIO4dbUB1Sh7kzWaMpJ+UXXebPmkwEJypT dVjF
/6itc/HrK0Ezipfk4fNP5IPqc2mZmKxt0Hc3I6QlBxph715vVnalW5kwiphX pg+7
HU4wnOrowFPCNlac2ux/SqjcO+UwVO1UMSdr59bHVGmcGi7qgBwqYrnYcJ27 KSUL
6RrWmmwwmza+5txkq56tqmq7KLRe5oyMTx/mt4FAZNo8qcdEC/NSpDAsHRm1 Wsg3
NupRIzVub0KE1PG+DXUW9ieNuBnVJ/KyTgCyklxBPOAkYjeUIv6me1esZd/W K5Eb
jWKeX9eUyrZgkjUCYEGxhzxKbe/K8mRz9PJ6rTq7qlYkBnMqxVplMlvVgR2E oIi/
q7jCWZDVWk1yYA4KSwRK+P9BwKzrlGHNvEU1tEaM7DX7Vh3sVvumvxckdJsI XWaG
OXW5melr7LgKPQUbFGZ+TGuy9BRS6pLNzB+JpGWDeWMfzyhrIrRjXoql4z3/ eLLx
nWwfN9ScTWYrx8rMdWolu8TpuvlT0hJ0Fa0dcOv+K3I6ZhG8CXhNg/PbQxkt OPCi
aWNVETyCvV0fu2N4xvgVsHKtzeMgd5pjK58wgSRZ9FY4nJrf8cxeX9vnk52G Ycey
ptK7FjCfKyVguOqs4rnmdU+XDbqA1jbRRSf60ZNbW34R+cNNn3aHjZ50qUcd smlx
XpimjvRERzQvp2X606mudZ8lCm6iVWgiQVtTEstXoh7/+hin4YzBy05ac9Ja 9K50
PbZCP62w4GLepQ4I0BVdacFrfXqCQd1f6yRncHgGeMOXBsJAUtPDh7d85THv dD9r
nvOX73zmPR96zN+x3J83/eUdxF/Rnx70lY9dmWAFdofzx74G3bhw6tMoUGX7 R3Ym
9tnVCsl0YuUljdazlp/dXrnX2sc9dZFi9d3beBtJzDIcE6nFPuisM5z73b+o 98Ef
/v1Uq8ni/1SIze/moWGYy3rV+S91Ol5Hc/RHip/fso9d4LCopLIEAF/7FEqg Hs23
GAyROqqWys7oREuexm6Qks4BVaz9XOv7Zo4BEzDrtk9I4IeGwg4DFfC0JtAC vczZ
/2hLnjww+16mh8wu7DiwBZkFhrYrAdNvmahsMtIIWg7MkvTpZHzNRyLpe8SL 8tiL
B3HLAf/NU9psBpVwCZmwCZ3wCaEwCqVwCqmwCm0CBfSKZSiwQSimytZj6XiQ C+Fn
Ik7ukLRNfJCKk0jnasgFDYPiVuAQDrdhG5KEDqliDvHwCOjQDvXwDvtwD/WQ D+Vw
KuYwDusQD/cQERVREbcjEQsxEBcxEiWREQkREPvQEDEREwXxDzlxEwVxEzMx FC9R
EzmxKuwQFAHxFP1QFS0RFUWREF8xFv1wEBvRFGXRFkexDnXREmcRFl+xFXtR F+MQ
FgZApaYks9oO2UxJsrILS/9EK6JMbvgmwCTQi7uOgvGgjQBrR2lE4gi47xE0 Ahxb
QBwFAhzNcRzR8RzVMR0TYh3F8R0HghzdbHLoUSDqkR4pIR/1sQXwMR/58R79 sR6n
zwp3hyANclMSzgoV7iDRj9jKsSTWUcsEDRawkKqOpf0ciYlwx+WUx3b0goV0 owwr
zX0yp1YkZUFOav/qxBthIQACoCVb8iVlciZj0iVn0iZjsiZtcicBYSd50iV7 sid/
EiivoiiLMiiD8iivIikBgSmXsimhMiqlcirvgCqbsiqxEhCyciu1Eivv4CvB 8iu7
MizJMhS+0izvwCzR8izTsi3bUi3TEi7VMhToMi7p8i7/79Iu8XIv6XICQsEv 79Iv
AVMw/7IwJ0AwCTMx//IwGRMxG/MxD7MbJkAyKZMxK3MyMbMyu4EyOTMzN7Mz PzM0
QxMMRJM0TbMbSBM1VfM0WZM1URMMYDM2ZRM2X3M2bRMMVAE3ZTM3eVM3e/M3 fxM3
VWE4ibM4edM4h5MAiFM5VYE5m/M5lTM6m5MAqDM6qXM6rzM7W4AY/egiVe0y 0gya
jpHUJPD7uEcaK4JjQKgNeSi01pCvSsnBpmgbVqElZ0ESJOE+8TM/8VM/89Ml Y0Em
A1QnfbJAh1IoDTQpjdImnbJBkXIpn3IqH1RCKfQqLVQro5Irt3JDMdQrwXIs yTJE
/0N0LdFSLt8yLlF0LusSL/WSLwvzRfcSMA2zL2c0MR0TMg9zMXH0MSVzRzPz RzXT
Mz0zNCdTNI30SFPzSFVzSV2zNWtzNZ/0NncTNnNzNnuTSmMzOI9TOIVTS4ez S5Ez
TI2TOckUOp8zOZezOMu0Pgdg2grFiXpFv3zpGMdtsDYrsDKisuqTCNHN8d4O kDbE
ofArNVgyAPIBDaLhB5aBBJaBD/iAHKIgA2KAC0hBEm7SQAEUUzXVKJ2SKJWy QT/1
KY8SVCsUQitUQqsSQzt0VcXSK0H0Q0U0VtnSRN2yRE9ULlV0RVvURXk1MGf0 RQdT
MXMUMWtUR330WIH0RyMzWf9Bs1mV9FmNtEmhFEqb1DStVUqxFVuvFEu11De5 dEvF
NFzDtEyl0zrVtDlfcQCaczsHgNlsUKZCxTvNjkuWz6V0y7wY7XawSbv6BeL6 JLNk
reZ+itFgQRLm4AcyQQAIQR3EIBXIgRxUQAREgAtmoSZhUiYJdFMRdEETlEEX lFRD
dUJLtSkj9FRT9WQvVEMt1FXDsitfVVbdUlZNdGbfkmb50i531UVlFC+FlUaF 1UYb
0zCHFVkx81gvk1k1kzOTtkiLNFo3M0mhVVqdtFqplTazNUutVDe1tkq7FVzB 1Te/
NFydU1yxUzq90QQFghiVk9EqEjxVRuWQBuH2S/r+lVH/xJNt5qgFRHK1Em6O xOih
3gnf4KpQJaEcfAEafKAVZOAaViAfbOAWMqAa+mAFLrVAM3ZTfbJTh1IpP9VB JzRk
S/ZURVdVT1ZDVZZlyfJlyxIsabVWZ7VmU1Qva7ZX+XJnFZNGi9VGF3N3b5Ro LbMx
g/QygxdIk1ZpofV4n3ZaU3N5qXU1rTY2a/NqsxZrp5drvRU4vzVsyXZ7yRU6 YaBM
zzYuiHFdY6FdbY+G1kKwRNBbHsa6BC0/znM7NCZfGbBr1ouZECeTSGqsFtIb XVIS
eIABAuEItmAfvKAL6EAN/uAW+oAWKhYnA2BAI3gnL7djN9ZTORdkNZgpRxYp UfWD
/1NWVVeVVV/1ZVUXZkXUVm+1VnN1dvcyZ2m3dnG3Z2u0d43VWCGTDXx3WZd1 eJWW
aTezaZG3NJ22eZvXaqMUemUzeqWXW7fWW6/3W7sUTKlYXKUzTc+1XNFVIAAA AFSi
i7WiTVWBbSfKGInI3aCOusZnXViqu5YDXwNAsQDVfRsLmPhNZOpsYFsyH2Zh BUbg
C4BAGvahCRBYDcKAFOxgFjAWcxm5YzPXJ3HAYzXYVEXVc6cydKUyVTN5ZUnX ZVkW
RE84Vkl0hW32VufShXE1hnE3d30WWGuYWIcVh3HYaH/Xh5kViIs3iD8Tl5E0 eZMX
apn3NY+YameTiW/TerW2ev+ptGu9FEyPc3vRFE21WIvPtou9uAWsOYy/l13l U3VY
zrYSp2QUzqQojnrujpisj77Ak/YKh3XgCXAbgj5bUhJyIREUoRNswQWygJDH QQ0g
YAPgIB8u9WJdsiUDVFOF8oI99mMZepI/14Ml1FSjsmQ1mZOzEipRtnQ7tGVb dSxD
GYXDUoVLuYVvVpVVeTB9tWdj+TGFdod/d0d7NKaRVkiNd4iH2DWZtGqF2Tad t4lt
80qD84mxV3uLE2yh+UyjWU2vWDm9sSCsOZt1RYwZrU0DJ8XOTWcc50/5hNsY qJ2J
KSl+0P/Sza02TpMClvsqQ830djthYQX04RV6oAiKQB//5NoY7NoC6mETLNWg G7mv
OXZBI5lTBTtkOZhkHxqTR/eiM7STT7exQTqFXxcuTzR2cZWyV9RFYdhXi9WV VVpo
eXeWGRO0efilj1amgxc0hbimbfqXpzWnpdZ5q/Y2jfmnaRtLo5iZr1dMnXlc 07RM
zZQ6wxebs3kixrcg1LabtZq5zAeWxpPZ6lVMyuLuKFCbym/rZsV4Lski/DcA ZqEU
FuEQGmAPyOAbyNsf/MEJ3iAMBBqC+bqC/fqvMRhBO5VUCxuTJRqxP1ixM9qi PZmj
PRqF11JmWXfAK/uyL1t2Y3hnefV2VXqlg/bBXfqla/mWY1q1gTi1lTSYM1x5 h7k1
/5X4w7X1mJM5qJkZOImziq0YOce2e58zuJ+6IdR2jCnylQbQxeoIG9vIUKDK sObJ
I8xrFfCueP5WnGMFLBCO/PIPkrbTUJMhGSpADlKgyZs8rwehExBAEnJyU93b QAPb
JgN7YxMadB96zAt7dM38Qhn7KlF3o2P1o1d3pEn5lOWcRU1aZzcbpX/Ws2F5 aHe4
Rye8tGdal3lZNDH8eF8btqd2p3f6eZu4SpM5isE2tyPda5+Ze5H60ruXAJpa uF9c
IwJAXY27XU3kwUrqa4hqcWx80jqk3OaL/6RRqIywSOS2I0VwAW9vIwjXBCCg Bkxh
GNSADpzACSDBFVBAGGRBkf91kqAr970deb4zmLDve6ING6KpfbFFGGX5+5ND lM0f
W4VFmcAnW1dVFJVzVYZh1Nw7W8/5XJYj3M95tGht2VmHdLWX9FlPk7WZl9GT GMQb
/dGd2Imtl6in2Dh3O6nPVZrPlEyruYudGowTIsbrEwvZt2fsVQgPy4RyXFxq 3HZu
J0+HLyssy439DoByp5M8LTXwWNLIcMlnwQ2EgBYmgQ42AB7gwRs+wAzwQAhM wFIF
1CcPeoKZ/Sflu6GJ0kEpedqr/ZLP3Cqx3XRJOHVb9bEjm5TjPEXzss5PmpVl 9Ge5
vnd9189NW1njHbV1mdB32d5H84hdO7Zj+1p9esSnlMT/bztsjbrSj3rFDX6a VWHh
DQKMQ31duVOaUhAlBBC+loymHOdMHMyqwpqdUskLnQuuWB1BVk5P5DkAJCEc KuEP
gIERpOAfeuEDRgEP+kEEDkCgk33Z/VpzF7roJdn1jd6DK9mSlx7NV9bpox7q pX7A
Bdx1Z1bOEXzOE5x28VzrYfmG+TzCcVSmI/O0B73s6R15813tn7enrXW2pdfR qbdr
J93EKZ1sndO3xX+LfePTh3OqTcXP1G0IbfxxnKyrgIwkxeWcc89Ortsi0bmo jouj
DGSt9xgUAGINqiufhgSBI0sWkgIFKEiCFSAAxIgUI06siDFjRkABOHrsGPEj SJAe
/z+aBISSZEmULFu6fHkHUEyZNGPapFlT5s07O2vy/Ak06J1QQYkaHcqTKNKj TIca
DQV1KdSpVKtCnVAVq9ZQWLle9bo1rNYJZMGSPcv1rFqybCZ0I/s2rtu5cru9 peu2
bt28duP2/dsXjF3Bg7sJPlzYsGLEjA+Debz4sWTDkiuDUfUY8+XMmzV77gwa syrR
o0VfLj36NOrSBFa3VvW6dezRrY+0uI079+1VsAbAbtG7BQHhq4bfNo67uG4C yocb
Z778+Crpu6HjZo5c93HtxKsrz108vHTjR8qbP9JxgvIA3K+3b589+XPizqe/ pw9+
PnfbESVZ0gMKFlygMw8S8//Mo02CB0gikUUOXqRRgxFOiBFHFVloEkkdlaTS Shu+
BGKIIM5EIk852YSiUCauqGJRLS6FFIxMNWVVjTZS1VWNYX21Y1lirQVkkGu1 JeRc
RvaFl198IQlYk04m5iRjhUkJWWOWXYkllppZZtpnXZ4W2mpijukabWbCBpts aR4B
ESxtvimRmwO0Btyc9r0Xn3Dc3aknde5tF5122AE6aHd6xpdnn7mdZ15HbOwG y3ji
IQddpd8Viul7l/6ZaHzTPafcNsDBMosk+Zha6qn5pIoqnG422CasDlI4koUR Yqhh
hidt2OFKIv6KUk8kBusSijodK+yLysIYo1IySvWUUzP/RhvVjVl5hW2OPaY1 Frdm
dVukkGzsdVe5aylpV15J+pXuk1EqBi9hi807WZVVUuYYvllm+dlmnH1ZGpgB k0aa
amSWOdtraMo2QMMOPwwxCr8FgEJugw736Z/4bYxdxtfZJ954LXwaHqJ8jkzp nYX2
aVxznzJanqPGBWCddt9pvKfNHa9cXc8iY4wfxpa2wB+EtB6NdNK6cqhrrh1+ yCtL
TgMLbLJBIZvisloLpdSMz3pdLVXSWkt2tmaBhTa4Y6EVbttqEdlWN+PS1aS6 7bqL
d97xRkYvvflapu+++/bbJcBhCoyawQcvjubCBDwum5qSL+y4Ki3EUnGifX4X 8n35
/1msKKI6d76y6J93rh3M6AHy6G3sAaqoyLJfHDqesLdcM84362ZbrL7L+nvw sxqd
dPEhHT918iktT3XzzrM07IknGrt19c0m9TW1ZW9Pdlfep51W+G6P73Zb5k8w d/px
zS23XeO2r3f8fxFGf9/2Bi54/vkTHhriijMOQDJNboCUo1MABoCykk0KdB/D 1KYs
trvcWcc5savPci6lst1tB1TDUZ2jcEMzn21MPp7z2aY6RkINAg13gSJPCV8I wxjK
cIY0rKENb4jDHOpwhzzsoQ9/CMQgCnGIwKlY7HRzMxWeDIKeyo4Tk8NAJtpO UPnh
kwdZh53XpSxQH9MTyUy3G/8qirFSI7tgzZRjG9WpcY1sbKMb3wjHOMpxjnSs ox3v
iMc86nGPfOyjH/8IyEDWsU4trCDLCkkfPplMPx4zVHdy98hJKZCMgbrio5jz ugQG
LYFCi6LsTngoDAKNijyDHdGIJshUqnKVrGylK18Jy1jKcpazbAHFSuYd7+Su kZqM
Du52BzIvgpFTNwTVbSwJQlNCEWeJ9CIXz3if+liQO6M0jqhoic1sanOb3Oym N78J
zjUS0pNHvJh9Fvk58BxqnUz8onJCRrtNhnKUi4LZB13XSfdQMIWiWxnpTEk7 khGq
OSiLXRrDidCEKnShDG2oQ1Npyzk1M5TK3OADSehLPGn/MJqegyQxj2lP1ukp k9sB
GSX7uUSTkXCXeXpnSwt10IfKdKY0ralNb9rKOi2xjJ9DoUbRyclJnixTTRTq IiOY
MUtCJ4TvLOedFNjOlD3RjGK02RFxE1OcanWrXO2qVx8aUf3sk2VDFaVAYbfR MUIQ
imO94AjTWU9G3dOWoKOkJ42JRAkqkpdkLecjYZfVrwp2sIQtrGH3SMgk6oeL L7SU
6Rg5wVVQoq6KrGgXs4NLVMpVpPhEHUAxiEhC6VOgg9qpoir7ncAedrWsba1r 4xiM
P8a2j0XEqHweuLOfWdact+WiyyRYxgmSM55YDekl6UrWll1Viivlk2epGTRQ 0hNl
/6p9rXWvi93CzraP20VscCq40eeqM4ylZOxp28pcT23OrlFU6nTY49FDipK5 5t1t
5556Rgoip7rYBAAAFupfOwY4uwQu8B67e2A/RtRQmhsm7cZ6Mwf686WWLWhJ KUXe
gqbWuLiJVFRdCp+hRtKi81nsBv0axnOeEmb+bbGA/+vGFgd4wHSUMYwDSWM1 2vgI
M76xgX8MZDh2dxtxAEAc3EhkIzMKwXLcBszqhNmdRZg6miMnT6coO4wSd7kE RS0B
kOk6Zv6UqjuFJH5VnFdAXcqCgc3xi9+YYzfHUc6ApPN56GznIOt5z9s9wQkA UAsA
+HmNfga0oE9gHiav8QvbaP/0Fx4NaUgXEc17im8ipVy6eYr2rSP0aOkIWtfU cVg4
8P3iZ4E60MU+GJjSTPN4sarZ8rh5xrJ2ca0HLONb+5jHPsa1rXvM6zv3Gsa+ LnaP
iZ3rYPN61sNWdrL3DO0f93kBmqhFLYyAaDWegNrWxnaiVefkQVJspZv+mWmp eW4/
tfOZZ+2lWz3pXuS2Z6PldaSGq2xllaV3UbFWtnly7WtGAbvWBP83wP8bcGDH +eAF
N7izkf3wYAfc4C5WOMSjjfHszrbImgADAMBQBiXDjOMeB7mStzFbJ0f6Cztg uctX
HmlrfMEa1rhc5tSZX/jcjpm5nSin5dvg6DQytxveLBv/jBMpc6oUkuXtFC4b +VuK
qrtnHew3syn+a4breuHCjrjFuy5sGu944gO3+LP9LXGE7zjjbH/tbAEd6G0A oAwv
2LWsrQ0AudP9vyjfxqNb/nKYz9wDNC+8NXaA+B0sGJQaM6Ze/YTvd38yn+bG 2Rbf
A2bgtPu3SHVilzmYZspj+ZC8s/quxX56iKNex81OuI25HvaLl131tEc72Ak+ 8Lbr
3rUbB7THX1D3I4/c9wAAvpEfHQzBr9wahC984p+P+GnUVmciM22mU307UP8c ulUt
1AKTC1KjJ9PKay2/bUlp21bbu4mPbHPqHQ723NuZ62S/OPwLPvuIpx33amd9 13O/
/3sBaFjTVgZ0twDZpjonYAQF+AJUcALhFgzh5l0IFHkkdlVDE0Y492pmNGXk BVXr
dzqdVBxKdRseBl7o5VROh4JCF2LKpTmqNXbDlnUzuHW393CrZ3sxiH9a53pZ V4P3
t3/LlmcCSIQ11Wd/VneDpjpfUGhJeAJ/l3yA92jNR3M7sAXQl3hpYIU7kAbs 8ACL
t2oYtkQfGGoB9WDbhxzad1dNtVxxdR5zVWpTF1wcw332BlUQBnqOFHUbw196 NoRF
CIh6hmBFJnxqBGmncHxSmHyPxnyNiIVZyIVcmAZduAWTCGUbeFmXFmr2dn4c tV5V
NGHc14F9knmwQGkcM4bSBP9iWVZp84ZhnNgzfRhkfxiItVhgisZGfqd8hBcM Mkd4
hPeIkaiFk0iMafAAx/iFsIACHqOKnleHpJNZ7mFULrVXnfJhPMNCxSV+w5FJ LtOC
itVY8xVFaehpFyWLtoiO6TiAsmVHEnge42RhglJZjqRS9QVDQfdXHSVCbtgo WDQd
SVeHiUJvnDdVQldaBYlv56iOC8mQWhWBR+BkEQmRE2keEel3LXd4iXeFwbCF V3iF
kYh4aVCJIumFyPgAJckOLFBbUdZpU4dC2IhE8mSBSweLDHR5DaQnmcceoMVT jmVI
NfknkxSO6sZbX9ZvDYmUSWlTmMCUTemUTnkATymVUcn/lAfwiFoojJRYB8eI kid5
DuxQB2DIZeUYTfOIj+P1kpyyhyk0WqK2jcABXeqHbmvoU60YOqPYhiumlHvJ lw8l
lX8JmIGJCcEoicRokiYJlnWgmOwAj7r0k1P1itX3S0TXSXLpbi2oT/RoYTqp aTrH
aWmpc3nIYCfjTviRVEfZl6mpmjKFCX/kjhR5HqLSGybWk2sViqdYbjWUJ3jF dOkm
NKU4hqhIVa1oYhFUm6IFmY2kkKvJnM25Ta0JboDXch7gAVsYiVvADpVYksjo hYv5
leegmHXAG8t4W2L1fSJEQaaWS4eUlpkFekKjnm9VYqiDTNw4Oz9llqfFll2k Zi2l
/59VpJfOKaADyk3QuYQxF4yTyA7GWJJfyQ5fGZ7heQ7jJJCUd1GamW9Mpyks lTPy
6InxZoImZJmTZ1LstE5SlUSbtGbEtJwE6qIv+kcGGpu6CGnACInGeJjskJgR KqEs
gA1hFY9tSGFB6X0mho1rmZcnqobwiVecGYpVxVgNdmahWaJoeTLXBKNZqqWC hAmv
2Y6M8pqNJqaN6UykZ2FHakqshm74CGr11lvWqI1vyFlw6UkPxDk+RY7R+JjK 5HlG
CmuFRWs1dmN2t6WF+k3BgAnbtQ1SyHKH95EfuaAKipjg6Z118KDncA4s4KMr OWU5
927OiH0752pl2luS0nPpVP+XqPlB9lmX6hWZUGp+esik+kZ9wqWQZwdntDSo NfZv
PGaov4pNX6BGIIAJIHAef8eIGXmjk1gHDPoAdQChEKqYmKqp1ZpY8GleAulU G7pA
R0oJr1qBJop+VzQB48dAuCSC7HlvWQaTdegzThegOnZHhNpKuzpHpwes+SpL wqo6
Q7ZyNvp8xYijJ8mjPVqtmvqj40ZVk4mTF2aculVCadif9EhQPGNUvMNhmCRh o5qk
MlQzkHVVGSNc8cpiJYtsg1pst8ZizIZ6xCZrL0txvrpsMOuyMYtwKntnMmtr M8uz
u3qzPUuL+gqjXgpHYVqRYgqRTgaPFSp5u7WPC3tWIpv/j2K2V3lpHVcUCvZB Uu4q
TNTYapnCSedqZrlVjyQrcCsLszLbq/aqtmfbqy/rszSbs3C7tnL7tr76s22L a3V7
t3nbf3p7t0KbpYQIkZA2nTZ6hcOIndp5jJUaodTKAudACQgbVtAYmY61iqlq mkna
Vhh4XlN2TmgmOmBGAKUmVbEqQxeFgZCpUaQni3aHsjPot7h6dj4LcHgLuHRL tzfb
a3W7dmmrg8Crtn4be/QquM1ZaIHmZ4x6eNUZsIW5oA8QrWAZrZB7sCxQughk ppCX
blQKOiKrp3Lokm5FYV0WfnJ6XCSlWMY5n5iWohdIsRkVYSfzuiWbtsLLtm6b u7ib
/7O8O7f8i7v+27cArL+EGqgATLyBe7wwqoDVdm1PGHMAm4XF2LgFK6GZer0J aycc
e7matmXSOE0c2MFtyadi9idgxhuW17TdG2qhO12fxU/VaLb6K7y6i8CBm79x a7dt
O7w97MMDnMA1DLg6fMMDvMAESnIfF3JxQLSwuUZEK6ZRXB6NeX3QWEJN9arZ l1eh
W5NDE1lqOUGleGEMJkVfm5sFBUbTVJD1dasVF3ZYt4Owu7M+vLP5S8dip8A6 PMd6
m7I4K4R8fLJH7KJwl3dzV3fI2qjPy4XYyaCW6rjTisHVKrlAWlTDFVxCSaRX Ro70
tVwfPI6wSB7GNTNPm2H3wf/FZIRZE9WbeGpRstOiggzLfFlktfB7wbd81fmR IEmM
Wwmt1OvLmRrJB3utn0l15MefkZlW9fjB7qTGZZU7OsmS7DSNtFmr7FZl0HRV rxzL
24yU28aAB3gEy6esAWuYBGvB0BrMlKuMy0TCoPiuoorJukWrYwnDKixG8aZF 51aB
UVdvmxylGRW2wqHN3EzQ6diEh9ZGUAymahTFSntAqSZiQ9ozpNW6vtRumsiK fjJ0
3ni+/dg6pWuT4du+pty1oieZ5dmJf1rQK72ahBubgaesWCmSA6ujifmg3nm9 mxoc
8bWb2teu/wzCnti0FSWCpuOkEw2gEjucnszJ9fVEMIX/miwt1Q1JtIY7c4rc hc4q
vb7cy+h8vZdIeqhMmvDaV2h1geDrguzcc0wtHZMl0KO2CjRTWfrVU9trlyNa mZmL
UfQb1VPt17WIDVOADYJgDS+NoCEZkpN4mM96zpiKwT+qjFM6ZsPZtZk8mZLU feJq
aUqHUSQI0uY3zyHonmbtoRO7xa84KAP916sNbdagC+ZwBFMgCE1MR0b7ZN+F Tk03
kJSlnxW41iklwvrsUsj0j/YMfmkVk8VMXJrrph6l2qwN3Qa2DUQgCOWBDZiA DTCj
ixi5rF3IlVypo9L6oNSbqdN3oTinRLtJnGfKThItZSZ8kGlFgnS1QkN9V5uE b+KV
/43UDNXR7d+7JwiYcArnIQhT4KWHndiK7d0nyZXTuqPfGZYPXdRC2dMiTGVw tZ6l
nKdz6cnDJMYZU6XmxkKWFlSlNJ8xebqp09f/zeIGRgRMeR6uXd2MguDDqOAD i5jn
nAfTF0NLilTyqN44yX5h7Tk8KUxx6tHJhGEoyrWXhtyWN4+V/cnP3eJVTlge gAlx
kN3nQQmY8ACu6cRT/F0/yWkiTdkNdJ4eeEQgtofN7VwdFFKhcByvk1mexaSl PEVi
2KpDPWHTQeVWDuisJQhEoN1S6IgfaePYyeDb6ZWLqZK39EQD2dP0NOlzeWJN jbrN
1U9IHjOcFdex87B25Y1h2P9LGjqaqE3Zfx7oq15TSVaIjILlB4qREqzLFMzg iw6h
l+iezChiGcibbGjJZ147S42Zy1GftjSymY5W6mXpZb3sowNcWKpH4WbbtE2R 1F4e
2H7t2c7t3a7t3+7t4Q6b1i7u2h6b5c7Q6B7m2q3u1g7u2z7u7d7t8r7u4Dbv 6Q7v
W/Xu727v8L7v9P7vCfhnyouA5yGj2R5pv4jVhanYi/0AabDjkc2f5jcfFSvD O+eT
ujTW8XjeE11KmcWZml7GUW6e4HplZD61l05EK8/yLe/yLw/zMS/zM0/z94EC jLJt
DuxtMHPw8c5HhPRYGQSUygRP+mzR8JvUD9uw/NjprYP/XGdJSiqm31Ivrha2 KR2/
RxLJ7rJE7njU9V3fZF+a70Ur7nME9gsdR+Cu9V/aaEnr9hKJ7XDf0EibixWZ tHMP
9xOZ93WU92cfSAd0Hklscq8OkQY6czI3c5E2jM+H6MLI8FpdubbJV9/LWwA1 xpIP
p0VqpqDVdJy+OkdXHHHoeMz8XJ0H5PGbjfv4gbaxvSPcsTUP+7Ev+7NP+7Vv +zHU
G3eGd3pXdzxvHpEmnYlPcx6AlYiXy4tv48TImGNeXvz85PG7j9cM4vxUzWX5 RNB8
0RVmZaimVvM7TNthGw7gAHMg/uVv/ufvAEJQDuhf/sTwDg7g/u7/Du+gBfRP /1oQ
/wFooAX7HwH4j/8RABARBBaLQDBesYPxePA4uHAhPh40IE6UiM+AxYsG2hng 2G4j
M43tlBgAWbIdM2ZKUq5k1gEls2Muj7WM2aHmjWMxj+Hc2fPGDS8/lQm9oUzB DQUK
jCJNmvSMU3fuzrjTQdWqjqpY7+nY2vXe13szwmKYQZbsDHto7a1lu9aKvWdv 4z6b
a4UDXbp3Oezlu5cahzYcqP0NTK2NYcRtDidow7hNiceQS0CmF3kyvRL0MDvb TI/z
Z9DORI92xkS06WaomaRmzZrJmGawm4GLHZs2uDG4dYPj3RucId7Anwg3ZIif oSfH
jfNj3pz5hV38oO+CXn2XPP/o8q5fwA6Fuzzw4LNBGV+ePBT06c9nGw+lBawB R+Qf
iQOgFhgAL14AiDN/Pqb5vhBwQAIFtMaDA63ZYUEGG1wwjR0gTOOBFgIYoAUC WtBw
ww0z5PBDDTPMcBUPO+SwRAJIDFFFDElc5UMRQWzBxRI1ZLHGGmdMUUP/5gsA EDYw
rBBED3cM8cgWRxRywxtfNLFDJ23M8UQXoRyRgCNamMOBWSTpUhIwvQxzTAfK LKdM
NMt8x4F32nyHmDff0WJOOeWMQIs7BRqoID4TQoiHYhhyaFAeIJKIhkINkCgj jvDZ
SCNIPyJJiZNOUumkl1xCyaUOOO10ppxsChWnGzogdaf/n1IdalWkkBqqKViT ikoB
qaKaKiusctWKK7DEEiussWYoCy0M2mrrGbiSrQsvvPR6Zq9nqYlWMGoDO8ww wA5T
TNttHWNMsjYqwyyzyzDTzLPMnClBNM9Eo+I0eEtrxpl5XWumtXtlg20Mfvml LTd/
c9NN4N6E+4244YY7jp/kjovuYX52gXi66rK74DvuvpMnm403hsLj9tQTWb3x KozP
vxMWKKOMFxY4oUf5AIRZvm2OqLnmmXP27+Ys4dPxxRRFdDLoKomWUscVk0Sa wyiJ
VPrEJ6Fesmgmnw5x5h8n2DCAqKsUkkUYrZRRabC7Fjpop0HMskxJTIjmh2VI WGYZ
/z7IiSKDGLggZRYHzkxTTTWJYRNOLeosfE4838kTTzz11BMhyCFfSCGHJiqU Inws
wsjRjjryiCSNRjKJJZVU2vR0mWDq1CbWQ83p1FOVOWaoomp/1SilYHXHKQWe mupW
abK6h6qtuOKV16/EMuusYtU6lq234LJirro4mN7ZZ/7K3i/uBwMMsMG0Nczb xh4z
X7LJ0r8ss83WXdczzdwd7V3TRJvXNCZQo3c1/sdYrbZ9wYY2swnYbnzzm+D8 5gng
GA5yHJic5TinORKTDnWiYx2LaQc74dGYPD5mHp3t7AgDQM97TjafE5wgPwBI 4cxk
trMCDWgHX9iBNWj4BWvksP+GHoBQhBw0DZMVSUZTyhERmza2GDVpSjRaGhNb 9EQQ
qWhKG8IakFrENSMVkWlos5rYoAijsi0JiUkTYguydKZZzOEHmRAAIdQhhlTU TQUi
mAcXJFEmIfwNTWtqE5z6aDjFzWlxj8MTQQrip4YoJFCEikhE8HGoR2qOIxd5 1EYs
6ZHRXYoZmHpJSzzJqZl8SnUxKdVOTPU6VMlOVT85Su5aJY1YyUpWU6nVrbDi juIZ
zyu+Sp6vhrWW5hVrLUCQi7KkRz3sPYsvyvwLtQgDPmslhlvbMt/5wKUZcpkL m51R
F7u8SZrShLNe+7PXvVbjvwDmy18EBNhuLnFA4CCwOA3/TNjCIsgciEnsYRjc znWu
A56Mhadj5PFgNrKEJISuAhYoKGEAUDCz+vQnZy/MWQwtaiAc5jCHHmiQCcP2 RSQ1
CaE4CqORxAjGk4pximkrEdCU5qEqBklDsHiSEsM4xJsiiYteXBraTDq2tTlA Ej/w
BTR80AoZXGMF+bDBLTJQjX4EwUx6dIDg3jQ4QB5OcXISJOMcd8hDFiNQiSSU 5SaS
uYxsrnORkpRHKFUS08W1k56cCV1b17qcoBJ2tiPKq1yVu1g9pXdRqRWuqKIr XepA
LMhT3rDMghbnGStZcpne9JalTMz+pZma/Z73EiNNxZDPmpaxjLnI1U1uwg+c o6kf
//7klb/W/O9etanNAP9VwHby5p3xZKACEWYc4DLnnviMTgUraEF/XkyDHeRY eNAz
niytVEgWKiF8QqgzioZwGxflLg4RhKD3oOBrSoLaT6WWtJQKaUdG46IWf7bF FeGo
iTEamxlh9iM27Ihr5x3i03ZqJRUF+EpeQ2h9fXqjLOVxFsVgQCC2sYV9dKEL dFDD
H25Biz7ckap7ZFOc/Hg4xHU1T4/jU1gRIp9FLrKshaoIJBnVDltYMiSRMokm OamS
DijBUy2xCU1oIipSBtknP0EVX5Xh11bGklZPqWVhD4tLrXSFV7ykMlnSYg9h RnZ6
xqSeZZ1lF72E2ZnVgiY0Df8jPsVAxjHoi8y43Hyu+K0LtaNpFxXqB69xroac /IvN
a2ITQIC1M7cGLFgC53no40BQgvmkTsQqRh3ubGeDHSyoB6GgCfQcFAAAONKm NwSf
hp7wuj3K7qhNnTOTLU29Nz0blahENOnKyKVPlK+BSyolGuXavj3C79auFN8C z6i+
UqzvR5/mRFgj8UXbaIED5jCLWfxiBF8AgjT20YQJqyEMpLAD387knzStCU7y +SPh
thriQTrOIPE4iHwY8qdBQcSRLEarJG0xyc59bpMiAd0mV2K6uaLux3fVySl9 MmSc
sArJuMNdLHfH5FtFRVeH3RVYLB4s5mH5ypKF3jGtYNn/yublWcq8SzPHrFnC nDl8
oS1fms9HWvWZ1n2c4WZoVjuvcMJ2z6nx32z1BcDZ/HlghC40wnyb6IVJcIIR ixhy
LWid5W5QoB7E9Hk07ekWbJrTM2Woe6x7av+UGuwVvWh44fshJx4RbNJ14kl9 +t6o
vbTtAC72kWIqJJoyDe3qXXWRyuZSFIWUiHVPEtCilKUtSSIXiVBEJ2zhgixg exzp
gMAG7KDhvslnj1Z9k3yIoQXChVjEjTMkQUwv1hMfAVCMlHfmIuliReFbxp/T N0ks
hSlMmY5TdIWJjwtuSpwYnFRFmZ2RayeNVyWFKbTq3SxtJRVc5UrKX1EssKgc LLUI
/9NYyOL+MZE58jAzc1rVwta1rKUY0JbvW5FpM7myqS5zzbnOoXGtzu9nL9ny /M9C
/3NuCGjAMeAtBEKghGEgB7KnRcMn6VjARtOODMKYqWuuD7K6DdE6rVsRUHMP Cxm7
/+BAD5yPChEvIUI2qUk2r6k1kgo2VhuaKCoiVjuSMuKR+wIS/XopGyQ8JqGv ozmi
VxM2L4q1DGG2MpkFfdCHHigCJNSHIjAGJrSAetgEbysTzXOAHhm3+ZAT/5gT +YiA
I+BC/9AT/2i3IxirQPGPiJAPGjiCNDwCAzgCi/APjpCPdmBDkPCIkzAA0akU 0pmr
3esU1SE4ndArQVyl2/mr5f9TAFhiPlqKuKo4rOHRFa+IxMbKOCtznhlAFreY rGUJ
ObvAC2nRC84Kxe9BszPrFpd7OcpoP22aOXQBjXZZLdJwrXrhs9ZAJz/rl6Ab OoEh
mATijQUCjkN7oKQbrocpRn6KtOyQtKnrGBDqNK2rEeryOlEDO7H7wFFrgVgQ L7ij
tSgxr7SRIsNzGsPTIvmau7gjNvPiwbubqWLLNVhToqr5L6EJNhgEG6rpOypq gTOR
hFJYhENogD0gg2/4hiZoAn9wgjcIA8yjwiOQwoYkBs/zPCw8Ai2kyC/cwmJA sbBC
MXcTKx5wt49UPf/ABziUjzg8gjmcj9p7K02Sq9NBndT/0YlRCrJS2StC7Kui SDIl
2x2eXMTDkgYoqzhdsr7kwTjI0j62AAJj+jjusyyREzO++MQxK4zBKD+VM8WW Q5+Y
28pzSZf3+Yz5cwY7wzN62R89Kyf94xcAUstA241dhCcCdKAHCi5iJK5GkxgM yiCA
2kvxAA/08JiD0hAL/JAMNKEPrEZrDKFUC7z+EhsUmTUDK69u9JpwbEEosZoj ejsu
ursM4RoByykcpMfCQ68uOi+T4kEh5JIUSIYKMIbVTAbYfMJB6AQE4Bsh+LaG ZEg2
ITdy67we0QL5EKTg9MKC6JGMPALKCUn/WEMWQ8M3ZMM2ZEM5pL1+6zc9/LdM OZ1Q
/1qdghMVUSmlvUqlvjqKpdDJpni4wYq4J3tE6UMeixsW7MuyjZOspuyyZ3FK 8CM5
aukeazGzaSrFagIXAc0m9nmfOHNFWAyn0pBFPqPFPsuX/WOn/xu0dyo0eTo0 hQku
pWM6prsgvHw66nDAZQwPjmlGwbRATvOQhfoYk4GFAAgAF3XRF4VRGIWFGJXR G7VR
Gt1RHu3RGH1RGd1RFzWhLOpGtJuinJLHn/mpwZOvnZKuMoo1GeQ1K2LHYNPB KBUp
JfmvqDnNdxyjecyQBBMqE4CAGjCFYVADNUgHJ4AEV0ABYYiBhZxCiYzIIyCc 4OQq
4OzCO9FIjkTOePhTQFEIkP98COckSTZ8zpNMydn7iEq5Tk5CCR37JFD6w0A8 JeEb
PpxklSQ7xPNkPsJiRIprT6+oPl6Kz6PkuMlSFpCji050Fr/Inu0JxZSLJm6h BsbI
1fIZ0PQZl2wyLfgDS296l9XSn/vbuVoEunUSNLc8oARaIGjFUONQNOfYhSfA ywq6
gGz1pw2StH+auo8hD+jCkAvMOqwzmeqKj23AmZ1hVw/EGXddV52BV5xJNSJh QRQs
KX11L5Pyux68V/9qmgArPPbaNf/oNQ3ZryI1EgFTtTFiqVtbqVbDtSdKTUlw AyGg
hUmggw2AB3iAhA8wg0aQhb3pG4c8WYZ8B4ncU9ELTjz/Gc4tRLHjPE5FCsmH WAj5
yJw1XBSTjE6ftUNJqUN/8ze50pRP6j1R+j0g4wmfCIoiUzjyVD4la75akTh3 CJ6q
YM+Ko75eSR4MyDjIep61aErpCTm8eNX87B4y0yxSpKZtgQyXy4zHqIxedb9u +krV
IlbWGo37UVD8wxd0WksBwsWh0y24lCffmsukq1YFbLrpeLqKmTSAGo+O8ZhM O1G0
OdfCtBAmBalau9df+7t3DNOmWagl+dwl5cECM8dVO1K1y5EbudJx5K+Piqmg CYDX
jbstAsd5JFjV5dIDGzwZQTwuCYdK+ANgYAQp4IZe+IBRwAMkGAZZwDxwIzeI vFOV
/63TLNzCPu3CmfXC+ZhZQVFONETDQjFJzYFDRmUrO9w3opVUPqRUH/NOnQg+ 2Cky
vqqdqB2KRIwVnpSKwdIBoLwlSEysovwVYQmLYSEWVcVEuaCe6nnKvthPtRUf /xQf
x4jb0XKzcoEzmuumYS1WcZKX18IX2UonQDsE/9NFZ43LhEGOeprWBDRGfdJW qEtG
yQXXEiWPwCy2wvQZYJMaLXW1J8mi0DQRC4G7LYXMIl67FRRexlSpMCIwb7zM emwp
LJlBmaqQKCZNefzdxuRShz1S9CqjoJKEK1gDVLiCTxiCIDABWegHJCiAAqCA KNwS
PeIjNzE3rVocEfuqEoMchf9oCEa6WZ11pENJq3bAiEuCFH/Tw9yTVKM92pj4 Q7xa
2lPS1FQxsk41T1mBJSd7Mq0Y1Uh8TwywvmJpnvnMxKW8LJGT4L4QRWwhjFt1 W3AJ
UK301VWEP7y1OWK9swUty789YZ+rrX7pl8I1XMRFXLkELmpVunzaVgd8wIBy Lg+y
tHElvM0dgCXq3WJ7TPKy4i6OQWzUxpEK49xtzBycmp1ikaKZXf5yr9YFKi2e roG9
UmOLr3A8MGX7XDEmTRJZm3KYBUvQg3DAAiRAAnRY6HkQB3HQhgOQhDzaMDap KnH7
IzrpY69qHD4xPT+RnISIt0Kht3pjFEiJlJAAWqAd2kj/TYk+tKse+z1Ssgme ILKb
9KtWmVqepBXCsor1JNXjIUpfeSxh0bgGHltOjIu78LLwG4RYdqZaTbmrdFtr YjNx
eTP2+Yxe9gy93ds8U41y8rO13L/bKCCiKzoDpCfkQMAZdtzjQi4R/dYRxTSQ gYIj
oFEcxWsa7ToT4t2HlbsWoYR4vkwj1rvbvRAP0bWJBSNwHhp4zueUAkIyopr1 +l0n
Wsch4TsbEbx7Tq/IDGJgY2KeQqgz7pIg+BLTTm0woWg9xio+5qo7GT1AjoB4 CCt2
e7dCdgiJYLFFsYhFzoiN4JxLal9Ixk6A66TVkQmCKyVUQrhNfu5O9tRP7emr bcSs
/yBl97yHUyaL+NS4ot4+e6isVjXb+wS/qNzPZ3qm/6TqU4RbreRKODNQBE1Q 17If
Wsy//9kXsj5mFgaHCvUNYDyYB3phtjaE4ormZIw08ODWEf2ggkKPAUCBAZhw CZdw
Cp/wCWdRh/qisknsWLOpX/vGt9sablZdnNLBbfRsl6rMIxEpners0GwveqbS /ErY
o9HsF1zYG1znpjGvJQbetTOjFphoii5y1naTPa6TNokANBixr2I32o7ygxAr RUrO
kbYFzHG9i3A9j3AUlf5y4maJ7OSx1dGx5L4rU8nU535uaWgVN4eVG9gdUOXp q70K
xCoe6hvKi+NuX1JVt/g4QP8H9LywngmGyu7hrP5UjGxh77e1DPV5dG3yYNV6 xVj0
W3kBhgVNDdjKP9rS72Nm1t0AjksI8IP5xWZ+goZpXA7VJ1Znde34J26Va78E mfbA
tJC5tOeydfLwKLPxwcYe8bprL9FWmg2HwSuOImMjqRjpYpBy4v4a8TDl8R+/ mnpO
2BppWMks7G8uL8amtRYUXSdZGyHABWfLozkwd2c7d2dL93TfEhN4BxNwADRA AweI
d3JHA3iX93lnci1Ag35HgzVgcoEH+AgIeIMveIJYg3hQeIZniDWwBR5YA3x4 eFuo
+IqHMYuHsVmAsXZ4AxjTA48A+Y5vBz1QAj0o+ZPXgw7/QPmT7wA3UHk3cHk3 OIaY
r3mbl3k3cIMb0IA194ef8Pk2D3pElIaghyWiB8rgIfpGJCyuyIKtQIWvQIVd gfp7
gHpU+NqvtYerJ4utV0oMQAUrIKawH3uxJyZi4gAgKHS134v+/B63V3RGp2r3 +9X1
oQcqKAFHoAK9p4K813tnyHsm6PvAp5/8cYRNn61iBrRPH4NLYPzcMIRLiPxR n/zi
OBgBLw7Mf2ED34XNt9ZW//xXl7oFB9dw9cu/FKiPuebUZ4EQFKMg9/Bgj13M fEx9
5pBs/BqKjUd0JM3RlLVfQ10tIjYTjxLQnCLbfRGFfeLhF/Yv9XDAWwXBJmPR LKLo
/5LdV3tB3I99becvXbO1wf5Bws7M0dap0qziAoNi0DznbkfxsSE2wmsp1/e7 Vptd
2Zf+tLl/f10vYJNnw+7B4NVngCCwqkULAgQFGiR4UCFChgMJrkL4MGHEFgMF KsxY
8GDFghMrSnSosGLEkhtjDbBoMCFHjyMbJsSosWNGlhpVMiQYIOVCjTAfqrxY E+jK
kg1vGhWKs+dLjkdX1vSpNOGRqlaPBADERiGsmx5tbgwL1qvIoU1zhsV5VGmL I15t
Hr0ZV23OizSZfm0KlqXEvRD9zhwr1mJahxRlBt3b8TDOpIh7FmVJki/ZxHnB Oja6
EOTfylHltqBEsrBTl05HP/8uG3h0adOCPdf1y/jlRLQbaVK+HZI2XtC2fSrc iVQw
VLJ9M3ImDPczQVgoDE41LhXv685PDZ/NWxm3SbV2TV+1mnWrwAC9P3df+jT5 79+I
2Uc9uq0sW7SSsZslHTYpc/RjMYbEF2qatdbYbdr1R9prd8EmWWr6HdgXg2+d BxtT
MU02lE3pwTVhS8Dhx9x/pnm1mEnHxdURf3IxuNZsBUI4GG3HfcVhTx05h6GA GBr2
HYXAAbjYXw/txJZdRUGkn4QtLZdkdv4BdeGNiBXnIUHhVZXVBMExBpN0FVJ4 F3Rz
jWViam5R5iBrdJWZm2YPapdhanOVGFebT6aFGY8bUWn/mZgg4TZlVDQBCl2M F07m
I59CCvUni7u5F6KGII7ZIqCFFWdfe5vi+daKMG53Z3RBglkZkg86F6WFxEmZ KJzp
LQRLSmNCmGmpUr1YHa2TNmYoiEuJ2BaW4x1knocnqnaimVMJiVxDhTY40Hyw Kqnf
kQxaKWOC22oX02qQ/Yqka2BGCWefnrrUJJNf5skfYENRMt1/qgLoaYcfbqbg XZaS
yNuMPq7n4mnveqsevgPbFjCn8vKJ4MG/CocwikRh6+trXn6GkawziaUqgstF 9mu6
2op8XnECxdukTDJhiZVWGJk3ksNlnewZnAavap9QbsXWWWFymppwoBnq9WeK Ava2
/yuBsN47pLe2hpzTY3Q62ymtle5K1qV4efhTmqodHWhpjfpsGbfXgWrWnB4D pyKt
ji68X3WbSTi3k9su11EsKBzar2JfS10x3UJt7GW5jjWF7VkrA0vYZRlqxpmi QanW
b8vENreQbHBbZ6WOgXUb+bgjWUN348rZjPC/lfOK648c1pdg02TWSfHruYWY 6bx2
+zZ3kOqC3t2E7zpLr9SbOjjzdJqyG3jB4DZfY8NyO7xkqKXZ6S7A+xIgHIFU 19sv
ieZmO9LGeil/OvaHctf3877BSKWQBl2u1UbmyfQp8vhCmxqBFmKqNm2526Sw ViNf
gY54mlPcXIaGu0cdSFDJ2v9duBilNUhFcE3VYtYDHwcVo43tYjLbUwBrlhbu qYdo
qQOhq9BSGziJZkMedBz7bjY597TvPb6rEEt2QsL4sI526zMOfHxYPm15jYgd 1Fno
xnWcFpXsJvXbik6CdcDowE+JWQyYAKuGJuhFEUic6lK2bEWd2JlJfAqqXN7W qD7U
DbFj4XNeYpCFLlLVqT30qk+f5ojHPCaHajZDnKGAR8TpQVB+ZoTMR6LWH92p DYoi
u44Or5iQ8zkPKEyj1h+TFLLHaAaTpznhzf41L3Dlr28AJOUBEXWlYQFiAhWB xdZK
OSPTETKLRzSgTXhGosgxLo0+kxPbPCm51nluYc+Sm8f/NlRIgw0vkMu7GWPK pUUV
to1OfZyZEEHnuv8hxV6MtBsZF7jIHp3TfUzL4zizI8jWvShoauQKCsqnwLR1 SzkU
e55wBAnFuvXmf4cxXufyhrFn8c6OUwzOIAtGNbEhp5VnbJLg6JdFrr0ta4f6 3CLF
JTRHDkl5D3Qk4Komqe+8s4l5Gh98knZMTLFInr2LHfgoxRmMRVSRi5pjform 0eJJ
74nVKhuZmtnTGU7tIxK74QMDwDfvLKpHJMPnG70pq3tBDYDQ4o1iIiTO4Ziq Wc+L
yEILEjNzevNHNNuUMDsHVvDY5qZdDBV3sic+cCJIWbd8XwoRys70NEuP6UTr 7S7q
/zRJBQ5Rf5McimiI2MfFTYtLdGzrqGpF3g00eWXb7NHCWLKRGpV6S9lbx/y2 vLSh
LT6BbU49TWdSifIViGFMHgob11agMk5Y4RkPzGIUtp+wlUaYqayUvIKmLnps fvkM
6WlPisGNXjB9oOGjiGxntgLaJV7YdaEQtalJ6wGVuJ55YTR1daSBZSamywXu 2YA5
IPS1qz0K7CoOV9bWlqqPTmL6S8QOyU0b3VWVbMFkXY8aTh0ZT6e5XddIe4rT ypS1
BV0BZu8otM2wQiVrSzNgWKxx3jTibo8wBQyrKCjNYKZTYc/0k5oSpi9QavY+ PSue
ucRY4coyFq0fdB3H/GnLGf/rK2jKEiTwBGO087bGSNnTLA5HlkAeIxZWzikQ 0s5G
WZzWraWkrc7wTHcx/bGqcUkV2Gof2ZGFlgfDNCxUMwma0s9ez5fjZWaMlIKs Sj73
zZstr4UuJcJIZiy0vxFKUVImW1zt05olfJgzKRc08LU0tZDkoXXbGVkSBlN1 1/1W
Yk/5UQMXVGaMXidMW+BUR01thGqTXnO16FTvgNSuUFYiSokiX7YZOctTrd+W qrgj
G38Ve6pyb9Qs+DmF8OzYpX1fbn78Q422Eq/O5N73kknl8oZ2V7ys3eCON6hG c5pS
nRpMeo25INrqCVjlHvGwGd3tVi0y0hm7Ea9+x1yiai7/j5OGoNkaMuXNygg+ TQNy
s0/36pz5SzffZR78CHWudm61z96K8IQxOCfUqnmVjebpRnjGr1XeGKT+wdkk YTfr
5qHY0Unu0ILpGqC0mmbDJCey265bMGweWmJ469pMWY0d2Vz5YMUMM1Q7c1ON H/o9
OtPT/LqstTjwRNsERdz4bv0hHV4kYixPl9PzPUHIKjY21Mr40/al26sQyyBn BeNA
s9lCN+40yTV0yRG2LhKwwCIAet97V2B+WN2M11bRRKS44zRwbl1Us2VeNcFA LrzU
wkav8kx3dOOJ6MGUMrYN/KSbAf+5mhuWxh/rlNieC3CVp7B1RsTtvb+l+Eqt 1NsE
/9mb5Ycux1syMVxXFvSOhTh2llBcUCqK/em56qoo2Sh8m7+S0KmW9wAQAEvd C0Df
FQ4hov3acY2vmsWNKtBv356ZbVea8gPqQtNCb9+DYzYPsXN83On3alS3/qw3 6VkN
1eaI9a1uSlueV2pS2ejVCmicj+bN21ABy33A3rkUSbv82uMpmqo9inV1FPVE oN9Z
HK9VBP6wTaMwGf5NFt6sCoPMB37kht5FX8tcRfdUn6CklOSJ30MgCwAczG6A V78A
AA3SIG5NTlKZGdcRBAAg2N0pXP6k0siY3O8oCg1CW+Q14cehywE+0qK5zZvg H6Il
kfqA3nQRTG1JCeyN4AgVmP9JvBoeLSAQohizONnD7caUcZgbvYsDLR7L2Zqo 5VsV
mhEFnZ142I9FVB8kjYiYqVep1csQihxafNFbNUcKqqD0rZ21FUQODhUTgpFC 7GCk
+AxfGQQlXqL7TNLVwUYnTlUCUgc77ZBPiGLoqN/PyY7JECGS0RkAHljPAZL8 GVKj
HdPazM7Q5SJo0BdTiFLDYda4gUiXec+09ZSJJE10BVWbMVgxylBrCNIUJcTa nQ6j
UEZ3BOLWlMigJNJDeFgm3kQANGI5HgElitZsSOKmpOJvCCERgpxNXCI6Ulop Jt5n
XCLRpY6LodyvMCFeeRObEcfhnJRa6c+8CZcyLpBNfZn/STFWGYkXaKWYyKgQ CW2Z
a7ki4O2PRjbPv0VKCHLdbOiZJgaUxcme7b3SbvWhhLkUOekbzgmb4Cmbcb0b S8BC
yxBACOjkTppDy3Si2bEEE+4ggOSgDq5jUVqiJO6gKCIlAXBiEB5lCxilDkLl Ukbi
VWYEUkrlVlKlVEblDkZEUc7jOnolJW4iWWolUj4lVXalVpZlKkrbwszfxyzc 9FjM
j0QjyImP6Y0i8Z2O1xRT9cROQQ2ZHWmNjDTgMBkhc1WhYsrg+K1VC6AEK3Ea gumj
annLwnXfUBFbw1gPI6LdSp5V/M0QmzxM+GmRvVihnP0GOWKJOYRACu5kbPok +IGF
/1Vm5UIMZW7uZlcmxDxuZRAGJ1e+I3Aap3Bu5W9aoldCJXISZ1oAZ1AGpzwu pxA+
RCca51IWZ3UupwEikD6dkyQdz51oG754SVEV2TKCV+k5jnhKB40kHKydppod lKq4
Yfrhp4w4VH7Gk0wcnKUYkmqGmu19WZVFlVb9CDVGBAeKFxfiWniNUo3N018k Im/A
AmhahU5exWziZDuiVHDuJnM651sOJ3PSCnByZSSK5XCuJXey5V+IJVVu4kYc
|
|
|
Re: Limitation in number of nodes in a graph [message #106891 is a reply to message #106830] |
Tue, 25 November 2003 14:07   |
Eclipse User |
|
|
|
Alright, I tried it out on my computer. Serge, you were right. Scalability
in GEF (I was able to create a large Logic Diagram with 10K nodes -- working
on 100K now) or memory usage are not a problem (although performance
certainly is -- with 100K nodes, my computer has been pegged at 100% for
more than half an hour now, and it's not done yet!).
I found the problem when I tried to create a Flow Example with 5000
activities. Here it is:
at
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
kAssigmentSolver.java:30)
at
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
kAssigmentSolver.java:30)
at
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
kAssigmentSolver.java:30)
at
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
kAssigmentSolver.java:30)
java.lang.StackOverflowError
RankAssignmentSolver.depthFirstCutValue has a recursive call that goes
through all the edges of all the nodes.
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:opry7a3kt9lhlh26@localhost...
Hi,
what I posted is the full stack trace as it appears in the .log file.
Eclips do not give any more information about what is going on.
In the attachment is the message that appears in the workbench.
!SESSION Nov 25, 2003 10:54:09.587
---------------------------------------------
java.version=1.4.2_01
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
Command-line arguments: -pdelaunch -dev bin -feature org.eclipse.platform
-data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86 -nl
en_US -configuration file:C:/eclipse
2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
!ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
!MESSAGE Unable to restore editor - createElement returned null for input
element factory: org.eclipse.ui.part.FileEditorInputFactory
!ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
!MESSAGE Unhandled exception caught in event loop.
!ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
!MESSAGE java.lang.StackOverflowError
!STACK 0
java.lang.StackOverflowError
---------------------------------------------
This is console output
Unable to restore editor - createElement returned null for input element
factory: org.eclipse.ui.part.FileEditorInputFactory
Unhandled exception caught in event loop.
Reason:
java.lang.StackOverflowError
--------------------------------------------
This is the source code that I use to generate .flow file with 3000 nodes
public class FlowWizardPage1 extends WizardNewFileCreationPage {
......
private ActivityDiagram createWakeupModel() {
ActivityDiagram diagram = new ActivityDiagram();
StringTokenizer tokenizer = new StringTokenizer(getFileName(), " xX.");
String chartType = tokenizer.nextToken();
if (chartType.equalsIgnoreCase("flat")) {
int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
for (int i = 0; i <= maxNodeCount; i++)
diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount));
}
if (chartType.equalsIgnoreCase("pipe")) {
int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
Activity previous = null;
for (int i = 0; i <= maxNodeCount; i++) {
Activity current = new Activity("Node " + i + " out of "
+ maxNodeCount);
diagram.addChild(current);
if (i > 0)
new Transition(previous, current);
previous = current;
}
}
return diagram;
}
.......
}
File name that I use in case 3000 nodes is "flat 3000.flow
---------------------
Serge
On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> wrote:
> Please post the full stack trace. thanks.
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
> news:opry5jr9delhlh26@localhost...
> It does work with 2500 with the flat graph structure without any
> connectors.
>
> It does not reach 512M when it runs. The highest it goes to is in upper
> 300 range
>
> Removing min memory size did not help.
>
> There is no recursion in creation of flat structure, just a loop.
>
> Since it gives stack overflow before it reaches upper limit of memory, it
> does not seem to be a memory consumption problem.
>
> Thank you for help
> Serge
>
> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>
>> So, you are saying that this works just fine with 2500 nodes?
>>
>> I'd track what's causing the StackOverflow. Make sure there's no
>> infinite
>> loop, cycle or recursion. My first guess would be that you don't have
>> sufficient memory for that, but then you'd get an Out of Memory
>> exception.
>> If you have a heirarchical structure that's 30K deep, and you call
>> invalidateTree() on the root figure, there's a good chance you'll get a
>> stack overflow.
>>
>> Try removing the min memory requirements on your VM and see if that
>> helps.
>> Keep an eye on the system memory usage when running the program. See if
>> it
>> actually hits 512M. Try allocating some more memory to the VM, and see
>> if
>> that helps at all.
>>
>> If memory consumption is the problem, I am not sure what can be done to
>> mitigate this problem. Some optimization is in call, of course. Maybe
>> the
>> flyweight pattern will rescue you. However, going from a max of 2.5K to
>> 100K is a tall order.
>>
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
>> news:opry5gois4lhlh26@localhost...
>> Hi All
>> Our application needs to generate graphs with amount of nodes in 100000
>> range.
>> I have modified flow example slightly to generate graphs programaticaly.
>> It seems that I can not go past 2500 nodes in the graph.
>>
>> This is what I get in the log for 3000 nodes
>>
>> !SESSION
>> ------------------------------------------------------------ ----------
>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>> !MESSAGE Exception launching the Eclipse Platform:
>> !STACK
>> java.lang.reflect.InvocationTargetException
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>> at java.lang.reflect.Method.invoke(Unknown Source)
>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>> Caused by: java.lang.reflect.InvocationTargetException
>> at
>>
>
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
>> a:861)
>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>> ... 7 more
>> Caused by: java.lang.StackOverflowError
>>
>> -----------------------------
>>
>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>
>> Does anybody have an idea why?
>> Does anybody use GEF with amount of nodes in 100K range?
>>
>> Thanks
>> Serge Mankovski =
>>
>>
>
>
>
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #107266 is a reply to message #106891] |
Thu, 27 November 2003 13:49   |
Eclipse User |
|
|
|
Originally posted by: smankovski-NO-SPAM-.cybermation.com
Pratik,
Do you think that case with the RankAssigmentSolver can be entered as a =
bug in the bug database so that it might get solved at some point? It =
seems that we need is to substitute recursion by iteration. I could look=
=
at this issue if I had a bit more date about the purpose of this method =
and the structure of the tree it works on.
I suppose performance issue can not be resolved without major re-work. I=
f =
it can be solved at all.
Serge
On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com> wrot=
e:
> Alright, I tried it out on my computer. Serge, you were right. =
> Scalability
> in GEF (I was able to create a large Logic Diagram with 10K nodes -- =
> working
> on 100K now) or memory usage are not a problem (although performance
> certainly is -- with 100K nodes, my computer has been pegged at 100% f=
or
> more than half an hour now, and it's not done yet!).
>
> I found the problem when I tried to create a Flow Example with 5000
> activities. Here it is:
> at
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
> kAssigmentSolver.java:30)
>
> at
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
> kAssigmentSolver.java:30)
>
> at
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
> kAssigmentSolver.java:30)
>
> at
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
> kAssigmentSolver.java:30)
>
> java.lang.StackOverflowError
>
> RankAssignmentSolver.depthFirstCutValue has a recursive call that goes=
> through all the edges of all the nodes.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in messa=
ge
> news:opry7a3kt9lhlh26@localhost...
> Hi,
> what I posted is the full stack trace as it appears in the .log file.
> Eclips do not give any more information about what is going on.
>
> In the attachment is the message that appears in the workbench.
>
>
> !SESSION Nov 25, 2003 10:54:09.587
> ---------------------------------------------
> java.version=3D1.4.2_01
> java.vendor=3DSun Microsystems Inc.
> BootLoader constants: OS=3Dwin32, ARCH=3Dx86, WS=3Dwin32, NL=3Den_US
> Command-line arguments: -pdelaunch -dev bin -feature org.eclipse.platf=
orm
> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86=
=
> -nl
> en_US -configuration file:C:/eclipse
> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
> !MESSAGE Unable to restore editor - createElement returned null for in=
put
> element factory: org.eclipse.ui.part.FileEditorInputFactory
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
> !MESSAGE Unhandled exception caught in event loop.
> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
> !MESSAGE java.lang.StackOverflowError
> !STACK 0
> java.lang.StackOverflowError
>
> ---------------------------------------------
>
> This is console output
>
> Unable to restore editor - createElement returned null for input eleme=
nt
> factory: org.eclipse.ui.part.FileEditorInputFactory
> Unhandled exception caught in event loop.
> Reason:
> java.lang.StackOverflowError
>
> --------------------------------------------
>
> This is the source code that I use to generate .flow file with 3000 no=
des
>
> public class FlowWizardPage1 extends WizardNewFileCreationPage {
> .....
>
> private ActivityDiagram createWakeupModel() {
> ActivityDiagram diagram =3D new ActivityDiagram();
> StringTokenizer tokenizer =3D new StringTokenizer(getFileName(), " xX.=
");
> String chartType =3D tokenizer.nextToken();
> if (chartType.equalsIgnoreCase("flat")) {
> int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
> for (int i =3D 0; i <=3D maxNodeCount; i++)
> diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount)=
);
> }
> if (chartType.equalsIgnoreCase("pipe")) {
> int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
> Activity previous =3D null;
> for (int i =3D 0; i <=3D maxNodeCount; i++) {
> Activity current =3D new Activity("Node " + i + " out of "
> + maxNodeCount);
> diagram.addChild(current);
> if (i > 0)
> new Transition(previous, current);
> previous =3D current;
> }
> }
> return diagram;
> }
>
> ......
> }
>
>
> File name that I use in case 3000 nodes is "flat 3000.flow
>
> ---------------------
>
>
> Serge
>
> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> wro=
te:
>
>> Please post the full stack trace. thanks.
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in mess=
age
>> news:opry5jr9delhlh26@localhost...
>> It does work with 2500 with the flat graph structure without any
>> connectors.
>>
>> It does not reach 512M when it runs. The highest it goes to is in upp=
er
>> 300 range
>>
>> Removing min memory size did not help.
>>
>> There is no recursion in creation of flat structure, just a loop.
>>
>> Since it gives stack overflow before it reaches upper limit of memory=
, =
>> it
>> does not seem to be a memory consumption problem.
>>
>> Thank you for help
>> Serge
>>
>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>
>>> So, you are saying that this works just fine with 2500 nodes?
>>>
>>> I'd track what's causing the StackOverflow. Make sure there's no
>>> infinite
>>> loop, cycle or recursion. My first guess would be that you don't ha=
ve
>>> sufficient memory for that, but then you'd get an Out of Memory
>>> exception.
>>> If you have a heirarchical structure that's 30K deep, and you call
>>> invalidateTree() on the root figure, there's a good chance you'll ge=
t a
>>> stack overflow.
>>>
>>> Try removing the min memory requirements on your VM and see if that
>>> helps.
>>> Keep an eye on the system memory usage when running the program. Se=
e =
>>> if
>>> it
>>> actually hits 512M. Try allocating some more memory to the VM, and =
see
>>> if
>>> that helps at all.
>>>
>>> If memory consumption is the problem, I am not sure what can be done=
to
>>> mitigate this problem. Some optimization is in call, of course. Ma=
ybe
>>> the
>>> flyweight pattern will rescue you. However, going from a max of 2.5=
K =
>>> to
>>> 100K is a tall order.
>>>
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in =
>>> message
>>> news:opry5gois4lhlh26@localhost...
>>> Hi All
>>> Our application needs to generate graphs with amount of nodes in 100=
000
>>> range.
>>> I have modified flow example slightly to generate graphs =
>>> programaticaly.
>>> It seems that I can not go past 2500 nodes in the graph.
>>>
>>> This is what I get in the log for 3000 nodes
>>>
>>> !SESSION
>>> ------------------------------------------------------------ --------=
--
>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>> !MESSAGE Exception launching the Eclipse Platform:
>>> !STACK
>>> java.lang.reflect.InvocationTargetException
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)=
>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>> Caused by: java.lang.reflect.InvocationTargetException
>>> at
>>>
>>
> org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoad=
er.jav
>>> a:861)
>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>> ... 7 more
>>> Caused by: java.lang.StackOverflowError
>>>
>>> -----------------------------
>>>
>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>
>>> Does anybody have an idea why?
>>> Does anybody use GEF with amount of nodes in 100K range?
>>>
>>> Thanks
>>> Serge Mankovski =3D
>>>
>>>
>>
>>
>>
>
>
>
-- =
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #107498 is a reply to message #107266] |
Mon, 01 December 2003 00:22   |
Eclipse User |
|
|
|
Serge, unfortunately, GEF has no intention to support scalability to the
extent that you are looking for. It never had. You are right: trying to
support that level of scalability would require quite a bit of re-work
(although I think it's doable). However, you can go ahead and open up a
defect against RankAssignmentSolver.depthFirstCutValue() (albeit I don't
think it will be addressed anytime in the near future).
Creating a logic diagram that's 5500 x 5500 inches and has 100K LEDs takes
forever to come up. Although we've made a few optimizations that reduces
that time considerably, it still takes a very long time (a few minutes).
Unfortunately, that's as far as we can go to help you, at least for the
moment.
Pratik Shah
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:oprza7w7tulhlh26@localhost...
Pratik,
Do you think that case with the RankAssigmentSolver can be entered as a
bug in the bug database so that it might get solved at some point? It
seems that we need is to substitute recursion by iteration. I could look
at this issue if I had a bit more date about the purpose of this method
and the structure of the tree it works on.
I suppose performance issue can not be resolved without major re-work. If
it can be solved at all.
Serge
On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
> Alright, I tried it out on my computer. Serge, you were right.
> Scalability
> in GEF (I was able to create a large Logic Diagram with 10K nodes --
> working
> on 100K now) or memory usage are not a problem (although performance
> certainly is -- with 100K nodes, my computer has been pegged at 100% for
> more than half an hour now, and it's not done yet!).
>
> I found the problem when I tried to create a Flow Example with 5000
> activities. Here it is:
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> java.lang.StackOverflowError
>
> RankAssignmentSolver.depthFirstCutValue has a recursive call that goes
> through all the edges of all the nodes.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
> news:opry7a3kt9lhlh26@localhost...
> Hi,
> what I posted is the full stack trace as it appears in the .log file.
> Eclips do not give any more information about what is going on.
>
> In the attachment is the message that appears in the workbench.
>
>
> !SESSION Nov 25, 2003 10:54:09.587
> ---------------------------------------------
> java.version=1.4.2_01
> java.vendor=Sun Microsystems Inc.
> BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
> Command-line arguments: -pdelaunch -dev bin -feature org.eclipse.platform
> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86
> -nl
> en_US -configuration file:C:/eclipse
> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
> !MESSAGE Unable to restore editor - createElement returned null for input
> element factory: org.eclipse.ui.part.FileEditorInputFactory
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
> !MESSAGE Unhandled exception caught in event loop.
> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
> !MESSAGE java.lang.StackOverflowError
> !STACK 0
> java.lang.StackOverflowError
>
> ---------------------------------------------
>
> This is console output
>
> Unable to restore editor - createElement returned null for input element
> factory: org.eclipse.ui.part.FileEditorInputFactory
> Unhandled exception caught in event loop.
> Reason:
> java.lang.StackOverflowError
>
> --------------------------------------------
>
> This is the source code that I use to generate .flow file with 3000 nodes
>
> public class FlowWizardPage1 extends WizardNewFileCreationPage {
> .....
>
> private ActivityDiagram createWakeupModel() {
> ActivityDiagram diagram = new ActivityDiagram();
> StringTokenizer tokenizer = new StringTokenizer(getFileName(), " xX.");
> String chartType = tokenizer.nextToken();
> if (chartType.equalsIgnoreCase("flat")) {
> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
> for (int i = 0; i <= maxNodeCount; i++)
> diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount));
> }
> if (chartType.equalsIgnoreCase("pipe")) {
> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
> Activity previous = null;
> for (int i = 0; i <= maxNodeCount; i++) {
> Activity current = new Activity("Node " + i + " out of "
> + maxNodeCount);
> diagram.addChild(current);
> if (i > 0)
> new Transition(previous, current);
> previous = current;
> }
> }
> return diagram;
> }
>
> ......
> }
>
>
> File name that I use in case 3000 nodes is "flat 3000.flow
>
> ---------------------
>
>
> Serge
>
> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> wrote:
>
>> Please post the full stack trace. thanks.
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
>> news:opry5jr9delhlh26@localhost...
>> It does work with 2500 with the flat graph structure without any
>> connectors.
>>
>> It does not reach 512M when it runs. The highest it goes to is in upper
>> 300 range
>>
>> Removing min memory size did not help.
>>
>> There is no recursion in creation of flat structure, just a loop.
>>
>> Since it gives stack overflow before it reaches upper limit of memory,
>> it
>> does not seem to be a memory consumption problem.
>>
>> Thank you for help
>> Serge
>>
>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>
>>> So, you are saying that this works just fine with 2500 nodes?
>>>
>>> I'd track what's causing the StackOverflow. Make sure there's no
>>> infinite
>>> loop, cycle or recursion. My first guess would be that you don't have
>>> sufficient memory for that, but then you'd get an Out of Memory
>>> exception.
>>> If you have a heirarchical structure that's 30K deep, and you call
>>> invalidateTree() on the root figure, there's a good chance you'll get a
>>> stack overflow.
>>>
>>> Try removing the min memory requirements on your VM and see if that
>>> helps.
>>> Keep an eye on the system memory usage when running the program. See
>>> if
>>> it
>>> actually hits 512M. Try allocating some more memory to the VM, and see
>>> if
>>> that helps at all.
>>>
>>> If memory consumption is the problem, I am not sure what can be done to
>>> mitigate this problem. Some optimization is in call, of course. Maybe
>>> the
>>> flyweight pattern will rescue you. However, going from a max of 2.5K
>>> to
>>> 100K is a tall order.
>>>
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>> message
>>> news:opry5gois4lhlh26@localhost...
>>> Hi All
>>> Our application needs to generate graphs with amount of nodes in 100000
>>> range.
>>> I have modified flow example slightly to generate graphs
>>> programaticaly.
>>> It seems that I can not go past 2500 nodes in the graph.
>>>
>>> This is what I get in the log for 3000 nodes
>>>
>>> !SESSION
>>> ------------------------------------------------------------ ----------
>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>> !MESSAGE Exception launching the Eclipse Platform:
>>> !STACK
>>> java.lang.reflect.InvocationTargetException
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>> Caused by: java.lang.reflect.InvocationTargetException
>>> at
>>>
>>
>
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
>>> a:861)
>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>> ... 7 more
>>> Caused by: java.lang.StackOverflowError
>>>
>>> -----------------------------
>>>
>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>
>>> Does anybody have an idea why?
>>> Does anybody use GEF with amount of nodes in 100K range?
>>>
>>> Thanks
>>> Serge Mankovski =
>>>
>>>
>>
>>
>>
>
>
>
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #107541 is a reply to message #107266] |
Mon, 01 December 2003 19:49   |
Eclipse User |
|
|
|
Originally posted by: none.us.ibm.com
The algorithm creates a spanning tree over the directed graph. Once the
spanning tree has been created, it chooses an arbitrary root for the tree,
and the performs a depth first traversal implemented using recursion.
You test graph is an extreme case. It is just one long chain of nodes. Is
you application limited to these types of "graphs"? What is the real world
scenario in which you encounter the overflow?
I think that removing the recursion would be pretty simple in this case.
Would you like to attempt to provide a patch which is not recursive? For
more information about the algorithm, see
http://citeseer.nj.nec.com/gansner93technique.html
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:oprza7w7tulhlh26@localhost...
Pratik,
Do you think that case with the RankAssigmentSolver can be entered as a
bug in the bug database so that it might get solved at some point? It
seems that we need is to substitute recursion by iteration. I could look
at this issue if I had a bit more date about the purpose of this method
and the structure of the tree it works on.
I suppose performance issue can not be resolved without major re-work. If
it can be solved at all.
Serge
On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
> Alright, I tried it out on my computer. Serge, you were right.
> Scalability
> in GEF (I was able to create a large Logic Diagram with 10K nodes --
> working
> on 100K now) or memory usage are not a problem (although performance
> certainly is -- with 100K nodes, my computer has been pegged at 100% for
> more than half an hour now, and it's not done yet!).
>
> I found the problem when I tried to create a Flow Example with 5000
> activities. Here it is:
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> java.lang.StackOverflowError
>
> RankAssignmentSolver.depthFirstCutValue has a recursive call that goes
> through all the edges of all the nodes.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
> news:opry7a3kt9lhlh26@localhost...
> Hi,
> what I posted is the full stack trace as it appears in the .log file.
> Eclips do not give any more information about what is going on.
>
> In the attachment is the message that appears in the workbench.
>
>
> !SESSION Nov 25, 2003 10:54:09.587
> ---------------------------------------------
> java.version=1.4.2_01
> java.vendor=Sun Microsystems Inc.
> BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
> Command-line arguments: -pdelaunch -dev bin -feature org.eclipse.platform
> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86
> -nl
> en_US -configuration file:C:/eclipse
> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
> !MESSAGE Unable to restore editor - createElement returned null for input
> element factory: org.eclipse.ui.part.FileEditorInputFactory
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
> !MESSAGE Unhandled exception caught in event loop.
> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
> !MESSAGE java.lang.StackOverflowError
> !STACK 0
> java.lang.StackOverflowError
>
> ---------------------------------------------
>
> This is console output
>
> Unable to restore editor - createElement returned null for input element
> factory: org.eclipse.ui.part.FileEditorInputFactory
> Unhandled exception caught in event loop.
> Reason:
> java.lang.StackOverflowError
>
> --------------------------------------------
>
> This is the source code that I use to generate .flow file with 3000 nodes
>
> public class FlowWizardPage1 extends WizardNewFileCreationPage {
> .....
>
> private ActivityDiagram createWakeupModel() {
> ActivityDiagram diagram = new ActivityDiagram();
> StringTokenizer tokenizer = new StringTokenizer(getFileName(), " xX.");
> String chartType = tokenizer.nextToken();
> if (chartType.equalsIgnoreCase("flat")) {
> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
> for (int i = 0; i <= maxNodeCount; i++)
> diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount));
> }
> if (chartType.equalsIgnoreCase("pipe")) {
> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
> Activity previous = null;
> for (int i = 0; i <= maxNodeCount; i++) {
> Activity current = new Activity("Node " + i + " out of "
> + maxNodeCount);
> diagram.addChild(current);
> if (i > 0)
> new Transition(previous, current);
> previous = current;
> }
> }
> return diagram;
> }
>
> ......
> }
>
>
> File name that I use in case 3000 nodes is "flat 3000.flow
>
> ---------------------
>
>
> Serge
>
> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> wrote:
>
>> Please post the full stack trace. thanks.
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
>> news:opry5jr9delhlh26@localhost...
>> It does work with 2500 with the flat graph structure without any
>> connectors.
>>
>> It does not reach 512M when it runs. The highest it goes to is in upper
>> 300 range
>>
>> Removing min memory size did not help.
>>
>> There is no recursion in creation of flat structure, just a loop.
>>
>> Since it gives stack overflow before it reaches upper limit of memory,
>> it
>> does not seem to be a memory consumption problem.
>>
>> Thank you for help
>> Serge
>>
>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>
>>> So, you are saying that this works just fine with 2500 nodes?
>>>
>>> I'd track what's causing the StackOverflow. Make sure there's no
>>> infinite
>>> loop, cycle or recursion. My first guess would be that you don't have
>>> sufficient memory for that, but then you'd get an Out of Memory
>>> exception.
>>> If you have a heirarchical structure that's 30K deep, and you call
>>> invalidateTree() on the root figure, there's a good chance you'll get a
>>> stack overflow.
>>>
>>> Try removing the min memory requirements on your VM and see if that
>>> helps.
>>> Keep an eye on the system memory usage when running the program. See
>>> if
>>> it
>>> actually hits 512M. Try allocating some more memory to the VM, and see
>>> if
>>> that helps at all.
>>>
>>> If memory consumption is the problem, I am not sure what can be done to
>>> mitigate this problem. Some optimization is in call, of course. Maybe
>>> the
>>> flyweight pattern will rescue you. However, going from a max of 2.5K
>>> to
>>> 100K is a tall order.
>>>
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>> message
>>> news:opry5gois4lhlh26@localhost...
>>> Hi All
>>> Our application needs to generate graphs with amount of nodes in 100000
>>> range.
>>> I have modified flow example slightly to generate graphs
>>> programaticaly.
>>> It seems that I can not go past 2500 nodes in the graph.
>>>
>>> This is what I get in the log for 3000 nodes
>>>
>>> !SESSION
>>> ------------------------------------------------------------ ----------
>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>> !MESSAGE Exception launching the Eclipse Platform:
>>> !STACK
>>> java.lang.reflect.InvocationTargetException
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>> Caused by: java.lang.reflect.InvocationTargetException
>>> at
>>>
>>
>
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
>>> a:861)
>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>> ... 7 more
>>> Caused by: java.lang.StackOverflowError
>>>
>>> -----------------------------
>>>
>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>
>>> Does anybody have an idea why?
>>> Does anybody use GEF with amount of nodes in 100K range?
>>>
>>> Thanks
>>> Serge Mankovski =
>>>
>>>
>>
>>
>>
>
>
>
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #107973 is a reply to message #107266] |
Thu, 04 December 2003 17:09   |
Eclipse User |
|
|
|
We've realized that one of the largest bottlenecks for creating a diagram
with a large number of nodes is the ArrayList.contains() method. We intend
to fix the code so that that method is invoked only when absolutely
necessary. See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=48099
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:oprza7w7tulhlh26@localhost...
Pratik,
Do you think that case with the RankAssigmentSolver can be entered as a
bug in the bug database so that it might get solved at some point? It
seems that we need is to substitute recursion by iteration. I could look
at this issue if I had a bit more date about the purpose of this method
and the structure of the tree it works on.
I suppose performance issue can not be resolved without major re-work. If
it can be solved at all.
Serge
On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
> Alright, I tried it out on my computer. Serge, you were right.
> Scalability
> in GEF (I was able to create a large Logic Diagram with 10K nodes --
> working
> on 100K now) or memory usage are not a problem (although performance
> certainly is -- with 100K nodes, my computer has been pegged at 100% for
> more than half an hour now, and it's not done yet!).
>
> I found the problem when I tried to create a Flow Example with 5000
> activities. Here it is:
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> at
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
> kAssigmentSolver.java:30)
>
> java.lang.StackOverflowError
>
> RankAssignmentSolver.depthFirstCutValue has a recursive call that goes
> through all the edges of all the nodes.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
> news:opry7a3kt9lhlh26@localhost...
> Hi,
> what I posted is the full stack trace as it appears in the .log file.
> Eclips do not give any more information about what is going on.
>
> In the attachment is the message that appears in the workbench.
>
>
> !SESSION Nov 25, 2003 10:54:09.587
> ---------------------------------------------
> java.version=1.4.2_01
> java.vendor=Sun Microsystems Inc.
> BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
> Command-line arguments: -pdelaunch -dev bin -feature org.eclipse.platform
> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86
> -nl
> en_US -configuration file:C:/eclipse
> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
> !MESSAGE Unable to restore editor - createElement returned null for input
> element factory: org.eclipse.ui.part.FileEditorInputFactory
> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
> !MESSAGE Unhandled exception caught in event loop.
> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
> !MESSAGE java.lang.StackOverflowError
> !STACK 0
> java.lang.StackOverflowError
>
> ---------------------------------------------
>
> This is console output
>
> Unable to restore editor - createElement returned null for input element
> factory: org.eclipse.ui.part.FileEditorInputFactory
> Unhandled exception caught in event loop.
> Reason:
> java.lang.StackOverflowError
>
> --------------------------------------------
>
> This is the source code that I use to generate .flow file with 3000 nodes
>
> public class FlowWizardPage1 extends WizardNewFileCreationPage {
> .....
>
> private ActivityDiagram createWakeupModel() {
> ActivityDiagram diagram = new ActivityDiagram();
> StringTokenizer tokenizer = new StringTokenizer(getFileName(), " xX.");
> String chartType = tokenizer.nextToken();
> if (chartType.equalsIgnoreCase("flat")) {
> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
> for (int i = 0; i <= maxNodeCount; i++)
> diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount));
> }
> if (chartType.equalsIgnoreCase("pipe")) {
> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
> Activity previous = null;
> for (int i = 0; i <= maxNodeCount; i++) {
> Activity current = new Activity("Node " + i + " out of "
> + maxNodeCount);
> diagram.addChild(current);
> if (i > 0)
> new Transition(previous, current);
> previous = current;
> }
> }
> return diagram;
> }
>
> ......
> }
>
>
> File name that I use in case 3000 nodes is "flat 3000.flow
>
> ---------------------
>
>
> Serge
>
> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> wrote:
>
>> Please post the full stack trace. thanks.
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
>> news:opry5jr9delhlh26@localhost...
>> It does work with 2500 with the flat graph structure without any
>> connectors.
>>
>> It does not reach 512M when it runs. The highest it goes to is in upper
>> 300 range
>>
>> Removing min memory size did not help.
>>
>> There is no recursion in creation of flat structure, just a loop.
>>
>> Since it gives stack overflow before it reaches upper limit of memory,
>> it
>> does not seem to be a memory consumption problem.
>>
>> Thank you for help
>> Serge
>>
>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>
>>> So, you are saying that this works just fine with 2500 nodes?
>>>
>>> I'd track what's causing the StackOverflow. Make sure there's no
>>> infinite
>>> loop, cycle or recursion. My first guess would be that you don't have
>>> sufficient memory for that, but then you'd get an Out of Memory
>>> exception.
>>> If you have a heirarchical structure that's 30K deep, and you call
>>> invalidateTree() on the root figure, there's a good chance you'll get a
>>> stack overflow.
>>>
>>> Try removing the min memory requirements on your VM and see if that
>>> helps.
>>> Keep an eye on the system memory usage when running the program. See
>>> if
>>> it
>>> actually hits 512M. Try allocating some more memory to the VM, and see
>>> if
>>> that helps at all.
>>>
>>> If memory consumption is the problem, I am not sure what can be done to
>>> mitigate this problem. Some optimization is in call, of course. Maybe
>>> the
>>> flyweight pattern will rescue you. However, going from a max of 2.5K
>>> to
>>> 100K is a tall order.
>>>
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>> message
>>> news:opry5gois4lhlh26@localhost...
>>> Hi All
>>> Our application needs to generate graphs with amount of nodes in 100000
>>> range.
>>> I have modified flow example slightly to generate graphs
>>> programaticaly.
>>> It seems that I can not go past 2500 nodes in the graph.
>>>
>>> This is what I get in the log for 3000 nodes
>>>
>>> !SESSION
>>> ------------------------------------------------------------ ----------
>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>> !MESSAGE Exception launching the Eclipse Platform:
>>> !STACK
>>> java.lang.reflect.InvocationTargetException
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>> Caused by: java.lang.reflect.InvocationTargetException
>>> at
>>>
>>
>
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
>>> a:861)
>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>> ... 7 more
>>> Caused by: java.lang.StackOverflowError
>>>
>>> -----------------------------
>>>
>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>
>>> Does anybody have an idea why?
>>> Does anybody use GEF with amount of nodes in 100K range?
>>>
>>> Thanks
>>> Serge Mankovski =
>>>
>>>
>>
>>
>>
>
>
>
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #108800 is a reply to message #107541] |
Wed, 10 December 2003 15:32   |
Eclipse User |
|
|
|
Originally posted by: smankovski-NO-SPAM-.cybermation.com
Randy and Pratik
We decided not to build 100K sized graphs. However we still need to be =
able to build graphs in 10-25K nodes range.
This means that I will be spending some time and do optimization and fix=
es =
that we are talking about here. It might happen early next year.
Thank you for you help.
I will probably ask more questions when I start implementing the fixes.
Serge
On Mon, 1 Dec 2003 19:49:33 -0500, Randy Hudson <none@us.ibm.com> wrote:=
> The algorithm creates a spanning tree over the directed graph. Once t=
he
> spanning tree has been created, it chooses an arbitrary root for the =
> tree,
> and the performs a depth first traversal implemented using recursion.
>
> You test graph is an extreme case. It is just one long chain of nodes=
.. =
> Is
> you application limited to these types of "graphs"? What is the real =
> world
> scenario in which you encounter the overflow?
>
> I think that removing the recursion would be pretty simple in this cas=
e.
> Would you like to attempt to provide a patch which is not recursive? =
For
> more information about the algorithm, see
> http://citeseer.nj.nec.com/gansner93technique.html
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in messa=
ge
> news:oprza7w7tulhlh26@localhost...
> Pratik,
> Do you think that case with the RankAssigmentSolver can be entered as =
a
> bug in the bug database so that it might get solved at some point? It
> seems that we need is to substitute recursion by iteration. I could lo=
ok
> at this issue if I had a bit more date about the purpose of this metho=
d
> and the structure of the tree it works on.
>
> I suppose performance issue can not be resolved without major re-work.=
If
> it can be solved at all.
>
> Serge
>
>
> On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com> =
> wrote:
>
>> Alright, I tried it out on my computer. Serge, you were right.
>> Scalability
>> in GEF (I was able to create a large Logic Diagram with 10K nodes --
>> working
>> on 100K now) or memory usage are not a problem (although performance
>> certainly is -- with 100K nodes, my computer has been pegged at 100% =
for
>> more than half an hour now, and it's not done yet!).
>>
>> I found the problem when I tried to create a Flow Example with 5000
>> activities. Here it is:
>> at
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>> kAssigmentSolver.java:30)
>>
>> at
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>> kAssigmentSolver.java:30)
>>
>> at
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>> kAssigmentSolver.java:30)
>>
>> at
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>> kAssigmentSolver.java:30)
>>
>> java.lang.StackOverflowError
>>
>> RankAssignmentSolver.depthFirstCutValue has a recursive call that goe=
s
>> through all the edges of all the nodes.
>>
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in mess=
age
>> news:opry7a3kt9lhlh26@localhost...
>> Hi,
>> what I posted is the full stack trace as it appears in the .log file.=
>> Eclips do not give any more information about what is going on.
>>
>> In the attachment is the message that appears in the workbench.
>>
>>
>> !SESSION Nov 25, 2003 10:54:09.587
>> ---------------------------------------------
>> java.version=3D1.4.2_01
>> java.vendor=3DSun Microsystems Inc.
>> BootLoader constants: OS=3Dwin32, ARCH=3Dx86, WS=3Dwin32, NL=3Den_US
>> Command-line arguments: -pdelaunch -dev bin -feature =
>> org.eclipse.platform
>> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x8=
6
>> -nl
>> en_US -configuration file:C:/eclipse
>> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
>> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
>> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
>> !MESSAGE Unable to restore editor - createElement returned null for =
>> input
>> element factory: org.eclipse.ui.part.FileEditorInputFactory
>> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
>> !MESSAGE Unhandled exception caught in event loop.
>> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
>> !MESSAGE java.lang.StackOverflowError
>> !STACK 0
>> java.lang.StackOverflowError
>>
>> ---------------------------------------------
>>
>> This is console output
>>
>> Unable to restore editor - createElement returned null for input elem=
ent
>> factory: org.eclipse.ui.part.FileEditorInputFactory
>> Unhandled exception caught in event loop.
>> Reason:
>> java.lang.StackOverflowError
>>
>> --------------------------------------------
>>
>> This is the source code that I use to generate .flow file with 3000 =
>> nodes
>>
>> public class FlowWizardPage1 extends WizardNewFileCreationPage {
>> .....
>>
>> private ActivityDiagram createWakeupModel() {
>> ActivityDiagram diagram =3D new ActivityDiagram();
>> StringTokenizer tokenizer =3D new StringTokenizer(getFileName(), " xX=
..");
>> String chartType =3D tokenizer.nextToken();
>> if (chartType.equalsIgnoreCase("flat")) {
>> int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
>> for (int i =3D 0; i <=3D maxNodeCount; i++)
>> diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount=
));
>> }
>> if (chartType.equalsIgnoreCase("pipe")) {
>> int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
>> Activity previous =3D null;
>> for (int i =3D 0; i <=3D maxNodeCount; i++) {
>> Activity current =3D new Activity("Node " + i + " out of "
>> + maxNodeCount);
>> diagram.addChild(current);
>> if (i > 0)
>> new Transition(previous, current);
>> previous =3D current;
>> }
>> }
>> return diagram;
>> }
>>
>> ......
>> }
>>
>>
>> File name that I use in case 3000 nodes is "flat 3000.flow
>>
>> ---------------------
>>
>>
>> Serge
>>
>> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com> =
>> wrote:
>>
>>> Please post the full stack trace. thanks.
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in =
>>> message
>>> news:opry5jr9delhlh26@localhost...
>>> It does work with 2500 with the flat graph structure without any
>>> connectors.
>>>
>>> It does not reach 512M when it runs. The highest it goes to is in up=
per
>>> 300 range
>>>
>>> Removing min memory size did not help.
>>>
>>> There is no recursion in creation of flat structure, just a loop.
>>>
>>> Since it gives stack overflow before it reaches upper limit of memor=
y,
>>> it
>>> does not seem to be a memory consumption problem.
>>>
>>> Thank you for help
>>> Serge
>>>
>>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>>
>>>> So, you are saying that this works just fine with 2500 nodes?
>>>>
>>>> I'd track what's causing the StackOverflow. Make sure there's no
>>>> infinite
>>>> loop, cycle or recursion. My first guess would be that you don't h=
ave
>>>> sufficient memory for that, but then you'd get an Out of Memory
>>>> exception.
>>>> If you have a heirarchical structure that's 30K deep, and you call
>>>> invalidateTree() on the root figure, there's a good chance you'll g=
et =
>>>> a
>>>> stack overflow.
>>>>
>>>> Try removing the min memory requirements on your VM and see if that=
>>>> helps.
>>>> Keep an eye on the system memory usage when running the program. S=
ee
>>>> if
>>>> it
>>>> actually hits 512M. Try allocating some more memory to the VM, and=
=
>>>> see
>>>> if
>>>> that helps at all.
>>>>
>>>> If memory consumption is the problem, I am not sure what can be don=
e =
>>>> to
>>>> mitigate this problem. Some optimization is in call, of course. =
>>>> Maybe
>>>> the
>>>> flyweight pattern will rescue you. However, going from a max of 2.=
5K
>>>> to
>>>> 100K is a tall order.
>>>>
>>>>
>>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>>> message
>>>> news:opry5gois4lhlh26@localhost...
>>>> Hi All
>>>> Our application needs to generate graphs with amount of nodes in =
>>>> 100000
>>>> range.
>>>> I have modified flow example slightly to generate graphs
>>>> programaticaly.
>>>> It seems that I can not go past 2500 nodes in the graph.
>>>>
>>>> This is what I get in the log for 3000 nodes
>>>>
>>>> !SESSION
>>>> ------------------------------------------------------------ -------=
---
>>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>>> !MESSAGE Exception launching the Eclipse Platform:
>>>> !STACK
>>>> java.lang.reflect.InvocationTargetException
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source=
)
>>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>>> Caused by: java.lang.reflect.InvocationTargetException
>>>> at
>>>>
>>>
>>
> org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoad=
er.jav
>>>> a:861)
>>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>>> ... 7 more
>>>> Caused by: java.lang.StackOverflowError
>>>>
>>>> -----------------------------
>>>>
>>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>>
>>>> Does anybody have an idea why?
>>>> Does anybody use GEF with amount of nodes in 100K range?
>>>>
>>>> Thanks
>>>> Serge Mankovski =3D
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>
-- =
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #108813 is a reply to message #108800] |
Wed, 10 December 2003 17:58   |
Eclipse User |
|
|
|
Do you expect 10K-25K nodes at one level of the hierarchy tree? If they are
spread across on several levels, you can expect the performance to improve
quite a bit.
"Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
news:oprzzfcutwlhlh26@localhost...
Randy and Pratik
We decided not to build 100K sized graphs. However we still need to be
able to build graphs in 10-25K nodes range.
This means that I will be spending some time and do optimization and fixes
that we are talking about here. It might happen early next year.
Thank you for you help.
I will probably ask more questions when I start implementing the fixes.
Serge
On Mon, 1 Dec 2003 19:49:33 -0500, Randy Hudson <none@us.ibm.com> wrote:
> The algorithm creates a spanning tree over the directed graph. Once the
> spanning tree has been created, it chooses an arbitrary root for the
> tree,
> and the performs a depth first traversal implemented using recursion.
>
> You test graph is an extreme case. It is just one long chain of nodes.
> Is
> you application limited to these types of "graphs"? What is the real
> world
> scenario in which you encounter the overflow?
>
> I think that removing the recursion would be pretty simple in this case.
> Would you like to attempt to provide a patch which is not recursive? For
> more information about the algorithm, see
> http://citeseer.nj.nec.com/gansner93technique.html
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
> news:oprza7w7tulhlh26@localhost...
> Pratik,
> Do you think that case with the RankAssigmentSolver can be entered as a
> bug in the bug database so that it might get solved at some point? It
> seems that we need is to substitute recursion by iteration. I could look
> at this issue if I had a bit more date about the purpose of this method
> and the structure of the tree it works on.
>
> I suppose performance issue can not be resolved without major re-work. If
> it can be solved at all.
>
> Serge
>
>
> On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com>
> wrote:
>
>> Alright, I tried it out on my computer. Serge, you were right.
>> Scalability
>> in GEF (I was able to create a large Logic Diagram with 10K nodes --
>> working
>> on 100K now) or memory usage are not a problem (although performance
>> certainly is -- with 100K nodes, my computer has been pegged at 100% for
>> more than half an hour now, and it's not done yet!).
>>
>> I found the problem when I tried to create a Flow Example with 5000
>> activities. Here it is:
>> at
>>
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
>> kAssigmentSolver.java:30)
>>
>> at
>>
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
>> kAssigmentSolver.java:30)
>>
>> at
>>
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
>> kAssigmentSolver.java:30)
>>
>> at
>>
>
org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutValue(Ran
>> kAssigmentSolver.java:30)
>>
>> java.lang.StackOverflowError
>>
>> RankAssignmentSolver.depthFirstCutValue has a recursive call that goes
>> through all the edges of all the nodes.
>>
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in message
>> news:opry7a3kt9lhlh26@localhost...
>> Hi,
>> what I posted is the full stack trace as it appears in the .log file.
>> Eclips do not give any more information about what is going on.
>>
>> In the attachment is the message that appears in the workbench.
>>
>>
>> !SESSION Nov 25, 2003 10:54:09.587
>> ---------------------------------------------
>> java.version=1.4.2_01
>> java.vendor=Sun Microsystems Inc.
>> BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
>> Command-line arguments: -pdelaunch -dev bin -feature
>> org.eclipse.platform
>> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x86
>> -nl
>> en_US -configuration file:C:/eclipse
>> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
>> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/
>> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
>> !MESSAGE Unable to restore editor - createElement returned null for
>> input
>> element factory: org.eclipse.ui.part.FileEditorInputFactory
>> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
>> !MESSAGE Unhandled exception caught in event loop.
>> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
>> !MESSAGE java.lang.StackOverflowError
>> !STACK 0
>> java.lang.StackOverflowError
>>
>> ---------------------------------------------
>>
>> This is console output
>>
>> Unable to restore editor - createElement returned null for input element
>> factory: org.eclipse.ui.part.FileEditorInputFactory
>> Unhandled exception caught in event loop.
>> Reason:
>> java.lang.StackOverflowError
>>
>> --------------------------------------------
>>
>> This is the source code that I use to generate .flow file with 3000
>> nodes
>>
>> public class FlowWizardPage1 extends WizardNewFileCreationPage {
>> .....
>>
>> private ActivityDiagram createWakeupModel() {
>> ActivityDiagram diagram = new ActivityDiagram();
>> StringTokenizer tokenizer = new StringTokenizer(getFileName(), " xX.");
>> String chartType = tokenizer.nextToken();
>> if (chartType.equalsIgnoreCase("flat")) {
>> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
>> for (int i = 0; i <= maxNodeCount; i++)
>> diagram.addChild(new Activity("Node " + i + " out of " + maxNodeCount));
>> }
>> if (chartType.equalsIgnoreCase("pipe")) {
>> int maxNodeCount = Integer.parseInt(tokenizer.nextToken());
>> Activity previous = null;
>> for (int i = 0; i <= maxNodeCount; i++) {
>> Activity current = new Activity("Node " + i + " out of "
>> + maxNodeCount);
>> diagram.addChild(current);
>> if (i > 0)
>> new Transition(previous, current);
>> previous = current;
>> }
>> }
>> return diagram;
>> }
>>
>> ......
>> }
>>
>>
>> File name that I use in case 3000 nodes is "flat 3000.flow
>>
>> ---------------------
>>
>>
>> Serge
>>
>> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com>
>> wrote:
>>
>>> Please post the full stack trace. thanks.
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>> message
>>> news:opry5jr9delhlh26@localhost...
>>> It does work with 2500 with the flat graph structure without any
>>> connectors.
>>>
>>> It does not reach 512M when it runs. The highest it goes to is in upper
>>> 300 range
>>>
>>> Removing min memory size did not help.
>>>
>>> There is no recursion in creation of flat structure, just a loop.
>>>
>>> Since it gives stack overflow before it reaches upper limit of memory,
>>> it
>>> does not seem to be a memory consumption problem.
>>>
>>> Thank you for help
>>> Serge
>>>
>>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>>
>>>> So, you are saying that this works just fine with 2500 nodes?
>>>>
>>>> I'd track what's causing the StackOverflow. Make sure there's no
>>>> infinite
>>>> loop, cycle or recursion. My first guess would be that you don't have
>>>> sufficient memory for that, but then you'd get an Out of Memory
>>>> exception.
>>>> If you have a heirarchical structure that's 30K deep, and you call
>>>> invalidateTree() on the root figure, there's a good chance you'll get
>>>> a
>>>> stack overflow.
>>>>
>>>> Try removing the min memory requirements on your VM and see if that
>>>> helps.
>>>> Keep an eye on the system memory usage when running the program. See
>>>> if
>>>> it
>>>> actually hits 512M. Try allocating some more memory to the VM, and
>>>> see
>>>> if
>>>> that helps at all.
>>>>
>>>> If memory consumption is the problem, I am not sure what can be done
>>>> to
>>>> mitigate this problem. Some optimization is in call, of course.
>>>> Maybe
>>>> the
>>>> flyweight pattern will rescue you. However, going from a max of 2.5K
>>>> to
>>>> 100K is a tall order.
>>>>
>>>>
>>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>>> message
>>>> news:opry5gois4lhlh26@localhost...
>>>> Hi All
>>>> Our application needs to generate graphs with amount of nodes in
>>>> 100000
>>>> range.
>>>> I have modified flow example slightly to generate graphs
>>>> programaticaly.
>>>> It seems that I can not go past 2500 nodes in the graph.
>>>>
>>>> This is what I get in the log for 3000 nodes
>>>>
>>>> !SESSION
>>>> ------------------------------------------------------------ ----------
>>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>>> !MESSAGE Exception launching the Eclipse Platform:
>>>> !STACK
>>>> java.lang.reflect.InvocationTargetException
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>>> Caused by: java.lang.reflect.InvocationTargetException
>>>> at
>>>>
>>>
>>
>
org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoader.jav
>>>> a:861)
>>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>>> ... 7 more
>>>> Caused by: java.lang.StackOverflowError
>>>>
>>>> -----------------------------
>>>>
>>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>>
>>>> Does anybody have an idea why?
>>>> Does anybody use GEF with amount of nodes in 100K range?
>>>>
>>>> Thanks
>>>> Serge Mankovski =
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Re: Limitation in number of nodes in a graph [message #109753 is a reply to message #108813] |
Thu, 18 December 2003 12:41  |
Eclipse User |
|
|
|
Originally posted by: smankovski-NO-SPAM-.cybermation.com
Season greetings!
Our trees branch a lot. Hope performance will be acceptible.
Serge
On Wed, 10 Dec 2003 17:58:12 -0500, Pratik Shah <ppshah@us.ibm.com> wrot=
e:
> Do you expect 10K-25K nodes at one level of the hierarchy tree? If th=
ey =
> are
> spread across on several levels, you can expect the performance to =
> improve
> quite a bit.
>
>
> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in messa=
ge
> news:oprzzfcutwlhlh26@localhost...
> Randy and Pratik
> We decided not to build 100K sized graphs. However we still need to be=
> able to build graphs in 10-25K nodes range.
> This means that I will be spending some time and do optimization and =
> fixes
> that we are talking about here. It might happen early next year.
>
> Thank you for you help.
> I will probably ask more questions when I start implementing the fixes=
..
>
> Serge
>
>
>
> On Mon, 1 Dec 2003 19:49:33 -0500, Randy Hudson <none@us.ibm.com> wrot=
e:
>
>> The algorithm creates a spanning tree over the directed graph. Once =
the
>> spanning tree has been created, it chooses an arbitrary root for the
>> tree,
>> and the performs a depth first traversal implemented using recursion.=
>>
>> You test graph is an extreme case. It is just one long chain of node=
s.
>> Is
>> you application limited to these types of "graphs"? What is the real=
>> world
>> scenario in which you encounter the overflow?
>>
>> I think that removing the recursion would be pretty simple in this ca=
se.
>> Would you like to attempt to provide a patch which is not recursive? =
=
>> For
>> more information about the algorithm, see
>> http://citeseer.nj.nec.com/gansner93technique.html
>>
>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in mess=
age
>> news:oprza7w7tulhlh26@localhost...
>> Pratik,
>> Do you think that case with the RankAssigmentSolver can be entered as=
a
>> bug in the bug database so that it might get solved at some point? It=
>> seems that we need is to substitute recursion by iteration. I could l=
ook
>> at this issue if I had a bit more date about the purpose of this meth=
od
>> and the structure of the tree it works on.
>>
>> I suppose performance issue can not be resolved without major re-work=
.. =
>> If
>> it can be solved at all.
>>
>> Serge
>>
>>
>> On Tue, 25 Nov 2003 14:07:07 -0500, Pratik Shah <ppshah@us.ibm.com>
>> wrote:
>>
>>> Alright, I tried it out on my computer. Serge, you were right.
>>> Scalability
>>> in GEF (I was able to create a large Logic Diagram with 10K nodes --=
>>> working
>>> on 100K now) or memory usage are not a problem (although performance=
>>> certainly is -- with 100K nodes, my computer has been pegged at 100%=
=
>>> for
>>> more than half an hour now, and it's not done yet!).
>>>
>>> I found the problem when I tried to create a Flow Example with 5000
>>> activities. Here it is:
>>> at
>>>
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>>> kAssigmentSolver.java:30)
>>>
>>> at
>>>
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>>> kAssigmentSolver.java:30)
>>>
>>> at
>>>
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>>> kAssigmentSolver.java:30)
>>>
>>> at
>>>
>>
> org.eclipse.draw2d.internal.graph.RankAssigmentSolver.depthF irstCutVal=
ue(Ran
>>> kAssigmentSolver.java:30)
>>>
>>> java.lang.StackOverflowError
>>>
>>> RankAssignmentSolver.depthFirstCutValue has a recursive call that go=
es
>>> through all the edges of all the nodes.
>>>
>>>
>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in =
>>> message
>>> news:opry7a3kt9lhlh26@localhost...
>>> Hi,
>>> what I posted is the full stack trace as it appears in the .log file=
..
>>> Eclips do not give any more information about what is going on.
>>>
>>> In the attachment is the message that appears in the workbench.
>>>
>>>
>>> !SESSION Nov 25, 2003 10:54:09.587
>>> ---------------------------------------------
>>> java.version=3D1.4.2_01
>>> java.vendor=3DSun Microsystems Inc.
>>> BootLoader constants: OS=3Dwin32, ARCH=3Dx86, WS=3Dwin32, NL=3Den_US=
>>> Command-line arguments: -pdelaunch -dev bin -feature
>>> org.eclipse.platform
>>> -data C:\eclipse 2.1.2\runtime-workspace -os win32 -ws win32 -arch x=
86
>>> -nl
>>> en_US -configuration file:C:/eclipse
>>> 2.1.2/workspace/.metadata/.plugins/org.eclipse.pde.core/C__e clipse
>>> 2.1.2_runtime-workspace/platform.cfg -install file:C:/eclipse 2.1.2/=
>>> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:09.587
>>> !MESSAGE Unable to restore editor - createElement returned null for
>>> input
>>> element factory: org.eclipse.ui.part.FileEditorInputFactory
>>> !ENTRY org.eclipse.ui 4 4 Nov 25, 2003 10:54:44.577
>>> !MESSAGE Unhandled exception caught in event loop.
>>> !ENTRY org.eclipse.ui 4 0 Nov 25, 2003 10:54:44.587
>>> !MESSAGE java.lang.StackOverflowError
>>> !STACK 0
>>> java.lang.StackOverflowError
>>>
>>> ---------------------------------------------
>>>
>>> This is console output
>>>
>>> Unable to restore editor - createElement returned null for input =
>>> element
>>> factory: org.eclipse.ui.part.FileEditorInputFactory
>>> Unhandled exception caught in event loop.
>>> Reason:
>>> java.lang.StackOverflowError
>>>
>>> --------------------------------------------
>>>
>>> This is the source code that I use to generate .flow file with 3000
>>> nodes
>>>
>>> public class FlowWizardPage1 extends WizardNewFileCreationPage {
>>> .....
>>>
>>> private ActivityDiagram createWakeupModel() {
>>> ActivityDiagram diagram =3D new ActivityDiagram();
>>> StringTokenizer tokenizer =3D new StringTokenizer(getFileName(), " x=
X.");
>>> String chartType =3D tokenizer.nextToken();
>>> if (chartType.equalsIgnoreCase("flat")) {
>>> int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
>>> for (int i =3D 0; i <=3D maxNodeCount; i++)
>>> diagram.addChild(new Activity("Node " + i + " out of " =
>>> + maxNodeCount));
>>> }
>>> if (chartType.equalsIgnoreCase("pipe")) {
>>> int maxNodeCount =3D Integer.parseInt(tokenizer.nextToken());
>>> Activity previous =3D null;
>>> for (int i =3D 0; i <=3D maxNodeCount; i++) {
>>> Activity current =3D new Activity("Node " + i + " out of "
>>> + maxNodeCount);
>>> diagram.addChild(current);
>>> if (i > 0)
>>> new Transition(previous, current);
>>> previous =3D current;
>>> }
>>> }
>>> return diagram;
>>> }
>>>
>>> ......
>>> }
>>>
>>>
>>> File name that I use in case 3000 nodes is "flat 3000.flow
>>>
>>> ---------------------
>>>
>>>
>>> Serge
>>>
>>> On Tue, 25 Nov 2003 10:37:42 -0500, Randy Hudson <none@us.ibm.com>
>>> wrote:
>>>
>>>> Please post the full stack trace. thanks.
>>>>
>>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>>> message
>>>> news:opry5jr9delhlh26@localhost...
>>>> It does work with 2500 with the flat graph structure without any
>>>> connectors.
>>>>
>>>> It does not reach 512M when it runs. The highest it goes to is in =
>>>> upper
>>>> 300 range
>>>>
>>>> Removing min memory size did not help.
>>>>
>>>> There is no recursion in creation of flat structure, just a loop.
>>>>
>>>> Since it gives stack overflow before it reaches upper limit of memo=
ry,
>>>> it
>>>> does not seem to be a memory consumption problem.
>>>>
>>>> Thank you for help
>>>> Serge
>>>>
>>>> 2003 11:49:31 -0500, Pratik Shah <ppshah@us.ibm.com> wrote:
>>>>
>>>>> So, you are saying that this works just fine with 2500 nodes?
>>>>>
>>>>> I'd track what's causing the StackOverflow. Make sure there's no
>>>>> infinite
>>>>> loop, cycle or recursion. My first guess would be that you don't =
>>>>> have
>>>>> sufficient memory for that, but then you'd get an Out of Memory
>>>>> exception.
>>>>> If you have a heirarchical structure that's 30K deep, and you call=
>>>>> invalidateTree() on the root figure, there's a good chance you'll =
get
>>>>> a
>>>>> stack overflow.
>>>>>
>>>>> Try removing the min memory requirements on your VM and see if tha=
t
>>>>> helps.
>>>>> Keep an eye on the system memory usage when running the program. =
See
>>>>> if
>>>>> it
>>>>> actually hits 512M. Try allocating some more memory to the VM, an=
d
>>>>> see
>>>>> if
>>>>> that helps at all.
>>>>>
>>>>> If memory consumption is the problem, I am not sure what can be do=
ne
>>>>> to
>>>>> mitigate this problem. Some optimization is in call, of course.
>>>>> Maybe
>>>>> the
>>>>> flyweight pattern will rescue you. However, going from a max of 2=
..5K
>>>>> to
>>>>> 100K is a tall order.
>>>>>
>>>>>
>>>>> "Serge Mankovski" <smankovski-NO-SPAM-@cybermation.com> wrote in
>>>>> message
>>>>> news:opry5gois4lhlh26@localhost...
>>>>> Hi All
>>>>> Our application needs to generate graphs with amount of nodes in
>>>>> 100000
>>>>> range.
>>>>> I have modified flow example slightly to generate graphs
>>>>> programaticaly.
>>>>> It seems that I can not go past 2500 nodes in the graph.
>>>>>
>>>>> This is what I get in the log for 3000 nodes
>>>>>
>>>>> !SESSION
>>>>> ------------------------------------------------------------ ------=
----
>>>>> !ENTRY org.eclipse.core.launcher 4 0 Nov 21, 2003 18:48:40.536
>>>>> !MESSAGE Exception launching the Eclipse Platform:
>>>>> !STACK
>>>>> java.lang.reflect.InvocationTargetException
>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Sourc=
e)
>>>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>>>> at org.eclipse.core.launcher.Main.basicRun(Main.java:291)
>>>>> at org.eclipse.core.launcher.Main.run(Main.java:747)
>>>>> at org.eclipse.core.launcher.Main.main(Main.java:583)
>>>>> Caused by: java.lang.reflect.InvocationTargetException
>>>>> at
>>>>>
>>>>
>>>
>>
> org.eclipse.core.internal.boot.InternalBootLoader.run(Intern alBootLoad=
er.jav
>>>>> a:861)
>>>>> at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
>>>>> ... 7 more
>>>>> Caused by: java.lang.StackOverflowError
>>>>>
>>>>> -----------------------------
>>>>>
>>>>> I am running vm with -Xss2M -Xms64M -Xmx512M
>>>>>
>>>>> Does anybody have an idea why?
>>>>> Does anybody use GEF with amount of nodes in 100K range?
>>>>>
>>>>> Thanks
>>>>> Serge Mankovski =3D
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>
-- =
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
|
|
Goto Forum:
Current Time: Sat Aug 30 00:42:21 EDT 2025
Powered by FUDForum. Page generated in 0.07674 seconds
|