Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id D8F21200BC1 for ; Wed, 16 Nov 2016 14:15:18 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id D78E5160B08; Wed, 16 Nov 2016 13:15:18 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 6B2F7160B03 for ; Wed, 16 Nov 2016 14:15:16 +0100 (CET) Received: (qmail 12889 invoked by uid 500); 16 Nov 2016 13:15:15 -0000 Mailing-List: contact dev-help@river.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@river.apache.org Delivered-To: mailing list dev@river.apache.org Received: (qmail 12865 invoked by uid 99); 16 Nov 2016 13:15:15 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Nov 2016 13:15:15 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id AC609C0118 for ; Wed, 16 Nov 2016 13:15:14 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 3.421 X-Spam-Level: *** X-Spam-Status: No, score=3.421 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_FONT_FACE_BAD=0.289, HTML_MESSAGE=2, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_SORBS_SPAM=0.5, SPF_NEUTRAL=0.652] autolearn=disabled Authentication-Results: spamd4-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=paremus-com.20150623.gappssmtp.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id Ci6fOurdcMGh for ; Wed, 16 Nov 2016 13:15:08 +0000 (UTC) Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id E79825FAE7 for ; Wed, 16 Nov 2016 13:15:07 +0000 (UTC) Received: by mail-wm0-f45.google.com with SMTP id f82so72413316wmf.1 for ; Wed, 16 Nov 2016 05:15:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paremus-com.20150623.gappssmtp.com; s=20150623; h=from:mime-version:subject:date:references:to:in-reply-to:message-id; bh=fUpp9rSRtAWUZdf7psB6LKOMk1X9pU6ZxKCmizJhfAQ=; b=J4oMITGJT1r5ChZ6oZQ2vLThNZJ/rc5GY3gk3WIXdJ7kJEjB3S+NG69mfXRdULglik r9eEVNLWsBB/qDWGYZCIIf+sue34qNiChtiIp7YgwmyFiiVLc1L3R0vVZdu3WrA3gF4z RmnyGrW5Sq7cA/KhoSRUTiflyC9MEAiopuvf1y1i/jKODCBYy1l90YN8cF6sokbYCEbE CAB4Rsd8tI01cgtdaaUTbqKxVptpAh1blBc5ota4Jof+DdnXkaBY2DZUIjeEIcTjFd8f sKhVmuoR8og7BmcdpVWZu3O9B5PLdkOmEi+oDayQwsnOurBPYNK1wy69O5SsvQOH3U2b V+tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:mime-version:subject:date:references:to :in-reply-to:message-id; bh=fUpp9rSRtAWUZdf7psB6LKOMk1X9pU6ZxKCmizJhfAQ=; b=R66tLD+NpTM1fQLK9HwuI7yqso5o0vR/n9nL2gP4nsE7wZJ5vGKL5zfGnSIibz3tlx yJnb7+4g6dkT4WvRHSs+31iOmTglAZpuC516r9nmt6CTvkOJOYoGzJt3DaoiISkQIUEx OwQ+g0jwDO6sRTUFks2XmAvHNu+2mwU+yA+4OT7Fcu/f89arHmQNKPi60mylARmaDXzo u8eqj+DlKUeLx5zwlFkin1qS0VOMU7aTx1pA8XMCLBMAXc6qY6dlXMU2VzhDBaP/UJe3 Srz+xaTdXYPhLPYlJY5gYLX8c3WaHCWhXfujbOM88rtRozkfKYzIpmWBIIpte0jwKAaY S8Ig== X-Gm-Message-State: ABUngvdE6yfZyz4XVghF2yT6XQmiAggHCkVViRAJyWW7UkmBheEiM+bELmc7cj02F0OODA== X-Received: by 10.28.15.138 with SMTP id 132mr9072147wmp.41.1479302106639; Wed, 16 Nov 2016 05:15:06 -0800 (PST) Received: from [192.168.1.64] (host31-48-71-29.range31-48.btcentralplus.com. [31.48.71.29]) by smtp.gmail.com with ESMTPSA id f67sm10102040wmd.13.2016.11.16.05.15.05 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 Nov 2016 05:15:05 -0800 (PST) From: Richard Nicholson Content-Type: multipart/alternative; boundary="Apple-Mail=_120AB7CE-9D01-4E0F-8553-001EC209254F" Mime-Version: 1.0 (Mac OS X Mail 10.1 \(3251\)) Subject: Re: Maven Build Date: Wed, 16 Nov 2016 13:15:05 +0000 References: <2b2887baf18d97801cf87178c4e49b51@org.tizen.email> <2490ad6a-24dd-b2a4-6ea2-32876a1ac36a@travellinck.com> <49D64C9C-E7C1-42CF-A27B-EC8C5235ACDC@paremus.com> <582C547E.6050200@xpro.biz> To: dev@river.apache.org In-Reply-To: <582C547E.6050200@xpro.biz> Message-Id: <23926A3D-5EA8-42BD-AD84-963CE28C09DF@paremus.com> X-Mailer: Apple Mail (2.3251) archived-at: Wed, 16 Nov 2016 13:15:19 -0000 --Apple-Mail=_120AB7CE-9D01-4E0F-8553-001EC209254F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 I=E2=80=99d encourage the active River committers to review the OSGi = Alliance RS / RSA specifications. These specifications don=E2=80=99t = deal with dynamic code download at present - but no reason why they = should in future - if there is a compelling Use Case. The OSGi = community and the OSGi Alliance are very open to ideas. Best Wishes Richard=20 Richard Nicholson Chief Executive Officer OSGi Alliance Board Member & Strategy url: http://www.paremus.com blog: http://adaptevolve.paremus.com Direct: +44 (0) 122 445 1260 Mobile: +44 (0) 797 105 1645 Indirect: +44 (0) 207 936 9098 Fax: +44 (0) 845 127 5999 _________________________________ Paremus Limited. Registered in England. Registration No. 4181472 Registered Office: 22-24 Broad Street, Wokingham, Berks RG40 1BA Postal Address: 107-111 Fleet Street, London, EC4A 2AB The information transmitted is intended only for the person(s) or entity = to which it is addressed and may contain confidential and/or privileged = material. Any review, retransmission, dissemination or other use of, or = taking of any action in reliance upon, this information by persons or = entities other than the intended recipient is prohibited. If you = received this in error, please contact the sender and delete the = material from any computer. > On 16 Nov 2016, at 12:43, Micha=C5=82 K=C5=82eczek (XPro Sp. z o. o.) = wrote > : >=20 > 1. I am aware of both Remote Services and Remote Services Admin = specifications. I would be happy to see how they deal with dynamic code = downloading but unfortunately they simply don't: > "This specification does not mandate the technique used to proxy an = Endpoint as a service in the OSGi > framework." - taken from "OSGi Compendium Release 6 Specification" > See point 3. below for some inherent issues with OSGi that make it = difficult to implement marshalling/unmarshalling as required by River. >=20 > 2. It has been a couple of years now since I last checked how Paremus = implemented Jini components. At that time the whole dynamic code = downloading has been based on PreferredClassProvider and = "java.rmi.codebase" property which would suggest it did not really solve = issues with code downloading in Jini at all. I would be happy to be = proven wrong. >=20 > 3. My comment about OSGi being "non-deterministic" in resolving = dependencies means that the same bundle installed in two different = environments is going to be linked with different dependent bundles. It = basically means the same object graph valid in one VM instance cannot be = deserialized in another VM instance unless: > a) all bundles have their dependencies specified in such a way that = exact same dependency graph is going to be present everywhere (meaning = no Package-Imports, no version ranges etc) > b) all JVMs have the same set of bundles installed (ie - there is no = dynamic code downloading at all - the code is preloaded) > c) classes of serialized objects are not loaded by OSGi framework = class loaders but by other non-related class loading framework (which is = what original old OSGi-Jini spec did) > d) classes of all objects in the object graph are from the same bundle = (special case of a) ) >=20 > In general all efforts I am aware of regarding "remoting" in Java = didn't really even try to solve issues of dynamically downloaded code. = They were based on all parties having the same code installed and/or = having a central authority providing a shared consistent view of all = available software. > I am not saying it is wrong. I am only saying that IMHO it is not = something River should do - it is simply a solved problem and there is = not point of re-doing it (JERI is cool but it is simply = yet-another-RPC-stack) >=20 > Regarding JBoss Modules: > I am not really advocating this particular library - it is just that = it is the only (non-OSGi - see above :) ) implementation of = non-hierarchical class loading that I am aware of which is of good = quality and actively maintained. I wouldn't want to reimplement it by = myself. Thought about ClassWorlds but it doesn't seem to be too active = and had some performance problems in the past. JBoss Modules is Apache = licensed so it can be used by River. >=20 > Thanks, > Michal >=20 >=20 > On Wednesday, 16 November 2016, Richard Nicholson = > = wrote: > Agree with Niclas. I don=E2=80=99t understand the resolution comment. >=20 > Not only is OSGi <> Jini integration feasible but it is a historical = fact. Paremus did this - and a pretty good job we did - in =E2=80=A6 = something like 2006 :-/ >=20 > If the River community decided that there is interest in OSGi - then = I=E2=80=99d suggest reading the Remote Service and Remote Service Admin = specifications and thinking about how Jini concepts might enhance that = world view. There are well over 10 million OSGi enabled IoT gateways out = there! >=20 > Sorry - I see no compelling technical or commercial arguments for the = JBoss Module route. >=20 >=20 > > On 16 Nov 2016, at 08:11, Niclas Hedhman > wrote: > > > > I am curious, what do you mean by "non-deterministic dependency = resolution" > > ? You can make it as predictable as you wish with attributes and > > directives. > > > > Cheers > > Niclas > > > > On Wed, Nov 16, 2016 at 4:07 PM, Micha=C5=82 K=C5=82eczek = > > > wrote: > > > >> While non-hierarchical class loading is crucial, OSGI with its > >> non-deterministic dependency resolution is very difficult ( if not > >> impossible ) to target. > >> I'm working on JBoss Module based class loading for River which I'm = going > >> to propose as contribution soon. > >> > >> Thanks, > >> Michal > >> > >> On Wednesday, 16 November 2016, Dawid Loubser = > > >> wrote: > >> > >>> +1 for OSGi providing the best solution to the class resolution = problem, > >>> though I think some work will have to be done around trust, as you = say. > >>> > >>> > >>> On 16/11/2016 02:23, Peter wrote: > >>>> > >>>> The conventional alternatives will remain; the existing = ClassLoader > >>> isolation and the complexities surrounding multiple copies of the = same or > >>> different versions of the same classes interacting within the same = jvm. > >>> Maven will present a new alternative of maximum sharing, where = different > >>> service principals will share the same identity. > >>>> > >>>> Clearly, the simplest solution is to avoid code download and only = use > >>> reflection proxy's > >>>> > >>>> An inter process call isn't remote, but there is a question of = how a > >>> reflection proxy should behave when a subprocess is terminated. > >>>> > >>>> UndeclaredThrowableException seems appropriate. > >>>> > >>>> It would plug in via the existing ClassLoading RMIClassLoader = provider > >>> mechanism, it would be a client concern, transparent to the = service or > >>> server. > >>>> > >>>> The existing behaviour would remain default. > >>>> > >>>> So there can be multiple class resolution options: > >>>> > >>>> 1. Existing PrefferedClassProvider. > >>>> 2. Maven class resolution, where maximum class sharing exists. = This > >> may > >>> be preferable in situations where there is one domain of trust, eg = within > >>> one corporation or company. Max performance. > >>>> 3. Process Isolation. Interoperation between trusted entities, = where > >>> code version incompatibilities may exist, because of separate = development > >>> teams and administrators. Each domain of trust has it's own = process > >>> domain. Max compatibility, but slower. > >>>> 4. OSGi. > >>>> > >>>> There may be occassions where simpler (because developers don't = need to > >>> understand ClassLoaders), slow, compatible and reliable wins over = fast > >> and > >>> complex or broken. > >>>> > >>>> A subprocess may host numerous proxy's and codebases from one = principal > >>> trust domain (even a later version of River could be provisioned = using > >>> Maven). A subprocess would exist for each trust domain. So if = there are > >>> two companies, code from each remains isolated and communicates = only > >> using > >>> common api. No unintended code versioning conflicts. > >>>> > >>>> This choice would not prevent or exclude other methods of > >> communication, > >>> the service, even if isolated within it's own process will still > >>> communicate remotely over the network using JERI, JSON etc. This = is > >>> orthogonal to and independant of remote communication protocols. > >>>> > >>>> OSGi would of course be an alternative option, if one wished to = execute > >>> incompatible versions of libraries etc within one process, but = different > >>> trust domains will have a shared identity, again this may not = matter > >>> depending on the use case. > >>>> > >>>> Cheers, > >>>> > >>>> Peter. > >>>> > >>>> ESent from my Samsung device. > >>>> > >>>> Include original message > >>>> ---- Original message ---- > >>>> From: "Micha=C5=82 K=C5=82eczek (XPro Sp. z o. o.)" = > >>> > > >>>> Sent: 15/11/2016 10:30:29 pm > >>>> To: dev@river.apache.org = > >>>> Subject: Re: Maven Build > >>>> > >>>> While I also thought about out-of-process based mechanism for = execution > >>> of dynamically downloaded code, I came to the conclusion that in = the > >>> context of River/Java in-process mechanism is something that MUST = be done > >>> right. All other things can (and should) be built on that. > >>>> > >>>> I think that the proposal to implement "remote calls on smart = proxy > >>> interfaces that aren't remote" is somewhat a misnomer. The call is = either > >>> remote or local - you cannot have both at the same time. AFAIK = Jini > >>> community always believed there is no possibility to have = local/remote > >>> transparency. That is why there exists java.rmi.Remote marker = interface > >> in > >>> the first place. > >>>> > >>>> There is also the question about the level of isolation you want = to > >>> achieve. Simple "out-of-process" is not enough, chroot is not = enough, > >>> CGROUPS/containers/jails/zones might be not enough, virtual = machines > >> might > >>> be not enough :) - going the route you propose opens up the whole = world > >> of > >>> new questions to answer. At the same time you loose the most = important > >>> advantages of in-process execution: > >>>> - simplicity of communication between components (basic function = call, > >>> no need to do anything complicated to implement callbacks etc.) > >>>> - performance > >>>> > >>>> In the end you either standardize on the well known set of > >> communication > >>> protocols (such as JERI) OR you say "end of protocols" by allowing > >>> execution of dynamically downloaded code in-process. > >>>> If River is going to choose the first route - IMHO it is going to = fail > >>> since it does not propose anything competitive comparing to = current > >>> mainstream HTTP(S)/REST/JSON stack. > >>>> > >>>> Thanks, > >>>> Michal > >>>> Peter November 15, 2016 at 8:28 AM > >>>> I've been thinking about process isolation (instead of using > >>> ClassLoader's for isolation). Typically, smart proxy's are = isolated in > >>> their own ClassLoader, with their own copies of classes, however = with > >>> Maven, a lot more class sharing occurs. Since River uses codebase > >>> annotations for identity, using maven codebase annotations will = result in > >>> proxy's from different services sharing identity. > >>>> > >>>> A better way to provide for different identities coexisting on = the same > >>> node, would be to use subprocess jvm's for each Service's server > >> principal > >>> identity, to keep classes from different services in different = processes. > >>>> > >>>> This way, each principal would have their own process & Maven = namespace > >>> for their proxy's. > >>>> > >>>> Presently JERI only exports interfaces in reflection proxy's that > >>> implement Remote, so I'd need an endpoint that can export all > >> interfaces, > >>> accross a local interprocess connection to allow remote calls on = smart > >>> proxy interfaces that aren't remote. > >>>> > >>>> This also means that memory resource consumption of smart proxy's = can > >> be > >>> controlled by the client and a smart proxy's process killed = without > >> killing > >>> the client jvm. > >>>> > >>>> Cheers, > >>>> > >>>> Peter. > >>>> > >>>> > >>>> > >>>> Dawid Loubser November 15, 2016 at 8:50 AM > >>>> As a very heavy Maven user, I wanted to say that this is great = news. > >>>> This is encouraging indeed! > >>>> > >>>> Dawid > >>>> > >>>> > >>>> Peter November 15, 2016 at 4:08 AM > >>>> Some other news that might encourage participation, I've been = working > >>> on Dennis Reedy's script to modularise the codebase, I haven't run = the > >> test > >>> suites against it and it isn't generating stubs yet, and I'll need = to > >>> modify the platform modules for the IoT effort after the = conversion is > >>> complete. > >>>> > >>>> Here's the output of the River maven build: > >>>> > >>>> Reactor Summary: > >>>> > >>>> River-Internet Project ............................ SUCCESS = [0.689s] > >>>> Module :: River Policy ............................ SUCCESS = [8.395s] > >>>> Module :: River Resources ......................... SUCCESS = [0.607s] > >>>> Module :: River Platform .......................... SUCCESS = [23.521s] > >>>> Module :: River Service DL Library ................ SUCCESS = [8.999s] > >>>> Module :: River Service Library ................... SUCCESS = [8.014s] > >>>> Module :: River Service Starter ................... SUCCESS = [3.930s] > >>>> Module :: River SharedGroup Destroy ............... SUCCESS = [3.018s] > >>>> Module :: Outrigger .............................. SUCCESS = [0.056s] > >>>> Module :: Outrigger Service Download classes ...... SUCCESS = [2.416s] > >>>> Module :: Outrigger Service Implementation ........ SUCCESS = [4.118s] > >>>> Module :: Outrigger Snaplogstore ................. SUCCESS = [3.273s] > >>>> Module :: Lookup Service ......................... SUCCESS = [0.048s] > >>>> Module :: Reggie Service Download classes ........ SUCCESS = [3.966s] > >>>> Module :: Reggie Service Implementation .......... SUCCESS = [3.621s] > >>>> Module :: Mahalo ................................. SUCCESS = [0.436s] > >>>> Module :: Mahalo Service Download classes ......... SUCCESS = [2.059s] > >>>> Module :: Mahalo Service Implementation ........... SUCCESS = [4.175s] > >>>> Module :: Mercury the Event Mailbox ............... SUCCESS = [0.497s] > >>>> Module :: Mercury Service Download classes ........ SUCCESS = [3622s] > >>>> Module :: Mercury Service Implementation .......... SUCCESS = [3.562s] > >>>> Module :: Norm .................................... SUCCESS = [0.013s] > >>>> Module :: Norm Service Download classes ........... SUCCESS = [2.867s] > >>>> Module :: Norm Service Implementation ............. SUCCESS = [6.390s] > >>>> Module :: Group ................................... SUCCESS = [0.025s] > >>>> Module :: Mahalo Service Download classes ......... SUCCESS = [2.877s] > >>>> Module :: Group Service Implementation ............ SUCCESS = [2.037s] > >>>> Module :: Tools ................................... SUCCESS = [0.485s] > >>>> Module :: Check ConfigurationFile ................. SUCCESS = [2.720s] > >>>> Module :: Check serialversionUid .................. SUCCESS = [2.129s] > >>>> Module :: ClassDep ................................ SUCCESS = [4.157s] > >>>> Module :: Class Server ............................. SUCCESS = [3.353s] > >>>> Module :: Compute message digest .................. SUCCESS = [1.734s] > >>>> Module :: Compute httpmd codebase ................. SUCCESS = [2.102s] > >>>> Module :: Environment Check ...................... SUCCESS = [2.837s] > >>>> Module :: Jar wrapper ............................ SUCCESS = [2.179s] > >>>> Module :: Preferred classes list generator ........ SUCCESS = [2.495s] > >>>> Module :: Phoenix Activation ..................... SUCCESS = [0.029s] > >>>> Module :: Phoenix Download ....................... SUCCESS = [2.685s] > >>>> Module :: Phoenix ................................ SUCCESS = [4.095s] > >>>> Module :: Phoenix Group ........................... SUCCESS = [2.445s] > >>>> Module :: Phoenix Init ............................ SUCCESS = [1.740s] > >>>> River Distribution ................................ SUCCESS = [10.523s] > >>>> ------------------------------------------------------------ > >> ------------ > >>>> BUILD SUCCESS > >>>> ------------------------------------------------------------ > >> ------------ > >>>> Total time: 2:29.804s > >>>> Finished at: Mon Nov 14 22:22:31 EST 2016 > >>>> Final Memory: 145M/247M > >>>> ------------------------------------------------------------ > >> ------------ > >>>> > >>>> > >>>> > >>>> > >>> > >>> > >> > > > > > > > > -- > > Niclas Hedhman, Software Developer > > http://zest.apache.org - New Energy for = Java >=20 --Apple-Mail=_120AB7CE-9D01-4E0F-8553-001EC209254F Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_8591B046-729F-406E-B504-EBA078F7896D" --Apple-Mail=_8591B046-729F-406E-B504-EBA078F7896D Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

I=E2=80=99= d encourage the active River committers to review the OSGi Alliance RS / = RSA specifications. These specifications don=E2=80=99t deal with dynamic = code download at present - but no reason why they should in future - if = there is a compelling Use Case.  The OSGi community and the OSGi = Alliance are very open to ideas.

Best Wishes

Richard 


Richard = Nicholson
Chief Executive = Officer
OSGi = Alliance Board Member & Strategy




Direct: = +44 (0) 122 445 = 1260
Mobile: = +44 (0) 797 105 = 1645
Indirect: = +44 (0) 207 936 = 9098
Fax: = +44 (0) 845 127 = 5999
<= /span>


_________________________________
Paremus Limited. = Registered in England. Registration No. 4181472
Registered Office: 22-24 Broad Street, Wokingham, Berks RG40 = 1BA
Postal Address: 107-111 Fleet Street, London, EC4A = 2AB

The information transmitted is intended only for the person(s) or = entity to which it is addressed and may contain confidential and/or = privileged material. Any review, retransmission, dissemination or other = use of, or taking of any action in reliance upon, this information by = persons or entities other than the intended recipient is = prohibited. If you received this in error, please contact the = sender and delete the material from any = computer.

On 16 Nov 2016, at 12:43, Micha=C5=82 K=C5=82eczek (XPro Sp. = z o. o.) <michal.kleczek@xpro.biz> = wrote
:

=
1. I am aware of both Remote Services and Remote Services Admin=20 specifications. I would be happy to see how they deal with dynamic code=20= downloading but unfortunately they simply don't:
"This specification does not mandate the technique used to proxy an=20 Endpoint as a service in the OSGi
framework." - taken from "OSGi Compendium Release 6 Specification"
See point 3. below for some inherent issues with OSGi that make it=20 difficult to implement marshalling/unmarshalling as required by = River.

2. It has been a couple of years now since I last checked how Paremus=20 implemented Jini components. At that time the whole dynamic code=20 downloading has been based on PreferredClassProvider and=20 "java.rmi.codebase" property which would suggest it did not really solve issues with code downloading in Jini at all. I would be happy to be=20 proven wrong.

3. My comment about OSGi being "non-deterministic" in resolving=20 dependencies means that the same bundle installed in two different=20 environments is going to be linked with different dependent bundles. It=20= basically means the same object graph valid in one VM instance cannot be deserialized in another VM instance unless:
a) all bundles have their dependencies specified in such a way that=20 exact same dependency graph is going to be present everywhere (meaning=20= no Package-Imports, no version ranges etc)
b) all JVMs have the same set of bundles installed (ie - there is no=20 dynamic code downloading at all - the code is preloaded)
c) classes of serialized objects are not loaded by OSGi framework class=20= loaders but by other non-related class loading framework (which is what=20= original old OSGi-Jini spec did)
d) classes of all objects in the object graph are from the same bundle=20= (special case of a) )

In general all efforts I am aware of regarding "remoting" in Java didn't really even try to solve issues of dynamically downloaded code. They=20 were based on all parties having the same code installed and/or having a central authority providing a shared consistent view of all available=20= software.
I am not saying it is wrong. I am only saying that IMHO it is not=20 something River should do - it is simply a solved problem and there is=20= not point of re-doing it (JERI is cool but it is simply=20 yet-another-RPC-stack)

Regarding JBoss Modules:
I am not really advocating this particular library - it is just that it=20= is the only (non-OSGi - see above :) ) implementation of=20 non-hierarchical class loading that I am aware of which is of good=20 quality and actively maintained. I wouldn't want to reimplement it by=20 myself. Thought about ClassWorlds but it doesn't seem to be too active=20= and had some performance problems in the past. JBoss Modules is Apache=20= licensed so it can be used by River.

Thanks,
Michal


On Wednesday, 16 November 2016, Richard Nicholson <richard.nicholson@paremus.com> wrote:
Agree with Niclas. I=20= don=E2=80=99t understand the resolution comment.

Not only is OSGi <> Jini integration feasible but it is a=20 historical fact. Paremus did this - and a pretty good job we did - in = =E2=80=A6=20 something like 2006 :-/

If the River community decided that there is interest in OSGi - then = I=E2=80=99d suggest reading the Remote Service and Remote Service Admin=20 specifications and thinking about how Jini concepts might enhance that=20= world view. There are well over 10 million OSGi enabled IoT gateways out there!

Sorry - I see no compelling technical or commercial arguments for the=20 JBoss Module route.


