From mariusz at info.nl Wed Sep 28 07:35:42 2016 Content-Type: multipart/mixed; boundary="===============2347154653148034058==" MIME-Version: 1.0 From: Mariusz Chruscielewski - Info.nl To: keycloak-user at lists.jboss.org Subject: [keycloak-user] Custom rest endpoint Date: Wed, 28 Sep 2016 11:35:40 +0000 Message-ID: --===============2347154653148034058== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable I can't make REST endpoint work, I'm using exactly code supplied in example= , I tried also to check how standard endpoints in keycloak code are created= , all looks similar: /** * @author ">Stian Thorgersen */ public class HelloResourceProvider implements RealmResourceProvider { private KeycloakSession session; public HelloResourceProvider(KeycloakSession session) { this.session =3D session; } @GET @Produces(MediaType.TEXT_HTML) @Path("/{action}") public String get(@PathParam("action") String action) { //String requestUri =3D session.getContext().getUri().getRequestUri= ().toString(); String title =3D "APP_REQUEST"; if (action.equals("auth")) { title =3D "AUTH_RESPONSE"; } else if (action.equals("logout")) { title =3D "LOGOUT_REQUEST"; } StringBuilder sb =3D new StringBuilder(); sb.append("" + title + ""); UriBuilder base =3D UriBuilder.fromUri("http://localhost:8180/auth"= ); sb.append("account"); sb.append(""); return sb.toString(); } @Override public Object getResource() { return this; } @Override public void close() { } } But I'm still getting: RESTEASY003815: Subresource for target class has no jax-rs annotations.: nl= .vi.keycloak.providers.rest.HelloResourceProvider Can you please help me? Thanks Kind Regards, Mariusz Chruscielewski Software Engineer | mariusz(a)info.nl +31 (0)20 530 91 13 | +48 695 555 292 info.nl making platforms work Sint Antoniesbreestraat 16 | 1011 HB Amsterdam | +31 (0)20 530 91 11 Facebook | Twitter | LinkedIn | Google+ --===============2347154653148034058== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNv bnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPgo8c3R5bGU+ PCEtLQovKiBGb250IERlZmluaXRpb25zICovCkBmb250LWZhY2UKCXtmb250LWZhbWlseToiQ2Ft YnJpYSBNYXRoIjsKCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYgMyAyIDQ7fQpAZm9udC1mYWNlCgl7 Zm9udC1mYW1pbHk6Q2FsaWJyaTsKCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30KQGZv bnQtZmFjZQoJe2ZvbnQtZmFtaWx5OkNvbnNvbGFzOwoJcGFub3NlLTE6MiAxMSA2IDkgMiAyIDQg MyAyIDQ7fQpAZm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6R2VvcmdpYTsKCXBhbm9zZS0xOjIgNCA1 IDIgNSA0IDUgMiAzIDM7fQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLwpwLk1zb05vcm1hbCwgbGku TXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCgl7bWFyZ2luOjBjbTsKCW1hcmdpbi1ib3R0b206LjAw MDFwdDsKCWZvbnQtc2l6ZToxMS4wcHQ7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJp ZjsKCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTO30KYTpsaW5rLCBzcGFuLk1zb0h5cGVybGlu awoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOiMwNTYzQzE7Cgl0ZXh0LWRlY29yYXRp b246dW5kZXJsaW5lO30KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkCgl7bXNv LXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6Izk1NEY3MjsKCXRleHQtZGVjb3JhdGlvbjp1bmRl cmxpbmU7fQpjb2RlCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJZm9udC1mYW1pbHk6IkNvdXJp ZXIgTmV3Ijt9CnByZQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCW1zby1zdHlsZS1saW5rOiJI VE1MIFByZWZvcm1hdHRlZCBDaGFyIjsKCW1hcmdpbjowY207CgltYXJnaW4tYm90dG9tOi4wMDAx cHQ7Cglmb250LXNpemU6MTAuMHB0OwoJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijt9CnNwYW4u RW1haWxTdHlsZTE3Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtY29tcG9zZTsKCWZvbnQtZmFt aWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOwoJY29sb3I6d2luZG93dGV4dDt9CnNwYW4uSFRNTFBy ZWZvcm1hdHRlZENoYXIKCXttc28tc3R5bGUtbmFtZToiSFRNTCBQcmVmb3JtYXR0ZWQgQ2hhciI7 Cgltc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgltc28tc3R5bGUtbGluazoiSFRNTCBQcmVmb3JtYXR0 ZWQiOwoJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsKCW1zby1mYXJlYXN0LWxhbmd1YWdlOk5M O30KLk1zb0NocERlZmF1bHQKCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsKCWZvbnQtZmFt aWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOwoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7fQpA cGFnZSBXb3JkU2VjdGlvbjEKCXtzaXplOjYxMi4wcHQgNzkyLjBwdDsKCW1hcmdpbjo3MC44NXB0 IDcwLjg1cHQgNzAuODVwdCA3MC44NXB0O30KZGl2LldvcmRTZWN0aW9uMQoJe3BhZ2U6V29yZFNl Y3Rpb24xO30KLS0+PC9zdHlsZT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KPG86c2hhcGVkZWZh dWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4KPC94bWw+PCFbZW5kaWZdLS0+PCEt LVtpZiBndGUgbXNvIDldPjx4bWw+CjxvOnNoYXBlbGF5b3V0IHY6ZXh0PSJlZGl0Ij4KPG86aWRt YXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+CjwvbzpzaGFwZWxheW91dD48L3htbD48IVtlbmRp Zl0tLT4KPC9oZWFkPgo8Ym9keSBsYW5nPSJOTCIgbGluaz0iIzA1NjNDMSIgdmxpbms9IiM5NTRG NzIiPgo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPgo8cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiMy QjJCMkIiPjxzcGFuIGxhbmc9IkVOLVVTIj5JIGNhbiYjODIxNzt0IG1ha2UgUkVTVCBlbmRwb2lu dCB3b3JrLCBJJiM4MjE3O20gdXNpbmcgZXhhY3RseSBjb2RlIHN1cHBsaWVkIGluIGV4YW1wbGUs IEkgdHJpZWQgYWxzbyB0byBjaGVjayBob3cgc3RhbmRhcmQgZW5kcG9pbnRzIGluIGtleWNsb2Fr IGNvZGUgYXJlIGNyZWF0ZWQsIGFsbCBsb29rcyBzaW1pbGFyOjxicj48YnI+PHNwYW4gc3R5bGU9 ImNvbG9yOiNBOUI3QzYiPjxicj48L3NwYW4+PGk+PHNwYW4gc3R5bGU9ImNvbG9yOiM2Mjk3NTUi Pi8qKjxicj4gKiA8Yj5AYXV0aG9yIDwvYj48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM3N0I3 NjciPiZsdDthIGhyZWY9JnF1b3Q7bWFpbHRvOjxhIGhyZWY9Im1haWx0bzpzdGhvcmdlckByZWRo YXQuY29tIiB0YXJnZXQ9Il9ibGFuayI+c3Rob3JnZXJAcmVkaGF0LmNvbTwvYT4mcXVvdDsmZ3Q7 PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNjI5NzU1Ij5TdGlhbiBUaG9yZ2Vyc2VuPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojNzdCNzY3Ij4mbHQ7L2EmZ3Q7PGJyPiA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiM2Mjk3NTUiPiovPGJyPjwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9ImNvbG9y OiNDQzc4MzIiPnB1YmxpYyBjbGFzcyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYi PkhlbGxvUmVzb3VyY2VQcm92aWRlciA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIi PmltcGxlbWVudHMgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij5SZWFsbVJlc291 cmNlUHJvdmlkZXIgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHls ZT0iY29sb3I6I0NDNzgzMiI+cHJpdmF0ZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3 QzYiPktleWNsb2FrU2Vzc2lvbiA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM5ODc2QUEiPnNl c3Npb248L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIiPjs8YnI+PGJyPiZuYnNwOyZu YnNwOyZuYnNwOyBwdWJsaWMgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZDNjZEIj5IZWxs b1Jlc291cmNlUHJvdmlkZXI8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPihLZXlj bG9ha1Nlc3Npb24gc2Vzc2lvbikgezxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj50aGlzPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4uPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj OTg3NkFBIj5zZXNzaW9uIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+PSBzZXNz aW9uPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj47PGJyPiZuYnNwOyZuYnNwOyZu YnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPn08YnI+PGJyPiZuYnNwOyZu YnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNCQkI1MjkiPkBHRVQ8YnI+Jm5i c3A7Jm5ic3A7Jm5ic3A7IEBQcm9kdWNlczwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdD NiI+KE1lZGlhVHlwZS48L3NwYW4+PGk+PHNwYW4gc3R5bGU9ImNvbG9yOiM5ODc2QUEiPlRFWFRf SFRNTDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPik8YnI+Jm5ic3A7Jm5i c3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0JCQjUyOSI+QFBhdGg8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPig8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2 QTg3NTkiPiZxdW90Oy97YWN0aW9ufSZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5 QjdDNiI+KTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj Q0M3ODMyIj5wdWJsaWMgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij5TdHJpbmcg PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZDNjZEIj5nZXQ8L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOiNBOUI3QzYiPig8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNCQkI1MjkiPkBQYXRo UGFyYW08L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPig8L3NwYW4+PHNwYW4gc3R5 bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90O2FjdGlvbiZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I0E5QjdDNiI+KSBTdHJpbmcgYWN0aW9uKSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOmdyYXkiPi8v U3RyaW5nIHJlcXVlc3RVcmkgPSBzZXNzaW9uLmdldENvbnRleHQoKS5nZXRVcmkoKS5nZXRSZXF1 ZXN0VXJpKCkudG9TdHJpbmcoKTs8YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPlN0cmluZyB0 aXRsZSA9IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+JnF1b3Q7QVBQX1JFUVVF U1QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIiPjs8YnI+Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I0E5QjdDNiI+KGFjdGlvbi5lcXVhbHMoPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj NkE4NzU5Ij4mcXVvdDthdXRoJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2 Ij4pKSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyB0aXRsZSA9IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZB ODc1OSI+JnF1b3Q7QVVUSF9SRVNQT05TRSZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 I0NDNzgzMiI+Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij59IDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I0NDNzgzMiI+ZWxzZSBpZiA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYi PihhY3Rpb24uZXF1YWxzKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+JnF1b3Q7 bG9nb3V0JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4pKSB7PGJyPiZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyB0aXRsZSA9IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+JnF1b3Q7 TE9HT1VUX1JFUVVFU1QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIiPjs8 YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3Bh biBzdHlsZT0iY29sb3I6I0E5QjdDNiI+fTxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IFN0cmluZ0J1aWxkZXIgc2IgPSA8L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOiNDQzc4MzIiPm5ldyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPlN0 cmluZ0J1aWxkZXIoKTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+Ozxicj4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojQTlCN0M2Ij5zYi5hcHBlbmQoPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNkE4 NzU5Ij4mcXVvdDsmbHQ7aHRtbCZndDsmbHQ7aGVhZCZndDsmbHQ7dGl0bGUmZ3Q7JnF1b3Q7IDwv c3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+JiM0MzsgdGl0bGUgJiM0MzsgPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojNkE4NzU5Ij4mcXVvdDsmbHQ7L3RpdGxlJmd0OyZsdDsvaGVh ZCZndDsmbHQ7Ym9keSZndDsmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYi Pik8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIiPjs8YnI+Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5 QjdDNiI+VXJpQnVpbGRlciBiYXNlID0gVXJpQnVpbGRlci48aT5mcm9tVXJpPC9pPig8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90OzxhIGhyZWY9Imh0dHA6Ly9sb2NhbGhv c3Q6ODE4MC9hdXRoIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xvY2FsaG9zdDo4MTgwL2F1dGg8 L2E+JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4pPC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojQ0M3ODMyIj47PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPnNiLmFwcGVu ZCg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90OyZsdDthIGhyZWY9PC9z cGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojNkE4NzU5Ij4mcXVvdDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2 Ij4mIzQzOyBSZWFsbXNSZXNvdXJjZS48aT5hY2NvdW50VXJsPC9pPihiYXNlKS5idWlsZCg8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90O3Rlc3QmcXVvdDs8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPikudG9TdHJpbmcoKSAmIzQzOyA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0ND NzgzMiI+XCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+IGlkPTwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+XCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6IzZBODc1OSI+YWNjb3VudDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+ XCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+Jmd0O2FjY291bnQmbHQ7 L2EmZ3Q7JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4pPC9zcGFuPjxz cGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj47PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij5z Yi5hcHBlbmQoPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNkE4NzU5Ij4mcXVvdDsmbHQ7L2Jv ZHkmZ3Q7Jmx0Oy9odG1sJmd0OyZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdD NiI+KTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+Ozxicj4mbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I0E5QjdDNiI+c2IudG9TdHJpbmcoKTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0ND NzgzMiI+Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj QTlCN0M2Ij59PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojQkJCNTI5Ij5AT3ZlcnJpZGU8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3Bh biBzdHlsZT0iY29sb3I6I0NDNzgzMiI+cHVibGljIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 I0E5QjdDNiI+T2JqZWN0IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0ZGQzY2RCI+Z2V0UmVz b3VyY2U8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPigpIHs8YnI+Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6I0NDNzgzMiI+cmV0dXJuIHRoaXM7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPn08YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyA8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNCQkI1MjkiPkBPdmVycmlkZTxicj4mbmJzcDsmbmJzcDsm bmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj5wdWJsaWMgdm9pZCA8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkM2NkQiPmNsb3NlPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojQTlCN0M2Ij4oKSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPjxicj59PC9zcGFu PjxvOnA+PC9vOnA+PC9zcGFuPjwvcHJlPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNv LW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxh bmc9IkVOLVVTIj4mbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6 YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHBy ZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48c3BhbiBsYW5nPSJFTi1VUyI+QnV0IEkmIzgyMTc7bSBz dGlsbCBnZXR0aW5nOjxvOnA+PC9vOnA+PC9zcGFuPjwvcHJlPgo8cHJlIHN0eWxlPSJtc28tbWFy Z2luLXRvcC1hbHQ6MGNtO21hcmdpbi1yaWdodDo2LjBwdDttYXJnaW4tYm90dG9tOjYuMHB0O21h cmdpbi1sZWZ0OjBjbSI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFu PjwvcHJlPgo8cHJlIHN0eWxlPSJtYXJnaW46Ni4wcHQiPjxjb2RlPjxzcGFuIGxhbmc9IkVOLVVT IiBzdHlsZT0iZm9udC1mYW1pbHk6Q29uc29sYXM7Y29sb3I6YmxhY2siPlJFU1RFQVNZMDAzODE1 OiBTdWJyZXNvdXJjZSBmb3IgdGFyZ2V0IGNsYXNzIGhhcyBubyBqYXgtcnMgYW5ub3RhdGlvbnMu OiBubC52aS5rZXljbG9hay5wcm92aWRlcnMucmVzdC5IZWxsb1Jlc291cmNlUHJvdmlkZXI8L3Nw YW4+PC9jb2RlPjxzcGFuIGxhbmc9IkVOLVVTIj48bzpwPjwvbzpwPjwvc3Bhbj48L3ByZT4KPHBy ZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZv bnQtZmFtaWx5OkNvbnNvbGFzO2NvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9jb2RlPjxzcGFu IGxhbmc9IkVOLVVTIj48bzpwPjwvbzpwPjwvc3Bhbj48L3ByZT4KPHByZSBzdHlsZT0ibWFyZ2lu OjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtZmFtaWx5OkNvbnNv bGFzO2NvbG9yOmJsYWNrIj5DYW4geW91IHBsZWFzZSBoZWxwIG1lPyBUaGFua3M8L3NwYW4+PC9j b2RlPjxvOnA+PC9vOnA+PC9wcmU+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9v OnA+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4KPHRhYmxl IGNsYXNzPSJNc29Ob3JtYWxUYWJsZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9 IjQ2MSIgc3R5bGU9IndpZHRoOjM0NS42NXB0O21hcmdpbi1sZWZ0Oi0zLjBwdCI+Cjx0Ym9keT4K PHRyIHN0eWxlPSJoZWlnaHQ6MTEuMTVwdCI+Cjx0ZCBzdHlsZT0icGFkZGluZzowY20gMGNtIDBj bSAwY207aGVpZ2h0OjExLjE1cHQiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibGluZS1o ZWlnaHQ6MTIuMHB0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTom cXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrO21zby1mYXJlYXN0LWxhbmd1YWdl Ok5MIj5LaW5kIFJlZ2FyZHMsPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6YmxhY2siPjxvOnA+PC9v OnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjEy LjBwdCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2Vv cmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjazttc28tZmFyZWFzdC1sYW5ndWFnZTpOTCI+PG86 cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibGlu ZS1oZWlnaHQ6MTIuMHB0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWls eTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrO21zby1mYXJlYXN0LWxhbmd1 YWdlOk5MIj5NYXJpdXN6IENocnVzY2llbGV3c2tpPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNp emU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6Ymxh Y2siPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPC90ZD4KPC90cj4KPHRyIHN0eWxlPSJoZWlnaHQ6 MTEuMTVwdCI+Cjx0ZCBzdHlsZT0icGFkZGluZzowY20gMGNtIDE1LjBwdCAwY207aGVpZ2h0OjEx LjE1cHQiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibGluZS1oZWlnaHQ6MTIuMHB0Ij48 c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjazttc28tZmFyZWFzdC1sYW5ndWFnZTpO TCI+U29mdHdhcmUgRW5naW5lZXIgJm5ic3A7fCZuYnNwOyZuYnNwOzxhIGhyZWY9Im1haWx0bzpt YXJpdXN6QGluZm8ubmwiPjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5tYXJpdXN6QGluZm8ubmw8 L3NwYW4+PC9hPiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjEyLjBwdCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm b250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29s b3I6YmxhY2s7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6TkwiPiYjNDM7MzEgKDApMjAgNTMwIDkxIDEz IHwgJiM0Mzs0OCA2OTUgNTU1IDI5Mgo8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm b250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29s b3I6YmxhY2siPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPC90ZD4KPC90cj4KPHRyIHN0eWxlPSJo ZWlnaHQ6MTUuM3B0Ij4KPHRkIHN0eWxlPSJwYWRkaW5nOjBjbSAwY20gMy4wcHQgMGNtO2hlaWdo dDoxNS4zcHQiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibGluZS1oZWlnaHQ6MTYuMHB0 Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lh JnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrO21zby1mYXJlYXN0LWxhbmd1YWdlOk5MIj48YSBocmVm PSJodHRwOi8vd3d3LmluZm8ubmwvIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6 ZToxNC4wcHQ7Y29sb3I6d2hpdGU7YmFja2dyb3VuZDpibGFjayI+aW5mby5ubDwvc3Bhbj48c3Bh biBsYW5nPSJFTi1VUyIgc3R5bGU9ImNvbG9yOmJsdWUiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw Ozwvc3Bhbj48L2E+PGEgaHJlZj0iaHR0cDovL3d3dy5pbmZvLm5sL25sP3V0bV9zb3VyY2U9ZS1t YWlsX3NpZyZhbXA7dXRtX21lZGl1bT1lLW1haWwmYW1wO3V0bV90ZXJtPWNvbm5lY3RpbmdfdGhl X2RvdHMmYW1wO3V0bV9jYW1wYWlnbj1pbmZvX3NpZyI+PGk+PHNwYW4gbGFuZz0iRU4tVVMiIHN0 eWxlPSJjb2xvcjpibGFjayI+bWFraW5nCiBwbGF0Zm9ybXMgd29yazwvc3Bhbj48L2k+PC9hPjwv c3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+PG86cD48L286cD48L3Nw YW4+PC9wPgo8L3RkPgo8L3RyPgo8dHIgc3R5bGU9ImhlaWdodDoxMS4xNXB0Ij4KPHRkIHN0eWxl PSJwYWRkaW5nOjBjbSAwY20gMTUuMHB0IDBjbTtoZWlnaHQ6MTEuMTVwdCI+CjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhlaWdodDoxMi4wcHQiPjxzcGFuIHN0eWxlPSJmb250LXNp emU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6Ymxh Y2s7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6TkwiPlNpbnQgQW50b25pZXNicmVlc3RyYWF0IDE2ICZu YnNwO3wgJm5ic3A7MTAxMSBIQiBBbXN0ZXJkYW0gJm5ic3A7fCAmbmJzcDsmIzQzOzMxICgwKTIw IDUzMCA5MSAxMTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWls eTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrO21zby1mYXJlYXN0LWxhbmd1 YWdlOk5MIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJsaW5lLWhlaWdodDoxMi4wcHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6Tkwi PjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9pbmZvbmwiPjxzcGFuIHN0eWxlPSJj b2xvcjpibHVlIj5GYWNlYm9vazwvc3Bhbj48L2E+IHwKPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVy LmNvbS9pbmZvbmwiPjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5Ud2l0dGVyPC9zcGFuPjwvYT4g fAo8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS9pbmZvLW5sIj48c3Bh biBzdHlsZT0iY29sb3I6Ymx1ZSI+TGlua2VkSW48L3NwYW4+PC9hPiB8CjxhIGhyZWY9Imh0dHBz Oi8vcGx1cy5nb29nbGUuY29tLyYjNDM7aW5mb25sLyI+PHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUi Pkdvb2dsZSYjNDM7PC9zcGFuPjwvYT48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4w cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZiI+PG86cD48L286cD48L3Nw YW4+PC9wPgo8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6TkwiPjxvOnA+Jm5ic3A7PC9vOnA+ PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+Cjwv ZGl2Pgo8L2JvZHk+CjwvaHRtbD4K --===============2347154653148034058==-- From sthorger at redhat.com Thu Sep 29 05:31:07 2016 Content-Type: multipart/mixed; boundary="===============2720000191764660351==" MIME-Version: 1.0 From: Stian Thorgersen To: keycloak-user at lists.jboss.org Subject: Re: [keycloak-user] Custom rest endpoint Date: Thu, 29 Sep 2016 11:31:06 +0200 Message-ID: In-Reply-To: VI1PR0701MB18549A7284CE8AFA39A5CD0BB3CF0@VI1PR0701MB1854.eurprd07.prod.outlook.com --===============2720000191764660351== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Did you try the example does it work? On 28 September 2016 at 13:35, Mariusz Chruscielewski - Info.nl < mariusz(a)info.nl> wrote: > I can=E2=80=99t make REST endpoint work, I=E2=80=99m using exactly code s= upplied in example, I tried also to check how standard endpoints in keycloa= k code are created, all looks similar: > > > > > > */** * @author ">Stian Thorgersen */*public class HelloResourceProvider implement= s RealmResourceProvider { > > private KeycloakSession session; > > public HelloResourceProvider(KeycloakSession session) { > this.session =3D session; > } > > @GET > @Produces(MediaType.*TEXT_HTML*) > @Path("/{action}") > public String get(@PathParam("action") String action) { > //String requestUri =3D session.getContext().getUri().getRequestU= ri().toString(); > > String title =3D "APP_REQUEST"; > if (action.equals("auth")) { > title =3D "AUTH_RESPONSE"; > } else if (action.equals("logout")) { > title =3D "LOGOUT_REQUEST"; > } > > StringBuilder sb =3D new StringBuilder(); > sb.append("" + title + ""= ); > UriBuilder base =3D UriBuilder.*fromUri*("http://localhost:8180/a= uth"); > sb.append("account"); > > sb.append(""); > return sb.toString(); > } > > @Override > public Object getResource() { > return this; > } > > @Override > public void close() { > } > > } > > > > > > But I=E2=80=99m still getting: > > > > RESTEASY003815: Subresource for target class has no jax-rs annotations.: = nl.vi.keycloak.providers.rest.HelloResourceProvider > > > > Can you please help me? Thanks > > > > > > Kind Regards, > > > > Mariusz Chruscielewski > > Software Engineer | mariusz(a)info.nl > > +31 (0)20 530 91 13 | +48 695 555 292 > > info.nl *making platforms work* > > > Sint Antoniesbreestraat 16 | 1011 HB Amsterdam | +31 (0)20 530 91 11 > > Facebook | Twitter > | LinkedIn > | Google+ > > > > > > > _______________________________________________ > keycloak-user mailing list > keycloak-user(a)lists.jboss.org > https://lists.jboss.org/mailman/listinfo/keycloak-user > --===============2720000191764660351== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGRpdiBkaXI9Imx0ciI+RGlkIHlvdSB0cnkgdGhlIGV4YW1wbGUgZG9lcyBpdCB3b3JrPzwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9u IDI4IFNlcHRlbWJlciAyMDE2IGF0IDEzOjM1LCBNYXJpdXN6IENocnVzY2llbGV3c2tpIC0gSW5m by5ubCA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzptYXJpdXN6QGluZm8ubmwi IHRhcmdldD0iX2JsYW5rIj5tYXJpdXN6QGluZm8ubmw8L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJy PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4 O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPgoKCgoKCjxkaXYg bGFuZz0iTkwiIGxpbms9IiMwNTYzQzEiIHZsaW5rPSIjOTU0RjcyIj4KPGRpdj4KPHByZSBzdHls ZT0iYmFja2dyb3VuZDojMmIyYjJiIj48c3BhbiBsYW5nPSJFTi1VUyI+SSBjYW7igJl0IG1ha2Ug UkVTVCBlbmRwb2ludCB3b3JrLCBJ4oCZbSB1c2luZyBleGFjdGx5IGNvZGUgc3VwcGxpZWQgaW4g ZXhhbXBsZSwgSSB0cmllZCBhbHNvIHRvIGNoZWNrIGhvdyBzdGFuZGFyZCBlbmRwb2ludHMgaW4g a2V5Y2xvYWsgY29kZSBhcmUgY3JlYXRlZCwgYWxsIGxvb2tzIHNpbWlsYXI6PGJyPjxicj48c3Bh biBzdHlsZT0iY29sb3I6I2E5YjdjNiI+PGJyPjwvc3Bhbj48aT48c3BhbiBzdHlsZT0iY29sb3I6 IzYyOTc1NSI+LyoqPGJyPiAqIDxiPkBhdXRob3IgPC9iPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6Izc3Yjc2NyI+Jmx0O2EgaHJlZj0mcXVvdDttYWlsdG86PGEgaHJlZj0ibWFpbHRvOnN0aG9y Z2VyQHJlZGhhdC5jb20iIHRhcmdldD0iX2JsYW5rIj5zdGhvcmdlckByZWRoYXQuPHdicj5jb208 L2E+JnF1b3Q7Jmd0Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzYyOTc1NSI+U3RpYW4gVGhv cmdlcnNlbjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6Izc3Yjc2NyI+Jmx0Oy9hJmd0Ozxicj4g PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNjI5NzU1Ij4qLzxicj48L3NwYW4+PC9pPjxzcGFu IHN0eWxlPSJjb2xvcjojY2M3ODMyIj5wdWJsaWMgY2xhc3MgPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojYTliN2M2Ij5IZWxsb1Jlc291cmNlUHJvdmlkZXIgPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojY2M3ODMyIj5pbXBsZW1lbnRzIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5Yjdj NiI+UmVhbG1SZXNvdXJjZVByb3ZpZGVyIHs8YnI+PGJyPsKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5 bGU9ImNvbG9yOiNjYzc4MzIiPnByaXZhdGUgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTli N2M2Ij5LZXljbG9ha1Nlc3Npb24gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojOTg3NmFhIj5z ZXNzaW9uPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj47PGJyPjxicj7CoMKgwqAg cHVibGljIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2ZmYzY2ZCI+SGVsbG9SZXNvdXJjZVBy b3ZpZGVyPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4oPHdicj5LZXljbG9ha1Nl c3Npb24gc2Vzc2lvbikgezxicj7CoMKgwqDCoMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNjYzc4MzIiPnRoaXM8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPi48L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM5ODc2YWEiPnNlc3Npb24gPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojYTliN2M2Ij49IHNlc3Npb248L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4 MzIiPjs8YnI+wqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+fTxicj48 YnI+wqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2JiYjUyOSI+QEdFVDxicj7CoMKg wqAgQFByb2R1Y2VzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4oTWVkaWFUeXBl Ljwvc3Bhbj48aT48c3BhbiBzdHlsZT0iY29sb3I6Izk4NzZhYSI+VEVYVF9IVE1MPC9zcGFuPjwv aT48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KTxicj7CoMKgwqAgPC9zcGFuPjxzcGFuIHN0 eWxlPSJjb2xvcjojYmJiNTI5Ij5AUGF0aDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5Yjdj NiI+KDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7L3thY3Rpb259JnF1 b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4pPGJyPsKgwqDCoCA8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPnB1YmxpYyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNhOWI3YzYiPlN0cmluZyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNmZmM2NmQiPmdl dDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I2JiYjUyOSI+QFBhdGhQYXJhbTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5Yjdj NiI+KDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7YWN0aW9uJnF1b3Q7 PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4pIFN0cmluZyBhY3Rpb24pIHs8YnI+ wqDCoMKgwqDCoMKgwqAgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpncmF5Ij4vL1N0cmluZyBy ZXF1ZXN0VXJpID0gc2Vzc2lvbi5nZXRDb250ZXh0KCkuZ2V0VXJpKCkuPHdicj5nZXRSZXF1ZXN0 VXJpKCkudG9TdHJpbmcoKTs8YnI+PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHls ZT0iY29sb3I6I2E5YjdjNiI+U3RyaW5nIHRpdGxlID0gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojNmE4NzU5Ij4mcXVvdDtBUFBfUkVRVUVTVCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6I2NjNzgzMiI+Ozxicj7CoMKgwqDCoMKgwqDCoCBpZiA8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNhOWI3YzYiPihhY3Rpb24uZXF1YWxzKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZh ODc1OSI+JnF1b3Q7YXV0aCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+ KSkgezxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpdGxlID0gPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojNmE4NzU5Ij4mcXVvdDtBVVRIX1JFU1BPTlNFJnF1b3Q7PC9zcGFuPjxzcGFuIHN0 eWxlPSJjb2xvcjojY2M3ODMyIj47PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHls ZT0iY29sb3I6I2E5YjdjNiI+fSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPmVs c2UgaWYgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4oYWN0aW9uLmVxdWFscyg8 L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90O2xvZ291dCZxdW90Ozwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KSkgezxicj7CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHRpdGxlID0gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNmE4NzU5Ij4mcXVvdDtMT0dP VVRfUkVRVUVTVCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+Ozxicj7C oMKgwqDCoMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPn08YnI+PGJy PsKgwqDCoMKgwqDCoMKgIFN0cmluZ0J1aWxkZXIgc2IgPSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNjYzc4MzIiPm5ldyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPlN0cmlu Z0J1aWxkZXIoKTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+Ozxicj7CoMKgwqDC oMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPnNiLmFwcGVuZCg8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90OyZsdDtodG1sJmd0OyZsdDtoZWFk Jmd0OyZsdDt0aXRsZSZndDs8d2JyPiZxdW90OyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNh OWI3YzYiPisgdGl0bGUgKyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90 OyZsdDsvdGl0bGUmZ3Q7Jmx0Oy9oZWFkJmd0OyZsdDtib2R5Jmd0OyZxdW90Ozwvc3Bhbj48c3Bh biBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgz MiI+Ozxicj7CoMKgwqDCoMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYi PlVyaUJ1aWxkZXIgYmFzZSA9IFVyaUJ1aWxkZXIuPGk+ZnJvbVVyaTwvaT4oPC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojNmE4NzU5Ij4mcXVvdDs8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0Ojgx ODAvYXV0aCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly88d2JyPmxvY2FsaG9zdDo4MTgwL2F1dGg8 L2E+JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4pPC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojY2M3ODMyIj47PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBz dHlsZT0iY29sb3I6I2E5YjdjNiI+c2IuYXBwZW5kKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 IzZhODc1OSI+JnF1b3Q7Jmx0O2EgaHJlZj08L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4 MzIiPlwmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90OyA8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPisgUmVhbG1zUmVzb3VyY2UuPGk+YWNjb3Vu dFVybDwvaT4oPHdicj5iYXNlKS5idWlsZCg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3 NTkiPiZxdW90O3Rlc3QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPiku dG9TdHJpbmcoKSArIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7PC9z cGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojNmE4NzU5Ij4gaWQ9PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5c JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNmE4NzU5Ij5hY2NvdW50PC9zcGFuPjxz cGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojNmE4NzU5Ij4mZ3Q7YWNjb3VudCZsdDsvYSZndDsmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOiNhOWI3YzYiPik8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPjs8YnI+ PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+c2Iu YXBwZW5kKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7Jmx0Oy9ib2R5 Jmd0OyZsdDsvaHRtbCZndDsmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYi Pik8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPjs8YnI+wqDCoMKgwqDCoMKgwqAg cmV0dXJuIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+c2IudG9TdHJpbmcoKTwv c3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+Ozxicj7CoMKgwqAgPC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojYTliN2M2Ij59PGJyPjxicj7CoMKgwqAgPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojYmJiNTI5Ij5AT3ZlcnJpZGU8YnI+wqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I2NjNzgzMiI+cHVibGljIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+ T2JqZWN0IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2ZmYzY2ZCI+Z2V0UmVzb3VyY2U8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPigpIHs8YnI+wqDCoMKgwqDCoMKgwqAgPC9z cGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5yZXR1cm4gdGhpczs8YnI+wqDCoMKgIDwv c3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+fTxicj48YnI+wqDCoMKgIDwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6I2JiYjUyOSI+QE92ZXJyaWRlPGJyPsKgwqDCoCA8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPnB1YmxpYyB2b2lkIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I2ZmYzY2ZCI+Y2xvc2U8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPigp IHs8YnI+wqDCoMKgIH08YnI+PGJyPn08L3NwYW4+PHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wcmU+ CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIj7CoDx1PjwvdT48dT48L3U+ PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiPsKgPHU+ PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8cHJlIHN0eWxlPSJtYXJnaW46Ni4wcHQiPjxzcGFuIGxh bmc9IkVOLVVTIj5CdXQgSeKAmW0gc3RpbGwgZ2V0dGluZzo8dT48L3U+PHU+PC91Pjwvc3Bhbj48 L3ByZT4KPHByZSBzdHlsZT0ibWFyZ2luLXJpZ2h0OjYuMHB0O21hcmdpbi1ib3R0b206Ni4wcHQ7 bWFyZ2luLWxlZnQ6MGNtIj48c3BhbiBsYW5nPSJFTi1VUyI+wqA8dT48L3U+PHU+PC91Pjwvc3Bh bj48L3ByZT4KPHByZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1V UyIgc3R5bGU9ImZvbnQtZmFtaWx5OkNvbnNvbGFzO2NvbG9yOmJsYWNrIj5SRVNURUFTWTAwMzgx NTogU3VicmVzb3VyY2UgZm9yIHRhcmdldCBjbGFzcyBoYXMgbm8gamF4LXJzIGFubm90YXRpb25z Ljogbmwudmkua2V5Y2xvYWsucHJvdmlkZXJzLnJlc3QuPHdicj5IZWxsb1Jlc291cmNlUHJvdmlk ZXI8L3NwYW4+PC9jb2RlPjxzcGFuIGxhbmc9IkVOLVVTIj48dT48L3U+PHU+PC91Pjwvc3Bhbj48 L3ByZT4KPHByZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIg c3R5bGU9ImZvbnQtZmFtaWx5OkNvbnNvbGFzO2NvbG9yOmJsYWNrIj7CoDwvc3Bhbj48L2NvZGU+ PHNwYW4gbGFuZz0iRU4tVVMiPjx1PjwvdT48dT48L3U+PC9zcGFuPjwvcHJlPgo8cHJlIHN0eWxl PSJtYXJnaW46Ni4wcHQiPjxjb2RlPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1mYW1p bHk6Q29uc29sYXM7Y29sb3I6YmxhY2siPkNhbiB5b3UgcGxlYXNlIGhlbHAgbWU/IFRoYW5rczwv c3Bhbj48L2NvZGU+PHU+PC91Pjx1PjwvdT48L3ByZT4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+ PC91PsKgPHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91Pjwv cD4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSI0NjEiIHN0eWxlPSJ3 aWR0aDozNDUuNjVwdCI+Cjx0Ym9keT4KPHRyIHN0eWxlPSJoZWlnaHQ6MTEuMTVwdCI+Cjx0ZCBz dHlsZT0icGFkZGluZzowY20gMGNtIDBjbSAwY207aGVpZ2h0OjExLjE1cHQiPgo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibGluZS1oZWlnaHQ6MTIuMHB0Ij48c3BhbiBzdHlsZT0iZm9udC1z aXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJs YWNrIj5LaW5kIFJlZ2FyZHMsPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6YmxhY2siPjx1PjwvdT48 dT48L3U+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImxpbmUtaGVpZ2h0 OjEyLjBwdCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+PHU+PC91PsKgPHU+PC91Pjwvc3Bhbj48 L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhlaWdodDoxMi4wcHQiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDss c2VyaWY7Y29sb3I6YmxhY2siPk1hcml1c3ogQ2hydXNjaWVsZXdza2k8L3NwYW4+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJp Zjtjb2xvcjpibGFjayI+PHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8L3RkPgo8L3RyPgo8dHIg c3R5bGU9ImhlaWdodDoxMS4xNXB0Ij4KPHRkIHN0eWxlPSJwYWRkaW5nOjBjbSAwY20gMTUuMHB0 IDBjbTtoZWlnaHQ6MTEuMTVwdCI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhl aWdodDoxMi4wcHQiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtm b250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj5Tb2Z0d2Fy ZSBFbmdpbmVlciDCoHzCoMKgPGEgaHJlZj0ibWFpbHRvOm1hcml1c3pAaW5mby5ubCIgdGFyZ2V0 PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5tYXJpdXN6QGluZm8ubmw8L3NwYW4+ PC9hPsKgPHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibGluZS1oZWlnaHQ6MTIuMHB0Ij48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6 ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFj ayI+KzMxICgwKTIwIDUzMCA5MSAxMyB8IDxhIGhyZWY9InRlbDolMkI0OCUyMDY5NSUyMDU1NSUy MDI5MiIgdmFsdWU9Iis0ODY5NTU1NTI5MiIgdGFyZ2V0PSJfYmxhbmsiPis0OCA2OTUgNTU1IDI5 MjwvYT4KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtm b250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj48dT48L3U+ PHU+PC91Pjwvc3Bhbj48L3A+CjwvdGQ+CjwvdHI+Cjx0ciBzdHlsZT0iaGVpZ2h0OjE1LjNwdCI+ Cjx0ZCBzdHlsZT0icGFkZGluZzowY20gMGNtIDMuMHB0IDBjbTtoZWlnaHQ6MTUuM3B0Ij4KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjE2LjBwdCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtj b2xvcjpibGFjayI+PGEgaHJlZj0iaHR0cDovL3d3dy5pbmZvLm5sLyIgdGFyZ2V0PSJfYmxhbmsi PjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjE0LjBwdDtjb2xvcjp3aGl0ZTti YWNrZ3JvdW5kOmJsYWNrIj5pbmZvLm5sPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0i Y29sb3I6Ymx1ZSI+wqDCoMKgwqA8L3NwYW4+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mby5u bC9ubD91dG1fc291cmNlPWUtbWFpbF9zaWcmYW1wO3V0bV9tZWRpdW09ZS1tYWlsJmFtcDt1dG1f dGVybT1jb25uZWN0aW5nX3RoZV9kb3RzJmFtcDt1dG1fY2FtcGFpZ249aW5mb19zaWciIHRhcmdl dD0iX2JsYW5rIj48aT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImNvbG9yOmJsYWNrIj5tYWtp bmcKIHBsYXRmb3JtcyB3b3JrPC9zcGFuPjwvaT48L2E+PC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVT IiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7 LHNlcmlmO2NvbG9yOmJsYWNrIj48dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+CjwvdGQ+CjwvdHI+ Cjx0ciBzdHlsZT0iaGVpZ2h0OjExLjE1cHQiPgo8dGQgc3R5bGU9InBhZGRpbmc6MGNtIDBjbSAx NS4wcHQgMGNtO2hlaWdodDoxMS4xNXB0Ij4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Imxp bmUtaGVpZ2h0OjEyLjBwdCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+U2ludCBBbnRvbmllc2Jy ZWVzdHJhYXQgMTYgwqB8IMKgMTAxMSBIQiBBbXN0ZXJkYW0gwqB8IMKgKzMxICgwKTIwIDUzMCA5 MSAxMTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVv dDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj48dT48L3U+PHU+PC91Pjwvc3Bhbj48 L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhlaWdodDoxMi4wcHQiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDss c2VyaWYiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9pbmZvbmwiIHRhcmdldD0i X2JsYW5rIj48c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+RmFjZWJvb2s8L3NwYW4+PC9hPiB8Cjxh IGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaW5mb25sIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4g c3R5bGU9ImNvbG9yOmJsdWUiPlR3aXR0ZXI8L3NwYW4+PC9hPiB8CjxhIGhyZWY9Imh0dHBzOi8v d3d3LmxpbmtlZGluLmNvbS9jb21wYW55L2luZm8tbmwiIHRhcmdldD0iX2JsYW5rIj48c3BhbiBz dHlsZT0iY29sb3I6Ymx1ZSI+TGlua2VkSW48L3NwYW4+PC9hPiB8CjxhIGhyZWY9Imh0dHBzOi8v cGx1cy5nb29nbGUuY29tLytpbmZvbmwvIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImNv bG9yOmJsdWUiPkdvb2dsZSs8L3NwYW4+PC9hPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmIj48dT48L3U+PHU+ PC91Pjwvc3Bhbj48L3A+CjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPgo8L2Rpdj4KPC9kaXY+Cgo8YnI+X19fX19fX19f X19fX19fX19fX19fX19fX19fX19fPHdicj5fX19fX19fX19fX19fX19fXzxicj4Ka2V5Y2xvYWst dXNlciBtYWlsaW5nIGxpc3Q8YnI+CjxhIGhyZWY9Im1haWx0bzprZXljbG9hay11c2VyQGxpc3Rz Lmpib3NzLm9yZyI+a2V5Y2xvYWstdXNlckBsaXN0cy5qYm9zcy5vcmc8L2E+PGJyPgo8YSBocmVm PSJodHRwczovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tleWNsb2FrLXVzZXIi IHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vbGlzdHMuamJvc3Mub3Jn Lzx3YnI+bWFpbG1hbi9saXN0aW5mby9rZXljbG9hay11c2VyPC9hPjxicj48L2Jsb2NrcXVvdGU+ PC9kaXY+PGJyPjwvZGl2Pgo= --===============2720000191764660351==-- From sthorger at redhat.com Thu Sep 29 05:32:54 2016 Content-Type: multipart/mixed; boundary="===============5088917586693033475==" MIME-Version: 1.0 From: Stian Thorgersen To: keycloak-user at lists.jboss.org Subject: Re: [keycloak-user] Custom rest endpoint Date: Thu, 29 Sep 2016 11:32:53 +0200 Message-ID: In-Reply-To: CAJgngAd392XdtWJpHwc8v92qBj9zr40r1wvO9AOXsgE9VbVwcA@mail.gmail.com --===============5088917586693033475== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Also, try Googling "RESTEASY003815: Subresource for target class has no jax-rs annotations". I'm sure others has had that issue with RestEasy/JAX-RS before. On 29 September 2016 at 11:31, Stian Thorgersen wro= te: > Did you try the example does it work? > > On 28 September 2016 at 13:35, Mariusz Chruscielewski - Info.nl < > mariusz(a)info.nl> wrote: > >> I can=E2=80=99t make REST endpoint work, I=E2=80=99m using exactly code = supplied in example, I tried also to check how standard endpoints in keyclo= ak code are created, all looks similar: >> >> >> >> >> >> */** * @author ">Stian Thorgersen */*public class HelloResourceProvider implemen= ts RealmResourceProvider { >> >> private KeycloakSession session; >> >> public HelloResourceProvider(KeycloakSession session) { >> this.session =3D session; >> } >> >> @GET >> @Produces(MediaType.*TEXT_HTML*) >> @Path("/{action}") >> public String get(@PathParam("action") String action) { >> //String requestUri =3D session.getContext().getUri().getRequest= Uri().toString(); >> >> String title =3D "APP_REQUEST"; >> if (action.equals("auth")) { >> title =3D "AUTH_RESPONSE"; >> } else if (action.equals("logout")) { >> title =3D "LOGOUT_REQUEST"; >> } >> >> StringBuilder sb =3D new StringBuilder(); >> sb.append("" + title + "= "); >> UriBuilder base =3D UriBuilder.*fromUri*("http://localhost:8180/= auth"); >> sb.append("account"); >> >> sb.append(""); >> return sb.toString(); >> } >> >> @Override >> public Object getResource() { >> return this; >> } >> >> @Override >> public void close() { >> } >> >> } >> >> >> >> >> >> But I=E2=80=99m still getting: >> >> >> >> RESTEASY003815: Subresource for target class has no jax-rs annotations.:= nl.vi.keycloak.providers.rest.HelloResourceProvider >> >> >> >> Can you please help me? Thanks >> >> >> >> >> >> Kind Regards, >> >> >> >> Mariusz Chruscielewski >> >> Software Engineer | mariusz(a)info.nl >> >> +31 (0)20 530 91 13 | +48 695 555 292 >> >> info.nl *making platforms work* >> >> >> Sint Antoniesbreestraat 16 | 1011 HB Amsterdam | +31 (0)20 530 91 11 >> >> Facebook | Twitter >> | LinkedIn >> | Google+ >> >> >> >> >> >> >> _______________________________________________ >> keycloak-user mailing list >> keycloak-user(a)lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/keycloak-user >> > > --===============5088917586693033475== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGRpdiBkaXI9Imx0ciI+QWxzbywgdHJ5IEdvb2dsaW5nICZxdW90O1JFU1RFQVNZMDAzODE1OiBT dWJyZXNvdXJjZSBmb3IgdGFyZ2V0IGNsYXNzIGhhcyBubyBqYXgtcnMgYW5ub3RhdGlvbnMmcXVv dDsuIEkmIzM5O20gc3VyZSBvdGhlcnMgaGFzIGhhZCB0aGF0IGlzc3VlIHdpdGggUmVzdEVhc3kv SkFYLVJTIGJlZm9yZS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xh c3M9ImdtYWlsX3F1b3RlIj5PbiAyOSBTZXB0ZW1iZXIgMjAxNiBhdCAxMTozMSwgU3RpYW4gVGhv cmdlcnNlbiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzpzdGhvcmdlckByZWRo YXQuY29tIiB0YXJnZXQ9Il9ibGFuayI+c3Rob3JnZXJAcmVkaGF0LmNvbTwvYT4mZ3Q7PC9zcGFu PiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2lu OjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+ PGRpdiBkaXI9Imx0ciI+RGlkIHlvdSB0cnkgdGhlIGV4YW1wbGUgZG9lcyBpdCB3b3JrPzwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxk aXY+PGRpdiBjbGFzcz0iaDUiPk9uIDI4IFNlcHRlbWJlciAyMDE2IGF0IDEzOjM1LCBNYXJpdXN6 IENocnVzY2llbGV3c2tpIC0gSW5mby5ubCA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1h aWx0bzptYXJpdXN6QGluZm8ubmwiIHRhcmdldD0iX2JsYW5rIj5tYXJpdXN6QGluZm8ubmw8L2E+ Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjwvZGl2PjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFp bF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNv bGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXY+PGRpdiBjbGFzcz0iaDUiPgoKCgoKCjxkaXYgbGFu Zz0iTkwiIGxpbms9IiMwNTYzQzEiIHZsaW5rPSIjOTU0RjcyIj4KPGRpdj4KPHByZSBzdHlsZT0i YmFja2dyb3VuZDojMmIyYjJiIj48c3BhbiBsYW5nPSJFTi1VUyI+SSBjYW7igJl0IG1ha2UgUkVT VCBlbmRwb2ludCB3b3JrLCBJ4oCZbSB1c2luZyBleGFjdGx5IGNvZGUgc3VwcGxpZWQgaW4gZXhh bXBsZSwgSSB0cmllZCBhbHNvIHRvIGNoZWNrIGhvdyBzdGFuZGFyZCBlbmRwb2ludHMgaW4ga2V5 Y2xvYWsgY29kZSBhcmUgY3JlYXRlZCwgYWxsIGxvb2tzIHNpbWlsYXI6PGJyPjxicj48c3BhbiBz dHlsZT0iY29sb3I6I2E5YjdjNiI+PGJyPjwvc3Bhbj48aT48c3BhbiBzdHlsZT0iY29sb3I6IzYy OTc1NSI+LyoqPGJyPiAqIDxiPkBhdXRob3IgPC9iPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 Izc3Yjc2NyI+Jmx0O2EgaHJlZj0mcXVvdDttYWlsdG86PGEgaHJlZj0ibWFpbHRvOnN0aG9yZ2Vy QHJlZGhhdC5jb20iIHRhcmdldD0iX2JsYW5rIj5zdGhvcmdlckByZWRoYXQuYzx3YnI+b208L2E+ JnF1b3Q7Jmd0Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzYyOTc1NSI+U3RpYW4gVGhvcmdl cnNlbjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6Izc3Yjc2NyI+Jmx0Oy9hJmd0Ozxicj4gPC9z cGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNjI5NzU1Ij4qLzxicj48L3NwYW4+PC9pPjxzcGFuIHN0 eWxlPSJjb2xvcjojY2M3ODMyIj5wdWJsaWMgY2xhc3MgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojYTliN2M2Ij5IZWxsb1Jlc291cmNlUHJvdmlkZXIgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojY2M3ODMyIj5pbXBsZW1lbnRzIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+ UmVhbG1SZXNvdXJjZVByb3ZpZGVyIHs8YnI+PGJyPsKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOiNjYzc4MzIiPnByaXZhdGUgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2 Ij5LZXljbG9ha1Nlc3Npb24gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojOTg3NmFhIj5zZXNz aW9uPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj47PGJyPjxicj7CoMKgwqAgcHVi bGljIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2ZmYzY2ZCI+SGVsbG9SZXNvdXJjZVByb3Zp ZGVyPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4oS2V5Y2xvYWs8d2JyPlNlc3Np b24gc2Vzc2lvbikgezxicj7CoMKgwqDCoMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9y OiNjYzc4MzIiPnRoaXM8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPi48L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiM5ODc2YWEiPnNlc3Npb24gPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojYTliN2M2Ij49IHNlc3Npb248L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIi Pjs8YnI+wqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+fTxicj48YnI+ wqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2JiYjUyOSI+QEdFVDxicj7CoMKgwqAg QFByb2R1Y2VzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4oTWVkaWFUeXBlLjwv c3Bhbj48aT48c3BhbiBzdHlsZT0iY29sb3I6Izk4NzZhYSI+VEVYVF9IVE1MPC9zcGFuPjwvaT48 c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KTxicj7CoMKgwqAgPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojYmJiNTI5Ij5AUGF0aDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+ KDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7L3thY3Rpb259JnF1b3Q7 PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4pPGJyPsKgwqDCoCA8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPnB1YmxpYyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9y OiNhOWI3YzYiPlN0cmluZyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNmZmM2NmQiPmdldDwv c3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KDwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6I2JiYjUyOSI+QFBhdGhQYXJhbTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+ KDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7YWN0aW9uJnF1b3Q7PC9z cGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4pIFN0cmluZyBhY3Rpb24pIHs8YnI+wqDC oMKgwqDCoMKgwqAgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpncmF5Ij4vL1N0cmluZyByZXF1 ZXN0VXJpID0gc2Vzc2lvbi5nZXRDb250ZXh0KCkuZ2V0VXJpKCkuPHdicj5nZXRSZXF1ZXN0VXJp KCkudG9TdHJpbmcoKTs8YnI+PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I2E5YjdjNiI+U3RyaW5nIHRpdGxlID0gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj NmE4NzU5Ij4mcXVvdDtBUFBfUkVRVUVTVCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 I2NjNzgzMiI+Ozxicj7CoMKgwqDCoMKgwqDCoCBpZiA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9y OiNhOWI3YzYiPihhY3Rpb24uZXF1YWxzKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1 OSI+JnF1b3Q7YXV0aCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KSkg ezxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpdGxlID0gPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojNmE4NzU5Ij4mcXVvdDtBVVRIX1JFU1BPTlNFJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojY2M3ODMyIj47PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I2E5YjdjNiI+fSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPmVsc2Ug aWYgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4oYWN0aW9uLmVxdWFscyg8L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90O2xvZ291dCZxdW90Ozwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+KSkgezxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHRpdGxlID0gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNmE4NzU5Ij4mcXVvdDtMT0dPVVRf UkVRVUVTVCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+Ozxicj7CoMKg wqDCoMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPn08YnI+PGJyPsKg wqDCoMKgwqDCoMKgIFN0cmluZ0J1aWxkZXIgc2IgPSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9y OiNjYzc4MzIiPm5ldyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPlN0cmluZ0J1 aWxkZXIoKTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+Ozxicj7CoMKgwqDCoMKg wqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPnNiLmFwcGVuZCg8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90OyZsdDtodG1sJmd0OyZsdDtoZWFkJmd0 OyZsdDt0aXRsZSZndDs8d2JyPiZxdW90OyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3 YzYiPisgdGl0bGUgKyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90OyZs dDsvdGl0bGUmZ3Q7Jmx0Oy9oZWFkJmd0OyZsdDtib2R5Jmd0OyZxdW90Ozwvc3Bhbj48c3BhbiBz dHlsZT0iY29sb3I6I2E5YjdjNiI+KTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+ Ozxicj7CoMKgwqDCoMKgwqDCoCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPlVy aUJ1aWxkZXIgYmFzZSA9IFVyaUJ1aWxkZXIuPGk+ZnJvbVVyaTwvaT4oPC9zcGFuPjxzcGFuIHN0 eWxlPSJjb2xvcjojNmE4NzU5Ij4mcXVvdDs8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjgxODAv YXV0aCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9sb2M8d2JyPmFsaG9zdDo4MTgwL2F1dGg8L2E+ JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojYTliN2M2Ij4pPC9zcGFuPjxzcGFuIHN0 eWxlPSJjb2xvcjojY2M3ODMyIj47PGJyPsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHls ZT0iY29sb3I6I2E5YjdjNiI+c2IuYXBwZW5kKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZh ODc1OSI+JnF1b3Q7Jmx0O2EgaHJlZj08L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIi PlwmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTkiPiZxdW90OyA8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPisgUmVhbG1zUmVzb3VyY2UuPGk+YWNjb3VudFVy bDwvaT4oYmFzZTx3YnI+KS5idWlsZCg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YTg3NTki PiZxdW90O3Rlc3QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPikudG9T dHJpbmcoKSArIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7PC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojNmE4NzU5Ij4gaWQ9PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5cJnF1 b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNmE4NzU5Ij5hY2NvdW50PC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojY2M3ODMyIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj NmE4NzU5Ij4mZ3Q7YWNjb3VudCZsdDsvYSZndDsmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNhOWI3YzYiPik8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPjs8YnI+PGJy PsKgwqDCoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+c2IuYXBw ZW5kKDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZhODc1OSI+JnF1b3Q7Jmx0Oy9ib2R5Jmd0 OyZsdDsvaHRtbCZndDsmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPik8 L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNjYzc4MzIiPjs8YnI+wqDCoMKgwqDCoMKgwqAgcmV0 dXJuIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+c2IudG9TdHJpbmcoKTwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6I2NjNzgzMiI+Ozxicj7CoMKgwqAgPC9zcGFuPjxzcGFuIHN0 eWxlPSJjb2xvcjojYTliN2M2Ij59PGJyPjxicj7CoMKgwqAgPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojYmJiNTI5Ij5AT3ZlcnJpZGU8YnI+wqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6I2NjNzgzMiI+cHVibGljIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+T2Jq ZWN0IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2ZmYzY2ZCI+Z2V0UmVzb3VyY2U8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPigpIHs8YnI+wqDCoMKgwqDCoMKgwqAgPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojY2M3ODMyIj5yZXR1cm4gdGhpczs8YnI+wqDCoMKgIDwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6I2E5YjdjNiI+fTxicj48YnI+wqDCoMKgIDwvc3Bhbj48c3Bh biBzdHlsZT0iY29sb3I6I2JiYjUyOSI+QE92ZXJyaWRlPGJyPsKgwqDCoCA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiNjYzc4MzIiPnB1YmxpYyB2b2lkIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6I2ZmYzY2ZCI+Y2xvc2U8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNhOWI3YzYiPigpIHs8 YnI+wqDCoMKgIH08YnI+PGJyPn08L3NwYW4+PHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wcmU+Cjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIj7CoDx1PjwvdT48dT48L3U+PC9z cGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiPsKgPHU+PC91 Pjx1PjwvdT48L3NwYW4+PC9wPgo8cHJlIHN0eWxlPSJtYXJnaW46Ni4wcHQiPjxzcGFuIGxhbmc9 IkVOLVVTIj5CdXQgSeKAmW0gc3RpbGwgZ2V0dGluZzo8dT48L3U+PHU+PC91Pjwvc3Bhbj48L3By ZT4KPHByZSBzdHlsZT0ibWFyZ2luLXJpZ2h0OjYuMHB0O21hcmdpbi1ib3R0b206Ni4wcHQ7bWFy Z2luLWxlZnQ6MGNtIj48c3BhbiBsYW5nPSJFTi1VUyI+wqA8dT48L3U+PHU+PC91Pjwvc3Bhbj48 L3ByZT4KPHByZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIg c3R5bGU9ImZvbnQtZmFtaWx5OkNvbnNvbGFzO2NvbG9yOmJsYWNrIj5SRVNURUFTWTAwMzgxNTog U3VicmVzb3VyY2UgZm9yIHRhcmdldCBjbGFzcyBoYXMgbm8gamF4LXJzIGFubm90YXRpb25zLjog bmwudmkua2V5Y2xvYWsucHJvdmlkZXJzLnJlc3QuPHdicj5IZWxsb1Jlc291cmNlUHJvdmlkZXI8 L3NwYW4+PC9jb2RlPjxzcGFuIGxhbmc9IkVOLVVTIj48dT48L3U+PHU+PC91Pjwvc3Bhbj48L3By ZT4KPHByZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5 bGU9ImZvbnQtZmFtaWx5OkNvbnNvbGFzO2NvbG9yOmJsYWNrIj7CoDwvc3Bhbj48L2NvZGU+PHNw YW4gbGFuZz0iRU4tVVMiPjx1PjwvdT48dT48L3U+PC9zcGFuPjwvcHJlPgo8cHJlIHN0eWxlPSJt YXJnaW46Ni4wcHQiPjxjb2RlPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1mYW1pbHk6 Q29uc29sYXM7Y29sb3I6YmxhY2siPkNhbiB5b3UgcGxlYXNlIGhlbHAgbWU/IFRoYW5rczwvc3Bh bj48L2NvZGU+PHU+PC91Pjx1PjwvdT48L3ByZT4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91 PsKgPHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4K PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSI0NjEiIHN0eWxlPSJ3aWR0 aDozNDUuNjVwdCI+Cjx0Ym9keT4KPHRyIHN0eWxlPSJoZWlnaHQ6MTEuMTVwdCI+Cjx0ZCBzdHls ZT0icGFkZGluZzowY20gMGNtIDBjbSAwY207aGVpZ2h0OjExLjE1cHQiPgo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibGluZS1oZWlnaHQ6MTIuMHB0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNr Ij5LaW5kIFJlZ2FyZHMsPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6YmxhY2siPjx1PjwvdT48dT48 L3U+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjEy LjBwdCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2Vv cmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+PHU+PC91PsKgPHU+PC91Pjwvc3Bhbj48L3A+ CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhlaWdodDoxMi4wcHQiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2Vy aWY7Y29sb3I6YmxhY2siPk1hcml1c3ogQ2hydXNjaWVsZXdza2k8L3NwYW4+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtj b2xvcjpibGFjayI+PHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8L3RkPgo8L3RyPgo8dHIgc3R5 bGU9ImhlaWdodDoxMS4xNXB0Ij4KPHRkIHN0eWxlPSJwYWRkaW5nOjBjbSAwY20gMTUuMHB0IDBj bTtoZWlnaHQ6MTEuMTVwdCI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhlaWdo dDoxMi4wcHQiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250 LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj5Tb2Z0d2FyZSBF bmdpbmVlciDCoHzCoMKgPGEgaHJlZj0ibWFpbHRvOm1hcml1c3pAaW5mby5ubCIgdGFyZ2V0PSJf YmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5tYXJpdXN6QGluZm8ubmw8L3NwYW4+PC9h PsKgPHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bGluZS1oZWlnaHQ6MTIuMHB0Ij48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZTox MC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+ KzMxICgwKTIwIDUzMCA5MSAxMyB8IDxhIGhyZWY9InRlbDolMkI0OCUyMDY5NSUyMDU1NSUyMDI5 MiIgdmFsdWU9Iis0ODY5NTU1NTI5MiIgdGFyZ2V0PSJfYmxhbmsiPis0OCA2OTUgNTU1IDI5Mjwv YT4KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250 LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj48dT48L3U+PHU+ PC91Pjwvc3Bhbj48L3A+CjwvdGQ+CjwvdHI+Cjx0ciBzdHlsZT0iaGVpZ2h0OjE1LjNwdCI+Cjx0 ZCBzdHlsZT0icGFkZGluZzowY20gMGNtIDMuMHB0IDBjbTtoZWlnaHQ6MTUuM3B0Ij4KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjE2LjBwdCI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xv cjpibGFjayI+PGEgaHJlZj0iaHR0cDovL3d3dy5pbmZvLm5sLyIgdGFyZ2V0PSJfYmxhbmsiPjxz cGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjE0LjBwdDtjb2xvcjp3aGl0ZTtiYWNr Z3JvdW5kOmJsYWNrIj5pbmZvLm5sPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iY29s b3I6Ymx1ZSI+wqDCoMKgwqA8L3NwYW4+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mby5ubC9u bD91dG1fc291cmNlPWUtbWFpbF9zaWcmYW1wO3V0bV9tZWRpdW09ZS1tYWlsJmFtcDt1dG1fdGVy bT1jb25uZWN0aW5nX3RoZV9kb3RzJmFtcDt1dG1fY2FtcGFpZ249aW5mb19zaWciIHRhcmdldD0i X2JsYW5rIj48aT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImNvbG9yOmJsYWNrIj5tYWtpbmcK IHBsYXRmb3JtcyB3b3JrPC9zcGFuPjwvaT48L2E+PC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBz dHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNl cmlmO2NvbG9yOmJsYWNrIj48dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+CjwvdGQ+CjwvdHI+Cjx0 ciBzdHlsZT0iaGVpZ2h0OjExLjE1cHQiPgo8dGQgc3R5bGU9InBhZGRpbmc6MGNtIDBjbSAxNS4w cHQgMGNtO2hlaWdodDoxMS4xNXB0Ij4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImxpbmUt aGVpZ2h0OjEyLjBwdCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6 JnF1b3Q7R2VvcmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+U2ludCBBbnRvbmllc2JyZWVz dHJhYXQgMTYgwqB8IMKgMTAxMSBIQiBBbXN0ZXJkYW0gwqB8IMKgKzMxICgwKTIwIDUzMCA5MSAx MTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtH ZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj48dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+ CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJsaW5lLWhlaWdodDoxMi4wcHQiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2Vy aWYiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9pbmZvbmwiIHRhcmdldD0iX2Js YW5rIj48c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+RmFjZWJvb2s8L3NwYW4+PC9hPiB8CjxhIGhy ZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaW5mb25sIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5 bGU9ImNvbG9yOmJsdWUiPlR3aXR0ZXI8L3NwYW4+PC9hPiB8CjxhIGhyZWY9Imh0dHBzOi8vd3d3 LmxpbmtlZGluLmNvbS9jb21wYW55L2luZm8tbmwiIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHls ZT0iY29sb3I6Ymx1ZSI+TGlua2VkSW48L3NwYW4+PC9hPiB8CjxhIGhyZWY9Imh0dHBzOi8vcGx1 cy5nb29nbGUuY29tLytpbmZvbmwvIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImNvbG9y OmJsdWUiPkdvb2dsZSs8L3NwYW4+PC9hPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEw LjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmIj48dT48L3U+PHU+PC91 Pjwvc3Bhbj48L3A+CjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9y bWFsIj48dT48L3U+wqA8dT48L3U+PC9wPgo8L2Rpdj4KPC9kaXY+Cgo8YnI+PC9kaXY+PC9kaXY+ X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPHdicj5fX19fX19fX19fX19fX19fXzxicj4K a2V5Y2xvYWstdXNlciBtYWlsaW5nIGxpc3Q8YnI+CjxhIGhyZWY9Im1haWx0bzprZXljbG9hay11 c2VyQGxpc3RzLmpib3NzLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmtleWNsb2FrLXVzZXJAbGlzdHMu amJvc3Mub3JnPC9hPjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1h bi9saXN0aW5mby9rZXljbG9hay11c2VyIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5r Ij5odHRwczovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWE8d2JyPm4vbGlzdGluZm8va2V5Y2xvYWst dXNlcjwvYT48YnI+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwv ZGl2Pjxicj48L2Rpdj4K --===============5088917586693033475==-- From mariusz at info.nl Thu Sep 29 05:41:14 2016 Content-Type: multipart/mixed; boundary="===============4573944957191015606==" MIME-Version: 1.0 From: Mariusz Chruscielewski - Info.nl To: keycloak-user at lists.jboss.org Subject: Re: [keycloak-user] Custom rest endpoint Date: Thu, 29 Sep 2016 09:41:11 +0000 Message-ID: In-Reply-To: CAJgngAd+mzZ8OokhhWJoSoErpAOORTPtXDALqBy3a0oBXX_7xQ@mail.gmail.com --===============4573944957191015606== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Google didn=E2=80=99t help. There was 2 things, first of all, I should return Response object (not Stri= ng): @Path("/{action}") @GET public Response get(@PathParam("action") String action) { String json =3D "{\"test\" : \"" + action + "\"}"; return Response.ok(json, MediaType.APPLICATION_JSON_TYPE).build(); } Second thing is that you need to add dependency to module (during install) = because you will get ClassNotFoundException: --dependencies=3Dorg.keycloak.keycloak-core,org.keycloak.keycloak-server-sp= i,org.keycloak.keycloak-services,javax.servlet.api,org.jboss.resteasy.reste= asy-jaxrs,javax.ws.rs.api" I hope this will help other people. Mariusz Chru=C5=9Bcielewski From: Stian Thorgersen [mailto:sthorger(a)redhat.com] Sent: donderdag 29 september 2016 11:33 To: Stian Thorgersen Cc: Mariusz Chruscielewski - Info.nl ; keycloak-user(a)l= ists.jboss.org Subject: Re: [keycloak-user] Custom rest endpoint Also, try Googling "RESTEASY003815: Subresource for target class has no jax= -rs annotations". I'm sure others has had that issue with RestEasy/JAX-RS b= efore. On 29 September 2016 at 11:31, Stian Thorgersen > wrote: Did you try the example does it work? On 28 September 2016 at 13:35, Mariusz Chruscielewski - Info.nl > wrote: I can=E2=80=99t make REST endpoint work, I=E2=80=99m using exactly code sup= plied in example, I tried also to check how standard endpoints in keycloak = code are created, all looks similar: /** * @author ">Stian Thorgersen */ public class HelloResourceProvider implements RealmResourceProvider { private KeycloakSession session; public HelloResourceProvider(KeycloakSession session) { this.session =3D session; } @GET @Produces(MediaType.TEXT_HTML) @Path("/{action}") public String get(@PathParam("action") String action) { //String requestUri =3D session.getContext().getUri().getRequestUri= ().toString(); String title =3D "APP_REQUEST"; if (action.equals("auth")) { title =3D "AUTH_RESPONSE"; } else if (action.equals("logout")) { title =3D "LOGOUT_REQUEST"; } StringBuilder sb =3D new StringBuilder(); sb.append("" + title + ""); UriBuilder base =3D UriBuilder.fromUri("http://localhost:8180/auth"= ); sb.append("account"); sb.append(""); return sb.toString(); } @Override public Object getResource() { return this; } @Override public void close() { } } But I=E2=80=99m still getting: RESTEASY003815: Subresource for target class has no jax-rs annotations.: nl= .vi.keycloak.providers.rest.HelloResourceProvider Can you please help me? Thanks Kind Regards, Mariusz Chruscielewski Software Engineer | mariusz(a)info.nl +31 (0)20 530 91 13 | +48 695 555 292 info.nl making platforms work Sint Antoniesbreestraat 16 | 1011 HB Amsterdam | +31 (0)20 530 91 11 Facebook | Twitter | LinkedIn | Google+ _______________________________________________ keycloak-user mailing list keycloak-user(a)lists.jboss.org https://lists.jboss.org/mailman/listinfo/keycloak-user --===============4573944957191015606== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m YWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAy IDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseTpHZW9yZ2lhOw0KCXBhbm9zZS0xOjIgNCA1 IDIgNSA0IDUgMiAzIDM7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseTpDb25zb2xhczsNCglw YW5vc2UtMToyIDExIDYgOSAyIDIgNCAzIDIgNDt9DQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0K cC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbA0KCXttYXJnaW46MGNtOw0K CW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNpemU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5 OiJUaW1lcyBOZXcgUm9tYW4iLHNlcmlmO30NCmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7 bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOmJsdWU7DQoJdGV4dC1kZWNvcmF0aW9uOnVu ZGVybGluZTt9DQphOnZpc2l0ZWQsIHNwYW4uTXNvSHlwZXJsaW5rRm9sbG93ZWQNCgl7bXNvLXN0 eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOnB1cnBsZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJs aW5lO30NCmNvZGUNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWZvbnQtZmFtaWx5OiJDb3Vy aWVyIE5ldyI7fQ0KcHJlDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgltc28tc3R5bGUtbGlu azoiSFRNTCBQcmVmb3JtYXR0ZWQgQ2hhciI7DQoJbWFyZ2luOjBjbTsNCgltYXJnaW4tYm90dG9t Oi4wMDAxcHQ7DQoJZm9udC1zaXplOjEwLjBwdDsNCglmb250LWZhbWlseToiQ291cmllciBOZXci O30NCnAubXNvbm9ybWFsMCwgbGkubXNvbm9ybWFsMCwgZGl2Lm1zb25vcm1hbDANCgl7bXNvLXN0 eWxlLW5hbWU6bXNvbm9ybWFsOw0KCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOw0KCW1hcmdpbi1y aWdodDowY207DQoJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87DQoJbWFyZ2luLWxlZnQ6MGNt Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsc2Vy aWY7fQ0Kc3Bhbi5IVE1MUHJlZm9ybWF0dGVkQ2hhcg0KCXttc28tc3R5bGUtbmFtZToiSFRNTCBQ cmVmb3JtYXR0ZWQgQ2hhciI7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS1s aW5rOiJIVE1MIFByZWZvcm1hdHRlZCI7DQoJZm9udC1mYW1pbHk6Q29uc29sYXM7DQoJbXNvLWZh cmVhc3QtbGFuZ3VhZ2U6Tkw7fQ0Kc3Bhbi5FbWFpbFN0eWxlMjENCgl7bXNvLXN0eWxlLXR5cGU6 cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29s b3I6d2luZG93dGV4dDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQt b25seTsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgltc28tZmFyZWFzdC1s YW5ndWFnZTpFTi1VUzt9DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo2MTIuMHB0IDc5Mi4w cHQ7DQoJbWFyZ2luOjcwLjg1cHQgNzAuODVwdCA3MC44NXB0IDcwLjg1cHQ7fQ0KZGl2LldvcmRT ZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1z byA5XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIg Lz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVs YXlvdXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8 L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+DQo8L2hlYWQ+DQo8Ym9keSBsYW5nPSJO TCIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEi Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1 YWdlOkVOLVVTIj5Hb29nbGUgZGlkbuKAmXQgaGVscC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6 RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTom cXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMi PlRoZXJlIHdhcyAyIHRoaW5ncywgZmlyc3Qgb2YgYWxsLCBJIHNob3VsZCByZXR1cm4gUmVzcG9u c2Ugb2JqZWN0IChub3QgU3RyaW5nKTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1 YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0iYmFja2dyb3VuZDojMkIyQjJCIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9 ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29s b3I6I0JCQjUyOSI+QFBhdGg8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNp emU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiNBOUI3 QzYiPig8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiM2QTg3NTkiPiZxdW90Oy97 YWN0aW9ufSZxdW90Ozwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZTox MC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0E5QjdDNiI+ KTxicj4NCjwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0JCQjUyOSI+QEdFVDxi cj4NCjwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0NDNzgzMiI+cHVibGljDQo8 L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiNBOUI3QzYiPlJlc3BvbnNlDQo8L3Nw YW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5 OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiNGRkM2NkQiPmdldDwvc3Bhbj48c3BhbiBs YW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291 cmllciBOZXcmcXVvdDs7Y29sb3I6I0E5QjdDNiI+KDwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIg c3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVv dDs7Y29sb3I6I0JCQjUyOSI+QFBhdGhQYXJhbTwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5 bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7 Y29sb3I6I0E5QjdDNiI+KDwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6 ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6IzZBODc1 OSI+JnF1b3Q7YWN0aW9uJnF1b3Q7PC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9u dC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjoj QTlCN0M2Ij4pDQogU3RyaW5nIGFjdGlvbikgezxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBTdHJp bmcgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IzQwMzMyQiI+anNvbjwvc3Bhbj4gPSA8L3NwYW4+ PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZx dW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiM2QTg3NTkiPiZxdW90O3s8L3NwYW4+PHNwYW4g bGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0Nv dXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiNDQzc4MzIiPlwmcXVvdDs8L3NwYW4+PHNwYW4gbGFuZz0i RU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIg TmV3JnF1b3Q7O2NvbG9yOiM2QTg3NTkiPnRlc3Q8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0 eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7 O2NvbG9yOiNDQzc4MzIiPlwmcXVvdDs8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm b250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9y OiM2QTg3NTkiPg0KIDogPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXpl OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjojQ0M3ODMy Ij5cJnF1b3Q7PC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBw dDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjojNkE4NzU5Ij4mcXVv dDsNCjwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0E5QjdDNiI+JiM0MzsgYWN0 aW9uICYjNDM7DQo8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiM2QTg3NTkiPiZx dW90Ozwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0NDNzgzMiI+XCZxdW90Ozwv c3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6IzZBODc1OSI+fSZxdW90Ozwvc3Bhbj48 c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0NDNzgzMiI+Ozxicj4NCiZuYnNwOyZuYnNwOyZu YnNwOyByZXR1cm4gPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEw LjBwdDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjojQTlCN0M2Ij5S ZXNwb25zZS48aT5vazwvaT4oPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IzM0NDEzNCI+anNvbjwv c3Bhbj48L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOiNDQzc4MzIiPiwNCjwvc3Bh bj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6 JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0E5QjdDNiI+TWVkaWFUeXBlLjwvc3Bhbj48 aT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6 JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6Izk4NzZBQSI+QVBQTElDQVRJT05fSlNPTl9U WVBFPC9zcGFuPjwvaT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6I0E5QjdDNiI+KS5idWls ZCgpPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250 LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjojQ0M3ODMyIj47PGJyPg0KPC9z cGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWls eTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjojQTlCN0M2Ij59PG86cD48L286cD48L3Nw YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm b250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJp Zjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNp emU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28t ZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+U2Vjb25kIHRoaW5nIGlzIHRoYXQgeW91IG5lZWQgdG8g YWRkIGRlcGVuZGVuY3kgdG8gbW9kdWxlIChkdXJpbmcgaW5zdGFsbCkgYmVjYXVzZSB5b3Ugd2ls bCBnZXQgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMS4w cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0 LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1 YWdlOkVOLVVTIj4tLWRlcGVuZGVuY2llcz1vcmcua2V5Y2xvYWsua2V5Y2xvYWstY29yZSxvcmcu a2V5Y2xvYWsua2V5Y2xvYWstc2VydmVyLXNwaSxvcmcua2V5Y2xvYWsua2V5Y2xvYWstc2Vydmlj ZXMsamF2YXguc2VydmxldC5hcGksb3JnLmpib3NzLnJlc3RlYXN5LnJlc3RlYXN5LWpheHJzLDxi PmphdmF4LndzLnJzLmFwaTwvYj4mcXVvdDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxh bmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1m YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1YWdl OkVOLVVTIj5JIGhvcGUgdGhpcyB3aWxsIGhlbHAgb3RoZXIgcGVvcGxlLjxvOnA+PC9vOnA+PC9z cGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWY7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwv cD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7bXNv LWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPk1hcml1c3ogQ2hydcWbY2llbGV3c2tpPG86cD48L286 cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4mbmJzcDs8L286cD48L3Nw YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl PSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1z ZXJpZiI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPiBTdGlh biBUaG9yZ2Vyc2VuIFttYWlsdG86c3Rob3JnZXJAcmVkaGF0LmNvbV0NCjxicj4NCjxiPlNlbnQ6 PC9iPiBkb25kZXJkYWcgMjkgc2VwdGVtYmVyIDIwMTYgMTE6MzM8YnI+DQo8Yj5Ubzo8L2I+IFN0 aWFuIFRob3JnZXJzZW4gJmx0O3N0aWFuQHJlZGhhdC5jb20mZ3Q7PGJyPg0KPGI+Q2M6PC9iPiBN YXJpdXN6IENocnVzY2llbGV3c2tpIC0gSW5mby5ubCAmbHQ7bWFyaXVzekBpbmZvLm5sJmd0Ozsg a2V5Y2xvYWstdXNlckBsaXN0cy5qYm9zcy5vcmc8YnI+DQo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtr ZXljbG9hay11c2VyXSBDdXN0b20gcmVzdCBlbmRwb2ludDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPkFsc28sIHRyeSBHb29nbGluZyAmcXVvdDtSRVNURUFTWTAwMzgxNTog U3VicmVzb3VyY2UgZm9yIHRhcmdldCBjbGFzcyBoYXMgbm8gamF4LXJzIGFubm90YXRpb25zJnF1 b3Q7LiBJJ20gc3VyZSBvdGhlcnMgaGFzIGhhZCB0aGF0IGlzc3VlIHdpdGggUmVzdEVhc3kvSkFY LVJTIGJlZm9yZS48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi Pk9uIDI5IFNlcHRlbWJlciAyMDE2IGF0IDExOjMxLCBTdGlhbiBUaG9yZ2Vyc2VuICZsdDs8YSBo cmVmPSJtYWlsdG86c3Rob3JnZXJAcmVkaGF0LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnN0aG9yZ2Vy QHJlZGhhdC5jb208L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwvcD4NCjxibG9ja3F1b3RlIHN0 eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6 MGNtIDBjbSAwY20gNi4wcHQ7bWFyZ2luLWxlZnQ6NC44cHQ7bWFyZ2luLXJpZ2h0OjBjbSI+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+RGlkIHlvdSB0cnkgdGhlIGV4YW1wbGUgZG9lcyBp dCB3b3JrPzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1h bCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8ZGl2Pg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj5PbiAyOCBTZXB0ZW1iZXIgMjAxNiBhdCAxMzozNSwgTWFyaXVzeiBDaHJ1c2Np ZWxld3NraSAtIEluZm8ubmwgJmx0OzxhIGhyZWY9Im1haWx0bzptYXJpdXN6QGluZm8ubmwiIHRh cmdldD0iX2JsYW5rIj5tYXJpdXN6QGluZm8ubmw8L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwv cD4NCjwvZGl2Pg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVy LWxlZnQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjBjbSAwY20gMGNtIDYuMHB0O21hcmdp bi1sZWZ0OjQuOHB0O21hcmdpbi1yaWdodDowY20iPg0KPGRpdj4NCjxkaXY+DQo8ZGl2Pg0KPGRp dj4NCjxwcmUgc3R5bGU9ImJhY2tncm91bmQ6IzJCMkIyQiI+PHNwYW4gbGFuZz0iRU4tVVMiPkkg Y2Fu4oCZdCBtYWtlIFJFU1QgZW5kcG9pbnQgd29yaywgSeKAmW0gdXNpbmcgZXhhY3RseSBjb2Rl IHN1cHBsaWVkIGluIGV4YW1wbGUsIEkgdHJpZWQgYWxzbyB0byBjaGVjayBob3cgc3RhbmRhcmQg ZW5kcG9pbnRzIGluIGtleWNsb2FrIGNvZGUgYXJlIGNyZWF0ZWQsIGFsbCBsb29rcyBzaW1pbGFy Ojxicj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPjxicj48L3NwYW4+PGk+PHNwYW4g c3R5bGU9ImNvbG9yOiM2Mjk3NTUiPi8qKjxicj4gKiA8Yj5AYXV0aG9yIDwvYj48L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOiM3N0I3NjciPiZsdDthIGhyZWY9JnF1b3Q7bWFpbHRvOjxhIGhyZWY9 Im1haWx0bzpzdGhvcmdlckByZWRoYXQuY29tIiB0YXJnZXQ9Il9ibGFuayI+c3Rob3JnZXJAcmVk aGF0LmNvbTwvYT4mcXVvdDsmZ3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNjI5NzU1Ij5T dGlhbiBUaG9yZ2Vyc2VuPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNzdCNzY3Ij4mbHQ7L2Em Z3Q7PGJyPiA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2Mjk3NTUiPiovPGJyPjwvc3Bhbj48 L2k+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIiPnB1YmxpYyBjbGFzcyA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiNBOUI3QzYiPkhlbGxvUmVzb3VyY2VQcm92aWRlciA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiNDQzc4MzIiPmltcGxlbWVudHMgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojQTlCN0M2Ij5SZWFsbVJlc291cmNlUHJvdmlkZXIgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5i c3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+cHJpdmF0ZSA8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPktleWNsb2FrU2Vzc2lvbiA8L3NwYW4+PHNwYW4gc3R5 bGU9ImNvbG9yOiM5ODc2QUEiPnNlc3Npb248L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4 MzIiPjs8YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBwdWJsaWMgPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjojRkZDNjZEIj5IZWxsb1Jlc291cmNlUHJvdmlkZXI8L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOiNBOUI3QzYiPihLZXljbG9ha1Nlc3Npb24gc2Vzc2lvbikgezxicj4mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojQ0M3ODMyIj50aGlzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4uPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojOTg3NkFBIj5zZXNzaW9uIDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I0E5QjdDNiI+PSBzZXNzaW9uPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMy Ij47PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3 QzYiPn08YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9y OiNCQkI1MjkiPkBHRVQ8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IEBQcm9kdWNlczwvc3Bhbj48c3Bh biBzdHlsZT0iY29sb3I6I0E5QjdDNiI+KE1lZGlhVHlwZS48L3NwYW4+PGk+PHNwYW4gc3R5bGU9 ImNvbG9yOiM5ODc2QUEiPlRFWFRfSFRNTDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9ImNvbG9yOiNB OUI3QzYiPik8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 I0JCQjUyOSI+QFBhdGg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPig8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90Oy97YWN0aW9ufSZxdW90Ozwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+KTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj5wdWJsaWMgPC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjojQTlCN0M2Ij5TdHJpbmcgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZDNjZEIj5n ZXQ8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPig8L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOiNCQkI1MjkiPkBQYXRoUGFyYW08L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3 QzYiPig8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90O2FjdGlvbiZxdW90 Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+KSBTdHJpbmcgYWN0aW9uKSB7PGJy PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOmdyYXkiPi8vU3RyaW5nIHJlcXVlc3RVcmkgPSBzZXNzaW9uLmdldENvbnRl eHQoKS5nZXRVcmkoKS5nZXRSZXF1ZXN0VXJpKCkudG9TdHJpbmcoKTs8YnI+PGJyPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNBOUI3QzYiPlN0cmluZyB0aXRsZSA9IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZB ODc1OSI+JnF1b3Q7QVBQX1JFUVVFU1QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiND Qzc4MzIiPjs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlm IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+KGFjdGlvbi5lcXVhbHMoPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojNkE4NzU5Ij4mcXVvdDthdXRoJnF1b3Q7PC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4pKSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0aXRsZSA9IDwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+JnF1b3Q7QVVUSF9SRVNQT05TRSZxdW90Ozwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij59 IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+ZWxzZSBpZiA8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiNBOUI3QzYiPihhY3Rpb24uZXF1YWxzKDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6IzZBODc1OSI+JnF1b3Q7bG9nb3V0JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojQTlCN0M2Ij4pKSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0aXRsZSA9IDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6IzZBODc1OSI+JnF1b3Q7TE9HT1VUX1JFUVVFU1QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5 bGU9ImNvbG9yOiNDQzc4MzIiPjs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+fTxicj48YnI+Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFN0cmluZ0J1aWxkZXIgc2Ig PSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIiPm5ldyA8L3NwYW4+PHNwYW4gc3R5 bGU9ImNvbG9yOiNBOUI3QzYiPlN0cmluZ0J1aWxkZXIoKTwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6I0NDNzgzMiI+Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij5zYi5hcHBlbmQoPC9zcGFuPjxz cGFuIHN0eWxlPSJjb2xvcjojNkE4NzU5Ij4mcXVvdDsmbHQ7aHRtbCZndDsmbHQ7aGVhZCZndDsm bHQ7dGl0bGUmZ3Q7JnF1b3Q7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+JiM0 MzsgdGl0bGUgJiM0MzsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNkE4NzU5Ij4mcXVvdDsm bHQ7L3RpdGxlJmd0OyZsdDsvaGVhZCZndDsmbHQ7Ym9keSZndDsmcXVvdDs8L3NwYW4+PHNwYW4g c3R5bGU9ImNvbG9yOiNBOUI3QzYiPik8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNDQzc4MzIi Pjs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+VXJpQnVpbGRlciBiYXNlID0gVXJpQnVpbGRlci48 aT5mcm9tVXJpPC9pPig8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90Ozxh IGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODE4MC9hdXRoIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDov L2xvY2FsaG9zdDo4MTgwL2F1dGg8L2E+JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj QTlCN0M2Ij4pPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj47PGJyPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNv bG9yOiNBOUI3QzYiPnNiLmFwcGVuZCg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTki PiZxdW90OyZsdDthIGhyZWY9PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj5cJnF1 b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNkE4NzU5Ij4mcXVvdDsgPC9zcGFuPjxzcGFu IHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4mIzQzOyBSZWFsbXNSZXNvdXJjZS48aT5hY2NvdW50VXJs PC9pPihiYXNlKS5idWlsZCg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90 O3Rlc3QmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPikudG9TdHJpbmco KSAmIzQzOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiM2QTg3NTkiPiZxdW90Ozwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+XCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29s b3I6IzZBODc1OSI+IGlkPTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+XCZxdW90 Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZBODc1OSI+YWNjb3VudDwvc3Bhbj48c3BhbiBz dHlsZT0iY29sb3I6I0NDNzgzMiI+XCZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzZB ODc1OSI+Jmd0O2FjY291bnQmbHQ7L2EmZ3Q7JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjojQTlCN0M2Ij4pPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3ODMyIj47PGJyPjxicj4m bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0 eWxlPSJjb2xvcjojQTlCN0M2Ij5zYi5hcHBlbmQoPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjoj NkE4NzU5Ij4mcXVvdDsmbHQ7L2JvZHkmZ3Q7Jmx0Oy9odG1sJmd0OyZxdW90Ozwvc3Bhbj48c3Bh biBzdHlsZT0iY29sb3I6I0E5QjdDNiI+KTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgz MiI+Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJu IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+c2IudG9TdHJpbmcoKTwvc3Bhbj48 c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFu PjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij59PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsg PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQkJCNTI5Ij5AT3ZlcnJpZGU8YnI+Jm5ic3A7Jm5i c3A7Jm5ic3A7IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+cHVibGljIDwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6I0E5QjdDNiI+T2JqZWN0IDwvc3Bhbj48c3BhbiBzdHlsZT0i Y29sb3I6I0ZGQzY2RCI+Z2V0UmVzb3VyY2U8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3 QzYiPigpIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwv c3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I0NDNzgzMiI+cmV0dXJuIHRoaXM7PGJyPiZuYnNwOyZu YnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNBOUI3QzYiPn08YnI+PGJyPiZu YnNwOyZuYnNwOyZuYnNwOyA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNCQkI1MjkiPkBPdmVy cmlkZTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQ0M3 ODMyIj5wdWJsaWMgdm9pZCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkM2NkQiPmNsb3Nl PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojQTlCN0M2Ij4oKSB7PGJyPiZuYnNwOyZuYnNwOyZu YnNwOyB9PGJyPjxicj59PC9zcGFuPjwvc3Bhbj48bzpwPjwvbzpwPjwvcHJlPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90 dG9tLWFsdDphdXRvIj48c3BhbiBsYW5nPSJFTi1VUyI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRv O21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj48c3BhbiBsYW5nPSJFTi1VUyI+Jm5ic3A7PC9z cGFuPjxvOnA+PC9vOnA+PC9wPg0KPHByZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48c3BhbiBsYW5n PSJFTi1VUyI+QnV0IEnigJltIHN0aWxsIGdldHRpbmc6PC9zcGFuPjxvOnA+PC9vOnA+PC9wcmU+ DQo8cHJlIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6MGNtO21hcmdpbi1yaWdodDo2LjBwdDtt YXJnaW4tYm90dG9tOjYuMHB0O21hcmdpbi1sZWZ0OjBjbSI+PHNwYW4gbGFuZz0iRU4tVVMiPiZu YnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcHJlPg0KPHByZSBzdHlsZT0ibWFyZ2luOjYuMHB0Ij48 Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtZmFtaWx5OkNvbnNvbGFzO2NvbG9y OmJsYWNrIj5SRVNURUFTWTAwMzgxNTogU3VicmVzb3VyY2UgZm9yIHRhcmdldCBjbGFzcyBoYXMg bm8gamF4LXJzIGFubm90YXRpb25zLjogbmwudmkua2V5Y2xvYWsucHJvdmlkZXJzLnJlc3QuSGVs bG9SZXNvdXJjZVByb3ZpZGVyPC9zcGFuPjwvY29kZT48bzpwPjwvbzpwPjwvcHJlPg0KPHByZSBz dHlsZT0ibWFyZ2luOjYuMHB0Ij48Y29kZT48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQt ZmFtaWx5OkNvbnNvbGFzO2NvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9jb2RlPjxvOnA+PC9v OnA+PC9wcmU+DQo8cHJlIHN0eWxlPSJtYXJnaW46Ni4wcHQiPjxjb2RlPjxzcGFuIGxhbmc9IkVO LVVTIiBzdHlsZT0iZm9udC1mYW1pbHk6Q29uc29sYXM7Y29sb3I6YmxhY2siPkNhbiB5b3UgcGxl YXNlIGhlbHAgbWU/IFRoYW5rczwvc3Bhbj48L2NvZGU+PG86cD48L286cD48L3ByZT4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2lu LWJvdHRvbS1hbHQ6YXV0byI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0 OmF1dG8iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHRhYmxlIGNsYXNzPSJNc29Ob3JtYWxUYWJs ZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjQ2MSIgc3R5bGU9IndpZHRoOjM0 NS42NXB0Ij4NCjx0Ym9keT4NCjx0ciBzdHlsZT0iaGVpZ2h0OjExLjE1cHQiPg0KPHRkIHN0eWxl PSJwYWRkaW5nOjBjbSAwY20gMGNtIDBjbTtoZWlnaHQ6MTEuMTVwdCI+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20t YWx0OmF1dG87bGluZS1oZWlnaHQ6MTIuMHB0Ij4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6YmxhY2siPktp bmQgUmVnYXJkcyw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBz dHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87 bGluZS1oZWlnaHQ6MTIuMHB0Ij4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2VyaWY7Y29sb3I6YmxhY2siPiZuYnNwOzwvc3Bh bj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2lu LXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bztsaW5lLWhlaWdodDoxMi4w cHQiPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2Vv cmdpYSZxdW90OyxzZXJpZjtjb2xvcjpibGFjayI+TWFyaXVzeiBDaHJ1c2NpZWxld3NraTwvc3Bh bj48bzpwPjwvbzpwPjwvcD4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJoZWlnaHQ6MTEuMTVw dCI+DQo8dGQgc3R5bGU9InBhZGRpbmc6MGNtIDBjbSAxNS4wcHQgMGNtO2hlaWdodDoxMS4xNXB0 Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bztt c28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bztsaW5lLWhlaWdodDoxMi4wcHQiPg0KPHNwYW4gbGFu Zz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3Jn aWEmcXVvdDssc2VyaWY7Y29sb3I6YmxhY2siPlNvZnR3YXJlIEVuZ2luZWVyICZuYnNwO3wmbmJz cDsmbmJzcDs8YSBocmVmPSJtYWlsdG86bWFyaXVzekBpbmZvLm5sIiB0YXJnZXQ9Il9ibGFuayI+ bWFyaXVzekBpbmZvLm5sPC9hPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJv dHRvbS1hbHQ6YXV0bztsaW5lLWhlaWdodDoxMi4wcHQiPg0KPHNwYW4gbGFuZz0iRU4tVVMiIHN0 eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEmcXVvdDssc2Vy aWY7Y29sb3I6YmxhY2siPiYjNDM7MzEgKDApMjAgNTMwIDkxIDEzIHwNCjxhIGhyZWY9InRlbDol MkI0OCUyMDY5NSUyMDU1NSUyMDI5MiIgdGFyZ2V0PSJfYmxhbmsiPiYjNDM7NDggNjk1IDU1NSAy OTI8L2E+IDwvc3Bhbj4NCjxvOnA+PC9vOnA+PC9wPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9 ImhlaWdodDoxNS4zcHQiPg0KPHRkIHN0eWxlPSJwYWRkaW5nOjBjbSAwY20gMy4wcHQgMGNtO2hl aWdodDoxNS4zcHQiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9w LWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO2xpbmUtaGVpZ2h0OjE2LjBwdCI+ DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lh JnF1b3Q7LHNlcmlmO2NvbG9yOmJsYWNrIj48YSBocmVmPSJodHRwOi8vd3d3LmluZm8ubmwvIiB0 YXJnZXQ9Il9ibGFuayI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTQuMHB0 O2NvbG9yOndoaXRlO2JhY2tncm91bmQ6YmxhY2siPmluZm8ubmw8L3NwYW4+PHNwYW4gbGFuZz0i RU4tVVMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj48L2E+PGEgaHJlZj0iaHR0cDov L3d3dy5pbmZvLm5sL25sP3V0bV9zb3VyY2U9ZS1tYWlsX3NpZyZhbXA7dXRtX21lZGl1bT1lLW1h aWwmYW1wO3V0bV90ZXJtPWNvbm5lY3RpbmdfdGhlX2RvdHMmYW1wO3V0bV9jYW1wYWlnbj1pbmZv X3NpZyIgdGFyZ2V0PSJfYmxhbmsiPjxpPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iY29sb3I6 YmxhY2siPm1ha2luZw0KIHBsYXRmb3JtcyB3b3JrPC9zcGFuPjwvaT48L2E+PC9zcGFuPjxvOnA+ PC9vOnA+PC9wPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImhlaWdodDoxMS4xNXB0Ij4NCjx0 ZCBzdHlsZT0icGFkZGluZzowY20gMGNtIDE1LjBwdCAwY207aGVpZ2h0OjExLjE1cHQiPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJn aW4tYm90dG9tLWFsdDphdXRvO2xpbmUtaGVpZ2h0OjEyLjBwdCI+DQo8c3BhbiBzdHlsZT0iZm9u dC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtHZW9yZ2lhJnF1b3Q7LHNlcmlmO2NvbG9y OmJsYWNrIj5TaW50IEFudG9uaWVzYnJlZXN0cmFhdCAxNiAmbmJzcDt8ICZuYnNwOzEwMTEgSEIg QW1zdGVyZGFtICZuYnNwO3wgJm5ic3A7JiM0MzszMSAoMCkyMCA1MzAgOTEgMTE8L3NwYW4+PG86 cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3At YWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87bGluZS1oZWlnaHQ6MTIuMHB0Ij4N CjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0dlb3JnaWEm cXVvdDssc2VyaWYiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9pbmZvbmwiIHRh cmdldD0iX2JsYW5rIj5GYWNlYm9vazwvYT4gfA0KPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNv bS9pbmZvbmwiIHRhcmdldD0iX2JsYW5rIj5Ud2l0dGVyPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8v d3d3LmxpbmtlZGluLmNvbS9jb21wYW55L2luZm8tbmwiIHRhcmdldD0iX2JsYW5rIj4NCkxpbmtl ZEluPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vcGx1cy5nb29nbGUuY29tLyYjNDM7aW5mb25sLyIg dGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSYjNDM7PC9hPjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwv dGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPiZu YnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJn aW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwv bzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNw OzwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4NCmtleWNsb2FrLXVz ZXIgbWFpbGluZyBsaXN0PGJyPg0KPGEgaHJlZj0ibWFpbHRvOmtleWNsb2FrLXVzZXJAbGlzdHMu amJvc3Mub3JnIiB0YXJnZXQ9Il9ibGFuayI+a2V5Y2xvYWstdXNlckBsaXN0cy5qYm9zcy5vcmc8 L2E+PGJyPg0KPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9saXN0aW5m by9rZXljbG9hay11c2VyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcv bWFpbG1hbi9saXN0aW5mby9rZXljbG9hay11c2VyPC9hPjxvOnA+PC9vOnA+PC9wPg0KPC9ibG9j a3F1b3RlPg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwv cD4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48 bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo= --===============4573944957191015606==--