PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5DYWNoaW5nIEd1aWRlIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WZXJzaW9uIDIuNDwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+Q2FjaGluZyBHdWlkZTwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9jYWNoaW5nLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2NhY2hpbmcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2NhY2hpbmcuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICA8cD5UaGlzIGRvY3VtZW50IHN1cHBsZW1lbnRzIHRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4sCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sIj5tb2RfZmlsZV9jYWNoZTwvYT48L2NvZGU+IGFuZCA8YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbi4KICAgIEl0IGRlc2NyaWJlcyBob3cgdG8gdXNlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIncyBjYWNoaW5nIGZlYXR1cmVzIHRvIGFjY2VsZXJhdGUgd2ViIGFuZAogICAgcHJveHkgc2VydmluZywgd2hpbGUgYXZvaWRpbmcgY29tbW9uIHByb2JsZW1zIGFuZCBtaXNjb25maWd1cmF0aW9ucy48L3A+CiAgPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNodHRwLWNhY2hpbmciPlRocmVlLXN0YXRlIFJGQzI2MTYgSFRUUCBjYWNoaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZXhhbXBsZXMiPkNhY2hlIFNldHVwIEV4YW1wbGVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc29jYWNoZS1jYWNoaW5nIj5HZW5lcmFsIFR3by1zdGF0ZSBLZXkvVmFsdWUgU2hhcmVkIE9iamVjdCBDYWNoaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZmlsZS1jYWNoaW5nIj5TcGVjaWFsaXplZCBGaWxlIENhY2hpbmc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZWN1cml0eSI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iaW50cm9kdWN0aW9uIiBpZD0iaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9oMj4KICAgIAogICAgCiAgICA8cD5UaGUgQXBhY2hlIEhUVFAgc2VydmVyIG9mZmVycyBhIHJhbmdlIG9mIGNhY2hpbmcgZmVhdHVyZXMgdGhhdAogICAgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzZXJ2ZXIgaW4gdmFyaW91cwogICAgd2F5cy48L3A+CgogICAgPGRsPgogICAgICAgIDxkdD5UaHJlZS1zdGF0ZSBSRkMyNjE2IEhUVFAgY2FjaGluZzwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4KICAgICAgICAgICAgYW5kIGl0cyBwcm92aWRlciBtb2R1bGVzCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4KICAgICAgICAgICAgcHJvdmlkZSBpbnRlbGxpZ2VudCwgSFRUUC1hd2FyZSBjYWNoaW5nLiBUaGUgY29udGVudCBpdHNlbGYgaXMgc3RvcmVkCiAgICAgICAgICAgIGluIHRoZSBjYWNoZSwgYW5kIG1vZF9jYWNoZSBhaW1zIHRvIGhvbm9yIGFsbCBvZiB0aGUgdmFyaW91cyBIVFRQCiAgICAgICAgICAgIGhlYWRlcnMgYW5kIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBjYWNoZWFiaWxpdHkgb2YgY29udGVudAogICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMy5odG1sIj5TZWN0aW9uCiAgICAgICAgICAgIDEzIG9mIFJGQzI2MTY8L2E+LgogICAgICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4KICAgICAgICAgICAgaXMgYWltZWQgYXQgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggY2FjaGluZyBjb25maWd1cmF0aW9ucywgd2hlcmUKICAgICAgICAgICAgeW91IGFyZSBkZWFsaW5nIHdpdGggcHJveGllZCBjb250ZW50LCBkeW5hbWljIGxvY2FsIGNvbnRlbnQgb3IKICAgICAgICAgICAgaGF2ZSBhIG5lZWQgdG8gc3BlZWQgdXAgYWNjZXNzIHRvIGxvY2FsIGZpbGVzIG9uIGEgcG90ZW50aWFsbHkKICAgICAgICAgICAgc2xvdyBkaXNrLgogICAgICAgIDwvZGQ+CgogICAgICAgIDxkdD5Ud28tc3RhdGUga2V5L3ZhbHVlIHNoYXJlZCBvYmplY3QgY2FjaGluZzwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgICAgICBUaGUgPGEgaHJlZj0ic29jYWNoZS5odG1sIj5zaGFyZWQgb2JqZWN0IGNhY2hlIEFQSTwvYT4gKHNvY2FjaGUpCiAgICAgICAgICAgIGFuZCBpdHMgcHJvdmlkZXIgbW9kdWxlcyBwcm92aWRlIGEKICAgICAgICAgICAgc2VydmVyIHdpZGUga2V5L3ZhbHVlIGJhc2VkIHNoYXJlZCBvYmplY3QgY2FjaGUuIFRoZXNlIG1vZHVsZXMKICAgICAgICAgICAgYXJlIGRlc2lnbmVkIHRvIGNhY2hlIGxvdyBsZXZlbCBkYXRhIHN1Y2ggYXMgU1NMIHNlc3Npb25zIGFuZAogICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscy4gQmFja2VuZHMgYWxsb3cgdGhlIGRhdGEgdG8gYmUgc3RvcmVkCiAgICAgICAgICAgIHNlcnZlciB3aWRlIGluIHNoYXJlZCBtZW1vcnksIG9yIGRhdGFjZW50ZXIgd2lkZSBpbiBhIGNhY2hlIHN1Y2gKICAgICAgICAgICAgYXMgbWVtY2FjaGUgb3IgZGlzdGNhY2hlLgogICAgICAgIDwvZGQ+CgogICAgICAgIDxkdD5TcGVjaWFsaXplZCBmaWxlIGNhY2hpbmc8L2R0PgogICAgICAgIDxkZD4KICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPgogICAgICAgICAgICBvZmZlcnMgdGhlIGFiaWxpdHkgdG8gcHJlLWxvYWQKICAgICAgICAgICAgZmlsZXMgaW50byBtZW1vcnkgb24gc2VydmVyIHN0YXJ0dXAsIGFuZCBjYW4gaW1wcm92ZSBhY2Nlc3MKICAgICAgICAgICAgdGltZXMgYW5kIHNhdmUgZmlsZSBoYW5kbGVzIG9uIGZpbGVzIHRoYXQgYXJlIGFjY2Vzc2VkIG9mdGVuLAogICAgICAgICAgICBhcyB0aGVyZSBpcyBubyBuZWVkIHRvIGdvIHRvIGRpc2sgb24gZWFjaCByZXF1ZXN0LgogICAgICAgIDwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRvIGdldCB0aGUgbW9zdCBmcm9tIHRoaXMgZG9jdW1lbnQsIHlvdSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aAogICAgdGhlIGJhc2ljcyBvZiBIVFRQLCBhbmQgaGF2ZSByZWFkIHRoZSBVc2VycycgR3VpZGVzIHRvCiAgICA8YSBocmVmPSJ1cmxtYXBwaW5nLmh0bWwiPk1hcHBpbmcgVVJMcyB0byB0aGUgRmlsZXN5c3RlbTwvYT4gYW5kCiAgICA8YSBocmVmPSJjb250ZW50LW5lZ290aWF0aW9uLmh0bWwiPkNvbnRlbnQgbmVnb3RpYXRpb248L2E+LjwvcD4KCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJodHRwLWNhY2hpbmciIGlkPSJodHRwLWNhY2hpbmciPlRocmVlLXN0YXRlIFJGQzI2MTYgSFRUUCBjYWNoaW5nPC9hPjwvaDI+CgogICAgCgogICAgPHRhYmxlIGNsYXNzPSJyZWxhdGVkIj48dHI+PHRoPlJlbGF0ZWQgTW9kdWxlczwvdGg+PHRoPlJlbGF0ZWQgRGlyZWN0aXZlczwvdGg+PC90cj48dHI+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCI+bW9kX2NhY2hlX2Rpc2s8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZW5hYmxlIj5DYWNoZUVuYWJsZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkaXNhYmxlIj5DYWNoZURpc2FibGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCN1c2VjYW5vbmljYWxuYW1lIj5Vc2VDYW5vbmljYWxOYW1lPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfbmVnb3RpYXRpb24uaHRtbCNjYWNoZW5lZ290aWF0ZWRkb2NzIj5DYWNoZU5lZ290aWF0ZWREb2NzPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+CgogICAgPHA+VGhlIEhUVFAgcHJvdG9jb2wgY29udGFpbnMgYnVpbHQgaW4gc3VwcG9ydCBmb3IgYW4gaW4tbGluZSBjYWNoaW5nCiAgICBtZWNoYW5pc20gCiAgICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEzLmh0bWwiPgogICAgZGVzY3JpYmVkIGJ5IHNlY3Rpb24gMTMgb2YgUkZDMjYxNjwvYT4sIGFuZCB0aGUKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBtb2R1bGUgY2FuIGJlIHVzZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKICAgIHRoaXMuPC9wPgoKICAgIDxwPlVubGlrZSBhIHNpbXBsZSB0d28gc3RhdGUga2V5L3ZhbHVlIGNhY2hlIHdoZXJlIHRoZSBjb250ZW50CiAgICBkaXNhcHBlYXJzIGNvbXBsZXRlbHkgd2hlbiBubyBsb25nZXIgZnJlc2gsIGFuIEhUVFAgY2FjaGUgaW5jbHVkZXMKICAgIGEgbWVjaGFuaXNtIHRvIHJldGFpbiBzdGFsZSBjb250ZW50LCBhbmQgdG8gYXNrIHRoZSBvcmlnaW4gc2VydmVyCiAgICB3aGV0aGVyIHRoaXMgc3RhbGUgY29udGVudCBoYXMgY2hhbmdlZCBhbmQgaWYgbm90LCBtYWtlIGl0IGZyZXNoCiAgICBhZ2Fpbi48L3A+CgogICAgPHA+QW4gZW50cnkgaW4gYW4gSFRUUCBjYWNoZSBleGlzdHMgaW4gb25lIG9mIHRocmVlIHN0YXRlczo8L3A+CgogICAgPGRsPgogICAgPGR0PkZyZXNoPC9kdD4KICAgIDxkZD4KICAgICAgICBJZiB0aGUgY29udGVudCBpcyBuZXcgZW5vdWdoICh5b3VuZ2VyIHRoYW4gaXRzIDxzdHJvbmc+ZnJlc2huZXNzCiAgICAgICAgbGlmZXRpbWU8L3N0cm9uZz4pLCBpdCBpcyBjb25zaWRlcmVkIDxzdHJvbmc+ZnJlc2g8L3N0cm9uZz4uIEFuCiAgICAgICAgSFRUUCBjYWNoZSBpcyBmcmVlIHRvIHNlcnZlIGZyZXNoIGNvbnRlbnQgd2l0aG91dCBtYWtpbmcgYW55CiAgICAgICAgY2FsbHMgdG8gdGhlIG9yaWdpbiBzZXJ2ZXIgYXQgYWxsLgogICAgPC9kZD4KICAgIDxkdD5TdGFsZTwvZHQ+CiAgICA8ZGQ+CiAgICAgICAgPHA+SWYgdGhlIGNvbnRlbnQgaXMgdG9vIG9sZCAob2xkZXIgdGhhbiBpdHMgPHN0cm9uZz5mcmVzaG5lc3MKICAgICAgICBsaWZldGltZTwvc3Ryb25nPiksIGl0IGlzIGNvbnNpZGVyZWQgPHN0cm9uZz5zdGFsZTwvc3Ryb25nPi4gQW4KICAgICAgICBIVFRQIGNhY2hlIHNob3VsZCBjb250YWN0IHRoZSBvcmlnaW4gc2VydmVyIGFuZCBjaGVjayB3aGV0aGVyCiAgICAgICAgdGhlIGNvbnRlbnQgaXMgc3RpbGwgZnJlc2ggYmVmb3JlIHNlcnZpbmcgc3RhbGUgY29udGVudCB0byBhCiAgICAgICAgY2xpZW50LiBUaGUgb3JpZ2luIHNlcnZlciB3aWxsIGVpdGhlciByZXNwb25kIHdpdGggcmVwbGFjZW1lbnQKICAgICAgICBjb250ZW50IGlmIG5vdCBzdGlsbCB2YWxpZCwgb3IgaWRlYWxseSwgdGhlIG9yaWdpbiBzZXJ2ZXIgd2lsbAogICAgICAgIHJlc3BvbmQgd2l0aCBhIGNvZGUgdG8gdGVsbCB0aGUgY2FjaGUgdGhlIGNvbnRlbnQgaXMgc3RpbGwKICAgICAgICBmcmVzaCwgd2l0aG91dCB0aGUgbmVlZCB0byBnZW5lcmF0ZSBvciBzZW5kIHRoZSBjb250ZW50IGFnYWluLgogICAgICAgIFRoZSBjb250ZW50IGJlY29tZXMgZnJlc2ggYWdhaW4gYW5kIHRoZSBjeWNsZSBjb250aW51ZXMuPC9wPgoKICAgICAgICA8cD5UaGUgSFRUUCBwcm90b2NvbCBkb2VzIGFsbG93IHRoZSBjYWNoZSB0byBzZXJ2ZSBzdGFsZSBkYXRhCiAgICAgICAgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzdWNoIGFzIHdoZW4gYW4gYXR0ZW1wdCB0byBmcmVzaGVuCiAgICAgICAgdGhlIGRhdGEgd2l0aCBhbiBvcmlnaW4gc2VydmVyIGhhcyBmYWlsZWQgd2l0aCBhIDV4eCBlcnJvciwgb3IKICAgICAgICB3aGVuIGFub3RoZXIgcmVxdWVzdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGZyZXNoZW5pbmcKICAgICAgICB0aGUgZ2l2ZW4gZW50cnkuIEluIHRoZXNlIGNhc2VzIGEgPGNvZGU+V2FybmluZzwvY29kZT4gaGVhZGVyCiAgICAgICAgaXMgYWRkZWQgdG8gdGhlIHJlc3BvbnNlLjwvcD4KICAgIDwvZGQ+CiAgICA8ZHQ+Tm9uIEV4aXN0ZW50PC9kdD4KICAgIDxkZD4KICAgICAgICBJZiB0aGUgY2FjaGUgZ2V0cyBmdWxsLCBpdCByZXNlcnZlcyB0aGUgb3B0aW9uIHRvIGRlbGV0ZSBjb250ZW50CiAgICAgICAgZnJvbSB0aGUgY2FjaGUgdG8gbWFrZSBzcGFjZS4gQ29udGVudCBjYW4gYmUgZGVsZXRlZCBhdCBhbnkgdGltZSwKICAgICAgICBhbmQgY2FuIGJlIHN0YWxlIG9yIGZyZXNoLiBUaGUgPGEgaHJlZj0icHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiPmh0Y2FjaGVjbGVhbjwvYT4gdG9vbCBjYW4gYmUKICAgICAgICBydW4gb24gYSBvbmNlIG9mZiBiYXNpcywgb3IgZGVwbG95ZWQgYXMgYSBkYWVtb24gdG8ga2VlcCB0aGUgc2l6ZQogICAgICAgIG9mIHRoZSBjYWNoZSB3aXRoaW4gdGhlIGdpdmVuIHNpemUsIG9yIHRoZSBnaXZlbiBudW1iZXIgb2YgaW5vZGVzLgogICAgICAgIFRoZSB0b29sIGF0dGVtcHRzIHRvIGRlbGV0ZSBzdGFsZSBjb250ZW50IGJlZm9yZSBhdHRlbXB0aW5nIHRvCiAgICAgICAgZGVsZXRlIGZyZXNoIGNvbnRlbnQuCiAgICA8L2RkPgogICAgPC9kbD4KCiAgICA8cD5GdWxsIGRldGFpbHMgb2YgaG93IEhUVFAgY2FjaGluZyB3b3JrcyBjYW4gYmUgZm91bmQgaW4KICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTMuaHRtbCI+CiAgICBTZWN0aW9uIDEzIG9mIFJGQzI2MTY8L2E+LjwvcD4KCiAgICA8aDM+SW50ZXJhY3Rpb24gd2l0aCB0aGUgU2VydmVyPC9oMz4KICAgICAgCgogICAgICA8cD5UaGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IG1vZHVsZSBob29rcyBpbnRvIHRoZSBzZXJ2ZXIgaW4gdHdvCiAgICAgIHBvc3NpYmxlIHBsYWNlcyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZXF1aWNraGFuZGxlciI+Q2FjaGVRdWlja0hhbmRsZXI8L2E+PC9jb2RlPiBkaXJlY3RpdmU6CiAgICAgIDwvcD4KCiAgICAgIDxkbD4KICAgICAgICA8ZHQ+UXVpY2sgaGFuZGxlciBwaGFzZTwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgICAgPHA+VGhpcyBwaGFzZSBoYXBwZW5zIHZlcnkgZWFybHkgb24gZHVyaW5nIHRoZSByZXF1ZXN0IHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAganVzdCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwYXJzZWQuIElmIHRoZSBjb250ZW50IGlzCiAgICAgICAgICAgICAgZm91bmQgd2l0aGluIHRoZSBjYWNoZSwgaXQgaXMgc2VydmVkIGltbWVkaWF0ZWx5IGFuZCBhbG1vc3QKICAgICAgICAgICAgICBhbGwgcmVxdWVzdCBwcm9jZXNzaW5nIGlzIGJ5cGFzc2VkLjwvcD4KCiAgICAgICAgICAgICAgPHA+SW4gdGhpcyBzY2VuYXJpbywgdGhlIGNhY2hlIGJlaGF2ZXMgYXMgaWYgaXQgaGFzIGJlZW4gImJvbHRlZAogICAgICAgICAgICAgIG9uIiB0byB0aGUgZnJvbnQgb2YgdGhlIHNlcnZlci48L3A+CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RlIG9mZmVycyB0aGUgYmVzdCBwZXJmb3JtYW5jZSwgYXMgdGhlIG1ham9yaXR5IG9mCiAgICAgICAgICAgICAgc2VydmVyIHByb2Nlc3NpbmcgaXMgYnlwYXNzZWQuIFRoaXMgbW9kZSBob3dldmVyIGFsc28gYnlwYXNzZXMgdGhlCiAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gcGhhc2VzIG9mIHNlcnZlciBwcm9jZXNzaW5nLCBzbwogICAgICAgICAgICAgIHRoaXMgbW9kZSBzaG91bGQgYmUgY2hvc2VuIHdpdGggY2FyZSB3aGVuIHRoaXMgaXMgaW1wb3J0YW50LjwvcD4KICAKICAgICAgICAgICAgICA8cD4gUmVxdWVzdHMgd2l0aCBhbiAiQXV0aG9yaXphdGlvbiIgaGVhZGVyIChmb3IgZXhhbXBsZSwgSFRUUCBCYXNpYwogICAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uKSBhcmUgbmVpdGhlciBjYWNoZWFibGUgbm9yIHNlcnZlZCBmcm9tIHRoZSBjYWNoZSAKICAgICAgICAgICAgICB3aGVuIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBpcyBydW5uaW5nIGluIHRoaXMgcGhhc2UuPC9wPgogICAgICAgICAgPC9kZD4KICAgICAgICAgIDxkdD5Ob3JtYWwgaGFuZGxlciBwaGFzZTwvZHQ+CiAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBwaGFzZSBoYXBwZW5zIGxhdGUgaW4gdGhlIHJlcXVlc3QgcHJvY2Vzc2luZywgYWZ0ZXIgYWxsCiAgICAgICAgICAgICAgdGhlIHJlcXVlc3QgcGhhc2VzIGhhdmUgY29tcGxldGVkLjwvcD4KCiAgICAgICAgICAgICAgPHA+SW4gdGhpcyBzY2VuYXJpbywgdGhlIGNhY2hlIGJlaGF2ZXMgYXMgaWYgaXQgaGFzIGJlZW4gImJvbHRlZAogICAgICAgICAgICAgIG9uIiB0byB0aGUgYmFjayBvZiB0aGUgc2VydmVyLjwvcD4KCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RlIG9mZmVycyB0aGUgbW9zdCBmbGV4aWJpbGl0eSwgYXMgdGhlIHBvdGVudGlhbCBleGlzdHMKICAgICAgICAgICAgICBmb3IgY2FjaGluZyB0byBvY2N1ciBhdCBhIHByZWNpc2VseSBjb250cm9sbGVkIHBvaW50IGluIHRoZSBmaWx0ZXIKICAgICAgICAgICAgICBjaGFpbiwgYW5kIGNhY2hlZCBjb250ZW50IGNhbiBiZSBmaWx0ZXJlZCBvciBwZXJzb25hbGl6ZWQgYmVmb3JlCiAgICAgICAgICAgICAgYmVpbmcgc2VudCB0byB0aGUgY2xpZW50LjwvcD4KICAgICAgICAgIDwvZGQ+CiAgICAgICAgPC9kbD4KCiAgICAgICAgPHA+SWYgdGhlIFVSTCBpcyBub3QgZm91bmQgd2l0aGluIHRoZSBjYWNoZSwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+CiAgICAgICAgd2lsbCBhZGQgYSA8YSBocmVmPSJmaWx0ZXIuaHRtbCI+ZmlsdGVyPC9hPiB0byB0aGUgZmlsdGVyIHN0YWNrIGluIG9yZGVyCiAgICAgICAgdG8gcmVjb3JkIHRoZSByZXNwb25zZSB0byB0aGUgY2FjaGUsIGFuZCB0aGVuIHN0YW5kIGRvd24sIGFsbG93aW5nIG5vcm1hbAogICAgICAgIHJlcXVlc3QgcHJvY2Vzc2luZyB0byBjb250aW51ZS4gSWYgdGhlIGNvbnRlbnQgaXMgZGV0ZXJtaW5lZCB0byBiZQogICAgICAgIGNhY2hlYWJsZSwgdGhlIGNvbnRlbnQgd2lsbCBiZSBzYXZlZCB0byB0aGUgY2FjaGUgZm9yIGZ1dHVyZSBzZXJ2aW5nLAogICAgICAgIG90aGVyd2lzZSB0aGUgY29udGVudCB3aWxsIGJlIGlnbm9yZWQuPC9wPgoKICAgICAgICA8cD5JZiB0aGUgY29udGVudCBmb3VuZCB3aXRoaW4gdGhlIGNhY2hlIGlzIHN0YWxlLCB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gbW9kdWxlIGNvbnZlcnRzIHRoZSByZXF1ZXN0IGludG8gYQogICAgICAgIDxzdHJvbmc+Y29uZGl0aW9uYWwgcmVxdWVzdDwvc3Ryb25nPi4gSWYgdGhlIG9yaWdpbiBzZXJ2ZXIgcmVzcG9uZHMgd2l0aAogICAgICAgIGEgbm9ybWFsIHJlc3BvbnNlLCB0aGUgbm9ybWFsIHJlc3BvbnNlIGlzIGNhY2hlZCwgcmVwbGFjaW5nIHRoZSBjb250ZW50CiAgICAgICAgYWxyZWFkeSBjYWNoZWQuIElmIHRoZSBvcmlnaW4gc2VydmVyIHJlc3BvbmRzIHdpdGggYSAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgcmVzcG9uc2UsIHRoZSBjb250ZW50IGlzIG1hcmtlZCBhcyBmcmVzaCBhZ2FpbiwgYW5kIHRoZSBjYWNoZWQgY29udGVudAogICAgICAgIGlzIHNlcnZlZCBieSB0aGUgZmlsdGVyIGluc3RlYWQgb2Ygc2F2aW5nIGl0LjwvcD4KICAgIAoKICAgIDxoMz5JbXByb3ZpbmcgQ2FjaGUgSGl0czwvaDM+CiAgICAgIAoKICAgICAgPHA+V2hlbiBhIHZpcnR1YWwgaG9zdCBpcyBrbm93biBieSBvbmUgb2YgbWFueSBkaWZmZXJlbnQgc2VydmVyIGFsaWFzZXMsCiAgICAgIGVuc3VyaW5nIHRoYXQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPiBpcwogICAgICBzZXQgdG8gPGNvZGU+T248L2NvZGU+IGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSB0aGUgcmF0aW8gb2YgY2FjaGUgaGl0cy4KICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBob3N0bmFtZSBvZiB0aGUgdmlydHVhbC1ob3N0IHNlcnZpbmcgdGhlIGNvbnRlbnQgaXMKICAgICAgdXNlZCB3aXRoaW4gdGhlIGNhY2hlIGtleS4gV2l0aCB0aGUgc2V0dGluZyBzZXQgdG8gPGNvZGU+T248L2NvZGU+CiAgICAgIHZpcnR1YWwtaG9zdHMgd2l0aCBtdWx0aXBsZSBzZXJ2ZXIgbmFtZXMgb3IgYWxpYXNlcyB3aWxsIG5vdCBwcm9kdWNlCiAgICAgIGRpZmZlcmVudGx5IGNhY2hlZCBlbnRpdGllcywgYW5kIGluc3RlYWQgY29udGVudCB3aWxsIGJlIGNhY2hlZCBhcwogICAgICBwZXIgdGhlIGNhbm9uaWNhbCBob3N0bmFtZS48L3A+CgogICAgCgogICAgPGgzPkZyZXNobmVzcyBMaWZldGltZTwvaDM+CiAgICAgIAoKICAgICAgPHA+V2VsbCBmb3JtZWQgY29udGVudCB0aGF0IGlzIGludGVuZGVkIHRvIGJlIGNhY2hlZCBzaG91bGQgZGVjbGFyZSBhbgogICAgICBleHBsaWNpdCBmcmVzaG5lc3MgbGlmZXRpbWUgd2l0aCB0aGUgPGNvZGU+Q2FjaGUtQ29udHJvbDwvY29kZT4KICAgICAgaGVhZGVyJ3MgPGNvZGU+bWF4LWFnZTwvY29kZT4gb3IgPGNvZGU+cy1tYXhhZ2U8L2NvZGU+IGZpZWxkcywgb3IKICAgICAgYnkgaW5jbHVkaW5nIGFuIDxjb2RlPkV4cGlyZXM8L2NvZGU+IGhlYWRlci48L3A+CiAgICAgIAogICAgICA8cD5BdCB0aGUgc2FtZSB0aW1lLCB0aGUgb3JpZ2luIHNlcnZlciBkZWZpbmVkIGZyZXNobmVzcyBsaWZldGltZSBjYW4KICAgICAgYmUgb3ZlcnJpZGRlbiBieSBhIGNsaWVudCB3aGVuIHRoZSBjbGllbnQgcHJlc2VudHMgdGhlaXIgb3duCiAgICAgIDxjb2RlPkNhY2hlLUNvbnRyb2w8L2NvZGU+IGhlYWRlciB3aXRoaW4gdGhlIHJlcXVlc3QuIEluIHRoaXMgY2FzZSwKICAgICAgdGhlIGxvd2VzdCBmcmVzaG5lc3MgbGlmZXRpbWUgYmV0d2VlbiByZXF1ZXN0IGFuZCByZXNwb25zZSB3aW5zLjwvcD4KCiAgICAgIDxwPldoZW4gdGhpcyBmcmVzaG5lc3MgbGlmZXRpbWUgaXMgbWlzc2luZyBmcm9tIHRoZSByZXF1ZXN0IG9yIHRoZQogICAgICByZXNwb25zZSwgYSBkZWZhdWx0IGZyZXNobmVzcyBsaWZldGltZSBpcyBhcHBsaWVkLiBUaGUgZGVmYXVsdAogICAgICBmcmVzaG5lc3MgbGlmZXRpbWUgZm9yIGNhY2hlZCBlbnRpdGllcyBpcyBvbmUgaG91ciwgaG93ZXZlcgogICAgICB0aGlzIGNhbiBiZSBlYXNpbHkgb3Zlci1yaWRkZW4gYnkgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZGVmYXVsdGV4cGlyZSI+Q2FjaGVEZWZhdWx0RXhwaXJlPC9hPjwvY29kZT4gZGlyZWN0aXZlLjwvcD4KCiAgICAgIDxwPklmIGEgcmVzcG9uc2UgZG9lcyBub3QgaW5jbHVkZSBhbiA8Y29kZT5FeHBpcmVzPC9jb2RlPiBoZWFkZXIgYnV0IGRvZXMKICAgICAgaW5jbHVkZSBhIDxjb2RlPkxhc3QtTW9kaWZpZWQ8L2NvZGU+IGhlYWRlciwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+CiAgICAgIGNhbiBpbmZlciBhIGZyZXNobmVzcyBsaWZldGltZSBiYXNlZCBvbiBhIGhldXJpc3RpYywgd2hpY2ggY2FuIGJlCiAgICAgIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWxhc3Rtb2RpZmllZGZhY3RvciI+Q2FjaGVMYXN0TW9kaWZpZWRGYWN0b3I8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKICAgICAgPHA+Rm9yIGxvY2FsIGNvbnRlbnQsIG9yIGZvciByZW1vdGUgY29udGVudCB0aGF0IGRvZXMgbm90IGRlZmluZSBpdHMgb3duCiAgICAgIDxjb2RlPkV4cGlyZXM8L2NvZGU+IGhlYWRlciwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2V4cGlyZXMuaHRtbCI+bW9kX2V4cGlyZXM8L2E+PC9jb2RlPiBtYXkgYmUgdXNlZCB0bwogICAgICBmaW5lLXR1bmUgdGhlIGZyZXNobmVzcyBsaWZldGltZSBieSBhZGRpbmcgPGNvZGU+bWF4LWFnZTwvY29kZT4gYW5kCiAgICAgIDxjb2RlPkV4cGlyZXM8L2NvZGU+LjwvcD4KCiAgICAgIDxwPlRoZSBtYXhpbXVtIGZyZXNobmVzcyBsaWZldGltZSBtYXkgYWxzbyBiZSBjb250cm9sbGVkIGJ5IHVzaW5nIHRoZQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZW1heGV4cGlyZSI+Q2FjaGVNYXhFeHBpcmU8L2E+PC9jb2RlPi48L3A+CgogICAgCgogICAgPGgzPkEgQnJpZWYgR3VpZGUgdG8gQ29uZGl0aW9uYWwgUmVxdWVzdHM8L2gzPgogICAgICAKCiAgICAgIDxwPldoZW4gY29udGVudCBleHBpcmVzIGZyb20gdGhlIGNhY2hlIGFuZCBiZWNvbWVzIHN0YWxlLCByYXRoZXIgdGhhbgogICAgICBwYXNzIG9uIHRoZSBvcmlnaW5hbCByZXF1ZXN0LCBodHRwZCB3aWxsIG1vZGlmeSB0aGUgcmVxdWVzdCB0byBtYWtlCiAgICAgIGl0IGNvbmRpdGlvbmFsIGluc3RlYWQuPC9wPgoKICAgICAgPHA+V2hlbiBhbiA8Y29kZT5FVGFnPC9jb2RlPiBoZWFkZXIgZXhpc3RzIGluIHRoZSBvcmlnaW5hbCBjYWNoZWQKICAgICAgcmVzcG9uc2UsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiB3aWxsIGFkZCBhbgogICAgICA8Y29kZT5JZi1Ob25lLU1hdGNoPC9jb2RlPiBoZWFkZXIgdG8gdGhlIHJlcXVlc3QgdG8gdGhlIG9yaWdpbiBzZXJ2ZXIuCiAgICAgIFdoZW4gYSA8Y29kZT5MYXN0LU1vZGlmaWVkPC9jb2RlPiBoZWFkZXIgZXhpc3RzIGluIHRoZSBvcmlnaW5hbAogICAgICBjYWNoZWQgcmVzcG9uc2UsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiB3aWxsIGFkZCBhbgogICAgICA8Y29kZT5JZi1Nb2RpZmllZC1TaW5jZTwvY29kZT4gaGVhZGVyIHRvIHRoZSByZXF1ZXN0IHRvIHRoZSBvcmlnaW4KICAgICAgc2VydmVyLiBQZXJmb3JtaW5nIGVpdGhlciBvZiB0aGVzZSBhY3Rpb25zIG1ha2VzIHRoZSByZXF1ZXN0CiAgICAgIDxzdHJvbmc+Y29uZGl0aW9uYWw8L3N0cm9uZz4uPC9wPgoKICAgICAgPHA+V2hlbiBhIGNvbmRpdGlvbmFsIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYnkgYW4gb3JpZ2luIHNlcnZlciwgdGhlCiAgICAgIG9yaWdpbiBzZXJ2ZXIgc2hvdWxkIGNoZWNrIHdoZXRoZXIgdGhlIEVUYWcgb3IgdGhlIExhc3QtTW9kaWZpZWQKICAgICAgcGFyYW1ldGVyIGhhcyBjaGFuZ2VkLCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHJlcXVlc3QuIElmIG5vdCwgdGhlCiAgICAgIG9yaWdpbiBzaG91bGQgcmVzcG9uZCB3aXRoIGEgdGVyc2UgIjMwNCBOb3QgTW9kaWZpZWQiIHJlc3BvbnNlLiBUaGlzCiAgICAgIHNpZ25hbHMgdG8gdGhlIGNhY2hlIHRoYXQgdGhlIHN0YWxlIGNvbnRlbnQgaXMgc3RpbGwgZnJlc2ggc2hvdWxkIGJlCiAgICAgIHVzZWQgZm9yIHN1YnNlcXVlbnQgcmVxdWVzdHMgdW50aWwgdGhlIGNvbnRlbnQncyBuZXcgZnJlc2huZXNzIGxpZmV0aW1lCiAgICAgIGlzIHJlYWNoZWQgYWdhaW4uPC9wPgoKICAgICAgPHA+SWYgdGhlIGNvbnRlbnQgaGFzIGNoYW5nZWQsIHRoZW4gdGhlIGNvbnRlbnQgaXMgc2VydmVkIGFzIGlmIHRoZQogICAgICByZXF1ZXN0IHdlcmUgbm90IGNvbmRpdGlvbmFsIHRvIGJlZ2luIHdpdGguPC9wPgoKICAgICAgPHA+Q29uZGl0aW9uYWwgcmVxdWVzdHMgb2ZmZXIgdHdvIGJlbmVmaXRzLiBGaXJzdGx5LCB3aGVuIG1ha2luZyBzdWNoCiAgICAgIGEgcmVxdWVzdCB0byB0aGUgb3JpZ2luIHNlcnZlciwgaWYgdGhlIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luCiAgICAgIG1hdGNoZXMgdGhlIGNvbnRlbnQgaW4gdGhlIGNhY2hlLCB0aGlzIGNhbiBiZSBkZXRlcm1pbmVkIGVhc2lseSBhbmQKICAgICAgd2l0aG91dCB0aGUgb3ZlcmhlYWQgb2YgdHJhbnNmZXJyaW5nIHRoZSBlbnRpcmUgcmVzb3VyY2UuPC9wPgoKICAgICAgPHA+U2Vjb25kbHksIGEgd2VsbCBkZXNpZ25lZCBvcmlnaW4gc2VydmVyIHdpbGwgYmUgZGVzaWduZWQgaW4gc3VjaAogICAgICBhIHdheSB0aGF0IGNvbmRpdGlvbmFsIHJlcXVlc3RzIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBjaGVhcGVyIHRvCiAgICAgIHByb2R1Y2UgdGhhbiBhIGZ1bGwgcmVzcG9uc2UuIEZvciBzdGF0aWMgZmlsZXMsIHR5cGljYWxseSBhbGwgdGhhdCBpcwogICAgICBpbnZvbHZlZCBpcyBhIGNhbGwgdG8gPGNvZGU+c3RhdCgpPC9jb2RlPiBvciBzaW1pbGFyIHN5c3RlbSBjYWxsLCB0bwogICAgICBzZWUgaWYgdGhlIGZpbGUgaGFzIGNoYW5nZWQgaW4gc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZS4gQXMgc3VjaCwgZXZlbgogICAgICBsb2NhbCBjb250ZW50IG1heSBzdGlsbCBiZSBzZXJ2ZWQgZmFzdGVyIGZyb20gdGhlIGNhY2hlIGlmIGl0IGhhcyBub3QKICAgICAgY2hhbmdlZC48L3A+CiAgICAgIAogICAgICA8cD5PcmlnaW4gc2VydmVycyBzaG91bGQgbWFrZSBldmVyeSBlZmZvcnQgdG8gc3VwcG9ydCBjb25kaXRpb25hbAogICAgICByZXF1ZXN0cyBhcyBpcyBwcmFjdGljYWwsIGhvd2V2ZXIgaWYgY29uZGl0aW9uYWwgcmVxdWVzdHMgYXJlIG5vdAogICAgICBzdXBwb3J0ZWQsIHRoZSBvcmlnaW4gd2lsbCByZXNwb25kIGFzIGlmIHRoZSByZXF1ZXN0IHdhcyBub3QKICAgICAgY29uZGl0aW9uYWwsIGFuZCB0aGUgY2FjaGUgd2lsbCByZXNwb25kIGFzIGlmIHRoZSBjb250ZW50IGhhZCBjaGFuZ2VkCiAgICAgIGFuZCBzYXZlIHRoZSBuZXcgY29udGVudCB0byB0aGUgY2FjaGUuIEluIHRoaXMgY2FzZSwgdGhlIGNhY2hlIHdpbGwKICAgICAgYmVoYXZlIGxpa2UgYSBzaW1wbGUgdHdvIHN0YXRlIGNhY2hlLCB3aGVyZSBjb250ZW50IGlzIGVmZmVjdGl2ZWx5CiAgICAgIGVpdGhlciBmcmVzaCBvciBkZWxldGVkLjwvcD4KICAgIAoKICAgIDxoMz5XaGF0IENhbiBiZSBDYWNoZWQ/PC9oMz4KICAgICAgCgogICAgICA8cD5UaGUgZnVsbCBkZWZpbml0aW9uIG9mIHdoaWNoIHJlc3BvbnNlcyBjYW4gYmUgY2FjaGVkIGJ5IGFuIEhUVFAKICAgICAgY2FjaGUgaXMgZGVmaW5lZCBpbgogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEzLmh0bWwjc2VjMTMuNCI+CiAgICAgIFJGQzI2MTYgU2VjdGlvbiAxMy40IFJlc3BvbnNlIENhY2hlYWJpbGl0eTwvYT4sIGFuZCBjYW4gYmUgc3VtbWVkIHVwIGFzCiAgICAgIGZvbGxvd3M6PC9wPgoKICAgICAgPG9sPgogICAgICAgIDxsaT5DYWNoaW5nIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyBVUkwuIFNlZSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVlbmFibGUiPkNhY2hlRW5hYmxlPC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZGlzYWJsZSI+Q2FjaGVEaXNhYmxlPC9hPjwvY29kZT4gZGlyZWN0aXZlcy48L2xpPgoKICAgICAgICA8bGk+VGhlIHJlc3BvbnNlIG11c3QgaGF2ZSBhIEhUVFAgc3RhdHVzIGNvZGUgb2YgMjAwLCAyMDMsIDMwMCwgMzAxIG9yCiAgICAgICAgNDEwLjwvbGk+CgogICAgICAgIDxsaT5UaGUgcmVxdWVzdCBtdXN0IGJlIGEgSFRUUCBHRVQgcmVxdWVzdC48L2xpPgoKICAgICAgICA8bGk+SWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5zIGFuICJBdXRob3JpemF0aW9uOiIgaGVhZGVyLCBpdCBtdXN0CiAgICAgICAgYWxzbyBjb250YWluIGFuICJzLW1heGFnZSIsICJtdXN0LXJldmFsaWRhdGUiIG9yICJwdWJsaWMiIG9wdGlvbgogICAgICAgIGluIHRoZSAiQ2FjaGUtQ29udHJvbDoiIGhlYWRlciwgb3IgaXQgd29uJ3QgYmUgY2FjaGVkLjwvbGk+CgogICAgICAgIDxsaT5JZiB0aGUgVVJMIGluY2x1ZGVkIGEgcXVlcnkgc3RyaW5nIChlLmcuIGZyb20gYSBIVE1MIGZvcm0gR0VUCiAgICAgICAgbWV0aG9kKSBpdCB3aWxsIG5vdCBiZSBjYWNoZWQgdW5sZXNzIHRoZSByZXNwb25zZSBzcGVjaWZpZXMgYW4KICAgICAgICBleHBsaWNpdCBleHBpcmF0aW9uIGJ5IGluY2x1ZGluZyBhbiAiRXhwaXJlczoiIGhlYWRlciBvciB0aGUgbWF4LWFnZQogICAgICAgIG9yIHMtbWF4YWdlIGRpcmVjdGl2ZSBvZiB0aGUgIkNhY2hlLUNvbnRyb2w6IiBoZWFkZXIsIGFzIHBlciBSRkMyNjE2CiAgICAgICAgc2VjdGlvbnMgMTMuOSBhbmQgMTMuMi4xLjwvbGk+CgogICAgICAgIDxsaT5JZiB0aGUgcmVzcG9uc2UgaGFzIGEgc3RhdHVzIG9mIDIwMCAoT0spLCB0aGUgcmVzcG9uc2UgbXVzdAogICAgICAgIGFsc28gaW5jbHVkZSBhdCBsZWFzdCBvbmUgb2YgdGhlICJFdGFnIiwgIkxhc3QtTW9kaWZpZWQiIG9yCiAgICAgICAgdGhlICJFeHBpcmVzIiBoZWFkZXJzLCBvciB0aGUgbWF4LWFnZSBvciBzLW1heGFnZSBkaXJlY3RpdmUgb2YKICAgICAgICB0aGUgIkNhY2hlLUNvbnRyb2w6IiBoZWFkZXIsIHVubGVzcyB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWlnbm9yZW5vbGFzdG1vZCI+Q2FjaGVJZ25vcmVOb0xhc3RNb2Q8L2E+PC9jb2RlPgogICAgICAgIGRpcmVjdGl2ZSBoYXMgYmVlbiB1c2VkIHRvIHJlcXVpcmUgb3RoZXJ3aXNlLjwvbGk+CgogICAgICAgIDxsaT5JZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgdGhlICJwcml2YXRlIiBvcHRpb24gaW4gYSAiQ2FjaGUtQ29udHJvbDoiCiAgICAgICAgaGVhZGVyLCBpdCB3aWxsIG5vdCBiZSBzdG9yZWQgdW5sZXNzIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlc3RvcmVwcml2YXRlIj5DYWNoZVN0b3JlUHJpdmF0ZTwvYT48L2NvZGU+IGhhcyBiZWVuCiAgICAgICAgdXNlZCB0byByZXF1aXJlIG90aGVyd2lzZS48L2xpPgoKICAgICAgICA8bGk+TGlrZXdpc2UsIGlmIHRoZSByZXNwb25zZSBpbmNsdWRlcyB0aGUgIm5vLXN0b3JlIiBvcHRpb24gaW4gYQogICAgICAgICJDYWNoZS1Db250cm9sOiIgaGVhZGVyLCBpdCB3aWxsIG5vdCBiZSBzdG9yZWQgdW5sZXNzIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlc3RvcmVub3N0b3JlIj5DYWNoZVN0b3JlTm9TdG9yZTwvYT48L2NvZGU+IGhhcyBiZWVuCiAgICAgICAgdXNlZC48L2xpPgoKICAgICAgICA8bGk+QSByZXNwb25zZSB3aWxsIG5vdCBiZSBzdG9yZWQgaWYgaXQgaW5jbHVkZXMgYSAiVmFyeToiIGhlYWRlcgogICAgICAgIGNvbnRhaW5pbmcgdGhlIG1hdGNoLWFsbCAiKiIuPC9saT4KICAgICAgPC9vbD4KICAgIAoKICAgIDxoMz5XaGF0IFNob3VsZCBOb3QgYmUgQ2FjaGVkPzwvaDM+CiAgICAgIAoKICAgICAgPHA+SXQgc2hvdWxkIGJlIHVwIHRvIHRoZSBjbGllbnQgY3JlYXRpbmcgdGhlIHJlcXVlc3QsIG9yIHRoZSBvcmlnaW4KICAgICAgc2VydmVyIGNvbnN0cnVjdGluZyB0aGUgcmVzcG9uc2UgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50CiAgICAgIHNob3VsZCBiZSBjYWNoZWFibGUgb3Igbm90IGJ5IGNvcnJlY3RseSBzZXR0aW5nIHRoZQogICAgICA8Y29kZT5DYWNoZS1Db250cm9sPC9jb2RlPiBoZWFkZXIsIGFuZCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gc2hvdWxkCiAgICAgIGJlIGxlZnQgYWxvbmUgdG8gaG9ub3IgdGhlIHdpc2hlcyBvZiB0aGUgY2xpZW50IG9yIHNlcnZlciBhcyBhcHByb3ByaWF0ZS4KICAgICAgPC9wPgoKICAgICAgPHA+Q29udGVudCB0aGF0IGlzIHRpbWUgc2Vuc2l0aXZlLCBvciB3aGljaCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZQogICAgICBwYXJ0aWN1bGFycyBvZiB0aGUgcmVxdWVzdCB0aGF0IGFyZSBub3QgY292ZXJlZCBieSBIVFRQIG5lZ290aWF0aW9uLAogICAgICBzaG91bGQgbm90IGJlIGNhY2hlZC4gVGhpcyBjb250ZW50IHNob3VsZCBkZWNsYXJlIGl0c2VsZiB1bmNhY2hlYWJsZQogICAgICB1c2luZyB0aGUgPGNvZGU+Q2FjaGUtQ29udHJvbDwvY29kZT4gaGVhZGVyLjwvcD4KICAgICAgCiAgICAgIDxwPklmIGNvbnRlbnQgY2hhbmdlcyBvZnRlbiwgZXhwcmVzc2VkIGJ5IGEgZnJlc2huZXNzIGxpZmV0aW1lIG9mIG1pbnV0ZXMKICAgICAgb3Igc2Vjb25kcywgdGhlIGNvbnRlbnQgY2FuIHN0aWxsIGJlIGNhY2hlZCwgaG93ZXZlciBpdCBpcyBoaWdobHkKICAgICAgZGVzaXJhYmxlIHRoYXQgdGhlIG9yaWdpbiBzZXJ2ZXIgc3VwcG9ydHMKICAgICAgPHN0cm9uZz5jb25kaXRpb25hbCByZXF1ZXN0czwvc3Ryb25nPiBjb3JyZWN0bHkgdG8gZW5zdXJlIHRoYXQKICAgICAgZnVsbCByZXNwb25zZXMgZG8gbm90IGhhdmUgdG8gYmUgZ2VuZXJhdGVkIG9uIGEgcmVndWxhciBiYXNpcy48L3A+CgogICAgICA8cD5Db250ZW50IHRoYXQgdmFyaWVzIGJhc2VkIG9uIGNsaWVudCBwcm92aWRlZCByZXF1ZXN0IGhlYWRlcnMgY2FuIGJlCiAgICAgIGNhY2hlZCB0aHJvdWdoIGludGVsbGlnZW50IHVzZSBvZiB0aGUgPGNvZGU+VmFyeTwvY29kZT4gcmVzcG9uc2UKICAgICAgaGVhZGVyLjwvcD4KCiAgICAKCiAgICA8aDM+VmFyaWFibGUvTmVnb3RpYXRlZCBDb250ZW50PC9oMz4KICAgICAgCgogICAgICA8cD5XaGVuIHRoZSBvcmlnaW4gc2VydmVyIGlzIGRlc2lnbmVkIHRvIHJlc3BvbmQgd2l0aCBkaWZmZXJlbnQgY29udGVudAogICAgICBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaGVhZGVycyBpbiB0aGUgcmVxdWVzdCwgZm9yIGV4YW1wbGUgdG8gc2VydmUKICAgICAgbXVsdGlwbGUgbGFuZ3VhZ2VzIGF0IHRoZSBzYW1lIFVSTCwgSFRUUCdzIGNhY2hpbmcgbWVjaGFuaXNtIG1ha2VzIGl0CiAgICAgIHBvc3NpYmxlIHRvIGNhY2hlIG11bHRpcGxlIHZhcmlhbnRzIG9mIHRoZSBzYW1lIHBhZ2UgYXQgdGhlIHNhbWUgVVJMLjwvcD4KICAgICAgCiAgICAgIDxwPlRoaXMgaXMgZG9uZSBieSB0aGUgb3JpZ2luIHNlcnZlciBhZGRpbmcgYSA8Y29kZT5WYXJ5PC9jb2RlPiBoZWFkZXIKICAgICAgdG8gaW5kaWNhdGUgd2hpY2ggaGVhZGVycyBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCBieSBhIGNhY2hlIHdoZW4KICAgICAgZGV0ZXJtaW5pbmcgd2hldGhlciB0d28gdmFyaWFudHMgYXJlIGRpZmZlcmVudCBmcm9tIG9uZSBhbm90aGVyLjwvcD4KCiAgICAgIDxwPklmIGZvciBleGFtcGxlLCBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdpdGggYSB2YXJ5IGhlYWRlciBzdWNoIGFzOzwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgpWYXJ5OiBuZWdvdGlhdGUsYWNjZXB0LWxhbmd1YWdlLGFjY2VwdC1jaGFyc2V0CiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gd2lsbCBvbmx5IHNlcnZlIHRoZSBjYWNoZWQgY29udGVudCB0bwogICAgICByZXF1ZXN0ZXJzIHdpdGggYWNjZXB0LWxhbmd1YWdlIGFuZCBhY2NlcHQtY2hhcnNldCBoZWFkZXJzCiAgICAgIG1hdGNoaW5nIHRob3NlIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0LjwvcD4KICAgICAgCiAgICAgIDxwPk11bHRpcGxlIHZhcmlhbnRzIG9mIHRoZSBjb250ZW50IGNhbiBiZSBjYWNoZWQgc2lkZSBieSBzaWRlLAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gdXNlcyB0aGUgPGNvZGU+VmFyeTwvY29kZT4gaGVhZGVyIGFuZCB0aGUKICAgICAgY29ycmVzcG9uZGluZyB2YWx1ZXMgb2YgdGhlIHJlcXVlc3QgaGVhZGVycyBsaXN0ZWQgYnkgPGNvZGU+VmFyeTwvY29kZT4KICAgICAgdG8gZGVjaWRlIG9uIHdoaWNoIG9mIG1hbnkgdmFyaWFudHMgdG8gcmV0dXJuIHRvIHRoZSBjbGllbnQuPC9wPgogICAgCgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZXhhbXBsZXMiIGlkPSJleGFtcGxlcyI+Q2FjaGUgU2V0dXAgRXhhbXBsZXM8L2E+PC9oMj4KCiAgICAKCiAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX3NvY2FjaGUuaHRtbCI+bW9kX2NhY2hlX3NvY2FjaGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zb2NhY2hlX21lbWNhY2hlLmh0bWwiPm1vZF9zb2NhY2hlX21lbWNhY2hlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWVuYWJsZSI+Q2FjaGVFbmFibGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwjY2FjaGVyb290Ij5DYWNoZVJvb3Q8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwjY2FjaGVkaXJsZXZlbHMiPkNhY2hlRGlyTGV2ZWxzPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sI2NhY2hlZGlybGVuZ3RoIj5DYWNoZURpckxlbmd0aDwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX3NvY2FjaGUuaHRtbCNjYWNoZXNvY2FjaGUiPkNhY2hlU29jYWNoZTwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PC90cj48L3RhYmxlPgoKICAgIDxoMz48YSBuYW1lPSJkaXNrIiBpZD0iZGlzayI+Q2FjaGluZyB0byBEaXNrPC9hPjwvaDM+CiAgICAgIAoKICAgICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBtb2R1bGUgcmVsaWVzIG9uIHNwZWNpZmljIGJhY2tlbmQgc3RvcmUKICAgICAgaW1wbGVtZW50YXRpb25zIGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgY2FjaGUsIGFuZCBmb3IgY2FjaGluZyB0byBkaXNrCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4gaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCB0aGlzLjwvcD4KCiAgICAgIDxwPlR5cGljYWxseSB0aGUgbW9kdWxlIHdpbGwgYmUgY29uZmlndXJlZCBhcyBzbzs8L3A+CgogICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Q2FjaGVSb290ICAgIi92YXIvY2FjaGUvYXBhY2hlLyIKQ2FjaGVFbmFibGUgZGlzayAvCkNhY2hlRGlyTGV2ZWxzIDIKQ2FjaGVEaXJMZW5ndGggMTwvcHJlPgoKCiAgICAgIDxwPkltcG9ydGFudGx5LCBhcyB0aGUgY2FjaGVkIGZpbGVzIGFyZSBsb2NhbGx5IHN0b3JlZCwgb3BlcmF0aW5nIHN5c3RlbQogICAgICBpbi1tZW1vcnkgY2FjaGluZyB3aWxsIHR5cGljYWxseSBiZSBhcHBsaWVkIHRvIHRoZWlyIGFjY2VzcyBhbHNvLiBTbwogICAgICBhbHRob3VnaCB0aGUgZmlsZXMgYXJlIHN0b3JlZCBvbiBkaXNrLCBpZiB0aGV5IGFyZSBmcmVxdWVudGx5IGFjY2Vzc2VkCiAgICAgIGl0IGlzIGxpa2VseSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5CiAgICAgIHNlcnZlZCBmcm9tIG1lbW9yeS48L3A+CgogICAgCgogICAgPGgzPlVuZGVyc3RhbmRpbmcgdGhlIENhY2hlLVN0b3JlPC9oMz4KICAgICAgCgogICAgICA8cD5UbyBzdG9yZSBpdGVtcyBpbiB0aGUgY2FjaGUsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4gY3JlYXRlcwogICAgICBhIDIyIGNoYXJhY3RlciBoYXNoIG9mIHRoZSBVUkwgYmVpbmcgcmVxdWVzdGVkLiBUaGlzIGhhc2ggaW5jb3Jwb3JhdGVzCiAgICAgIHRoZSBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIHBhdGggYW5kIGFueSBDR0kgYXJndW1lbnRzIHRvIHRoZSBVUkwsCiAgICAgIGFzIHdlbGwgYXMgZWxlbWVudHMgZGVmaW5lZCBieSB0aGUgVmFyeSBoZWFkZXIgdG8gZW5zdXJlIHRoYXQgbXVsdGlwbGUKICAgICAgVVJMcyBkbyBub3QgY29sbGlkZSB3aXRoIG9uZSBhbm90aGVyLjwvcD4KCiAgICAgIDxwPkVhY2ggY2hhcmFjdGVyIG1heSBiZSBhbnkgb25lIG9mIDY0LWRpZmZlcmVudCBjaGFyYWN0ZXJzLCB3aGljaCBtZWFuCiAgICAgIHRoYXQgb3ZlcmFsbCB0aGVyZSBhcmUgNjReMjIgcG9zc2libGUgaGFzaGVzLiBGb3IgZXhhbXBsZSwgYSBVUkwgbWlnaHQKICAgICAgYmUgaGFzaGVkIHRvIDxjb2RlPnh5VEd4U01PMmI2OG1CQ3lrcWtwMXc8L2NvZGU+LiBUaGlzIGhhc2ggaXMgdXNlZAogICAgICBhcyBhIHByZWZpeCBmb3IgdGhlIG5hbWluZyBvZiB0aGUgZmlsZXMgc3BlY2lmaWMgdG8gdGhhdCBVUkwgd2l0aGluCiAgICAgIHRoZSBjYWNoZSwgaG93ZXZlciBmaXJzdCBpdCBpcyBzcGxpdCB1cCBpbnRvIGRpcmVjdG9yaWVzIGFzIHBlcgogICAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZWRpcmxldmVscyI+Q2FjaGVEaXJMZXZlbHM8L2E+PC9jb2RlPiBhbmQKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZWRpcmxlbmd0aCI+Q2FjaGVEaXJMZW5ndGg8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmVzLjwvcD4KCiAgICAgIDxwPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwjY2FjaGVkaXJsZXZlbHMiPkNhY2hlRGlyTGV2ZWxzPC9hPjwvY29kZT4KICAgICAgc3BlY2lmaWVzIGhvdyBtYW55IGxldmVscyBvZiBzdWJkaXJlY3RvcnkgdGhlcmUgc2hvdWxkIGJlLCBhbmQKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZWRpcmxlbmd0aCI+Q2FjaGVEaXJMZW5ndGg8L2E+PC9jb2RlPgogICAgICBzcGVjaWZpZXMgaG93IG1hbnkgY2hhcmFjdGVycyBzaG91bGQgYmUgaW4gZWFjaCBkaXJlY3RvcnkuIFdpdGgKICAgICAgdGhlIGV4YW1wbGUgc2V0dGluZ3MgZ2l2ZW4gYWJvdmUsIHRoZSBoYXNoIHdvdWxkIGJlIHR1cm5lZCBpbnRvCiAgICAgIGEgZmlsZW5hbWUgcHJlZml4IGFzCiAgICAgIDxjb2RlPi92YXIvY2FjaGUvYXBhY2hlL3gveS9UR3hTTU8yYjY4bUJDeWtxa3AxdzwvY29kZT4uPC9wPgoKICAgICAgPHA+VGhlIG92ZXJhbGwgYWltIG9mIHRoaXMgdGVjaG5pcXVlIGlzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mCiAgICAgIHN1YmRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgbWF5IGJlIGluIGEgcGFydGljdWxhciBkaXJlY3RvcnksCiAgICAgIGFzIG1vc3QgZmlsZS1zeXN0ZW1zIHNsb3cgZG93biBhcyB0aGlzIG51bWJlciBpbmNyZWFzZXMuIFdpdGgKICAgICAgc2V0dGluZyBvZiAiMSIgZm9yCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwjY2FjaGVkaXJsZW5ndGgiPkNhY2hlRGlyTGVuZ3RoPC9hPjwvY29kZT4KICAgICAgdGhlcmUgY2FuIGF0IG1vc3QgYmUgNjQgc3ViZGlyZWN0b3JpZXMgYXQgYW55IHBhcnRpY3VsYXIgbGV2ZWwuCiAgICAgIFdpdGggYSBzZXR0aW5nIG9mIDIgdGhlcmUgY2FuIGJlIDY0ICogNjQgc3ViZGlyZWN0b3JpZXMsIGFuZCBzbyBvbi4KICAgICAgVW5sZXNzIHlvdSBoYXZlIGEgZ29vZCByZWFzb24gbm90IHRvLCB1c2luZyBhIHNldHRpbmcgb2YgIjEiCiAgICAgIGZvciA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sI2NhY2hlZGlybGVuZ3RoIj5DYWNoZURpckxlbmd0aDwvYT48L2NvZGU+CiAgICAgIGlzIHJlY29tbWVuZGVkLjwvcD4KCiAgICAgIDxwPlNldHRpbmcKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZWRpcmxldmVscyI+Q2FjaGVEaXJMZXZlbHM8L2E+PC9jb2RlPgogICAgICBkZXBlbmRzIG9uIGhvdyBtYW55IGZpbGVzIHlvdSBhbnRpY2lwYXRlIHRvIHN0b3JlIGluIHRoZSBjYWNoZS4KICAgICAgV2l0aCB0aGUgc2V0dGluZyBvZiAiMiIgdXNlZCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgYSBncmFuZAogICAgICB0b3RhbCBvZiA0MDk2IHN1YmRpcmVjdG9yaWVzIGNhbiB1bHRpbWF0ZWx5IGJlIGNyZWF0ZWQuIFdpdGgKICAgICAgMSBtaWxsaW9uIGZpbGVzIGNhY2hlZCwgdGhpcyB3b3JrcyBvdXQgYXQgcm91Z2hseSAyNDUgY2FjaGVkCiAgICAgIFVSTHMgcGVyIGRpcmVjdG9yeS48L3A+CgogICAgICA8cD5FYWNoIFVSTCB1c2VzIGF0IGxlYXN0IHR3byBmaWxlcyBpbiB0aGUgY2FjaGUtc3RvcmUuIFR5cGljYWxseQogICAgICB0aGVyZSBpcyBhICIuaGVhZGVyIiBmaWxlLCB3aGljaCBpbmNsdWRlcyBtZXRhLWluZm9ybWF0aW9uIGFib3V0CiAgICAgIHRoZSBVUkwsIHN1Y2ggYXMgd2hlbiBpdCBpcyBkdWUgdG8gZXhwaXJlIGFuZCBhICIuZGF0YSIgZmlsZQogICAgICB3aGljaCBpcyBhIHZlcmJhdGltIGNvcHkgb2YgdGhlIGNvbnRlbnQgdG8gYmUgc2VydmVkLjwvcD4KCiAgICAgIDxwPkluIHRoZSBjYXNlIG9mIGEgY29udGVudCBuZWdvdGlhdGVkIHZpYSB0aGUgIlZhcnkiIGhlYWRlciwgYQogICAgICAiLnZhcnkiIGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoZSBVUkwgaW4gcXVlc3Rpb24uIFRoaXMKICAgICAgZGlyZWN0b3J5IHdpbGwgaGF2ZSBtdWx0aXBsZSAiLmRhdGEiIGZpbGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgICAgIGRpZmZlcmVudGx5IG5lZ290aWF0ZWQgY29udGVudC48L3A+CiAgICAKCiAgICA8aDM+TWFpbnRhaW5pbmcgdGhlIERpc2sgQ2FjaGU8L2gzPgogICAgICAKCiAgICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+IG1vZHVsZSBtYWtlcyBubyBhdHRlbXB0IHRvCiAgICAgIHJlZ3VsYXRlIHRoZSBhbW91bnQgb2YgZGlzayBzcGFjZSB1c2VkIGJ5IHRoZSBjYWNoZSwgYWx0aG91Z2ggaXQKICAgICAgd2lsbCBncmFjZWZ1bGx5IHN0YW5kIGRvd24gb24gYW55IGRpc2sgZXJyb3IgYW5kIGJlaGF2ZSBhcyBpZiB0aGUKICAgICAgY2FjaGUgd2FzIG5ldmVyIHByZXNlbnQuPC9wPgoKICAgICAgPHA+SW5zdGVhZCwgcHJvdmlkZWQgd2l0aCBodHRwZCBpcyB0aGUgPGEgaHJlZj0icHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiPmh0Y2FjaGVjbGVhbjwvYT4gdG9vbCB3aGljaCBhbGxvd3MgeW91CiAgICAgIHRvIGNsZWFuIHRoZSBjYWNoZSBwZXJpb2RpY2FsbHkuIERldGVybWluaW5nIGhvdyBmcmVxdWVudGx5IHRvIHJ1biA8YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiBhbmQgd2hhdCB0YXJnZXQgc2l6ZSB0bwogICAgICB1c2UgZm9yIHRoZSBjYWNoZSBpcyBzb21ld2hhdCBjb21wbGV4IGFuZCB0cmlhbCBhbmQgZXJyb3IgbWF5IGJlIG5lZWRlZCB0bwogICAgICBzZWxlY3Qgb3B0aW1hbCB2YWx1ZXMuPC9wPgoKICAgICAgPHA+PGEgaHJlZj0icHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiPmh0Y2FjaGVjbGVhbjwvYT4gaGFzIHR3byBtb2RlcyBvZgogICAgICBvcGVyYXRpb24uIEl0IGNhbiBiZSBydW4gYXMgcGVyc2lzdGVudCBkYWVtb24sIG9yIHBlcmlvZGljYWxseSBmcm9tCiAgICAgIGNyb24uIDxhIGhyZWY9InByb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIj5odGNhY2hlY2xlYW48L2E+IGNhbiB0YWtlIHVwIHRvIGFuIGhvdXIKICAgICAgb3IgbW9yZSB0byBwcm9jZXNzIHZlcnkgbGFyZ2UgKHRlbnMgb2YgZ2lnYWJ5dGVzKSBjYWNoZXMgYW5kIGlmIHlvdSBhcmUKICAgICAgcnVubmluZyBpdCBmcm9tIGNyb24gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZGV0ZXJtaW5lIGhvdyBsb25nIGEgdHlwaWNhbAogICAgICBydW4gdGFrZXMsIHRvIGF2b2lkIHJ1bm5pbmcgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBhdCBhIHRpbWUuPC9wPgogCiAgICAgIDxwPkl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBhbiBhcHByb3ByaWF0ZSAibmljZSIgbGV2ZWwgaXMgY2hvc2VuIGZvcgogICAgICBodGNhY2hlY2xlYW4gc28gdGhhdCB0aGUgdG9vbCBkb2VzIG5vdCBjYXVzZSBleGNlc3NpdmUgZGlzayBpbyB3aGlsZSB0aGUKICAgICAgc2VydmVyIGlzIHJ1bm5pbmcuPC9wPgoKICAgICAgPHAgY2xhc3M9ImZpZ3VyZSI+CiAgICAgIDxpbWcgc3JjPSJpbWFnZXMvY2FjaGluZ19maWcxLmdpZiIgYWx0PSIiIHdpZHRoPSI2MDAiIGhlaWdodD0iNDA2IiAvPjxiciAvPgogICAgICA8YSBpZD0iZmlndXJlMSIgbmFtZT0iZmlndXJlMSI+PGRmbj5GaWd1cmUgMTwvZGZuPjwvYT46IFR5cGljYWwKICAgICAgY2FjaGUgZ3Jvd3RoIC8gY2xlYW4gc2VxdWVuY2UuPC9wPgoKICAgICAgPHA+QmVjYXVzZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+IGRvZXMgbm90IGl0c2VsZiBwYXkgYXR0ZW50aW9uCiAgICAgIHRvIGhvdyBtdWNoIHNwYWNlIGlzIHVzZWQgeW91IHNob3VsZCBlbnN1cmUgdGhhdAogICAgICA8YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiBpcyBjb25maWd1cmVkIHRvCiAgICAgIGxlYXZlIGVub3VnaCAiZ3JvdyByb29tIiBmb2xsb3dpbmcgYSBjbGVhbi48L3A+CiAgICAKCiAgICA8aDM+PGEgbmFtZT0ibWVtY2FjaGUiIGlkPSJtZW1jYWNoZSI+Q2FjaGluZyB0byBtZW1jYWNoZWQ8L2E+PC9oMz4KICAgICAgCgogICAgICA8cD5Vc2luZyB0aGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX3NvY2FjaGUuaHRtbCI+bW9kX2NhY2hlX3NvY2FjaGU8L2E+PC9jb2RlPiBtb2R1bGUsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPgogICAgICBjYW4gY2FjaGUgZGF0YSBmcm9tIGEgdmFyaWV0eSBvZiBpbXBsZW1lbnRhdGlvbnMgKGFrYTogInByb3ZpZGVycyIpLiBVc2luZyB0aGUKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NvY2FjaGVfbWVtY2FjaGUuaHRtbCI+bW9kX3NvY2FjaGVfbWVtY2FjaGU8L2E+PC9jb2RlPiBtb2R1bGUsIGZvciBleGFtcGxlLCBvbmUgY2FuIHNwZWNpZnkgdGhhdAogICAgICA8YSBocmVmPSJodHRwOi8vbWVtY2FjaGVkLm9yZyI+bWVtY2FjaGVkPC9hPiBpcyB0byBiZSB1c2VkIGFzIHRoZQogICAgICB0aGUgYmFja2VuZCBzdG9yYWdlIG1lY2hhbmlzbS48L3A+CgogICAgICA8cD5UeXBpY2FsbHkgdGhlIG1vZHVsZSB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgc286PC9wPgoKICAgICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkNhY2hlRW5hYmxlIHNvY2FjaGUgLwpDYWNoZVNvY2FjaGUgbWVtY2FjaGU6bWVtY2QuZXhhbXBsZS5jb206MTEyMTE8L3ByZT4KCgogICAgICA8cD5BZGRpdGlvbmFsIDxjb2RlPm1lbWNhY2hlZDwvY29kZT4gc2VydmVycyBjYW4gYmUgc3BlY2lmaWVkIGJ5CiAgICAgIGFwcGVuZGluZyB0aGVtIHRvIHRoZSBlbmQgb2YgdGhlIDxjb2RlPkNhY2hlU29jYWNoZSBtZW1jYWNoZTo8L2NvZGU+CiAgICAgIGxpbmUgc2VwYXJhdGVkIGJ5IGNvbW1hczo8L3A+CgogICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Q2FjaGVFbmFibGUgc29jYWNoZSAvCkNhY2hlU29jYWNoZSBtZW1jYWNoZTptZW0xLmV4YW1wbGUuY29tOjExMjExLG1lbTIuZXhhbXBsZS5jb206MTEyMTI8L3ByZT4KCgogICAgICA8cD5UaGlzIGZvcm1hdCBpcyBhbHNvIHVzZWQgd2l0aCB0aGUgb3RoZXIgdmFyaW91cyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfc29jYWNoZS5odG1sIj5tb2RfY2FjaGVfc29jYWNoZTwvYT48L2NvZGU+CiAgICAgIHByb3ZpZGVycy4gRm9yIGV4YW1wbGU6PC9wPgoKICAgICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkNhY2hlRW5hYmxlIHNvY2FjaGUgLwpDYWNoZVNvY2FjaGUgc2htY2I6L3BhdGgvdG8vZGF0YWZpbGUoNTEyMDAwKTwvcHJlPgoKCiAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5DYWNoZUVuYWJsZSBzb2NhY2hlIC8KQ2FjaGVTb2NhY2hlIGRibTovcGF0aC90by9kYXRhZmlsZTwvcHJlPgoKCiAgICAKCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzb2NhY2hlLWNhY2hpbmciIGlkPSJzb2NhY2hlLWNhY2hpbmciPkdlbmVyYWwgVHdvLXN0YXRlIEtleS9WYWx1ZSBTaGFyZWQgT2JqZWN0IENhY2hpbmc8L2E+PC9oMj4KCiAgICAKCiAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aG5fc29jYWNoZS5odG1sIj5tb2RfYXV0aG5fc29jYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NvY2FjaGVfZGJtLmh0bWwiPm1vZF9zb2NhY2hlX2RibTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NvY2FjaGVfZGMuaHRtbCI+bW9kX3NvY2FjaGVfZGM8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zb2NhY2hlX21lbWNhY2hlLmh0bWwiPm1vZF9zb2NhY2hlX21lbWNhY2hlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc29jYWNoZV9zaG1jYi5odG1sIj5tb2Rfc29jYWNoZV9zaG1jYjwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aG5fc29jYWNoZS5odG1sI2F1dGhuY2FjaGVzb2NhY2hlIj5BdXRobkNhY2hlU09DYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHNlc3Npb25jYWNoZSI+U1NMU2Vzc2lvbkNhY2hlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwjc3Nsc3RhcGxpbmdjYWNoZSI+U1NMU3RhcGxpbmdDYWNoZTwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PC90cj48L3RhYmxlPgogICAgCiAgICA8cD5UaGUgQXBhY2hlIEhUVFAgc2VydmVyIG9mZmVycyBhIGxvdyBsZXZlbCBzaGFyZWQgb2JqZWN0IGNhY2hlIGZvcgogICAgY2FjaGluZyBpbmZvcm1hdGlvbiBzdWNoIGFzIFNTTCBzZXNzaW9ucywgb3IgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMsCiAgICB3aXRoaW4gdGhlIDxhIGhyZWY9InNvY2FjaGUuaHRtbCI+c29jYWNoZTwvYT4gaW50ZXJmYWNlLjwvcD4KCiAgICA8cD5BZGRpdGlvbmFsIG1vZHVsZXMgYXJlIHByb3ZpZGVkIGZvciBlYWNoIGltcGxlbWVudGF0aW9uLCBvZmZlcmluZyB0aGUKICAgIGZvbGxvd2luZyBiYWNrZW5kczo8L3A+CgogICAgPGRsPgogICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zb2NhY2hlX2RibS5odG1sIj5tb2Rfc29jYWNoZV9kYm08L2E+PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+REJNIGJhc2VkIHNoYXJlZCBvYmplY3QgY2FjaGUuPC9kZD4KICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc29jYWNoZV9kYy5odG1sIj5tb2Rfc29jYWNoZV9kYzwvYT48L2NvZGU+PC9kdD4KICAgIDxkZD5EaXN0Y2FjaGUgYmFzZWQgc2hhcmVkIG9iamVjdCBjYWNoZS48L2RkPgogICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zb2NhY2hlX21lbWNhY2hlLmh0bWwiPm1vZF9zb2NhY2hlX21lbWNhY2hlPC9hPjwvY29kZT48L2R0PgogICAgPGRkPk1lbWNhY2hlIGJhc2VkIHNoYXJlZCBvYmplY3QgY2FjaGUuPC9kZD4KICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc29jYWNoZV9zaG1jYi5odG1sIj5tb2Rfc29jYWNoZV9zaG1jYjwvYT48L2NvZGU+PC9kdD4KICAgIDxkZD5TaGFyZWQgbWVtb3J5IGJhc2VkIHNoYXJlZCBvYmplY3QgY2FjaGUuPC9kZD4KICAgIDwvZGw+CgogICAgPGgzPjxhIG5hbWU9Im1vZF9hdXRobl9zb2NhY2hlLWNhY2hpbmciIGlkPSJtb2RfYXV0aG5fc29jYWNoZS1jYWNoaW5nIj5DYWNoaW5nIEF1dGhlbnRpY2F0aW9uIENyZWRlbnRpYWxzPC9hPjwvaDM+CiAgICAgIAoKICAgICAgPHRhYmxlIGNsYXNzPSJyZWxhdGVkIj48dHI+PHRoPlJlbGF0ZWQgTW9kdWxlczwvdGg+PHRoPlJlbGF0ZWQgRGlyZWN0aXZlczwvdGg+PC90cj48dHI+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGhuX3NvY2FjaGUuaHRtbCI+bW9kX2F1dGhuX3NvY2FjaGU8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9hdXRobl9zb2NhY2hlLmh0bWwjYXV0aG5jYWNoZXNvY2FjaGUiPkF1dGhuQ2FjaGVTT0NhY2hlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+CgogICAgICA8cD5UaGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGhuX3NvY2FjaGUuaHRtbCI+bW9kX2F1dGhuX3NvY2FjaGU8L2E+PC9jb2RlPiBtb2R1bGUgYWxsb3dzIHRoZSByZXN1bHQgb2YKICAgICAgYXV0aGVudGljYXRpb24gdG8gYmUgY2FjaGVkLCByZWxpZXZpbmcgbG9hZCBvbiBhdXRoZW50aWNhdGlvbiBiYWNrZW5kcy48L3A+CgogICAgCgogICAgPGgzPjxhIG5hbWU9Im1vZF9zc2wtY2FjaGluZyIgaWQ9Im1vZF9zc2wtY2FjaGluZyI+Q2FjaGluZyBTU0wgU2Vzc2lvbnM8L2E+PC9oMz4KICAgICAgCgogICAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zc2wuaHRtbCNzc2xzZXNzaW9uY2FjaGUiPlNTTFNlc3Npb25DYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHN0YXBsaW5nY2FjaGUiPlNTTFN0YXBsaW5nQ2FjaGU8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjwvdHI+PC90YWJsZT4KCiAgICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPiBtb2R1bGUgdXNlcyB0aGUgPGNvZGU+c29jYWNoZTwvY29kZT4gaW50ZXJmYWNlCiAgICAgIHRvIHByb3ZpZGUgYSBzZXNzaW9uIGNhY2hlIGFuZCBhIHN0YXBsaW5nIGNhY2hlLjwvcD4KCiAgICAKCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJmaWxlLWNhY2hpbmciIGlkPSJmaWxlLWNhY2hpbmciPlNwZWNpYWxpemVkIEZpbGUgQ2FjaGluZzwvYT48L2gyPgoKICAgIAoKICAgIDx0YWJsZSBjbGFzcz0icmVsYXRlZCI+PHRyPjx0aD5SZWxhdGVkIE1vZHVsZXM8L3RoPjx0aD5SZWxhdGVkIERpcmVjdGl2ZXM8L3RoPjwvdHI+PHRyPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI2NhY2hlZmlsZSI+Q2FjaGVGaWxlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI21tYXBmaWxlIj5NTWFwRmlsZTwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PC90cj48L3RhYmxlPgoKICAgIDxwPk9uIHBsYXRmb3JtcyB3aGVyZSBhIGZpbGVzeXN0ZW0gbWlnaHQgYmUgc2xvdywgb3Igd2hlcmUgZmlsZQogICAgaGFuZGxlcyBhcmUgZXhwZW5zaXZlLCB0aGUgb3B0aW9uIGV4aXN0cyB0byBwcmUtbG9hZCBmaWxlcyBpbnRvCiAgICBtZW1vcnkgb24gc3RhcnR1cC48L3A+CgogICAgPHA+T24gc3lzdGVtcyB3aGVyZSBvcGVuaW5nIGZpbGVzIGlzIHNsb3csIHRoZSBvcHRpb24gZXhpc3RzIHRvCiAgICBvcGVuIHRoZSBmaWxlIG9uIHN0YXJ0dXAgYW5kIGNhY2hlIHRoZSBmaWxlIGhhbmRsZS4gVGhlc2UKICAgIG9wdGlvbnMgY2FuIGhlbHAgb24gc3lzdGVtcyB3aGVyZSBhY2Nlc3MgdG8gc3RhdGljIGZpbGVzIGlzCiAgICBzbG93LjwvcD4KCiAgICA8aDM+PGEgbmFtZT0iZmlsZWhhbmRsZSIgaWQ9ImZpbGVoYW5kbGUiPkZpbGUtSGFuZGxlIENhY2hpbmc8L2E+PC9oMz4KICAgICAgCgogICAgICA8cD5UaGUgYWN0IG9mIG9wZW5pbmcgYSBmaWxlIGNhbiBpdHNlbGYgYmUgYSBzb3VyY2Ugb2YgZGVsYXksIHBhcnRpY3VsYXJseQogICAgICBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zLiBCeSBtYWludGFpbmluZyBhIGNhY2hlIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycwogICAgICBmb3IgY29tbW9ubHkgc2VydmVkIGZpbGVzLCBodHRwZCBjYW4gYXZvaWQgdGhpcyBkZWxheS4gQ3VycmVudGx5IGh0dHBkCiAgICAgIHByb3ZpZGVzIG9uZSBpbXBsZW1lbnRhdGlvbiBvZiBGaWxlLUhhbmRsZSBDYWNoaW5nLjwvcD4KCiAgICAgIDxoND5DYWNoZUZpbGU8L2g0PgogICAgICAgIAoKICAgICAgICA8cD5UaGUgbW9zdCBiYXNpYyBmb3JtIG9mIGNhY2hpbmcgcHJlc2VudCBpbiBodHRwZCBpcyB0aGUgZmlsZS1oYW5kbGUKICAgICAgICBjYWNoaW5nIHByb3ZpZGVkIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4uIFJhdGhlciB0aGFuIGNhY2hpbmcKICAgICAgICBmaWxlLWNvbnRlbnRzLCB0aGlzIGNhY2hlIG1haW50YWlucyBhIHRhYmxlIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4gRmlsZXMKICAgICAgICB0byBiZSBjYWNoZWQgaW4gdGhpcyBtYW5uZXIgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nCiAgICAgICAgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjY2FjaGVmaWxlIj5DYWNoZUZpbGU8L2E+PC9jb2RlPgogICAgICAgIGRpcmVjdGl2ZS48L3A+CgogICAgICAgIDxwPlRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjY2FjaGVmaWxlIj5DYWNoZUZpbGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUKICAgICAgICBpbnN0cnVjdHMgaHR0cGQgdG8gb3BlbiB0aGUgZmlsZSB3aGVuIGl0IGlzIHN0YXJ0ZWQgYW5kIHRvIHJlLXVzZQogICAgICAgIHRoaXMgZmlsZS1oYW5kbGUgZm9yIGFsbCBzdWJzZXF1ZW50IGFjY2VzcyB0byB0aGlzIGZpbGUuPC9wPgoKICAgICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Q2FjaGVGaWxlIC91c3IvbG9jYWwvYXBhY2hlMi9odGRvY3MvaW5kZXguaHRtbDwvcHJlPgoKCiAgICAgICAgPHA+SWYgeW91IGludGVuZCB0byBjYWNoZSBhIGxhcmdlIG51bWJlciBvZiBmaWxlcyBpbiB0aGlzIG1hbm5lciwgeW91CiAgICAgICAgbXVzdCBlbnN1cmUgdGhhdCB5b3VyIG9wZXJhdGluZyBzeXN0ZW0ncyBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBvcGVuCiAgICAgICAgZmlsZXMgaXMgc2V0IGFwcHJvcHJpYXRlbHkuPC9wPgoKICAgICAgICA8cD5BbHRob3VnaCB1c2luZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI2NhY2hlZmlsZSI+Q2FjaGVGaWxlPC9hPjwvY29kZT4KICAgICAgICBkb2VzIG5vdCBjYXVzZSB0aGUgZmlsZS1jb250ZW50cyB0byBiZSBjYWNoZWQgcGVyLXNlLCBpdCBkb2VzIG1lYW4KICAgICAgICB0aGF0IGlmIHRoZSBmaWxlIGNoYW5nZXMgd2hpbGUgaHR0cGQgaXMgcnVubmluZyB0aGVzZSBjaGFuZ2VzIHdpbGwKICAgICAgICBub3QgYmUgcGlja2VkIHVwLiBUaGUgZmlsZSB3aWxsIGJlIGNvbnNpc3RlbnRseSBzZXJ2ZWQgYXMgaXQgd2FzCiAgICAgICAgd2hlbiBodHRwZCB3YXMgc3RhcnRlZC48L3A+CgogICAgICAgIDxwPklmIHRoZSBmaWxlIGlzIHJlbW92ZWQgd2hpbGUgaHR0cGQgaXMgcnVubmluZywgaXQgd2lsbCBjb250aW51ZQogICAgICAgIHRvIG1haW50YWluIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXJ2ZSB0aGUgZmlsZSBhcyBpdCB3YXMgd2hlbgogICAgICAgIGh0dHBkIHdhcyBzdGFydGVkLiBUaGlzIHVzdWFsbHkgYWxzbyBtZWFucyB0aGF0IGFsdGhvdWdoIHRoZSBmaWxlCiAgICAgICAgd2lsbCBoYXZlIGJlZW4gZGVsZXRlZCwgYW5kIG5vdCBzaG93IHVwIG9uIHRoZSBmaWxlc3lzdGVtLCBleHRyYSBmcmVlCiAgICAgICAgc3BhY2Ugd2lsbCBub3QgYmUgcmVjb3ZlcmVkIHVudGlsIGh0dHBkIGlzIHN0b3BwZWQgYW5kIHRoZSBmaWxlCiAgICAgICAgZGVzY3JpcHRvciBjbG9zZWQuPC9wPgogICAgICAKCiAgICAKCiAgICA8aDM+PGEgbmFtZT0iaW5tZW1vcnkiIGlkPSJpbm1lbW9yeSI+SW4tTWVtb3J5IENhY2hpbmc8L2E+PC9oMz4KICAgICAgCgogICAgICA8cD5TZXJ2aW5nIGRpcmVjdGx5IGZyb20gc3lzdGVtIG1lbW9yeSBpcyB1bml2ZXJzYWxseSB0aGUgZmFzdGVzdCBtZXRob2QKICAgICAgb2Ygc2VydmluZyBjb250ZW50LiBSZWFkaW5nIGZpbGVzIGZyb20gYSBkaXNrIGNvbnRyb2xsZXIgb3IsIGV2ZW4gd29yc2UsCiAgICAgIGZyb20gYSByZW1vdGUgbmV0d29yayBpcyBvcmRlcnMgb2YgbWFnbml0dWRlIHNsb3dlci4gRGlzayBjb250cm9sbGVycwogICAgICB1c3VhbGx5IGludm9sdmUgcGh5c2ljYWwgcHJvY2Vzc2VzLCBhbmQgbmV0d29yayBhY2Nlc3MgaXMgbGltaXRlZCBieQogICAgICB5b3VyIGF2YWlsYWJsZSBiYW5kd2lkdGguIE1lbW9yeSBhY2Nlc3Mgb24gdGhlIG90aGVyIGhhbmQgY2FuIHRha2UgbWVyZQogICAgICBuYW5vLXNlY29uZHMuPC9wPgoKICAgICAgPHA+U3lzdGVtIG1lbW9yeSBpc24ndCBjaGVhcCB0aG91Z2gsIGJ5dGUgZm9yIGJ5dGUgaXQncyBieSBmYXIgdGhlIG1vc3QKICAgICAgZXhwZW5zaXZlIHR5cGUgb2Ygc3RvcmFnZSBhbmQgaXQncyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgdXNlZAogICAgICBlZmZpY2llbnRseS4gQnkgY2FjaGluZyBmaWxlcyBpbiBtZW1vcnkgeW91IGRlY3JlYXNlIHRoZSBhbW91bnQgb2YKICAgICAgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiBBcyB3ZSdsbCBzZWUsIGluIHRoZSBjYXNlIG9mIG9wZXJhdGluZwogICAgICBzeXN0ZW0gY2FjaGluZywgdGhpcyBpcyBub3Qgc28gbXVjaCBvZiBhbiBpc3N1ZSwgYnV0IHdoZW4gdXNpbmcKICAgICAgaHR0cGQncyBvd24gaW4tbWVtb3J5IGNhY2hpbmcgaXQgaXMgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQogICAgICBkbyBub3QgYWxsb2NhdGUgdG9vIG11Y2ggbWVtb3J5IHRvIGEgY2FjaGUuIE90aGVyd2lzZSB0aGUgc3lzdGVtCiAgICAgIHdpbGwgYmUgZm9yY2VkIHRvIHN3YXAgb3V0IG1lbW9yeSwgd2hpY2ggd2lsbCBsaWtlbHkgZGVncmFkZQogICAgICBwZXJmb3JtYW5jZS48L3A+CgogICAgICA8aDQ+T3BlcmF0aW5nIFN5c3RlbSBDYWNoaW5nPC9oND4KICAgICAgICAKCiAgICAgICAgPHA+QWxtb3N0IGFsbCBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMgY2FjaGUgZmlsZS1kYXRhIGluIG1lbW9yeSBtYW5hZ2VkCiAgICAgICAgZGlyZWN0bHkgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIHBvd2VyZnVsIGZlYXR1cmUsIGFuZCBmb3IgdGhlIG1vc3QKICAgICAgICBwYXJ0IG9wZXJhdGluZyBzeXN0ZW1zIGdldCBpdCByaWdodC4gRm9yIGV4YW1wbGUsIG9uIExpbnV4LCBsZXQncyBsb29rIGF0CiAgICAgICAgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIHRpbWUgaXQgdGFrZXMgdG8gcmVhZCBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lCiAgICAgICAgYW5kIHRoZSBzZWNvbmQgdGltZTs8L3A+CgogICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+Y29sbUBjb3JvZWJ1czp+JCB0aW1lIGNhdCB0ZXN0ZmlsZSAmZ3Q7IC9kZXYvbnVsbApyZWFsICAgIDBtMC4wNjVzCnVzZXIgICAgMG0wLjAwMHMKc3lzICAgICAwbTAuMDAxcwpjb2xtQGNvcm9lYnVzOn4kIHRpbWUgY2F0IHRlc3RmaWxlICZndDsgL2Rldi9udWxsCnJlYWwgICAgMG0wLjAwM3MKdXNlciAgICAwbTAuMDAzcwpzeXMgICAgIDBtMC4wMDBzPC9wcmU+PC9kaXY+CgogICAgICAgIDxwPkV2ZW4gZm9yIHRoaXMgc21hbGwgZmlsZSwgdGhlcmUgaXMgYSBodWdlIGRpZmZlcmVuY2UgaW4gdGhlIGFtb3VudAogICAgICAgIG9mIHRpbWUgaXQgdGFrZXMgdG8gcmVhZCB0aGUgZmlsZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBrZXJuZWwgaGFzIGNhY2hlZAogICAgICAgIHRoZSBmaWxlIGNvbnRlbnRzIGluIG1lbW9yeS48L3A+CgogICAgICAgIDxwPkJ5IGVuc3VyaW5nIHRoZXJlIGlzICJzcGFyZSIgbWVtb3J5IG9uIHlvdXIgc3lzdGVtLCB5b3UgY2FuIGVuc3VyZQogICAgICAgIHRoYXQgbW9yZSBhbmQgbW9yZSBmaWxlLWNvbnRlbnRzIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgY2FjaGUuIFRoaXMKICAgICAgICBjYW4gYmUgYSB2ZXJ5IGVmZmljaWVudCBtZWFucyBvZiBpbi1tZW1vcnkgY2FjaGluZywgYW5kIGludm9sdmVzIG5vCiAgICAgICAgZXh0cmEgY29uZmlndXJhdGlvbiBvZiBodHRwZCBhdCBhbGwuPC9wPgoKICAgICAgICA8cD5BZGRpdGlvbmFsbHksIGJlY2F1c2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga25vd3Mgd2hlbiBmaWxlcyBhcmUKICAgICAgICBkZWxldGVkIG9yIG1vZGlmaWVkLCBpdCBjYW4gYXV0b21hdGljYWxseSByZW1vdmUgZmlsZSBjb250ZW50cyBmcm9tIHRoZQogICAgICAgIGNhY2hlIHdoZW4gbmVjZXNzYXJ5LiBUaGlzIGlzIGEgYmlnIGFkdmFudGFnZSBvdmVyIGh0dHBkJ3MgaW4tbWVtb3J5CiAgICAgICAgY2FjaGluZyB3aGljaCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hlbiBhIGZpbGUgaGFzIGNoYW5nZWQuPC9wPgogICAgICAKCiAgICAgIDxwPkRlc3BpdGUgdGhlIHBlcmZvcm1hbmNlIGFuZCBhZHZhbnRhZ2VzIG9mIGF1dG9tYXRpYyBvcGVyYXRpbmcgc3lzdGVtCiAgICAgIGNhY2hpbmcgdGhlcmUgYXJlIHNvbWUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCBpbi1tZW1vcnkgY2FjaGluZyBtYXkgYmUKICAgICAgYmV0dGVyIHBlcmZvcm1lZCBieSBodHRwZC48L3A+CgogICAgICA8aDQ+TU1hcEZpbGUgQ2FjaGluZzwvaDQ+CiAgICAgICAgCgogICAgICAgIDxwPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4gcHJvdmlkZXMgdGhlCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCNtbWFwZmlsZSI+TU1hcEZpbGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUsIHdoaWNoCiAgICAgICAgYWxsb3dzIHlvdSB0byBoYXZlIGh0dHBkIG1hcCBhIHN0YXRpYyBmaWxlJ3MgY29udGVudHMgaW50byBtZW1vcnkgYXQKICAgICAgICBzdGFydCB0aW1lICh1c2luZyB0aGUgbW1hcCBzeXN0ZW0gY2FsbCkuIGh0dHBkIHdpbGwgdXNlIHRoZSBpbi1tZW1vcnkKICAgICAgICBjb250ZW50cyBmb3IgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhpcyBmaWxlLjwvcD4KCiAgICAgICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPk1NYXBGaWxlIC91c3IvbG9jYWwvYXBhY2hlMi9odGRvY3MvaW5kZXguaHRtbDwvcHJlPgoKCiAgICAgICAgPHA+QXMgd2l0aCB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI2NhY2hlZmlsZSI+Q2FjaGVGaWxlPC9hPjwvY29kZT4gZGlyZWN0aXZlLCBhbnkKICAgICAgICBjaGFuZ2VzIGluIHRoZXNlIGZpbGVzIHdpbGwgbm90IGJlIHBpY2tlZCB1cCBieSBodHRwZCBhZnRlciBpdCBoYXMKICAgICAgICBzdGFydGVkLjwvcD4KCiAgICAgICAgPHA+IFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI21tYXBmaWxlIj5NTWFwRmlsZTwvYT48L2NvZGU+CiAgICAgICAgZGlyZWN0aXZlIGRvZXMgbm90IGtlZXAgdHJhY2sgb2YgaG93IG11Y2ggbWVtb3J5IGl0IGFsbG9jYXRlcywgc28KICAgICAgICB5b3UgbXVzdCBlbnN1cmUgbm90IHRvIG92ZXItdXNlIHRoZSBkaXJlY3RpdmUuIEVhY2ggaHR0cGQgY2hpbGQKICAgICAgICBwcm9jZXNzIHdpbGwgcmVwbGljYXRlIHRoaXMgbWVtb3J5LCBzbyBpdCBpcyBjcml0aWNhbGx5IGltcG9ydGFudAogICAgICAgIHRvIGVuc3VyZSB0aGF0IHRoZSBmaWxlcyBtYXBwZWQgYXJlIG5vdCBzbyBsYXJnZSBhcyB0byBjYXVzZSB0aGUKICAgICAgICBzeXN0ZW0gdG8gc3dhcCBtZW1vcnkuPC9wPgogICAgICAKICAgIAoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InNlY3VyaXR5IiBpZD0ic2VjdXJpdHkiPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9hPjwvaDI+CiAgICAKCiAgICA8aDM+QXV0aG9yaXphdGlvbiBhbmQgQWNjZXNzIENvbnRyb2w8L2gzPgogICAgICAKCiAgICAgIDxwPlVzaW5nIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBpbiBpdHMgZGVmYXVsdCBzdGF0ZSB3aGVyZQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZXF1aWNraGFuZGxlciI+Q2FjaGVRdWlja0hhbmRsZXI8L2E+PC9jb2RlPiBpcyBzZXQgdG8KICAgICAgPGNvZGU+T248L2NvZGU+IGlzIHZlcnkgbXVjaCBsaWtlIGhhdmluZyBhIGNhY2hpbmcgcmV2ZXJzZS1wcm94eSBib2x0ZWQKICAgICAgdG8gdGhlIGZyb250IG9mIHRoZSBzZXJ2ZXIuIFJlcXVlc3RzIHdpbGwgYmUgc2VydmVkIGJ5IHRoZSBjYWNoaW5nIG1vZHVsZQogICAgICB1bmxlc3MgaXQgZGV0ZXJtaW5lcyB0aGF0IHRoZSBvcmlnaW4gc2VydmVyIHNob3VsZCBiZSBxdWVyaWVkIGp1c3QgYXMgYW4KICAgICAgZXh0ZXJuYWwgY2FjaGUgd291bGQsIGFuZCB0aGlzIGRyYXN0aWNhbGx5IGNoYW5nZXMgdGhlIHNlY3VyaXR5IG1vZGVsIG9mCiAgICAgIGh0dHBkLjwvcD4KCiAgICAgIDxwPkFzIHRyYXZlcnNpbmcgYSBmaWxlc3lzdGVtIGhpZXJhcmNoeSB0byBleGFtaW5lIHBvdGVudGlhbAogICAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzIHdvdWxkIGJlIGEgdmVyeSBleHBlbnNpdmUgb3BlcmF0aW9uLAogICAgICBwYXJ0aWFsbHkgZGVmZWF0aW5nIHRoZSBwb2ludCBvZiBjYWNoaW5nICh0byBzcGVlZCB1cCByZXF1ZXN0cyksCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBtYWtlcyBubyBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIGEgY2FjaGVkCiAgICAgIGVudGl0eSBpcyBhdXRob3Jpc2VkIGZvciBzZXJ2aW5nLiBJbiBvdGhlciB3b3JkczsgaWYKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IGhhcyBjYWNoZWQgc29tZSBjb250ZW50LCBpdCB3aWxsIGJlIHNlcnZlZAogICAgICBmcm9tIHRoZSBjYWNoZSBhcyBsb25nIGFzIHRoYXQgY29udGVudCBoYXMgbm90IGV4cGlyZWQuPC9wPgoKICAgICAgPHA+SWYsIGZvciBleGFtcGxlLCB5b3VyIGNvbmZpZ3VyYXRpb24gcGVybWl0cyBhY2Nlc3MgdG8gYSByZXNvdXJjZSBieSBJUAogICAgICBhZGRyZXNzIHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgdGhpcyBjb250ZW50IGlzIG5vdCBjYWNoZWQuIFlvdSBjYW4gZG8gdGhpcwogICAgICBieSB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkaXNhYmxlIj5DYWNoZURpc2FibGU8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUsIG9yIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9leHBpcmVzLmh0bWwiPm1vZF9leHBpcmVzPC9hPjwvY29kZT4uIExlZnQgdW5jaGVja2VkLAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gLSB2ZXJ5IG11Y2ggbGlrZSBhIHJldmVyc2UgcHJveHkgLSB3b3VsZCBjYWNoZQogICAgICB0aGUgY29udGVudCB3aGVuIHNlcnZlZCBhbmQgdGhlbiBzZXJ2ZSBpdCB0byBhbnkgY2xpZW50LCBvbiBhbnkgSVAKICAgICAgYWRkcmVzcy48L3A+CgogICAgICA8cD5XaGVuIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZXF1aWNraGFuZGxlciI+Q2FjaGVRdWlja0hhbmRsZXI8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUgaXMgc2V0IHRvIDxjb2RlPk9mZjwvY29kZT4sIHRoZSBmdWxsIHNldCBvZiByZXF1ZXN0IHByb2Nlc3NpbmcKICAgICAgcGhhc2VzIGFyZSBleGVjdXRlZCBhbmQgdGhlIHNlY3VyaXR5IG1vZGVsIHJlbWFpbnMgdW5jaGFuZ2VkLjwvcD4KICAgIAoKICAgIDxoMz5Mb2NhbCBleHBsb2l0czwvaDM+CiAgICAgIAoKICAgICAgPHA+QXMgcmVxdWVzdHMgdG8gZW5kLXVzZXJzIGNhbiBiZSBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGUsIHRoZSBjYWNoZQogICAgICBpdHNlbGYgY2FuIGJlY29tZSBhIHRhcmdldCBmb3IgdGhvc2Ugd2lzaGluZyB0byBkZWZhY2Ugb3IgaW50ZXJmZXJlIHdpdGgKICAgICAgY29udGVudC4gSXQgaXMgaW1wb3J0YW50IHRvIGJlYXIgaW4gbWluZCB0aGF0IHRoZSBjYWNoZSBtdXN0IGF0IGFsbAogICAgICB0aW1lcyBiZSB3cml0YWJsZSBieSB0aGUgdXNlciB3aGljaCBodHRwZCBpcyBydW5uaW5nIGFzLiBUaGlzIGlzIGluCiAgICAgIHN0YXJrIGNvbnRyYXN0IHRvIHRoZSB1c3VhbGx5IHJlY29tbWVuZGVkIHNpdHVhdGlvbiBvZiBtYWludGFpbmluZwogICAgICBhbGwgY29udGVudCB1bndyaXRhYmxlIGJ5IHRoZSBBcGFjaGUgdXNlci48L3A+CgogICAgICA8cD5JZiB0aGUgQXBhY2hlIHVzZXIgaXMgY29tcHJvbWlzZWQsIGZvciBleGFtcGxlIHRocm91Z2ggYSBmbGF3IGluCiAgICAgIGEgQ0dJIHByb2Nlc3MsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNhY2hlIG1heSBiZSB0YXJnZXRlZC4gV2hlbgogICAgICB1c2luZyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+LCBpdCBpcyByZWxhdGl2ZWx5IGVhc3kgdG8KICAgICAgaW5zZXJ0IG9yIG1vZGlmeSBhIGNhY2hlZCBlbnRpdHkuPC9wPgoKICAgICAgPHA+VGhpcyBwcmVzZW50cyBhIHNvbWV3aGF0IGVsZXZhdGVkIHJpc2sgaW4gY29tcGFyaXNvbiB0byB0aGUgb3RoZXIKICAgICAgdHlwZXMgb2YgYXR0YWNrIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYXMgdGhlIEFwYWNoZSB1c2VyLiBJZiB5b3UgYXJlCiAgICAgIHVzaW5nIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4geW91IHNob3VsZCBiZWFyIHRoaXMgaW4gbWluZCAtCiAgICAgIGVuc3VyZSB5b3UgdXBncmFkZSBodHRwZCB3aGVuIHNlY3VyaXR5IHVwZ3JhZGVzIGFyZSBhbm5vdW5jZWQgYW5kCiAgICAgIHJ1biBDR0kgcHJvY2Vzc2VzIGFzIGEgbm9uLUFwYWNoZSB1c2VyIHVzaW5nIDxhIGhyZWY9InN1ZXhlYy5odG1sIj5zdUVYRUM8L2E+IGlmIHBvc3NpYmxlLjwvcD4KCiAgICAKCiAgICA8aDM+Q2FjaGUgUG9pc29uaW5nPC9oMz4KICAgICAgCgogICAgICA8cD5XaGVuIHJ1bm5pbmcgaHR0cGQgYXMgYSBjYWNoaW5nIHByb3h5IHNlcnZlciwgdGhlcmUgaXMgYWxzbyB0aGUKICAgICAgcG90ZW50aWFsIGZvciBzby1jYWxsZWQgY2FjaGUgcG9pc29uaW5nLiBDYWNoZSBQb2lzb25pbmcgaXMgYSBicm9hZAogICAgICB0ZXJtIGZvciBhdHRhY2tzIGluIHdoaWNoIGFuIGF0dGFja2VyIGNhdXNlcyB0aGUgcHJveHkgc2VydmVyIHRvCiAgICAgIHJldHJpZXZlIGluY29ycmVjdCAoYW5kIHVzdWFsbHkgdW5kZXNpcmFibGUpIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luCiAgICAgIHNlcnZlci48L3A+CgogICAgICA8cD5Gb3IgZXhhbXBsZSBpZiB0aGUgRE5TIHNlcnZlcnMgdXNlZCBieSB5b3VyIHN5c3RlbSBydW5uaW5nIGh0dHBkCiAgICAgIGFyZSB2dWxuZXJhYmxlIHRvIEROUyBjYWNoZSBwb2lzb25pbmcsIGFuIGF0dGFja2VyIG1heSBiZSBhYmxlIHRvIGNvbnRyb2wKICAgICAgd2hlcmUgaHR0cGQgY29ubmVjdHMgdG8gd2hlbiByZXF1ZXN0aW5nIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luIHNlcnZlci4KICAgICAgQW5vdGhlciBleGFtcGxlIGlzIHNvLWNhbGxlZCBIVFRQIHJlcXVlc3Qtc211Z2dsaW5nIGF0dGFja3MuPC9wPgoKICAgICAgPHA+VGhpcyBkb2N1bWVudCBpcyBub3QgdGhlIGNvcnJlY3QgcGxhY2UgZm9yIGFuIGluLWRlcHRoIGRpc2N1c3Npb24KICAgICAgb2YgSFRUUCByZXF1ZXN0IHNtdWdnbGluZyAoaW5zdGVhZCwgdHJ5IHlvdXIgZmF2b3VyaXRlIHNlYXJjaCBlbmdpbmUpCiAgICAgIGhvd2V2ZXIgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGF3YXJlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gbWFrZQogICAgICBhIHNlcmllcyBvZiByZXF1ZXN0cywgYW5kIHRvIGV4cGxvaXQgYSB2dWxuZXJhYmlsaXR5IG9uIGFuIG9yaWdpbgogICAgICB3ZWJzZXJ2ZXIgc3VjaCB0aGF0IHRoZSBhdHRhY2tlciBjYW4gZW50aXJlbHkgY29udHJvbCB0aGUgY29udGVudAogICAgICByZXRyaWV2ZWQgYnkgdGhlIHByb3h5LjwvcD4KICAgIAoKICAgIDxoMz5EZW5pYWwgb2YgU2VydmljZSAvIENhY2hlYnVzdGluZzwvaDM+CiAgICAgIAoKICAgICAgPHA+VGhlIFZhcnkgbWVjaGFuaXNtIGFsbG93cyBtdWx0aXBsZSB2YXJpYW50cyBvZiB0aGUgc2FtZSBVUkwgdG8gYmUKICAgICAgY2FjaGVkIHNpZGUgYnkgc2lkZS4gRGVwZW5kaW5nIG9uIGhlYWRlciB2YWx1ZXMgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwKICAgICAgdGhlIGNhY2hlIHdpbGwgc2VsZWN0IHRoZSBjb3JyZWN0IHZhcmlhbnQgdG8gcmV0dXJuIHRvIHRoZSBjbGllbnQuIFRoaXMKICAgICAgbWVjaGFuaXNtIGNhbiBiZWNvbWUgYSBwcm9ibGVtIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHZhcnkgb24gYQogICAgICBoZWFkZXIgdGhhdCBpcyBrbm93biB0byBjb250YWluIGEgd2lkZSByYW5nZSBvZiBwb3NzaWJsZSB2YWx1ZXMgdW5kZXIKICAgICAgbm9ybWFsIHVzZSwgZm9yIGV4YW1wbGUgdGhlIDxjb2RlPlVzZXItQWdlbnQ8L2NvZGU+IGhlYWRlci4gRGVwZW5kaW5nCiAgICAgIG9uIHRoZSBwb3B1bGFyaXR5IG9mIHRoZSBwYXJ0aWN1bGFyIHdlYiBzaXRlIHRob3VzYW5kcyBvciBtaWxsaW9ucyBvZgogICAgICBkdXBsaWNhdGUgY2FjaGUgZW50cmllcyBjb3VsZCBiZSBjcmVhdGVkIGZvciB0aGUgc2FtZSBVUkwsIGNyb3dkaW5nCiAgICAgIG91dCBvdGhlciBlbnRyaWVzIGluIHRoZSBjYWNoZS48L3A+CiAgICAgIAogICAgICA8cD5JbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlIGEgbmVlZCB0byBjaGFuZ2UgdGhlIFVSTCBvZiBhIHBhcnRpY3VsYXIKICAgICAgcmVzb3VyY2Ugb24gZXZlcnkgcmVxdWVzdCwgdXN1YWxseSBieSBhZGRpbmcgYSAiY2FjaGVidXN0ZXIiIHN0cmluZyB0bwogICAgICB0aGUgVVJMLiBJZiB0aGlzIGNvbnRlbnQgaXMgZGVjbGFyZWQgY2FjaGVhYmxlIGJ5IGEgc2VydmVyIGZvciBhCiAgICAgIHNpZ25pZmljYW50IGZyZXNobmVzcyBsaWZldGltZSwgdGhlc2UgZW50cmllcyBjYW4gY3Jvd2Qgb3V0CiAgICAgIGxlZ2l0aW1hdGUgZW50cmllcyBpbiBhIGNhY2hlLiBXaGlsZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4KICAgICAgcHJvdmlkZXMgYQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWlnbm9yZXVybHNlc3Npb25pZGVudGlmaWVycyI+Q2FjaGVJZ25vcmVVUkxTZXNzaW9uSWRlbnRpZmllcnM8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUsIHRoaXMgZGlyZWN0aXZlIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSB0byBlbnN1cmUgdGhhdAogICAgICBkb3duc3RyZWFtIHByb3h5IG9yIGJyb3dzZXIgY2FjaGVzIGFyZW4ndCBzdWJqZWN0ZWQgdG8gdGhlIHNhbWUgZGVuaWFsCiAgICAgIG9mIHNlcnZpY2UgaXNzdWUuPC9wPgogICAgCiAgPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9jYWNoaW5nLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2NhY2hpbmcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2NhY2hpbmcuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvY2FjaGluZy5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+