> On 16 Nov 2016, at 08:11, Niclas Hedhman <niclas@hedhman.org> wrote:
>
> I am curious, what do you mean by "non-deterministic dependency=20 resolution"
> ?  You can make it as predictable as you wish with attributes = and
> directives.
>
> Cheers
> Niclas
>
> On Wed, Nov 16, 2016 at 4:07 PM, Micha=C5=82 K=C5=82eczek <michal.kleczek@xpro.biz>
> wrote:
>
>> While non-hierarchical class loading is crucial, OSGI with = its
>> non-deterministic dependency resolution is very difficult ( if=20= not
>> impossible ) to target.
>> I'm working on JBoss Module based class loading for River which I'm going
>> to propose as contribution soon.
>>
>> Thanks,
>> Michal
>>
>> On Wednesday, 16 November 2016, Dawid Loubser <dawid@travellinck.com>
>> wrote:
>>
>>> +1 for OSGi providing the best solution to the class=20 resolution problem,
>>> though I think some work will have to be done around trust, as you say.
>>>
>>>
>>> On 16/11/2016 02:23, Peter wrote:
>>>>
>>>> The conventional alternatives will remain;  the=20 existing ClassLoader
>>> isolation and the complexities surrounding multiple copies=20= of the same or
>>> different versions of the same classes interacting within=20= the same jvm.
>>> Maven will present a new alternative of maximum sharing,=20 where different
>>> service principals will share the same identity.
>>>>
>>>> Clearly, the simplest solution is to avoid code=20 download and only use
>>> reflection proxy's
>>>>
>>>> An inter process call isn't remote, but there is a=20 question of how a
>>> reflection proxy should behave when a subprocess is=20 terminated.
>>>>
>>>> UndeclaredThrowableException seems appropriate.
>>>>
>>>> It would plug in via the existing ClassLoading=20 RMIClassLoader provider
>>> mechanism, it would be a client concern, transparent to the service or
>>> server.
>>>>
>>>> The existing behaviour would remain default.
>>>>
>>>> So there can be multiple class resolution options:
>>>>
>>>> 1. Existing PrefferedClassProvider.
>>>> 2. Maven class resolution, where maximum class sharing=20= exists.  This
>> may
>>> be preferable in situations where there is one domain of=20 trust, eg within
>>> one corporation or company.  Max performance.
>>>> 3. Process Isolation.  Interoperation between = trusted=20 entities, where
>>> code version incompatibilities may exist, because of=20 separate development
>>> teams and administrators.  Each domain of trust has = it's=20 own process
>>> domain.  Max compatibility, but slower.
>>>> 4. OSGi.
>>>>
>>>> There may be occassions where simpler (because=20 developers don't need to
>>> understand ClassLoaders), slow, compatible and reliable=20 wins over fast
>> and
>>> complex or broken.
>>>>
>>>> A subprocess may host numerous proxy's and codebases=20 from one principal
>>> trust domain (even a later version of River could be=20 provisioned using
>>> Maven).  A subprocess would exist for each trust = domain. So if there are
>>> two companies, code from each remains isolated and=20 communicates only
>> using
>>> common api.  No unintended code versioning = conflicts.
>>>>
>>>> This choice would not prevent or exclude other methods=20= of
>> communication,
>>> the service, even if isolated within it's own process will=20= still
>>> communicate remotely over the network using JERI, JSON=20 etc.  This is
>>> orthogonal to and independant of remote communication=20 protocols.
>>>>
>>>> OSGi would of course be an alternative option, if one=20= wished to execute
>>> incompatible versions of libraries etc within one process,=20= but different
>>> trust domains will have a shared identity, again this may=20= not matter
>>> depending on the use case.
>>>>
>>>> Cheers,
>>>>
>>>> Peter.
>>>>
>>>> ESent from my Samsung device.
>>>>
>>>>  Include original message
>>>> ---- Original message ----
>>>> From: "Micha=C5=82 K=C5=82eczek (XPro Sp. z o. o.)" = <michal.kleczek@xpro.biz
>>> <javascript:;>>
>>>> Sent: 15/11/2016 10:30:29 pm
>>>> To: dev@river.apache.org <javascript:;>
>>>> Subject: Re: Maven Build
>>>>
>>>> While I also thought about out-of-process based=20 mechanism for execution
>>> of dynamically downloaded code, I came to the conclusion=20 that in the
>>> context of River/Java in-process mechanism is something=20 that MUST be done
>>> right. All other things can (and should) be built on = that.
>>>>
>>>> I think that the proposal to implement "remote calls on smart proxy
>>> interfaces that aren't remote" is somewhat a misnomer. The=20= call is either
>>> remote or local - you cannot have both at the same time.=20 AFAIK Jini
>>> community always believed there is no possibility to have=20= local/remote
>>> transparency. That is why there exists java.rmi.Remote=20 marker interface
>> in
>>> the first place.
>>>>
>>>> There is also the question about the level of isolation you want to
>>> achieve. Simple "out-of-process" is not enough, chroot is=20= not enough,
>>> CGROUPS/containers/jails/zones might be not enough, virtual machines
>> might
>>> be not enough :) - going the route you propose opens up the whole world
>> of
>>> new questions to answer. At the same time you loose the=20 most important
>>> advantages of in-process execution:
>>>> - simplicity of communication between components (basic function call,
>>> no need to do anything complicated to implement callbacks=20= etc.)
>>>> - performance
>>>>
>>>> In the end you either standardize on the well known set of
>> communication
>>> protocols (such as JERI) OR you say "end of protocols" by=20= allowing
>>> execution of dynamically downloaded code in-process.
>>>> If River is going to choose the first route - IMHO it=20= is going to fail
>>> since it does not propose anything competitive comparing to current
>>> mainstream HTTP(S)/REST/JSON stack.
>>>>
>>>> Thanks,
>>>> Michal
>>>> Peter November 15, 2016 at 8:28 AM
>>>> I've been thinking about process isolation (instead of=20= using
>>> ClassLoader's for isolation).  Typically, smart = proxy's are isolated in
>>> their own ClassLoader, with their own copies of classes,=20 however with
>>> Maven, a lot more class sharing occurs.  Since River = uses=20 codebase
>>> annotations for identity, using maven codebase annotations=20= will result in
>>> proxy's from different services sharing identity.
>>>>
>>>> A better way to provide for different identities=20 coexisting on the same
>>> node, would be to use subprocess jvm's for each Service's=20= server
>> principal
>>> identity, to keep classes from different services in=20 different processes.
>>>>
>>>> This way, each principal would have their own process=20= & Maven namespace
>>> for their proxy's.
>>>>
>>>> Presently JERI only exports interfaces in reflection=20 proxy's that
>>> implement Remote, so I'd need an endpoint that can export=20= all
>> interfaces,
>>> accross a local interprocess connection to allow remote=20 calls on smart
>>> proxy interfaces that aren't remote.
>>>>
>>>> This also means that memory resource consumption of=20 smart proxy's can
>> be
>>> controlled by the client and a smart proxy's process killed without
>> killing
>>> the client jvm.
>>>>
>>>> Cheers,
>>>>
>>>> Peter.
>>>>
>>>>
>>>>
>>>> Dawid Loubser November 15, 2016 at 8:50 AM
= >>>> As a very heavy Maven user, I wanted to say that this=20= is great news.
>>>> This is encouraging indeed!
>>>>
>>>> Dawid
>>>>
>>>>
>>>> Peter November 15, 2016 at 4:08 AM
>>>> Some other news that might  encourage = participation,=20 I've been working
>>> on Dennis Reedy's script to modularise the codebase, I=20 haven't run the
>> test
>>> suites against it and it isn't generating stubs yet, and=20 I'll need to
>>> modify the platform modules for the IoT effort after the=20 conversion is
>>> complete.
>>>>
>>>> Here's the output of the River maven build:
>>>>
>>>> Reactor Summary:
>>>>
>>>> River-Internet Project ............................=20 SUCCESS [0.689s]
>>>> Module :: River Policy ............................=20 SUCCESS [8.395s]
>>>> Module :: River Resources .........................=20 SUCCESS [0.607s]
>>>> Module :: River Platform ..........................=20 SUCCESS  [23.521s]
>>>> Module :: River Service DL Library ................=20 SUCCESS [8.999s]
>>>> Module :: River Service Library ...................=20 SUCCESS [8.014s]
>>>> Module :: River Service Starter ...................=20 SUCCESS [3.930s]
>>>> Module :: River SharedGroup Destroy ...............=20 SUCCESS [3.018s]
>>>> Module :: Outrigger ..............................=20 SUCCESS [0.056s]
>>>> Module :: Outrigger Service Download classes ......=20 SUCCESS [2.416s]
>>>> Module :: Outrigger Service Implementation ........=20 SUCCESS [4.118s]
>>>> Module :: Outrigger Snaplogstore .................=20 SUCCESS [3.273s]
>>>> Module :: Lookup Service .........................=20 SUCCESS [0.048s]
>>>> Module :: Reggie Service Download classes ........=20 SUCCESS [3.966s]
>>>> Module :: Reggie Service Implementation ..........=20 SUCCESS [3.621s]
>>>> Module :: Mahalo ................................. SUCCESS [0.436s]
>>>> Module :: Mahalo Service Download classes .........=20 SUCCESS [2.059s]
>>>> Module :: Mahalo Service Implementation ...........=20 SUCCESS [4.175s]
>>>> Module :: Mercury the Event Mailbox ...............=20 SUCCESS [0.497s]
>>>> Module :: Mercury Service Download classes ........=20 SUCCESS [3622s]
>>>> Module :: Mercury Service Implementation ..........=20 SUCCESS [3.562s]
>>>> Module :: Norm .................................... SUCCESS [0.013s]
>>>> Module :: Norm Service Download classes ...........=20 SUCCESS [2.867s]
>>>> Module :: Norm Service Implementation .............=20 SUCCESS [6.390s]
>>>> Module :: Group ................................... SUCCESS [0.025s]
>>>> Module :: Mahalo Service Download classes .........=20 SUCCESS [2.877s]
>>>> Module :: Group Service Implementation ............=20 SUCCESS [2.037s]
>>>> Module :: Tools ................................... SUCCESS [0.485s]
>>>> Module :: Check ConfigurationFile .................=20 SUCCESS [2.720s]
>>>> Module :: Check serialversionUid ..................=20 SUCCESS [2.129s]
>>>> Module :: ClassDep ................................ SUCCESS [4.157s]
>>>> Module :: Class Server .............................=20 SUCCESS [3.353s]
>>>> Module :: Compute message digest ..................=20 SUCCESS [1.734s]
>>>> Module :: Compute httpmd codebase .................=20 SUCCESS [2.102s]
>>>> Module :: Environment Check ......................=20 SUCCESS [2.837s]
>>>> Module :: Jar wrapper ............................=20 SUCCESS [2.179s]
>>>> Module :: Preferred classes list generator ........=20 SUCCESS [2.495s]
>>>> Module :: Phoenix Activation .....................=20 SUCCESS [0.029s]
>>>> Module :: Phoenix Download .......................=20 SUCCESS [2.685s]
>>>> Module :: Phoenix ................................ SUCCESS [4.095s]
>>>> Module :: Phoenix Group ...........................=20 SUCCESS [2.445s]
>>>> Module :: Phoenix Init ............................=20 SUCCESS [1.740s]
>>>> River Distribution ................................ SUCCESS [10.523s]
>>>> ------------------------------------------------------------
>> ------------
>>>> BUILD SUCCESS
>>>> ------------------------------------------------------------
>> ------------
>>>> Total time: 2:29.804s
>>>> Finished at: Mon Nov 14 22:22:31 EST 2016
>>>> Final Memory: 145M/247M
>>>> ------------------------------------------------------------
>> ------------
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
>
> --
> Niclas Hedhman, Software Developer
> http://zest.apache.org - New Energy for Java


= --Apple-Mail=_8591B046-729F-406E-B504-EBA078F7896D Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=paremus-logo-S.jpg Content-Type: image/jpeg; x-unix-mode=0666; name="paremus-logo-S.jpg" Content-Id: /9j/4AAQSkZJRgABAgEASABIAAD/4Q5HRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBXaW5kb3dz ADIwMDk6MDM6MzEgMTc6NTQ6MDcAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAABLKADAAQAAAAB AAAATgAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAA0RAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAKgCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A9VWXlfWfoGH1OvpOTnVV59paG0EmQXfzbbHAbKnWf4P1XM3r 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 JSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJT/9n/7RL8UGhvdG9zaG9wIDMuMAA4QklNBCUAAAAA ABAAAAAAAAAAAAAAAAAAAAAAOEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EJgAAAAAA DgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAA AAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAA AABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAAB ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gA AAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAA AAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4 QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANRAAAABgAAAAAAAAAAAAAATgAAASwAAAAOAHAAYQBy AGUAbQB1AHMALQBsAG8AZwBvAC0ATAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAB LAAAAE4AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwA AAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExl ZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAE4AAAAAUmdodGxvbmcAAAEsAAAABnNsaWNlc1ZsTHMA AAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURs b25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAA AFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJj dDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAABOAAAA AFJnaHRsb25nAAABLAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VU RVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhj ZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAH ZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAA C2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNl dGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAA AAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE/8AAAAAAAADhCSU0EEQAAAAAA AQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAANLQAAAAEAAACgAAAAKgAAAeAAAE7AAAANEQAY AAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSAAAAAAf/bAIQA DAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAwM/8AAEQgAKgCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAA AAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcG CAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZE k1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5en t8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKS Q1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2 hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9VWXlfWfoGH1OvpOTnVV59paG0EmQXfz bbHAbKnWf4P1XM3rjca/qvT/AK4i3rf1hY2sW2F+NXbZZU9jhGNj/Ym1fZun7Gn3+vfZfv8A5v8A 01lT6ydS+rVvUj1TpVDL73PFt2RkmwYpuqbtqNWNurbdm7B9B/6L/uvdb+kY/hA63pvH97/CZsfK 58hHDjMQf0sn6uHD+9xy9L0/1g+ut/S+sN6Vh4BzrtrHPY2yLHb59lNLGWu9rfz7P+o/SIH11w/r Na6vqfTurDpfTMSoW3y4tLC0utuusqqqu+37qvTZXjers9T/AI5VunfVTK6n9UbBY+3D6r1N4yM5 98h1+1zyzFyXM2XVYl9Jb+jr9+P/AMJ+mrsofV7K6D9TW5XR+qZpzBkvP2ymmo2YdHt9N9MP3WW7 me3K2U+/+atr/QoRoC7124a6d1TxnJLgw4ifbHrnEmXucP6Z/del+rf146T1zJf05gvozqWB7mZN YqL2yK3Prayy9rfe+v8AR2OY/wDSexdIvMbeq01sfb9S+nWYFBl93UBim03OEtqpodsy9tW31Hb/ AP23/wAL1f1M6p13O6cP23SW5Ac8stLPTc6sbPTdfSA1tVr3Os2/Q/RV7/SQlV+nbpraJ8vOGOM5 yhZNGEZfrI/3oPRrE+sn1s6d9XPsozKr77Mxzm01YzA9x2bd/wBN9Tf8LW399ba4H/GVkU4nXPqt l5DtlGNkvuufBO1ldmFZY7a3c521jfzU7HESmAfH8mGRoW2n/wCNPo9TS+7pnVKq2/Ssfjsa0Tp7 nOvXV9O6jhdUwqs7BtF2NcJY8SODtc1zXQ5j2OG17HLmMz/Gf9SPstw+1HLlhH2f0bB6kjb6X6et lPv/AOFfsWH9VG/WzpH1Uoq6Xgk5XWM5zqX3Ncasah1ddf2rIb7bmsf6O+rcz+b/AEn85ZXTc847 jfCYG/0v0kXr3fTElwXVerfXP6pOxM3qvUMbq2Fk3NotoFIptbulznY/p7d+xjPpWf8Abf57JZv1 i+uGV9a+qfV3ogx91Ta3U33iG47BXXZba/a17rn325DK627H7P8ARfzqb7R3BFVd9NFcQe7SXGZX XPrR1Hq3/NvorsenKwaK3dY6o5hfWy57Wu9LEpPt935nrf8ACfzfoKVXWfrR0DrGD076xWU9RwOp 2ehj9Rpr9J7L3fzVV9TP0X6R30dv/Gep+jQ9s9xdXw9aTxPYpLhOm9b+uvXMzq+B0+zGxmYGZbWM 25hdta1zq6MSqpvte/8ARerdfb/pVHpP1g+u/XvX6XijEwczpT309Rz3tNjH2Nc6ulmLR9Frv0Vn r7t7Pz6/S/mkfaOuo0312tHEPF71Jed2/Xnr1f1W61ZcKq+tdEya8Wy5jZqdusFPqNrefp+27+R9 Cz/g12efn34/1eyepVhv2irDfkMBBLN7ajc2Wzu2b/5SBxyG/U0niDopLz131167Z0H6usqsxqep dcNzLM68baqxQ70t/p/Q9a7fX/wfqf4H9KzZp02/Xvo/U8GvOsZ17p2baKbraKBVZjl3FzxT7Ps7 fpPsf/4F+i9RHGRuQN/+arif/9C717H+qfTOuW/bbMrOBu+13YNddTmtsd+l25GRb6d1tP6T1Psv q7P+5C6nrObmXfVGzN+qzfUttqZZi+k0bhW5zfWNNLvb9oro9TZT/pf+F/RrK+sn1e6DhZGR1LqH VrOnYWe4OysRrmj1ntIfsqdssydrnfpLaqm2f9aVfp/1cpycc9R+pvW3+i55mpznbd419K11Xp2V ua1zfZl42RYnDSpVoD1+XybuWXLZowic2SOWMREzyj3If8z14ox/uZEH1If9ZcTqedk9Rysy3oVd Tv0vUm2Me9zC1/2imjJdbfj11V+v6vv9Gz2f4b+bpU4fTuts6l9Yesl+J0Nt9l1OMw7Q+D6eTbbo 65/r3elj+nj31erlfaVT+snVetX4uTT1TqYa7FvONZgtdsc7b7/tD/Srx2W1e1vp2vZ/1tdj9Wun 43WfqTj9P6hQaW5GKxjmM9hDGud9kvrmdlz/AE683/jrPURkblxHY78PZOTBPk8A4cgM82nFCR/m /m/q/O1egf4yPq/nZ1XTRTfiOvd6ePbeK9rnExXS70bH+i530Ka/5v8AwayP8ZXSfrDfnvy2fbMn BDahh04jXPrYfd9q+010vbdXbu/SV5HoWssZ+g9Sr0lp0/4tnt69+2s/qDupXMtF9THVsoHqM/mr Ml1O71fS2tdsqqp9R/8AOLtMeo00MqLtxYIlO44xncBpX6TncJlGpaH+q8j/AIvcr6xV9NZi9a9S xzrHHHF5Jvrp2hzftDne/b6u/wBJmR+n2fyPRVf/ABhtY/6x/VFjwHNdmFrmnUEG3BBa4Fd0GtHA AnwQMnp+DlW0XZOPXfbiu9THssYHOrd+/U5w9jtPzU2M6lxV32/rJMbFeTFvS+mscHsxKGvaZa4V sBB8jtXIfXzqeWzrnSOj259nRukZu92Vn1O9NxLf8D9o/wAD/g27v5v9Z9W/9FUu5VfNwMHqFP2f Ox6sqmd3p3MbY2Rw7bYHe5CMqlZ1SRpo+T/XTB+puBi41fR8n7d1R9zDdkHIdkltA3b/AFXb3UV7 7fS/N9RdX9XyP/HK+sv/ABWN/wCe6l0lf1c+r9VBxq+m4rKHPbY6ttLA0vZ/NWOG33PZ+a5Wq8LD qyrsyqitmTkBovva0B7wwba/VsHufsb9HcnnKDHh1OhFnx4f+9QI0b8nzPJ6P0mn69dSw/rDkXYV HUT9q6flMuNFby73W02WfR+k5zK/Ud/gf+7NKvU9K+pOP9Zel4GJkZnVc31ftDW15Hr00mr9JXdl a/vt+g3/AK5/g/W7vqHS+ndTp9DqONVl1AyGXMDwDxuZu+g7+U1D6b0To/SWub03DpxN+jzUwNc6 ON7/AKb/AO0kctjrdVpsrhea/wAXZnK+spmSerXn8VH/ABfkftj61/8Ap0s/6u5ddjYWHiG12LRX Qciw3Xmtobvsd9O2zb9Ox/76WNg4WI+5+LRXQ/Jebb3VtDS+w/Sts2j3vd+8gZ3xafNX/NTW3g+T Z9Vl3Svr42ppeW9Rre4DWGtyLC9/9Vjfc9dd1b63fV131Lu9LOqttycJ2PVjtcDcbH1mkMfjz6le x7v0u/8Am11VHT8HHfe/Hx6qnZbt+S5jGtNjjoX27R+kd/WVXH+rf1exbHW43TMSmx7S1zmU1tJa 4bLGe1n0Ht+mxE5IncHQ2Ps/9BRwkCngMDM6E36p/Vvp31iwPW6Xmeu39oucWNotbbb6bN9X6Vnr fn/pav0f+lrru9MfV8fp/wBVb8C/6n9YtvyMjIbX+ym3jIqsa6dv6Gr81z/0H6T9J+m/QWV2Vr0v 9ldM+wDpv2Sk4AAaMU1tNUA7o9EjZ9P3qr0/6sfV7pt/2jA6dj494nbaytu8SNrtlh97NzT+YiMo smjqSeH9E2jhNAfi/wD/0bX15wus1/Wyvqbuk2dcwPs4rxKK2vsYx43eo29lDXPb+ld63u9l7P8A Cfof0ex/i2+rnUei4WTf1FvpZPULBY7GkEVMYCyprtssbdZve9+1/sr9Fn012Fv0fzf7XCdn0Rx/ Z4U8/c9qN1weDHHg9yVfM0s3oPRs/IblZeFRdksjbdZUx7xH0fdY130fzFbqpZUDtklxlzjqSfNE SUDKb6qSSSSQpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJT/9kAOEJJTQQhAAAAAABVAAAA AQEAAAAPAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwAAAAEwBBAGQAbwBiAGUAIABQAGgA bwB0AG8AcwBoAG8AcAAgAEMAUwAyAAAAAQA4QklNBAYAAAAAAAcAAwAAAAEBAP/hOmlodHRwOi8v bnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2Vo aUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 eG1wdGs9IjMuMS4xLTExMiI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5v cmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRm OmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh cC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94 YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyI+CiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1 aWQ6OEEwN0Q5OEMxNDFFREUxMTgwOUZBNEEzREM2QTQ5OEU8L3hhcE1NOkRvY3VtZW50SUQ+CiAg ICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6OEIwN0Q5OEMxNDFFREUxMTgwOUZBNEEzREM2 QTQ5OEU8L3hhcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6 cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnV1aWQ6 NDg2QTZCMTExNDFFREUxMTgwOUZBNEEzREM2QTQ5OEU8L3N0UmVmOmluc3RhbmNlSUQ+CiAgICAg ICAgICAgIDxzdFJlZjpkb2N1bWVudElEPnV1aWQ6NDg2QTZCMTExNDFFREUxMTgwOUZBNEEzREM2 QTQ5OEU8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgIDwveGFwTU06RGVyaXZlZEZyb20+CiAg ICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0i IgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgog ICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAwOS0wMy0zMVQxNzo1NDowNyswMTowMDwveGFwOkNy ZWF0ZURhdGU+CiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA5LTAzLTMxVDE3OjU0OjA3KzAx OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU+MjAwOS0wMy0z MVQxNzo1NDowNyswMTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9y VG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIFdpbmRvd3M8L3hhcDpDcmVhdG9yVG9vbD4KICAgICAg PC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg ICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAg ICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICA8L3JkZjpEZXNj cmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAg eG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIj4KICAg ICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAg ICAgPHBob3Rvc2hvcDpIaXN0b3J5Lz4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxy ZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6 Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwv dGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAw PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAw MDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3Rp ZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk5hdGl2ZURpZ2VzdD4yNTYsMjU3LDI1 OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5 LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjs3NjBBODY5OEVCMTlGNEU4OUE2NzIz RDQ3MUE0MzZEQjwvdGlmZjpOYXRpdmVEaWdlc3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgog ICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlm PSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERp bWVuc2lvbj4zMDA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlE aW1lbnNpb24+Nzg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNw YWNlPi0xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOk5hdGl2ZURpZ2VzdD4zNjg2 NCw0MDk2MCw0MDk2MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2Nywz Njg2OCwzMzQzNCwzMzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3 OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0 MTQ4NCw0MTQ4Niw0MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTcz MCw0MTk4NSw0MTk4Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0 MTk5NCw0MTk5NSw0MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs MTYsMTcsMTgsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7NEMxOEREMDhBMzY4NjYxOEMwMEQ2 Nzg4MkJCNTkzMTU8L2V4aWY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4K ICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0 IGVuZD0idyI/Pv/uAA5BZG9iZQBkAAAAAAH/2wCEAAoHBwcIBwoICAoPCggKDxINCgoNEhQQEBIQ EBQRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBCwwMFRMVIhgYIhQODg4UFA4O Dg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAE4BLAMB EQACEQEDEQH/3QAEACb/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEB 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 --Apple-Mail=_8591B046-729F-406E-B504-EBA078F7896D-- --Apple-Mail=_120AB7CE-9D01-4E0F-8553-001EC209254F--