PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfbG9nX2NvbmZpZyAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfbG9nX2NvbmZpZzwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vdHIvbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+Cjx0YWJsZSBjbGFzcz0ibW9kdWxlIj48dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Mb2dnaW5nIG9mIHRoZSByZXF1ZXN0cyBtYWRlIHRvIHRoZSBzZXJ2ZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5sb2dfY29uZmlnX21vZHVsZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1NvdXJjZUZpbGUiPlNvdXJjZaBGaWxlOjwvYT48L3RoPjx0ZD5tb2RfbG9nX2NvbmZpZy5jPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCiAgICA8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBmb3IgZmxleGlibGUgbG9nZ2luZyBvZiBjbGllbnQKICAgIHJlcXVlc3RzLiBMb2dzIGFyZSB3cml0dGVuIGluIGEgY3VzdG9taXphYmxlIGZvcm1hdCwgYW5kIG1heSBiZQogICAgd3JpdHRlbiBkaXJlY3RseSB0byBhIGZpbGUsIG9yIHRvIGFuIGV4dGVybmFsIHByb2dyYW0uCiAgICBDb25kaXRpb25hbCBsb2dnaW5nIGlzIHByb3ZpZGVkIHNvIHRoYXQgaW5kaXZpZHVhbCByZXF1ZXN0cyBtYXkKICAgIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGZyb20gdGhlIGxvZ3MgYmFzZWQgb24gY2hhcmFjdGVyaXN0aWNzCiAgICBvZiB0aGUgcmVxdWVzdC48L3A+CgogICAgPHA+VGhyZWUgZGlyZWN0aXZlcyBhcmUgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGU6CiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjdHJhbnNmZXJsb2ciPlRyYW5zZmVyTG9nPC9hPjwvY29kZT4gdG8gY3JlYXRlCiAgICBhIGxvZyBmaWxlLCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9nZm9ybWF0Ij5Mb2dGb3JtYXQ8L2E+PC9jb2RlPgogICAgdG8gc2V0IGEgY3VzdG9tIGZvcm1hdCwgYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjdXN0b21sb2ciPkN1c3RvbUxvZzwvYT48L2NvZGU+IHRvIGRlZmluZSBhIGxvZyBmaWxlIGFuZCBmb3JtYXQgaW4gb25lCiAgICBzdGVwLiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+VHJhbnNmZXJMb2c8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+IGRpcmVjdGl2ZXMgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgaW4gZWFjaAogICAgc2VydmVyIHRvIGNhdXNlIGVhY2ggcmVxdWVzdCB0byBiZSBsb2dnZWQgdG8gbXVsdGlwbGUgZmlsZXMuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmb3JtYXRzIj5DdXN0b20gTG9nIEZvcm1hdHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2VjdXJpdHkiPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9hPjwvbGk+CjwvdWw+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNidWZmZXJlZGxvZ3MiPkJ1ZmZlcmVkTG9nczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjdXN0b21sb2ciPkN1c3RvbUxvZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNnbG9iYWxsb2ciPkdsb2JhbExvZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsb2dmb3JtYXQiPkxvZ0Zvcm1hdDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN0cmFuc2ZlcmxvZyI+VHJhbnNmZXJMb2c8L2E+PC9saT4KPC91bD4KPGgzPkJ1Z2ZpeCBjaGVja2xpc3Q8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9odHRwZC9DSEFOR0VTXzIuNCI+aHR0cGQgY2hhbmdlbG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9bW9kX2xvZ19jb25maWciPktub3duIGlzc3VlczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUFwYWNoZSUyMGh0dHBkLTImYW1wO2NvbXBvbmVudD1tb2RfbG9nX2NvbmZpZyI+UmVwb3J0IGEgYnVnPC9hPjwvbGk+PC91bD48aDM+U2VlIGFsc288L2gzPgo8dWwgY2xhc3M9InNlZWFsc28iPgo8bGk+PGEgaHJlZj0iLi4vbG9ncy5odG1sIj5BcGFjaGUgTG9nIEZpbGVzPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJmb3JtYXRzIiBpZD0iZm9ybWF0cyI+Q3VzdG9tIExvZyBGb3JtYXRzPC9hPjwvaDI+CgogICAgPHA+VGhlIGZvcm1hdCBhcmd1bWVudCB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvZ2Zvcm1hdCI+TG9nRm9ybWF0PC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjdXN0b21sb2ciPkN1c3RvbUxvZzwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgaXMgYSBzdHJpbmcuIFRoaXMgc3RyaW5nIGlzCiAgICB1c2VkIHRvIGxvZyBlYWNoIHJlcXVlc3QgdG8gdGhlIGxvZyBmaWxlLiBJdCBjYW4gY29udGFpbiBsaXRlcmFsCiAgICBjaGFyYWN0ZXJzIGNvcGllZCBpbnRvIHRoZSBsb2cgZmlsZXMgYW5kIHRoZSBDLXN0eWxlIGNvbnRyb2wKICAgIGNoYXJhY3RlcnMgIlxuIiBhbmQgIlx0IiB0byByZXByZXNlbnQgbmV3LWxpbmVzIGFuZCB0YWJzLgogICAgTGl0ZXJhbCBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIHNob3VsZCBiZSBlc2NhcGVkIHdpdGgKICAgIGJhY2tzbGFzaGVzLjwvcD4KCiAgICA8cD5UaGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSByZXF1ZXN0IGl0c2VsZiBhcmUgbG9nZ2VkIGJ5CiAgICBwbGFjaW5nICI8Y29kZT4lPC9jb2RlPiIgZGlyZWN0aXZlcyBpbiB0aGUgZm9ybWF0IHN0cmluZywgd2hpY2ggYXJlCiAgICByZXBsYWNlZCBpbiB0aGUgbG9nIGZpbGUgYnkgdGhlIHZhbHVlcyBhcyBmb2xsb3dzOjwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPkZvcm1hdCZuYnNwO1N0cmluZzwvdGg+CiAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPgo8dHI+PHRkPjxjb2RlPiUlPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBwZXJjZW50IHNpZ24uPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVhPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkNsaWVudCBJUCBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0IChzZWUgdGhlCiAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZW1vdGVpcC5odG1sIj5tb2RfcmVtb3RlaXA8L2E+PC9jb2RlPiBtb2R1bGUpLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4le2N9YTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5VbmRlcmx5aW5nIHBlZXIgSVAgYWRkcmVzcyBvZiB0aGUgY29ubmVjdGlvbiAoc2VlIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmVtb3RlaXAuaHRtbCI+bW9kX3JlbW90ZWlwPC9hPjwvY29kZT4gbW9kdWxlKS48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JUE8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+TG9jYWwgSVAtYWRkcmVzcy48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JUI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U2l6ZSBvZiByZXNwb25zZSBpbiBieXRlcywgZXhjbHVkaW5nIEhUVFAgaGVhZGVycy48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JWI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U2l6ZSBvZiByZXNwb25zZSBpbiBieXRlcywgZXhjbHVkaW5nIEhUVFAgaGVhZGVycy4gSW4gQ0xGIGZvcm1hdCwgPGVtPmkuZS48L2VtPgogICAgICAgIGEgJzxjb2RlPi08L2NvZGU+JyByYXRoZXIgdGhhbiBhIDAgd2hlbiBubyBieXRlcyBhcmUgc2VudC48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8dmFyPlZBUk5BTUU8L3Zhcj59QzwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgY29va2llIDx2YXI+VkFSTkFNRTwvdmFyPiBpbiB0aGUgcmVxdWVzdCBzZW50CiAgICAgICAgdG8gdGhlIHNlcnZlci4gT25seSB2ZXJzaW9uIDAgY29va2llcyBhcmUgZnVsbHkgc3VwcG9ydGVkLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lRDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgdGltZSB0YWtlbiB0byBzZXJ2ZSB0aGUgcmVxdWVzdCwgaW4gbWljcm9zZWNvbmRzLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+VkFSTkFNRTwvdmFyPn1lPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjb250ZW50cyBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKICAgICAgICA8dmFyPlZBUk5BTUU8L3Zhcj4uPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVmPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkZpbGVuYW1lLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4laDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5SZW1vdGUgaG9zdG5hbWUuIFdpbGwgbG9nIHRoZSBJUCBhZGRyZXNzIGlmIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjaG9zdG5hbWVsb29rdXBzIj5Ib3N0bmFtZUxvb2t1cHM8L2E+PC9jb2RlPiBpcyBzZXQgdG8KICAgICAgICA8Y29kZT5PZmY8L2NvZGU+LCB3aGljaCBpcyB0aGUgZGVmYXVsdC4gSWYgaXQgbG9ncyB0aGUgaG9zdG5hbWUKICAgICAgICBmb3Igb25seSBhIGZldyBob3N0cywgeW91IHByb2JhYmx5IGhhdmUgYWNjZXNzIGNvbnRyb2wKICAgICAgICBkaXJlY3RpdmVzIG1lbnRpb25pbmcgdGhlbSBieSBuYW1lLiBTZWUgPGEgaHJlZj0ibW9kX2F1dGh6X2hvc3QuaHRtbCNyZXFob3N0Ij50aGUgUmVxdWlyZSBob3N0CiAgICAgICAgZG9jdW1lbnRhdGlvbjwvYT4uPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVIPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSByZXF1ZXN0IHByb3RvY29sLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+VkFSTkFNRTwvdmFyPn1pPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjb250ZW50cyBvZiA8Y29kZT48dmFyPlZBUk5BTUU8L3Zhcj46PC9jb2RlPiBoZWFkZXIgbGluZShzKQogICAgICAgIGluIHRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHNlcnZlci4gQ2hhbmdlcyBtYWRlIGJ5IG90aGVyCiAgICAgICAgbW9kdWxlcyAoZS5nLiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2hlYWRlcnMuaHRtbCI+bW9kX2hlYWRlcnM8L2E+PC9jb2RlPikgYWZmZWN0IHRoaXMuICBJZiB5b3UncmUKICAgICAgICBpbnRlcmVzdGVkIGluIHdoYXQgdGhlIHJlcXVlc3QgaGVhZGVyIHdhcyBwcmlvciB0byB3aGVuIG1vc3QKICAgICAgICBtb2R1bGVzIHdvdWxkIGhhdmUgbW9kaWZpZWQgaXQsIHVzZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NldGVudmlmLmh0bWwiPm1vZF9zZXRlbnZpZjwvYT48L2NvZGU+CiAgICAgICAgdG8gY29weSB0aGUgaGVhZGVyIGludG8gYW4gaW50ZXJuYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGxvZwogICAgICAgIHRoYXQgdmFsdWUgd2l0aCB0aGUgPGNvZGU+JXs8dmFyPlZBUk5BTUU8L3Zhcj59ZTwvY29kZT4gZGVzY3JpYmVkCiAgICAgICAgYWJvdmUuCiAgICAgICAgPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVrPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPk51bWJlciBvZiBrZWVwYWxpdmUgcmVxdWVzdHMgaGFuZGxlZCBvbiB0aGlzIGNvbm5lY3Rpb24uICBJbnRlcmVzdGluZyBpZgogICAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNrZWVwYWxpdmUiPktlZXBBbGl2ZTwvYT48L2NvZGU+IGlzIGJlaW5nIHVzZWQsIHNvIHRoYXQsCiAgICAgICAgICBmb3IgZXhhbXBsZSwgYSAnMScgbWVhbnMgdGhlIGZpcnN0IGtlZXBhbGl2ZSByZXF1ZXN0IGFmdGVyIHRoZSBpbml0aWFsCiAgICAgICAgICBvbmUsICcyJyB0aGUgc2Vjb25kLCBldGMuLi47CiAgICAgICAgICBvdGhlcndpc2UgdGhpcyBpcyBhbHdheXMgMCAoaW5kaWNhdGluZyB0aGUgaW5pdGlhbCByZXF1ZXN0KS48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JWw8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmVtb3RlIGxvZ25hbWUgKGZyb20gaWRlbnRkLCBpZiBzdXBwbGllZCkuIFRoaXMgd2lsbCByZXR1cm4gYQogICAgICAgIGRhc2ggdW5sZXNzIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaWRlbnQuaHRtbCI+bW9kX2lkZW50PC9hPjwvY29kZT4gaXMgcHJlc2VudCBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pZGVudC5odG1sI2lkZW50aXR5Y2hlY2siPklkZW50aXR5Q2hlY2s8L2E+PC9jb2RlPiBpcyBzZXQKICAgICAgICA8Y29kZT5PbjwvY29kZT4uPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVMPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSByZXF1ZXN0IGxvZyBJRCBmcm9tIHRoZSBlcnJvciBsb2cgKG9yICctJyBpZiBub3RoaW5nIGhhcyBiZWVuCiAgICAgICAgICAgIGxvZ2dlZCB0byB0aGUgZXJyb3IgbG9nIGZvciB0aGlzIHJlcXVlc3QpLiBMb29rIGZvciB0aGUKICAgICAgICAgICAgbWF0Y2hpbmcgZXJyb3IgbG9nIGxpbmUgdG8gc2VlIHdoYXQgcmVxdWVzdCBjYXVzZWQgd2hhdCBlcnJvci48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JW08L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHJlcXVlc3QgbWV0aG9kLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lezx2YXI+VkFSTkFNRTwvdmFyPn1uPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjb250ZW50cyBvZiBub3RlIDx2YXI+VkFSTkFNRTwvdmFyPiBmcm9tIGFub3RoZXIKICAgICAgICBtb2R1bGUuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7PHZhcj5WQVJOQU1FPC92YXI+fW88L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIDxjb2RlPjx2YXI+VkFSTkFNRTwvdmFyPjo8L2NvZGU+IGhlYWRlciBsaW5lKHMpCiAgICAgICAgaW4gdGhlIHJlcGx5LjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lcDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY2Fub25pY2FsIHBvcnQgb2YgdGhlIHNlcnZlciBzZXJ2aW5nIHRoZSByZXF1ZXN0LjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+Zm9ybWF0PC92YXI+fXA8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNhbm9uaWNhbCBwb3J0IG9mIHRoZSBzZXJ2ZXIgc2VydmluZyB0aGUgcmVxdWVzdCwgb3IgdGhlCiAgICAgICAgc2VydmVyJ3MgYWN0dWFsIHBvcnQsIG9yIHRoZSBjbGllbnQncyBhY3R1YWwgcG9ydC4gVmFsaWQgZm9ybWF0cwogICAgICAgIGFyZSA8Y29kZT5jYW5vbmljYWw8L2NvZGU+LCA8Y29kZT5sb2NhbDwvY29kZT4sIG9yIDxjb2RlPnJlbW90ZTwvY29kZT4uCiAgICAgICAgPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVQPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBwcm9jZXNzIElEIG9mIHRoZSBjaGlsZCB0aGF0IHNlcnZpY2VkIHRoZSByZXF1ZXN0LjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+Zm9ybWF0PC92YXI+fVA8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHByb2Nlc3MgSUQgb3IgdGhyZWFkIElEIG9mIHRoZSBjaGlsZCB0aGF0IHNlcnZpY2VkIHRoZQogICAgICAgIHJlcXVlc3QuICBWYWxpZCBmb3JtYXRzIGFyZSA8Y29kZT5waWQ8L2NvZGU+LCA8Y29kZT50aWQ8L2NvZGU+LAogICAgICAgIGFuZCA8Y29kZT5oZXh0aWQ8L2NvZGU+LiAgPGNvZGU+aGV4dGlkPC9jb2RlPiByZXF1aXJlcyBBUFIgMS4yLjAgb3IKICAgICAgICBoaWdoZXIuCiAgICAgICAgPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVxPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBxdWVyeSBzdHJpbmcgKHByZXBlbmRlZCB3aXRoIGEgPGNvZGU+PzwvY29kZT4gaWYgYSBxdWVyeQogICAgICAgIHN0cmluZyBleGlzdHMsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcpLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lcjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5GaXJzdCBsaW5lIG9mIHJlcXVlc3QuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVSPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBoYW5kbGVyIGdlbmVyYXRpbmcgdGhlIHJlc3BvbnNlIChpZiBhbnkpLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lczwvY29kZT48L3RkPgogICAgICAgIDx0ZD5TdGF0dXMuIEZvciByZXF1ZXN0cyB0aGF0IGhhdmUgYmVlbiBpbnRlcm5hbGx5IHJlZGlyZWN0ZWQsIHRoaXMgaXMKICAgICAgICB0aGUgc3RhdHVzIG9mIHRoZSA8ZW0+b3JpZ2luYWw8L2VtPiByZXF1ZXN0LiBVc2UgPGNvZGU+JSZndDtzPC9jb2RlPgogICAgICAgIGZvciB0aGUgZmluYWwgc3RhdHVzLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4ldDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaW1lIHRoZSByZXF1ZXN0IHdhcyByZWNlaXZlZCwgaW4gdGhlIGZvcm1hdCA8Y29kZT5bMTgvU2VwLzIwMTE6MTk6MTg6MjggLTA0MDBdPC9jb2RlPi4KICAgICAgICBUaGUgbGFzdCBudW1iZXIgaW5kaWNhdGVzIHRoZSB0aW1lem9uZSBvZmZzZXQgZnJvbSBHTVQ8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8dmFyPmZvcm1hdDwvdmFyPn10PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSB0aW1lLCBpbiB0aGUgZm9ybSBnaXZlbiBieSBmb3JtYXQsIHdoaWNoIHNob3VsZCBiZSBpbgogICAgICAgIGFuIGV4dGVuZGVkIDxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPiBmb3JtYXQgKHBvdGVudGlhbGx5IGxvY2FsaXplZCkuCiAgICAgICAgSWYgdGhlIGZvcm1hdCBzdGFydHMgd2l0aCA8Y29kZT5iZWdpbjo8L2NvZGU+IChkZWZhdWx0KSB0aGUgdGltZSBpcyB0YWtlbgogICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlcXVlc3QgcHJvY2Vzc2luZy4gSWYgaXQgc3RhcnRzIHdpdGgKICAgICAgICA8Y29kZT5lbmQ6PC9jb2RlPiBpdCBpcyB0aGUgdGltZSB3aGVuIHRoZSBsb2cgZW50cnkgZ2V0cyB3cml0dGVuLAogICAgICAgIGNsb3NlIHRvIHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgcHJvY2Vzc2luZy4gSW4gYWRkaXRpb24gdG8gdGhlIGZvcm1hdHMKICAgICAgICBzdXBwb3J0ZWQgYnkgPGNvZGU+c3RyZnRpbWUoMyk8L2NvZGU+LCB0aGUgZm9sbG93aW5nIGZvcm1hdCB0b2tlbnMgYXJlCiAgICAgICAgc3VwcG9ydGVkOgogICAgICAgIDx0YWJsZT4KICAgICAgICA8dHI+PHRkPjxjb2RlPnNlYzwvY29kZT48L3RkPjx0ZD5udW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2g8L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD48Y29kZT5tc2VjPC9jb2RlPjwvdGQ+PHRkPm51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIEVwb2NoPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+dXNlYzwvY29kZT48L3RkPjx0ZD5udW1iZXIgb2YgbWljcm9zZWNvbmRzIHNpbmNlIHRoZSBFcG9jaDwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPm1zZWNfZnJhYzwvY29kZT48L3RkPjx0ZD5taWxsaXNlY29uZCBmcmFjdGlvbjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPnVzZWNfZnJhYzwvY29kZT48L3RkPjx0ZD5taWNyb3NlY29uZCBmcmFjdGlvbjwvdGQ+PC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICAgIFRoZXNlIHRva2VucyBjYW4gbm90IGJlIGNvbWJpbmVkIHdpdGggZWFjaCBvdGhlciBvciA8Y29kZT5zdHJmdGltZSgzKTwvY29kZT4KICAgICAgICBmb3JtYXR0aW5nIGluIHRoZSBzYW1lIGZvcm1hdCBzdHJpbmcuIFlvdSBjYW4gdXNlIG11bHRpcGxlCiAgICAgICAgPGNvZGU+JXs8dmFyPmZvcm1hdDwvdmFyPn10PC9jb2RlPiB0b2tlbnMgaW5zdGVhZC4KICAgICAgICA8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JVQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHRpbWUgdGFrZW4gdG8gc2VydmUgdGhlIHJlcXVlc3QsIGluIHNlY29uZHMuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7PHZhcj5VTklUPC92YXI+fVQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHRpbWUgdGFrZW4gdG8gc2VydmUgdGhlIHJlcXVlc3QsIGluIGEgdGltZSB1bml0IGdpdmVuIGJ5CiAgICAgICAgPGNvZGU+VU5JVDwvY29kZT4uIFZhbGlkIHVuaXRzIGFyZSA8Y29kZT5tczwvY29kZT4gZm9yIG1pbGxpc2Vjb25kcywKICAgICAgICA8Y29kZT51czwvY29kZT4gZm9yIG1pY3Jvc2Vjb25kcywgYW5kIDxjb2RlPnM8L2NvZGU+IGZvciBzZWNvbmRzLgogICAgICAgIFVzaW5nIDxjb2RlPnM8L2NvZGU+IGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBhcyA8Y29kZT4lVDwvY29kZT4KICAgICAgICB3aXRob3V0IGFueSBmb3JtYXQ7IHVzaW5nIDxjb2RlPnVzPC9jb2RlPiBnaXZlcyB0aGUgc2FtZSByZXN1bHQKICAgICAgICBhcyA8Y29kZT4lRDwvY29kZT4uIENvbWJpbmluZyA8Y29kZT4lVDwvY29kZT4gd2l0aCBhIHVuaXQgaXMKICAgICAgICBhdmFpbGFibGUgaW4gMi40LjEzIGFuZCBsYXRlci48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmVtb3RlIHVzZXIgaWYgdGhlIHJlcXVlc3Qgd2FzIGF1dGhlbnRpY2F0ZWQuIE1heSBiZSBib2d1cyBpZiByZXR1cm4gc3RhdHVzCiAgICAgICAgKDxjb2RlPiVzPC9jb2RlPikgaXMgNDAxICh1bmF1dGhvcml6ZWQpLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lVTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgVVJMIHBhdGggcmVxdWVzdGVkLCBub3QgaW5jbHVkaW5nIGFueSBxdWVyeSBzdHJpbmcuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV2PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjYW5vbmljYWwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT4KICAgICAgICBvZiB0aGUgc2VydmVyIHNlcnZpbmcgdGhlIHJlcXVlc3QuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVWPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBzZXJ2ZXIgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjdXNlY2Fub25pY2FsbmFtZSI+VXNlQ2Fub25pY2FsTmFtZTwvYT48L2NvZGU+IHNldHRpbmcuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVYPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkNvbm5lY3Rpb24gc3RhdHVzIHdoZW4gcmVzcG9uc2UgaXMgY29tcGxldGVkOgoKICAgICAgICA8dGFibGU+CiAgICAgICAgCiAgICAgICAgPHRyPjx0ZD48Y29kZT5YPC9jb2RlPiA9PC90ZD4KICAgICAgICAgICAgPHRkPkNvbm5lY3Rpb24gYWJvcnRlZCBiZWZvcmUgdGhlIHJlc3BvbnNlIGNvbXBsZXRlZC48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD48Y29kZT4rPC9jb2RlPiA9PC90ZD4KICAgICAgICAgICAgPHRkPkNvbm5lY3Rpb24gbWF5IGJlIGtlcHQgYWxpdmUgYWZ0ZXIgdGhlIHJlc3BvbnNlIGlzCiAgICAgICAgICAgIHNlbnQuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+LTwvY29kZT4gPSA8L3RkPgogICAgICAgICAgICA8dGQ+Q29ubmVjdGlvbiB3aWxsIGJlIGNsb3NlZCBhZnRlciB0aGUgcmVzcG9uc2UgaXMKICAgICAgICAgICAgc2VudC48L3RkPjwvdHI+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVJPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkJ5dGVzIHJlY2VpdmVkLCBpbmNsdWRpbmcgcmVxdWVzdCBhbmQgaGVhZGVycy4gQ2Fubm90IGJlIHplcm8uCiAgICAgICAgWW91IG5lZWQgdG8gZW5hYmxlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbG9naW8uaHRtbCI+bW9kX2xvZ2lvPC9hPjwvY29kZT4gdG8gdXNlIHRoaXMuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVPPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkJ5dGVzIHNlbnQsIGluY2x1ZGluZyBoZWFkZXJzLiBNYXkgYmUgemVybyBpbiByYXJlIGNhc2VzCiAgICAgICAgc3VjaCBhcyB3aGVuIGEgcmVxdWVzdCBpcyBhYm9ydGVkIGJlZm9yZSBhIHJlc3BvbnNlIGlzIHNlbnQuCiAgICAgICAgWW91IG5lZWQgdG8gZW5hYmxlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbG9naW8uaHRtbCI+bW9kX2xvZ2lvPC9hPjwvY29kZT4gdG8gdXNlIHRoaXMuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVTPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkJ5dGVzIHRyYW5zZmVycmVkIChyZWNlaXZlZCBhbmQgc2VudCksIGluY2x1ZGluZyByZXF1ZXN0IGFuZCBoZWFkZXJzLAogICAgICAgIGNhbm5vdCBiZSB6ZXJvLiBUaGlzIGlzIHRoZSBjb21iaW5hdGlvbiBvZiAlSSBhbmQgJU8uIFlvdSBuZWVkIHRvCiAgICAgICAgZW5hYmxlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbG9naW8uaHRtbCI+bW9kX2xvZ2lvPC9hPjwvY29kZT4gdG8gdXNlIHRoaXMuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV7PHZhcj5WQVJOQU1FPC92YXI+fV50aTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgPGNvZGU+PHZhcj5WQVJOQU1FPC92YXI+OjwvY29kZT4gdHJhaWxlciBsaW5lKHMpCiAgICAgICAgaW4gdGhlIHJlcXVlc3Qgc2VudCB0byB0aGUgc2VydmVyLiAgPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7PHZhcj5WQVJOQU1FPC92YXI+fV50bzwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgPGNvZGU+PHZhcj5WQVJOQU1FPC92YXI+OjwvY29kZT4gdHJhaWxlciBsaW5lKHMpCiAgICAgICAgaW4gdGhlIHJlc3BvbnNlIHNlbnQgZnJvbSB0aGUgc2VydmVyLiAgPC90ZD48L3RyPgo8L3RhYmxlPgoKICAgIDxoMz48YSBuYW1lPSJtb2RpZmllcnMiIGlkPSJtb2RpZmllcnMiPk1vZGlmaWVyczwvYT48L2gzPgoKICAgICAgPHA+UGFydGljdWxhciBpdGVtcyBjYW4gYmUgcmVzdHJpY3RlZCB0byBwcmludCBvbmx5IGZvcgogICAgICByZXNwb25zZXMgd2l0aCBzcGVjaWZpYyBIVFRQIHN0YXR1cyBjb2RlcyBieSBwbGFjaW5nIGEKICAgICAgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RhdHVzIGNvZGVzIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUKICAgICAgIiUiLiBUaGUgc3RhdHVzIGNvZGUgbGlzdCBtYXkgYmUgcHJlY2VkZWQgYnkgYSAiPGNvZGU+ITwvY29kZT4iIHRvCiAgICAgIGluZGljYXRlIG5lZ2F0aW9uLjwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPkZvcm1hdCBTdHJpbmc8L3RoPgogICAgPHRoPk1lYW5pbmc8L3RoPjwvdHI+Cjx0cj4KICAgIDx0ZD48Y29kZT4lNDAwLDUwMXtVc2VyLWFnZW50fWk8L2NvZGU+PC90ZD4KICAgIDx0ZD5Mb2dzIDxjb2RlPlVzZXItYWdlbnQ8L2NvZGU+IG9uIDQwMCBlcnJvcnMgYW5kIDUwMSBlcnJvcnMgb25seS4gRm9yCiAgICAgIG90aGVyIHN0YXR1cyBjb2RlcywgdGhlIGxpdGVyYWwgc3RyaW5nIDxjb2RlPiItIjwvY29kZT4gd2lsbCBiZQogICAgICBsb2dnZWQuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiUhMjAwLDMwNCwzMDJ7UmVmZXJlcn1pPC9jb2RlPjwvdGQ+CiAgICA8dGQ+TG9ncyA8Y29kZT5SZWZlcmVyPC9jb2RlPiBvbiBhbGwgcmVxdWVzdHMgdGhhdCBkbwogICAgPGVtPm5vdDwvZW0+IHJldHVybiBvbmUgb2YgdGhlIHRocmVlIHNwZWNpZmllZCBjb2RlcywKICAgICI8Y29kZT4tPC9jb2RlPiIgb3RoZXJ3aXNlLgogICAgPC90ZD48L3RyPgo8L3RhYmxlPgoKICAgICAgPHA+VGhlIG1vZGlmaWVycyAiJmx0OyIgYW5kICImZ3Q7IiBjYW4gYmUgdXNlZCBmb3IgcmVxdWVzdHMgdGhhdAogICAgICBoYXZlIGJlZW4gaW50ZXJuYWxseSByZWRpcmVjdGVkIHRvIGNob29zZSB3aGV0aGVyIHRoZSBvcmlnaW5hbAogICAgICBvciBmaW5hbCAocmVzcGVjdGl2ZWx5KSByZXF1ZXN0IHNob3VsZCBiZSBjb25zdWx0ZWQuICBCeQogICAgICBkZWZhdWx0LCB0aGUgPGNvZGU+JTwvY29kZT4gZGlyZWN0aXZlcyA8Y29kZT4lcywgJVUsICVULAogICAgICAlRCw8L2NvZGU+IGFuZCA8Y29kZT4lcjwvY29kZT4gbG9vayBhdCB0aGUgb3JpZ2luYWwgcmVxdWVzdAogICAgICB3aGlsZSBhbGwgb3RoZXJzIGxvb2sgYXQgdGhlIGZpbmFsIHJlcXVlc3QuICBTbyBmb3IgZXhhbXBsZSwKICAgICAgPGNvZGU+JSZndDtzPC9jb2RlPiBjYW4gYmUgdXNlZCB0byByZWNvcmQgdGhlIGZpbmFsIHN0YXR1cyBvZgogICAgICB0aGUgcmVxdWVzdCBhbmQgPGNvZGU+JSZsdDt1PC9jb2RlPiBjYW4gYmUgdXNlZCB0byByZWNvcmQgdGhlCiAgICAgIG9yaWdpbmFsIGF1dGhlbnRpY2F0ZWQgdXNlciBvbiBhIHJlcXVlc3QgdGhhdCBpcyBpbnRlcm5hbGx5CiAgICAgIHJlZGlyZWN0ZWQgdG8gYW4gdW5hdXRoZW50aWNhdGVkIHJlc291cmNlLjwvcD4KCiAgICAKCiAgICA8aDM+PGEgbmFtZT0iZm9ybWF0LW5vdGVzIiBpZD0iZm9ybWF0LW5vdGVzIj5Gb3JtYXQgTm90ZXM8L2E+PC9oMz4KCiAgICAgIDxwPkZvciBzZWN1cml0eSByZWFzb25zLCBzdGFydGluZyB3aXRoIHZlcnNpb24gMi4wLjQ2LAogICAgICBub24tcHJpbnRhYmxlIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gPGNvZGU+JXI8L2NvZGU+LAogICAgICA8Y29kZT4laTwvY29kZT4gYW5kIDxjb2RlPiVvPC9jb2RlPiBhcmUgZXNjYXBlZCB1c2luZwogICAgICA8Y29kZT5ceDx2YXI+aGg8L3Zhcj48L2NvZGU+IHNlcXVlbmNlcywgd2hlcmUgPHZhcj5oaDwvdmFyPgogICAgICBzdGFuZHMgZm9yIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmF3CiAgICAgIGJ5dGUuIEV4Y2VwdGlvbnMgZnJvbSB0aGlzIHJ1bGUgYXJlIDxjb2RlPiI8L2NvZGU+IGFuZAogICAgICA8Y29kZT5cPC9jb2RlPiwgd2hpY2ggYXJlIGVzY2FwZWQgYnkgcHJlcGVuZGluZyBhIGJhY2tzbGFzaCwgYW5kCiAgICAgIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSB3cml0dGVuIGluIHRoZWlyIEMtc3R5bGUKICAgICAgbm90YXRpb24gKDxjb2RlPlxuPC9jb2RlPiwgPGNvZGU+XHQ8L2NvZGU+LCBldGMpLiAgSW4gdmVyc2lvbnMKICAgICAgcHJpb3IgdG8gMi4wLjQ2LCBubyBlc2NhcGluZyB3YXMgcGVyZm9ybWVkIG9uIHRoZXNlIHN0cmluZ3Mgc28KICAgICAgeW91IGhhZCB0byBiZSBxdWl0ZSBjYXJlZnVsIHdoZW4gZGVhbGluZyB3aXRoIHJhdyBsb2cgZmlsZXMuPC9wPgoKICAgICAgPHA+U2luY2UgaHR0cGQgMi4wLCB1bmxpa2UgMS4zLCB0aGUgPGNvZGU+JWI8L2NvZGU+IGFuZAogICAgICA8Y29kZT4lQjwvY29kZT4gZm9ybWF0IHN0cmluZ3MgZG8gbm90IHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mCiAgICAgIGJ5dGVzIHNlbnQgdG8gdGhlIGNsaWVudCwgYnV0IHNpbXBseSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUKICAgICAgSFRUUCByZXNwb25zZSAod2hpY2ggd2lsbCBkaWZmZXIsIGZvciBpbnN0YW5jZSwgaWYgdGhlCiAgICAgIGNvbm5lY3Rpb24gaXMgYWJvcnRlZCwgb3IgaWYgU1NMIGlzIHVzZWQpLiAgVGhlIDxjb2RlPiVPPC9jb2RlPgogICAgICBmb3JtYXQgcHJvdmlkZWQgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9sb2dpby5odG1sIj5tb2RfbG9naW88L2E+PC9jb2RlPiB3aWxsIGxvZyB0aGUKICAgICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuPC9wPgoKICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+CiAgICAgIDxwPk5vdGU6IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gaXMgaW1wbGVtZW50ZWQgYXMgYQogICAgICBxdWljay1oYW5kbGVyIGFuZCBub3QgYXMgYSBzdGFuZGFyZCBoYW5kbGVyLiBUaGVyZWZvcmUsIHRoZQogICAgICA8Y29kZT4lUjwvY29kZT4gZm9ybWF0IHN0cmluZyB3aWxsIG5vdCByZXR1cm4gYW55IGhhbmRsZXIKICAgICAgaW5mb3JtYXRpb24gd2hlbiBjb250ZW50IGNhY2hpbmcgaXMgaW52b2x2ZWQuPC9wPgogICAgICA8L2Rpdj4KCiAgICAKCiAgICA8aDM+PGEgbmFtZT0iZXhhbXBsZXMiIGlkPSJleGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9oMz4KCiAgICAgIDxwPlNvbWUgY29tbW9ubHkgdXNlZCBsb2cgZm9ybWF0IHN0cmluZ3MgYXJlOjwvcD4KCiAgICAgIDxkbD4KICAgICAgICA8ZHQ+Q29tbW9uIExvZyBGb3JtYXQgKENMRik8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiI8L2NvZGU+PC9kZD4KCiAgICAgICAgPGR0PkNvbW1vbiBMb2cgRm9ybWF0IHdpdGggVmlydHVhbCBIb3N0PC9kdD4KICAgICAgICA8ZGQ+PGNvZGU+IiV2ICVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiPC9jb2RlPjwvZGQ+CgogICAgICAgIDxkdD5OQ1NBIGV4dGVuZGVkL2NvbWJpbmVkIGxvZyBmb3JtYXQ8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiBcIiV7UmVmZXJlcn1pXCIKICAgICAgICBcIiV7VXNlci1hZ2VudH1pXCIiPC9jb2RlPjwvZGQ+CgogICAgICAgIDxkdD5SZWZlcmVyIGxvZyBmb3JtYXQ8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJXtSZWZlcmVyfWkgLSZndDsgJVUiPC9jb2RlPjwvZGQ+CgogICAgICAgIDxkdD5BZ2VudCAoQnJvd3NlcikgbG9nIGZvcm1hdDwvZHQ+CiAgICAgICAgPGRkPjxjb2RlPiIle1VzZXItYWdlbnR9aSI8L2NvZGU+PC9kZD4KICAgICAgPC9kbD4KCiAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSA8Y29kZT4le2Zvcm1hdH10PC9jb2RlPiBkaXJlY3RpdmUgbXVsdGlwbGUKICAgICAgdGltZXMgdG8gYnVpbGQgdXAgYSB0aW1lIGZvcm1hdCB1c2luZyB0aGUgZXh0ZW5kZWQgZm9ybWF0IHRva2VucwogICAgICBsaWtlIDxjb2RlPm1zZWNfZnJhYzwvY29kZT46PC9wPgogICAgICA8ZGw+CjxkdD5UaW1lc3RhbXAgaW5jbHVkaW5nIG1pbGxpc2Vjb25kczwvZHQ+CjxkZD48Y29kZT4iJXslZC8lYi8lWSAlVH10LiV7bXNlY19mcmFjfXQgJXslen10IjwvY29kZT48L2RkPgoKICAgICAgPC9kbD4KCiAgICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic2VjdXJpdHkiIGlkPSJzZWN1cml0eSI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9oMj4KICAgIDxwPlNlZSB0aGUgPGEgaHJlZj0iLi4vbWlzYy9zZWN1cml0eV90aXBzLmh0bWwjc2VydmVycm9vdCI+c2VjdXJpdHkgdGlwczwvYT4KICAgIGRvY3VtZW50IGZvciBkZXRhaWxzIG9uIHdoeSB5b3VyIHNlY3VyaXR5IGNvdWxkIGJlIGNvbXByb21pc2VkCiAgICBpZiB0aGUgZGlyZWN0b3J5IHdoZXJlIGxvZ2ZpbGVzIGFyZSBzdG9yZWQgaXMgd3JpdGFibGUgYnkKICAgIGFueW9uZSBvdGhlciB0aGFuIHRoZSB1c2VyIHRoYXQgc3RhcnRzIHRoZSBzZXJ2ZXIuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQnVmZmVyZWRMb2dzIiBpZD0iQnVmZmVyZWRMb2dzIj5CdWZmZXJlZExvZ3M8L2E+IDxhIG5hbWU9ImJ1ZmZlcmVkbG9ncyIgaWQ9ImJ1ZmZlcmVkbG9ncyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QnVmZmVyIGxvZyBlbnRyaWVzIGluIG1lbW9yeSBiZWZvcmUgd3JpdGluZyB0byBkaXNrPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkJ1ZmZlcmVkTG9ncyBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+QnVmZmVyZWRMb2dzIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2xvZ19jb25maWc8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QnVmZmVyZWRMb2dzPC9jb2RlPiBkaXJlY3RpdmUgY2F1c2VzCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCI+bW9kX2xvZ19jb25maWc8L2E+PC9jb2RlPiB0byBzdG9yZSBzZXZlcmFsIGxvZyBlbnRyaWVzIGluCiAgICBtZW1vcnkgYW5kIHdyaXRlIHRoZW0gdG9nZXRoZXIgdG8gZGlzaywgcmF0aGVyIHRoYW4gd3JpdGluZyB0aGVtCiAgICBhZnRlciBlYWNoIHJlcXVlc3QuICBPbiBzb21lIHN5c3RlbXMsIHRoaXMgbWF5IHJlc3VsdCBpbiBtb3JlCiAgICBlZmZpY2llbnQgZGlzayBhY2Nlc3MgYW5kIGhlbmNlIGhpZ2hlciBwZXJmb3JtYW5jZS4gIEl0IG1heSBiZQogICAgc2V0IG9ubHkgb25jZSBmb3IgdGhlIGVudGlyZSBzZXJ2ZXI7IGl0IGNhbm5vdCBiZSBjb25maWd1cmVkCiAgICBwZXIgdmlydHVhbC1ob3N0LjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGlzIGRpcmVjdGl2ZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gYXMgYSBjcmFzaCBtaWdodAogICAgY2F1c2UgbG9zcyBvZiBsb2dnaW5nIGRhdGEuPC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQ3VzdG9tTG9nIiBpZD0iQ3VzdG9tTG9nIj5DdXN0b21Mb2c8L2E+IDxhIG5hbWU9ImN1c3RvbWxvZyIgaWQ9ImN1c3RvbWxvZyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U2V0cyBmaWxlbmFtZSBhbmQgZm9ybWF0IG9mIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkN1c3RvbUxvZyAgPHZhcj5maWxlPC92YXI+fDx2YXI+cGlwZTwvdmFyPgo8dmFyPmZvcm1hdDwvdmFyPnw8dmFyPm5pY2tuYW1lPC92YXI+CltlbnY9WyFdPHZhcj5lbnZpcm9ubWVudC12YXJpYWJsZTwvdmFyPnwKZXhwcj08dmFyPmV4cHJlc3Npb248L3Zhcj5dPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkN1c3RvbUxvZzwvY29kZT4gZGlyZWN0aXZlIGlzIHVzZWQgdG8KICAgIGxvZyByZXF1ZXN0cyB0byB0aGUgc2VydmVyLiBBIGxvZyBmb3JtYXQgaXMgc3BlY2lmaWVkLCBhbmQgdGhlCiAgICBsb2dnaW5nIGNhbiBvcHRpb25hbGx5IGJlIG1hZGUgY29uZGl0aW9uYWwgb24gcmVxdWVzdAogICAgY2hhcmFjdGVyaXN0aWNzIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy48L3A+CgogICAgPHA+VGhlIGZpcnN0IGFyZ3VtZW50LCB3aGljaCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIHRvIHdoaWNoCiAgICB0aGUgbG9ncyB3aWxsIGJlIHdyaXR0ZW4sIGNhbiB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3bwogICAgdHlwZXMgb2YgdmFsdWVzOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48dmFyPmZpbGU8L3Zhcj48L2R0PgogICAgICA8ZGQ+QSBmaWxlbmFtZSwgcmVsYXRpdmUgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjc2VydmVycm9vdCI+U2VydmVyUm9vdDwvYT48L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PHZhcj5waXBlPC92YXI+PC9kdD4KICAgICAgPGRkPlRoZSBwaXBlIGNoYXJhY3RlciAiPGNvZGU+fDwvY29kZT4iLCBmb2xsb3dlZCBieSB0aGUgcGF0aAogICAgICB0byBhIHByb2dyYW0gdG8gcmVjZWl2ZSB0aGUgbG9nIGluZm9ybWF0aW9uIG9uIGl0cyBzdGFuZGFyZAogICAgICBpbnB1dC4gU2VlIHRoZSBub3RlcyBvbiA8YSBocmVmPSIuLi9sb2dzLmh0bWwjcGlwZWQiPnBpcGVkIGxvZ3M8L2E+CiAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPlNlY3VyaXR5OjwvaDM+CiAgICAgIDxwPklmIGEgcHJvZ3JhbSBpcyB1c2VkLCB0aGVuIGl0IHdpbGwgYmUgcnVuIGFzIHRoZSB1c2VyIHdobwogICAgICBzdGFydGVkIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+LiBUaGlzIHdpbGwgYmUgcm9vdCBpZiB0aGUgc2VydmVyIHdhcwogICAgICBzdGFydGVkIGJ5IHJvb3Q7IGJlIHN1cmUgdGhhdCB0aGUgcHJvZ3JhbSBpcyBzZWN1cmUuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPk5vdGU8L2gzPgogICAgICAgIDxwPldoZW4gZW50ZXJpbmcgYSBmaWxlIHBhdGggb24gbm9uLVVuaXggcGxhdGZvcm1zLCBjYXJlIHNob3VsZCBiZSB0YWtlbgogICAgICAgIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgZm9yd2FyZCBzbGFzaGVkIGFyZSB1c2VkIGV2ZW4gdGhvdWdoIHRoZSBwbGF0Zm9ybQogICAgICAgIG1heSBhbGxvdyB0aGUgdXNlIG9mIGJhY2sgc2xhc2hlcy4gSW4gZ2VuZXJhbCBpdCBpcyBhIGdvb2QgaWRlYSB0byBhbHdheXMKICAgICAgICB1c2UgZm9yd2FyZCBzbGFzaGVzIHRocm91Z2hvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuPC9wPgogICAgICA8L2Rpdj48L2RkPgogICAgPC9kbD4KCiAgICA8cD5UaGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB3aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKICAgIGxvZyBmaWxlLiBJdCBjYW4gc3BlY2lmeSBlaXRoZXIgYSA8dmFyPm5pY2tuYW1lPC92YXI+IGRlZmluZWQgYnkKICAgIGEgcHJldmlvdXMgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvZ2Zvcm1hdCI+TG9nRm9ybWF0PC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSwgb3IgaXQgY2FuIGJlIGFuIGV4cGxpY2l0IDx2YXI+Zm9ybWF0PC92YXI+IHN0cmluZyBhcwogICAgZGVzY3JpYmVkIGluIHRoZSA8YSBocmVmPSIjZm9ybWF0cyI+bG9nIGZvcm1hdHM8L2E+IHNlY3Rpb24uPC9wPgoKICAgIDxwPkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byBzZXRzIG9mIGRpcmVjdGl2ZXMgaGF2ZQogICAgZXhhY3RseSB0aGUgc2FtZSBlZmZlY3Q6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4jIEN1c3RvbUxvZyB3aXRoIGZvcm1hdCBuaWNrbmFtZQpMb2dGb3JtYXQgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiIGNvbW1vbgpDdXN0b21Mb2cgImxvZ3MvYWNjZXNzX2xvZyIgY29tbW9uCgojIEN1c3RvbUxvZyB3aXRoIGV4cGxpY2l0IGZvcm1hdCBzdHJpbmcKQ3VzdG9tTG9nICJsb2dzL2FjY2Vzc19sb2ciICIlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIjwvcHJlPgoKCiAgICA8cD5UaGUgdGhpcmQgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIGNvbnRyb2xzIHdoZXRoZXIgb3IKICAgIG5vdCB0byBsb2cgYSBwYXJ0aWN1bGFyIHJlcXVlc3QuIFRoZSBjb25kaXRpb24gY2FuIGJlIHRoZQogICAgcHJlc2VuY2Ugb3IgYWJzZW5jZSAoaW4gdGhlIGNhc2Ugb2YgYSAnPGNvZGU+ZW52PSE8dmFyPm5hbWU8L3Zhcj48L2NvZGU+JwogICAgY2xhdXNlKSBvZiBhIHBhcnRpY3VsYXIgdmFyaWFibGUgaW4gdGhlIHNlcnZlcgogICAgPGEgaHJlZj0iLi4vZW52Lmh0bWwiPmVudmlyb25tZW50PC9hPi4gQWx0ZXJuYXRpdmVseSwgdGhlIGNvbmRpdGlvbgogICAgY2FuIGJlIGV4cHJlc3NlZCBhcyBhcmJpdHJhcnkgYm9vbGVhbiA8YSBocmVmPSIuLi9leHByLmh0bWwiPmV4cHJlc3Npb248L2E+LiBJZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBzYXRpc2ZpZWQsIHRoZSByZXF1ZXN0CiAgICB3aWxsIG5vdCBiZSBsb2dnZWQuIFJlZmVyZW5jZXMgdG8gSFRUUCBoZWFkZXJzICBpbiB0aGUgZXhwcmVzc2lvbgogICAgd2lsbCBub3QgY2F1c2UgdGhlIGhlYWRlciBuYW1lcyB0byBiZSBhZGRlZCB0byB0aGUgVmFyeSBoZWFkZXIuPC9wPgoKICAgIDxwPkVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QKICAgIGJhc2lzIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NldGVudmlmLmh0bWwiPm1vZF9zZXRlbnZpZjwvYT48L2NvZGU+CiAgICBhbmQvb3IgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4gbW9kdWxlcy4gRm9yCiAgICBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgcmVxdWVzdHMgZm9yIGFsbCBHSUYKICAgIGltYWdlcyBvbiB5b3VyIHNlcnZlciBpbiBhIHNlcGFyYXRlIGxvZ2ZpbGUgYnV0IG5vdCBpbiB5b3VyIG1haW4KICAgIGxvZywgeW91IGNhbiB1c2U6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5TZXRFbnZJZiBSZXF1ZXN0X1VSSSBcLmdpZiQgZ2lmLWltYWdlCkN1c3RvbUxvZyAiZ2lmLXJlcXVlc3RzLmxvZyIgY29tbW9uIGVudj1naWYtaW1hZ2UKQ3VzdG9tTG9nICJub25naWYtcmVxdWVzdHMubG9nIiBjb21tb24gZW52PSFnaWYtaW1hZ2U8L3ByZT4KCgogICAgPHA+T3IsIHRvIHJlcHJvZHVjZSB0aGUgYmVoYXZpb3Igb2YgdGhlIG9sZCBSZWZlcmVySWdub3JlCiAgICBkaXJlY3RpdmUsIHlvdSBtaWdodCB1c2UgdGhlIGZvbGxvd2luZzo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlNldEVudklmIFJlZmVyZXIgZXhhbXBsZVwuY29tIGxvY2FscmVmZXJlcgpDdXN0b21Mb2cgInJlZmVyZXIubG9nIiByZWZlcmVyIGVudj0hbG9jYWxyZWZlcmVyPC9wcmU+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ikdsb2JhbExvZyIgaWQ9Ikdsb2JhbExvZyI+R2xvYmFsTG9nPC9hPiA8YSBuYW1lPSJnbG9iYWxsb2ciIGlkPSJnbG9iYWxsb2ciPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlNldHMgZmlsZW5hbWUgYW5kIGZvcm1hdCBvZiBsb2cgZmlsZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5HbG9iYWxMb2c8dmFyPmZpbGU8L3Zhcj58PHZhcj5waXBlPC92YXI+Cjx2YXI+Zm9ybWF0PC92YXI+fDx2YXI+bmlja25hbWU8L3Zhcj4KW2Vudj1bIV08dmFyPmVudmlyb25tZW50LXZhcmlhYmxlPC92YXI+fApleHByPTx2YXI+ZXhwcmVzc2lvbjwvdmFyPl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSBIVFRQIFNlcnZlciAyLjQuMTkgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HbG9iYWxMb2c8L2NvZGU+IGRpcmVjdGl2ZSBkZWZpbmVzIGEgbG9nIHNoYXJlZAogICAgICAgYnkgdGhlIG1haW4gc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5kIGFsbCBkZWZpbmVkIHZpcnR1YWwgaG9zdHMuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HbG9iYWxMb2c8L2NvZGU+IGRpcmVjdGl2ZSBpcyBpZGVudGljYWwgdG8KICAgIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+IGRpcmVjdGl2ZSwgYXBhcnQgZnJvbSB0aGUgZm9sbG93aW5nCiAgICBkaWZmZXJlbmNlczo8L3A+CiAgICA8dWw+CiAgICAgICA8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+R2xvYmFsTG9nPC9jb2RlPiBpcyBub3QgdmFsaWQgaW4gdmlydHVhbCBob3N0CiAgICAgICAgICAgIGNvbnRleHQuPC9saT4KICAgICAgIDxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HbG9iYWxMb2c8L2NvZGU+IGlzIHVzZWQgYnkgdmlydHVhbCBob3N0cyB0aGF0CiAgICAgICAgICAgZGVmaW5lIHRoZWlyIG93biA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+LCB1bmxpa2UgYSAKICAgICAgICAgICBnbG9iYWxseSBzcGVjaWZpZWQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Q3VzdG9tTG9nPC9jb2RlPi48L2xpPgogICAgPC91bD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMb2dGb3JtYXQiIGlkPSJMb2dGb3JtYXQiPkxvZ0Zvcm1hdDwvYT4gPGEgbmFtZT0ibG9nZm9ybWF0IiBpZD0ibG9nZm9ybWF0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZXNjcmliZXMgYSBmb3JtYXQgZm9yIHVzZSBpbiBhIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxvZ0Zvcm1hdCA8dmFyPmZvcm1hdDwvdmFyPnw8dmFyPm5pY2tuYW1lPC92YXI+Cls8dmFyPm5pY2tuYW1lPC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Mb2dGb3JtYXQgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGFjY2VzcyBsb2cKICAgIGZpbGUuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IGRpcmVjdGl2ZSBjYW4gdGFrZSBvbmUgb2YgdHdvCiAgICBmb3Jtcy4gSW4gdGhlIGZpcnN0IGZvcm0sIHdoZXJlIG9ubHkgb25lIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwKICAgIHRoaXMgZGlyZWN0aXZlIHNldHMgdGhlIGxvZyBmb3JtYXQgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IGxvZ3MKICAgIHNwZWNpZmllZCBpbiBzdWJzZXF1ZW50IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlRyYW5zZmVyTG9nPC9jb2RlPgogICAgZGlyZWN0aXZlcy4gVGhlIHNpbmdsZSBhcmd1bWVudCBjYW4gc3BlY2lmeSBhbiBleHBsaWNpdAogICAgPHZhcj5mb3JtYXQ8L3Zhcj4gYXMgZGlzY3Vzc2VkIGluIHRoZSA8YSBocmVmPSIjZm9ybWF0cyI+Y3VzdG9tIGxvZwogICAgZm9ybWF0czwvYT4gc2VjdGlvbiBhYm92ZS4gQWx0ZXJuYXRpdmVseSwgaXQgY2FuIHVzZSBhCiAgICA8dmFyPm5pY2tuYW1lPC92YXI+IHRvIHJlZmVyIHRvIGEgbG9nIGZvcm1hdCBkZWZpbmVkIGluIGEKICAgIHByZXZpb3VzIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxvZ0Zvcm1hdDwvY29kZT4gZGlyZWN0aXZlIGFzIGRlc2NyaWJlZAogICAgYmVsb3cuPC9wPgoKICAgIDxwPlRoZSBzZWNvbmQgZm9ybSBvZiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPgogICAgZGlyZWN0aXZlIGFzc29jaWF0ZXMgYW4gZXhwbGljaXQgPHZhcj5mb3JtYXQ8L3Zhcj4gd2l0aCBhCiAgICA8dmFyPm5pY2tuYW1lPC92YXI+LiBUaGlzIDx2YXI+bmlja25hbWU8L3Zhcj4gY2FuIHRoZW4gYmUgdXNlZCBpbgogICAgc3Vic2VxdWVudCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjY3VzdG9tbG9nIj5DdXN0b21Mb2c8L2E+PC9jb2RlPiBkaXJlY3RpdmVzCiAgICByYXRoZXIgdGhhbiByZXBlYXRpbmcgdGhlIGVudGlyZSBmb3JtYXQgc3RyaW5nLiBBCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IGRpcmVjdGl2ZSB0aGF0IGRlZmluZXMgYSBuaWNrbmFtZQogICAgPHN0cm9uZz5kb2VzIG5vdGhpbmcgZWxzZTwvc3Ryb25nPiAtLSB0aGF0IGlzLCBpdCA8ZW0+b25seTwvZW0+CiAgICBkZWZpbmVzIHRoZSBuaWNrbmFtZSwgaXQgZG9lc24ndCBhY3R1YWxseSBhcHBseSB0aGUgZm9ybWF0IGFuZCBtYWtlCiAgICBpdCB0aGUgZGVmYXVsdC4gVGhlcmVmb3JlLCBpdCB3aWxsIG5vdCBhZmZlY3Qgc3Vic2VxdWVudAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3RyYW5zZmVybG9nIj5UcmFuc2ZlckxvZzwvYT48L2NvZGU+IGRpcmVjdGl2ZXMuCiAgICBJbiBhZGRpdGlvbiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPiBjYW5ub3QgdXNlIG9uZSBuaWNrbmFtZQogICAgdG8gZGVmaW5lIGFub3RoZXIgbmlja25hbWUuIE5vdGUgdGhhdCB0aGUgbmlja25hbWUgc2hvdWxkIG5vdCBjb250YWluCiAgICBwZXJjZW50IHNpZ25zICg8Y29kZT4lPC9jb2RlPikuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TG9nRm9ybWF0ICIldiAlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIiB2aG9zdF9jb21tb248L3ByZT4KPC9kaXY+CiAgICAKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJUcmFuc2ZlckxvZyIgaWQ9IlRyYW5zZmVyTG9nIj5UcmFuc2ZlckxvZzwvYT4gPGEgbmFtZT0idHJhbnNmZXJsb2ciIGlkPSJ0cmFuc2ZlcmxvZyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U3BlY2lmeSBsb2NhdGlvbiBvZiBhIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlRyYW5zZmVyTG9nIDx2YXI+ZmlsZTwvdmFyPnw8dmFyPnBpcGU8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2xvZ19jb25maWc8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBoYXMgZXhhY3RseSB0aGUgc2FtZSBhcmd1bWVudHMgYW5kIGVmZmVjdCBhcwogICAgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjdXN0b21sb2ciPkN1c3RvbUxvZzwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGl0IGRvZXMgbm90IGFsbG93IHRoZSBsb2cgZm9ybWF0CiAgICB0byBiZSBzcGVjaWZpZWQgZXhwbGljaXRseSBvciBmb3IgY29uZGl0aW9uYWwgbG9nZ2luZyBvZiByZXF1ZXN0cy4KICAgIEluc3RlYWQsIHRoZSBsb2cgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIG1vc3QgcmVjZW50bHkgc3BlY2lmaWVkCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9nZm9ybWF0Ij5Mb2dGb3JtYXQ8L2E+PC9jb2RlPiBkaXJlY3RpdmUKICAgIHdoaWNoIGRvZXMgbm90IGRlZmluZSBhIG5pY2tuYW1lLiBDb21tb24gTG9nIEZvcm1hdCBpcyB1c2VkIGlmIG5vCiAgICBvdGhlciBmb3JtYXQgaGFzIGJlZW4gc3BlY2lmaWVkLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkxvZ0Zvcm1hdCAiJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiBcIiV7UmVmZXJlcn1pXCIgXCIle1VzZXItYWdlbnR9aVwiIgpUcmFuc2ZlckxvZyBsb2dzL2FjY2Vzc19sb2c8L3ByZT4KPC9kaXY+Cgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vdHIvbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=