PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgc3RhbmRhbG9uZT0ibm8iPz4NCjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+QVNGOiBJbnN0YWxsaW5nIFhhbGFuLUMrKzwvdGl0bGU+DQo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InJlc291cmNlcy9hcGFjaGUteGFsYW4uY3NzIiAvPg0KPC9oZWFkPg0KPCEtLQ0KICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUNCiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgICJMaWNlbnNlIik7DQogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqDQogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQogKg0KICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQogLS0+DQo8Ym9keT4NCjxkaXYgaWQ9InRpdGxlIj4NCjx0YWJsZSBjbGFzcz0iSGRyVGl0bGUiPg0KPHRib2R5Pg0KPHRyPg0KPHRoIHJvd3NwYW49IjIiPg0KPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+DQo8aW1nIGFsdD0iVHJhZGVtYXJrIExvZ28iIHNyYz0icmVzb3VyY2VzL1hhbGFuQy1Mb2dvLXRtLnBuZyIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI5MCIgLz4NCjwvYT4NCjwvdGg+DQo8dGggdGV4dC1hbGlnbj0iY2VudGVyIiB3aWR0aD0iNzUlIj4NCjxhIGhyZWY9ImluZGV4Lmh0bWwiPlhhbGFuLUMvQysrIFZlcnNpb24gMS4xMTwvYT4NCjwvdGg+DQo8L3RyPg0KPHRyPg0KPHRkIHZhbGlnbj0ibWlkZGxlIj5JbnN0YWxsaW5nIFhhbGFuLUMrKzwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8dGFibGUgY2xhc3M9IkhkckJ1dHRvbnMiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQ+DQo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBGb3VuZGF0aW9uPC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly94YWxhbi5hcGFjaGUub3JnIj5YYWxhbiBQcm9qZWN0PC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly94ZXJjZXMuYXBhY2hlLm9yZyI+WGVyY2VzIFByb2plY3Q8L2E+DQo8L3RkPg0KPHRkPg0KPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIiPldlYiBDb25zb3J0aXVtPC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvc3RhbmRhcmRzIj5PYXNpcyBPcGVuPC9hPg0KPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPGRpdiBpZD0ibmF2TGVmdCI+DQo8dWw+DQo8bGk+DQo8YSBocmVmPSJyZXNvdXJjZXMuaHRtbCI+UmVzb3VyY2VzPC9hPg0KPGJyIC8+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvYT4NCjwvbGk+PC91bD48aHIgLz48dWw+DQo8bGk+DQo8YSBocmVmPSJpbmRleC5odG1sIj5YYWxhbi1DKysgMS4xMTwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJ3aGF0c25ldy5odG1sIj5XaGF0J3MgTmV3PC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9ImxpY2Vuc2UuaHRtbCI+TGljZW5zZXM8L2E+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPg0KPGxpPg0KPGEgaHJlZj0ib3ZlcnZpZXcuaHRtbCI+T3ZlcnZpZXc8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iY2hhcnRlci5odG1sIj5DaGFydGVyPC9hPg0KPC9saT48L3VsPjxociAvPjx1bD4NCjxsaT4NCjxhIGhyZWY9ImRvd25sb2FkLmh0bWwiPkRvd25sb2FkPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9ImJ1aWxkbGlicy5odG1sIj5CdWlsZCBMaWJyYXJpZXM8L2E+DQo8L2xpPg0KPGxpPkluc3RhbGxhdGlvbjxiciAvPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9ImJ1aWxkZG9jcy5odG1sIj5CdWlsZCBEb2N1bWVudHM8L2E+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPg0KPGxpPg0KPGEgaHJlZj0ic2FtcGxlcy5odG1sIj5TYW1wbGUgQXBwczwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJjb21tYW5kbGluZS5odG1sIj5Db21tYW5kIExpbmU8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0idXNhZ2VwYXR0ZXJucy5odG1sIj5Vc2FnZSBQYXR0ZXJuczwvYT4NCjwvbGk+PC91bD48aHIgLz48dWw+DQo8bGk+DQo8YSBocmVmPSJwcm9ncmFtbWluZy5odG1sIj5Qcm9ncmFtbWluZzwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJleHRlbnNpb25zLmh0bWwiPkV4dGVuc2lvbnM8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iZXh0ZW5zaW9uc2xpYi5odG1sIj5FeHRlbnNpb25zIExpYnJhcnk8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iYXBpRG9jcy9pbmRleC5odG1sIj5BUEkgUmVmZXJlbmNlPC9hPg0KPC9saT48L3VsPjxociAvPjx1bD4NCjxsaT4NCjxhIGhyZWY9ImZhcS5odG1sIj5YYWxhbi1DIEZBUXM8L2E+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPg0KPGxpPg0KPGEgaHJlZj0id2hhdHNuZXcuaHRtbCNidWdzIj5CdWdzPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi1qL3Rlc3QvcnVuLmh0bWwjaG93LXRvLXJ1bi1jIj5UZXN0aW5nPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9InNlY3VyZXdlYi5odG1sIj5XZWIgU2VjdXJpdHk8L2E+DQo8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBpZD0iY29udGVudCI+DQo8aDI+SW5zdGFsbGluZyBYYWxhbi1DKys8L2gyPg0KDQo8dWw+DQogIDxsaT4NCjxhIGhyZWY9IiNTb3VyY2VQa2dzIj5JbnN0YWxsIFNvdXJjZSBQYWNrYWdlczwvYT4NCjwvbGk+DQogIDxsaT4NCjxhIGhyZWY9IiNCaW5hcnlQa2dzIj5JbnN0YWxsIEJpbmFyeSBQYWNrYWdlczwvYT4NCjwvbGk+DQogIDx1bD4NCiAgICA8bGk+DQo8YSBocmVmPSIjSW5zV2luIj5JbnN0YWxsIFdpbmRvd3MgUGFja2FnZXM8L2E+DQo8L2xpPg0KICAgIDxsaT4NCjxhIGhyZWY9IiNJbnNVbngiPkluc3RhbGxVTklYIFBhY2thZ2VzPC9hPg0KPC9saT4NCiAgICA8bGk+DQo8YSBocmVmPSIjSW5zUGtncyI+T3RoZXIgUGFja2FnZXM8L2E+DQo8L2xpPg0KICA8L3VsPg0KICA8bGk+DQo8YSBocmVmPSIjWGFsYW5Eb2NQa2ciPkluc3RhbGwgRG9jdW1lbnRhdGlvbiBQYWNrYWdlczwvYT4NCjwvbGk+DQogIDx1bD4NCiAgICA8bGk+DQo8YSBocmVmPSIiPlhhbGFuLUMgVXNlciBHdWlkZTwvYT4NCjwvbGk+DQogICAgPGxpPg0KPGEgaHJlZj0iIj5YYWxhbi1DIEFQSSBSZWZlcmVuY2U8L2E+DQo8L2xpPg0KICA8L3VsPg0KPC91bD4NCg0KPHA+QSBwcmUtcmVxdWlzaXRlIGZvciB1c2luZyB0aGUgWGFsYW4tQy9DKysgWFNMVCBsaWJyYXJ5IGlzIHRvDQogIGhhdmUgYSB3b3JraW5nIFhlcmNlcy1DL0MrKyBYTUwgUGFyc2VyIGxpYnJhcnkuICBYZXJjZXMtQy9DKysNCiAgbXVzdCBiZSBvZiB2ZXJzaW9uIDMuMCBvciBuZXdlci4gIFhlcmNlcy1DL0MrKyBWZXJzaW9uIDMuMS4xIGlzIHByZWZlcnJlZC4NCjwvcD4NCjxwPlRoZSBYYWxhbi1DL0MrKyBwcm9qZWN0IGlzIHByb3ZpZGluZyBzZXZlcmFsIHR5cGVzIG9mIHBhY2thZ2VzLg0KPC9wPg0KPHA+U291cmNlIHBhY2thZ2VzIGNvbnRhaW4gYWxsIG9mIHRoZSBzb3VyY2UgY29kZSB0byBidWlsZCB0aGUNCiAgWGFsYW4tQy9DKysgbGlicmFyeSwgdGhlIHNhbXBsZSBwcm9ncmFtcywgYW5kIHRoZSBkb2N1bWVudGF0aW9uLg0KICBUaGVyZSBhcmUgVU5JWCBzY3JpcHRzIGFuZCBXaW5kb3dzIHByb2plY3QgZmlsZXMgYnkgd2hpY2ggdGhlDQogIGxpYnJhcnkgYW5kIHNhbXBsZSBwcm9ncmFtcyBjYW4gYmUgYnVpbHQuIA0KICBUaGVyZSBhcmUgYWxzbyBzY3JpcHRzIGZvciBidWlsZGluZyB0aGUgVXNlciBHdWlkZSB3ZWIgcGFnZXMgYW5kDQogIGEgRG94eWdlbiBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyB0aGUgaW50ZXJhY3RpdmUgQVBJIFJlZmVyZW5jZS4NCjwvcD4NCjxwPkJpbmFyeSBwYWNrYWdlcyBjb250YWluIGNvbXBpbGVkIGxpYnJhcmllcyBhbmQgdGhlIFhhbGFuDQogIGNvbW1hbmQgbGluZSBwcm9ncmFtLiAgVGhlIGJpbmFyeSBwYWNrYWdlcyBhbHNvIGNvbnRhaW4gQy9DKysNCiAgaGVhZGVyIGZpbGVzIGZvciBiYXNpYyBzb2Z0d2FyZSBkZXZlbG9wbWVudC4NCjwvcD4NCjxwPkRvY3VtZW50YXRpb24gcGFja2FnZXMgY29udGFpbiBwcmUtYnVpbHQgZGlyZWN0b3JpZXMgb2Ygd2ViDQogIHBhZ2UgaHRtbCBmaWxlcyBmb3IgdGhlIFhhbGFuLUMvQysrIFVzZXIgR3VpZGUgYW5kIHRoZSBpbnRlcmFjdGl2ZQ0KICBBUEkgUmVmZXJlbmNlIGZvciBwcm9ncmFtbWVycy4NCjwvcD4gDQoNCjxhIG5hbWU9IlNvdXJjZVBrZ3MiPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPkluc3RhbGwgU291cmNlIFBhY2thZ2VzPC9oMz4NCjxwPldlIGhhdmUgbm8gcGFja2FnZSBtYW5hZ2VycyBmb3Igc291cmNlIHBhY2thZ2VzLiAgWW91IGp1c3QgZXh0cmFjdA0KICB0aGUgY29udGVudHMgb2YgdGhlIGRpc3RyaWJ1dGlvbiA8Yj4NCjxpPnppcDwvaT4NCjwvYj4gZmlsZSBvciA8Yj4NCjxpPnRhcjwvaT4NCjwvYj4gZmlsZSANCiAgaW50byBhIHNvdXJjZSBkaXJlY3Rvcnkgb2YgeW91ciBjaG9vc2luZy4NCjwvcD4NCjxwPllvdSBhbHNvIG5lZWQgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IEMvQysrIGNvbXBpbGVyIHRvb2xzIGluc3RhbGxlZA0KICBhbmQgYSB3b3JraW5nIGNvcHkgb2YgdGhlIFhlcmNlcy1DL0MrKyBYTUwgcGFyc2VyIGxpYnJhcnkuDQo8L3A+DQo8cD5CdWlsZGluZyB0aGUgDQogIDxhIGhyZWY9ImJ1aWxkZG9jcy5odG1sI2J1aWxkd2ViIj5Vc2VyIEd1aWRlPC9hPiANCiAgZnJvbSBzb3VyY2VzIHJlcXVpcmVzIGEgd29ya2luZyBYYWxhbiBjb21tYW5kIGxpbmUgcHJvZ3JhbS4NCjwvcD4NCjxwPkJ1aWxkaW5nIHRoZSBpbnRlcmFjdGl2ZSANCiAgPGEgaHJlZj0iYnVpbGRkb2NzLmh0bWwjYnVpbGRhcGkiPkFQSSBSZWZlcmVuY2U8L2E+DQogIHJlcXVpcmVzIGEgVU5JWCBvciBMaW51eCBzeXN0ZW0gd2l0aCBhIGN1cnJlbnQgY29weSBvZiANCiAgRG94eWdlbiBhbmQgR3JhcGhWaXogaW5zdGFsbGVkLg0KPC9wPg0KDQo8cD5UaGUgYnVpbGRpbmcgb2YgYSBsaWJyYXJ5IGZyb20gc291cmNlcyByZXN1bHRzIGluIGEgZGlyZWN0b3J5IGZyb20gd2hpY2gNCiAgYSBiaW5hcnkgcGFja2FnZSBjYW4gYmUgbWFkZS4gIA0KICA8YSBocmVmPSJidWlsZGxpYnMuaHRtbCN1bml4YmxkZW52Ij5VTklYIGFuZCBMaW51eCBidWlsZHM8L2E+DQogIGFyZSBhdXRvbWF0aWNhbGx5IHRhcmdldGVkIHRvIGFuIGluc3RhbGwgZGVzdGluYXRpb24uICANCiAgPGEgaHJlZj0iYnVpbGRsaWJzLmh0bWwjd2luYmxkaW5zdCI+SW5zdGFsbGluZyBhIFdpbmRvd3MgYnVpbGQ8L2E+DQogIHJlcXVpcmVzIHRoYXQgdGhlIHNwZWNpZmljIGNvbXBpbGVkIHByb2R1Y3RzIGJlIGNvcGllZCB0byBhIHVzYWJsZQ0KICBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuDQo8L3A+DQoNCg0KPGEgbmFtZT0iQmluYXJ5UGtncyI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+SW5zdGFsbCBCaW5hcnkgUGFja2FnZXM8L2gzPg0KPHA+VGhlIGJpbmFyeSBwYWNrYWdlcyBkaXN0cmlidXRlZCBieSA8Yj4NCjxpPnppcDwvaT4NCjwvYj4gZmlsZXMNCiAgYW5kIDxiPg0KPGk+dGFyPC9pPg0KPC9iPiBmaWxlcyBhcmUgdXN1YWxseSBleHRyYWN0ZWQgdG8gdGhlIGluc3RhbGwgDQogIDxjb2RlPnt0YXJnZXR9PC9jb2RlPiBkaXJlY3RvcnkuDQogIEFmdGVyIGV4dHJhY3RpbmcgdGhlIGNvbnRlbnRzLCB5b3UgdGhlbiBuZWVkIHRvIG1hbnVhbGx5IHBlcmZvcm0NCiAgc29tZSBtaW5vciBzeXN0ZW0gY29uZmlndXJhdGlvbi4NCjwvcD4NCjxwPlBhY2thZ2VzIHRoYXQgYXJlIGhhbmRsZWQgYnkgYSBwYWNrYWdlIG1hbmFnZXIgYXJlIHVzdWFsbHkNCiAgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIGFjY29yZGluZyB0byBwYWNrYWdlIG1haW50YWluZXIuPC9wPg0KDQo8YSBuYW1lPSJJbnNXaW4iPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGg0Pkluc3RhbGwgV2luZG93cyBQYWNrYWdlczwvaDQ+DQo8cD5UaGUgWGFsYW4tQyBhbmQgWGVyY2VzLUMgcGFja2FnZXMgY2FuIGJlIGluc3RhbGxlZCB0byB0aGUgc2FtZQ0KICA8Y29kZT57dGFyZ2V0fTwvY29kZT4NCiAgZGlyZWN0b3J5IHRyZWUuICBUaGUgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzIGhhdmUgZGlmZmVyZW50IG5hbWVzDQogIGZvciB0aGUgc2hhcmVkIDxjb2RlPiouRExMPC9jb2RlPiBmaWxlcy4NCjwvcD4NCjxwPldpbmRvd3Mgb3BlcmF0aW5nIHN5c3RlbXMgcmVxdWlyZSB0aGF0IHRoZSA8Y29kZT57dGFyZ2V0fVxiaW48L2NvZGU+DQogIGRpcmVjdG9yeSBiZSBhZGRlZCB0byB0aGUgUEFUSCBlbnZpcm9ubWVudC4gWW91IGNhbiBtYWtlIHRoZSBwYXRoDQogIGEgcGVybWFuZW50IHBhcnQgb2YgdGhlIFNZU1RFTSBvciB1c2VyIGxvZ2luIERFU0tUT1AgZW52aXJvbm1lbnQuIA0KICBUaGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzaG91bGQgY29udGFpbiBhbiBlbnRyeQ0KICB3aGVyZSB0aGUgPGNvZGU+e3RhcmdldH1cYmluXCouRExMPC9jb2RlPiBmaWxlcyBhcmUgZm91bmQuDQo8L3A+DQo8b2w+DQogIDxsaT5SaWdodC1DbGljayBvbiB0aGUgY29tcHV0ZXIgaWNvbi48L2xpPg0KICA8bGk+U2VsZWN0IFByb3BlcnRpZXMuPC9saT4NCiAgPGxpPlNlbGVjdCBBZHZhbmNlZCBTeXN0ZW0gU2V0dGluZ3MuPC9saT4NCiAgPGxpPlNlbGVjdCBFbnZpcm9ubWVudCBWYXJpYWJsZXMuPC9saT4NCiAgPGxpPkFkZCB0aGUgPGNvZGU+e3RhcmdldH1cYmluPC9jb2RlPiBkaXJlY3RvcnkgdG8gdGhlDQogICAgICBzeXN0ZW0gUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS48L2xpPg0KPC9vbD4NCjxwPlRoZSBYUCwgTlQsIDIwMDAgYW5kIDIwMDMgc3lzdGVtcyBhbGxvdyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgDQogICBzZXQgZXhwbGljaXRseSB0byBpbmRpdmlkdWFsIHVzZXIgYWNjb3VudHMuIA0KICAgVGhlIFZpc3RhLCBXaW4tNywgYW5kIDIwMDggc3lzdGVtcyBoYXZlIHNlY3VyaXR5IGFkbWluaXN0cmF0aW9uIHRoYXQNCiAgIGdldHMgaW4gdGhlIHdheSBvZiB1cGRhdGluZyBpbmRpdmlkdWFsIHVzZXIgZW52aXJvbm1lbnRzLg0KPC9wPg0KPHA+SW4gYSBjb21tYW5kIHdpbmRvdyBvciBhIGNvbW1hbmQgZW52aXJvbm1lbnQsIHlvdSBjYW4gYWRkIHRoZSBmb2xsb3dpbmcNCiAgIHNoZWxsIGNvbW1hbmQgdG8gc2V0IGEgdGVtcG9yYXJ5IHBhdGggdG8gdGhlIFhBTEFOIDxjb2RlPnt0YXJnZXR9XGJpbjwvY29kZT4NCiAgIGRpcmVjdG9yeS4NCjwvcD4NCjxibG9ja3F1b3RlIGNsYXNzPSJzb3VyY2UiPg0KPHByZT5zZXQgUEFUSD0lUEFUSCU7e3RhcmdldH1cYmluPC9wcmU+DQo8L2Jsb2NrcXVvdGU+DQoNCg0KPGEgbmFtZT0iSW5zVW54Ij4mIzgyMDQ7PC9hPg0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoND5JbnN0YWxsIFVOSVggUGFja2FnZXM8L2g0Pg0KICA8cD5UaGUgcGF0aCB0byB0aGUgPGNvZGU+WGFsYW48L2NvZGU+IGNvbW1hbmQgbGluZSBleGVjdXRhYmxlIHByb2dyYW0gc2hvdWxkIGJlIGFkZGVkDQogIHRvIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLjwvcD4NCiAgPHA+VGhlIHBhdGggdG8gdGhlIHNoYXJlZCBvYmplY3RzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgc3lzdGVtDQogIGNvbmZpZ3VyYXRpb24gb3Igb3ZlcnJpZGRlbiBieSBzcGVjaWZpYyBlbnRyeSBpbiBhbiBlbnZpcm9ubWVudA0KICBieSB3aGljaCBzaGFyZWQgb2JqZWN0cyBjYW4gYmUgZm91bmQuPC9wPg0KPHA+SGVyZSBpcyBzb21lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gDQogIDxhIGhyZWY9ImJ1aWxkbGlicy5odG1sI3VuaXhsaWJwYXRoIj5VTklYIFJ1bnRpbWU8L2E+IGNvbmZpZ3VyYXRpb24uDQo8L3A+DQoNCjxhIG5hbWU9Ikluc1BrZ3MiPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGg0Pkluc3RhbGwgT3RoZXIgUGFja2FnZXM8L2g0Pg0KPHA+VGhlc2UgcGFja2FnZXMgYXJlIHVzdWFsbHkgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIGJ5IGEgcGFja2FnZSBtYW5hZ2VyLg0KICBZb3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBwYWNrYWdlIG1haW50YWluZXIuDQo8L3A+DQoNCg0KDQo8YSBuYW1lPSJYYWxhbkRvY1BrZyI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+SW5zdGFsbCBEb2N1bWVudGF0aW9uIFBhY2thZ2VzPC9oMz4NCjxwPlRoZSBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGFyZSBkaXN0cmlidXRlZCBhcyA8Yj4NCjxpPnRhcjwvaT4NCjwvYj4gZmlsZXMNCiAgYW5kIDxiPg0KPGk+emlwPC9pPg0KPC9iPiBmaWxlcy4gIFlvdSBqdXN0IGV4dHJhY3QgdGhlIGZpbGVzIGludG8gYSBkaXJlY3RvcnkNCiAgdGhhdCBpcyByZWFjaGFibGUgYnkgeW91ciBmYXZvcml0ZSB3ZWIgYnJvd3Nlci4gIFRoZSBoZWFkIG9mIHRoZQ0KICBkb2N1bWVudGF0aW9uIHRyZWUgc3RhcnRzIGF0IHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj4NCiAgPGNvZGU+e2RvY3N9L3hhbGFuLWM8L2NvZGU+DQo8L2E+IGRpcmVjdG9yeS4NCjwvcD4NCjxwPg0KPGI+VE8gRE86PC9iPg0KPC9wPg0KPHA+UmV3b3JrIHRoZSB4YWxhbi9jL3RydW5rL3hkb2NzL3NvdXJjZXMvIHNjcmlwdHMgc28gdGhhdCB0aGUNCiAgIHNvdXJjZSBkb2N1bWVudGF0aW9uIGJ1aWxkcyBhcmUNCiAgIHRhcmdldGVkIHRvIHRoZSB4YWxhbi9jL3RydW5rL2J1aWxkL2RvY3MveGFsYW4tYy8gZGlyZWN0b3J5IHBhdGguDQo8L3A+DQo8cD5BZGQgYSBkb2N1bWVudGF0aW9uIHNjcmlwdCB0aGF0IHBlcmZvcm1zIGEgcG9zdC1wcm9jZXNzaW5nDQogICBvcGVyYXRpb24gd2hlbiBidWlsZGluZyB0aGUgQVBJIFJlZmVyZW5jZSBmcm9tIERveHlnZW4gdG8gcmVsb2NhdGUNCiAgIHRoZSBjb25zdHJ1Y3RlZCBwcm9kdWN0cyB0byB0aGUgeGFsYW4vYy90cnVuay9idWlsZC9kb2NzL3hhbGFuLWMvYXBpRG9jcy8NCiAgIGRpcmVjdG9yeSBwYXRoLg0KPC9wPg0KPHA+RGV0YWlscyBhcmUgZm91bmQgaW4gb3VyIDxhIGhyZWY9ImJ1aWxkZG9jcy5odG1sIj5CdWlsZCBEb2N1bWVudHM8L2E+IHBhZ2VzLg0KPC9wPg0KDQo8YSBuYW1lPSJEb2NXZWJQa2ciPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGg0Pkluc3RhbGwgWGFsYW4tQyBVc2VyIEd1aWRlPC9oND4NCjxwPkV4dHJhY3QgdGhlIGRpc3RyaWJ1dGVkIDxiPg0KPGk+dGFyPC9pPg0KPC9iPiBmaWxlIG9yIDxiPg0KPGk+emlwPC9pPg0KPC9iPg0KICBmaWxlIHRvIHRoZSA8Y29kZT57ZG9jc308L2NvZGU+IGRpcmVjdG9yeS4gIFRoZSBwYWNrYWdlIHBvcHVsYXRlcw0KICB0aGUgPGNvZGU+e2RvY3N9L3hhbGFuLWMvKjwvY29kZT4gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIFhhbGFuLUMNCiAgVXNlciBHdWlkZSB3ZWIgcGFnZXMuDQo8L3A+DQoNCg0KPGEgbmFtZT0iRG9jQXBpUGtnIj4mIzgyMDQ7PC9hPg0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoND5JbnN0YWxsIFhhbGFuLUMgQVBJIFJlZmVyZW5jZTwvaDQ+DQo8cD5FeHRyYWN0IHRoZSBkaXN0cmlidXRlZCA8Yj4NCjxpPnRhcjwvaT4NCjwvYj4gZmlsZSBvciA8Yj4NCjxpPnppcDwvaT4NCjwvYj4NCiAgZmlsZSB0byB0aGUgPGNvZGU+e2RvY3N9PC9jb2RlPiBkaXJlY3RvcnkuICBUaGUgcGFja2FnZSBwb3B1bGF0ZXMNCiAgdGhlIDxjb2RlPntkb2NzfS94YWxhbi1jL2FwaURvY3MvKjwvY29kZT4gZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlDQogIFhhbGFuLUMgQVBJIFJlZmVyZW5jZSBmb3IgcHJvZ3JhbW1lcnMuDQo8L3A+DQoNCg0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjwvZGl2Pg0KPGRpdiBpZD0iZm9vdGVyIj5Db3B5cmlnaHQgqSAxOTk5LTIwMTIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPGJyIC8+QXBhY2hlLCBYYWxhbiwgYW5kIHRoZSBGZWF0aGVyIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPGRpdiBjbGFzcz0ic21hbGwiPldlYiBQYWdlIGNyZWF0ZWQgb24gLSBGcmkgMDYvMTUvMjAxMjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo=