PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgc3RhbmRhbG9uZT0ibm8iPz4NCjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+QVNGOiBYYWxhbiBQcm9qZWN0IENoYXJ0ZXI8L3RpdGxlPg0KPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+DQo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJyZXNvdXJjZXMvYXBhY2hlLXhhbGFuLmNzcyIgLz4NCjwvaGVhZD4NCjwhLS0NCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlDQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQogKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICAiTGljZW5zZSIpOw0KICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKg0KICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KICoNCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KIC0tPg0KPGJvZHk+DQo8ZGl2IGlkPSJ0aXRsZSI+DQo8dGFibGUgY2xhc3M9IkhkclRpdGxlIj4NCjx0Ym9keT4NCjx0cj4NCjx0aCByb3dzcGFuPSIyIj4NCjxhIGhyZWY9ImluZGV4Lmh0bWwiPg0KPGltZyBhbHQ9IlRyYWRlbWFyayBMb2dvIiBzcmM9InJlc291cmNlcy9YYWxhbi1Mb2dvLXRtLnBuZyIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI5MCIgLz4NCjwvYT4NCjwvdGg+DQo8dGggdGV4dC1hbGlnbj0iY2VudGVyIiB3aWR0aD0iNzUlIj4NCjxhIGhyZWY9ImluZGV4Lmh0bWwiPkFwYWNoZSBYYWxhbiBQcm9qZWN0IDwvYT4NCjwvdGg+DQo8L3RyPg0KPHRyPg0KPHRkIHZhbGlnbj0ibWlkZGxlIj5YYWxhbiBQcm9qZWN0IENoYXJ0ZXI8L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPHRhYmxlIGNsYXNzPSJIZHJCdXR0b25zIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiPg0KPHRib2R5Pg0KPHRyPg0KPHRkPg0KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgRm91bmRhdGlvbjwvYT4NCjwvdGQ+DQo8dGQ+DQo8YSBocmVmPSJodHRwOi8veGFsYW4uYXBhY2hlLm9yZyI+WGFsYW4gUHJvamVjdDwvYT4NCjwvdGQ+DQo8dGQ+DQo8YSBocmVmPSJodHRwOi8veGVyY2VzLmFwYWNoZS5vcmciPlhlcmNlcyBQcm9qZWN0PC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSIj5XZWIgQ29uc29ydGl1bTwvYT4NCjwvdGQ+DQo8dGQ+DQo8YSBocmVmPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL3N0YW5kYXJkcyI+T2FzaXMgT3BlbjwvYT4NCjwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjxkaXYgaWQ9Im5hdkxlZnQiPg0KPHVsPg0KPGxpPg0KPGEgaHJlZj0iaW5kZXguaHRtbCI+QXBhY2hlIFhhbGFuPC9hPg0KPC9saT4NCjxsaT5DaGFydGVyPGJyIC8+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPjwvdWw+DQo8cCBjbGFzcz0ibmF2R3JvdXAiPg0KPGVtPlByb2plY3RzPC9lbT4NCjwvcD48dWw+DQo8bGk+DQo8YSBocmVmPSJ4YWxhbi1jL2luZGV4Lmh0bWwiPlhhbGFuIEMrKzwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4tai9pbmRleC5odG1sIj5YYWxhbiBKYXZhPC9hPg0KPC9saT48L3VsPjxociAvPjx1bD48L3VsPg0KPHAgY2xhc3M9Im5hdkdyb3VwIj4NCjxlbT5NYWlsIExpc3RzPC9lbT4NCjwvcD48dWw+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPXhhbGFuLWRldiAiPkRldmVsb3BlcnMgQXJjaGl2ZTwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPXhhbGFuLWMtdXNlcnMiPkMgVXNlcnMgQXJjaGl2ZTwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPXhhbGFuLWotdXNlcnMiPkogVXNlcnMgQXJjaGl2ZTwvYT4NCjwvbGk+PC91bD48aHIgLz48dWw+PC91bD4NCjxwIGNsYXNzPSJuYXZHcm91cCI+DQo8ZW0+UmVzb3VyY2VzPC9lbT4NCjwvcD48dWw+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vZ2V0aW52b2x2ZWQuaHRtbCI+R2V0IEludm9sdmVkPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8iPkxpY2Vuc2VzPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiPlNwb25zb3JzaGlwPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIj5UaGFua3M8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL3NlY3VyaXR5LyI+U2VjdXJpdHk8L2E+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPjwvdWw+DQo8L2Rpdj4NCjxkaXYgaWQ9ImNvbnRlbnQiPg0KPGgyPlhhbGFuIFByb2plY3QgQ2hhcnRlcjwvaDI+DQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+WGFsYW4gUHJvamVjdCBDaGFydGVyPC9oMz4NCiAgPHA+VGhlIGZvbGxvd2luZyBjaGFydGVyIGFwcGxpZXMgdG8gYWxsIFhhbGFuIHByb2plY3RzLjwvcD4NCiAgDQoNCiAgPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoMz4xIElOVFJPRFVDVElPTjwvaDM+DQogICA8cD4xLjEgQXBhY2hlIFhhbGFuIGlzIGEgY29sbGFib3JhdGl2ZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwcm9qZWN0DQogICAgICBkZWRpY2F0ZWQgdG8gcHJvdmlkaW5nIHJvYnVzdCwgZnVsbC1mZWF0dXJlZCwgY29tbWVyY2lhbC1xdWFsaXR5LCBhbmQNCiAgICAgIGZyZWVseSBhdmFpbGFibGUgWFNMVCBzdXBwb3J0IG9uIGEgd2lkZSB2YXJpZXR5IG9mIHBsYXRmb3Jtcy4gVGhpcw0KICAgICAgcHJvamVjdCBpcyBtYW5hZ2VkIGluIGNvb3BlcmF0aW9uIHdpdGggdmFyaW91cyBpbmRpdmlkdWFscyB3b3JsZHdpZGUNCiAgICAgIChib3RoIGluZGVwZW5kZW50IGFuZCBjb21wYW55LWFmZmlsaWF0ZWQgZXhwZXJ0cyksIHdobyB1c2UgdGhlDQogICAgICBJbnRlcm5ldCB0byBjb21tdW5pY2F0ZSwgcGxhbiwgYW5kIGRldmVsb3AgWFNMVCBzb2Z0d2FyZSBhbmQgcmVsYXRlZA0KICAgICAgZG9jdW1lbnRhdGlvbi48L3A+DQogICA8cD4xLjIgVGhpcyBjaGFydGVyIGJyaWVmbHkgZGVzY3JpYmVzIHRoZSBtaXNzaW9uLCBoaXN0b3J5LCBvcmdhbml6YXRpb24NCiAgICAgIGFuZCBwcm9jZXNzZXMgb2YgdGhlIHByb2plY3QuPC9wPg0KICANCg0KICA8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPjIgTUlTU0lPTjwvaDM+DQogICA8cD4yLjEgQXBhY2hlIFhhbGFuIGV4aXN0cyB0byBwcm9tb3RlIHRoZSB1c2Ugb2YgWFNMVC4gV2UgdmlldyBYU0xUDQogICAgICAoRXh0ZW5zaWJsZSBTdHlsZXNoZWV0IExhbmd1YWdlIFRyYW5zZm9ybWF0aW9ucykgYXMgYSBjb21wZWxsaW5nIA0KICAgICAgcGFyYWRpZ20gdGhhdCB0cmFuc2Zvcm1zIFhNTCBkb2N1bWVudHMsIHRoZXJlYnkgZmFjaWxpdGF0aW5nIHRoZQ0KICAgICAgZXhjaGFuZ2UsIHRyYW5zZm9ybWF0aW9uLCBhbmQgcHJlc2VudGF0aW9uIG9mIGtub3dsZWRnZS4gVGhlIGFiaWxpdHkNCiAgICAgIHRvIHRyYW5zZm9ybSBYTUwgZG9jdW1lbnRzIGludG8gdXNhYmxlIGluZm9ybWF0aW9uIGhhcyBncmVhdCBwb3RlbnRpYWwNCiAgICAgIHRvIGltcHJvdmUgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIHVzZSBvZiBpbmZvcm1hdGlvbiBzeXN0ZW1zLiBXZSBpbnRlbmQNCiAgICAgIHRvIGJ1aWxkIGZyZWVseSBhdmFpbGFibGUgWFNMVCBwcm9jZXNzaW5nIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8NCiAgICAgIGVuZ2VuZGVyIHN1Y2ggaW1wcm92ZW1lbnRzLjwvcD4NCiAgIDxwPjIuMiBBcGFjaGUgWGFsYW4gY29uc2lzdHMgb2YgYSBzZXQgb2YgY29tcG9uZW50cyB0aGF0IHRyYW5zZm9ybSBYTUwNCiAgICAgIGRvY3VtZW50cy4gIFdoZXJlIGFwcHJvcHJpYXRlLCB0aGVzZSBjb21wb25lbnRzIHBsdWcgaW50byBvdGhlciBYTUwNCiAgICAgIGNvbXBvbmVudHMgdXNpbmcgc3RhbmRhcmQgQVBJcyAoZm9ybWFsLCBkZSBmYWN0bywgb3IgcHJvcG9zZWQpLiAgVGhlDQogICAgICBjb21wb25lbnRzIG11c3QgYmUgaGlnaCBwZXJmb3JtYW5jZSwgcmVsaWFibGUsIGFuZCBlYXN5IHRvIHVzZS4gIFdoZXJlDQogICAgICBpbnRlci1yZWxhdGVkLCB0aGUgY29tcG9uZW50cyBtdXN0IGJlIHBhcnQgb2YgYW4gdW5kZXJseWluZyBhcmNoaXRlY3R1cmFsDQogICAgICBvcmNoZXN0cmF0aW9uIHRoYXQgd2lsbCBhbGxvdyB0aGVtIHRvIHdvcmsgdG9nZXRoZXIgd2l0aG91dCBtYWpvcg0KICAgICAgbmVnb3RpYXRpb25zIG9yIGJyZWFrYWdlLjwvcD4NCiAgIDxwPjIuMyBXZSBiZWxpZXZlIHRoYXQgdGhlIGJlc3Qgd2F5IHRvIGRlZmluZSB0aGlzIFhNTCB0cmFuc2Zvcm1hdGlvbg0KICAgICAgYXJjaGl0ZWN0dXJlIGlzIGJ5IGhhdmluZyBib3RoIGluZGl2aWR1YWxzIGFuZCBjb3Jwb3JhdGlvbnMNCiAgICAgIGNvbGxhYm9yYXRlIG9uIHRoZSBiZXN0IHBvc3NpYmxlIGluZnJhc3RydWN0dXJlLCBBUElzLCBjb2RlLCB0ZXN0aW5nLA0KICAgICAgYW5kIHJlbGVhc2UgY3ljbGVzLiBDb21wb25lbnRzIG11c3QgYmUgdmVuZG9yIG5ldXRyYWwgYW5kIHVzYWJsZSBhcw0KICAgICAgY29yZSBjb21wb25lbnRzIGZvciBhbGwuPC9wPg0KICAgPHA+Mi40IEluIG9yZGVyIHRvIGFjaGlldmUgYSBjb2hlcmVudCBhcmNoaXRlY3R1cmUgYmV0d2VlbiBBcGFjaGUgWGFsYW4NCiAgICAgIGNvbXBvbmVudHMgYW5kIG90aGVyIGNvbXBvbmVudHMgYW5kIGFwcGxpY2F0aW9ucywgc3RhbmRhcmRzIChmb3JtYWwgb3INCiAgICAgIGRlIGZhY3RvKSB3aWxsIGJlIHVzZWQgYXMgbXVjaCBhcyBwb3NzaWJsZSBmb3IgYm90aCBwcm90b2NvbHMgYW5kDQogICAgICBBUElzLiBXaGVyZSBhcHByb3ByaWF0ZSwgZXhwZXJpZW5jZXMgYW5kIGxlc3NvbnMgbGVhcm5lZCB3aWxsIGJlIGZlZA0KICAgICAgYmFjayB0byBzdGFuZGFyZHMgYm9kaWVzIGluIGFuIGVmZm9ydCB0byBhc3Npc3QgaW4gdGhlIGRldmVsb3BtZW50IG9mIA0KICAgICAgdGhvc2Ugc3RhbmRhcmRzLiAgV2Ugd2lsbCBhbHNvIGVuY291cmFnZSB0aGUgaW5ub3ZhdGlvbiBvZiBuZXcNCiAgICAgIHByb3RvY29scywgQVBJcywgYW5kIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2VlZCBuZXcgY29uY2VwdHMgbm90DQogICAgICB5ZXQgZGVmaW5lZCBieSBzdGFuZGFyZHMuPC9wPg0KICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+MyBISVNUT1JZPC9oMz4NCiAgIDxwPjMuMSBUaGlzIHByb2plY3Qgd2FzIGVzdGFibGlzaGVkIHVuZGVyIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEFwYWNoZQ0KICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluIE9jdG9iZXIgMjAwNCB0byBmYWNpbGl0YXRlIGpvaW50IG9wZW4tc291cmNlDQogICAgIGRldmVsb3BtZW50LiAgUHJpb3IgdG8gT2N0b2JlciAyMDA0IHRoaXMgcHJvamVjdCB3YXMgYSBzdWJwcm9qZWN0DQogICAgIG9mIHRoZSBBcGFjaGUgWE1MIHByb2plY3QuPC9wPg0KICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+NCBURVJNUzwvaDM+DQogICA8cD40LjEgVGhlIEFTRiBCb2FyZC4gIFRoZSBtYW5hZ2VtZW50IGJvYXJkIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgDQogICAgICBGb3VuZGF0aW9uLjwvcD4NCiAgIDxwPjQuMiBUaGUgUHJvamVjdC4gIFRoZSBBcGFjaGUgWGFsYW4gcHJvamVjdDsgaW50ZW5kZWQgdG8gcmVmZXIgdG8gdGhlIA0KICAgICAgc291cmNlIGNvZGUsIHdlYnNpdGUsIHN1YnByb2plY3RzLCBhbmQgY29tbXVuaXR5IHRoYXQgYXJlIEFwYWNoZSBYYWxhbi48L3A+DQogICA8cD40LjMgU3VicHJvamVjdC4gIFRoZSBBcGFjaGUgWGFsYW4gcHJvamVjdCBtYXkgaGF2ZSBzdWJwcm9qZWN0czsgYSANCiAgICAgIHN1YnByb2plY3QgaXMgcmVzcG9uc2libGUgZm9yIGEgY29tcG9uZW50IG9yIGFwcGxpY2F0aW9uIHdob3NlIHNjb3BlDQogICAgICBpcyB3ZWxsIGRlZmluZWQuPC9wPg0KICAgPHA+NC40IFByb2R1Y3QuICBTb21lIGRlbGl2ZXJhYmxlICh1c3VhbGx5IGEgYmluYXJ5IG9yIHNvdXJjZSBwYWNrYWdlKQ0KICAgICAgdGhhdCBhIHN1YnByb2plY3QgbWFrZXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMuICBTdWJwcm9qZWN0cyBtYXkgaGF2ZQ0KICAgICAgbXVsdGlwbGUgcHJvZHVjdHMuPC9wPg0KICAgPHA+NC41IFJlbGVhc2UuICBBIHNwZWNpZmljIHZlcnNpb24gb2YgYSBwcm9kdWN0LiAgU3VicHJvamVjdHMgbWF5IGhhdmUNCiAgICAgIG11bHRpcGxlIHJlbGVhc2VzIG9mIGEgZ2l2ZW4gcHJvZHVjdC48L3A+DQogICA8cD40LjYgQ29udHJpYnV0b3IuICBBbnlvbmUgd2hvIG1ha2VzIGEgY29udHJpYnV0aW9uIHRvIHRoZSBkZXZlbG9wbWVudA0KICAgICAgb2YgdGhlIEFwYWNoZSBYYWxhbiBwcm9qZWN0LjwvcD4NCiAgIDxwPjQuNyBDb21taXR0ZXIuICBUaGUgQXBhY2hlIFhhbGFuIHByb2plY3QgaGFzIGEgc2V0IG9mIGNvbW1pdHRlcnMuICANCiAgICAgIENvbW1pdHRlcnMgYXJlIGNvbnRyaWJ1dG9ycyB3aG8gaGF2ZSByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgc291cmNlDQogICAgICBjb2RlIHJlcG9zaXRvcnkuPC9wPg0KICAgPHA+NC44IFBNQy4gVGhlIFBNQyAoUHJvamVjdCBNYW5hZ2VtZW50IENvbW1pdHRlZSkgaXMgdGhlIGdyb3VwIG9mIHBlb3BsZQ0KICAgICAgdGhhdCBmb3JtIHRoZSBlbnRpdHkgdGhhdCBtYWtlcyBkZWNpc2lvbnMgYW5kIGNvbnRyb2xzIHRoZSBwcm9qZWN0LiAgDQogICAgICBJbmRpdmlkdWFsIHBlb3BsZSBvciBjb21taXR0ZXJzIGRvIG5vdCBjb250cm9sIHRoZSBwcm9qZWN0LjwvcD4NCiAgICAgICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+NSBUSEUgUFJPSkVDVCBNQU5BR0VNRU5UIENPTU1JVFRFRTwvaDM+DQogICA8cD41LjEgVGhlIEFwYWNoZSBYYWxhbiBwcm9qZWN0IGlzIG1hbmFnZWQgYnkgYSBjb3JlIGdyb3VwIG9mIGNvbW1pdHRlcnMgDQogICAgICBrbm93biBhcyB0aGUgUHJvamVjdCBNYW5hZ2VtZW50IENvbW1pdHRlZSBbUE1DXS4gU3VicHJvamVjdHMsIGlmIGFueSwNCiAgICAgIG11Y2ggZWFjaCBoYXZlIGF0IGxlYXN0IG9uZSByZXByZXNlbnRhdGl2ZSBjb21taXR0ZXIgb24gdGhlIFBNQy48L3A+DQogICA8cD41LjIgVGhlIGFjdGl2aXRpZXMgb2YgdGhlIFBNQyBhcmUgY29vcmRpbmF0ZWQgYnkgdGhlIENoYWlycGVyc29uLA0KICAgICAgd2hvIGlzIGFuIG9mZmljZXIgb2YgdGhlIGNvcnBvcmF0aW9uIGFuZCByZXBvcnRzIHRvIHRoZSBBcGFjaGUNCiAgICAgIEJvYXJkLiAgVGhlIENoYWlycGVyc29uIHdpbGwsIG9uIHRoZSByZXF1ZXN0IG9mIHRoZSBBcGFjaGUgQm9hcmQsIA0KICAgICAgcHJvdmlkZSByZXBvcnRzIHRvIHRoZSBCb2FyZCBvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgcnVubmluZyBvZiANCiAgICAgIHRoZSBBcGFjaGUgWGFsYW4gcHJvamVjdC48L3A+DQogICA8cD41LjMgVGhlIFBNQyBoYXMgdGhlIGZvbGxvd2luZyByZXNwb25zaWJpbGl0aWVzOjwvcD4NCiAgIDxwPmEpIEFjY2VwdGluZyBuZXcgc3VicHJvamVjdCBwcm9wb3NhbHMsIGZvcm1hbGx5IHN1Ym1pdHRpbmcgdGhlc2UNCiAgICAgIHByb3Bvc2FscyBmb3IgQXBhY2hlIFhhbGFuIGNvbW1pdHRlciB2b3RlLCBhbmQgY3JlYXRpbmcgdGhlIHN1YnByb2plY3QNCiAgICAgIChzZWUgU1VCUFJPSkVDVFMgYmVsb3cpLiAgVGhpcyBpcyBkb25lIGluIGNvbGxhYm9yYXRpb24gd2l0aCB0aGUgDQogICAgICBJbmN1YmF0b3IgKHNlZSA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciPmh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZzwvYT4pLjwvcD4NCiAgIDxwPmIpIEZhY2lsaXRhdGluZyBjb2RlIG9yIG90aGVyIGRvbmF0aW9ucyBieSBpbmRpdmlkdWFscyBvciBjb21wYW5pZXMsDQogICAgICBpbiBjb2xsYWJvcmF0aW9uIHdpdGggdGhlIEluY3ViYXRvci48L3A+DQogICA8cD5jKSBSZXNvbHZpbmcgbGljZW5zZSBpc3N1ZXMgYW5kIG90aGVyIGxlZ2FsIGlzc3VlcyBpbiBjb25qdW5jdGlvbiB3aXRoDQogICAgICB0aGUgQVNGIGJvYXJkLjwvcD4NCiAgIDxwPmQpIEVuc3VyaW5nIHRoYXQgYWRtaW5pc3RyYXRpdmUgYW5kIGluZnJhc3RydWN0dXJlIHdvcmsgaXMgY29tcGxldGVkLjwvcD4NCiAgIDxwPmUpIEZhY2lsaXRhdGluZyByZWxhdGlvbnNoaXBzIGFtb25nIHByb2plY3RzIGFuZCBzdWJwcm9qZWN0cy48L3A+DQogICA8cD5mKSBGYWNpbGl0YXRpbmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBBcGFjaGUgWGFsYW4gcHJvamVjdCBhbmQgdGhlIA0KICAgICAgZXh0ZXJuYWwgd29ybGQuPC9wPg0KICAgPHA+ZykgT3ZlcnNlZWluZyBBcGFjaGUgWGFsYW4gdG8gZW5zdXJlIHRoYXQgdGhlIG1pc3Npb24gZGVmaW5lZCBpbiB0aGlzIA0KICAgICAgZG9jdW1lbnQgaXMgYmVpbmcgZnVsZmlsbGVkLjwvcD4NCiAgIDxwPmgpIFJlc29sdmluZyBjb25mbGljdHMgd2l0aGluIHRoZSBwcm9qZWN0LjwvcD4NCiAgIDxwPmkpIFJlcG9ydGluZyB0byB0aGUgQVNGIGJvYXJkICh0aHJvdWdoIHRoZSBDaGFpcikgb24gdGhlIHByb2dyZXNzDQogICAgICBvZiB0aGUgcHJvamVjdC48L3A+DQogICA8cD5qKSBQcm9wb3NlIG5ldyByZWxlYXNlcyBvZiBwcm9qZWN0cyBvciBzdWJwcm9qZWN0cy4gIFN1Y2ggcHJvcG9zYWxzIHBhc3MNCiAgICAgIGlmIDc1JSBvZiB0aGUgUE1DIG1lbWJlcnMgdm90ZSBpbiBhZ3JlZW1lbnQuPC9wPiAgIA0KICAgICAgDQogICA8cD41LjQgQSBjb250cmlidXRvciBjYW4sIGF0IGFueSB0aW1lLCBub21pbmF0ZSBhIGNvbW1pdHRlciB0byBiZSBvbiB0aGUgUE1DLA0KICAgICAgYnkgY2FsbGluZyBmb3IgYSB2b3RlLiAgSWYgdHdvIHRoaXJkcywgb3IgbW9yZSwgb2YgdGhlIGFjdGl2ZSBjb21taXR0ZXJzIA0KICAgICAgdm90ZSBpbiBhZ3JlZW1lbnQgdGhlbiB0aGUgbm9taW5hdGlvbiBpcyBnaXZlbiB0byB0aGUgUE1DLiAgVGhlIHBlcnNvbg0KICAgICAgYmVjb21lcyBhIG5ldyBQTUMgbWVtYmVyIGlmIDc1JSBvciBtb3JlIG9mIHRoZSBQTUMgbWVtYmVycyB2b3RlIGluDQogICAgICBhZ3JlZW1lbnQsIHdpdGggbm8gZGlzc2VudGluZyB2b3RlcyBhbW9uZyB0aGUgUE1DIG1lbWJlcnMuICBUaGlzIGluZGl2aWR1YWwNCiAgICAgIHNob3VsZCBiZSBlbGVjdGVkIGJhc2VkIG9uIG1lcml0IGZvciB0aGUgZXZvbHV0aW9uIG9mIHRoZSBwcm9qZWN0IGFuZCANCiAgICAgIGRlbW9uc3RyYXRpb24gb2YgY29tbWl0bWVudC48L3A+DQogICA8cD41LjUgSW4gY2FzZXMgd2hlcmUgdGhlIHN1YnByb2plY3QgaXMgdW5hYmxlIHRvIGRpcmVjdGx5IHByb3ZpZGUgYSANCiAgICAgIHJlcHJlc2VudGF0aXZlIG9uIHRoZSBQTUMsIGFub3RoZXIgbWVtYmVyIG9mIHRoZSBQTUMgd2lsbCBiZSByZXF1aXJlZCB0bw0KICAgICAgcmVwcmVzZW50IHRoYXQgc3VicHJvamVjdCBvbiB0aGUgUE1DLiAgVGhpcyB3aWxsIGJlIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLg0KICAgICAgSXQgaXMgcHJlZmVyYWJsZSB0aGF0IGFsbCBzdWJwcm9qZWN0cyBoYXZlIGRpcmVjdCByZXByZXNlbnRhdGlvbiBvbiB0aGUNCiAgICAgIFBNQy48L3A+DQogICA8cD41LjYgQXQgbGVhc3QgZXZlcnkgdHdlbHZlIG1vbnRocywgb3IgbW9yZSBvZnRlbiBpZiBkaXJlY3RlZCBieSB0aGUgQVNGDQogICAgICBib2FyZCwgdGhlIFBNQyBtZW1iZXJzIHdpbGwgZWxlY3QgYSBDaGFpcnBlcnNvbiBmcm9tIGFtb25nIHRoZW1zZWx2ZXM7DQogICAgICB0aGUgcGVyc29uIHdpdGggdGhlIG1vc3Qgdm90ZXMgZnJvbSB0aGUgb3RoZXIgUE1DIG1lbWJlcnMgaXMgcmVjb21tZW5kZWQNCiAgICAgIHRvIHRoZSBBU0YgYm9hcmQgZm9yIHRoZSBwb3NpdGlvbiBvZiBDaGFpcnBlcnNvbiwgYW5kIHdpdGggdGhlIEFTRiBib2FyZCdzDQogICAgICBhcHByb3ZhbCwgYmVjb21lcyB0aGUgQ2hhaXJwZXJzb24gZm9yIHRoZSBuZXcgdGVybS48L3A+DQogICA8cD41LjcgVXBvbiBhZ3JlZW1lbnQgYnkgdGhlIEFwYWNoZSBCb2FyZCwgdGhlIHJlY29tbWVuZGVkIENoYWlycGVyc29uIHdpbGwsDQogICAgICBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSwgYmUgYXBwb2ludGVkIGFuIG9mZmljZXIgb2YgdGhlIGNvcnBvcmF0aW9uLiAgU2VlDQogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ieWxhd3MuaHRtbCI+DQogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ieWxhd3MuaHRtbDwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPg0KICAgPHA+NS44IFRoZSBQTUMgaXMgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIGFuZCB1cGRhdGluZyB0aGlzIGNoYXJ0ZXIuIA0KICAgICAgRGV2ZWxvcG1lbnQgbXVzdCBmb2xsb3cgdGhlIHByb2Nlc3Mgb3V0bGluZWQgYmVsb3csIHNvIGFueSBjaGFuZ2UgdG8gdGhlIA0KICAgICAgZGV2ZWxvcG1lbnQgcHJvY2VzcyBuZWNlc3NpdGF0ZXMgYSBjaGFuZ2UgdG8gdGhlIGNoYXJ0ZXIuIFByb3Bvc2VkIGNoYW5nZXMNCiAgICAgIHRvIHRoaXMgY2hhcnRlciBieSB0aGUgUE1DIGFyZSBwYXNzZWQgaWYgNzUlIG9yIG1vcmUgb2YgdGhlIFBNQyBtZW1iZXJzDQogICAgICBhcHByb3ZlIHRoZSBwcm9wb3NhbCwgd2l0aCBubyBkaXNzZW50aW5nIHZvdGVzLiBIb3dldmVyLCBhbiBhY3RpdmUgQXBhY2hlDQogICAgICBYYWxhbiBjb21taXR0ZXIgbWF5IGNoYWxsZW5nZSB0aGUgY2hhbmdlLjwvcD4NCiAgIDxwPjUuOSBBbiBhY3RpdmUgQXBhY2hlIFhhbGFuIGNvbW1pdHRlciBtYXkgY2hhbGxlbmdlIGEgY2hhbmdlIHRvIHRoaXMgY2hhcnRlcg0KICAgICAgcHJvcG9zZWQgYnkgdGhlIFBNQyB3aXRoaW4gdHdvIHdlZWtzIG9mIGl0cyBwcm9wb3NhbC4gIFdoZW4gY2hhbGxlbmdlZCB0aGUNCiAgICAgIHByb3Bvc2VkIGNoYW5nZSBpcyBwYXNzZWQgaWYgd2l0aGluIHR3byB3ZWVrcyBvZiB0aGUgY2hhbGxlbmdlIHRoZSBhY3RpdmUNCiAgICAgIGNvbW1pdHRlcnMgYXBwcm92ZSB0aGUgY2hhbmdlIHdpdGggYSB0d28tdGhpcmRzIG1ham9yaXR5IHZvdGUuPC9wPg0KICAgPHA+NS4xMCBUaGUgUE1DIHVsdGltYXRlbHkgbWFrZXMgdGhlIGRlY2lzaW9ucyBmb3IgdGhlIHByb2plY3QsIG5vdCB0aGUgaW5kaXZpZHVhbA0KICAgICAgcGVvcGxlLiAgQXQgYW55IHRpbWUgdGhlIFBNQyBjYW4gcmVqZWN0IHBhdGNoZXMgb3Igb3RoZXIgY29udHJpYnV0aW9ucyB0byB0aGUNCiAgICAgIHByb2plY3QgaWYgNzUlIG9yIG1vcmUgb2YgdGhlIFBNQyBtZW1iZXJzIHZvdGUgdG8gcmVqZWN0IHRoZSBjb250cmlidXRpb24uPC9wPg0KICAgPHA+NS4xMSBBIFBNQyBtZW1iZXIgbWF5IHJlc2lnbiB0aGVpciBtZW1iZXJzaGlwIGF0IGFueSB0aW1lLiAgSG93ZXZlciwgaW4gdGhlDQogICAgICB1bmxpa2VseSBldmVudCB0aGF0IGEgbWVtYmVyIG9mIHRoZSBQTUMgYmVjb21lcyBkaXNydXB0aXZlIHRvIHRoZSBwcm9jZXNzLA0KICAgICAgc3VjaCBhcyBjZWFzaW5nIHRvIHRha2UgcGFydCBpbiBQTUMgdm90ZXMsIHRoZSBQTUMgbWVtYmVyIG1heSBiZSByZW1vdmVkIGZyb20NCiAgICAgIHRoZSBQTUMgYnkgYSB2b3RlIGFtb25nIHRoZSBvdGhlciBQTUMgbWVtYmVycy4gIFRoZSBQTUMgbWVtYmVyIGlzIHJlbW92ZWQgaWYNCiAgICAgIDc1JSBvciBtb3JlIG9mIHRoZSBvdGhlciBQTUMgbWVtYmVycyBhcHByb3ZlIHRoZSByZW1vdmFsLCB3aXRoIG5vIGRpc3NlbnRpbmcNCiAgICAgIHZvdGVzIGFtb25nIHRoZSBvdGhlciBQTUMgbWVtYmVycy48L3A+DQogICA8cD41LjEyIEEgcGVyc29uIHJlbWFpbnMgYSBQTUMgbWVtYmVyIHVudGlsIGhlIG9yIHNoZSByZXNpZ25zLCBpcyByZW1vdmVkIGJ5IGENCiAgICAgIHZvdGUgZnJvbSBhbW9uZyB0aGUgb3RoZXIgUE1DIG1lbWJlcnMsIGRpZXMgb3IgaXMgaW5jYXBhY2l0YXRlZC48L3A+DQogICANCg0KICA8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPjYgU1VCUFJPSkVDVFM8L2gzPg0KICAgPHA+Ni4xIEEgc3VicHJvamVjdCBvZiB0aGUgQXBhY2hlIFhhbGFuIHByb2plY3QgaXMgcmVzcG9uc2libGUgZm9yIGEgY29tcG9uZW50IA0KICAgICAgb3IgYXBwbGljYXRpb24gd2hvc2Ugc2NvcGUgaXMgd2VsbCBkZWZpbmVkLiAgRWFjaCBzdWJwcm9qZWN0IGhhcyBpdHMgb3duIHNldCANCiAgICAgIG9mIGRldmVsb3BlcnMsIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgYXBwcm92aW5nIGl0cyBvd24gY29tbWl0dGVycy4gQXBhY2hlIA0KICAgICAgWGFsYW4gaXMgY29tcG9zZWQgb2Ygc3VicHJvamVjdHMgd2hpY2ggZml0IGludG8gb25lIG9mIHR3byBjYXRlZ29yaWVzOjwvcD4NCiAgIDxwPihhKSBBbiBYU0xUIHByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbiBpbiBzb21lIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcNCiAgICAgIGxhbmd1YWdlLiAgVGhlcmUgbWF5IGJlIG11bHRpcGxlIHByb2Nlc3NvcnMgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgaWYNCiAgICAgIHRoZSBBUEkncyB0aGUgcHJvY2Vzc29ycyBzdXBwb3J0IGFyZSBzdWZmaWNpZW50bHkgZGlzc2ltaWxhci4gIEF0IHRoZQ0KICAgICAgdGltZSBvZiB3cml0aW5nLCB0aGVyZSBpcyBvbmUgcHJvY2Vzc29yIGZvciBDKysgYW5kIHR3byBmb3IgSmF2YS48L3A+DQogICA8cD4oYikgQSBzZXQgb2YgY29tcG9uZW50cyB3aGljaCBhcmUgdXNlZCBpbiByZWxhdGVkIGFwcGxpY2F0aW9ucyBhbmQgYXJlDQogICAgICB0aWdodGx5IGJvdW5kLCB1c3VhbGx5IHRocm91Z2ggaW50ZXJuYWwgQVBJJ3MsIHRvIG9uZSAob3IgbW9yZSkgb2YgdGhlDQogICAgICBwcm9jZXNzb3Igc3VicHJvamVjdHMuPC9wPg0KICAgPHA+Ni4yIEEgbmV3IHN1YnByb2plY3QgcHJvcG9zYWwgaXMgc3VibWl0dGVkIHRvIHRoZSBQTUMsIGFuZCB0aGVuIGFjY2VwdGVkDQogICAgICBieSBhIG1ham9yaXR5IEFwYWNoZSBYYWxhbiBwcm9qZWN0IGFjdGl2ZSBjb21taXR0ZXIgdm90ZSB3aXRoaW4gdHdvIHdlZWtzDQogICAgICBhZnRlciB0aGUgcHJvcG9zYWwuPC9wPg0KICAgPHA+Ni4zIEVhY2ggc3VicHJvamVjdCBtdXN0IGhhdmUgYSBzZXQgb2YgcmVxdWlyZW1lbnRzIGFzIHdlbGwgYXMgYW4NCiAgICAgIHVwLXRvLWRhdGUgcmVsZWFzZSBwbGFuIGFuZCBkZXNpZ24gZG9jdW1lbnQgb24gaXRzIGRlZGljYXRlZCB3ZWIgcGFnZS48L3A+DQogICA8cD42LjQgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBlYWNoIHN1YnByb2plY3QgaGF2ZSBhIHNtb2tlLXRlc3Qgc3lzdGVtDQogICAgICB0aGF0IHdvcmtzIGF0IGxlYXN0IGFzIGEgYmFzaWMgaW50ZWdyYXRpb24gdGVzdC48L3A+DQogICA8cD42LjUgQSBzdWJwcm9qZWN0IG1heSBiZSByZW1vdmVkIGlmIDc1JSBvciBtb3JlIG9mIHRoZSBQTUMgbWVtYmVycyBhcHByb3ZlDQogICAgICB0aGUgcHJvcG9zYWwsIHRoZXJlIGFyZSBubyBkaXNzZW50aW5nIHZvdGVzIGFtb25nIHRoZSBQTUMgbWVtYmVycywNCiAgICAgIGFuZCBubyBjaGFsbGVuZ2VzIGJ5IGFjdGl2ZSBBcGFjaGUgWGFsYW4gcHJvamVjdCBjb21taXR0ZXJzDQogICAgICB3aXRoaW4gdHdvIHdlZWtzIGFmdGVyIHRoZSBwcm9wb3NhbC4NCiAgICAgIEEgY29udHJpYnV0b3IgbWF5IGNoYWxsZW5nZSB0aGUgcHJvcG9zZWQgcmVtb3ZhbA0KICAgICAgb2YgYSBzdWJwcm9qZWN0IHdpdGhpbiB0d28gd2Vla3Mgb2YgdGhlIHByb3Bvc2FsLg0KICAgICAgSW4gdGhpcyBjYXNlIHRoZSBwcm9wb3NlZCByZW1vdmFsIGlzIHBhc3NlZCBpZiB3aXRoaW4gdHdvIHdlZWtzIG9mIHRoZQ0KICAgICAgY2hhbGxlbmdlIHRoZSBhY3RpdmUgY29tbWl0dGVycyBhcHByb3ZlIHRoZSByZW1vdmFsIHdpdGggYSB0d28tdGhpcmRzDQogICAgICBtYWpvcml0eSB2b3RlLiBBbnkgc3VicHJvamVjdCByZW1vdmFsIGlzIHN1YmplY3QgdG8gdGhlIGFwcHJvdmFsIG9mIHRoZQ0KICAgICAgQVNGIGJvYXJkLjwvcD4NCiAgICAgICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+NyBDT05UUklCVVRPUlM8L2gzPg0KICAgPHA+Ny4xIExpa2UgYWxsIEFwYWNoZSBwcm9qZWN0cywgdGhlIEFwYWNoZSBYYWxhbiBwcm9qZWN0IGlzIGENCiAgICAgIG1lcml0b2NyYWN5IC0tIHRoZSBtb3JlIHdvcmsgeW91IGRvLCB0aGUgbW9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gZG8uPC9wPg0KICAgPHA+Ny4yIFBlb3BsZSB3aG8gbWFrZSByZWd1bGFyIGFuZCBzdWJzdGFudGlhbCBjb250cmlidXRpb25zIG1heSBiZWNvbWUNCiAgICAgIGNvbW1pdHRlcnMgYXMgZGVzY3JpYmVkIGJlbG93LiBDb250cmlidXRpb25zIGluY2x1ZGU6IHBhcnRpY2lwYXRpbmcgaW4NCiAgICAgIG1haWxpbmcgbGlzdHMsIHJlcG9ydGluZyBpc3N1ZXMgb3IgYnVncyBpbiBpc3N1ZS1yZWNvcmRzIGluIHRoZSBJc3N1ZSBEYXRhYmFzZSwgDQogICAgICBwcm92aWRpbmcgcGF0Y2hlcywgYW5kIHByb3Bvc2luZyBjaGFuZ2VzIHRvIGEgcHJvZHVjdC48L3A+DQogICA8cD43LjMgSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGNvZGUgY29udGFpbmVkIGluIHRoZSBBcGFjaGUgWGFsYW4NCiAgICAgIHByb2plY3QncyBjb2RlIHJlcG9zaXRvcnkgaXMgZnJlZSBvZiBsaWNlbnNpbmcsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgcGF0ZW50DQogICAgICBpc3N1ZXMsIGFueSBwZXJzb24gd2lzaGluZyB0byBjb250cmlidXRlIGEgbmV3IGZlYXR1cmUgdG8gQXBhY2hlIFhhbGFuIG11c3QgZWl0aGVyDQogICAgICBzaWduOjwvcD4NCiAgIDxwPmEpIElmIGNvbnRyaWJ1dGluZyBhcyBhbiBpbmRpdmlkdWFsLCBzaWduIHRoZSAiSW5kaXZpZHVhbA0KICAgICAgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnQgKENMQSkiDQogICAgICAoPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL2ljbGEudHh0Ij5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvaWNsYS50eHQ8L2E+KQ0KICAgICAgYW5kIGZpbGUgYSBjb3B5IHdpdGggdGhlIFNlY3JldGFyeSBvZiB0aGUgQ29ycG9yYXRpb247IG9yIDwvcD4gICAgICANCiAgIDxwPmIpIElmIG1ha2luZyB0aGUgY29udHJpYnV0aW9uIGFzIHBhcnQgb2YgdGhlaXIgZW1wbG95bWVudA0KICAgICAgcmVzcG9uc2liaWxpdGllcywgc2lnbiB0aGUgIkNvcnBvcmF0ZSBDTEEgKENDTEEpIiwgDQogICAgICAoPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL2NsYS1jb3Jwb3JhdGUudHh0Ij5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvY2xhLWNvcnBvcmF0ZS50eHQ8L2E+KQ0KICAgICAgYW5kIGZpbGUgYSBjb3B5IHdpdGggdGhlIFNlY3JldGFyeSBvZiB0aGUgQ29ycG9yYXRpb24uPC9wPg0KICAgPHA+Ny40IElmIHRoZSBjb250cmlidXRpb24gaW4gcXVlc3Rpb24gaXMgYSBzbWFsbCBidWdmaXgsIHRoZSBjb250cmlidXRvciBuZWVkDQogICAgICBub3Qgc2lnbiBhIENMQSwgYnV0IG5lZWQgb25seSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24sIGF0dGFjaGluZw0KICAgICAgaXQgdG8gdGhlIGNvbW11bmljYXRpb24gY29udGFpbmluZyB0aGUgcGF0Y2g6PC9wPg0KICAgPHA+YSkgTmFtZSBhbmQgZW1wbG95ZXI8L3A+DQogICA8cD5iKSBBcmUgeW91IHRoZSBhdXRob3Igb2YgdGhlIGNvZGUgYmVpbmcgY29udHJpYnV0ZWQ/PC9wPg0KICAgPHA+YykgRG8geW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgYW5kIHBhdGVudA0KICAgICAgbGljZW5zZXMgZm9yIHRoZSBjb250cmlidXRpb24gdGhhdCBhcmUgc2V0IGZvcnRoIGluIHRoZSBBU0Ygdi4yLjANCiAgICAgIGxpY2Vuc2UgKDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik/PC9wPg0KICAgPHA+ZCkgRG9lcyB5b3VyIGVtcGxveWVyIGhhdmUgYW55IHJpZ2h0cyB0byBjb2RlIHRoYXQgeW91IGhhdmUNCiAgICAgIHdyaXR0ZW4sIGZvciBleGFtcGxlLCB0aHJvdWdoIHlvdXIgY29udHJhY3QgZm9yIGVtcGxveW1lbnQ/ICBJZg0KICAgICAgc28sIGhhcyB5b3VyIGVtcGxveWVyIGdpdmVuIHlvdSBwZXJtaXNzaW9uIHRvIGNvbnRyaWJ1dGUgdGhlIGNvZGUNCiAgICAgIG9uIGl0cyBiZWhhbGYgb3Igd2FpdmVkIGl0cyByaWdodHMgaW4gdGhlIGNvZGU/PC9wPg0KICAgPHA+ZSkgQXJlIHlvdSBhd2FyZSBvZiBhbnkgdGhpcmQtcGFydHkgbGljZW5zZXMgb3Igb3RoZXINCiAgICAgIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyByZWxhdGVkIHBhdGVudHMgb3IgdHJhZGVtYXJrcykgdGhhdCBjb3VsZA0KICAgICAgYXBwbHkgdG8geW91ciBjb250cmlidXRpb24/ICBJZiBzbywgd2hhdCBhcmUgdGhleT88L3A+DQogICAgIA0KICANCiAgPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoMz44IENPTU1JVFRFUlM8L2gzPg0KICAgPHA+OC4xIFRoZSBBcGFjaGUgWGFsYW4gcHJvamVjdCBoYXMgYSBzZXQgb2YgY29tbWl0dGVycy4gSWYgdGhlcmUNCiAgICAgIGFyZSBzdWJwcm9qZWN0cywgZWFjaCBzdWJwcm9qZWN0IHdpbGwgYWxzbyBoYXZlIGEgc2V0IG9mIGNvbW1pdHRlcnMuDQogICAgICBDb21taXR0ZXJzIGFyZSBjb250cmlidXRvcnMgd2hvIGhhdmUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIA0KICAgICAgcmVwb3NpdG9yeS4gTmV3IGNvbW1pdHRlcnMgYXJlIGFkZGVkIHdoZW4gYSBjb250cmlidXRvciBpcyBub21pbmF0ZWQgYnkgYSANCiAgICAgIGNvbW1pdHRlciBhbmQgYXBwcm92ZWQgYnkgYXQgbGVhc3QgNTAgcGVyY2VudCBvZiB0aGUgYWN0aXZlIGNvbW1pdHRlcnMgZm9yIA0KICAgICAgdGhhdCBzdWJwcm9qZWN0IHdpdGggbm8gb3Bwb3Npbmcgdm90ZXMuICBJbiBtb3N0IGNhc2VzLCBuZXcgY29tbWl0dGVycyB3aWxsIA0KICAgICAgYWxyZWFkeSBiZSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGJ5IHN1Ym1pdHRpbmcgc3VnZ2VzdGlvbnMNCiAgICAgIGFuZC9vciBmaXhlcyB2aWEgaXNzdWUtcmVjb3JkcyBpbiB0aGUgSXNzdWUgRGF0YWJhc2Ugb3IgbWFpbGluZyBsaXN0cy48L3A+DQogICA8cD44LjIgRm9yIHRoZSBwdXJwb3NlcyBvZiB2b3RpbmcsIGNvbW1pdHRlcnMgd2lsbCBiZSBjbGFzc2VkIGFzICJhY3RpdmUiIG9yDQogICAgICAiaW5hY3RpdmUiLiBPbmx5IGFjdGl2ZSBjb21taXR0ZXJzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHRvdGFscyB1c2VkIHRvDQogICAgICBkZXRlcm1pbmUgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBhIHBhcnRpY3VsYXIgdm90ZS48L3A+DQogICA8cD44LjMgQ29tbWl0dGVycyByZW1haW4gYWN0aXZlIGFzIGxvbmcgYXMgdGhleSBhcmUgY29udHJpYnV0aW5nIGNvZGUgb3INCiAgICAgIHBvc3RpbmcgdG8gdGhlIHByb2plY3Qgb3Igc3VicHJvamVjdCBtYWlsaW5nIGxpc3RzLiAgSWYgYSBjb21taXR0ZXJzIGhhcw0KICAgICAgbmVpdGhlciBjb250cmlidXRlZCBjb2RlIG5vciBwb3N0ZWQgdG8gdGhlIG1haWxpbmcgbGlzdHMgaW4gMw0KICAgICAgbW9udGhzLCBhIG1lbWJlciBvZiB0aGUgUE1DIHdpbGwgZS1tYWlsIHRoZSBjb21taXR0ZXIsDQogICAgICB0aGUgcHJvamVjdCBvciBzdWJwcm9qZWN0IGRldmVsb3BtZW50IGxpc3QsIGFuZCB0aGUgUE1DIG1haWxpbmcgbGlzdA0KICAgICAgbm90aWZ5aW5nIHRoZSBjb21taXR0ZXIgdGhhdCB0aGV5IGFyZSBub3cgaW4gaW5hY3RpdmUgc3RhdHVzLjwvcD4NCiAgIDxwPjguNCBBbiBpbmFjdGl2ZSBzdGF0dXMgd2lsbCBub3QgcHJldmVudCBhIGNvbW1pdHRlciBjb21taXR0aW5nIG5ldyBjb2RlDQogICAgICBjaGFuZ2VzIG9yIHBvc3RpbmcgdG8gdGhlIG1haWxpbmcgbGlzdHMuICBFaXRoZXIgb2YgdGhlc2UgYWN0aXZpdGllcyB3aWxsDQogICAgICBhdXRvbWF0aWNhbGx5IHJlLWFjdGl2YXRlIHRoZSBjb21taXR0ZXIgZm9yIHRoZSBwdXJwb3NlcyBvZiB2b3RpbmcuPC9wPg0KICAgICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+OSBJTkZSQVNUUlVDVFVSRTwvaDM+DQogICA8cD45LjEgVGhlIEFwYWNoZSBYYWxhbiBwcm9qZWN0IHJlbGllcyBvbiB0aGUgQXBhY2hlIFhNTCBwcm9qZWN0DQogICAgICBhbmQgdGhlIEFwYWNoZSBJbmZyYXN0cnVjdHVyZSBwcm9qZWN0IGZvciB0aGUgZm9sbG93aW5nOjwvcD4NCiAgIDxwPmEpIElzc3VlIERhdGFiYXNlIC0tIFRoaXMgaXMgYSBzeXN0ZW0gd2l0aCBpc3N1ZS1yZWNvcmRzLA0KICAgICAgZm9yIHRyYWNraW5nIGJ1Z3MsIGlzc3VlcywgZmVhdHVyZXMgYW5kIHJlcXVlc3RzLjwvcD4NCiAgIDxwPmIpIFJlcG9zaXRvcnkgLS0gVGhlIHhhbGFuLmFwYWNoZS5vcmcgcHJvamVjdCBoYXMgaXRzIHNldA0KICAgICAgb2YgcGFydHMgdGhhdCBtYWtlIHVwIHRoZSBzb2Z0d2FyZSwgYW5kIHRoZXNlIHBhcnRzIGFyZQ0KICAgICAgbWFuYWdlZCBpbiBhIHJlcG9zaXRvcnkuIENvbW1pdHRlcnMgbWFrZSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgY29kZSwNCiAgICAgIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGFzc29jaWF0ZWQgcGFydHMgdGhhdCBhcmUgc3RvcmVkIGluDQogICAgICB0aGUgcmVwb3NpdG9yeS4gQW55IHN1YnByb2plY3Qgd2lsbCBoYXZlIGl0cyBzZXQgb2YgY29tbWl0dGVycw0KICAgICAgZm9yIGl0cyByZXBvc2l0b3J5LjwvcD4NCiAgIDxwPmMpIFdlYnNpdGUgLS0gVGhlIHdlYnNpdGUgPGEgaHJlZj0iaHR0cDovL3hhbGFuLmFwYWNoZS5vcmciPnhhbGFuLmFwYWNoZS5vcmc8L2E+IA0KICAgICAgd2lsbCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBcGFjaGUgWGFsYW4gcHJvamVjdCBhbmQgaXRzIHN1YnByb2plY3RzLA0KICAgICAgaW5jbHVkaW5nIGRvY3VtZW50YXRpb24sIGRvd25sb2FkcyBvZiByZWxlYXNlcywgYW5kIHRoaXMgY2hhcnRlci48L3A+DQogICA8cD5kKSBNYWlsaW5nIExpc3RzIC0tIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgd2lsbCBiZSBjcmVhdGVkDQogICAgICBhdCB0aGUgZGlzY3JldGlvbiBvZiB0aGUgUE1DLiBTdWNoIG1haWxpbmcgbGlzdHMgY291bGQNCiAgICAgIGZvciBleGFtcGxlIGluY2x1ZGU6IGEgUE1DIG1haWxpbmcgbGlzdCwgYSBnZW5lcmFsIG1haWxpbmcgbGlzdCwNCiAgICAgIHByb2plY3Qgb3Igc3VicHJvamVjdCBwdWJsaWMgZGV2ZWxvcGVyIG1haWxpbmcgbGlzdHMsDQogICAgICBwcm9qZWN0IG9yIHN1YnByb2plY3QgcHVibGljIHVzZXIgbWFpbGluZyBsaXN0cy48L3A+DQogICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+MTAgTElDRU5TSU5HPC9oMz4NCiAgIDxwPjEwLjEgQWxsIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIEFwYWNoZSBYYWxhbiBwcm9qZWN0IGFkaGVyZSB0byB0aGUgIkFwYWNoZQ0KICAgICAgU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDIuMCINCiAgICAgICg8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pLg0KICAgICAgQWxsIGZ1cnRoZXIgY29udHJpYnV0aW9ucywgaW5jbHVkaW5nIHBhdGNoZXMsIG11c3QgYmUgbWFkZSB1bmRlciB0aGUgc2FtZSB0ZXJtcy48L3A+DQogICA8cD4xMC4yIFdoZW4gYSBjb21taXR0ZXIgaXMgY29uc2lkZXJpbmcgaW50ZWdyYXRpbmcgYSBjb250cmlidXRpb24NCiAgICAgIGZyb20gYSBjb250cmlidXRvciB3aG8gaGFzIG5vIENMQSBvbiBmaWxlIHdpdGggdGhlIENvcnBvcmF0aW9uLA0KICAgICAgaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjb21taXR0ZXIsIGluIGNvbnN1bHRhdGlvbiB3aXRoDQogICAgICB0aGUgUE1DLCB0byBjb25kdWN0IGR1ZSBkaWxpZ2VuY2Ugb24gdGhlIHBlZGlncmVlIG9mIHRoZQ0KICAgICAgY29udHJpYnV0aW9uIHVuZGVyIGNvbnNpZGVyYXRpb247IHNlZSBzZWN0aW9ucyA3LjMgYW5kIDcuNC4gIDwvcD4NCiAgICAgICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+MTEgVEhFIERFVkVMT1BNRU5UIFBST0NFU1M8L2gzPiANCiAgIDxwPjExLjEgRm9yIGEgY29tbWl0dGVyIHRvIGNvbW1pdCBhIGNoYW5nZSB0byB0aGUgTUFJTiBicmFuY2ggb2YgdGhlDQogICAgICByZXBvc2l0b3J5IGFuIGlzc3VlLXJlY29yZCBtdXN0IGJlIG9wZW5lZCBpbiB0aGUgIklzc3VlIERhdGFiYXNlIg0KICAgICAgdG8gdHJhY2sgdGhlIGNoYW5nZS4gVGhlIHN0YXR1cyBvZiB0aGUgaXNzdWUgbXVzdCBiZSBrZXB0IHVwIHRvIGRhdGUuPC9wPg0KICAgPHA+MTEuMiBObyB2b3RpbmcgaXMgcmVxdWlyZWQgdG8gY29tbWl0IGNoYW5nZXMsIGJ1dCBvbmUgb3RoZXIgYWN0aXZlIA0KICAgICAgY29tbWl0dGVyIG11c3QgcmV2aWV3IHRoZSBjaGFuZ2VzLiAgQmVmb3JlIHRoZSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQsIHRoZSByZXZpZXdlcg0KICAgICAgbXVzdCBhZGQgYSBjb21tZW50IGluIHRoZSBjb3JyZXNwb25kaW5nIGlzc3VlLXJlY29yZCBpbmRpY2F0aW5nIHRoYXQNCiAgICAgIHRoZXkgaGF2ZSByZXZpZXdlZCBhbmQgYXBwcm92ZSB0aGUgY2hhbmdlcy48L3A+DQogICA8cD4xMS4zIElzc3VlLXJlY29yZHMgYW5kIHJldmlld3MgYXJlIG5vdCByZXF1aXJlZCBmb3IgY29tbWl0dGluZyBjaGFuZ2VzIHRvDQogICAgICBvdGhlciBleHBlcmltZW50YWwgYnJhbmNoZXMgKG5vdCB0aGUgTUFJTiBicmFuY2gpIGluIGEgcmVwb3NpdG9yeS48L3A+DQogICANCiAgDQogIDxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+MTIgVk9USU5HPC9oMz4NCiAgIDxwPjEyLjEgVW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQgaW4gdGhpcyBtaXNzaW9uLCB2b3RlcyBjYXN0IG9uIEFwYWNoZSBYYWxhbg0KICAgICAgcHJvcG9zYWxzIG11c3QgYmUgbWFkZSB3aXRoaW4gdHdvIHdlZWtzIG9mIHRoZSBwcm9wb3NhbC4gQSBjaGFsbGVuZ2UgdG8NCiAgICAgIGEgcHJvcG9zYWwgbXVzdCBhbHNvIGJlIG1hZGUgd2l0aGluIHR3byB3ZWVrcyBvZiB0aGUgcHJvcG9zYWwuIExpa2V3aXNlLA0KICAgICAgdm90ZXMgY2FzdCBvbiBjaGFsbGVuZ2VzIG11c3QgYmUgY2FzdCB3aXRoaW4gdHdvIHdlZWtzIG9mIHRoZSBjaGFsbGVuZ2UuPC9wPg0KICAgDQogIA0KICA8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPjEzIFJFTEFUSU9OU0hJUCBUTyBPVEhFUiBBUEFDSEUgUFJPSkVDVFM8L2gzPg0KICAgPHA+MTMuMSBUaGUgQXBhY2hlIFhhbGFuIHByb2plY3Qgc2hvdWxkIHdvcmsgY2xvc2VseSB3aXRoIG90aGVyIEFwYWNoZQ0KICAgICAgcHJvamVjdHMsIHN1Y2ggYXMgWGVyY2VzIGFuZCBYTUwsIHRvIGF2b2lkIHJlZHVuZGFuY3kNCiAgICAgIGFuZCBhY2hpZXZlIGEgY29oZXJlbnQgYXJjaGl0ZWN0dXJlIGFtb25nIEFwYWNoZSBYYWxhbiBhbmQgdGhlc2UNCiAgICAgIHByb2plY3RzLjwvcD4NCiAgICAgICAgIA0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjwvZGl2Pg0KPGRpdiBpZD0iZm9vdGVyIj5Db3B5cmlnaHQgqSAxOTk5LTIwMTIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPGJyIC8+QXBhY2hlLCBYYWxhbiwgYW5kIHRoZSBGZWF0aGVyIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPGRpdiBjbGFzcz0ic21hbGwiPldlYiBQYWdlIGNyZWF0ZWQgb24gLSBGcmkgMDYvMTUvMjAxMjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo=