PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5PdmVydmlldyBvZiBuZXcgZmVhdHVyZXMgaW4gQXBhY2hlIEhUVFAgU2VydmVyIDIuMiAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi8iPlZlcnNpb24gMi41PC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5PdmVydmlldyBvZiBuZXcgZmVhdHVyZXMgaW4gQXBhY2hlIEhUVFAgU2VydmVyIDIuMjwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9uZXdfZmVhdHVyZXNfMl8yLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VzL25ld19mZWF0dXJlc18yXzIuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvbmV3X2ZlYXR1cmVzXzJfMi5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vbmV3X2ZlYXR1cmVzXzJfMi5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3B0LWJyL25ld19mZWF0dXJlc18yXzIuaHRtbCIgaHJlZmxhbmc9InB0LWJyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlBvcnR1Z3XqcyAoQnJhc2lsKSI+Jm5ic3A7cHQtYnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi90ci9uZXdfZmVhdHVyZXNfMl8yLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+CgogIDxwPlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHNvbWUgb2YgdGhlIG1ham9yIGNoYW5nZXMgYmV0d2VlbiB0aGUKICAgICAyLjAgYW5kIDIuMiB2ZXJzaW9ucyBvZiB0aGUgQXBhY2hlIEhUVFAgU2VydmVyLiBGb3IgbmV3IGZlYXR1cmVzIHNpbmNlCiAgICAgdmVyc2lvbiAxLjMsIHNlZSB0aGUgPGEgaHJlZj0ibmV3X2ZlYXR1cmVzXzJfMC5odG1sIj4yLjAgbmV3IGZlYXR1cmVzPC9hPgogICAgIGRvY3VtZW50LjwvcD4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY29yZSI+Q29yZSBFbmhhbmNlbWVudHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtb2R1bGUiPk1vZHVsZSBFbmhhbmNlbWVudHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm9ncmFtcyI+UHJvZ3JhbSBFbmhhbmNlbWVudHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkZXZlbG9wZXIiPk1vZHVsZSBEZXZlbG9wZXIgQ2hhbmdlczwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJjb3JlIiBpZD0iY29yZSI+Q29yZSBFbmhhbmNlbWVudHM8L2E+PC9oMj4KICAgIAogICAgPGRsPgoKICAgICAgPGR0PkF1dGhuL0F1dGh6PC9kdD4KICAgICAgPGRkPlRoZSBidW5kbGVkIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uIG1vZHVsZXMgaGF2ZQogICAgICAgICAgYmVlbiByZWZhY3RvcmVkLiAgVGhlIG5ldyBtb2RfYXV0aG5fYWxpYXMoYWxyZWFkeSByZW1vdmVkIGZyb20gMi4zLzIuNCkKICAgICAgICAgIG1vZHVsZSBjYW4gZ3JlYXRseSBzaW1wbGlmeSBjZXJ0YWluIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAgU2VlIDxhIGhyZWY9IiNtb2R1bGUiPm1vZHVsZSBuYW1lIGNoYW5nZXM8L2E+LCBhbmQKICAgICAgICAgIDxhIGhyZWY9IiNkZXZlbG9wZXIiPnRoZSBkZXZlbG9wZXIgY2hhbmdlczwvYT4gZm9yIG1vcmUKICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGVzZSBjaGFuZ2VzIGFmZmVjdHMgdXNlcnMgYW5kIG1vZHVsZQogICAgICAgICAgd3JpdGVycy48L2RkPgoKICAgICAgPGR0PkNhY2hpbmc8L2R0PgogICAgICA8ZGQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+LCBhbmQKICAgICAgICAgIG1vZF9tZW1fY2FjaGUoYWxyZWFkeSByZW1vdmVkIGZyb20gMi4zLzIuNCkgaGF2ZSB1bmRlcmdvbmUgYSBsb3Qgb2YgY2hhbmdlcywgYW5kCiAgICAgICAgICBhcmUgbm93IGNvbnNpZGVyZWQgcHJvZHVjdGlvbi1xdWFsaXR5LiA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPjwvY29kZT4KICAgICAgICAgIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gY2xlYW4gdXAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCI+bW9kX2NhY2hlX2Rpc2s8L2E+PC9jb2RlPgogICAgICAgICAgc2V0dXBzLjwvZGQ+CgogICAgICA8ZHQ+Q29uZmlndXJhdGlvbjwvZHQ+CiAgICAgIDxkZD5UaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGxheW91dCBoYXMgYmVlbiBzaW1wbGlmaWVkIGFuZAogICAgICAgICAgbW9kdWxhcmlzZWQuIENvbmZpZ3VyYXRpb24gc25pcHBldHMgd2hpY2ggY2FuIGJlIHVzZWQgdG8KICAgICAgICAgIGVuYWJsZSBjb21tb25seS11c2VkIGZlYXR1cmVzIGFyZSBub3cgYnVuZGxlZCB3aXRoIEFwYWNoZSwgYW5kCiAgICAgICAgICBjYW4gYmUgZWFzaWx5IGFkZGVkIHRvIHRoZSBtYWluIHNlcnZlciBjb25maWcuPC9kZD4KCiAgICAgIDxkdD5HcmFjZWZ1bCBzdG9wPC9kdD4KICAgICAgPGRkPlRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9wcmVmb3JrLmh0bWwiPnByZWZvcms8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2Qvd29ya2VyLmh0bWwiPndvcmtlcjwvYT48L2NvZGU+IGFuZAogICAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvZXZlbnQuaHRtbCI+ZXZlbnQ8L2E+PC9jb2RlPiAgTVBNcyBub3cgYWxsb3cgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPgogICAgICAgICAgdG8gYmUgc2h1dGRvd24gZ3JhY2VmdWxseSB2aWEgdGhlCiAgICAgICAgICA8YSBocmVmPSJzdG9wcGluZy5odG1sI2dyYWNlZnVsc3RvcCI+PGNvZGU+Z3JhY2VmdWwtc3RvcDwvY29kZT48L2E+CiAgICAgICAgICBzaWduYWwuIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tcG1fY29tbW9uLmh0bWwjZ3JhY2VmdWxzaHV0ZG93bnRpbWVvdXQiPkdyYWNlZnVsU2h1dGRvd25UaW1lb3V0PC9hPjwvY29kZT4gZGlyZWN0aXZlCiAgICAgICAgICBoYXMgYmVlbiBhZGRlZCB0byBzcGVjaWZ5IGFuIG9wdGlvbmFsIHRpbWVvdXQsIGFmdGVyIHdoaWNoCiAgICAgICAgICA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IHdpbGwgdGVybWluYXRlIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cwogICAgICAgICAgb2YgYW55IHJlcXVlc3RzIGJlaW5nIHNlcnZlZC48L2RkPgoKICAgICAgPGR0PlByb3h5aW5nPC9kdD4KICAgICAgPGRkPlRoZSBuZXcgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3Byb3h5X2JhbGFuY2VyLmh0bWwiPm1vZF9wcm94eV9iYWxhbmNlcjwvYT48L2NvZGU+IG1vZHVsZSBwcm92aWRlcwogICAgICAgICAgbG9hZCBiYWxhbmNpbmcgc2VydmljZXMgZm9yIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPi4KICAgICAgICAgIFRoZSBuZXcgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3Byb3h5X2FqcC5odG1sIj5tb2RfcHJveHlfYWpwPC9hPjwvY29kZT4gbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlCiAgICAgICAgICA8Y29kZT5BcGFjaGUgSlNlcnYgUHJvdG9jb2wgdmVyc2lvbiAxLjM8L2NvZGU+IHVzZWQgYnkKICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly90b21jYXQuYXBhY2hlLm9yZy8iPkFwYWNoZSBUb21jYXQ8L2E+LjwvZGQ+CgogICAgICA8ZHQ+UmVndWxhciBFeHByZXNzaW9uIExpYnJhcnkgVXBkYXRlZDwvZHQ+CiAgICAgIDxkZD5WZXJzaW9uIDUuMCBvZiB0aGUKICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cucGNyZS5vcmcvIj5QZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9uCiAgICAgICAgICBMaWJyYXJ5PC9hPiAoUENSRSkgaXMgbm93IGluY2x1ZGVkLiAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiBjYW4gYmUKICAgICAgICAgIGNvbmZpZ3VyZWQgdG8gdXNlIGEgc3lzdGVtIGluc3RhbGxhdGlvbiBvZiBQQ1JFIGJ5IHBhc3NpbmcgdGhlCiAgICAgICAgICA8Y29kZT4tLXdpdGgtcGNyZTwvY29kZT4gZmxhZyB0byBjb25maWd1cmUuPC9kZD4KCiAgICAgIDxkdD5TbWFydCBGaWx0ZXJpbmc8L2R0PgogICAgICA8ZGQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbHRlci5odG1sIj5tb2RfZmlsdGVyPC9hPjwvY29kZT4gaW50cm9kdWNlcyBkeW5hbWljIGNvbmZpZ3VyYXRpb24KICAgICAgICAgIHRvIHRoZSBvdXRwdXQgZmlsdGVyIGNoYWluLiAgSXQgZW5hYmxlcyBmaWx0ZXJzIHRvIGJlIGNvbmRpdGlvbmFsbHkKICAgICAgICAgIGluc2VydGVkLCBiYXNlZCBvbiBhbnkgUmVxdWVzdCBvciBSZXNwb25zZSBoZWFkZXIgb3IgZW52aXJvbm1lbnQKICAgICAgICAgIHZhcmlhYmxlLCBhbmQgZGlzcGVuc2VzIHdpdGggdGhlIG1vcmUgcHJvYmxlbWF0aWMgZGVwZW5kZW5jaWVzIGFuZAogICAgICAgICAgb3JkZXJpbmcgcHJvYmxlbXMgaW4gdGhlIDIuMCBhcmNoaXRlY3R1cmUuPC9kZD4KCiAgICAgIDxkdD5MYXJnZSBGaWxlIFN1cHBvcnQ8L2R0PgogICAgICA8ZGQ+PGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiBpcyBub3cgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBmaWxlcyBsYXJnZXIKICAgICAgICAgIHRoYW4gMkdCIG9uIG1vZGVybiAzMi1iaXQgVW5peCBzeXN0ZW1zLiAgU3VwcG9ydCBmb3IgaGFuZGxpbmcKICAgICAgICAgICZndDsyR0IgcmVxdWVzdCBib2RpZXMgaGFzIGFsc28gYmVlbiBhZGRlZC48L2RkPgoKICAgICAgPGR0PkV2ZW50IE1QTTwvZHQ+CiAgICAgIDxkZD5UaGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvZXZlbnQuaHRtbCI+ZXZlbnQ8L2E+PC9jb2RlPiBNUE0gdXNlcyBhIHNlcGFyYXRlIHRocmVhZCB0byBoYW5kbGUKICAgICAgICAgIEtlZXAgQWxpdmUgcmVxdWVzdHMgYW5kIGFjY2VwdGluZyBjb25uZWN0aW9ucy4gIEtlZXAgQWxpdmUgcmVxdWVzdHMKICAgICAgICAgIGhhdmUgdHJhZGl0aW9uYWxseSByZXF1aXJlZCBodHRwZCB0byBkZWRpY2F0ZSBhIHdvcmtlciB0byBoYW5kbGUgaXQuCiAgICAgICAgICBUaGlzIGRlZGljYXRlZCB3b3JrZXIgY291bGQgbm90IGJlIHVzZWQgYWdhaW4gdW50aWwgdGhlIEtlZXAgQWxpdmUKICAgICAgICAgIHRpbWVvdXQgd2FzIHJlYWNoZWQuPC9kZD4KCiAgICAgIDxkdD5TUUwgRGF0YWJhc2UgU3VwcG9ydDwvZHQ+CiAgICAgIDxkZD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZGJkLmh0bWwiPm1vZF9kYmQ8L2E+PC9jb2RlPiwgdG9nZXRoZXIgd2l0aCB0aGUgPGNvZGU+YXByX2RiZDwvY29kZT4KICAgICAgICAgIGZyYW1ld29yaywgYnJpbmdzIGRpcmVjdCBTUUwgc3VwcG9ydCB0byBtb2R1bGVzIHRoYXQgbmVlZCBpdC4KICAgICAgICAgIFN1cHBvcnRzIGNvbm5lY3Rpb24gcG9vbGluZyBpbiB0aHJlYWRlZCBNUE1zLjwvZGQ+CgogICAgPC9kbD4KICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im1vZHVsZSIgaWQ9Im1vZHVsZSI+TW9kdWxlIEVuaGFuY2VtZW50czwvYT48L2gyPgogICAgCiAgICA8ZGw+CiAgICAgIDxkdD5BdXRobi9BdXRoejwvZHQ+CiAgICAgIDxkZD5Nb2R1bGVzIGluIHRoZSBhYWEgZGlyZWN0b3J5IGhhdmUgYmVlbiByZW5hbWVkIGFuZCBvZmZlcgogICAgICAgICAgYmV0dGVyIHN1cHBvcnQgZm9yIGRpZ2VzdCBhdXRoZW50aWNhdGlvbi4gIEZvciBleGFtcGxlLAogICAgICAgICAgPGNvZGU+bW9kX2F1dGg8L2NvZGU+IGlzIG5vdyBzcGxpdCBpbnRvCiAgICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aF9iYXNpYy5odG1sIj5tb2RfYXV0aF9iYXNpYzwvYT48L2NvZGU+IGFuZAogICAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGhuX2ZpbGUuaHRtbCI+bW9kX2F1dGhuX2ZpbGU8L2E+PC9jb2RlPjsgPGNvZGU+bW9kX2F1dGhfZGJtPC9jb2RlPiBpcyBub3cKICAgICAgICAgIGNhbGxlZCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aG5fZGJtLmh0bWwiPm1vZF9hdXRobl9kYm08L2E+PC9jb2RlPjsgPGNvZGU+bW9kX2FjY2VzczwvY29kZT4gaGFzCiAgICAgICAgICBiZWVuIHJlbmFtZWQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGh6X2hvc3QuaHRtbCI+bW9kX2F1dGh6X2hvc3Q8L2E+PC9jb2RlPi4gIFRoZXJlIGlzIGFsc28gYSBuZXcKICAgICAgICAgIG1vZF9hdXRobl9hbGlhcyhhbHJlYWR5IHJlbW92ZWQgZnJvbSAyLjMvMi40KSBtb2R1bGUgZm9yIHNpbXBsaWZ5aW5nCiAgICAgICAgICBjZXJ0YWluIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb25zLgogICAgICA8L2RkPgoKICAgICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPm1vZF9hdXRobnpfbGRhcDwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBtb2R1bGUgaXMgYSBwb3J0IG9mIHRoZSAyLjAKICAgICAgICAgIDxjb2RlPm1vZF9hdXRoX2xkYXA8L2NvZGU+IG1vZHVsZSB0byB0aGUgMi4yIDxjb2RlPkF1dGhuL0F1dGh6PC9jb2RlPgogICAgICAgICAgZnJhbWV3b3JrLiAgTmV3IGZlYXR1cmVzIGluY2x1ZGUgdXNpbmcgTERBUCBhdHRyaWJ1dGUgdmFsdWVzIGFuZAogICAgICAgICAgY29tcGxpY2F0ZWQgc2VhcmNoIGZpbHRlcnMgaW4gdGhlCiAgICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9kZD4KCiAgICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aHpfb3duZXIuaHRtbCI+bW9kX2F1dGh6X293bmVyPC9hPjwvY29kZT48L2R0PgogICAgICA8ZGQ+QSBuZXcgbW9kdWxlIHRoYXQgYXV0aG9yaXplcyBhY2Nlc3MgdG8gZmlsZXMgYmFzZWQKICAgICAgICAgIG9uIHRoZSBvd25lciBvZiB0aGUgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW08L2RkPgoKICAgICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF92ZXJzaW9uLmh0bWwiPm1vZF92ZXJzaW9uPC9hPjwvY29kZT48L2R0PgogICAgICA8ZGQ+QSBuZXcgbW9kdWxlIHRoYXQgYWxsb3dzIGNvbmZpZ3VyYXRpb24gYmxvY2tzIHRvIGJlIGVuYWJsZWQgYmFzZWQgb24gdGhlCiAgICAgICAgICB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuPC9kZD4KCiAgICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaW5mby5odG1sIj5tb2RfaW5mbzwvYT48L2NvZGU+PC9kdD4KICAgICAgPGRkPkFkZGVkIGEgbmV3IDxjb2RlPj9jb25maWc8L2NvZGU+IGFyZ3VtZW50IHdoaWNoIHdpbGwgc2hvdwogICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcyBhcyBwYXJzZWQgYnkgQXBhY2hlLCBpbmNsdWRpbmcKICAgICAgICAgIHRoZWlyIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuICBUaGUgbW9kdWxlIGFsc28KICAgICAgICAgIHNob3dzIHRoZSBvcmRlciBvZiBhbGwgcmVxdWVzdCBob29rcyBhbmQgYWRkaXRpb25hbAogICAgICAgICAgYnVpbGQgaW5mb3JtYXRpb24sIHNpbWlsYXIgdG8gPGNvZGU+aHR0cGQgLVY8L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT48L2R0PgogICAgICAKICAgICAgPGRkPkFkZGVkIGEgc3VwcG9ydCBmb3IKICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjgxNy50eHQiPlJGQyAyODE3PC9hPiwgd2hpY2gKICAgICAgICAgYWxsb3dzIGNvbm5lY3Rpb25zIHRvIHVwZ3JhZGUgZnJvbSBjbGVhciB0ZXh0IHRvIFRMUyBlbmNyeXB0aW9uLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ltYWdlbWFwLmh0bWwiPm1vZF9pbWFnZW1hcDwvYT48L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPm1vZF9pbWFwPC9jb2RlPiBoYXMgYmVlbiByZW5hbWVkIHRvCiAgICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaW1hZ2VtYXAuaHRtbCI+bW9kX2ltYWdlbWFwPC9hPjwvY29kZT4gdG8gYXZvaWQgdXNlciBjb25mdXNpb24uPC9kZD4KICAgIDwvZGw+CgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icHJvZ3JhbXMiIGlkPSJwcm9ncmFtcyI+UHJvZ3JhbSBFbmhhbmNlbWVudHM8L2E+PC9oMj4KICAgIAogICAgPGRsPgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uIDxjb2RlPi1NPC9jb2RlPiBoYXMgYmVlbiBhZGRlZCB0aGF0CiAgICAgIGxpc3RzIGFsbCBtb2R1bGVzIHRoYXQgYXJlIGxvYWRlZCBiYXNlZCBvbiB0aGUgY3VycmVudAogICAgICBjb25maWd1cmF0aW9uLiBVbmxpa2UgdGhlIDxjb2RlPi1sPC9jb2RlPiBvcHRpb24sIHRoaXMgbGlzdAogICAgICBpbmNsdWRlcyBEU09zIGxvYWRlZCB2aWEgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NvLmh0bWwiPm1vZF9zbzwvYT48L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0eHQyZGJtLmh0bWwiPmh0dHh0MmRibTwvYT48L2NvZGU+PC9kdD4KICAgICAgPGRkPkEgbmV3IHByb2dyYW0gdXNlZCB0byBnZW5lcmF0ZSBkYm0gZmlsZXMgZnJvbSB0ZXh0IGlucHV0LAogICAgICAgICAgZm9yIHVzZSBpbiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVtYXAiPlJld3JpdGVNYXA8L2E+PC9jb2RlPgogICAgICAgICAgd2l0aCB0aGUgPGNvZGU+ZGJtPC9jb2RlPiBtYXAgdHlwZS48L2RkPgogICAgPC9kbD4KICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImRldmVsb3BlciIgaWQ9ImRldmVsb3BlciI+TW9kdWxlIERldmVsb3BlciBDaGFuZ2VzPC9hPjwvaDI+CiAgICAKICAgIDxkbD4KICAgICAgPGR0PjxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNhcHIiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkFQUjwvYT4gMS4wIEFQSTwvZHQ+CgogICAgICA8ZGQ+QXBhY2hlIDIuMiB1c2VzIHRoZSBBUFIgMS4wIEFQSS4gIEFsbCBkZXByZWNhdGVkIGZ1bmN0aW9ucyBhbmQKICAgICAgICAgIHN5bWJvbHMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSA8Y29kZT5BUFI8L2NvZGU+IGFuZAogICAgICAgICAgPGNvZGU+QVBSLVV0aWw8L2NvZGU+LiBGb3IgZGV0YWlscywgc2VlIHRoZQogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2Fwci5hcGFjaGUub3JnLyI+QVBSIFdlYnNpdGU8L2E+LjwvZGQ+CgogICAgICA8ZHQ+QXV0aG4vQXV0aHo8L2R0PgogICAgICA8ZGQ+VGhlIGJ1bmRsZWQgYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gbW9kdWxlcyBoYXZlCiAgICAgICAgICBiZWVuIHJlbmFtZWQgYWxvbmcgdGhlIGZvbGxvd2luZyBsaW5lczoKICAgICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48Y29kZT5tb2RfYXV0aF8qPC9jb2RlPiAgLSZndDsgTW9kdWxlcyB0aGF0IGltcGxlbWVudCBhbiBIVFRQCiAgICAgICAgICBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc208L2xpPgogICAgICAgICAgPGxpPjxjb2RlPm1vZF9hdXRobl8qPC9jb2RlPiAtJmd0OyBNb2R1bGVzIHRoYXQgcHJvdmlkZSBhIGJhY2tlbmQKICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyPC9saT4KICAgICAgICAgIDxsaT48Y29kZT5tb2RfYXV0aHpfKjwvY29kZT4gLSZndDsgTW9kdWxlcyB0aGF0IGltcGxlbWVudAogICAgICAgICAgYXV0aG9yaXphdGlvbiAob3IgYWNjZXNzKTwvbGk+CiAgICAgICAgICA8bGk+PGNvZGU+bW9kX2F1dGhuel8qPC9jb2RlPiAtJmd0OyBNb2R1bGUgdGhhdCBpbXBsZW1lbnRzIGJvdGgKICAgICAgICAgIGF1dGhlbnRpY2F0aW9uICZhbXA7IGF1dGhvcml6YXRpb248L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIFRoZXJlIGlzIGEgbmV3IGF1dGhlbnRpY2F0aW9uIGJhY2tlbmQgcHJvdmlkZXIKICAgICAgICAgIHNjaGVtZSB3aGljaCBncmVhdGx5IGVhc2VzIHRoZSBjb25zdHJ1Y3Rpb24gb2YgbmV3IGF1dGhlbnRpY2F0aW9uCiAgICAgICAgICBiYWNrZW5kcy48L2RkPgoKICAgICAgPGR0PkNvbm5lY3Rpb24gRXJyb3IgTG9nZ2luZzwvZHQ+CgogICAgICA8ZGQ+QSBuZXcgZnVuY3Rpb24sIDxjb2RlPmFwX2xvZ19jZXJyb3I8L2NvZGU+IGhhcyBiZWVuIGFkZGVkIHRvIGxvZwogICAgICAgICAgZXJyb3JzIHRoYXQgb2NjdXIgd2l0aCB0aGUgY2xpZW50J3MgY29ubmVjdGlvbi4gIFdoZW4gbG9nZ2VkLAogICAgICAgICAgdGhlIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGNsaWVudCBJUCBhZGRyZXNzLjwvZGQ+CgogICAgICA8ZHQ+VGVzdCBDb25maWd1cmF0aW9uIEhvb2sgQWRkZWQ8L2R0PgoKICAgICAgPGRkPkEgbmV3IGhvb2ssIDxjb2RlPnRlc3RfY29uZmlnPC9jb2RlPiBoYXMgYmVlbiBhZGRlZCB0byBhaWQKICAgICAgICAgIG1vZHVsZXMgdGhhdCB3YW50IHRvIGV4ZWN1dGUgc3BlY2lhbCBjb2RlIG9ubHkgd2hlbiB0aGUgdXNlciBwYXNzZXMKICAgICAgICAgIDxjb2RlPi10PC9jb2RlPiB0byA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+U2V0IFRocmVhZGVkIE1QTSdzIFN0YWNrc2l6ZTwvZHQ+CgogICAgICA8ZGQ+QSBuZXcgZGlyZWN0aXZlLCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tcG1fY29tbW9uLmh0bWwjdGhyZWFkc3RhY2tzaXplIj5UaHJlYWRTdGFja1NpemU8L2E+PC9jb2RlPiBoYXMgYmVlbiBhZGRlZCB0bwogICAgICAgICAgc2V0IHRoZSBzdGFjayBzaXplIG9uIGFsbCB0aHJlYWRlZCBNUE1zLiAgVGhpcyBpcyByZXF1aXJlZAogICAgICAgICAgZm9yIHNvbWUgdGhpcmQtcGFydHkgbW9kdWxlcyBvbiBwbGF0Zm9ybXMgd2l0aCBzbWFsbCBkZWZhdWx0CiAgICAgICAgICB0aHJlYWQgc3RhY2sgc2l6ZS48L2RkPgoKICAgICAgPGR0PlByb3RvY29sIGhhbmRsaW5nIGZvciBvdXRwdXQgZmlsdGVyczwvZHQ+CgogICAgICA8ZGQ+SW4gdGhlIHBhc3QsIGV2ZXJ5IGZpbHRlciBoYXMgYmVlbiByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcKICAgICAgICAgIHRoYXQgaXQgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0IHJlc3BvbnNlIGhlYWRlcnMgd2hlcmUgaXQgYWZmZWN0cwogICAgICAgICAgdGhlbS4gIEZpbHRlcnMgY2FuIG5vdyBkZWxlZ2F0ZSBjb21tb24gcHJvdG9jb2wgbWFuYWdlbWVudCB0bwogICAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbHRlci5odG1sIj5tb2RfZmlsdGVyPC9hPjwvY29kZT4sIHVzaW5nIHRoZQogICAgICAgICAgPGNvZGU+YXBfcmVnaXN0ZXJfb3V0cHV0X2ZpbHRlcl9wcm90b2NvbDwvY29kZT4gb3IKICAgICAgICAgIDxjb2RlPmFwX2ZpbHRlcl9wcm90b2NvbDwvY29kZT4gY2FsbHMuPC9kZD4KCiAgICAgIDxkdD5Nb25pdG9yIGhvb2sgYWRkZWQ8L2R0PgogICAgICA8ZGQ+TW9uaXRvciBob29rIGVuYWJsZXMgbW9kdWxlcyB0byBydW4gcmVndWxhci9zY2hlZHVsZWQgam9icwogICAgICAgICAgaW4gdGhlIHBhcmVudCAocm9vdCkgcHJvY2Vzcy48L2RkPgoKICAgICAgPGR0PlJlZ3VsYXIgZXhwcmVzc2lvbiBBUEkgY2hhbmdlczwvZHQ+CgogICAgICA8ZGQ+VGhlIDxjb2RlPnBjcmVwb3NpeC5oPC9jb2RlPiBoZWFkZXIgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZTsKICAgICAgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIG5ldyA8Y29kZT5hcF9yZWdleC5oPC9jb2RlPiBoZWFkZXIuICBUaGUKICAgICAgUE9TSVguMiA8Y29kZT5yZWdleC5oPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBleHBvc2VkIGJ5IHRoZSBvbGQKICAgICAgaGVhZGVyIGlzIG5vdyBhdmFpbGFibGUgdW5kZXIgdGhlIDxjb2RlPmFwXzwvY29kZT4gbmFtZXNwYWNlCiAgICAgIGZyb20gPGNvZGU+YXBfcmVnZXguaDwvY29kZT4uICBDYWxscyB0byA8Y29kZT5yZWdjb21wPC9jb2RlPiwKICAgICAgPGNvZGU+cmVnZXhlYzwvY29kZT4gYW5kIHNvIG9uIGNhbiBiZSByZXBsYWNlZCBieSBjYWxscyB0bwogICAgICA8Y29kZT5hcF9yZWdjb21wPC9jb2RlPiwgPGNvZGU+YXBfcmVnZXhlYzwvY29kZT4uPC9kZD4KCiAgICAgIDxkdD5EQkQgRnJhbWV3b3JrIChTUUwgRGF0YWJhc2UgQVBJKTwvZHQ+CgogICAgICA8ZGQ+PHA+V2l0aCBBcGFjaGUgMS54IGFuZCAyLjAsIG1vZHVsZXMgcmVxdWlyaW5nIGFuIFNRTCBiYWNrZW5kCiAgICAgIGhhZCB0byB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciBtYW5hZ2luZyBpdCB0aGVtc2VsdmVzLiAgQXBhcnQKICAgICAgZnJvbSByZWludmVudGluZyB0aGUgd2hlZWwsIHRoaXMgY2FuIGJlIHZlcnkgaW5lZmZpY2llbnQsIGZvcgogICAgICBleGFtcGxlIHdoZW4gc2V2ZXJhbCBtb2R1bGVzIGVhY2ggbWFpbnRhaW4gdGhlaXIgb3duIGNvbm5lY3Rpb25zLjwvcD4KCiAgICAgIDxwPkFwYWNoZSAyLjEgYW5kIGxhdGVyIHByb3ZpZGVzIHRoZSA8Y29kZT5hcF9kYmQ8L2NvZGU+IEFQSSBmb3IKICAgICAgbWFuYWdpbmcgZGF0YWJhc2UgY29ubmVjdGlvbnMgKGluY2x1ZGluZyBvcHRpbWlzZWQgc3RyYXRlZ2llcwogICAgICBmb3IgdGhyZWFkZWQgYW5kIHVudGhyZWFkZWQgTVBNcyksIHdoaWxlIEFQUiAxLjIgYW5kIGxhdGVyIHByb3ZpZGVzCiAgICAgIHRoZSA8Y29kZT5hcHJfZGJkPC9jb2RlPiBBUEkgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGRhdGFiYXNlLjwvcD4KCiAgICAgIDxwPk5ldyBtb2R1bGVzIFNIT1VMRCBub3cgdXNlIHRoZXNlIEFQSXMgZm9yIGFsbCBTUUwgZGF0YWJhc2UKICAgICAgb3BlcmF0aW9ucy4gIEV4aXN0aW5nIGFwcGxpY2F0aW9ucyBTSE9VTEQgYmUgdXBncmFkZWQgdG8gdXNlIGl0CiAgICAgIHdoZXJlIGZlYXNpYmxlLCBlaXRoZXIgdHJhbnNwYXJlbnRseSBvciBhcyBhIHJlY29tbWVuZGVkIG9wdGlvbgogICAgICB0byB0aGVpciB1c2Vycy48L3A+PC9kZD4KICAgIDwvZGw+CiAgPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9uZXdfZmVhdHVyZXNfMl8yLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VzL25ld19mZWF0dXJlc18yXzIuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvbmV3X2ZlYXR1cmVzXzJfMi5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vbmV3X2ZlYXR1cmVzXzJfMi5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3B0LWJyL25ld19mZWF0dXJlc18yXzIuaHRtbCIgaHJlZmxhbmc9InB0LWJyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlBvcnR1Z3XqcyAoQnJhc2lsKSI+Jm5ic3A7cHQtYnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi90ci9uZXdfZmVhdHVyZXNfMl8yLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvdHJ1bmsvbmV3X2ZlYXR1cmVzXzJfMi5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+