Re: Geronimo 3.0-beta-1: Pluto Portlet Deployment
Eric Dalquist <[email protected]> Sat, 25 Feb 2012 18:43:32 -0600
| Newsgroups | gmane.comp.jakarta.pluto.user |
|---|---|
| Organization | UW DoIT |
| Message-ID | <[email protected]> |
This is a cryptographically signed message in MIME format.
--------------ms060701010400000200000503
Content-Type: multipart/alternative;
boundary="------------040602040203070304010009"
This is a multi-part message in MIME format.
--------------040602040203070304010009
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
The invoker portlet is only intended to be called via the=20
PortletContainer.doRender/doAction/doResource/doEvent methods. The=20
PortletContainerImpl does all the work of setting up the request prior=20
to the invocation.
It seems like you're simply trying to run a portlet in a container that=20
isn't actually a portal. Simply assembling a portlet webapp with Pluto=20
(adding the dispatcher serlvet) just adds the logic needed in the=20
portlet webapp for pluto to dispatch to it. The guts of the portlet=20
container (aka portal) still needs to be deployed as a seperate webapp,=20
then you interact with that portal webapp and it dispatches to your portl=
et.
-Eric
On 12/29/11 3:41 AM, Behrooz Nobakht wrote:
> Hello,
>
> I originally posted the following message=20
> <http://apache-geronimo.328035.n3.nabble.com/Geronimo-3-0-beta-1-Pluto-=
Portlet-Deployment-td3616167.html>=20
> at Apache Geronimo user mailing list and they suggested posting it=20
> here, too. So, I would be thankful for any idea or help on this.
>
> I am trying to deploy a simple Pluto Portlet into Geronimo 3.0-beta-1:
>
> * I have a simple class extending javax.portlet.GenericPortlet. The
> class overrides method doRender or doView for a plain sample.
> * The portlet.xmllooks like:
>
> <portlet>
> <portlet-name>MyPortlet</portlet-name>
> <portlet-class>MyPortletClassQualifiedPath</portlet-class>
> <supports>
> <mime-type>text/html</mime-type>
> <portlet-mode>view</portlet-mode>
> <portlet-mode>edit</portlet-mode>
> <portlet-mode>help</portlet-mode>
> </supports>
> <portlet-info>
> <title>My Portlet</title>
> </portlet-info>
> </portlet>
>
> * The geronimo-web.xmllooks like:
>
> <sys:environment>
> <sys:moduleId>
> <sys:groupId>my-project-group-id</sys:groupId>
> <sys:artifactId>my-project-artifact</sys:artifactId>
> <sys:version>1.0-SNAPSHOT</sys:version>
> <sys:type>war</sys:type>
> </sys:moduleId>
> <sys:dependencies>
> <sys:dependency>
> <sys:groupId>org.apache.portals</sys:groupId>
> <sys:artifactId>portlet-api_2.0_spec</sys:artifactId>
> <sys:version>1.0</sys:version>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.portals.pluto</sys:groupId>
> <sys:artifactId>pluto-container</sys:artifactId>
> <sys:version>2.0.1</sys:version>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.portals.pluto</sys:groupId>
> <sys:artifactId>pluto-container-api</sys:artifactId>
> <sys:version>2.0.1</sys:version>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.portals.pluto</sys:groupId>
> <sys:artifactId>pluto-container-driver-api</sys:artifactId>
> <sys:version>2.0.1</sys:version>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.portals.pluto</sys:groupId>
> <sys:artifactId>pluto-portal-driver</sys:artifactId>
> <sys:version>2.0.1</sys:version>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.portals.pluto</sys:groupId>
> <sys:artifactId>pluto-portal-driver-impl</sys:artifactId>
> <sys:version>2.0.1</sys:version>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.geronimo.plugins</sys:groupId>
> <sys:artifactId>pluto-support</sys:artifactId>
> </sys:dependency>
> <sys:dependency>
> <sys:groupId>org.apache.geronimo.plugins</sys:groupId>
> <sys:artifactId>geronimo-pluto</sys:artifactId>
> <sys:version>3.0-beta-1</sys:version>
> </sys:dependency>
> </sys:dependencies>
> <sys:hidden-classes />
> <sys:non-overridable-classes />
> </sys:environment>
>
> <context-root>/control</context-root>
>
> * In web.xml, I have:
>
> <servlet>
> <servlet-name>MyPortletServlet</servlet-name>
> <servlet-class>org.apache.pluto.container.driver.PortletServlet</servle=
t-class>
> <init-param>
> <param-name>portlet-name</param-name>
> <param-value>MyPortlet</param-value>
> </init-param>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>MyPortletServlet</servlet-name>
> <url-pattern>/PlutoInvoker/p/d</url-pattern>
> </servlet-mapping>
>
> * I use Maven geronimo:deployto deploy the WAR into Geronimo. It
> succeeds.
> * The MyPortlet#initmethod is called to just verify that the portlet
> is initialized.
> * When I issue the address
> http://localhost:8080/control/PlutoInvoker/p/dI receive an NPE
> having a root cause in that there is not METHOD_IDattached to the
> HTTP request attributes.
> * I debugged the mixture of Apache Geronimo + Jetty + Pluto and I
> found out that based on the life cycle, for each portlet request,
> the object DefaultPortletInvokerServiceshould be called in
> invokemethod to prepare the METHOD_ID and other attributes in the
> HTTP request. I debugged this and the method gets called for other
> portlets in Geronimo. For my portlet, this does *not* happen.
>
> Can you please tell what I am doing wrongly?
>
> Thanks,
> Behrooz
>
>
>
>
>
>
>
>
--------------040602040203070304010009
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta content=3D"text/html; charset=3DISO-8859-1"
http-equiv=3D"Content-Type">
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
The invoker portlet is only intended to be called via the
PortletContainer.doRender/doAction/doResource/doEvent methods. The
PortletContainerImpl does all the work of setting up the request
prior to the invocation.<br>
<br>
It seems like you're simply trying to run a portlet in a container
that isn't actually a portal. Simply assembling a portlet webapp
with Pluto (adding the dispatcher serlvet) just adds the logic
needed in the portlet webapp for pluto to dispatch to it. The guts
of the portlet container (aka portal) still needs to be deployed as
a seperate webapp, then you interact with that portal webapp and it
dispatches to your portlet.<br>
<br>
-Eric<br>
<br>
On 12/29/11 3:41 AM, Behrooz Nobakht wrote:
<blockquote
cite=3D"mid:CAEEKBgUzJtAuGxFWrasVv+JO=3D=3DWLsgyJUjXdi0Tb-jZH_S77Gw@mail.=
gmail.com"
type=3D"cite">Hello,
<div><br>
</div>
<div>I originally posted the following <a moz-do-not-send=3D"true"
href=3D"http://apache-geronimo.328035.n3.nabble.com/Geronimo-3-0-beta-1-P=
luto-Portlet-Deployment-td3616167.html">message</a>
at Apache Geronimo user mailing list and they suggested posting
it here, too. So, I would be thankful for any idea or help on
this.<br>
<br>
<div class=3D"gmail_quote">
<div>I am trying to deploy a simple Pluto Portlet into
Geronimo 3.0-beta-1:</div>
<div>
<ul>
<li>I have a simple class extending <font face=3D"'cou=
rier
new', monospace">javax.portlet.GenericPortlet</font><fo=
nt
face=3D"arial, helvetica, sans-serif">. The class
overrides method doRender or doView for a plain
sample.</font></li>
<li><font face=3D"arial, helvetica, sans-serif">The </font>=
<font
face=3D"'courier new', monospace">portlet.xml</font><fo=
nt
face=3D"arial, helvetica, sans-serif"> looks like:</fon=
t></li>
</ul>
<div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet>=
;</font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet-na=
me>MyPortlet</portlet-name></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet-cl=
ass>MyPortletClassQualifiedPath</portlet-class></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><supports&g=
t;</font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><mime-type&=
gt;text/html</mime-type></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet-mo=
de>view</portlet-mode></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet-mo=
de>edit</portlet-mode></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet-mo=
de>help</portlet-mode></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></supports&=
gt;</font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><portlet-in=
fo></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><title>M=
y
Portlet</title></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></portlet-i=
nfo></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></portlet&g=
t;</font></div>
<div style=3D"font-family:arial,helvetica,sans-serif"><br>
</div>
<div>
<ul>
<li><font face=3D"arial, helvetica, sans-serif">The </f=
ont><font
face=3D"'courier new', monospace">geronimo-web.xml<=
/font><font
face=3D"arial, helvetica, sans-serif"> looks like:<=
/font></li>
</ul>
<div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:en=
vironment></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:mo=
duleId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>my-project-group-id</sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>my-project-artifact</sys:artifactId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>1.0-SNAPSHOT</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ty=
pe>war</sys:type></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:m=
oduleId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendencies></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.portals</sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>portlet-api_2.0_spec</sys:artifactId></font></div>
<div>
<font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>1.0</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.portals.pluto</sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>pluto-container</sys:artifactId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>2.0.1</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.portals.pluto</sys:groupId></font></div>
<div>
<font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>pluto-container-api</sys:artifactId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>2.0.1</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.portals.pluto</sys:groupId></font></div>
<div>
<font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>pluto-container-driver-api</sys:artifactId></font></div=
>
<div>
<font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>2.0.1</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.portals.pluto</sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>pluto-portal-driver</sys:artifactId></font></div>
<div>
<font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>2.0.1</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.portals.pluto</sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>pluto-portal-driver-impl</sys:artifactId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ve=
rsion>2.0.1</sys:version></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:de=
pendency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:gr=
oupId>org.apache.geronimo.plugins</sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:ar=
tifactId>pluto-support</sys:artifactId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependency></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span> &nb=
sp;
<sys:dependency></font><=
/div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span> &nb=
sp;
<sys:groupId>org.apache.geronimo.plugins</=
sys:groupId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span> &nb=
sp;
<sys:artifactId>geronimo-pluto</sys:artifa=
ctId></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span> &nb=
sp;
<sys:version>3.0-beta-1</sys:v=
ersion></font></div>
<div>
<font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span> &nb=
sp;
</sys:dependency></font>=
</div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:d=
ependencies></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:hi=
dden-classes
/></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><sys:no=
n-overridable-classes
/></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></sys:e=
nvironment></font></div>
<div><font face=3D"'courier new', monospace"><br>
</font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><contex=
t-root>/control</context-root></font></div>
<div>
<ul>
<li><font face=3D"arial, helvetica, sans-serif">In =
</font><font
face=3D"'courier new', monospace">web.xml</font=
><font
face=3D"arial, helvetica, sans-serif">, I have:=
</font></li>
</ul>
<div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><se=
rvlet></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><se=
rvlet-name>MyPortletServlet</servlet-name></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><se=
rvlet-class>org.apache.pluto.container.driver.PortletServlet</servl=
et-class></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><in=
it-param></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><pa=
ram-name>portlet-name</param-name></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><pa=
ram-value>MyPortlet</param-value></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></i=
nit-param></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><lo=
ad-on-startup>1</load-on-startup></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></s=
ervlet></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><se=
rvlet-mapping></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><se=
rvlet-name>MyPortletServlet</servlet-name></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span><ur=
l-pattern>/PlutoInvoker/p/d</url-pattern></font></div>
<div><font face=3D"'courier new', monospace"><span
style=3D"white-space:pre-wrap"> </span></s=
ervlet-mapping></font></div>
<div
style=3D"font-family:arial,helvetica,sans-serif">=
<br>
</div>
<div>
<ul>
<li><font face=3D"arial, helvetica, sans-serif"=
>I
use Maven </font><font face=3D"'courier
new', monospace">geronimo:deploy</font><fon=
t
face=3D"arial, helvetica, sans-serif"> to
deploy the WAR into Geronimo. It succeeds.<=
/font></li>
<li><font face=3D"arial, helvetica, sans-serif"=
>The
</font><font face=3D"'courier new', monospace=
">MyPortlet#init</font><font
face=3D"arial, helvetica, sans-serif">
method is called to just verify that the
portlet is initialized.</font></li>
<li><font face=3D"arial, helvetica, sans-serif"=
>When
I issue the address </font><font
face=3D"'courier new', monospace"><a
moz-do-not-send=3D"true"
href=3D"http://localhost:8080/control/Plu=
toInvoker/p/d"
target=3D"_blank">http://localhost:8080/c=
ontrol/PlutoInvoker/p/d</a></font><font
face=3D"arial, helvetica, sans-serif"> I
receive an NPE having a root cause in that
there is not </font><font face=3D"'courier
new', monospace">METHOD_ID</font><font
face=3D"arial, helvetica, sans-serif">
attached to the HTTP request attributes.</f=
ont></li>
<li><font face=3D"arial, helvetica, sans-serif"=
>I
debugged the mixture of Apache Geronimo +
Jetty + Pluto and I found out that based
on the life cycle, for each portlet
request, the object </font><font
face=3D"'courier new', monospace">DefaultPo=
rtletInvokerService</font><font
face=3D"arial, helvetica, sans-serif">
should be called in </font><font
face=3D"'courier new', monospace">invoke</f=
ont><font
face=3D"arial, helvetica, sans-serif">
method to prepare the METHOD_ID and other
attributes in the HTTP request. I debugged
this and the method gets called for other
portlets in Geronimo. </font><span
style=3D"font-family:arial,helvetica,sans-s=
erif">For
my portlet, this does <b>not</b> happen.&nb=
sp;</span></li>
</ul>
<div><font face=3D"arial, helvetica, sans-serif">=
Can
you please tell what I am doing wrongly? =
;</font></div>
</div>
</div>
</div>
<div><font face=3D"arial, helvetica, sans-serif"><br>
</font></div>
<div><font face=3D"arial, helvetica, sans-serif">Thanks=
,</font></div>
<div><font face=3D"arial, helvetica, sans-serif">Behroo=
z</font></div>
<div><font face=3D"arial, helvetica, sans-serif"><br>
</font></div>
<div><font face=3D"arial, helvetica, sans-serif"><br>
</font></div>
<div style=3D"font-family:arial,helvetica,sans-serif"><=
br>
</div>
</div>
</div>
<div><font face=3D"arial, helvetica, sans-serif"><br>
</font></div>
<div><font face=3D"arial, helvetica, sans-serif"><br>
</font></div>
<div><font face=3D"arial, helvetica, sans-serif"><br>
</font></div>
<div style=3D"font-family:arial,helvetica,sans-serif">
<br>
</div>
</div>
</div>
</div>
<br>
</div>
</blockquote>
</body>
</html>
--------------040602040203070304010009--
--------------ms060701010400000200000503
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIZOjCC
BJ8wggQIoAMCAQICBEaekRowDQYJKoZIhvcNAQEFBQAwgcMxCzAJBgNVBAYTAlVTMRQwEgYD
VQQKEwtFbnRydXN0Lm5ldDE7MDkGA1UECxMyd3d3LmVudHJ1c3QubmV0L0NQUyBpbmNvcnAu
IGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0
IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMDkwMzIzMTUxODI3WhcNMTkwMzIzMTU0ODI3WjCBtDEUMBIG
A1UEChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1
c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5ICgyMDQ4KTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK1NS6kShrLq
oyAHFRZkKitL0b8LSk2O7YB2pWe3eEDAc0LIaMDbUyvdXrh2mDWTixqdfBM6Dh9btx7P5SQU
HrGBqY19uMxrSwPxAgzcq6VAJAB/dJShnQgps4gL9Yd3nVXN5MN+12pkq4UUhpVblzJQbz3I
umYM4/y9uEnBdolJGf3AqL2Jo2cvxp+8cRlguC3pLMmQdmZ7lOKveNZlU1081pyyzykD+S+k
ULLUSM4FMlWK/bJkTA7kmAd123/fuQhVYIUwKfl7SKRphuM1Px6GXXp6Fb3vAI4VIlQXAJAm
k7wOSWiRv/hH052VQsEOTd9vJs/DGCFiZkNw1tXAB+ECAwEAAaOCAScwggEjMA4GA1UdDwEB
/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYX
aHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5l
bnRydXN0Lm5ldC9zZXJ2ZXIxLmNybDA7BgNVHSAENDAyMDAGBFUdIAAwKDAmBggrBgEFBQcC
ARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9DUFMwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5
oSQJFrlwMB8GA1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQM
MAobBFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI9lojCOJquK7DUWmOkD8I0XX7xMbAL2
dFLgwsYfzvKmEQyosQ5NhItxNu+zNUXzwfiWxYtVpMxrgxYgMtq++6+bt5/hfoSfnjxQpz9c
wr6LhrgIku74QisNE+N2hUgKSr/QpTsKsFS4beMI+TSNC46LEswXGjOHlcieCtxQUxd7MIIF
ozCCBIugAwIBAgIETA5iEjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4g
KGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQx
MzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAe
Fw0xMDA2MzAxODM0NTRaFw0yMDA2MzAxOTA0NTRaMIGAMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRW50cnVzdDEiMCAGA1UECxMZQ2VydGlmaWNhdGlvbiBBdXRob3JpdGllczE7MDkGA1UE
AxMyRW50cnVzdCBNYW5hZ2VkIFNlcnZpY2VzIENvbW1lcmNpYWwgUHVibGljIFJvb3QgQ0Ew
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMXI+wxZoiWKTiB15DT/VyF8eTSWED
/vatNS6/Y+s9kbGo2oI8Qlk/lsWn7lv9UeJmIVeu+Pp6iNTyQ09kOAyBBmAQ/yKq4PRHnsrP
uxgkirXZ5t3AumSPVr62v2kHVce9S94LjCR2UIov0EMvs8/qq95KIGxGLTgdoeDVXI/5RZeA
sGTquePKvbHest1FmPQaly2pRPdnlRHEmJQ2NkaR45AeQvKKn8kzpYeCoBLyCsD0HbHzlIfP
aujKqEcQZIbJUyD0y++KNajSPATWImCt2eXdeHEUcnmcHGq9ha1EEI02oW8zT2R0xhjdLoR5
Ds+xg43iGyxLPdoliIxHVPhhAgMBAAGjggHtMIIB6TAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0T
AQH/BAgwBgEB/wIBATAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3Nw
LmVudHJ1c3QubmV0MIIBGAYDVR0gBIIBDzCCAQswVwYNYIZIAYb6a4FIAwoCBDBGMEQGCCsG
AQUFBwIBFjhodHRwOi8vY29tcHViLm1hbmFnZWQuZW50cnVzdC5jb20vQ1AvRU1TQ29tbWVy
Y2lhbENQLnBkZjBXBg1ghkgBhvprgUgDCgIFMEYwRAYIKwYBBQUHAgEWOGh0dHA6Ly9jb21w
dWIubWFuYWdlZC5lbnRydXN0LmNvbS9DUC9FTVNDb21tZXJjaWFsQ1AucGRmMFcGDWCGSAGG
+muBSAMKAgYwRjBEBggrBgEFBQcCARY4aHR0cDovL2NvbXB1Yi5tYW5hZ2VkLmVudHJ1c3Qu
Y29tL0NQL0VNU0NvbW1lcmNpYWxDUC5wZGYwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2Ny
bC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMB0GA1UdDgQWBBTAMkkFZmaDhxlpua6DJQYZiwXX
dDAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDANBgkqhkiG9w0BAQUFAAOCAQEA
D7NwMLoCbvFzWEObVh724gCE6XY+xB2NpOrYpu7dlh98kzn7upnY1BMhjvLHiWDMcxIIsar/
XFNI7AePCF4PGpvfudBtB/U5umTxFVYgLLexxsN2cUOP5yd0mJb6k3wU6NOi8mPZNtSfullU
s7avzGHWx787no9d97XrIKKCMV8HwJjtZCt0OKFXVCYWMNMcFqVvBX2pbqgSlSBtZhzTIfi3
MYkEOY9Zgrtsh+2hP22OJuskImNEHqlYbM//OqlCGQz+4sK6Ai/3HMfKFKJ/6Oyf8j48dO12
3nPRMQAy/oBHEITGQQUK0hdDZyglGOzTHGWH2Ae33vrzs+8T9rG8GzCCBxEwggX5oAMCAQIC
BEwfo4cwDQYJKoZIhvcNAQEFBQAwgYAxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0
MSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMTswOQYDVQQDEzJFbnRydXN0
IE1hbmFnZWQgU2VydmljZXMgQ29tbWVyY2lhbCBQdWJsaWMgUm9vdCBDQTAeFw0xMDA3MDcy
MDE0NTRaFw0zMDA2MDcyMDQ0NTRaMHcxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0
MSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMTIwMAYDVQQDEylFbnRydXN0
IEVkdWNhdGlvbiBTaGFyZWQgU2VydmljZSBQcm92aWRlcjCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAOtRQhPAzU32kb0lQD4Zbvrz4z1/uMOXoAURJ8//Dm3SQFuuG+lDwyE4
zkk85mtmqJgbGsA2cQOiv7189VBAHxgvOkc322Riwi5TKErPAk/tU9ay2Zne1S4oDeMiHp9K
pgde0OcjKE7fx6PZmB/i0QWqVvm6C20cjFUcjYOs8QH79lh10w0bUuvR8/jk5FJ8Ss2cxDl2
CIB826jCZW2SKsQ1LlRSJIJ9AOfn6fr/m5aBHCEoqAkrI0zK+CT3OTtMTRzoGvyh9Wv2oWVV
OjlpUdD5HtxuFrDmps4Z2ZAE3+KCpX0G183hhEKzBRIDv3eC1Wv8J2mG/s+aNRqcgLmWFQcC
AwEAAaOCA5kwggOVMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMDwGA1Ud
IAQ1MDMwDwYNYIZIAYb6a4FIAwoCBDAPBg1ghkgBhvprgUgDCgIFMA8GDWCGSAGG+muBSAMK
AgYwggE/BggrBgEFBQcBAQSCATEwggEtMFUGCCsGAQUFBzAChklodHRwOi8vY29tcHVid2Vi
Lm1hbmFnZWQuZW50cnVzdC5jb20vQUlBL0NlcnRzSXNzdWVkVG9FTVNDb21QdWJSb290Q0Eu
cDdjMIHTBggrBgEFBQcwAoaBxmxkYXA6Ly9jb21wdWJzaGFkLm1hbmFnZWQuZW50cnVzdC5j
b20vb3U9RW50cnVzdCUyME1hbmFnZWQlMjBTZXJ2aWNlcyUyMENvbW1lcmNpYWwlMjBQdWJs
aWMlMjBSb290JTIwQ0Esb3U9Q2VydGlmaWNhdGlvbiUyMEF1dGhvcml0aWVzLG89RW50cnVz
dCxjPVVTP2NBQ2VydGlmaWNhdGU7YmluYXJ5LGNyb3NzQ2VydGlmaWNhdGVQYWlyO2JpbmFy
eTCCAawGA1UdHwSCAaMwggGfMIH+oIH7oIH4hj1odHRwOi8vY29tcHVid2ViLm1hbmFnZWQu
ZW50cnVzdC5jb20vQ1JMcy9FTVNDb21QdWJSb290Q0EuY3JshoG2bGRhcDovL2NvbXB1YnNo
YWQubWFuYWdlZC5lbnRydXN0LmNvbS9jbj1FbnRydXN0JTIwTWFuYWdlZCUyMFNlcnZpY2Vz
JTIwQ29tbWVyY2lhbCUyMFB1YmxpYyUyMFJvb3QlMjBDQSxvdT1DZXJ0aWZpY2F0aW9uJTIw
QXV0aG9yaXRpZXMsbz1FbnRydXN0LGM9VVM/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDti
aW5hcnkwgZuggZiggZWkgZIwgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0MSIw
IAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMTswOQYDVQQDEzJFbnRydXN0IE1h
bmFnZWQgU2VydmljZXMgQ29tbWVyY2lhbCBQdWJsaWMgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
MTAfBgNVHSMEGDAWgBTAMkkFZmaDhxlpua6DJQYZiwXXdDAdBgNVHQ4EFgQUIt2i+lhOgz5T
iwGAExY11IEVtn8wDQYJKoZIhvcNAQEFBQADggEBAHQ4kWFG0YwlCojUFLo5/Btbxr51qNZL
52Mf5QVC9O09b7YZE1ZcAUJlYxerhKPV66xQAhro9ch/VUYDKu1/qTAX5OGRH5sq5lBO2Rat
B7tEyEuY3S6SWXCsJcvyi7eUrPov5Ojo0GsMymqNbdU+Uy/e3I58daQx9BzVGIGXg8iAxt+7
cG4NtiXeCOXXfjPemC/OxuzH9k6SEv16ztlnfOFBJVs5jI1iKCtKDSd74K/k3CgvBK8zEvgL
jXzLgWS/pUqIv8jjhAFEu0pfxsXkpn69ORT3pw972+q+A2rg8lilyd9KIzvcpi07orohVeXn
Q+67NIscURgNDDtfFRWrq3cwggfXMIIGv6ADAgECAgRMH9d4MA0GCSqGSIb3DQEBBQUAMHcx
CzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0MSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9u
IEF1dGhvcml0aWVzMTIwMAYDVQQDEylFbnRydXN0IEVkdWNhdGlvbiBTaGFyZWQgU2Vydmlj
ZSBQcm92aWRlcjAeFw0xMTA3MjgxODAxMjFaFw0xNjA3MjgxODMxMjFaMIGsMQswCQYDVQQG
EwJVUzESMBAGA1UECBMJV2lzY29uc2luMSAwHgYDVQQKExdVbml2ZXJzaXR5IG9mIFdpc2Nv
bnNpbjEQMA4GA1UECxMHTWFkaXNvbjFVMBEGA1UEBRMKMDAwMDAwMDU1NDAWBgNVBAMTD0Vy
aWMgQiBEYWxxdWlzdDAoBgkqhkiG9w0BCQEWG2VyaWMuZGFscXVpc3RAZG9pdC53aXNjLmVk
dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKh4khZd6cTV19M5evwKbBEWDijA
DofaXZL3WpVqn2PFr3/g/vkO6wWIF3yKE/MuHt5Q5o4Pbkf5i1vZCOIXoHhrBKozID/lmbeu
ea69gW9RpdBwkCUitiwnnzYsrKUxReMV6pUzfK6cRcVIEU/joXHaJSJs3/UuvWE+fC8zFQ0c
DBJI4RCdHLvh0VshokZhISF6JsHXKzAgp2CXTrLTTMUyEbtfG5PvDnYpnQTRdaAdQGAg/xnf
WM1SSvAI5X/Gd56cMoIuH4w2+1k9IyhYGQAwP4lW4vkGm0eSP10xvqkMA0ZreDeBkQcanIem
ERXKM9ppUWQILtSuEqDMcmUFRFcCAwEAAaOCBDMwggQvMA4GA1UdDwEB/wQEAwIFoDArBgNV
HRAEJDAigA8yMDExMDcyODE4MDEyMVqBDzIwMTUwMTI3MTUzMTIxWjCCATMGCCsGAQUFBwEB
BIIBJTCCASEwUwYIKwYBBQUHMAKGR2h0dHA6Ly9lZHVjYXRpb253ZWIubWFuYWdlZC5lbnRy
dXN0LmNvbS9BSUEvQ2VydHNJc3N1ZWRUb0VNU0VkU1NQQ0EucDdjMIHJBggrBgEFBQcwAoaB
vGxkYXA6Ly9lZHVjYXRpb25zaGFkLm1hbmFnZWQuZW50cnVzdC5jb20vY249RW50cnVzdCUy
MEVkdWNhdGlvbiUyMFNoYXJlZCUyMFNlcnZpY2UlMjBQcm92aWRlcixvdT1DZXJ0aWZpY2F0
aW9uJTIwQXV0aG9yaXRpZXMsbz1FbnRydXN0LGM9VVM/Y0FDZXJ0aWZpY2F0ZTtiaW5hcnks
Y3Jvc3NDZXJ0aWZpY2F0ZVBhaXI7YmluYXJ5MCsGA1UdIAQkMCIwDwYNYIZIAYb6a4FIAwoC
BDAPBg1ghkgBhvprgUgDCgIFMFgGCWCGSAGG+mseAQRLDElUaGUgcHJpdmF0ZSBrZXkgY29y
cmVzcG9uZGluZyB0byB0aGlzIGNlcnRpZmljYXRlIG1heSBoYXZlIGJlZW4gZXhwb3J0ZWQu
MCYGA1UdEQQfMB2BG2VyaWMuZGFscXVpc3RAZG9pdC53aXNjLmVkdTCCAaIGA1UdHwSCAZkw
ggGVMIH9oIH6oIH3hkZodHRwOi8vZWR1Y2F0aW9ud2ViLm1hbmFnZWQuZW50cnVzdC5jb20v
Q1JMcy9FbnRydXN0RURVQ0FUSU9OU1NQQ0EuY3JshoGsbGRhcDovL2VkdWNhdGlvbnNoYWQu
bWFuYWdlZC5lbnRydXN0LmNvbS9jbj1FbnRydXN0JTIwRWR1Y2F0aW9uJTIwU2hhcmVkJTIw
U2VydmljZSUyMFByb3ZpZGVyLG91PUNlcnRpZmljYXRpb24lMjBBdXRob3JpdGllcyxvPUVu
dHJ1c3QsYz1VUz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0O2JpbmFyeTCBkqCBj6CBjKSB
iTCBhjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VudHJ1c3QxIjAgBgNVBAsTGUNlcnRpZmlj
YXRpb24gQXV0aG9yaXRpZXMxMjAwBgNVBAMTKUVudHJ1c3QgRWR1Y2F0aW9uIFNoYXJlZCBT
ZXJ2aWNlIFByb3ZpZGVyMQ0wCwYDVQQDEwRDUkwyMB8GA1UdIwQYMBaAFCLdovpYToM+U4sB
gBMWNdSBFbZ/MB0GA1UdDgQWBBSjX9p6AvNODW6BCg5FfXxGJxptGzAJBgNVHRMEAjAAMBkG
CSqGSIb2fQdBAAQMMAobBFY4LjADAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQCSQc6gRB27L8OG
WuMgsUMYVFcsPNyxn+waiQ+vL2SlomlTxMRLzOgI4OZbds5PzlgQuwZyY/R3lTem3btd+GbT
uusk6jToZ6s51o6jCQrRND4AOh7831kKdZm5Dxr6lwvgITuduNOlehiEAFbcBxNyMb7q8YTh
03fVtnn69CmZvgkqc50hDTQ13mXfKRWrSIsnfu3jQeA6WBZgZZUjhzd5Z+q/cxOYiH282/zY
HF2tN7iCa1rkOWPwHYgHKQgDfL9oyFFriYrXda1Yogb/T/OzrTxpKLuB21F++eooM6kNRPIS
kqQ3iuWYVH0XiWRb2lDAH3jDz6HLh2n6CSJGFFAnMYIDjjCCA4oCAQEwfzB3MQswCQYDVQQG
EwJVUzEQMA4GA1UEChMHRW50cnVzdDEiMCAGA1UECxMZQ2VydGlmaWNhdGlvbiBBdXRob3Jp
dGllczEyMDAGA1UEAxMpRW50cnVzdCBFZHVjYXRpb24gU2hhcmVkIFNlcnZpY2UgUHJvdmlk
ZXICBEwf13gwCQYFKw4DAhoFAKCCAeQwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkq
hkiG9w0BCQUxDxcNMTIwMjI2MDA0MzMyWjAjBgkqhkiG9w0BCQQxFgQUKn5F8T1Sp2oT+tnV
/vEnsb+9NgMwXwYJKoZIhvcNAQkPMVIwUDALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYI
KoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIGP
BgkrBgEEAYI3EAQxgYEwfzB3MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRW50cnVzdDEiMCAG
A1UECxMZQ2VydGlmaWNhdGlvbiBBdXRob3JpdGllczEyMDAGA1UEAxMpRW50cnVzdCBFZHVj
YXRpb24gU2hhcmVkIFNlcnZpY2UgUHJvdmlkZXICBEwf13gwgZEGCyqGSIb3DQEJEAILMYGB
oH8wdzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VudHJ1c3QxIjAgBgNVBAsTGUNlcnRpZmlj
YXRpb24gQXV0aG9yaXRpZXMxMjAwBgNVBAMTKUVudHJ1c3QgRWR1Y2F0aW9uIFNoYXJlZCBT
ZXJ2aWNlIFByb3ZpZGVyAgRMH9d4MA0GCSqGSIb3DQEBAQUABIIBAD3rh8EgBgoHWxA3Xqkx
z0bjf2Ey92Xu3Uy6TN5/hVApiENNcKtLA8wbQ4pp371z+8bWJFlXqrw0Keu4yT4khjo2DmHR
lN834xzWDL43K5YUG9RUemS/0JAxpibwMz7nDEQ54SW/wQ9atEwj1P1g096QNRLk8G+YntTF
uM1wZeeNBuyOUFWBhZYPsdIwg4Y5x2rgNfs1E4A0P9quAmzzjTpilabWVqNAeQyE2v2lTwzU
qhtGvN8KsvMKaCtmGCXWQOy7/pKV6kzXZc7MW9Mh4fRQvNgqnZj86wXJNYPKMbp4eI3rUSIx
sD8ULnPW48BYYpKyRjwqWFgUdbtzRbbPrIIAAAAAAAA=
--------------ms060701010400000200000503--