PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5HbG9zc2FyeSAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIiBjbGFzcz0ibm8tc2lkZWJhciI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjQ8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi8iPlZlcnNpb24gMi40PC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5HbG9zc2FyeTwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9kZS9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iZGUiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRGV1dHNjaCI+Jm5ic3A7ZGUmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lbi9nbG9zc2FyeS5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lcy9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2tvL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICA8cD5UaGlzIGdsb3NzYXJ5IGRlZmluZXMgc29tZSBvZiB0aGUgY29tbW9uIHRlcm1pbm9sb2d5IHJlbGF0ZWQgdG8gQXBhY2hlIGluCiAgICAgIHBhcnRpY3VsYXIsIGFuZCB3ZWIgc2VydmluZyBpbiBnZW5lcmFsLiBNb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggY29uY2VwdAogICAgICBpcyBwcm92aWRlZCBpbiB0aGUgbGlua3MuPC9wPgogIDwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImRlZmluaXRpb25zIiBpZD0iZGVmaW5pdGlvbnMiPkRlZmluaXRpb25zPC9hPjwvaDI+CgogIDxkbD4KICAgIDxkdD48YSBuYW1lPSJhY2Nlc3Njb250cm9sIiBpZD0iYWNjZXNzY29udHJvbCI+QWNjZXNzIENvbnRyb2w8L2E+PC9kdD4KICAgIDxkZD5UaGUgcmVzdHJpY3Rpb24gb2YgYWNjZXNzIHRvIG5ldHdvcmsgcmVhbG1zLiBJbiBhbiBBcGFjaGUgY29udGV4dAogICAgICB1c3VhbGx5IHRoZSByZXN0cmljdGlvbiBvZiBhY2Nlc3MgdG8gY2VydGFpbiA8ZW0+VVJMczwvZW0+LjxiciAvPiBTZWU6ICA8YSBocmVmPSJob3d0by9hdXRoLmh0bWwiPkF1dGhlbnRpY2F0aW9uLCBBdXRob3JpemF0aW9uLCBhbmQgQWNjZXNzCiAgICAgIENvbnRyb2w8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJhbGdvcml0aG0iIGlkPSJhbGdvcml0aG0iPkFsZ29yaXRobTwvYT48L2R0PgogICAgPGRkPkFuIHVuYW1iaWd1b3VzIGZvcm11bGEgb3Igc2V0IG9mIHJ1bGVzIGZvciBzb2x2aW5nIGEgcHJvYmxlbSBpbiBhIGZpbml0ZQogICAgICBudW1iZXIgb2Ygc3RlcHMuIEFsZ29yaXRobXMgZm9yIGVuY3J5cHRpb24gYXJlIHVzdWFsbHkgY2FsbGVkCiAgICAgIDxkZm4+Q2lwaGVyczwvZGZuPi4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImFwYWNoZWV4dGVuc2lvbnRvb2wiIGlkPSJhcGFjaGVleHRlbnNpb250b29sIj5BUGFjaGUKICAgICAgICBlWHRlbnNpb24gVG9vbDwvYT4gPGEgbmFtZT0iYXB4cyIgaWQ9ImFweHMiPihhcHhzKTwvYT48L2R0PgogICAgPGRkPkEgcGVybCBzY3JpcHQgdGhhdCBhaWRzIGluIGNvbXBpbGluZyA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjbW9kdWxlIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5tb2R1bGU8L2E+IHNvdXJjZXMgaW50byBEeW5hbWljIFNoYXJlZCBPYmplY3RzCiAgICAgICg8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjZHNvIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5EU088L2E+cykgYW5kIGhlbHBzIGluc3RhbGwgdGhlbSBpbiB0aGUKICAgICAgQXBhY2hlIFdlYiBzZXJ2ZXIuPGJyIC8+CiAgICAgIFNlZTogTWFudWFsIFBhZ2U6IDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2FweHMuaHRtbCI+YXB4czwvYT48L2NvZGU+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJhcGFjaGVwb3J0YWJsZXJ1bnRpbWUiIGlkPSJhcGFjaGVwb3J0YWJsZXJ1bnRpbWUiPkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lPC9hPiA8YSBuYW1lPSJhcHIiIGlkPSJhcHIiPihBUFIpPC9hPjwvZHQ+CiAgICA8ZGQ+QSBzZXQgb2YgbGlicmFyaWVzIHByb3ZpZGluZyBtYW55IG9mIHRoZSBiYXNpYyBpbnRlcmZhY2VzCiAgICAgIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBBUFIgaXMgZGV2ZWxvcGVkCiAgICAgIHBhcmFsbGVsIHRvIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgYXMgYW4gaW5kZXBlbmRlbnQgcHJvamVjdC48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJodHRwOi8vYXByLmFwYWNoZS5vcmcvIj5BcGFjaGUgUG9ydGFibGUgUnVudGltZQogICAgICBQcm9qZWN0PC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iYXV0aGVudGljYXRpb24iIGlkPSJhdXRoZW50aWNhdGlvbiI+QXV0aGVudGljYXRpb248L2E+PC9kdD4KICAgIDxkZD5UaGUgcG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgYSBuZXR3b3JrIGVudGl0eSBzdWNoIGFzIGEgc2VydmVyLCBhCiAgICAgIGNsaWVudCwgb3IgYSB1c2VyLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9Imhvd3RvL2F1dGguaHRtbCI+QXV0aGVudGljYXRpb24sIEF1dGhvcml6YXRpb24sIGFuZCBBY2Nlc3MKICAgICAgQ29udHJvbDwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImNlcnRpZmljYXRlIiBpZD0iY2VydGlmaWNhdGUiPkNlcnRpZmljYXRlPC9hPjwvZHQ+CiAgICA8ZGQ+QSBkYXRhIHJlY29yZCB1c2VkIGZvciBhdXRoZW50aWNhdGluZyBuZXR3b3JrIGVudGl0aWVzIHN1Y2gKICAgICAgYXMgYSBzZXJ2ZXIgb3IgYSBjbGllbnQuIEEgY2VydGlmaWNhdGUgY29udGFpbnMgWC41MDkgaW5mb3JtYXRpb24gcGllY2VzCiAgICAgIGFib3V0IGl0cyBvd25lciAoY2FsbGVkIHRoZSBzdWJqZWN0KSBhbmQgdGhlIHNpZ25pbmcgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2NlcnRpZmljYXRpb25hdXRob3JpdHkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNlcnRpZmljYXRpb24gQXV0aG9yaXR5PC9hPiAoY2FsbGVkCiAgICAgIHRoZSBpc3N1ZXIpLCBwbHVzIHRoZSBvd25lcidzIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNwdWJsaWNrZXkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPnB1YmxpYwogICAgICBrZXk8L2E+IGFuZCB0aGUKICAgICAgc2lnbmF0dXJlIG1hZGUgYnkgdGhlIENBLiBOZXR3b3JrIGVudGl0aWVzIHZlcmlmeSB0aGVzZSBzaWduYXR1cmVzCiAgICAgIHVzaW5nIENBIGNlcnRpZmljYXRlcy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjZXJ0aWZpY2F0c2lnbmluZ3JlcXVlc3QiIGlkPSJjZXJ0aWZpY2F0c2lnbmluZ3JlcXVlc3QiPkNlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdDwvYT4KICAgICAgPGEgbmFtZT0iY3NyIiBpZD0iY3NyIj4oQ1NSKTwvYT48L2R0PgogICAgPGRkPkFuIHVuc2lnbmVkIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjZXJ0aWZpY2F0ZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+Y2VydGlmaWNhdGU8L2E+IGZvcgogICAgICBzdWJtaXNzaW9uIHRvIGEgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2NlcnRpZmljYXRpb25hdXRob3JpdHkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNlcnRpZmljYXRpb24KICAgICAgQXV0aG9yaXR5PC9hPiwgd2hpY2ggc2lnbnMgaXQgd2l0aCB0aGUgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3ByaXZhdGVrZXkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPlByaXZhdGUgS2V5PC9hPiBvZiB0aGVpciBDQQogICAgICA8ZW0+Q2VydGlmaWNhdGU8L2VtPi4gT25jZSB0aGUgQ1NSIGlzIHNpZ25lZCwgaXQgYmVjb21lcyBhIHJlYWwKICAgICAgY2VydGlmaWNhdGUuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY2VydGlmaWNhdGlvbmF1dGhvcml0eSIgaWQ9ImNlcnRpZmljYXRpb25hdXRob3JpdHkiPkNlcnRpZmljYXRpb24gQXV0aG9yaXR5PC9hPgogICAgICA8YSBuYW1lPSJjYSIgaWQ9ImNhIj4oQ0EpPC9hPjwvZHQ+CiAgICA8ZGQ+QSB0cnVzdGVkIHRoaXJkIHBhcnR5IHdob3NlIHB1cnBvc2UgaXMgdG8gc2lnbiBjZXJ0aWZpY2F0ZXMgZm9yIG5ldHdvcmsKICAgICAgZW50aXRpZXMgaXQgaGFzIGF1dGhlbnRpY2F0ZWQgdXNpbmcgc2VjdXJlIG1lYW5zLiBPdGhlciBuZXR3b3JrIGVudGl0aWVzCiAgICAgIGNhbiBjaGVjayB0aGUgc2lnbmF0dXJlIHRvIHZlcmlmeSB0aGF0IGEgQ0EgaGFzIGF1dGhlbnRpY2F0ZWQgdGhlIGJlYXJlcgogICAgICBvZiBhIGNlcnRpZmljYXRlLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImNpcGhlciIgaWQ9ImNpcGhlciI+Q2lwaGVyPC9hPjwvZHQ+CiAgICA8ZGQ+QW4gYWxnb3JpdGhtIG9yIHN5c3RlbSBmb3IgZGF0YSBlbmNyeXB0aW9uLiBFeGFtcGxlcyBhcmUgREVTLCBJREVBLCBSQzQsCiAgICAgIGV0Yy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjaXBoZXJ0ZXh0IiBpZD0iY2lwaGVydGV4dCI+Q2lwaGVydGV4dDwvYT48L2R0PgogICAgPGRkPlRoZSByZXN1bHQgYWZ0ZXIgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3BsYWludGV4dCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+UGxhaW50ZXh0PC9hPiBpcwogICAgICBwYXNzZWQgdGhyb3VnaCBhIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjaXBoZXIiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNpcGhlcjwvYT4uPGJyIC8+IFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY29tbW9uZ2F0ZXdheWludGVyZmFjZSIgaWQ9ImNvbW1vbmdhdGV3YXlpbnRlcmZhY2UiPkNvbW1vbgogICAgICAgIEdhdGV3YXkgSW50ZXJmYWNlPC9hPiA8YSBuYW1lPSJjZ2kiIGlkPSJjZ2kiPihDR0kpPC9hPjwvZHQ+CiAgICA8ZGQ+QSBzdGFuZGFyZCBkZWZpbml0aW9uIGZvciBhbiBpbnRlcmZhY2UgYmV0d2VlbiBhIHdlYiBzZXJ2ZXIgYW5kIGFuCiAgICAgIGV4dGVybmFsIHByb2dyYW0gdGhhdCBhbGxvd3MgdGhlIGV4dGVybmFsIHByb2dyYW0gdG8gc2VydmljZSByZXF1ZXN0cy4KICAgICAgVGhlcmUgaXMgYW4gPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzg3NSI+SW5mb3JtYXRpb25hbAogICAgICBSRkM8L2E+IHdoaWNoIGNvdmVycyB0aGUgc3BlY2lmaWNzLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9Imhvd3RvL2NnaS5odG1sIj5EeW5hbWljIENvbnRlbnQgd2l0aCBDR0k8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjb25maWd1cmF0aW9uZGlyZWN0aXZlIiBpZD0iY29uZmlndXJhdGlvbmRpcmVjdGl2ZSI+Q29uZmlndXJhdGlvbiBEaXJlY3RpdmU8L2E+PC9kdD4KICAgIDxkZD5TZWU6IDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNkaXJlY3RpdmUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkRpcmVjdGl2ZTwvYT48L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjb25maWd1cmF0aW9uZmlsZSIgaWQ9ImNvbmZpZ3VyYXRpb25maWxlIj5Db25maWd1cmF0aW9uCiAgICAgICAgRmlsZTwvYT48L2R0PgogICAgPGRkPkEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2RpcmVjdGl2ZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+RGlyZWN0aXZlczwvYT4KICAgICAgdGhhdCBjb250cm9sIHRoZSBjb25maWd1cmF0aW9uIG9mIEFwYWNoZS48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJjb25maWd1cmluZy5odG1sIj5Db25maWd1cmF0aW9uIEZpbGVzPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY29ubmVjdCIgaWQ9ImNvbm5lY3QiPkNPTk5FQ1Q8L2E+PC9kdD4KICAgIDxkZD5BbiBIVFRQIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNtZXRob2QiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPm1ldGhvZDwvYT4gZm9yIHByb3h5aW5nIHJhdyBkYXRhCiAgICAgIGNoYW5uZWxzIG92ZXIgSFRUUC4gSXQgY2FuIGJlIHVzZWQgdG8gZW5jYXBzdWxhdGUgb3RoZXIgcHJvdG9jb2xzLCBzdWNoIGFzCiAgICAgIHRoZSBTU0wgcHJvdG9jb2wuCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjb250ZXh0IiBpZD0iY29udGV4dCI+Q29udGV4dDwvYT48L2R0PgogICAgPGRkPkFuIGFyZWEgaW4gdGhlIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjb25maWd1cmF0aW9uZmlsZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+Y29uZmlndXJhdGlvbgogICAgICBmaWxlczwvYT4gd2hlcmUgY2VydGFpbiB0eXBlcyBvZiA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjZGlyZWN0aXZlIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5kaXJlY3RpdmVzPC9hPiBhcmUgYWxsb3dlZC48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJtb2QvZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5UZXJtcyBVc2VkIHRvIERlc2NyaWJlCiAgICAgIEFwYWNoZSBEaXJlY3RpdmVzPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iZGlnaXRhbHNpZ25hdHVyZSIgaWQ9ImRpZ2l0YWxzaWduYXR1cmUiPkRpZ2l0YWwKICAgICAgICBTaWduYXR1cmU8L2E+PC9kdD4KICAgIDxkZD5BbiBlbmNyeXB0ZWQgdGV4dCBibG9jayB0aGF0IHZhbGlkYXRlcyBhIGNlcnRpZmljYXRlIG9yIG90aGVyIGZpbGUuIEEKICAgICAgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2NlcnRpZmljYXRpb25hdXRob3JpdHkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNlcnRpZmljYXRpb24gQXV0aG9yaXR5PC9hPgogICAgICBjcmVhdGVzIGEgc2lnbmF0dXJlIGJ5IGdlbmVyYXRpbmcgYSBoYXNoIG9mIHRoZSA8ZW0+UHVibGljIEtleTwvZW0+CiAgICAgIGVtYmVkZGVkIGluIGEgPGVtPkNlcnRpZmljYXRlPC9lbT4sIHRoZW4gZW5jcnlwdGluZyB0aGUgaGFzaCB3aXRoIGl0cyBvd24KICAgICAgPGVtPlByaXZhdGUgS2V5PC9lbT4uIE9ubHkgdGhlIENBJ3MgcHVibGljIGtleSBjYW4gZGVjcnlwdCB0aGUgc2lnbmF0dXJlLAogICAgICB2ZXJpZnlpbmcgdGhhdCB0aGUgQ0EgaGFzIGF1dGhlbnRpY2F0ZWQgdGhlIG5ldHdvcmsgZW50aXR5IHRoYXQgb3ducyB0aGUKICAgICAgPGVtPkNlcnRpZmljYXRlPC9lbT4uPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iZGlyZWN0aXZlIiBpZD0iZGlyZWN0aXZlIj5EaXJlY3RpdmU8L2E+PC9kdD4KICAgIDxkZD5BIGNvbmZpZ3VyYXRpb24gY29tbWFuZCB0aGF0IGNvbnRyb2xzIG9uZSBvciBtb3JlIGFzcGVjdHMgb2YgQXBhY2hlJ3MKICAgICAgYmVoYXZpb3IuICBEaXJlY3RpdmVzIGFyZSBwbGFjZWQgaW4gdGhlIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjb25maWd1cmF0aW9uZmlsZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+Q29uZmlndXJhdGlvbiBGaWxlPC9hPjxiciAvPgogICAgU2VlOiA8YSBocmVmPSJtb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmUgSW5kZXg8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJkeW5hbWljc2hhcmVkb2JqZWN0IiBpZD0iZHluYW1pY3NoYXJlZG9iamVjdCI+RHluYW1pYwogICAgICAgIFNoYXJlZCBPYmplY3Q8L2E+IDxhIG5hbWU9ImRzbyIgaWQ9ImRzbyI+KERTTyk8L2E+PC9kdD4KICAgIDxkZD48YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjbW9kdWxlIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5Nb2R1bGVzPC9hPiBjb21waWxlZCBzZXBhcmF0ZWx5IGZyb20gdGhlCiAgICAgIEFwYWNoZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IGJpbmFyeSB0aGF0IGNhbiBiZSBsb2FkZWQgb24tZGVtYW5kLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9ImRzby5odG1sIj5EeW5hbWljIFNoYXJlZCBPYmplY3QgU3VwcG9ydDwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImVudmlyb25tZW50dmFyaWFibGUiIGlkPSJlbnZpcm9ubWVudHZhcmlhYmxlIj5FbnZpcm9ubWVudAogICAgICAgIFZhcmlhYmxlPC9hPiA8YSBuYW1lPSJlbnYtdmFyaWFibGUiIGlkPSJlbnYtdmFyaWFibGUiPihlbnYtdmFyaWFibGUpPC9hPjwvZHQ+CiAgICA8ZGQ+TmFtZWQgdmFyaWFibGVzIG1hbmFnZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gc2hlbGwgYW5kIHVzZWQgdG8gc3RvcmUKICAgICAgaW5mb3JtYXRpb24gYW5kIGNvbW11bmljYXRlIGJldHdlZW4gcHJvZ3JhbXMuICBBcGFjaGUgYWxzbyBjb250YWlucwogICAgICBpbnRlcm5hbCB2YXJpYWJsZXMgdGhhdCBhcmUgcmVmZXJyZWQgdG8gYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBidXQgYXJlCiAgICAgIHN0b3JlZCBpbiBpbnRlcm5hbCBBcGFjaGUgc3RydWN0dXJlcywgcmF0aGVyIHRoYW4gaW4gdGhlIHNoZWxsCiAgICAgIGVudmlyb25tZW50LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9ImVudi5odG1sIj5FbnZpcm9ubWVudCBWYXJpYWJsZXMgaW4gQXBhY2hlPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iZXhwb3J0LWNyaXBwbGVkIiBpZD0iZXhwb3J0LWNyaXBwbGVkIj5FeHBvcnQtQ3JpcHBsZWQ8L2E+PC9kdD4KICAgIDxkZD5EaW1pbmlzaGVkIGluIGNyeXB0b2dyYXBoaWMgc3RyZW5ndGggKGFuZCBzZWN1cml0eSkgaW4gb3JkZXIgdG8gY29tcGx5CiAgICAgIHdpdGggdGhlIFVuaXRlZCBTdGF0ZXMnIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucyAoRUFSKS4KICAgICAgRXhwb3J0LWNyaXBwbGVkIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgaXMgbGltaXRlZCB0byBhIHNtYWxsIGtleSBzaXplLAogICAgICByZXN1bHRpbmcgaW4gPGVtPkNpcGhlcnRleHQ8L2VtPiB3aGljaCB1c3VhbGx5IGNhbiBiZSBkZWNyeXB0ZWQgYnkgYnJ1dGUKICAgICAgZm9yY2UuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iZmlsdGVyIiBpZD0iZmlsdGVyIj5GaWx0ZXI8L2E+PC9kdD4KICAgIDxkZD5BIHByb2Nlc3MgdGhhdCBpcyBhcHBsaWVkIHRvIGRhdGEgdGhhdCBpcyBzZW50IG9yIHJlY2VpdmVkIGJ5IHRoZQogICAgICBzZXJ2ZXIuICBJbnB1dCBmaWx0ZXJzIHByb2Nlc3MgZGF0YSBzZW50IGJ5IHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciwKICAgICAgd2hpbGUgb3V0cHV0IGZpbHRlcnMgcHJvY2VzcyBkb2N1bWVudHMgb24gdGhlIHNlcnZlciBiZWZvcmUgdGhleSBhcmUgc2VudAogICAgICB0byB0aGUgY2xpZW50LiAgRm9yIGV4YW1wbGUsIHRoZSA8Y29kZT5JTkNMVURFUzwvY29kZT4gb3V0cHV0IGZpbHRlcgogICAgICBwcm9jZXNzZXMgZG9jdW1lbnRzIGZvciA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjc3NpIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5TZXJ2ZXIgU2lkZQogICAgICBJbmNsdWRlczwvYT4uPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0iZmlsdGVyLmh0bWwiPkZpbHRlcnM8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJmdWxseS1xdWFsaWZpZWRkb21haW4tbmFtZSIgaWQ9ImZ1bGx5LXF1YWxpZmllZGRvbWFpbi1uYW1lIj5GdWxseS1RdWFsaWZpZWQgRG9tYWluLU5hbWU8L2E+CiAgICAgIDxhIG5hbWU9ImZxZG4iIGlkPSJmcWRuIj4oRlFETik8L2E+PC9kdD4KICAgIDxkZD5UaGUgdW5pcXVlIG5hbWUgb2YgYSBuZXR3b3JrIGVudGl0eSwgY29uc2lzdGluZyBvZiBhIGhvc3RuYW1lIGFuZCBhCiAgICAgIGRvbWFpbiBuYW1lIHRoYXQgY2FuIHJlc29sdmUgdG8gYW4gSVAgYWRkcmVzcy4gRm9yIGV4YW1wbGUsCiAgICAgIDxjb2RlPnd3dzwvY29kZT4gaXMgYSBob3N0bmFtZSwgPGNvZGU+ZXhhbXBsZS5jb208L2NvZGU+IGlzIGEgZG9tYWluIG5hbWUsCiAgICAgIGFuZCA8Y29kZT53d3cuZXhhbXBsZS5jb208L2NvZGU+IGlzIGEgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lLgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iaGFuZGxlciIgaWQ9ImhhbmRsZXIiPkhhbmRsZXI8L2E+PC9kdD4KICAgIDxkZD5BbiBpbnRlcm5hbCBBcGFjaGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgd2hlbiBhCiAgICAgIGZpbGUgaXMgY2FsbGVkLiBHZW5lcmFsbHksIGZpbGVzIGhhdmUgaW1wbGljaXQgaGFuZGxlcnMsIGJhc2VkIG9uIHRoZSBmaWxlCiAgICAgIHR5cGUuIE5vcm1hbGx5LCBhbGwgZmlsZXMgYXJlIHNpbXBseSBzZXJ2ZWQgYnkgdGhlIHNlcnZlciwgYnV0IGNlcnRhaW4KICAgICAgZmlsZSB0eXBlcyBhcmUgImhhbmRsZWQiIHNlcGFyYXRlbHkuICBGb3IgZXhhbXBsZSwgdGhlCiAgICAgIDxjb2RlPmNnaS1zY3JpcHQ8L2NvZGU+IGhhbmRsZXIgZGVzaWduYXRlcyBmaWxlcyB0byBiZSBwcm9jZXNzZWQgYXMKICAgICAgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2NnaSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+Q0dJczwvYT4uPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0iaGFuZGxlci5odG1sIj5BcGFjaGUncyBIYW5kbGVyIFVzZTwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Imhhc2giIGlkPSJoYXNoIj5IYXNoPC9hPjwvZHQ+CiAgICA8ZGQ+QSBtYXRoZW1hdGljYWwgb25lLXdheSwgaXJyZXZlcnNpYmxlIGFsZ29yaXRobSBnZW5lcmF0aW5nIGEgc3RyaW5nIHdpdGgKICAgICAgZml4ZWQtbGVuZ3RoIGZyb20gYW5vdGhlciBzdHJpbmcgb2YgYW55IGxlbmd0aC4gRGlmZmVyZW50IGlucHV0IHN0cmluZ3MKICAgICAgd2lsbCB1c3VhbGx5IHByb2R1Y2UgZGlmZmVyZW50IGhhc2hlcyAoZGVwZW5kaW5nIG9uIHRoZSBoYXNoIGZ1bmN0aW9uKS4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImhlYWRlciIgaWQ9ImhlYWRlciI+SGVhZGVyPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHBhcnQgb2YgdGhlIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNodHRwIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5IVFRQPC9hPiByZXF1ZXN0IGFuZAogICAgICByZXNwb25zZSB0aGF0IGlzIHNlbnQgYmVmb3JlIHRoZSBhY3R1YWwgY29udGVudCwgYW5kIHRoYXQgY29udGFpbnMKICAgICAgbWV0YS1pbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBjb250ZW50LgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iaHRhY2Nlc3MiIGlkPSJodGFjY2VzcyI+Lmh0YWNjZXNzPC9hPjwvZHQ+CiAgICA8ZGQ+QSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjY29uZmlndXJhdGlvbmZpbGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPmNvbmZpZ3VyYXRpb24gZmlsZTwvYT4gdGhhdAogICAgICBpcyBwbGFjZWQgaW5zaWRlIHRoZSB3ZWIgdHJlZSBhbmQgYXBwbGllcyBjb25maWd1cmF0aW9uIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNkaXJlY3RpdmUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPmRpcmVjdGl2ZXM8L2E+IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXQgaXMKICAgICAgcGxhY2VkIGFuZCBhbGwgc3ViLWRpcmVjdG9yaWVzLiAgRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBmaWxlIGNhbiBob2xkCiAgICAgIGFsbW9zdCBhbnkgdHlwZSBvZiBkaXJlY3RpdmUsIG5vdCBqdXN0IGFjY2Vzcy1jb250cm9sIGRpcmVjdGl2ZXMuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0iY29uZmlndXJpbmcuaHRtbCI+Q29uZmlndXJhdGlvbiBGaWxlczwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Imh0dHBkLmNvbmYiIGlkPSJodHRwZC5jb25mIj5odHRwZC5jb25mPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIG1haW4gQXBhY2hlIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjb25maWd1cmF0aW9uZmlsZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+Y29uZmlndXJhdGlvbgogICAgICBmaWxlPC9hPi4gIFRoZSBkZWZhdWx0IGxvY2F0aW9uIGlzCiAgICAgIDxjb2RlPi91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmY8L2NvZGU+LCBidXQgaXQgbWF5IGJlIG1vdmVkIHVzaW5nCiAgICAgIHJ1bi10aW1lIG9yIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9ImNvbmZpZ3VyaW5nLmh0bWwiPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJoeXBlcnRleHR0cmFuc2ZlcnByb3RvY29sIiBpZD0iaHlwZXJ0ZXh0dHJhbnNmZXJwcm90b2NvbCI+SHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sPC9hPgogICAgICA8YSBuYW1lPSJodHRwIiBpZD0iaGh0cCI+KEhUVFApPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHN0YW5kYXJkIHRyYW5zbWlzc2lvbiBwcm90b2NvbCB1c2VkIG9uIHRoZSBXb3JsZCBXaWRlIFdlYi4gIEFwYWNoZQogICAgICBpbXBsZW1lbnRzIHZlcnNpb24gMS4xIG9mIHRoZSBwcm90b2NvbCwgcmVmZXJyZWQgdG8gYXMgSFRUUC8xLjEgYW5kCiAgICAgIGRlZmluZWQgYnkgPGEgaHJlZj0iaHR0cDovL2lldGYub3JnL3JmYy9yZmMyNjE2LnR4dCI+UkZDIDI2MTY8L2E+LgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iaHR0cHMiIGlkPSJodHRwcyI+SFRUUFM8L2E+PC9kdD4KICAgIDxkZD5UaGUgSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sIChTZWN1cmUpLCB0aGUgc3RhbmRhcmQgZW5jcnlwdGVkCiAgICAgIGNvbW11bmljYXRpb24gbWVjaGFuaXNtIG9uIHRoZSBXb3JsZCBXaWRlIFdlYi4gVGhpcyBpcyBhY3R1YWxseSBqdXN0IEhUVFAKICAgICAgb3ZlciA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjc3NsIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5TU0w8L2E+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Im1ldGhvZCIgaWQ9Im1ldGhvZCI+TWV0aG9kPC9hPjwvZHQ+CiAgICA8ZGQ+SW4gdGhlIGNvbnRleHQgb2YgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2h0dHAiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkhUVFA8L2E+LCBhbiBhY3Rpb24gdG8KICAgICAgcGVyZm9ybSBvbiBhIHJlc291cmNlLCBzcGVjaWZpZWQgb24gdGhlIHJlcXVlc3QgbGluZSBieSB0aGUgY2xpZW50LiAgU29tZQogICAgICBvZiB0aGUgbWV0aG9kcyBhdmFpbGFibGUgaW4gSFRUUCBhcmUgPGNvZGU+R0VUPC9jb2RlPiwgPGNvZGU+UE9TVDwvY29kZT4sCiAgICAgIGFuZCA8Y29kZT5QVVQ8L2NvZGU+LgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ibWVzc2FnZWRpZ2VzdCIgaWQ9Im1lc3NhZ2VkaWdlc3QiPk1lc3NhZ2UgRGlnZXN0PC9hPjwvZHQ+CiAgICA8ZGQ+QSBoYXNoIG9mIGEgbWVzc2FnZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvbnRlbnRzIG9mCiAgICAgIHRoZSBtZXNzYWdlIGhhdmUgbm90IGJlZW4gYWx0ZXJlZCBpbiB0cmFuc2l0LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Im1pbWUtdHlwZSIgaWQ9Im1pbWUtdHlwZSI+TUlNRS10eXBlPC9hPjwvZHQ+CiAgICA8ZGQ+QSB3YXkgdG8gZGVzY3JpYmUgdGhlIGtpbmQgb2YgZG9jdW1lbnQgYmVpbmcgdHJhbnNtaXR0ZWQuICBJdHMgbmFtZQogICAgICBjb21lcyBmcm9tIHRoYXQgZmFjdCB0aGF0IGl0cyBmb3JtYXQgaXMgYm9ycm93ZWQgZnJvbSB0aGUgTXVsdGlwdXJwb3NlCiAgICAgIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucy4gIEl0IGNvbnNpc3RzIG9mIGEgbWFqb3IgdHlwZSBhbmQgYSBtaW5vciB0eXBlLAogICAgICBzZXBhcmF0ZWQgYnkgYSBzbGFzaC4gIFNvbWUgZXhhbXBsZXMgYXJlIDxjb2RlPnRleHQvaHRtbDwvY29kZT4sCiAgICAgIDxjb2RlPmltYWdlL2dpZjwvY29kZT4sIGFuZCA8Y29kZT5hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW08L2NvZGU+LiAgSW4KICAgICAgSFRUUCwgdGhlIE1JTUUtdHlwZSBpcyB0cmFuc21pdHRlZCBpbiB0aGUgPGNvZGU+Q29udGVudC1UeXBlPC9jb2RlPgogICAgICA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjaGVhZGVyIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5oZWFkZXI8L2E+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9Im1vZC9tb2RfbWltZS5odG1sIj5tb2RfbWltZTwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Im1vZHVsZSIgaWQ9Im1vZHVsZSI+TW9kdWxlPC9hPjwvZHQ+CiAgICA8ZGQ+QW4gaW5kZXBlbmRlbnQgcGFydCBvZiBhIHByb2dyYW0uICBNdWNoIG9mIEFwYWNoZSdzIGZ1bmN0aW9uYWxpdHkgaXMKICAgICAgY29udGFpbmVkIGluIG1vZHVsZXMgdGhhdCB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUuICBNb2R1bGVzCiAgICAgIHRoYXQgYXJlIGNvbXBpbGVkIGludG8gdGhlIEFwYWNoZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IGJpbmFyeSBhcmUKICAgICAgY2FsbGVkIDxkZm4+c3RhdGljIG1vZHVsZXM8L2Rmbj4sIHdoaWxlIG1vZHVsZXMgdGhhdCBhcmUgc3RvcmVkCiAgICAgIHNlcGFyYXRlbHkgYW5kIGNhbiBiZSBvcHRpb25hbGx5IGxvYWRlZCBhdCBydW4tdGltZSBhcmUgY2FsbGVkCiAgICAgIDxkZm4+ZHluYW1pYyBtb2R1bGVzPC9kZm4+IG9yIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNkc28iIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkRTT3M8L2E+LgogICAgICBNb2R1bGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQKICAgICAgYXJlIGNhbGxlZCA8ZGZuPmJhc2UgbW9kdWxlczwvZGZuPi4gTWFueSBtb2R1bGVzIGFyZSBhdmFpbGFibGUgZm9yIEFwYWNoZQogICAgICB0aGF0IGFyZSBub3QgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCN0YXJiYWxsIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij50YXJiYWxsPC9hPi4gIFRoZXNlIGFyZSByZWZlcnJlZCB0byBhcwogICAgICA8ZGZuPnRoaXJkLXBhcnR5IG1vZHVsZXM8L2Rmbj4uPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ibW9kLyI+TW9kdWxlIEluZGV4PC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ibW9kdWxlbWFnaWNudW1iZXIiIGlkPSJtb2R1bGVtYWdpY251bWJlciI+TW9kdWxlIE1hZ2ljCiAgICAgIE51bWJlcjwvYT4gKDxhIG5hbWU9Im1tbiIgaWQ9Im1tbiI+TU1OPC9hPik8L2R0PgogICAgPGRkPk1vZHVsZSBNYWdpYyBOdW1iZXIgaXMgYSBjb25zdGFudCBkZWZpbmVkIGluIHRoZSBBcGFjaGUgc291cmNlIGNvZGUgdGhhdAogICAgICBpcyBhc3NvY2lhdGVkIHdpdGggYmluYXJ5IGNvbXBhdGliaWxpdHkgb2YgbW9kdWxlcy4gSXQgaXMgY2hhbmdlZCB3aGVuCiAgICAgIGludGVybmFsIEFwYWNoZSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscyBhbmQgb3RoZXIgc2lnbmlmaWNhbnQgcGFydHMgb2YKICAgICAgQVBJIGNoYW5nZSBpbiBzdWNoIGEgd2F5IHRoYXQgYmluYXJ5IGNvbXBhdGliaWxpdHkgY2Fubm90IGJlIGd1YXJhbnRlZWQKICAgICAgYW55IG1vcmUuIE9uIE1NTiBjaGFuZ2UsIGFsbCB0aGlyZCBwYXJ0eSBtb2R1bGVzIGhhdmUgdG8gYmUgYXQgbGVhc3QKICAgICAgcmVjb21waWxlZCwgc29tZXRpbWVzIGV2ZW4gc2xpZ2h0bHkgY2hhbmdlZCBpbiBvcmRlciB0byB3b3JrIHdpdGggdGhlIG5ldwogICAgICB2ZXJzaW9uIG9mIEFwYWNoZS4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Im9wZW5zc2wiIGlkPSJvcGVuc3NsIj5PcGVuU1NMPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIE9wZW4gU291cmNlIHRvb2xraXQgZm9yIFNTTC9UTFM8YnIgLz4KICAgICAgU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIj5odHRwOi8vd3d3Lm9wZW5zc2wub3JnLzwvYT4jCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJwYXNzcGhyYXNlIiBpZD0icGFzc3BocmFzZSI+UGFzcyBQaHJhc2U8L2E+PC9kdD4KICAgIDxkZD5UaGUgd29yZCBvciBwaHJhc2UgdGhhdCBwcm90ZWN0cyBwcml2YXRlIGtleSBmaWxlcy4gSXQgcHJldmVudHMKICAgICAgdW5hdXRob3JpemVkIHVzZXJzIGZyb20gZW5jcnlwdGluZyB0aGVtLiBVc3VhbGx5IGl0J3MganVzdCB0aGUgc2VjcmV0CiAgICAgIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBrZXkgdXNlZCBmb3IgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2NpcGhlciIgdGl0bGU9InNlZSBnbG9zc2FyeSI+Q2lwaGVyczwvYT4uPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0icGxhaW50ZXh0IiBpZD0icGxhaW50ZXh0Ij5QbGFpbnRleHQ8L2E+PC9kdD4KICAgIDxkZD5UaGUgdW5lbmNyeXB0ZWQgdGV4dC48L2RkPgoKICAgIDxkdD48YSBuYW1lPSJwcml2YXRla2V5IiBpZD0icHJpdmF0ZWtleSI+UHJpdmF0ZSBLZXk8L2E+PC9kdD4KICAgIDxkZD5UaGUgc2VjcmV0IGtleSBpbiBhIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNwdWJsaWNrZXljcnlwdG9ncmFwaHkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPlB1YmxpYyBLZXkKICAgICAgQ3J5cHRvZ3JhcGh5PC9hPiBzeXN0ZW0sIHVzZWQgdG8gZGVjcnlwdCBpbmNvbWluZyBtZXNzYWdlcyBhbmQKICAgICAgc2lnbiBvdXRnb2luZyBvbmVzLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InByb3h5IiBpZD0icHJveHkiPlByb3h5PC9hPjwvZHQ+CiAgICA8ZGQ+QW4gaW50ZXJtZWRpYXRlIHNlcnZlciB0aGF0IHNpdHMgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgPGVtPm9yaWdpbgogICAgICAgIHNlcnZlcjwvZW0+LiAgSXQgYWNjZXB0cyByZXF1ZXN0cyBmcm9tIGNsaWVudHMsIHRyYW5zbWl0cyB0aG9zZSByZXF1ZXN0cwogICAgICBvbiB0byB0aGUgb3JpZ2luIHNlcnZlciwgYW5kIHRoZW4gcmV0dXJucyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luCiAgICAgIHNlcnZlciB0byB0aGUgY2xpZW50LiAgSWYgc2V2ZXJhbCBjbGllbnRzIHJlcXVlc3QgdGhlIHNhbWUgY29udGVudCwgdGhlCiAgICAgIHByb3h5IGNhbiBkZWxpdmVyIHRoYXQgY29udGVudCBmcm9tIGl0cyBjYWNoZSwgcmF0aGVyIHRoYW4gcmVxdWVzdGluZyBpdAogICAgICBmcm9tIHRoZSBvcmlnaW4gc2VydmVyIGVhY2ggdGltZSwgdGhlcmVieSByZWR1Y2luZyByZXNwb25zZSB0aW1lLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9Im1vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0icHVibGlja2V5IiBpZD0icHVibGlja2V5Ij5QdWJsaWMgS2V5PC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHB1YmxpY2x5IGF2YWlsYWJsZSBrZXkgaW4gYSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjcHVibGlja2V5Y3J5cHRvZ3JhcGh5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5QdWJsaWMgS2V5IENyeXB0b2dyYXBoeTwvYT4gc3lzdGVtLAogICAgICB1c2VkIHRvIGVuY3J5cHQgbWVzc2FnZXMgYm91bmQgZm9yIGl0cyBvd25lciBhbmQgdG8gZGVjcnlwdCBzaWduYXR1cmVzCiAgICAgIG1hZGUgYnkgaXRzIG93bmVyLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InB1YmxpY2tleWNyeXB0b2dyYXBoeSIgaWQ9InB1YmxpY2tleWNyeXB0b2dyYXBoeSI+UHVibGljIEtleSBDcnlwdG9ncmFwaHk8L2E+PC9kdD4KICAgIDxkZD5UaGUgc3R1ZHkgYW5kIGFwcGxpY2F0aW9uIG9mIGFzeW1tZXRyaWMgZW5jcnlwdGlvbiBzeXN0ZW1zLCB3aGljaCB1c2UKICAgICAgb25lIGtleSBmb3IgZW5jcnlwdGlvbiBhbmQgYW5vdGhlciBmb3IgZGVjcnlwdGlvbi4gQSBjb3JyZXNwb25kaW5nIHBhaXIgb2YKICAgICAgc3VjaCBrZXlzIGNvbnN0aXR1dGVzIGEga2V5IHBhaXIuIEFsc28gY2FsbGVkIEFzeW1tZXRyaWMgQ3J5cHRvZ3JhcGh5LgogICAgICA8YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJyZWd1bGFyZXhwcmVzaW9uIiBpZD0icmVndWxhcmV4cHJlc2lvbiI+UmVndWxhciBFeHByZXNzaW9uPC9hPgogICAgICA8YSBuYW1lPSJyZWdleCIgaWQ9InJlZ2V4Ij4oUmVnZXgpPC9hPjwvZHQ+CiAgICA8ZGQ+QSB3YXkgb2YgZGVzY3JpYmluZyBhIHBhdHRlcm4gaW4gdGV4dCAtIGZvciBleGFtcGxlLCAiYWxsIHRoZSB3b3JkcyB0aGF0CiAgICAgIGJlZ2luIHdpdGggdGhlIGxldHRlciBBIiBvciAiZXZlcnkgMTAtZGlnaXQgcGhvbmUgbnVtYmVyIiBvciBldmVuICJFdmVyeQogICAgICBzZW50ZW5jZSB3aXRoIHR3byBjb21tYXMgaW4gaXQsIGFuZCBubyBjYXBpdGFsIGxldHRlciBRIi4gUmVndWxhcgogICAgICBleHByZXNzaW9ucyBhcmUgdXNlZnVsIGluIEFwYWNoZSBiZWNhdXNlIHRoZXkgbGV0IHlvdSBhcHBseSBjZXJ0YWluCiAgICAgIGF0dHJpYnV0ZXMgYWdhaW5zdCBjb2xsZWN0aW9ucyBvZiBmaWxlcyBvciByZXNvdXJjZXMgaW4gdmVyeSBmbGV4aWJsZSB3YXlzCiAgICAgIC0gZm9yIGV4YW1wbGUsIGFsbCAuZ2lmIGFuZCAuanBnIGZpbGVzIHVuZGVyIGFueSAiaW1hZ2VzIiBkaXJlY3RvcnkgY291bGQKICAgICAgYmUgd3JpdHRlbiBhcyAiPGNvZGU+L2ltYWdlcy8uKihqcGd8Z2lmKSQ8L2NvZGU+Ii4gIEluIHBsYWNlcyB3aGVyZQogICAgICByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSB1c2VkIHRvIHJlcGxhY2Ugc3RyaW5ncywgdGhlIHNwZWNpYWwgdmFyaWFibGVzCiAgICAgICQxIC4uLiAkOSBjb250YWluIGJhY2tyZWZlcmVuY2VzIHRvIHRoZSBncm91cGVkIHBhcnRzIChpbiBwYXJlbnRoZXNlcykgb2YKICAgICAgdGhlIG1hdGNoZWQgZXhwcmVzc2lvbi4gVGhlIHNwZWNpYWwgdmFyaWFibGUgJDAgY29udGFpbnMgYSBiYWNrcmVmZXJlbmNlCiAgICAgIHRvIHRoZSB3aG9sZSBtYXRjaGVkIGV4cHJlc3Npb24uIFRvIHdyaXRlIGEgbGl0ZXJhbCBkb2xsYXIgc2lnbiBpbiBhCiAgICAgIHJlcGxhY2VtZW50IHN0cmluZywgaXQgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4gSGlzdG9yaWNhbGx5LCB0aGUKICAgICAgdmFyaWFibGUgJmFtcDsgY291bGQgYmUgdXNlZCBhcyBhbGlhcyBmb3IgJDAgaW4gc29tZSBwbGFjZXMuIFRoaXMgaXMgbm8KICAgICAgbG9uZ2VyIHBvc3NpYmxlIHNpbmNlIHZlcnNpb24gMi4zLjYuICBBcGFjaGUgdXNlcyBQZXJsIENvbXBhdGlibGUgUmVndWxhcgogICAgICBFeHByZXNzaW9ucyBwcm92aWRlZCBieSB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5wY3JlLm9yZy8iPlBDUkU8L2E+CiAgICAgIGxpYnJhcnkuICBZb3UgY2FuIGZpbmQgbW9yZSBkb2N1bWVudGF0aW9uIGFib3V0IFBDUkUncyByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgc3ludGF4IGF0IHRoYXQgc2l0ZSwgb3IgYXQKICAgICAgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QQ1JFIj5XaWtpcGVkaWE8L2E+LgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0icmV2ZXJzZXByb3h5IiBpZD0icmV2ZXJzZXByb3h5Ij5SZXZlcnNlIFByb3h5PC9hPjwvZHQ+CiAgICA8ZGQ+QSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjcHJveHkiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPnByb3h5PC9hPiBzZXJ2ZXIgdGhhdCBhcHBlYXJzIHRvIHRoZSBjbGllbnQKICAgICAgYXMgaWYgaXQgaXMgYW4gPGVtPm9yaWdpbiBzZXJ2ZXI8L2VtPi4gIFRoaXMgaXMgdXNlZnVsIHRvIGhpZGUgdGhlIHJlYWwKICAgICAgb3JpZ2luIHNlcnZlciBmcm9tIHRoZSBjbGllbnQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9yIHRvIGxvYWQgYmFsYW5jZS4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InNlY3VyZXNvY2tldHNsYXllciIgaWQ9InNlY3VyZXNvY2tldHNsYXllciI+U2VjdXJlIFNvY2tldHMKICAgICAgICBMYXllcjwvYT4gPGEgbmFtZT0ic3NsIiBpZD0ic3NsIj4oU1NMKTwvYT48L2R0PgogICAgPGRkPkEgcHJvdG9jb2wgY3JlYXRlZCBieSBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiBmb3IgZ2VuZXJhbAogICAgICBjb21tdW5pY2F0aW9uIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIG92ZXIgVENQL0lQIG5ldHdvcmtzLiAgVGhlIG1vc3QKICAgICAgcG9wdWxhciB1c2FnZSBpcyA8ZW0+SFRUUFM8L2VtPiwgaS5lLiB0aGUgSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sIChIVFRQKQogICAgICBvdmVyIFNTTC48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJzZXJ2ZXJuYW1laW5kaWNhdGlvbiIgaWQ9InNlcnZlcm5hbWVpbmRpY2F0aW9uIj5TZXJ2ZXIgTmFtZQogICAgICAgIEluZGljYXRpb248L2E+IDxhIG5hbWU9InNuaSIgaWQ9InNuaSI+KFNOSSk8L2E+PC9kdD4KICAgIDxkZD5BbiBTU0wgZnVuY3Rpb24gdGhhdCBhbGxvd3MgcGFzc2luZyB0aGUgZGVzaXJlZCBzZXJ2ZXIKICAgICAgaG9zdG5hbWUgaW4gdGhlIGluaXRpYWwgU1NMIGhhbmRzaGFrZSBtZXNzYWdlLCBzbyB0aGF0IHRoZSB3ZWIKICAgICAgc2VydmVyIGNhbiBzZWxlY3QgdGhlIGNvcnJlY3QgdmlydHVhbCBob3N0IGNvbmZpZ3VyYXRpb24gdG8gdXNlCiAgICAgIGluIHByb2Nlc3NpbmcgdGhlIFNTTCBoYW5kc2hha2UuICBJdCB3YXMgYWRkZWQgdG8gU1NMIHN0YXJ0aW5nCiAgICAgIHdpdGggdGhlIFRMUyBleHRlbnNpb25zLCBSRkMgMzU0Ni4gIDxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC9zc2xfZmFxLmh0bWwiPnRoZSBTU0wgRkFRPC9hPgogICAgICBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzU0Ni50eHQiPlJGQyAzNTQ2PC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ic2VydmVyc2lkZWluY2x1ZGVzIiBpZD0ic2VydmVyc2lkZWluY2x1ZGVzIj5TZXJ2ZXIgU2lkZQogICAgICAgIEluY2x1ZGVzPC9hPiA8YSBuYW1lPSJzc2kiIGlkPSJzc2kiPihTU0kpPC9hPjwvZHQ+CiAgICA8ZGQ+QSB0ZWNobmlxdWUgZm9yIGVtYmVkZGluZyBwcm9jZXNzaW5nIGRpcmVjdGl2ZXMgaW5zaWRlIEhUTUwgZmlsZXMuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0iaG93dG8vc3NpLmh0bWwiPkludHJvZHVjdGlvbiB0byBTZXJ2ZXIgU2lkZSBJbmNsdWRlczwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InNlc3Npb24iIGlkPSJzZXNzaW9uIj5TZXNzaW9uPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIGNvbnRleHQgaW5mb3JtYXRpb24gb2YgYSBjb21tdW5pY2F0aW9uIGluIGdlbmVyYWwuPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ic3NsZWF5IiBpZD0ic3NsZWF5Ij5TU0xlYXk8L2E+PC9kdD4KICAgIDxkZD5UaGUgb3JpZ2luYWwgU1NML1RMUyBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IGRldmVsb3BlZCBieSBFcmljIEEuCiAgICAgIFlvdW5nCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJzdWJyZXF1ZXN0IiBpZD0ic3VicmVxdWVzdCI+U3VicmVxdWVzdDwvYT48L2R0PgogICAgPGRkPkFwYWNoZSBwcm92aWRlcyBhIHN1YnJlcXVlc3QgQVBJIHRvIG1vZHVsZXMgdGhhdCBhbGxvd3Mgb3RoZXIKICAgICAgICBmaWxlc3lzdGVtIG9yIFVSTCBwYXRocyB0byBiZSBwYXJ0aWFsbHkgb3IgZnVsbHkgZXZhbHVhdGVkIGJ5CiAgICAgICAgdGhlIHNlcnZlci4gRXhhbXBsZSBjb25zdW1lcnMgb2YgdGhpcyBBUEkgYXJlIAogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXIuaHRtbCNkaXJlY3RvcnlpbmRleCI+RGlyZWN0b3J5SW5kZXg8L2E+PC9jb2RlPiwgCiAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dG9pbmRleC5odG1sIj5tb2RfYXV0b2luZGV4PC9hPjwvY29kZT4sIGFuZCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+LgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ic3ltbWV0cmljY3J5cHRvcGhyYXBoeSIgaWQ9InN5bW1ldHJpY2NyeXB0b3BocmFwaHkiPlN5bW1ldHJpYwogICAgICAgIENyeXB0b2dyYXBoeTwvYT48L2R0PgogICAgPGRkPlRoZSBzdHVkeSBhbmQgYXBwbGljYXRpb24gb2YgPGVtPkNpcGhlcnM8L2VtPiB0aGF0IHVzZSBhIHNpbmdsZSBzZWNyZXQga2V5CiAgICAgIGZvciBib3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0aW9ucy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJ0YXJiYWxsIiBpZD0idGFyYmFsbCI+VGFyYmFsbDwvYT48L2R0PgogICAgPGRkPkEgcGFja2FnZSBvZiBmaWxlcyBnYXRoZXJlZCB0b2dldGhlciB1c2luZyB0aGUgPGNvZGU+dGFyPC9jb2RlPiB1dGlsaXR5LgogICAgICBBcGFjaGUgZGlzdHJpYnV0aW9ucyBhcmUgc3RvcmVkIGluIGNvbXByZXNzZWQgdGFyIGFyY2hpdmVzIG9yIHVzaW5nCiAgICAgIHBremlwLgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0idHJhbnNwb3J0bGF5ZXJzZWN1cml0eSIgaWQ9InRyYW5zcG9ydGxheWVyc2VjdXJpdHkiPlRyYW5zcG9ydAogICAgICAgIExheWVyIFNlY3VyaXR5PC9hPiA8YSBuYW1lPSJ0bHMiIGlkPSJ0bHMiPihUTFMpPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHN1Y2Nlc3NvciBwcm90b2NvbCB0byBTU0wsIGNyZWF0ZWQgYnkgdGhlIEludGVybmV0IEVuZ2luZWVyaW5nIFRhc2sKICAgICAgRm9yY2UgKElFVEYpIGZvciBnZW5lcmFsIGNvbW11bmljYXRpb24gYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24gb3ZlcgogICAgICBUQ1AvSVAgbmV0d29ya3MuIFRMUyB2ZXJzaW9uIDEgaXMgbmVhcmx5IGlkZW50aWNhbCB3aXRoIFNTTCB2ZXJzaW9uIDMuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0idW5pZm9ybXJlc291cmNlbG9jYXRvciIgaWQ9InVuaWZvcm1yZXNvdXJjZWxvY2F0b3IiPlVuaWZvcm0KICAgICAgICBSZXNvdXJjZSBMb2NhdG9yPC9hPiA8YSBuYW1lPSJ1cmwiIGlkPSJ1cmwiPihVUkwpPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIG5hbWUvYWRkcmVzcyBvZiBhIHJlc291cmNlIG9uIHRoZSBJbnRlcm5ldC4gIFRoaXMgaXMgdGhlIGNvbW1vbgogICAgICBpbmZvcm1hbCB0ZXJtIGZvciB3aGF0IGlzIGZvcm1hbGx5IGNhbGxlZCBhIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCN1bmlmb3JtcmVzb3VyY2VpZGVudGlmaWVyIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5Vbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXI8L2E+LgogICAgICBVUkxzIGFyZSB1c3VhbGx5IG1hZGUgdXAgb2YgYSBzY2hlbWUsIGxpa2UgPGNvZGU+aHR0cDwvY29kZT4gb3IKICAgICAgPGNvZGU+aHR0cHM8L2NvZGU+LCBhIGhvc3RuYW1lLCBhbmQgYSBwYXRoLiAgQSBVUkwgZm9yIHRoaXMgcGFnZSBtaWdodAogICAgICBiZSA8Y29kZT5odHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9nbG9zc2FyeS5odG1sPC9jb2RlPi4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InVuaWZvcm1yZXNvdXJjZWlkZW50aWZpZXIiIGlkPSJ1bmlmb3JtcmVzb3VyY2VpZGVudGlmaWVyIj5Vbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXI8L2E+CiAgICAgIDxhIG5hbWU9IlVSSSIgaWQ9IlVSSSI+KFVSSSk8L2E+PC9kdD4KICAgIDxkZD5BIGNvbXBhY3Qgc3RyaW5nIG9mIGNoYXJhY3RlcnMgZm9yIGlkZW50aWZ5aW5nIGFuIGFic3RyYWN0IG9yIHBoeXNpY2FsCiAgICAgIHJlc291cmNlLiAgSXQgaXMgZm9ybWFsbHkgZGVmaW5lZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMzk2LnR4dCI+UkZDIDIzOTY8L2E+LiAgVVJJcyB1c2VkIG9uIHRoZQogICAgICB3b3JsZC13aWRlIHdlYiBhcmUgY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3VybCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+VVJMczwvYT4uCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJ2aXJ0dWFsaG9zdGluZyIgaWQ9InZpcnR1YWxob3N0aW5nIj5WaXJ0dWFsIEhvc3Rpbmc8L2E+PC9kdD4KICAgIDxkZD5TZXJ2aW5nIG11bHRpcGxlIHdlYnNpdGVzIHVzaW5nIGEgc2luZ2xlIGluc3RhbmNlIG9mIEFwYWNoZS4gIDxlbT5JUAogICAgICB2aXJ0dWFsIGhvc3Rpbmc8L2VtPiBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHdlYnNpdGVzIGJhc2VkIG9uIHRoZWlyIElQCiAgICAgIGFkZHJlc3MsIHdoaWxlIDxlbT5uYW1lLWJhc2VkIHZpcnR1YWwgaG9zdGluZzwvZW0+IHVzZXMgb25seSB0aGUgbmFtZSBvZiB0aGUKICAgICAgaG9zdCBhbmQgY2FuIHRoZXJlZm9yZSBob3N0IG1hbnkgc2l0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJ2aG9zdHMvIj5BcGFjaGUgVmlydHVhbCBIb3N0IGRvY3VtZW50YXRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJ4LjUwOSIgaWQ9InguNTA5Ij5YLjUwOTwvYT48L2R0PgogICAgPGRkPkFuIGF1dGhlbnRpY2F0aW9uIGNlcnRpZmljYXRlIHNjaGVtZSByZWNvbW1lbmRlZCBieSB0aGUgSW50ZXJuYXRpb25hbAogICAgICBUZWxlY29tbXVuaWNhdGlvbiBVbmlvbiAoSVRVLVQpIHdoaWNoIGlzIHVzZWQgZm9yIFNTTC9UTFMgYXV0aGVudGljYXRpb24uPGJyIC8+IFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KICA8L2RsPgo8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2RlL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJkZSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJEZXV0c2NoIj4mbmJzcDtkZSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VuL2dsb3NzYXJ5Lmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VzL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJlcyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFc3Bh8W9sIj4mbmJzcDtlcyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9qYS9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi90ci9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9nbG9zc2FyeS5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+