PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5Db250ZW50IE5lZ290aWF0aW9uIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC90aXRsZT4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLyI+VmVyc2lvbiAyLjU8L2E+PC9kaXY+PGRpdiBpZD0icGFnZS1jb250ZW50Ij48ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkNvbnRlbnQgTmVnb3RpYXRpb248L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZW4vY29udGVudC1uZWdvdGlhdGlvbi5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9jb250ZW50LW5lZ290aWF0aW9uLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9qYS9jb250ZW50LW5lZ290aWF0aW9uLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9rby9jb250ZW50LW5lZ290aWF0aW9uLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvY29udGVudC1uZWdvdGlhdGlvbi5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKCiAgICA8cD5BcGFjaGUgSFRUUEQgc3VwcG9ydHMgY29udGVudCBuZWdvdGlhdGlvbiBhcyBkZXNjcmliZWQgaW4KICAgIHRoZSBIVFRQLzEuMSBzcGVjaWZpY2F0aW9uLiBJdCBjYW4gY2hvb3NlIHRoZSBiZXN0CiAgICByZXByZXNlbnRhdGlvbiBvZiBhIHJlc291cmNlIGJhc2VkIG9uIHRoZSBicm93c2VyLXN1cHBsaWVkCiAgICBwcmVmZXJlbmNlcyBmb3IgbWVkaWEgdHlwZSwgbGFuZ3VhZ2VzLCBjaGFyYWN0ZXIgc2V0IGFuZAogICAgZW5jb2RpbmcuIEl0IGFsc28gaW1wbGVtZW50cyBhIGNvdXBsZSBvZiBmZWF0dXJlcyB0byBnaXZlCiAgICBtb3JlIGludGVsbGlnZW50IGhhbmRsaW5nIG9mIHJlcXVlc3RzIGZyb20gYnJvd3NlcnMgdGhhdCBzZW5kCiAgICBpbmNvbXBsZXRlIG5lZ290aWF0aW9uIGluZm9ybWF0aW9uLjwvcD4KCiAgICA8cD5Db250ZW50IG5lZ290aWF0aW9uIGlzIHByb3ZpZGVkIGJ5IHRoZQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiPm1vZF9uZWdvdGlhdGlvbjwvYT48L2NvZGU+IG1vZHVsZSwgd2hpY2ggaXMgY29tcGlsZWQgaW4KICAgIGJ5IGRlZmF1bHQuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhYm91dCI+QWJvdXQgQ29udGVudCBOZWdvdGlhdGlvbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI25lZ290aWF0aW9uIj5OZWdvdGlhdGlvbiBpbiBodHRwZDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI21ldGhvZHMiPlRoZSBOZWdvdGlhdGlvbiBNZXRob2RzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYmV0dGVyIj5GaWRkbGluZyB3aXRoIFF1YWxpdHkKICAgIFZhbHVlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2V4dGVuc2lvbnMiPkV4dGVuc2lvbnMgdG8gVHJhbnNwYXJlbnQgQ29udGVudApOZWdvdGlhdGlvbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI25hbWluZyI+Tm90ZSBvbiBoeXBlcmxpbmtzIGFuZCBuYW1pbmcgY29udmVudGlvbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjYWNoaW5nIj5Ob3RlIG9uIENhY2hpbmc8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYWJvdXQiIGlkPSJhYm91dCI+QWJvdXQgQ29udGVudCBOZWdvdGlhdGlvbjwvYT48L2gyPgoKICAgIDxwPkEgcmVzb3VyY2UgbWF5IGJlIGF2YWlsYWJsZSBpbiBzZXZlcmFsIGRpZmZlcmVudAogICAgcmVwcmVzZW50YXRpb25zLiBGb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluCiAgICBkaWZmZXJlbnQgbGFuZ3VhZ2VzIG9yIGRpZmZlcmVudCBtZWRpYSB0eXBlcywgb3IgYSBjb21iaW5hdGlvbi4KICAgIE9uZSB3YXkgb2Ygc2VsZWN0aW5nIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGNob2ljZSBpcyB0byBnaXZlIHRoZQogICAgdXNlciBhbiBpbmRleCBwYWdlLCBhbmQgbGV0IHRoZW0gc2VsZWN0LiBIb3dldmVyIGl0IGlzIG9mdGVuCiAgICBwb3NzaWJsZSBmb3IgdGhlIHNlcnZlciB0byBjaG9vc2UgYXV0b21hdGljYWxseS4gVGhpcyB3b3JrcwogICAgYmVjYXVzZSBicm93c2VycyBjYW4gc2VuZCwgYXMgcGFydCBvZiBlYWNoIHJlcXVlc3QsIGluZm9ybWF0aW9uCiAgICBhYm91dCB3aGF0IHJlcHJlc2VudGF0aW9ucyB0aGV5IHByZWZlci4gRm9yIGV4YW1wbGUsIGEgYnJvd3NlcgogICAgY291bGQgaW5kaWNhdGUgdGhhdCBpdCB3b3VsZCBsaWtlIHRvIHNlZSBpbmZvcm1hdGlvbiBpbiBGcmVuY2gsCiAgICBpZiBwb3NzaWJsZSwgZWxzZSBFbmdsaXNoIHdpbGwgZG8uIEJyb3dzZXJzIGluZGljYXRlIHRoZWlyCiAgICBwcmVmZXJlbmNlcyBieSBoZWFkZXJzIGluIHRoZSByZXF1ZXN0LiBUbyByZXF1ZXN0IG9ubHkgRnJlbmNoCiAgICByZXByZXNlbnRhdGlvbnMsIHRoZSBicm93c2VyIHdvdWxkIHNlbmQ8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT5BY2NlcHQtTGFuZ3VhZ2U6IGZyPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5Ob3RlIHRoYXQgdGhpcyBwcmVmZXJlbmNlIHdpbGwgb25seSBiZSBhcHBsaWVkIHdoZW4gdGhlcmUgaXMKICAgIGEgY2hvaWNlIG9mIHJlcHJlc2VudGF0aW9ucyBhbmQgdGhleSB2YXJ5IGJ5IGxhbmd1YWdlLjwvcD4KCiAgICA8cD5BcyBhbiBleGFtcGxlIG9mIGEgbW9yZSBjb21wbGV4IHJlcXVlc3QsIHRoaXMgYnJvd3NlciBoYXMKICAgIGJlZW4gY29uZmlndXJlZCB0byBhY2NlcHQgRnJlbmNoIGFuZCBFbmdsaXNoLCBidXQgcHJlZmVyCiAgICBGcmVuY2gsIGFuZCB0byBhY2NlcHQgdmFyaW91cyBtZWRpYSB0eXBlcywgcHJlZmVycmluZyBIVE1MIG92ZXIKICAgIHBsYWluIHRleHQgb3Igb3RoZXIgdGV4dCB0eXBlcywgYW5kIHByZWZlcnJpbmcgR0lGIG9yIEpQRUcgb3ZlcgogICAgb3RoZXIgbWVkaWEgdHlwZXMsIGJ1dCBhbHNvIGFsbG93aW5nIGFueSBvdGhlciBtZWRpYSB0eXBlIGFzIGEKICAgIGxhc3QgcmVzb3J0OjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogIEFjY2VwdC1MYW5ndWFnZTogZnI7IHE9MS4wLCBlbjsgcT0wLjU8YnIgLz4KICBBY2NlcHQ6IHRleHQvaHRtbDsgcT0xLjAsIHRleHQvKjsgcT0wLjgsIGltYWdlL2dpZjsgcT0wLjYsIGltYWdlL2pwZWc7IHE9MC42LCBpbWFnZS8qOyBxPTAuNSwgKi8qOyBxPTAuMQo8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPmh0dHBkIHN1cHBvcnRzICdzZXJ2ZXIgZHJpdmVuJyBjb250ZW50IG5lZ290aWF0aW9uLCBhcwogICAgZGVmaW5lZCBpbiB0aGUgSFRUUC8xLjEgc3BlY2lmaWNhdGlvbi4gSXQgZnVsbHkgc3VwcG9ydHMgdGhlCiAgICA8Y29kZT5BY2NlcHQ8L2NvZGU+LCA8Y29kZT5BY2NlcHQtTGFuZ3VhZ2U8L2NvZGU+LAogICAgPGNvZGU+QWNjZXB0LUNoYXJzZXQ8L2NvZGU+IGFuZCA8Y29kZT5BY2NlcHQtRW5jb2Rpbmc8L2NvZGU+CiAgICByZXF1ZXN0IGhlYWRlcnMuIGh0dHBkIGFsc28gc3VwcG9ydHMgJ3RyYW5zcGFyZW50JwogICAgY29udGVudCBuZWdvdGlhdGlvbiwgd2hpY2ggaXMgYW4gZXhwZXJpbWVudGFsIG5lZ290aWF0aW9uCiAgICBwcm90b2NvbCBkZWZpbmVkIGluIFJGQyAyMjk1IGFuZCBSRkMgMjI5Ni4gSXQgZG9lcyBub3Qgb2ZmZXIKICAgIHN1cHBvcnQgZm9yICdmZWF0dXJlIG5lZ290aWF0aW9uJyBhcyBkZWZpbmVkIGluIHRoZXNlIFJGQ3MuPC9wPgoKICAgIDxwPkEgPHN0cm9uZz5yZXNvdXJjZTwvc3Ryb25nPiBpcyBhIGNvbmNlcHR1YWwgZW50aXR5CiAgICBpZGVudGlmaWVkIGJ5IGEgVVJJIChSRkMgMjM5NikuIEFuIEhUVFAgc2VydmVyIGxpa2UgQXBhY2hlIEhUVFAgU2VydmVyCiAgICBwcm92aWRlcyBhY2Nlc3MgdG8gPHN0cm9uZz5yZXByZXNlbnRhdGlvbnM8L3N0cm9uZz4gb2YgdGhlCiAgICByZXNvdXJjZShzKSB3aXRoaW4gaXRzIG5hbWVzcGFjZSwgd2l0aCBlYWNoIHJlcHJlc2VudGF0aW9uIGluCiAgICB0aGUgZm9ybSBvZiBhIHNlcXVlbmNlIG9mIGJ5dGVzIHdpdGggYSBkZWZpbmVkIG1lZGlhIHR5cGUsCiAgICBjaGFyYWN0ZXIgc2V0LCBlbmNvZGluZywgZXRjLiBFYWNoIHJlc291cmNlIG1heSBiZSBhc3NvY2lhdGVkCiAgICB3aXRoIHplcm8sIG9uZSwgb3IgbW9yZSB0aGFuIG9uZSByZXByZXNlbnRhdGlvbiBhdCBhbnkgZ2l2ZW4KICAgIHRpbWUuIElmIG11bHRpcGxlIHJlcHJlc2VudGF0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGUgcmVzb3VyY2UKICAgIGlzIHJlZmVycmVkIHRvIGFzIDxzdHJvbmc+bmVnb3RpYWJsZTwvc3Ryb25nPiBhbmQgZWFjaCBvZiBpdHMKICAgIHJlcHJlc2VudGF0aW9ucyBpcyB0ZXJtZWQgYSA8c3Ryb25nPnZhcmlhbnQ8L3N0cm9uZz4uIFRoZSB3YXlzCiAgICBpbiB3aGljaCB0aGUgdmFyaWFudHMgZm9yIGEgbmVnb3RpYWJsZSByZXNvdXJjZSB2YXJ5IGFyZSBjYWxsZWQKICAgIHRoZSA8c3Ryb25nPmRpbWVuc2lvbnM8L3N0cm9uZz4gb2YgbmVnb3RpYXRpb24uPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im5lZ290aWF0aW9uIiBpZD0ibmVnb3RpYXRpb24iPk5lZ290aWF0aW9uIGluIGh0dHBkPC9hPjwvaDI+CgogICAgPHA+SW4gb3JkZXIgdG8gbmVnb3RpYXRlIGEgcmVzb3VyY2UsIHRoZSBzZXJ2ZXIgbmVlZHMgdG8gYmUKICAgIGdpdmVuIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIHZhcmlhbnRzLiBUaGlzIGlzIGRvbmUgaW4KICAgIG9uZSBvZiB0d28gd2F5czo8L3A+CgogICAgPHVsPgogICAgICA8bGk+VXNpbmcgYSB0eXBlIG1hcCAoPGVtPmkuZS48L2VtPiwgYSA8Y29kZT4qLnZhcjwvY29kZT4KICAgICAgZmlsZSkgd2hpY2ggbmFtZXMgdGhlIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHZhcmlhbnRzCiAgICAgIGV4cGxpY2l0bHksIG9yPC9saT4KCiAgICAgIDxsaT5Vc2luZyBhICdNdWx0aVZpZXdzJyBzZWFyY2gsIHdoZXJlIHRoZSBzZXJ2ZXIgZG9lcyBhbgogICAgICBpbXBsaWNpdCBmaWxlbmFtZSBwYXR0ZXJuIG1hdGNoIGFuZCBjaG9vc2VzIGZyb20gYW1vbmcgdGhlCiAgICAgIHJlc3VsdHMuPC9saT4KICAgIDwvdWw+CgogICA8aDM+PGEgbmFtZT0idHlwZS1tYXAiIGlkPSJ0eXBlLW1hcCI+VXNpbmcgYSB0eXBlLW1hcCBmaWxlPC9hPjwvaDM+CgogICAgPHA+QSB0eXBlIG1hcCBpcyBhIGRvY3VtZW50IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGFuZGxlcgogICAgbmFtZWQgPGNvZGU+dHlwZS1tYXA8L2NvZGU+IChvciwgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGgKICAgIG9sZGVyIGh0dHBkIGNvbmZpZ3VyYXRpb25zLCB0aGUgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI21pbWUtdHlwZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+TUlNRS10eXBlPC9hPgogICAgPGNvZGU+YXBwbGljYXRpb24veC10eXBlLW1hcDwvY29kZT4pLiBOb3RlIHRoYXQgdG8gdXNlIHRoaXMKICAgIGZlYXR1cmUsIHlvdSBtdXN0IGhhdmUgYSBoYW5kbGVyIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiB0aGF0CiAgICBkZWZpbmVzIGEgZmlsZSBzdWZmaXggYXMgPGNvZGU+dHlwZS1tYXA8L2NvZGU+OyB0aGlzIGlzIGJlc3QgZG9uZQogICAgd2l0aDwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWRkSGFuZGxlciB0eXBlLW1hcCAudmFyPC9wcmU+CgoKICAgIDxwPmluIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlLjwvcD4KCiAgICA8cD5UeXBlIG1hcCBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSByZXNvdXJjZQogICAgd2hpY2ggdGhleSBhcmUgZGVzY3JpYmluZywgZm9sbG93ZWQgYnkgdGhlIGV4dGVuc2lvbgogICAgPGNvZGU+LnZhcjwvY29kZT4uIEluIHRoZSBleGFtcGxlcyBzaG93biBiZWxvdywgdGhlIHJlc291cmNlIGlzCiAgICBuYW1lZCA8Y29kZT5mb288L2NvZGU+LCBzbyB0aGUgdHlwZSBtYXAgZmlsZSBpcyBuYW1lZAogICAgPGNvZGU+Zm9vLnZhcjwvY29kZT4uPC9wPgoKICAgIDxwPlRoaXMgZmlsZSBzaG91bGQgaGF2ZSBhbiBlbnRyeSBmb3IgZWFjaCBhdmFpbGFibGUKICAgIHZhcmlhbnQ7IHRoZXNlIGVudHJpZXMgY29uc2lzdCBvZiBjb250aWd1b3VzIEhUVFAtZm9ybWF0IGhlYWRlcgogICAgbGluZXMuIEVudHJpZXMgZm9yIGRpZmZlcmVudCB2YXJpYW50cyBhcmUgc2VwYXJhdGVkIGJ5IGJsYW5rCiAgICBsaW5lcy4gQmxhbmsgbGluZXMgYXJlIGlsbGVnYWwgd2l0aGluIGFuIGVudHJ5LiBJdCBpcwogICAgY29udmVudGlvbmFsIHRvIGJlZ2luIGEgbWFwIGZpbGUgd2l0aCBhbiBlbnRyeSBmb3IgdGhlIGNvbWJpbmVkCiAgICBlbnRpdHkgYXMgYSB3aG9sZSAoYWx0aG91Z2ggdGhpcyBpcyBub3QgcmVxdWlyZWQsIGFuZCBpZgogICAgcHJlc2VudCB3aWxsIGJlIGlnbm9yZWQpLiBBbiBleGFtcGxlIG1hcCBmaWxlIGlzIHNob3duIGJlbG93LjwvcD4KCiAgICA8cD5VUklzIGluIHRoaXMgZmlsZSBhcmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSB0eXBlIG1hcAogICAgZmlsZS4gVXN1YWxseSwgdGhlc2UgZmlsZXMgd2lsbCBiZSBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcwogICAgdGhlIHR5cGUgbWFwIGZpbGUsIGJ1dCB0aGlzIGlzIG5vdCByZXF1aXJlZC4gWW91IG1heSBwcm92aWRlCiAgICBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUklzIGZvciBhbnkgZmlsZSBsb2NhdGVkIG9uIHRoZSBzYW1lIHNlcnZlciBhcwogICAgdGhlIG1hcCBmaWxlLjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogIFVSSTogZm9vPGJyIC8+CjxiciAvPgogIFVSSTogZm9vLmVuLmh0bWw8YnIgLz4KICBDb250ZW50LXR5cGU6IHRleHQvaHRtbDxiciAvPgogIENvbnRlbnQtbGFuZ3VhZ2U6IGVuPGJyIC8+CjxiciAvPgogIFVSSTogZm9vLmZyLmRlLmh0bWw8YnIgLz4KICBDb250ZW50LXR5cGU6IHRleHQvaHRtbDtjaGFyc2V0PWlzby04ODU5LTI8YnIgLz4KICBDb250ZW50LWxhbmd1YWdlOiBmciwgZGU8YnIgLz4KPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5Ob3RlIGFsc28gdGhhdCBhIHR5cGVtYXAgZmlsZSB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZQogICAgZmlsZW5hbWUncyBleHRlbnNpb24sIGV2ZW4gd2hlbiBNdWx0aXZpZXdzIGlzIG9uLiBJZiB0aGUKICAgIHZhcmlhbnRzIGhhdmUgZGlmZmVyZW50IHNvdXJjZSBxdWFsaXRpZXMsIHRoYXQgbWF5IGJlIGluZGljYXRlZAogICAgYnkgdGhlICJxcyIgcGFyYW1ldGVyIHRvIHRoZSBtZWRpYSB0eXBlLCBhcyBpbiB0aGlzIHBpY3R1cmUKICAgIChhdmFpbGFibGUgYXMgSlBFRywgR0lGLCBvciBBU0NJSS1hcnQpOiA8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICBVUkk6IGZvbzxiciAvPgo8YnIgLz4KICBVUkk6IGZvby5qcGVnPGJyIC8+CiAgQ29udGVudC10eXBlOiBpbWFnZS9qcGVnOyBxcz0wLjg8YnIgLz4KPGJyIC8+CiAgVVJJOiBmb28uZ2lmPGJyIC8+CiAgQ29udGVudC10eXBlOiBpbWFnZS9naWY7IHFzPTAuNTxiciAvPgo8YnIgLz4KICBVUkk6IGZvby50eHQ8YnIgLz4KICBDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IHFzPTAuMDE8YnIgLz4KPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5xcyB2YWx1ZXMgY2FuIHZhcnkgaW4gdGhlIHJhbmdlIDAuMDAwIHRvIDEuMDAwLiBOb3RlIHRoYXQKICAgIGFueSB2YXJpYW50IHdpdGggYSBxcyB2YWx1ZSBvZiAwLjAwMCB3aWxsIG5ldmVyIGJlIGNob3Nlbi4KICAgIFZhcmlhbnRzIHdpdGggbm8gJ3FzJyBwYXJhbWV0ZXIgdmFsdWUgYXJlIGdpdmVuIGEgcXMgZmFjdG9yIG9mCiAgICAxLjAuIFRoZSBxcyBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSByZWxhdGl2ZSAncXVhbGl0eScgb2YgdGhpcwogICAgdmFyaWFudCBjb21wYXJlZCB0byB0aGUgb3RoZXIgYXZhaWxhYmxlIHZhcmlhbnRzLCBpbmRlcGVuZGVudAogICAgb2YgdGhlIGNsaWVudCdzIGNhcGFiaWxpdGllcy4gRm9yIGV4YW1wbGUsIGEgSlBFRyBmaWxlIGlzCiAgICB1c3VhbGx5IG9mIGhpZ2hlciBzb3VyY2UgcXVhbGl0eSB0aGFuIGFuIEFTQ0lJIGZpbGUgaWYgaXQgaXMKICAgIGF0dGVtcHRpbmcgdG8gcmVwcmVzZW50IGEgcGhvdG9ncmFwaC4gSG93ZXZlciwgaWYgdGhlIHJlc291cmNlCiAgICBiZWluZyByZXByZXNlbnRlZCBpcyBhbiBvcmlnaW5hbCBBU0NJSSBhcnQsIHRoZW4gYW4gQVNDSUkKICAgIHJlcHJlc2VudGF0aW9uIHdvdWxkIGhhdmUgYSBoaWdoZXIgc291cmNlIHF1YWxpdHkgdGhhbiBhIEpQRUcKICAgIHJlcHJlc2VudGF0aW9uLiBBIHFzIHZhbHVlIGlzIHRoZXJlZm9yZSBzcGVjaWZpYyB0byBhIGdpdmVuCiAgICB2YXJpYW50IGRlcGVuZGluZyBvbiB0aGUgbmF0dXJlIG9mIHRoZSByZXNvdXJjZSBpdAogICAgcmVwcmVzZW50cy48L3A+CgogICAgPHA+VGhlIGZ1bGwgbGlzdCBvZiBoZWFkZXJzIHJlY29nbml6ZWQgaXMgYXZhaWxhYmxlIGluIHRoZSA8YSBocmVmPSJtb2QvbW9kX25lZ290aWF0aW9uLmh0bWwjdHlwZW1hcHMiPm1vZF9uZWdvdGlhdGlvbgogICAgdHlwZW1hcDwvYT4gZG9jdW1lbnRhdGlvbi48L3A+CgoKPGgzPjxhIG5hbWU9Im11bHRpdmlld3MiIGlkPSJtdWx0aXZpZXdzIj5NdWx0aXZpZXdzPC9hPjwvaDM+CgogICAgPHA+PGNvZGU+TXVsdGlWaWV3czwvY29kZT4gaXMgYSBwZXItZGlyZWN0b3J5IG9wdGlvbiwgbWVhbmluZyBpdAogICAgY2FuIGJlIHNldCB3aXRoIGFuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNvcHRpb25zIj5PcHRpb25zPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSB3aXRoaW4gYSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPiBzZWN0aW9uIGluCiAgICA8Y29kZT5odHRwZC5jb25mPC9jb2RlPiwgb3IgKGlmIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNhbGxvd292ZXJyaWRlIj5BbGxvd092ZXJyaWRlPC9hPjwvY29kZT4gaXMgcHJvcGVybHkgc2V0KSBpbgogICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcy4gTm90ZSB0aGF0IDxjb2RlPk9wdGlvbnMgQWxsPC9jb2RlPgogICAgZG9lcyBub3Qgc2V0IDxjb2RlPk11bHRpVmlld3M8L2NvZGU+OyB5b3UgaGF2ZSB0byBhc2sgZm9yIGl0IGJ5CiAgICBuYW1lLjwvcD4KCiAgICA8cD5UaGUgZWZmZWN0IG9mIDxjb2RlPk11bHRpVmlld3M8L2NvZGU+IGlzIGFzIGZvbGxvd3M6IGlmIHRoZQogICAgc2VydmVyIHJlY2VpdmVzIGEgcmVxdWVzdCBmb3IgPGNvZGU+L3NvbWUvZGlyL2ZvbzwvY29kZT4sIGlmCiAgICA8Y29kZT4vc29tZS9kaXI8L2NvZGU+IGhhcyA8Y29kZT5NdWx0aVZpZXdzPC9jb2RlPiBlbmFibGVkLCBhbmQKICAgIDxjb2RlPi9zb21lL2Rpci9mb288L2NvZGU+IGRvZXMgPGVtPm5vdDwvZW0+IGV4aXN0LCB0aGVuIHRoZQogICAgc2VydmVyIHJlYWRzIHRoZSBkaXJlY3RvcnkgbG9va2luZyBmb3IgZmlsZXMgbmFtZWQgZm9vLiosIGFuZAogICAgZWZmZWN0aXZlbHkgZmFrZXMgdXAgYSB0eXBlIG1hcCB3aGljaCBuYW1lcyBhbGwgdGhvc2UgZmlsZXMsCiAgICBhc3NpZ25pbmcgdGhlbSB0aGUgc2FtZSBtZWRpYSB0eXBlcyBhbmQgY29udGVudC1lbmNvZGluZ3MgaXQKICAgIHdvdWxkIGhhdmUgaWYgdGhlIGNsaWVudCBoYWQgYXNrZWQgZm9yIG9uZSBvZiB0aGVtIGJ5IG5hbWUuIEl0CiAgICB0aGVuIGNob29zZXMgdGhlIGJlc3QgbWF0Y2ggdG8gdGhlIGNsaWVudCdzIHJlcXVpcmVtZW50cy48L3A+CgogICAgPHA+PGNvZGU+TXVsdGlWaWV3czwvY29kZT4gbWF5IGFsc28gYXBwbHkgdG8gc2VhcmNoZXMgZm9yIHRoZSBmaWxlCiAgICBuYW1lZCBieSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Rpci5odG1sI2RpcmVjdG9yeWluZGV4Ij5EaXJlY3RvcnlJbmRleDwvYT48L2NvZGU+IGRpcmVjdGl2ZSwgaWYgdGhlCiAgICBzZXJ2ZXIgaXMgdHJ5aW5nIHRvIGluZGV4IGEgZGlyZWN0b3J5LiBJZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcwogICAgc3BlY2lmeTwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5EaXJlY3RvcnlJbmRleCBpbmRleDwvcHJlPgoKICAgIDxwPnRoZW4gdGhlIHNlcnZlciB3aWxsIGFyYml0cmF0ZSBiZXR3ZWVuIDxjb2RlPmluZGV4Lmh0bWw8L2NvZGU+CiAgICBhbmQgPGNvZGU+aW5kZXguaHRtbDM8L2NvZGU+IGlmIGJvdGggYXJlIHByZXNlbnQuIElmIG5laXRoZXIKICAgIGFyZSBwcmVzZW50LCBhbmQgPGNvZGU+aW5kZXguY2dpPC9jb2RlPiBpcyB0aGVyZSwgdGhlIHNlcnZlcgogICAgd2lsbCBydW4gaXQuPC9wPgoKICAgIDxwPklmIG9uZSBvZiB0aGUgZmlsZXMgZm91bmQgd2hlbiByZWFkaW5nIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QKICAgIGhhdmUgYW4gZXh0ZW5zaW9uIHJlY29nbml6ZWQgYnkgPGNvZGU+bW9kX21pbWU8L2NvZGU+IHRvIGRlc2lnbmF0ZQogICAgaXRzIENoYXJzZXQsIENvbnRlbnQtVHlwZSwgTGFuZ3VhZ2UsIG9yIEVuY29kaW5nLCB0aGVuIHRoZSByZXN1bHQKICAgIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9taW1lLmh0bWwjbXVsdGl2aWV3c21hdGNoIj5NdWx0aVZpZXdzTWF0Y2g8L2E+PC9jb2RlPiBkaXJlY3RpdmUuICBUaGlzCiAgICBkaXJlY3RpdmUgZGV0ZXJtaW5lcyB3aGV0aGVyIGhhbmRsZXJzLCBmaWx0ZXJzLCBhbmQgb3RoZXIKICAgIGV4dGVuc2lvbiB0eXBlcyBjYW4gcGFydGljaXBhdGUgaW4gTXVsdGlWaWV3cyBuZWdvdGlhdGlvbi48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im1ldGhvZHMiIGlkPSJtZXRob2RzIj5UaGUgTmVnb3RpYXRpb24gTWV0aG9kczwvYT48L2gyPgoKICAgIDxwPkFmdGVyIGh0dHBkIGhhcyBvYnRhaW5lZCBhIGxpc3Qgb2YgdGhlIHZhcmlhbnRzIGZvciBhIGdpdmVuCiAgICByZXNvdXJjZSwgZWl0aGVyIGZyb20gYSB0eXBlLW1hcCBmaWxlIG9yIGZyb20gdGhlIGZpbGVuYW1lcyBpbgogICAgdGhlIGRpcmVjdG9yeSwgaXQgaW52b2tlcyBvbmUgb2YgdHdvIG1ldGhvZHMgdG8gZGVjaWRlIG9uIHRoZQogICAgJ2Jlc3QnIHZhcmlhbnQgdG8gcmV0dXJuLCBpZiBhbnkuIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8ga25vdwogICAgYW55IG9mIHRoZSBkZXRhaWxzIG9mIGhvdyBuZWdvdGlhdGlvbiBhY3R1YWxseSB0YWtlcyBwbGFjZSBpbgogICAgb3JkZXIgdG8gdXNlIGh0dHBkJ3MgY29udGVudCBuZWdvdGlhdGlvbiBmZWF0dXJlcy4gSG93ZXZlciB0aGUKICAgIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCBleHBsYWlucyB0aGUgbWV0aG9kcyB1c2VkIGZvciB0aG9zZQogICAgaW50ZXJlc3RlZC4gPC9wPgoKICAgIDxwPlRoZXJlIGFyZSB0d28gbmVnb3RpYXRpb24gbWV0aG9kczo8L3A+CgogICAgPG9sPgogICAgICA8bGk+PHN0cm9uZz5TZXJ2ZXIgZHJpdmVuIG5lZ290aWF0aW9uIHdpdGggdGhlIGh0dHBkCiAgICAgIGFsZ29yaXRobTwvc3Ryb25nPiBpcyB1c2VkIGluIHRoZSBub3JtYWwgY2FzZS4gVGhlIGh0dHBkCiAgICAgIGFsZ29yaXRobSBpcyBleHBsYWluZWQgaW4gbW9yZSBkZXRhaWwgYmVsb3cuIFdoZW4gdGhpcwogICAgICBhbGdvcml0aG0gaXMgdXNlZCwgaHR0cGQgY2FuIHNvbWV0aW1lcyAnZmlkZGxlJyB0aGUgcXVhbGl0eQogICAgICBmYWN0b3Igb2YgYSBwYXJ0aWN1bGFyIGRpbWVuc2lvbiB0byBhY2hpZXZlIGEgYmV0dGVyIHJlc3VsdC4KICAgICAgVGhlIHdheXMgaHR0cGQgY2FuIGZpZGRsZSBxdWFsaXR5IGZhY3RvcnMgaXMgZXhwbGFpbmVkIGluCiAgICAgIG1vcmUgZGV0YWlsIGJlbG93LjwvbGk+CgogICAgICA8bGk+PHN0cm9uZz5UcmFuc3BhcmVudCBjb250ZW50IG5lZ290aWF0aW9uPC9zdHJvbmc+IGlzIHVzZWQKICAgICAgd2hlbiB0aGUgYnJvd3NlciBzcGVjaWZpY2FsbHkgcmVxdWVzdHMgdGhpcyB0aHJvdWdoIHRoZQogICAgICBtZWNoYW5pc20gZGVmaW5lZCBpbiBSRkMgMjI5NS4gVGhpcyBuZWdvdGlhdGlvbiBtZXRob2QgZ2l2ZXMKICAgICAgdGhlIGJyb3dzZXIgZnVsbCBjb250cm9sIG92ZXIgZGVjaWRpbmcgb24gdGhlICdiZXN0JyB2YXJpYW50LAogICAgICB0aGUgcmVzdWx0IGlzIHRoZXJlZm9yZSBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIGFsZ29yaXRobXMKICAgICAgdXNlZCBieSB0aGUgYnJvd3Nlci4gQXMgcGFydCBvZiB0aGUgdHJhbnNwYXJlbnQgbmVnb3RpYXRpb24KICAgICAgcHJvY2VzcywgdGhlIGJyb3dzZXIgY2FuIGFzayBodHRwZCB0byBydW4gdGhlICdyZW1vdGUKICAgICAgdmFyaWFudCBzZWxlY3Rpb24gYWxnb3JpdGhtJyBkZWZpbmVkIGluIFJGQyAyMjk2LjwvbGk+CiAgICA8L29sPgoKPGgzPjxhIG5hbWU9ImRpbWVuc2lvbnMiIGlkPSJkaW1lbnNpb25zIj5EaW1lbnNpb25zIG9mIE5lZ290aWF0aW9uPC9hPjwvaDM+CgogICAgPHRhYmxlPgogICAgICAKICAgICAgPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICA8dGg+RGltZW5zaW9uPC90aD4KCiAgICAgICAgPHRoPk5vdGVzPC90aD4KICAgICAgPC90cj4KCiAgICAgIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgPHRkPk1lZGlhIFR5cGU8L3RkPgoKICAgICAgICA8dGQ+QnJvd3NlciBpbmRpY2F0ZXMgcHJlZmVyZW5jZXMgd2l0aCB0aGUgPGNvZGU+QWNjZXB0PC9jb2RlPgogICAgICAgIGhlYWRlciBmaWVsZC4gRWFjaCBpdGVtIGNhbiBoYXZlIGFuIGFzc29jaWF0ZWQgcXVhbGl0eSBmYWN0b3IuCiAgICAgICAgVmFyaWFudCBkZXNjcmlwdGlvbiBjYW4gYWxzbyBoYXZlIGEgcXVhbGl0eSBmYWN0b3IgKHRoZSAicXMiCiAgICAgICAgcGFyYW1ldGVyKS48L3RkPgogICAgICA8L3RyPgoKICAgICAgPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICA8dGQ+TGFuZ3VhZ2U8L3RkPgoKICAgICAgICA8dGQ+QnJvd3NlciBpbmRpY2F0ZXMgcHJlZmVyZW5jZXMgd2l0aCB0aGUKICAgICAgICA8Y29kZT5BY2NlcHQtTGFuZ3VhZ2U8L2NvZGU+IGhlYWRlciBmaWVsZC4gRWFjaCBpdGVtIGNhbiBoYXZlCiAgICAgICAgYSBxdWFsaXR5IGZhY3Rvci4gVmFyaWFudHMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBub25lLCBvbmUgb3IKICAgICAgICBtb3JlIHRoYW4gb25lIGxhbmd1YWdlLjwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHIgdmFsaWduPSJ0b3AiPgogICAgICAgIDx0ZD5FbmNvZGluZzwvdGQ+CgogICAgICAgIDx0ZD5Ccm93c2VyIGluZGljYXRlcyBwcmVmZXJlbmNlIHdpdGggdGhlCiAgICAgICAgPGNvZGU+QWNjZXB0LUVuY29kaW5nPC9jb2RlPiBoZWFkZXIgZmllbGQuIEVhY2ggaXRlbSBjYW4gaGF2ZQogICAgICAgIGEgcXVhbGl0eSBmYWN0b3IuPC90ZD4KICAgICAgPC90cj4KCiAgICAgIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgPHRkPkNoYXJzZXQ8L3RkPgoKICAgICAgICA8dGQ+QnJvd3NlciBpbmRpY2F0ZXMgcHJlZmVyZW5jZSB3aXRoIHRoZQogICAgICAgIDxjb2RlPkFjY2VwdC1DaGFyc2V0PC9jb2RlPiBoZWFkZXIgZmllbGQuIEVhY2ggaXRlbSBjYW4gaGF2ZSBhCiAgICAgICAgcXVhbGl0eSBmYWN0b3IuIFZhcmlhbnRzIGNhbiBpbmRpY2F0ZSBhIGNoYXJzZXQgYXMgYSBwYXJhbWV0ZXIKICAgICAgICBvZiB0aGUgbWVkaWEgdHlwZS48L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCgo8aDM+PGEgbmFtZT0iYWxnb3JpdGhtIiBpZD0iYWxnb3JpdGhtIj5odHRwZCBOZWdvdGlhdGlvbiBBbGdvcml0aG08L2E+PC9oMz4KCiAgICA8cD5odHRwZCBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIHRvIHNlbGVjdCB0aGUgJ2Jlc3QnCiAgICB2YXJpYW50IChpZiBhbnkpIHRvIHJldHVybiB0byB0aGUgYnJvd3Nlci4gVGhpcyBhbGdvcml0aG0gaXMKICAgIG5vdCBmdXJ0aGVyIGNvbmZpZ3VyYWJsZS4gSXQgb3BlcmF0ZXMgYXMgZm9sbG93czo8L3A+CgogICAgPG9sPgogICAgICA8bGk+Rmlyc3QsIGZvciBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgbmVnb3RpYXRpb24sIGNoZWNrIHRoZQogICAgICBhcHByb3ByaWF0ZSA8ZW0+QWNjZXB0KjwvZW0+IGhlYWRlciBmaWVsZCBhbmQgYXNzaWduIGEKICAgICAgcXVhbGl0eSB0byBlYWNoIHZhcmlhbnQuIElmIHRoZSA8ZW0+QWNjZXB0KjwvZW0+IGhlYWRlciBmb3IKICAgICAgYW55IGRpbWVuc2lvbiBpbXBsaWVzIHRoYXQgdGhpcyB2YXJpYW50IGlzIG5vdCBhY2NlcHRhYmxlLAogICAgICBlbGltaW5hdGUgaXQuIElmIG5vIHZhcmlhbnRzIHJlbWFpbiwgZ28gdG8gc3RlcCA0LjwvbGk+CgogICAgICA8bGk+CiAgICAgICAgU2VsZWN0IHRoZSAnYmVzdCcgdmFyaWFudCBieSBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24uIEVhY2gKICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGlzIGFwcGxpZWQgaW4gb3JkZXIuIEFueSB2YXJpYW50cwogICAgICAgIG5vdCBzZWxlY3RlZCBhdCBlYWNoIHRlc3QgYXJlIGVsaW1pbmF0ZWQuIEFmdGVyIGVhY2ggdGVzdCwKICAgICAgICBpZiBvbmx5IG9uZSB2YXJpYW50IHJlbWFpbnMsIHNlbGVjdCBpdCBhcyB0aGUgYmVzdCBtYXRjaAogICAgICAgIGFuZCBwcm9jZWVkIHRvIHN0ZXAgMy4gSWYgbW9yZSB0aGFuIG9uZSB2YXJpYW50IHJlbWFpbnMsCiAgICAgICAgbW92ZSBvbiB0byB0aGUgbmV4dCB0ZXN0LgoKICAgICAgICA8b2w+CiAgICAgICAgICA8bGk+TXVsdGlwbHkgdGhlIHF1YWxpdHkgZmFjdG9yIGZyb20gdGhlIDxjb2RlPkFjY2VwdDwvY29kZT4KICAgICAgICAgIGhlYWRlciB3aXRoIHRoZSBxdWFsaXR5LW9mLXNvdXJjZSBmYWN0b3IgZm9yIHRoaXMgdmFyaWFudHMKICAgICAgICAgIG1lZGlhIHR5cGUsIGFuZCBzZWxlY3QgdGhlIHZhcmlhbnRzIHdpdGggdGhlIGhpZ2hlc3QKICAgICAgICAgIHZhbHVlLjwvbGk+CgogICAgICAgICAgPGxpPlNlbGVjdCB0aGUgdmFyaWFudHMgd2l0aCB0aGUgaGlnaGVzdCBsYW5ndWFnZSBxdWFsaXR5CiAgICAgICAgICBmYWN0b3IuPC9saT4KCiAgICAgICAgICA8bGk+U2VsZWN0IHRoZSB2YXJpYW50cyB3aXRoIHRoZSBiZXN0IGxhbmd1YWdlIG1hdGNoLAogICAgICAgICAgdXNpbmcgZWl0aGVyIHRoZSBvcmRlciBvZiBsYW5ndWFnZXMgaW4gdGhlCiAgICAgICAgICA8Y29kZT5BY2NlcHQtTGFuZ3VhZ2U8L2NvZGU+IGhlYWRlciAoaWYgcHJlc2VudCksIG9yIGVsc2UKICAgICAgICAgIHRoZSBvcmRlciBvZiBsYW5ndWFnZXMgaW4gdGhlIDxjb2RlPkxhbmd1YWdlUHJpb3JpdHk8L2NvZGU+CiAgICAgICAgICBkaXJlY3RpdmUgKGlmIHByZXNlbnQpLjwvbGk+CgogICAgICAgICAgPGxpPlNlbGVjdCB0aGUgdmFyaWFudHMgd2l0aCB0aGUgaGlnaGVzdCAnbGV2ZWwnIG1lZGlhCiAgICAgICAgICBwYXJhbWV0ZXIgKHVzZWQgdG8gZ2l2ZSB0aGUgdmVyc2lvbiBvZiB0ZXh0L2h0bWwgbWVkaWEKICAgICAgICAgIHR5cGVzKS48L2xpPgoKICAgICAgICAgIDxsaT5TZWxlY3QgdmFyaWFudHMgd2l0aCB0aGUgYmVzdCBjaGFyc2V0IG1lZGlhCiAgICAgICAgICBwYXJhbWV0ZXJzLCBhcyBnaXZlbiBvbiB0aGUgPGNvZGU+QWNjZXB0LUNoYXJzZXQ8L2NvZGU+CiAgICAgICAgICBoZWFkZXIgbGluZS4gIENoYXJzZXQgSVNPLTg4NTktMSBpcyBhY2NlcHRhYmxlIHVubGVzcwogICAgICAgICAgZXhwbGljaXRseSBleGNsdWRlZC4gVmFyaWFudHMgd2l0aCBhIDxjb2RlPnRleHQvKjwvY29kZT4KICAgICAgICAgIG1lZGlhIHR5cGUgYnV0IG5vdCBleHBsaWNpdGx5IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIKICAgICAgICAgIGNoYXJzZXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gSVNPLTg4NTktMS48L2xpPgoKICAgICAgICAgIDxsaT5TZWxlY3QgdGhvc2UgdmFyaWFudHMgd2hpY2ggaGF2ZSBhc3NvY2lhdGVkIGNoYXJzZXQKICAgICAgICAgIG1lZGlhIHBhcmFtZXRlcnMgdGhhdCBhcmUgPGVtPm5vdDwvZW0+IElTTy04ODU5LTEuIElmCiAgICAgICAgICB0aGVyZSBhcmUgbm8gc3VjaCB2YXJpYW50cywgc2VsZWN0IGFsbCB2YXJpYW50cwogICAgICAgICAgaW5zdGVhZC48L2xpPgoKICAgICAgICAgIDxsaT5TZWxlY3QgdGhlIHZhcmlhbnRzIHdpdGggdGhlIGJlc3QgZW5jb2RpbmcuIElmIHRoZXJlCiAgICAgICAgICBhcmUgdmFyaWFudHMgd2l0aCBhbiBlbmNvZGluZyB0aGF0IGlzIGFjY2VwdGFibGUgdG8gdGhlCiAgICAgICAgICB1c2VyLWFnZW50LCBzZWxlY3Qgb25seSB0aGVzZSB2YXJpYW50cy4gT3RoZXJ3aXNlIGlmCiAgICAgICAgICB0aGVyZSBpcyBhIG1peCBvZiBlbmNvZGVkIGFuZCBub24tZW5jb2RlZCB2YXJpYW50cywKICAgICAgICAgIHNlbGVjdCBvbmx5IHRoZSB1bmVuY29kZWQgdmFyaWFudHMuIElmIGVpdGhlciBhbGwKICAgICAgICAgIHZhcmlhbnRzIGFyZSBlbmNvZGVkIG9yIGFsbCB2YXJpYW50cyBhcmUgbm90IGVuY29kZWQsCiAgICAgICAgICBzZWxlY3QgYWxsIHZhcmlhbnRzLjwvbGk+CgogICAgICAgICAgPGxpPlNlbGVjdCB0aGUgdmFyaWFudHMgd2l0aCB0aGUgc21hbGxlc3QgY29udGVudAogICAgICAgICAgbGVuZ3RoLjwvbGk+CgogICAgICAgICAgPGxpPlNlbGVjdCB0aGUgZmlyc3QgdmFyaWFudCBvZiB0aG9zZSByZW1haW5pbmcuIFRoaXMKICAgICAgICAgIHdpbGwgYmUgZWl0aGVyIHRoZSBmaXJzdCBsaXN0ZWQgaW4gdGhlIHR5cGUtbWFwIGZpbGUsIG9yCiAgICAgICAgICB3aGVuIHZhcmlhbnRzIGFyZSByZWFkIGZyb20gdGhlIGRpcmVjdG9yeSwgdGhlIG9uZSB3aG9zZQogICAgICAgICAgZmlsZSBuYW1lIGNvbWVzIGZpcnN0IHdoZW4gc29ydGVkIHVzaW5nIEFTQ0lJIGNvZGUKICAgICAgICAgIG9yZGVyLjwvbGk+CiAgICAgICAgPC9vbD4KICAgICAgPC9saT4KCiAgICAgIDxsaT5UaGUgYWxnb3JpdGhtIGhhcyBub3cgc2VsZWN0ZWQgb25lICdiZXN0JyB2YXJpYW50LCBzbwogICAgICByZXR1cm4gaXQgYXMgdGhlIHJlc3BvbnNlLiBUaGUgSFRUUCByZXNwb25zZSBoZWFkZXIKICAgICAgPGNvZGU+VmFyeTwvY29kZT4gaXMgc2V0IHRvIGluZGljYXRlIHRoZSBkaW1lbnNpb25zIG9mCiAgICAgIG5lZ290aWF0aW9uIChicm93c2VycyBhbmQgY2FjaGVzIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB3aGVuCiAgICAgIGNhY2hpbmcgdGhlIHJlc291cmNlKS4gIEVuZC48L2xpPgoKICAgICAgPGxpPlRvIGdldCBoZXJlIG1lYW5zIG5vIHZhcmlhbnQgd2FzIHNlbGVjdGVkIChiZWNhdXNlIG5vbmUKICAgICAgYXJlIGFjY2VwdGFibGUgdG8gdGhlIGJyb3dzZXIpLiBSZXR1cm4gYSA0MDYgc3RhdHVzIChtZWFuaW5nCiAgICAgICJObyBhY2NlcHRhYmxlIHJlcHJlc2VudGF0aW9uIikgd2l0aCBhIHJlc3BvbnNlIGJvZHkKICAgICAgY29uc2lzdGluZyBvZiBhbiBIVE1MIGRvY3VtZW50IGxpc3RpbmcgdGhlIGF2YWlsYWJsZQogICAgICB2YXJpYW50cy4gQWxzbyBzZXQgdGhlIEhUVFAgPGNvZGU+VmFyeTwvY29kZT4gaGVhZGVyIHRvCiAgICAgIGluZGljYXRlIHRoZSBkaW1lbnNpb25zIG9mIHZhcmlhbmNlLjwvbGk+CiAgICA8L29sPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJiZXR0ZXIiIGlkPSJiZXR0ZXIiPkZpZGRsaW5nIHdpdGggUXVhbGl0eQogICAgVmFsdWVzPC9hPjwvaDI+CgogICAgPHA+aHR0cGQgc29tZXRpbWVzIGNoYW5nZXMgdGhlIHF1YWxpdHkgdmFsdWVzIGZyb20gd2hhdCB3b3VsZAogICAgYmUgZXhwZWN0ZWQgYnkgYSBzdHJpY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGh0dHBkCiAgICBuZWdvdGlhdGlvbiBhbGdvcml0aG0gYWJvdmUuIFRoaXMgaXMgdG8gZ2V0IGEgYmV0dGVyIHJlc3VsdAogICAgZnJvbSB0aGUgYWxnb3JpdGhtIGZvciBicm93c2VycyB3aGljaCBkbyBub3Qgc2VuZCBmdWxsIG9yCiAgICBhY2N1cmF0ZSBpbmZvcm1hdGlvbi4gU29tZSBvZiB0aGUgbW9zdCBwb3B1bGFyIGJyb3dzZXJzIHNlbmQKICAgIDxjb2RlPkFjY2VwdDwvY29kZT4gaGVhZGVyIGluZm9ybWF0aW9uIHdoaWNoIHdvdWxkIG90aGVyd2lzZQogICAgcmVzdWx0IGluIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHdyb25nIHZhcmlhbnQgaW4gbWFueSBjYXNlcy4gSWYgYQogICAgYnJvd3NlciBzZW5kcyBmdWxsIGFuZCBjb3JyZWN0IGluZm9ybWF0aW9uIHRoZXNlIGZpZGRsZXMgd2lsbCBub3QKICAgIGJlIGFwcGxpZWQuPC9wPgoKPGgzPjxhIG5hbWU9IndpbGRjYXJkcyIgaWQ9IndpbGRjYXJkcyI+TWVkaWEgVHlwZXMgYW5kIFdpbGRjYXJkczwvYT48L2gzPgoKICAgIDxwPlRoZSA8Y29kZT5BY2NlcHQ6PC9jb2RlPiByZXF1ZXN0IGhlYWRlciBpbmRpY2F0ZXMgcHJlZmVyZW5jZXMKICAgIGZvciBtZWRpYSB0eXBlcy4gSXQgY2FuIGFsc28gaW5jbHVkZSAnd2lsZGNhcmQnIG1lZGlhIHR5cGVzLCBzdWNoCiAgICBhcyAiaW1hZ2UvKiIgb3IgIiovKiIgd2hlcmUgdGhlICogbWF0Y2hlcyBhbnkgc3RyaW5nLiBTbyBhIHJlcXVlc3QKICAgIGluY2x1ZGluZzo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT5BY2NlcHQ6IGltYWdlLyosICovKjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+d291bGQgaW5kaWNhdGUgdGhhdCBhbnkgdHlwZSBzdGFydGluZyAiaW1hZ2UvIiBpcyBhY2NlcHRhYmxlLAogICAgYXMgaXMgYW55IG90aGVyIHR5cGUuCiAgICBTb21lIGJyb3dzZXJzIHJvdXRpbmVseSBzZW5kIHdpbGRjYXJkcyBpbiBhZGRpdGlvbiB0byBleHBsaWNpdAogICAgdHlwZXMgdGhleSBjYW4gaGFuZGxlLiBGb3IgZXhhbXBsZTo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICBBY2NlcHQ6IHRleHQvaHRtbCwgdGV4dC9wbGFpbiwgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCAqLyoKPC9jb2RlPjwvcD48L2Rpdj4KICAgIDxwPlRoZSBpbnRlbnRpb24gb2YgdGhpcyBpcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHBsaWNpdGx5IGxpc3RlZAogICAgdHlwZXMgYXJlIHByZWZlcnJlZCwgYnV0IGlmIGEgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9uIGlzCiAgICBhdmFpbGFibGUsIHRoYXQgaXMgb2sgdG9vLiAgVXNpbmcgZXhwbGljaXQgcXVhbGl0eSB2YWx1ZXMsCiAgICB3aGF0IHRoZSBicm93c2VyIHJlYWxseSB3YW50cyBpcyBzb21ldGhpbmcgbGlrZTo8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogIEFjY2VwdDogdGV4dC9odG1sLCB0ZXh0L3BsYWluLCBpbWFnZS9naWYsIGltYWdlL2pwZWcsICovKjsgcT0wLjAxCjwvY29kZT48L3A+PC9kaXY+CiAgICA8cD5UaGUgZXhwbGljaXQgdHlwZXMgaGF2ZSBubyBxdWFsaXR5IGZhY3Rvciwgc28gdGhleSBkZWZhdWx0IHRvIGEKICAgIHByZWZlcmVuY2Ugb2YgMS4wICh0aGUgaGlnaGVzdCkuIFRoZSB3aWxkY2FyZCAqLyogaXMgZ2l2ZW4gYQogICAgbG93IHByZWZlcmVuY2Ugb2YgMC4wMSwgc28gb3RoZXIgdHlwZXMgd2lsbCBvbmx5IGJlIHJldHVybmVkIGlmCiAgICBubyB2YXJpYW50IG1hdGNoZXMgYW4gZXhwbGljaXRseSBsaXN0ZWQgdHlwZS48L3A+CgogICAgPHA+SWYgdGhlIDxjb2RlPkFjY2VwdDo8L2NvZGU+IGhlYWRlciBjb250YWlucyA8ZW0+bm88L2VtPiBxCiAgICBmYWN0b3JzIGF0IGFsbCwgaHR0cGQgc2V0cyB0aGUgcSB2YWx1ZSBvZiAiKi8qIiwgaWYgcHJlc2VudCwgdG8KICAgIDAuMDEgdG8gZW11bGF0ZSB0aGUgZGVzaXJlZCBiZWhhdmlvci4gSXQgYWxzbyBzZXRzIHRoZSBxIHZhbHVlIG9mCiAgICB3aWxkY2FyZHMgb2YgdGhlIGZvcm1hdCAidHlwZS8qIiB0byAwLjAyIChzbyB0aGVzZSBhcmUgcHJlZmVycmVkCiAgICBvdmVyIG1hdGNoZXMgYWdhaW5zdCAiKi8qIi4gSWYgYW55IG1lZGlhIHR5cGUgb24gdGhlCiAgICA8Y29kZT5BY2NlcHQ6PC9jb2RlPiBoZWFkZXIgY29udGFpbnMgYSBxIGZhY3RvciwgdGhlc2Ugc3BlY2lhbAogICAgdmFsdWVzIGFyZSA8ZW0+bm90PC9lbT4gYXBwbGllZCwgc28gcmVxdWVzdHMgZnJvbSBicm93c2VycyB3aGljaAogICAgc2VuZCB0aGUgZXhwbGljaXQgaW5mb3JtYXRpb24gdG8gc3RhcnQgd2l0aCB3b3JrIGFzIGV4cGVjdGVkLjwvcD4KCgo8aDM+PGEgbmFtZT0iZXhjZXB0aW9ucyIgaWQ9ImV4Y2VwdGlvbnMiPkxhbmd1YWdlIE5lZ290aWF0aW9uIEV4Y2VwdGlvbnM8L2E+PC9oMz4KCiAgICA8cD5OZXcgaW4gaHR0cGQgMi4wLCBzb21lIGV4Y2VwdGlvbnMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZQogICAgbmVnb3RpYXRpb24gYWxnb3JpdGhtIHRvIGFsbG93IGdyYWNlZnVsIGZhbGxiYWNrIHdoZW4gbGFuZ3VhZ2UKICAgIG5lZ290aWF0aW9uIGZhaWxzIHRvIGZpbmQgYSBtYXRjaC48L3A+CgogICAgPHA+V2hlbiBhIGNsaWVudCByZXF1ZXN0cyBhIHBhZ2Ugb24geW91ciBzZXJ2ZXIsIGJ1dCB0aGUgc2VydmVyCiAgICBjYW5ub3QgZmluZCBhIHNpbmdsZSBwYWdlIHRoYXQgbWF0Y2hlcyB0aGUKICAgIDxjb2RlPkFjY2VwdC1sYW5ndWFnZTwvY29kZT4gc2VudCBieQogICAgdGhlIGJyb3dzZXIsIHRoZSBzZXJ2ZXIgd2lsbCByZXR1cm4gZWl0aGVyIGEgIk5vIEFjY2VwdGFibGUKICAgIFZhcmlhbnQiIG9yICJNdWx0aXBsZSBDaG9pY2VzIiByZXNwb25zZSB0byB0aGUgY2xpZW50LiAgVG8gYXZvaWQKICAgIHRoZXNlIGVycm9yIG1lc3NhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgaHR0cGQgdG8gaWdub3JlCiAgICB0aGUgPGNvZGU+QWNjZXB0LWxhbmd1YWdlPC9jb2RlPiBpbiB0aGVzZSBjYXNlcyBhbmQgcHJvdmlkZSBhCiAgICBkb2N1bWVudCB0aGF0IGRvZXMgbm90IGV4cGxpY2l0bHkgbWF0Y2ggdGhlIGNsaWVudCdzIHJlcXVlc3QuICBUaGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9uZWdvdGlhdGlvbi5odG1sI2ZvcmNlbGFuZ3VhZ2Vwcmlvcml0eSI+Rm9yY2VMYW5ndWFnZVByaW9yaXR5PC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBvbmUgb3IgYm90aCBvZiB0aGVzZSBlcnJvcgogICAgbWVzc2FnZXMgYW5kIHN1YnN0aXR1dGUgdGhlIHNlcnZlcnMganVkZ2VtZW50IGluIHRoZSBmb3JtIG9mIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwjbGFuZ3VhZ2Vwcmlvcml0eSI+TGFuZ3VhZ2VQcmlvcml0eTwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUuPC9wPgoKICAgIDxwPlRoZSBzZXJ2ZXIgd2lsbCBhbHNvIGF0dGVtcHQgdG8gbWF0Y2ggbGFuZ3VhZ2Utc3Vic2V0cyB3aGVuIG5vCiAgICBvdGhlciBtYXRjaCBjYW4gYmUgZm91bmQuICBGb3IgZXhhbXBsZSwgaWYgYSBjbGllbnQgcmVxdWVzdHMKICAgIGRvY3VtZW50cyB3aXRoIHRoZSBsYW5ndWFnZSA8Y29kZT5lbi1HQjwvY29kZT4gZm9yIEJyaXRpc2gKICAgIEVuZ2xpc2gsIHRoZSBzZXJ2ZXIgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgdGhlIEhUVFAvMS4xCiAgICBzdGFuZGFyZCB0byBtYXRjaCB0aGF0IGFnYWluc3QgYSBkb2N1bWVudCB0aGF0IGlzIG1hcmtlZCBhcyBzaW1wbHkKICAgIDxjb2RlPmVuPC9jb2RlPi4gIChOb3RlIHRoYXQgaXQgaXMgYWxtb3N0IHN1cmVseSBhIGNvbmZpZ3VyYXRpb24KICAgIGVycm9yIHRvIGluY2x1ZGUgPGNvZGU+ZW4tR0I8L2NvZGU+IGFuZCBub3QgPGNvZGU+ZW48L2NvZGU+IGluIHRoZQogICAgPGNvZGU+QWNjZXB0LUxhbmd1YWdlPC9jb2RlPiBoZWFkZXIsIHNpbmNlIGl0IGlzIHZlcnkgdW5saWtlbHkKICAgIHRoYXQgYSByZWFkZXIgdW5kZXJzdGFuZHMgQnJpdGlzaCBFbmdsaXNoLCBidXQgZG9lc24ndCB1bmRlcnN0YW5kCiAgICBFbmdsaXNoIGluIGdlbmVyYWwuICBVbmZvcnR1bmF0ZWx5LCBtYW55IGN1cnJlbnQgY2xpZW50cyBoYXZlCiAgICBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHRoYXQgcmVzZW1ibGUgdGhpcy4pICBIb3dldmVyLCBpZiBubyBvdGhlcgogICAgbGFuZ3VhZ2UgbWF0Y2ggaXMgcG9zc2libGUgYW5kIHRoZSBzZXJ2ZXIgaXMgYWJvdXQgdG8gcmV0dXJuIGEgIk5vCiAgICBBY2NlcHRhYmxlIFZhcmlhbnRzIiBlcnJvciBvciBmYWxsYmFjayB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwjbGFuZ3VhZ2Vwcmlvcml0eSI+TGFuZ3VhZ2VQcmlvcml0eTwvYT48L2NvZGU+LCB0aGUgc2VydmVyCiAgICB3aWxsIGlnbm9yZSB0aGUgc3Vic2V0IHNwZWNpZmljYXRpb24gYW5kIG1hdGNoIDxjb2RlPmVuLUdCPC9jb2RlPgogICAgYWdhaW5zdCA8Y29kZT5lbjwvY29kZT4gZG9jdW1lbnRzLiAgSW1wbGljaXRseSwgaHR0cGQgd2lsbCBhZGQKICAgIHRoZSBwYXJlbnQgbGFuZ3VhZ2UgdG8gdGhlIGNsaWVudCdzIGFjY2VwdGFibGUgbGFuZ3VhZ2UgbGlzdCB3aXRoCiAgICBhIHZlcnkgbG93IHF1YWxpdHkgdmFsdWUuICBCdXQgbm90ZSB0aGF0IGlmIHRoZSBjbGllbnQgcmVxdWVzdHMKICAgICJlbi1HQjsgcT0wLjksIGZyOyBxPTAuOCIsIGFuZCB0aGUgc2VydmVyIGhhcyBkb2N1bWVudHMKICAgIGRlc2lnbmF0ZWQgImVuIiBhbmQgImZyIiwgdGhlbiB0aGUgImZyIiBkb2N1bWVudCB3aWxsIGJlIHJldHVybmVkLgogICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBIVFRQLzEuMQogICAgc3BlY2lmaWNhdGlvbiBhbmQgdG8gd29yayBlZmZlY3RpdmVseSB3aXRoIHByb3Blcmx5IGNvbmZpZ3VyZWQKICAgIGNsaWVudHMuPC9wPgoKICAgIDxwPkluIG9yZGVyIHRvIHN1cHBvcnQgYWR2YW5jZWQgdGVjaG5pcXVlcyAoc3VjaCBhcyBjb29raWVzIG9yCiAgICBzcGVjaWFsIFVSTC1wYXRocykgdG8gZGV0ZXJtaW5lIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlLAogICAgc2luY2UgaHR0cGQgMi4wLjQ3IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9uZWdvdGlhdGlvbi5odG1sIj5tb2RfbmVnb3RpYXRpb248L2E+PC9jb2RlPiByZWNvZ25pemVzCiAgICB0aGUgPGEgaHJlZj0iZW52Lmh0bWwiPmVudmlyb25tZW50IHZhcmlhYmxlPC9hPgogICAgPGNvZGU+cHJlZmVyLWxhbmd1YWdlPC9jb2RlPi4gSWYgaXQgZXhpc3RzIGFuZCBjb250YWlucyBhbgogICAgYXBwcm9wcmlhdGUgbGFuZ3VhZ2UgdGFnLCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfbmVnb3RpYXRpb24uaHRtbCI+bW9kX25lZ290aWF0aW9uPC9hPjwvY29kZT4gd2lsbAogICAgdHJ5IHRvIHNlbGVjdCBhIG1hdGNoaW5nIHZhcmlhbnQuIElmIHRoZXJlJ3Mgbm8gc3VjaCB2YXJpYW50LAogICAgdGhlIG5vcm1hbCBuZWdvdGlhdGlvbiBwcm9jZXNzIGFwcGxpZXMuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+U2V0RW52SWYgQ29va2llICJsYW5ndWFnZT0oLispIiBwcmVmZXItbGFuZ3VhZ2U9JDEKSGVhZGVyIGFwcGVuZCBWYXJ5IGNvb2tpZTwvcHJlPgo8L2Rpdj4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZXh0ZW5zaW9ucyIgaWQ9ImV4dGVuc2lvbnMiPkV4dGVuc2lvbnMgdG8gVHJhbnNwYXJlbnQgQ29udGVudApOZWdvdGlhdGlvbjwvYT48L2gyPgoKPHA+aHR0cGQgZXh0ZW5kcyB0aGUgdHJhbnNwYXJlbnQgY29udGVudCBuZWdvdGlhdGlvbiBwcm90b2NvbCAoUkZDCjIyOTUpIGFzIGZvbGxvd3MuIEEgbmV3IDxjb2RlPntlbmNvZGluZyAuLn08L2NvZGU+IGVsZW1lbnQgaXMgdXNlZCBpbgp2YXJpYW50IGxpc3RzIHRvIGxhYmVsIHZhcmlhbnRzIHdoaWNoIGFyZSBhdmFpbGFibGUgd2l0aCBhIHNwZWNpZmljCmNvbnRlbnQtZW5jb2Rpbmcgb25seS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSVlNBLzEuMCBhbGdvcml0aG0KKFJGQyAyMjk2KSBpcyBleHRlbmRlZCB0byByZWNvZ25pemUgZW5jb2RlZCB2YXJpYW50cyBpbiB0aGUgbGlzdCwgYW5kCnRvIHVzZSB0aGVtIGFzIGNhbmRpZGF0ZSB2YXJpYW50cyB3aGVuZXZlciB0aGVpciBlbmNvZGluZ3MgYXJlCmFjY2VwdGFibGUgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5BY2NlcHQtRW5jb2Rpbmc8L2NvZGU+IHJlcXVlc3QKaGVhZGVyLiBUaGUgUlZTQS8xLjAgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgcm91bmQgY29tcHV0ZWQgcXVhbGl0eQpmYWN0b3JzIHRvIDUgZGVjaW1hbCBwbGFjZXMgYmVmb3JlIGNob29zaW5nIHRoZSBiZXN0IHZhcmlhbnQuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im5hbWluZyIgaWQ9Im5hbWluZyI+Tm90ZSBvbiBoeXBlcmxpbmtzIGFuZCBuYW1pbmcgY29udmVudGlvbnM8L2E+PC9oMj4KCiAgICA8cD5JZiB5b3UgYXJlIHVzaW5nIGxhbmd1YWdlIG5lZ290aWF0aW9uIHlvdSBjYW4gY2hvb3NlIGJldHdlZW4KICAgIGRpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbnMsIGJlY2F1c2UgZmlsZXMgY2FuIGhhdmUgbW9yZSB0aGFuCiAgICBvbmUgZXh0ZW5zaW9uLCBhbmQgdGhlIG9yZGVyIG9mIHRoZSBleHRlbnNpb25zIGlzIG5vcm1hbGx5CiAgICBpcnJlbGV2YW50IChzZWUgdGhlIDxhIGhyZWY9Im1vZC9tb2RfbWltZS5odG1sI211bHRpcGxlZXh0Ij5tb2RfbWltZTwvYT4gZG9jdW1lbnRhdGlvbgogICAgZm9yIGRldGFpbHMpLjwvcD4KCiAgICA8cD5BIHR5cGljYWwgZmlsZSBoYXMgYSBNSU1FLXR5cGUgZXh0ZW5zaW9uICg8ZW0+ZS5nLjwvZW0+LAogICAgPGNvZGU+aHRtbDwvY29kZT4pLCBtYXliZSBhbiBlbmNvZGluZyBleHRlbnNpb24gKDxlbT5lLmcuPC9lbT4sCiAgICA8Y29kZT5nejwvY29kZT4pLCBhbmQgb2YgY291cnNlIGEgbGFuZ3VhZ2UgZXh0ZW5zaW9uCiAgICAoPGVtPmUuZy48L2VtPiwgPGNvZGU+ZW48L2NvZGU+KSB3aGVuIHdlIGhhdmUgZGlmZmVyZW50CiAgICBsYW5ndWFnZSB2YXJpYW50cyBvZiB0aGlzIGZpbGUuPC9wPgoKICAgIDxwPkV4YW1wbGVzOjwvcD4KCiAgICA8dWw+CiAgICAgIDxsaT5mb28uZW4uaHRtbDwvbGk+CgogICAgICA8bGk+Zm9vLmh0bWwuZW48L2xpPgoKICAgICAgPGxpPmZvby5lbi5odG1sLmd6PC9saT4KICAgIDwvdWw+CgogICAgPHA+SGVyZSBzb21lIG1vcmUgZXhhbXBsZXMgb2YgZmlsZW5hbWVzIHRvZ2V0aGVyIHdpdGggdmFsaWQgYW5kCiAgICBpbnZhbGlkIGh5cGVybGlua3M6PC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPgogICAgICAKICAgICAgPHRyPgogICAgICAgIDx0aD5GaWxlbmFtZTwvdGg+CgogICAgICAgIDx0aD5WYWxpZCBoeXBlcmxpbms8L3RoPgoKICAgICAgICA8dGg+SW52YWxpZCBoeXBlcmxpbms8L3RoPgogICAgICA8L3RyPgoKICAgICAgPHRyPgogICAgICAgIDx0ZD48ZW0+Zm9vLmh0bWwuZW48L2VtPjwvdGQ+CgogICAgICAgIDx0ZD5mb288YnIgLz4KICAgICAgICAgZm9vLmh0bWw8L3RkPgoKICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxlbT5mb28uZW4uaHRtbDwvZW0+PC90ZD4KCiAgICAgICAgPHRkPmZvbzwvdGQ+CgogICAgICAgIDx0ZD5mb28uaHRtbDwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxlbT5mb28uaHRtbC5lbi5nejwvZW0+PC90ZD4KCiAgICAgICAgPHRkPmZvbzxiciAvPgogICAgICAgICBmb28uaHRtbDwvdGQ+CgogICAgICAgIDx0ZD5mb28uZ3o8YnIgLz4KICAgICAgICAgZm9vLmh0bWwuZ3o8L3RkPgogICAgICA8L3RyPgoKICAgICAgPHRyPgogICAgICAgIDx0ZD48ZW0+Zm9vLmVuLmh0bWwuZ3o8L2VtPjwvdGQ+CgogICAgICAgIDx0ZD5mb288L3RkPgoKICAgICAgICA8dGQ+Zm9vLmh0bWw8YnIgLz4KICAgICAgICAgZm9vLmh0bWwuZ3o8YnIgLz4KICAgICAgICAgZm9vLmd6PC90ZD4KICAgICAgPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGVtPmZvby5nei5odG1sLmVuPC9lbT48L3RkPgoKICAgICAgICA8dGQ+Zm9vPGJyIC8+CiAgICAgICAgIGZvby5nejxiciAvPgogICAgICAgICBmb28uZ3ouaHRtbDwvdGQ+CgogICAgICAgIDx0ZD5mb28uaHRtbDwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxlbT5mb28uaHRtbC5nei5lbjwvZW0+PC90ZD4KCiAgICAgICAgPHRkPmZvbzxiciAvPgogICAgICAgICBmb28uaHRtbDxiciAvPgogICAgICAgICBmb28uaHRtbC5nejwvdGQ+CgogICAgICAgIDx0ZD5mb28uZ3o8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5Mb29raW5nIGF0IHRoZSB0YWJsZSBhYm92ZSwgeW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgYWx3YXlzCiAgICBwb3NzaWJsZSB0byB1c2UgdGhlIG5hbWUgd2l0aG91dCBhbnkgZXh0ZW5zaW9ucyBpbiBhIGh5cGVybGluawogICAgKDxlbT5lLmcuPC9lbT4sIDxjb2RlPmZvbzwvY29kZT4pLiBUaGUgYWR2YW50YWdlIGlzIHRoYXQgeW91CiAgICBjYW4gaGlkZSB0aGUgYWN0dWFsIHR5cGUgb2YgYSBkb2N1bWVudCByc3AuIGZpbGUgYW5kIGNhbiBjaGFuZ2UKICAgIGl0IGxhdGVyLCA8ZW0+ZS5nLjwvZW0+LCBmcm9tIDxjb2RlPmh0bWw8L2NvZGU+IHRvCiAgICA8Y29kZT5zaHRtbDwvY29kZT4gb3IgPGNvZGU+Y2dpPC9jb2RlPiB3aXRob3V0IGNoYW5naW5nIGFueQogICAgaHlwZXJsaW5rIHJlZmVyZW5jZXMuPC9wPgoKICAgIDxwPklmIHlvdSB3YW50IHRvIGNvbnRpbnVlIHRvIHVzZSBhIE1JTUUtdHlwZSBpbiB5b3VyCiAgICBoeXBlcmxpbmtzICg8ZW0+ZS5nLjwvZW0+IDxjb2RlPmZvby5odG1sPC9jb2RlPikgdGhlIGxhbmd1YWdlCiAgICBleHRlbnNpb24gKGluY2x1ZGluZyBhbiBlbmNvZGluZyBleHRlbnNpb24gaWYgdGhlcmUgaXMgb25lKQogICAgbXVzdCBiZSBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBNSU1FLXR5cGUgZXh0ZW5zaW9uCiAgICAoPGVtPmUuZy48L2VtPiwgPGNvZGU+Zm9vLmh0bWwuZW48L2NvZGU+KS48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY2FjaGluZyIgaWQ9ImNhY2hpbmciPk5vdGUgb24gQ2FjaGluZzwvYT48L2gyPgoKICAgIDxwPldoZW4gYSBjYWNoZSBzdG9yZXMgYSByZXByZXNlbnRhdGlvbiwgaXQgYXNzb2NpYXRlcyBpdCB3aXRoCiAgICB0aGUgcmVxdWVzdCBVUkwuIFRoZSBuZXh0IHRpbWUgdGhhdCBVUkwgaXMgcmVxdWVzdGVkLCB0aGUgY2FjaGUKICAgIGNhbiB1c2UgdGhlIHN0b3JlZCByZXByZXNlbnRhdGlvbi4gQnV0LCBpZiB0aGUgcmVzb3VyY2UgaXMKICAgIG5lZ290aWFibGUgYXQgdGhlIHNlcnZlciwgdGhpcyBtaWdodCByZXN1bHQgaW4gb25seSB0aGUgZmlyc3QKICAgIHJlcXVlc3RlZCB2YXJpYW50IGJlaW5nIGNhY2hlZCBhbmQgc3Vic2VxdWVudCBjYWNoZSBoaXRzIG1pZ2h0CiAgICByZXR1cm4gdGhlIHdyb25nIHJlc3BvbnNlLiBUbyBwcmV2ZW50IHRoaXMsIGh0dHBkIG5vcm1hbGx5CiAgICBtYXJrcyBhbGwgcmVzcG9uc2VzIHRoYXQgYXJlIHJldHVybmVkIGFmdGVyIGNvbnRlbnQgbmVnb3RpYXRpb24KICAgIGFzIG5vbi1jYWNoZWFibGUgYnkgSFRUUC8xLjAgY2xpZW50cy4gaHR0cGQgYWxzbyBzdXBwb3J0cyB0aGUKICAgIEhUVFAvMS4xIHByb3RvY29sIGZlYXR1cmVzIHRvIGFsbG93IGNhY2hpbmcgb2YgbmVnb3RpYXRlZAogICAgcmVzcG9uc2VzLjwvcD4KCiAgICA8cD5Gb3IgcmVxdWVzdHMgd2hpY2ggY29tZSBmcm9tIGEgSFRUUC8xLjAgY29tcGxpYW50IGNsaWVudAogICAgKGVpdGhlciBhIGJyb3dzZXIgb3IgYSBjYWNoZSksIHRoZSBkaXJlY3RpdmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwjY2FjaGVuZWdvdGlhdGVkZG9jcyI+Q2FjaGVOZWdvdGlhdGVkRG9jczwvYT48L2NvZGU+IGNhbiBiZQogICAgdXNlZCB0byBhbGxvdyBjYWNoaW5nIG9mIHJlc3BvbnNlcyB3aGljaCB3ZXJlIHN1YmplY3QgdG8KICAgIG5lZ290aWF0aW9uLiBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgZ2l2ZW4gaW4gdGhlIHNlcnZlciBjb25maWcgb3IKICAgIHZpcnR1YWwgaG9zdCwgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4gSXQgaGFzIG5vIGVmZmVjdCBvbiByZXF1ZXN0cwogICAgZnJvbSBIVFRQLzEuMSBjbGllbnRzLjwvcD4KCiAgICA8cD5Gb3IgSFRUUC8xLjEgY2xpZW50cywgaHR0cGQgc2VuZHMgYSA8Y29kZT5WYXJ5PC9jb2RlPiBIVFRQCiAgICByZXNwb25zZSBoZWFkZXIgdG8gaW5kaWNhdGUgdGhlIG5lZ290aWF0aW9uIGRpbWVuc2lvbnMgZm9yIHRoZQogICAgcmVzcG9uc2UuICBDYWNoZXMgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEKICAgIHN1YnNlcXVlbnQgcmVxdWVzdCBjYW4gYmUgc2VydmVkIGZyb20gdGhlIGxvY2FsIGNvcHkuICBUbwogICAgZW5jb3VyYWdlIGEgY2FjaGUgdG8gdXNlIHRoZSBsb2NhbCBjb3B5IHJlZ2FyZGxlc3Mgb2YgdGhlCiAgICBuZWdvdGlhdGlvbiBkaW1lbnNpb25zLCBzZXQgdGhlIDxjb2RlPmZvcmNlLW5vLXZhcnk8L2NvZGU+IDxhIGhyZWY9ImVudi5odG1sI3NwZWNpYWwiPmVudmlyb25tZW50IHZhcmlhYmxlPC9hPi48L3A+Cgo8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL2NvbnRlbnQtbmVnb3RpYXRpb24uaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvY29udGVudC1uZWdvdGlhdGlvbi5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvY29udGVudC1uZWdvdGlhdGlvbi5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vY29udGVudC1uZWdvdGlhdGlvbi5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2NvbnRlbnQtbmVnb3RpYXRpb24uaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9jb250ZW50LW5lZ290aWF0aW9uLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=