PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPkNhY2hpbmcgR3VpZGUgLSBBcGFjaGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjM8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZmVhdGhlci5naWYiIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi8iPlZlcnNpb24gMi4zPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5DYWNoaW5nIEd1aWRlPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL2NhY2hpbmcuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvY2FjaGluZy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvY2FjaGluZy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKICAgIDxwPlRoaXMgZG9jdW1lbnQgc3VwcGxlbWVudHMgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiwKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4gYW5kIDxhIGhyZWY9InByb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIj5odGNhY2hlY2xlYW48L2E+IHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uLgogICAgSXQgZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlcidzIGNhY2hpbmcgZmVhdHVyZXMgdG8gYWNjZWxlcmF0ZSB3ZWIgYW5kCiAgICBwcm94eSBzZXJ2aW5nLCB3aGlsZSBhdm9pZGluZyBjb21tb24gcHJvYmxlbXMgYW5kIG1pc2NvbmZpZ3VyYXRpb25zLjwvcD4KICA8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2h0dHAtY2FjaGluZyI+VGhyZWUtc3RhdGUgUkZDMjYxNiBIVFRQIGNhY2hpbmc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzb2NhY2hlLWNhY2hpbmciPlR3by1zdGF0ZSBLZXkvVmFsdWUgU2hhcmVkIE9iamVjdCBDYWNoaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZmlsZS1jYWNoaW5nIj5TcGVjaWFsaXplZCBGaWxlIENhY2hpbmc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZWN1cml0eSI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJpbnRyb2R1Y3Rpb24iIGlkPSJpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2gyPgogICAgCiAgICAKICAgIDxwPlRoZSBBcGFjaGUgSFRUUCBzZXJ2ZXIgb2ZmZXJzIGEgcmFuZ2Ugb2YgY2FjaGluZyBmZWF0dXJlcyB0aGF0CiAgICBhcmUgZGVzaWduZWQgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHNlcnZlciBpbiB2YXJpb3VzCiAgICB3YXlzLjwvcD4KCiAgICA8ZGw+CiAgICAgICAgPGR0PlRocmVlLXN0YXRlIFJGQzI2MTYgSFRUUCBjYWNoaW5nPC9kdD4KICAgICAgICA8ZGQ+CiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPgogICAgICAgICAgICBhbmQgaXRzIHByb3ZpZGVyIG1vZHVsZXMKICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCI+bW9kX2NhY2hlX2Rpc2s8L2E+PC9jb2RlPgogICAgICAgICAgICBwcm92aWRlIGludGVsbGlnZW50LCBIVFRQLWF3YXJlIGNhY2hpbmcuIFRoZSBjb250ZW50IGl0c2VsZiBpcyBzdG9yZWQKICAgICAgICAgICAgaW4gdGhlIGNhY2hlLCBhbmQgbW9kX2NhY2hlIGFpbXMgdG8gaG9ub3IgYWxsIG9mIHRoZSB2YXJpb3VzIEhUVFAKICAgICAgICAgICAgaGVhZGVycyBhbmQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNhY2hlYWJpbGl0eSBvZiBjb250ZW50CiAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbgogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEzLmh0bWwiPlNlY3Rpb24KICAgICAgICAgICAgMTMgb2YgUkZDMjYxNjwvYT4uCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPgogICAgICAgICAgICBpcyBhaW1lZCBhdCBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBjYWNoaW5nIGNvbmZpZ3VyYXRpb25zLCB3aGVyZQogICAgICAgICAgICB5b3UgYXJlIGRlYWxpbmcgd2l0aCBwcm94aWVkIGNvbnRlbnQsIGR5bmFtaWMgbG9jYWwgY29udGVudCBvcgogICAgICAgICAgICBoYXZlIGEgbmVlZCB0byBzcGVlZCB1cCBhY2Nlc3MgdG8gbG9jYWwgZmlsZXMgb24gYSBwb3RlbnRpYWxseQogICAgICAgICAgICBzbG93IGRpc2suCiAgICAgICAgPC9kZD4KCiAgICAgICAgPGR0PlR3by1zdGF0ZSBrZXkvdmFsdWUgc2hhcmVkIG9iamVjdCBjYWNoaW5nPC9kdD4KICAgICAgICA8ZGQ+CiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zb2NhY2hlLmh0bWwiPm1vZF9zb2NhY2hlPC9hPjwvY29kZT4KICAgICAgICAgICAgYW5kIGl0cyBwcm92aWRlciBtb2R1bGVzIHByb3ZpZGUgYQogICAgICAgICAgICBzZXJ2ZXIgd2lkZSBrZXkvdmFsdWUgYmFzZWQgc2hhcmVkIG9iamVjdCBjYWNoZS4gVGhlc2UgbW9kdWxlcwogICAgICAgICAgICBhcmUgZGVzaWduZWQgdG8gY2FjaGUgbG93IGxldmVsIGRhdGEgc3VjaCBhcyBTU0wgc2Vzc2lvbnMgYW5kCiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLiBCYWNrZW5kcyBhbGxvdyB0aGUgZGF0YSB0byBiZSBzdG9yZWQKICAgICAgICAgICAgc2VydmVyIHdpZGUgaW4gc2hhcmVkIG1lbW9yeSwgb3IgZGF0YWNlbnRlciB3aWRlIGluIGEgY2FjaGUgc3VjaAogICAgICAgICAgICBhcyBtZW1jYWNoZSBvciBkaXN0Y2FjaGUuCiAgICAgICAgPC9kZD4KCiAgICAgICAgPGR0PlNwZWNpYWxpemVkIGZpbGUgY2FjaGluZzwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sIj5tb2RfZmlsZV9jYWNoZTwvYT48L2NvZGU+CiAgICAgICAgICAgIG9mZmVycyB0aGUgYWJpbGl0eSB0byBwcmUtbG9hZAogICAgICAgICAgICBmaWxlcyBpbnRvIG1lbW9yeSBvbiBzZXJ2ZXIgc3RhcnR1cCwgYW5kIGNhbiBpbXByb3ZlIGFjY2VzcwogICAgICAgICAgICB0aW1lcyBhbmQgc2F2ZSBmaWxlIGhhbmRsZXMgb24gZmlsZXMgdGhhdCBhcmUgYWNjZXNzZWQgb2Z0ZW4sCiAgICAgICAgICAgIGFzIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ28gdG8gZGlzayBvbiBlYWNoIHJlcXVlc3QuCiAgICAgICAgPC9kZD4KICAgIDwvZGw+CgogICAgPHA+VG8gZ2V0IHRoZSBtb3N0IGZyb20gdGhpcyBkb2N1bWVudCwgeW91IHNob3VsZCBiZSBmYW1pbGlhciB3aXRoCiAgICB0aGUgYmFzaWNzIG9mIEhUVFAsIGFuZCBoYXZlIHJlYWQgdGhlIFVzZXJzJyBHdWlkZXMgdG8KICAgIDxhIGhyZWY9InVybG1hcHBpbmcuaHRtbCI+TWFwcGluZyBVUkxzIHRvIHRoZSBGaWxlc3lzdGVtPC9hPiBhbmQKICAgIDxhIGhyZWY9ImNvbnRlbnQtbmVnb3RpYXRpb24uaHRtbCI+Q29udGVudCBuZWdvdGlhdGlvbjwvYT4uPC9wPgoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Imh0dHAtY2FjaGluZyIgaWQ9Imh0dHAtY2FjaGluZyI+VGhyZWUtc3RhdGUgUkZDMjYxNiBIVFRQIGNhY2hpbmc8L2E+PC9oMj4KCiAgICAKCiAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVlbmFibGUiPkNhY2hlRW5hYmxlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWRpc2FibGUiPkNhY2hlRGlzYWJsZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9uZWdvdGlhdGlvbi5odG1sI2NhY2hlbmVnb3RpYXRlZGRvY3MiPkNhY2hlTmVnb3RpYXRlZERvY3M8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjwvdHI+PC90YWJsZT4KCiAgICA8cD5UaGUgSFRUUCBwcm90b2NvbCBjb250YWlucyBidWlsdCBpbiBzdXBwb3J0IGZvciBhbiBpbi1saW5lIGNhY2hpbmcKICAgIG1lY2hhbmlzbSAKICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTMuaHRtbCI+CiAgICBkZXNjcmliZWQgYnkgc2VjdGlvbiAxMyBvZiBSRkMyNjE2PC9hPiwgYW5kIHRoZQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IG1vZHVsZSBjYW4gYmUgdXNlZCB0byB0YWtlIGFkdmFudGFnZSBvZgogICAgdGhpcy48L3A+CgogICAgPHA+VW5saWtlIGEgc2ltcGxlIHR3byBzdGF0ZSBrZXkvdmFsdWUgY2FjaGUgd2hlcmUgdGhlIGNvbnRlbnQKICAgIGRpc2FwcGVhcnMgY29tcGxldGVseSB3aGVuIG5vIGxvbmdlciBmcmVzaCwgYW4gSFRUUCBjYWNoZSBpbmNsdWRlcwogICAgYSBtZWNoYW5pc20gdG8gcmV0YWluIHN0YWxlIGNvbnRlbnQsIGFuZCB0byBhc2sgdGhlIG9yaWdpbiBzZXJ2ZXIKICAgIHdoZXRoZXIgdGhpcyBzdGFsZSBjb250ZW50IGhhcyBjaGFuZ2VkIGFuZCBpZiBub3QsIG1ha2UgaXQgZnJlc2gKICAgIGFnYWluLjwvcD4KCiAgICA8cD5BbiBlbnRyeSBpbiBhbiBIVFRQIGNhY2hlIGV4aXN0cyBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOjwvcD4KCiAgICA8ZGw+CiAgICA8ZHQ+RnJlc2g8L2R0PgogICAgPGRkPgogICAgICAgIElmIHRoZSBjb250ZW50IGlzIG5ldyBlbm91Z2ggKHlvdW5nZXIgdGhhbiBpdHMgPHN0cm9uZz5mcmVzaG5lc3MKICAgICAgICBsaWZldGltZTwvc3Ryb25nPiksIGl0IGlzIGNvbnNpZGVyZWQgPHN0cm9uZz5mcmVzaDwvc3Ryb25nPi4gQW4KICAgICAgICBIVFRQIGNhY2hlIGlzIGZyZWUgdG8gc2VydmUgZnJlc2ggY29udGVudCB3aXRob3V0IG1ha2luZyBhbnkKICAgICAgICBjYWxscyB0byB0aGUgb3JpZ2luIHNlcnZlciBhdCBhbGwuCiAgICA8L2RkPgogICAgPGR0PlN0YWxlPC9kdD4KICAgIDxkZD4KICAgICAgICA8cD5JZiB0aGUgY29udGVudCBpcyB0b28gb2xkIChvbGRlciB0aGFuIGl0cyA8c3Ryb25nPmZyZXNobmVzcwogICAgICAgIGxpZmV0aW1lPC9zdHJvbmc+KSwgaXQgaXMgY29uc2lkZXJlZCA8c3Ryb25nPnN0YWxlPC9zdHJvbmc+LiBBbgogICAgICAgIEhUVFAgY2FjaGUgc2hvdWxkIGNvbnRhY3QgdGhlIG9yaWdpbiBzZXJ2ZXIgYW5kIGNoZWNrIHdoZXRoZXIKICAgICAgICB0aGUgY29udGVudCBpcyBzdGlsbCBmcmVzaCBiZWZvcmUgc2VydmluZyBzdGFsZSBjb250ZW50IHRvIGEKICAgICAgICBjbGllbnQuIFRoZSBvcmlnaW4gc2VydmVyIHdpbGwgZWl0aGVyIHJlc3BvbmQgd2l0aCByZXBsYWNlbWVudAogICAgICAgIGNvbnRlbnQgaWYgbm90IHN0aWxsIHZhbGlkLCBvciBpZGVhbGx5LCB0aGUgb3JpZ2luIHNlcnZlciB3aWxsCiAgICAgICAgcmVzcG9uZCB3aXRoIGEgY29kZSB0byB0ZWxsIHRoZSBjYWNoZSB0aGUgY29udGVudCBpcyBzdGlsbAogICAgICAgIGZyZXNoLCB3aXRob3V0IHRoZSBuZWVkIHRvIGdlbmVyYXRlIG9yIHNlbmQgdGhlIGNvbnRlbnQgYWdhaW4uCiAgICAgICAgVGhlIGNvbnRlbnQgYmVjb21lcyBmcmVzaCBhZ2FpbiBhbmQgdGhlIGN5Y2xlIGNvbnRpbnVlcy48L3A+CgogICAgICAgIDxwPlRoZSBIVFRQIHByb3RvY29sIGRvZXMgYWxsb3cgdGhlIGNhY2hlIHRvIHNlcnZlIHN0YWxlIGRhdGEKICAgICAgICB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHN1Y2ggYXMgd2hlbiBhbiBhdHRlbXB0IHRvIGZyZXNoZW4KICAgICAgICB0aGUgZGF0YSB3aXRoIGFuIG9yaWdpbiBzZXJ2ZXIgaGFzIGZhaWxlZCB3aXRoIGEgNXh4IGVycm9yLCBvcgogICAgICAgIHdoZW4gYW5vdGhlciByZXF1ZXN0IGlzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgZnJlc2hlbmluZwogICAgICAgIHRoZSBnaXZlbiBlbnRyeS4gSW4gdGhlc2UgY2FzZXMgYSA8Y29kZT5XYXJuaW5nPC9jb2RlPiBoZWFkZXIKICAgICAgICBpcyBhZGRlZCB0byB0aGUgcmVzcG9uc2UuPC9wPgogICAgPC9kZD4KICAgIDxkdD5Ob24gRXhpc3RlbnQ8L2R0PgogICAgPGRkPgogICAgICAgIElmIHRoZSBjYWNoZSBnZXRzIGZ1bGwsIGl0IHJlc2VydmVzIHRoZSBvcHRpb24gdG8gZGVsZXRlIGNvbnRlbnQKICAgICAgICBmcm9tIHRoZSBjYWNoZSB0byBtYWtlIHNwYWNlLiBDb250ZW50IGNhbiBiZSBkZWxldGVkIGF0IGFueSB0aW1lLAogICAgICAgIGFuZCBjYW4gYmUgc3RhbGUgb3IgZnJlc2guIFRoZSA8YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiB0b29sIGNhbiBiZQogICAgICAgIHJ1biBvbiBhIG9uY2Ugb2ZmIGJhc2lzLCBvciBkZXBsb3llZCBhcyBhIGRhZW1vbiB0byBrZWVwIHRoZSBzaXplCiAgICAgICAgb2YgdGhlIGNhY2hlIHdpdGhpbiB0aGUgZ2l2ZW4gc2l6ZSwgb3IgdGhlIGdpdmVuIG51bWJlciBvZiBpbm9kZXMuCiAgICAgICAgVGhlIHRvb2wgYXR0ZW1wdHMgdG8gZGVsZXRlIHN0YWxlIGNvbnRlbnQgYmVmb3JlIGF0dGVtcHRpbmcgdG8KICAgICAgICBkZWxldGUgZnJlc2ggY29udGVudC4KICAgIDwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPkZ1bGwgZGV0YWlscyBvZiBob3cgSFRUUCBjYWNoaW5nIHdvcmtzIGNhbiBiZSBmb3VuZCBpbgogICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMy5odG1sIj4KICAgIFNlY3Rpb24gMTMgb2YgUkZDMjYxNjwvYT4uPC9wPgoKICAgIDxoMz5JbnRlcmFjdGlvbiB3aXRoIHRoZSBTZXJ2ZXI8L2gzPgogICAgICAKCiAgICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gbW9kdWxlIGhvb2tzIGludG8gdGhlIHNlcnZlciBpbiB0d28KICAgICAgcG9zc2libGUgcGxhY2VzIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlcXVpY2toYW5kbGVyIj5DYWNoZVF1aWNrSGFuZGxlcjwvYT48L2NvZGU+IGRpcmVjdGl2ZToKICAgICAgPC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD5RdWljayBoYW5kbGVyIHBoYXNlPC9kdD4KICAgICAgICA8ZGQ+CiAgICAgICAgICA8cD5UaGlzIHBoYXNlIGhhcHBlbnMgdmVyeSBlYXJseSBvbiBkdXJpbmcgdGhlIHJlcXVlc3QgcHJvY2Vzc2luZywKICAgICAgICAgICAgICBqdXN0IGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHBhcnNlZC4gSWYgdGhlIGNvbnRlbnQgaXMKICAgICAgICAgICAgICBmb3VuZCB3aXRoaW4gdGhlIGNhY2hlLCBpdCBpcyBzZXJ2ZWQgaW1tZWRpYXRlbHkgYW5kIGFsbW9zdAogICAgICAgICAgICAgIGFsbCByZXF1ZXN0IHByb2Nlc3NpbmcgaXMgYnlwYXNzZWQuPC9wPgoKICAgICAgICAgICAgICA8cD5JbiB0aGlzIHNjZW5hcmlvLCB0aGUgY2FjaGUgYmVoYXZlcyBhcyBpZiBpdCBoYXMgYmVlbiAiYm9sdGVkCiAgICAgICAgICAgICAgb24iIHRvIHRoZSBmcm9udCBvZiB0aGUgc2VydmVyLjwvcD4KICAgICAgICAgICAgICAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGUgb2ZmZXJzIHRoZSBiZXN0IHBlcmZvcm1hbmNlLCBhcyB0aGUgbWFqb3JpdHkgb2YKICAgICAgICAgICAgICBzZXJ2ZXIgcHJvY2Vzc2luZyBpcyBieXBhc3NlZC4gVGhpcyBtb2RlIGhvd2V2ZXIgYWxzbyBieXBhc3NlcyB0aGUKICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbiBwaGFzZXMgb2Ygc2VydmVyIHByb2Nlc3NpbmcsIHNvCiAgICAgICAgICAgICAgdGhpcyBtb2RlIHNob3VsZCBiZSBjaG9zZW4gd2l0aCBjYXJlIHdoZW4gdGhpcyBpcyBpbXBvcnRhbnQuPC9wPgogICAgICAgICAgPC9kZD4KICAgICAgICAgIDxkdD5Ob3JtYWwgaGFuZGxlciBwaGFzZTwvZHQ+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+VmFyeTwvY29kZT4KICAgICAgdG8gZGVjaWRlIG9uIHdoaWNoIG9mIG1hbnkgdmFyaWFudHMgdG8gcmV0dXJuIHRvIHRoZSBjbGllbnQuPC9wPgogICAgCgogICAgPGgzPjxhIG5hbWU9ImRpc2siIGlkPSJkaXNrIj5DYWNoaW5nIHRvIERpc2s8L2E+PC9oMz4KICAgICAgCgogICAgICA8cD5UaGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IG1vZHVsZSByZWxpZXMgb24gc3BlY2lmaWMgYmFja2VuZCBzdG9yZQogICAgICBpbXBsZW1lbnRhdGlvbnMgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBjYWNoZSwgYW5kIGZvciBjYWNoaW5nIHRvIGRpc2sKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCI+bW9kX2NhY2hlX2Rpc2s8L2E+PC9jb2RlPiBpcyBwcm92aWRlZCB0byBzdXBwb3J0IHRoaXMuPC9wPgoKICAgICAgPHA+VHlwaWNhbGx5IHRoZSBtb2R1bGUgd2lsbCBiZSBjb25maWd1cmVkIGFzIHNvOzwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgpDYWNoZVJvb3QgICAvdmFyL2NhY2hlL2FwYWNoZS88YnIgLz4KQ2FjaGVFbmFibGUgZGlzayAvPGJyIC8+CkNhY2hlRGlyTGV2ZWxzIDI8YnIgLz4KQ2FjaGVEaXJMZW5ndGggMQogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgICAgPHA+SW1wb3J0YW50bHksIGFzIHRoZSBjYWNoZWQgZmlsZXMgYXJlIGxvY2FsbHkgc3RvcmVkLCBvcGVyYXRpbmcgc3lzdGVtCiAgICAgIGluLW1lbW9yeSBjYWNoaW5nIHdpbGwgdHlwaWNhbGx5IGJlIGFwcGxpZWQgdG8gdGhlaXIgYWNjZXNzIGFsc28uIFNvCiAgICAgIGFsdGhvdWdoIHRoZSBmaWxlcyBhcmUgc3RvcmVkIG9uIGRpc2ssIGlmIHRoZXkgYXJlIGZyZXF1ZW50bHkgYWNjZXNzZWQKICAgICAgaXQgaXMgbGlrZWx5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgZW5zdXJlIHRoYXQgdGhleSBhcmUgYWN0dWFsbHkKICAgICAgc2VydmVkIGZyb20gbWVtb3J5LjwvcD4KCiAgICAKCiAgICA8aDM+VW5kZXJzdGFuZGluZyB0aGUgQ2FjaGUtU3RvcmU8L2gzPgogICAgICAKCiAgICAgIDxwPlRvIHN0b3JlIGl0ZW1zIGluIHRoZSBjYWNoZSwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCI+bW9kX2NhY2hlX2Rpc2s8L2E+PC9jb2RlPiBjcmVhdGVzCiAgICAgIGEgMjIgY2hhcmFjdGVyIGhhc2ggb2YgdGhlIFVSTCBiZWluZyByZXF1ZXN0ZWQuIFRoaXMgaGFzaCBpbmNvcnBvcmF0ZXMKICAgICAgdGhlIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgcGF0aCBhbmQgYW55IENHSSBhcmd1bWVudHMgdG8gdGhlIFVSTCwKICAgICAgYXMgd2VsbCBhcyBlbGVtZW50cyBkZWZpbmVkIGJ5IHRoZSBWYXJ5IGhlYWRlciB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZQogICAgICBVUkxzIGRvIG5vdCBjb2xsaWRlIHdpdGggb25lIGFub3RoZXIuPC9wPgoKICAgICAgPHA+RWFjaCBjaGFyYWN0ZXIgbWF5IGJlIGFueSBvbmUgb2YgNjQtZGlmZmVyZW50IGNoYXJhY3RlcnMsIHdoaWNoIG1lYW4KICAgICAgdGhhdCBvdmVyYWxsIHRoZXJlIGFyZSA2NF4yMiBwb3NzaWJsZSBoYXNoZXMuIEZvciBleGFtcGxlLCBhIFVSTCBtaWdodAogICAgICBiZSBoYXNoZWQgdG8gPGNvZGU+eHlUR3hTTU8yYjY4bUJDeWtxa3AxdzwvY29kZT4uIFRoaXMgaGFzaCBpcyB1c2VkCiAgICAgIGFzIGEgcHJlZml4IGZvciB0aGUgbmFtaW5nIG9mIHRoZSBmaWxlcyBzcGVjaWZpYyB0byB0aGF0IFVSTCB3aXRoaW4KICAgICAgdGhlIGNhY2hlLCBob3dldmVyIGZpcnN0IGl0IGlzIHNwbGl0IHVwIGludG8gZGlyZWN0b3JpZXMgYXMgcGVyCiAgICAgIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sI2NhY2hlZGlybGV2ZWxzIj5DYWNoZURpckxldmVsczwvYT48L2NvZGU+IGFuZAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sI2NhY2hlZGlybGVuZ3RoIj5DYWNoZURpckxlbmd0aDwvYT48L2NvZGU+CiAgICAgIGRpcmVjdGl2ZXMuPC9wPgoKICAgICAgPHA+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZWRpcmxldmVscyI+Q2FjaGVEaXJMZXZlbHM8L2E+PC9jb2RlPgogICAgICBzcGVjaWZpZXMgaG93IG1hbnkgbGV2ZWxzIG9mIHN1YmRpcmVjdG9yeSB0aGVyZSBzaG91bGQgYmUsIGFuZAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sI2NhY2hlZGlybGVuZ3RoIj5DYWNoZURpckxlbmd0aDwvYT48L2NvZGU+CiAgICAgIHNwZWNpZmllcyBob3cgbWFueSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBpbiBlYWNoIGRpcmVjdG9yeS4gV2l0aAogICAgICB0aGUgZXhhbXBsZSBzZXR0aW5ncyBnaXZlbiBhYm92ZSwgdGhlIGhhc2ggd291bGQgYmUgdHVybmVkIGludG8KICAgICAgYSBmaWxlbmFtZSBwcmVmaXggYXMKICAgICAgPGNvZGU+L3Zhci9jYWNoZS9hcGFjaGUveC95L1RHeFNNTzJiNjhtQkN5a3FrcDF3PC9jb2RlPi48L3A+CgogICAgICA8cD5UaGUgb3ZlcmFsbCBhaW0gb2YgdGhpcyB0ZWNobmlxdWUgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YKICAgICAgc3ViZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBtYXkgYmUgaW4gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwKICAgICAgYXMgbW9zdCBmaWxlLXN5c3RlbXMgc2xvdyBkb3duIGFzIHRoaXMgbnVtYmVyIGluY3JlYXNlcy4gV2l0aAogICAgICBzZXR0aW5nIG9mICIxIiBmb3IKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZWRpcmxlbmd0aCI+Q2FjaGVEaXJMZW5ndGg8L2E+PC9jb2RlPgogICAgICB0aGVyZSBjYW4gYXQgbW9zdCBiZSA2NCBzdWJkaXJlY3RvcmllcyBhdCBhbnkgcGFydGljdWxhciBsZXZlbC4KICAgICAgV2l0aCBhIHNldHRpbmcgb2YgMiB0aGVyZSBjYW4gYmUgNjQgKiA2NCBzdWJkaXJlY3RvcmllcywgYW5kIHNvIG9uLgogICAgICBVbmxlc3MgeW91IGhhdmUgYSBnb29kIHJlYXNvbiBub3QgdG8sIHVzaW5nIGEgc2V0dGluZyBvZiAiMSIKICAgICAgZm9yIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwjY2FjaGVkaXJsZW5ndGgiPkNhY2hlRGlyTGVuZ3RoPC9hPjwvY29kZT4KICAgICAgaXMgcmVjb21tZW5kZWQuPC9wPgoKICAgICAgPHA+U2V0dGluZwogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sI2NhY2hlZGlybGV2ZWxzIj5DYWNoZURpckxldmVsczwvYT48L2NvZGU+CiAgICAgIGRlcGVuZHMgb24gaG93IG1hbnkgZmlsZXMgeW91IGFudGljaXBhdGUgdG8gc3RvcmUgaW4gdGhlIGNhY2hlLgogICAgICBXaXRoIHRoZSBzZXR0aW5nIG9mICIyIiB1c2VkIGluIHRoZSBhYm92ZSBleGFtcGxlLCBhIGdyYW5kCiAgICAgIHRvdGFsIG9mIDQwOTYgc3ViZGlyZWN0b3JpZXMgY2FuIHVsdGltYXRlbHkgYmUgY3JlYXRlZC4gV2l0aAogICAgICAxIG1pbGxpb24gZmlsZXMgY2FjaGVkLCB0aGlzIHdvcmtzIG91dCBhdCByb3VnaGx5IDI0NSBjYWNoZWQKICAgICAgVVJMcyBwZXIgZGlyZWN0b3J5LjwvcD4KCiAgICAgIDxwPkVhY2ggVVJMIHVzZXMgYXQgbGVhc3QgdHdvIGZpbGVzIGluIHRoZSBjYWNoZS1zdG9yZS4gVHlwaWNhbGx5CiAgICAgIHRoZXJlIGlzIGEgIi5oZWFkZXIiIGZpbGUsIHdoaWNoIGluY2x1ZGVzIG1ldGEtaW5mb3JtYXRpb24gYWJvdXQKICAgICAgdGhlIFVSTCwgc3VjaCBhcyB3aGVuIGl0IGlzIGR1ZSB0byBleHBpcmUgYW5kIGEgIi5kYXRhIiBmaWxlCiAgICAgIHdoaWNoIGlzIGEgdmVyYmF0aW0gY29weSBvZiB0aGUgY29udGVudCB0byBiZSBzZXJ2ZWQuPC9wPgoKICAgICAgPHA+SW4gdGhlIGNhc2Ugb2YgYSBjb250ZW50IG5lZ290aWF0ZWQgdmlhIHRoZSAiVmFyeSIgaGVhZGVyLCBhCiAgICAgICIudmFyeSIgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlIFVSTCBpbiBxdWVzdGlvbi4gVGhpcwogICAgICBkaXJlY3Rvcnkgd2lsbCBoYXZlIG11bHRpcGxlICIuZGF0YSIgZmlsZXMgY29ycmVzcG9uZGluZyB0byB0aGUKICAgICAgZGlmZmVyZW50bHkgbmVnb3RpYXRlZCBjb250ZW50LjwvcD4KICAgIAoKICAgIDxoMz5NYWludGFpbmluZyB0aGUgRGlzayBDYWNoZTwvaDM+CiAgICAgIAoKICAgICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4gbW9kdWxlIG1ha2VzIG5vIGF0dGVtcHQgdG8KICAgICAgcmVndWxhdGUgdGhlIGFtb3VudCBvZiBkaXNrIHNwYWNlIHVzZWQgYnkgdGhlIGNhY2hlLCBhbHRob3VnaCBpdAogICAgICB3aWxsIGdyYWNlZnVsbHkgc3RhbmQgZG93biBvbiBhbnkgZGlzayBlcnJvciBhbmQgYmVoYXZlIGFzIGlmIHRoZQogICAgICBjYWNoZSB3YXMgbmV2ZXIgcHJlc2VudC48L3A+CgogICAgICA8cD5JbnN0ZWFkLCBwcm92aWRlZCB3aXRoIGh0dHBkIGlzIHRoZSA8YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiB0b29sIHdoaWNoIGFsbG93cyB5b3UKICAgICAgdG8gY2xlYW4gdGhlIGNhY2hlIHBlcmlvZGljYWxseS4gRGV0ZXJtaW5pbmcgaG93IGZyZXF1ZW50bHkgdG8gcnVuIDxhIGhyZWY9InByb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIj5odGNhY2hlY2xlYW48L2E+IGFuZCB3aGF0IHRhcmdldCBzaXplIHRvCiAgICAgIHVzZSBmb3IgdGhlIGNhY2hlIGlzIHNvbWV3aGF0IGNvbXBsZXggYW5kIHRyaWFsIGFuZCBlcnJvciBtYXkgYmUgbmVlZGVkIHRvCiAgICAgIHNlbGVjdCBvcHRpbWFsIHZhbHVlcy48L3A+CgogICAgICA8cD48YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiBoYXMgdHdvIG1vZGVzIG9mCiAgICAgIG9wZXJhdGlvbi4gSXQgY2FuIGJlIHJ1biBhcyBwZXJzaXN0ZW50IGRhZW1vbiwgb3IgcGVyaW9kaWNhbGx5IGZyb20KICAgICAgY3Jvbi4gPGEgaHJlZj0icHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiPmh0Y2FjaGVjbGVhbjwvYT4gY2FuIHRha2UgdXAgdG8gYW4gaG91cgogICAgICBvciBtb3JlIHRvIHByb2Nlc3MgdmVyeSBsYXJnZSAodGVucyBvZiBnaWdhYnl0ZXMpIGNhY2hlcyBhbmQgaWYgeW91IGFyZQogICAgICBydW5uaW5nIGl0IGZyb20gY3JvbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkZXRlcm1pbmUgaG93IGxvbmcgYSB0eXBpY2FsCiAgICAgIHJ1biB0YWtlcywgdG8gYXZvaWQgcnVubmluZyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIGF0IGEgdGltZS48L3A+CiAKICAgICAgPHA+SXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IGFuIGFwcHJvcHJpYXRlICJuaWNlIiBsZXZlbCBpcyBjaG9zZW4gZm9yCiAgICAgIGh0Y2FjaGVjbGVhbiBzbyB0aGF0IHRoZSB0b29sIGRvZXMgbm90IGNhdXNlIGV4Y2Vzc2l2ZSBkaXNrIGlvIHdoaWxlIHRoZQogICAgICBzZXJ2ZXIgaXMgcnVubmluZy48L3A+CgogICAgICA8cCBjbGFzcz0iZmlndXJlIj4KICAgICAgPGltZyBzcmM9ImltYWdlcy9jYWNoaW5nX2ZpZzEuZ2lmIiBhbHQ9IiIgd2lkdGg9IjYwMCIgaGVpZ2h0PSI0MDYiIC8+PGJyIC8+CiAgICAgIDxhIGlkPSJmaWd1cmUxIiBuYW1lPSJmaWd1cmUxIj48ZGZuPkZpZ3VyZSAxPC9kZm4+PC9hPjogVHlwaWNhbAogICAgICBjYWNoZSBncm93dGggLyBjbGVhbiBzZXF1ZW5jZS48L3A+CgogICAgICA8cD5CZWNhdXNlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4gZG9lcyBub3QgaXRzZWxmIHBheSBhdHRlbnRpb24KICAgICAgdG8gaG93IG11Y2ggc3BhY2UgaXMgdXNlZCB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0CiAgICAgIDxhIGhyZWY9InByb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIj5odGNhY2hlY2xlYW48L2E+IGlzIGNvbmZpZ3VyZWQgdG8KICAgICAgbGVhdmUgZW5vdWdoICJncm93IHJvb20iIGZvbGxvd2luZyBhIGNsZWFuLjwvcD4KICAgIAoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InNvY2FjaGUtY2FjaGluZyIgaWQ9InNvY2FjaGUtY2FjaGluZyI+VHdvLXN0YXRlIEtleS9WYWx1ZSBTaGFyZWQgT2JqZWN0IENhY2hpbmc8L2E+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+PC9jb2RlPiBkaXJlY3RpdmUKICAgICAgICBpbnN0cnVjdHMgaHR0cGQgdG8gb3BlbiB0aGUgZmlsZSB3aGVuIGl0IGlzIHN0YXJ0ZWQgYW5kIHRvIHJlLXVzZQogICAgICAgIHRoaXMgZmlsZS1oYW5kbGUgZm9yIGFsbCBzdWJzZXF1ZW50IGFjY2VzcyB0byB0aGlzIGZpbGUuPC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICBDYWNoZUZpbGUgL3Vzci9sb2NhbC9hcGFjaGUyL2h0ZG9jcy9pbmRleC5odG1sCiAgICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgICAgPHA+SWYgeW91IGludGVuZCB0byBjYWNoZSBhIGxhcmdlIG51bWJlciBvZiBmaWxlcyBpbiB0aGlzIG1hbm5lciwgeW91CiAgICAgICAgbXVzdCBlbnN1cmUgdGhhdCB5b3VyIG9wZXJhdGluZyBzeXN0ZW0ncyBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBvcGVuCiAgICAgICAgZmlsZXMgaXMgc2V0IGFwcHJvcHJpYXRlbHkuPC9wPgoKICAgICAgICA8cD5BbHRob3VnaCB1c2luZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI2NhY2hlZmlsZSI+Q2FjaGVGaWxlPC9hPjwvY29kZT4KICAgICAgICBkb2VzIG5vdCBjYXVzZSB0aGUgZmlsZS1jb250ZW50cyB0byBiZSBjYWNoZWQgcGVyLXNlLCBpdCBkb2VzIG1lYW4KICAgICAgICB0aGF0IGlmIHRoZSBmaWxlIGNoYW5nZXMgd2hpbGUgaHR0cGQgaXMgcnVubmluZyB0aGVzZSBjaGFuZ2VzIHdpbGwKICAgICAgICBub3QgYmUgcGlja2VkIHVwLiBUaGUgZmlsZSB3aWxsIGJlIGNvbnNpc3RlbnRseSBzZXJ2ZWQgYXMgaXQgd2FzCiAgICAgICAgd2hlbiBodHRwZCB3YXMgc3RhcnRlZC48L3A+CgogICAgICAgIDxwPklmIHRoZSBmaWxlIGlzIHJlbW92ZWQgd2hpbGUgaHR0cGQgaXMgcnVubmluZywgaXQgd2lsbCBjb250aW51ZQogICAgICAgIHRvIG1haW50YWluIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXJ2ZSB0aGUgZmlsZSBhcyBpdCB3YXMgd2hlbgogICAgICAgIGh0dHBkIHdhcyBzdGFydGVkLiBUaGlzIHVzdWFsbHkgYWxzbyBtZWFucyB0aGF0IGFsdGhvdWdoIHRoZSBmaWxlCiAgICAgICAgd2lsbCBoYXZlIGJlZW4gZGVsZXRlZCwgYW5kIG5vdCBzaG93IHVwIG9uIHRoZSBmaWxlc3lzdGVtLCBleHRyYSBmcmVlCiAgICAgICAgc3BhY2Ugd2lsbCBub3QgYmUgcmVjb3ZlcmVkIHVudGlsIGh0dHBkIGlzIHN0b3BwZWQgYW5kIHRoZSBmaWxlCiAgICAgICAgZGVzY3JpcHRvciBjbG9zZWQuPC9wPgogICAgICAKCiAgICAKCiAgICA8aDM+PGEgbmFtZT0iaW5tZW1vcnkiIGlkPSJpbm1lbW9yeSI+SW4tTWVtb3J5IENhY2hpbmc8L2E+PC9oMz4KICAgICAgCgogICAgICA8cD5TZXJ2aW5nIGRpcmVjdGx5IGZyb20gc3lzdGVtIG1lbW9yeSBpcyB1bml2ZXJzYWxseSB0aGUgZmFzdGVzdCBtZXRob2QKICAgICAgb2Ygc2VydmluZyBjb250ZW50LiBSZWFkaW5nIGZpbGVzIGZyb20gYSBkaXNrIGNvbnRyb2xsZXIgb3IsIGV2ZW4gd29yc2UsCiAgICAgIGZyb20gYSByZW1vdGUgbmV0d29yayBpcyBvcmRlcnMgb2YgbWFnbml0dWRlIHNsb3dlci4gRGlzayBjb250cm9sbGVycwogICAgICB1c3VhbGx5IGludm9sdmUgcGh5c2ljYWwgcHJvY2Vzc2VzLCBhbmQgbmV0d29yayBhY2Nlc3MgaXMgbGltaXRlZCBieQogICAgICB5b3VyIGF2YWlsYWJsZSBiYW5kd2lkdGguIE1lbW9yeSBhY2Nlc3Mgb24gdGhlIG90aGVyIGhhbmQgY2FuIHRha2UgbWVyZQogICAgICBuYW5vLXNlY29uZHMuPC9wPgoKICAgICAgPHA+U3lzdGVtIG1lbW9yeSBpc24ndCBjaGVhcCB0aG91Z2gsIGJ5dGUgZm9yIGJ5dGUgaXQncyBieSBmYXIgdGhlIG1vc3QKICAgICAgZXhwZW5zaXZlIHR5cGUgb2Ygc3RvcmFnZSBhbmQgaXQncyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgdXNlZAogICAgICBlZmZpY2llbnRseS4gQnkgY2FjaGluZyBmaWxlcyBpbiBtZW1vcnkgeW91IGRlY3JlYXNlIHRoZSBhbW91bnQgb2YKICAgICAgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiBBcyB3ZSdsbCBzZWUsIGluIHRoZSBjYXNlIG9mIG9wZXJhdGluZwogICAgICBzeXN0ZW0gY2FjaGluZywgdGhpcyBpcyBub3Qgc28gbXVjaCBvZiBhbiBpc3N1ZSwgYnV0IHdoZW4gdXNpbmcKICAgICAgaHR0cGQncyBvd24gaW4tbWVtb3J5IGNhY2hpbmcgaXQgaXMgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQogICAgICBkbyBub3QgYWxsb2NhdGUgdG9vIG11Y2ggbWVtb3J5IHRvIGEgY2FjaGUuIE90aGVyd2lzZSB0aGUgc3lzdGVtCiAgICAgIHdpbGwgYmUgZm9yY2VkIHRvIHN3YXAgb3V0IG1lbW9yeSwgd2hpY2ggd2lsbCBsaWtlbHkgZGVncmFkZQogICAgICBwZXJmb3JtYW5jZS48L3A+CgogICAgICA8aDQ+T3BlcmF0aW5nIFN5c3RlbSBDYWNoaW5nPC9oND4KICAgICAgICAKCiAgICAgICAgPHA+QWxtb3N0IGFsbCBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMgY2FjaGUgZmlsZS1kYXRhIGluIG1lbW9yeSBtYW5hZ2VkCiAgICAgICAgZGlyZWN0bHkgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIHBvd2VyZnVsIGZlYXR1cmUsIGFuZCBmb3IgdGhlIG1vc3QKICAgICAgICBwYXJ0IG9wZXJhdGluZyBzeXN0ZW1zIGdldCBpdCByaWdodC4gRm9yIGV4YW1wbGUsIG9uIExpbnV4LCBsZXQncyBsb29rIGF0CiAgICAgICAgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIHRpbWUgaXQgdGFrZXMgdG8gcmVhZCBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lCiAgICAgICAgYW5kIHRoZSBzZWNvbmQgdGltZTs8L3A+CgogICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+CmNvbG1AY29yb2VidXM6fiQgdGltZSBjYXQgdGVzdGZpbGUgJmd0OyAvZGV2L251bGwKcmVhbCAgICAwbTAuMDY1cwp1c2VyICAgIDBtMC4wMDBzCnN5cyAgICAgMG0wLjAwMXMKY29sbUBjb3JvZWJ1czp+JCB0aW1lIGNhdCB0ZXN0ZmlsZSAmZ3Q7IC9kZXYvbnVsbApyZWFsICAgIDBtMC4wMDNzCnVzZXIgICAgMG0wLjAwM3MKc3lzICAgICAwbTAuMDAwczwvcHJlPjwvZGl2PgoKICAgICAgICA8cD5FdmVuIGZvciB0aGlzIHNtYWxsIGZpbGUsIHRoZXJlIGlzIGEgaHVnZSBkaWZmZXJlbmNlIGluIHRoZSBhbW91bnQKICAgICAgICBvZiB0aW1lIGl0IHRha2VzIHRvIHJlYWQgdGhlIGZpbGUuIFRoaXMgaXMgYmVjYXVzZSB0aGUga2VybmVsIGhhcyBjYWNoZWQKICAgICAgICB0aGUgZmlsZSBjb250ZW50cyBpbiBtZW1vcnkuPC9wPgoKICAgICAgICA8cD5CeSBlbnN1cmluZyB0aGVyZSBpcyAic3BhcmUiIG1lbW9yeSBvbiB5b3VyIHN5c3RlbSwgeW91IGNhbiBlbnN1cmUKICAgICAgICB0aGF0IG1vcmUgYW5kIG1vcmUgZmlsZS1jb250ZW50cyB3aWxsIGJlIHN0b3JlZCBpbiB0aGlzIGNhY2hlLiBUaGlzCiAgICAgICAgY2FuIGJlIGEgdmVyeSBlZmZpY2llbnQgbWVhbnMgb2YgaW4tbWVtb3J5IGNhY2hpbmcsIGFuZCBpbnZvbHZlcyBubwogICAgICAgIGV4dHJhIGNvbmZpZ3VyYXRpb24gb2YgaHR0cGQgYXQgYWxsLjwvcD4KCiAgICAgICAgPHA+QWRkaXRpb25hbGx5LCBiZWNhdXNlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtub3dzIHdoZW4gZmlsZXMgYXJlCiAgICAgICAgZGVsZXRlZCBvciBtb2RpZmllZCwgaXQgY2FuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGZpbGUgY29udGVudHMgZnJvbSB0aGUKICAgICAgICBjYWNoZSB3aGVuIG5lY2Vzc2FyeS4gVGhpcyBpcyBhIGJpZyBhZHZhbnRhZ2Ugb3ZlciBodHRwZCdzIGluLW1lbW9yeQogICAgICAgIGNhY2hpbmcgd2hpY2ggaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoZW4gYSBmaWxlIGhhcyBjaGFuZ2VkLjwvcD4KICAgICAgCgogICAgICA8cD5EZXNwaXRlIHRoZSBwZXJmb3JtYW5jZSBhbmQgYWR2YW50YWdlcyBvZiBhdXRvbWF0aWMgb3BlcmF0aW5nIHN5c3RlbQogICAgICBjYWNoaW5nIHRoZXJlIGFyZSBzb21lIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggaW4tbWVtb3J5IGNhY2hpbmcgbWF5IGJlCiAgICAgIGJldHRlciBwZXJmb3JtZWQgYnkgaHR0cGQuPC9wPgoKICAgICAgPGg0Pk1NYXBGaWxlIENhY2hpbmc8L2g0PgogICAgICAgIAoKICAgICAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sIj5tb2RfZmlsZV9jYWNoZTwvYT48L2NvZGU+IHByb3ZpZGVzIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjbW1hcGZpbGUiPk1NYXBGaWxlPC9hPjwvY29kZT4gZGlyZWN0aXZlLCB3aGljaAogICAgICAgIGFsbG93cyB5b3UgdG8gaGF2ZSBodHRwZCBtYXAgYSBzdGF0aWMgZmlsZSdzIGNvbnRlbnRzIGludG8gbWVtb3J5IGF0CiAgICAgICAgc3RhcnQgdGltZSAodXNpbmcgdGhlIG1tYXAgc3lzdGVtIGNhbGwpLiBodHRwZCB3aWxsIHVzZSB0aGUgaW4tbWVtb3J5CiAgICAgICAgY29udGVudHMgZm9yIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc2VzIHRvIHRoaXMgZmlsZS48L3A+CgogICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgIE1NYXBGaWxlIC91c3IvbG9jYWwvYXBhY2hlMi9odGRvY3MvaW5kZXguaHRtbAogICAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICAgIDxwPkFzIHdpdGggdGhlCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCNjYWNoZWZpbGUiPkNhY2hlRmlsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSwgYW55CiAgICAgICAgY2hhbmdlcyBpbiB0aGVzZSBmaWxlcyB3aWxsIG5vdCBiZSBwaWNrZWQgdXAgYnkgaHR0cGQgYWZ0ZXIgaXQgaGFzCiAgICAgICAgc3RhcnRlZC48L3A+CgogICAgICAgIDxwPiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCNtbWFwZmlsZSI+TU1hcEZpbGU8L2E+PC9jb2RlPgogICAgICAgIGRpcmVjdGl2ZSBkb2VzIG5vdCBrZWVwIHRyYWNrIG9mIGhvdyBtdWNoIG1lbW9yeSBpdCBhbGxvY2F0ZXMsIHNvCiAgICAgICAgeW91IG11c3QgZW5zdXJlIG5vdCB0byBvdmVyLXVzZSB0aGUgZGlyZWN0aXZlLiBFYWNoIGh0dHBkIGNoaWxkCiAgICAgICAgcHJvY2VzcyB3aWxsIHJlcGxpY2F0ZSB0aGlzIG1lbW9yeSwgc28gaXQgaXMgY3JpdGljYWxseSBpbXBvcnRhbnQKICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgZmlsZXMgbWFwcGVkIGFyZSBub3Qgc28gbGFyZ2UgYXMgdG8gY2F1c2UgdGhlCiAgICAgICAgc3lzdGVtIHRvIHN3YXAgbWVtb3J5LjwvcD4KICAgICAgCiAgICAKCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzZWN1cml0eSIgaWQ9InNlY3VyaXR5Ij5TZWN1cml0eSBDb25zaWRlcmF0aW9uczwvYT48L2gyPgogICAgCgogICAgPGgzPkF1dGhvcml6YXRpb24gYW5kIEFjY2VzcyBDb250cm9sPC9oMz4KICAgICAgCgogICAgICA8cD5Vc2luZyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gaW4gaXRzIGRlZmF1bHQgc3RhdGUgd2hlcmUKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVxdWlja2hhbmRsZXIiPkNhY2hlUXVpY2tIYW5kbGVyPC9hPjwvY29kZT4gaXMgc2V0IHRvCiAgICAgIDxjb2RlPk9uPC9jb2RlPiBpcyB2ZXJ5IG11Y2ggbGlrZSBoYXZpbmcgYSBjYWNoaW5nIHJldmVyc2UtcHJveHkgYm9sdGVkCiAgICAgIHRvIHRoZSBmcm9udCBvZiB0aGUgc2VydmVyLiBSZXF1ZXN0cyB3aWxsIGJlIHNlcnZlZCBieSB0aGUgY2FjaGluZyBtb2R1bGUKICAgICAgdW5sZXNzIGl0IGRldGVybWluZXMgdGhhdCB0aGUgb3JpZ2luIHNlcnZlciBzaG91bGQgYmUgcXVlcmllZCBqdXN0IGFzIGFuCiAgICAgIGV4dGVybmFsIGNhY2hlIHdvdWxkLCBhbmQgdGhpcyBkcmFzdGljYWxseSBjaGFuZ2VzIHRoZSBzZWN1cml0eSBtb2RlbCBvZgogICAgICBodHRwZC48L3A+CgogICAgICA8cD5BcyB0cmF2ZXJzaW5nIGEgZmlsZXN5c3RlbSBoaWVyYXJjaHkgdG8gZXhhbWluZSBwb3RlbnRpYWwKICAgICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcyB3b3VsZCBiZSBhIHZlcnkgZXhwZW5zaXZlIG9wZXJhdGlvbiwKICAgICAgcGFydGlhbGx5IGRlZmVhdGluZyB0aGUgcG9pbnQgb2YgY2FjaGluZyAodG8gc3BlZWQgdXAgcmVxdWVzdHMpLAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gbWFrZXMgbm8gZGVjaXNpb24gYWJvdXQgd2hldGhlciBhIGNhY2hlZAogICAgICBlbnRpdHkgaXMgYXV0aG9yaXNlZCBmb3Igc2VydmluZy4gSW4gb3RoZXIgd29yZHM7IGlmCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBoYXMgY2FjaGVkIHNvbWUgY29udGVudCwgaXQgd2lsbCBiZSBzZXJ2ZWQKICAgICAgZnJvbSB0aGUgY2FjaGUgYXMgbG9uZyBhcyB0aGF0IGNvbnRlbnQgaGFzIG5vdCBleHBpcmVkLjwvcD4KCiAgICAgIDxwPklmLCBmb3IgZXhhbXBsZSwgeW91ciBjb25maWd1cmF0aW9uIHBlcm1pdHMgYWNjZXNzIHRvIGEgcmVzb3VyY2UgYnkgSVAKICAgICAgYWRkcmVzcyB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoaXMgY29udGVudCBpcyBub3QgY2FjaGVkLiBZb3UgY2FuIGRvIHRoaXMKICAgICAgYnkgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZGlzYWJsZSI+Q2FjaGVEaXNhYmxlPC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlLCBvciA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZXhwaXJlcy5odG1sIj5tb2RfZXhwaXJlczwvYT48L2NvZGU+LiBMZWZ0IHVuY2hlY2tlZCwKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IC0gdmVyeSBtdWNoIGxpa2UgYSByZXZlcnNlIHByb3h5IC0gd291bGQgY2FjaGUKICAgICAgdGhlIGNvbnRlbnQgd2hlbiBzZXJ2ZWQgYW5kIHRoZW4gc2VydmUgaXQgdG8gYW55IGNsaWVudCwgb24gYW55IElQCiAgICAgIGFkZHJlc3MuPC9wPgoKICAgICAgPHA+V2hlbiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVxdWlja2hhbmRsZXIiPkNhY2hlUXVpY2tIYW5kbGVyPC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlIGlzIHNldCB0byA8Y29kZT5PZmY8L2NvZGU+LCB0aGUgZnVsbCBzZXQgb2YgcmVxdWVzdCBwcm9jZXNzaW5nCiAgICAgIHBoYXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBzZWN1cml0eSBtb2RlbCByZW1haW5zIHVuY2hhbmdlZC48L3A+CiAgICAKCiAgICA8aDM+TG9jYWwgZXhwbG9pdHM8L2gzPgogICAgICAKCiAgICAgIDxwPkFzIHJlcXVlc3RzIHRvIGVuZC11c2VycyBjYW4gYmUgc2VydmVkIGZyb20gdGhlIGNhY2hlLCB0aGUgY2FjaGUKICAgICAgaXRzZWxmIGNhbiBiZWNvbWUgYSB0YXJnZXQgZm9yIHRob3NlIHdpc2hpbmcgdG8gZGVmYWNlIG9yIGludGVyZmVyZSB3aXRoCiAgICAgIGNvbnRlbnQuIEl0IGlzIGltcG9ydGFudCB0byBiZWFyIGluIG1pbmQgdGhhdCB0aGUgY2FjaGUgbXVzdCBhdCBhbGwKICAgICAgdGltZXMgYmUgd3JpdGFibGUgYnkgdGhlIHVzZXIgd2hpY2ggaHR0cGQgaXMgcnVubmluZyBhcy4gVGhpcyBpcyBpbgogICAgICBzdGFyayBjb250cmFzdCB0byB0aGUgdXN1YWxseSByZWNvbW1lbmRlZCBzaXR1YXRpb24gb2YgbWFpbnRhaW5pbmcKICAgICAgYWxsIGNvbnRlbnQgdW53cml0YWJsZSBieSB0aGUgQXBhY2hlIHVzZXIuPC9wPgoKICAgICAgPHA+SWYgdGhlIEFwYWNoZSB1c2VyIGlzIGNvbXByb21pc2VkLCBmb3IgZXhhbXBsZSB0aHJvdWdoIGEgZmxhdyBpbgogICAgICBhIENHSSBwcm9jZXNzLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjYWNoZSBtYXkgYmUgdGFyZ2V0ZWQuIFdoZW4KICAgICAgdXNpbmcgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCI+bW9kX2NhY2hlX2Rpc2s8L2E+PC9jb2RlPiwgaXQgaXMgcmVsYXRpdmVseSBlYXN5IHRvCiAgICAgIGluc2VydCBvciBtb2RpZnkgYSBjYWNoZWQgZW50aXR5LjwvcD4KCiAgICAgIDxwPlRoaXMgcHJlc2VudHMgYSBzb21ld2hhdCBlbGV2YXRlZCByaXNrIGluIGNvbXBhcmlzb24gdG8gdGhlIG90aGVyCiAgICAgIHR5cGVzIG9mIGF0dGFjayBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGFzIHRoZSBBcGFjaGUgdXNlci4gSWYgeW91IGFyZQogICAgICB1c2luZyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGVfZGlzay5odG1sIj5tb2RfY2FjaGVfZGlzazwvYT48L2NvZGU+IHlvdSBzaG91bGQgYmVhciB0aGlzIGluIG1pbmQgLQogICAgICBlbnN1cmUgeW91IHVwZ3JhZGUgaHR0cGQgd2hlbiBzZWN1cml0eSB1cGdyYWRlcyBhcmUgYW5ub3VuY2VkIGFuZAogICAgICBydW4gQ0dJIHByb2Nlc3NlcyBhcyBhIG5vbi1BcGFjaGUgdXNlciB1c2luZyA8YSBocmVmPSJzdWV4ZWMuaHRtbCI+c3VFWEVDPC9hPiBpZiBwb3NzaWJsZS48L3A+CgogICAgCgogICAgPGgzPkNhY2hlIFBvaXNvbmluZzwvaDM+CiAgICAgIAoKICAgICAgPHA+V2hlbiBydW5uaW5nIGh0dHBkIGFzIGEgY2FjaGluZyBwcm94eSBzZXJ2ZXIsIHRoZXJlIGlzIGFsc28gdGhlCiAgICAgIHBvdGVudGlhbCBmb3Igc28tY2FsbGVkIGNhY2hlIHBvaXNvbmluZy4gQ2FjaGUgUG9pc29uaW5nIGlzIGEgYnJvYWQKICAgICAgdGVybSBmb3IgYXR0YWNrcyBpbiB3aGljaCBhbiBhdHRhY2tlciBjYXVzZXMgdGhlIHByb3h5IHNlcnZlciB0bwogICAgICByZXRyaWV2ZSBpbmNvcnJlY3QgKGFuZCB1c3VhbGx5IHVuZGVzaXJhYmxlKSBjb250ZW50IGZyb20gdGhlIG9yaWdpbgogICAgICBzZXJ2ZXIuPC9wPgoKICAgICAgPHA+Rm9yIGV4YW1wbGUgaWYgdGhlIEROUyBzZXJ2ZXJzIHVzZWQgYnkgeW91ciBzeXN0ZW0gcnVubmluZyBodHRwZAogICAgICBhcmUgdnVsbmVyYWJsZSB0byBETlMgY2FjaGUgcG9pc29uaW5nLCBhbiBhdHRhY2tlciBtYXkgYmUgYWJsZSB0byBjb250cm9sCiAgICAgIHdoZXJlIGh0dHBkIGNvbm5lY3RzIHRvIHdoZW4gcmVxdWVzdGluZyBjb250ZW50IGZyb20gdGhlIG9yaWdpbiBzZXJ2ZXIuCiAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyBzby1jYWxsZWQgSFRUUCByZXF1ZXN0LXNtdWdnbGluZyBhdHRhY2tzLjwvcD4KCiAgICAgIDxwPlRoaXMgZG9jdW1lbnQgaXMgbm90IHRoZSBjb3JyZWN0IHBsYWNlIGZvciBhbiBpbi1kZXB0aCBkaXNjdXNzaW9uCiAgICAgIG9mIEhUVFAgcmVxdWVzdCBzbXVnZ2xpbmcgKGluc3RlYWQsIHRyeSB5b3VyIGZhdm91cml0ZSBzZWFyY2ggZW5naW5lKQogICAgICBob3dldmVyIGl0IGlzIGltcG9ydGFudCB0byBiZSBhd2FyZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UKICAgICAgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGFuZCB0byBleHBsb2l0IGEgdnVsbmVyYWJpbGl0eSBvbiBhbiBvcmlnaW4KICAgICAgd2Vic2VydmVyIHN1Y2ggdGhhdCB0aGUgYXR0YWNrZXIgY2FuIGVudGlyZWx5IGNvbnRyb2wgdGhlIGNvbnRlbnQKICAgICAgcmV0cmlldmVkIGJ5IHRoZSBwcm94eS48L3A+CiAgICAKCiAgICA8aDM+RGVuaWFsIG9mIFNlcnZpY2UgLyBDYWNoZWJ1c3Rpbmc8L2gzPgogICAgICAKCiAgICAgIDxwPlRoZSBWYXJ5IG1lY2hhbmlzbSBhbGxvd3MgbXVsdGlwbGUgdmFyaWFudHMgb2YgdGhlIHNhbWUgVVJMIHRvIGJlCiAgICAgIGNhY2hlZCBzaWRlIGJ5IHNpZGUuIERlcGVuZGluZyBvbiBoZWFkZXIgdmFsdWVzIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQsCiAgICAgIHRoZSBjYWNoZSB3aWxsIHNlbGVjdCB0aGUgY29ycmVjdCB2YXJpYW50IHRvIHJldHVybiB0byB0aGUgY2xpZW50LiBUaGlzCiAgICAgIG1lY2hhbmlzbSBjYW4gYmVjb21lIGEgcHJvYmxlbSB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byB2YXJ5IG9uIGEKICAgICAgaGVhZGVyIHRoYXQgaXMga25vd24gdG8gY29udGFpbiBhIHdpZGUgcmFuZ2Ugb2YgcG9zc2libGUgdmFsdWVzIHVuZGVyCiAgICAgIG5vcm1hbCB1c2UsIGZvciBleGFtcGxlIHRoZSA8Y29kZT5Vc2VyLUFnZW50PC9jb2RlPiBoZWFkZXIuIERlcGVuZGluZwogICAgICBvbiB0aGUgcG9wdWxhcml0eSBvZiB0aGUgcGFydGljdWxhciB3ZWIgc2l0ZSB0aG91c2FuZHMgb3IgbWlsbGlvbnMgb2YKICAgICAgZHVwbGljYXRlIGNhY2hlIGVudHJpZXMgY291bGQgYmUgY3JlYXRlZCBmb3IgdGhlIHNhbWUgVVJMLCBjcm93ZGluZwogICAgICBvdXQgb3RoZXIgZW50cmllcyBpbiB0aGUgY2FjaGUuPC9wPgogICAgICAKICAgICAgPHA+SW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZSBhIG5lZWQgdG8gY2hhbmdlIHRoZSBVUkwgb2YgYSBwYXJ0aWN1bGFyCiAgICAgIHJlc291cmNlIG9uIGV2ZXJ5IHJlcXVlc3QsIHVzdWFsbHkgYnkgYWRkaW5nIGEgImNhY2hlYnVzdGVyIiBzdHJpbmcgdG8KICAgICAgdGhlIFVSTC4gSWYgdGhpcyBjb250ZW50IGlzIGRlY2xhcmVkIGNhY2hlYWJsZSBieSBhIHNlcnZlciBmb3IgYQogICAgICBzaWduaWZpY2FudCBmcmVzaG5lc3MgbGlmZXRpbWUsIHRoZXNlIGVudHJpZXMgY2FuIGNyb3dkIG91dAogICAgICBsZWdpdGltYXRlIGVudHJpZXMgaW4gYSBjYWNoZS4gV2hpbGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+CiAgICAgIHByb3ZpZGVzIGEKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVpZ25vcmV1cmxzZXNzaW9uaWRlbnRpZmllcnMiPkNhY2hlSWdub3JlVVJMU2Vzc2lvbklkZW50aWZpZXJzPC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlLCB0aGlzIGRpcmVjdGl2ZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUgdG8gZW5zdXJlIHRoYXQKICAgICAgZG93bnN0cmVhbSBwcm94eSBvciBicm93c2VyIGNhY2hlcyBhcmVuJ3Qgc3ViamVjdGVkIHRvIHRoZSBzYW1lIGRlbmlhbAogICAgICBvZiBzZXJ2aWNlIGlzc3VlLjwvcD4KICAgIAogIDwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZW4vY2FjaGluZy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9jYWNoaW5nLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi90ci9jYWNoaW5nLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj4KPC9ib2R5PjwvaHRtbD4=