PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5Db25maWd1cmF0aW9uIEZpbGVzIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WZXJzaW9uIDIuNDwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+Q29uZmlndXJhdGlvbiBGaWxlczwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9kZS9jb25maWd1cmluZy5odG1sIiBocmVmbGFuZz0iZGUiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRGV1dHNjaCI+Jm5ic3A7ZGUmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lbi9jb25maWd1cmluZy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9jb25maWd1cmluZy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvY29uZmlndXJpbmcuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2tvL2NvbmZpZ3VyaW5nLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvY29uZmlndXJpbmcuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCjxwPlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBmaWxlcyB1c2VkIHRvIGNvbmZpZ3VyZSBBcGFjaGUgSFRUUApTZXJ2ZXIuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtYWluIj5NYWluIENvbmZpZ3VyYXRpb24gRmlsZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzeW50YXgiPlN5bnRheCBvZiB0aGUgQ29uZmlndXJhdGlvbiBGaWxlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI21vZHVsZXMiPk1vZHVsZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzY29wZSI+U2NvcGUgb2YgRGlyZWN0aXZlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2h0YWNjZXNzIj4uaHRhY2Nlc3MgRmlsZXM8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ibWFpbiIgaWQ9Im1haW4iPk1haW4gQ29uZmlndXJhdGlvbiBGaWxlczwvYT48L2gyPgogICAgCiAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfbWltZS5odG1sIj5tb2RfbWltZTwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2lmZGVmaW5lIj4mbHQ7SWZEZWZpbmUmZ3Q7PC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjaW5jbHVkZSI+SW5jbHVkZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX21pbWUuaHRtbCN0eXBlc2NvbmZpZyI+VHlwZXNDb25maWc8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjwvdHI+PC90YWJsZT4KCiAgICA8cD5BcGFjaGUgSFRUUCBTZXJ2ZXIgaXMgY29uZmlndXJlZCBieSBwbGFjaW5nIDxhIGhyZWY9Im1vZC9kaXJlY3RpdmVzLmh0bWwiPmRpcmVjdGl2ZXM8L2E+IGluIHBsYWluIHRleHQKICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c3VhbGx5IGNhbGxlZAogICAgPGNvZGU+aHR0cGQuY29uZjwvY29kZT4uIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGZpbGUgaXMgc2V0IGF0CiAgICBjb21waWxlLXRpbWUsIGJ1dCBtYXkgYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSA8Y29kZT4tZjwvY29kZT4KICAgIGNvbW1hbmQgbGluZSBmbGFnLiBJbiBhZGRpdGlvbiwgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlcyBtYXkgYmUKICAgIGFkZGVkIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjaW5jbHVkZSI+SW5jbHVkZTwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUsIGFuZCB3aWxkY2FyZHMgY2FuIGJlIHVzZWQgdG8gaW5jbHVkZSBtYW55IGNvbmZpZ3VyYXRpb24KICAgIGZpbGVzLiBBbnkgZGlyZWN0aXZlIG1heSBiZSBwbGFjZWQgaW4gYW55IG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24KICAgIGZpbGVzLiBDaGFuZ2VzIHRvIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIG9ubHkKICAgIHJlY29nbml6ZWQgYnkgaHR0cGQgd2hlbiBpdCBpcyBzdGFydGVkIG9yIHJlc3RhcnRlZC48L3A+CgogICAgPHA+VGhlIHNlcnZlciBhbHNvIHJlYWRzIGEgZmlsZSBjb250YWluaW5nIG1pbWUgZG9jdW1lbnQgdHlwZXM7CiAgICB0aGUgZmlsZW5hbWUgaXMgc2V0IGJ5IHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfbWltZS5odG1sI3R5cGVzY29uZmlnIj5UeXBlc0NvbmZpZzwvYT48L2NvZGU+IGRpcmVjdGl2ZSwKICAgIGFuZCBpcyA8Y29kZT5taW1lLnR5cGVzPC9jb2RlPiBieSBkZWZhdWx0LjwvcD4KICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InN5bnRheCIgaWQ9InN5bnRheCI+U3ludGF4IG9mIHRoZSBDb25maWd1cmF0aW9uIEZpbGVzPC9hPjwvaDI+CiAgICAKCiAgICA8cD5odHRwZCBjb25maWd1cmF0aW9uIGZpbGVzIGNvbnRhaW4gb25lIGRpcmVjdGl2ZSBwZXIgbGluZS4KICAgIFRoZSBiYWNrc2xhc2ggIlwiIG1heSBiZSB1c2VkIGFzIHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUKICAgIHRvIGluZGljYXRlIHRoYXQgdGhlIGRpcmVjdGl2ZSBjb250aW51ZXMgb250byB0aGUgbmV4dCBsaW5lLgogICAgVGhlcmUgbXVzdCBiZSBubyBvdGhlciBjaGFyYWN0ZXJzIG9yIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlCiAgICBiYWNrc2xhc2ggYW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUuPC9wPgoKICAgIDxwPkFyZ3VtZW50cyB0byBkaXJlY3RpdmVzIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gSWYgYW4gCiAgICBhcmd1bWVudCBjb250YWlucyBzcGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgdGhhdCBhcmd1bWVudCBpbiBxdW90ZXMuPC9wPgoKICAgIDxwPkRpcmVjdGl2ZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsCiAgICBidXQgYXJndW1lbnRzIHRvIGRpcmVjdGl2ZXMgYXJlIG9mdGVuIGNhc2Ugc2Vuc2l0aXZlLiBMaW5lcwogICAgdGhhdCBiZWdpbiB3aXRoIHRoZSBoYXNoIGNoYXJhY3RlciAiIyIgYXJlIGNvbnNpZGVyZWQKICAgIGNvbW1lbnRzLCBhbmQgYXJlIGlnbm9yZWQuIENvbW1lbnRzIG1heSA8c3Ryb25nPm5vdDwvc3Ryb25nPiBiZQogICAgaW5jbHVkZWQgb24gdGhlIHNhbWUgbGluZSBhcyBhIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLiAKICAgIFdoaXRlIHNwYWNlIG9jY3VycmluZyBiZWZvcmUgYSBkaXJlY3RpdmUgaXMgaWdub3JlZCwgc28KICAgIHlvdSBtYXkgaW5kZW50IGRpcmVjdGl2ZXMgZm9yIGNsYXJpdHkuIEJsYW5rIGxpbmVzIGFyZSBhbHNvIGlnbm9yZWQuPC9wPgoKICAgIDxwPlRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzIGRlZmluZWQgd2l0aCB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2RlZmluZSI+RGVmaW5lPC9hPjwvY29kZT4gb2Ygb3Igc2hlbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbgogICAgYmUgdXNlZCBpbiBjb25maWd1cmF0aW9uIGZpbGUgbGluZXMgdXNpbmcgdGhlIHN5bnRheCA8Y29kZT4ke1ZBUn08L2NvZGU+LgogICAgSWYgIlZBUiIgaXMgdGhlIG5hbWUgb2YgYSB2YWxpZCB2YXJpYWJsZSwgdGhlIHZhbHVlIG9mIHRoYXQgdmFyaWFibGUgaXMKICAgIHN1YnN0aXR1dGVkIGludG8gdGhhdCBzcG90IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgbGluZSwgYW5kIHByb2Nlc3NpbmcKICAgIGNvbnRpbnVlcyBhcyBpZiB0aGF0IHRleHQgd2VyZSBmb3VuZCBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgogICAgVmFyaWFibGVzIGRlZmluZWQgd2l0aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZGVmaW5lIj5EZWZpbmU8L2E+PC9jb2RlPiB0YWtlCiAgICBwcmVjZWRlbmNlIG92ZXIgc2hlbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogICAgSWYgdGhlICJWQVIiIHZhcmlhYmxlIGlzIG5vdCBmb3VuZCwgdGhlIGNoYXJhY3RlcnMgPGNvZGU+JHtWQVJ9PC9jb2RlPgogICAgYXJlIGxlZnQgdW5jaGFuZ2VkLCBhbmQgYSB3YXJuaW5nIGlzIGxvZ2dlZC4KICAgIFZhcmlhYmxlIG5hbWVzIG1heSBub3QgY29udGFpbiBjb2xvbiAiOiIgY2hhcmFjdGVycywgdG8gYXZvaWQgY2xhc2hlcyB3aXRoCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVtYXAiPlJld3JpdGVNYXA8L2E+PC9jb2RlPidzIHN5bnRheC48L3A+CgogICAgPHA+T25seSBzaGVsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBiZWZvcmUgdGhlIHNlcnZlciBpcyBzdGFydGVkCiAgICBjYW4gYmUgdXNlZCBpbiBleHBhbnNpb25zLiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUKICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYsIGZvciBleGFtcGxlIHdpdGggPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Vudi5odG1sI3NldGVudiI+U2V0RW52PC9hPjwvY29kZT4sIHRha2UgZWZmZWN0IHRvbyBsYXRlIHRvIGJlIHVzZWQgZm9yCiAgICBleHBhbnNpb25zIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuPC9wPgoKICAgIDxwPlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGxpbmUgaW4gbm9ybWFsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFmdGVyCiAgICB2YXJpYWJsZSBzdWJzdGl0dXRpb24gYW5kIGpvaW5pbmcgYW55IGNvbnRpbnVlZCBsaW5lcywgaXMgYXBwcm94aW1hdGVseQogICAgMTYgTWlCLiBJbiA8YSBocmVmPSJjb25maWd1cmluZy5odG1sI2h0YWNjZXNzIj4uaHRhY2Nlc3MgZmlsZXM8L2E+LCB0aGUKICAgIG1heGltdW0gbGVuZ3RoIGlzIDgxOTAgY2hhcmFjdGVycy48L3A+CgogICAgPHA+WW91IGNhbiBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHN5bnRheCBlcnJvcnMKICAgIHdpdGhvdXQgc3RhcnRpbmcgdGhlIHNlcnZlciBieSB1c2luZyA8Y29kZT5hcGFjaGVjdGwKICAgIGNvbmZpZ3Rlc3Q8L2NvZGU+IG9yIHRoZSA8Y29kZT4tdDwvY29kZT4gY29tbWFuZCBsaW5lCiAgICBvcHRpb24uPC9wPgoKICAgIDxwPllvdSBjYW4gdXNlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9pbmZvLmh0bWwiPm1vZF9pbmZvPC9hPjwvY29kZT4ncyA8Y29kZT4tRERVTVBfQ09ORklHPC9jb2RlPiB0bwogICAgZHVtcCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGFsbCBpbmNsdWRlZCBmaWxlcyBhbmQgZW52aXJvbm1lbnQKICAgIHZhcmlhYmxlcyByZXNvbHZlZCBhbmQgYWxsIGNvbW1lbnRzIGFuZCBub24tbWF0Y2hpbmcKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNpZmRlZmluZSI+Jmx0O0lmRGVmaW5lJmd0OzwvYT48L2NvZGU+IGFuZAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2lmbW9kdWxlIj4mbHQ7SWZNb2R1bGUmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbnMKICAgIHJlbW92ZWQuIEhvd2V2ZXIsIHRoZSBvdXRwdXQgZG9lcyBub3QgcmVmbGVjdCB0aGUgbWVyZ2luZyBvciBvdmVycmlkaW5nCiAgICB0aGF0IG1heSBoYXBwZW4gZm9yIHJlcGVhdGVkIGRpcmVjdGl2ZXMuPC9wPgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ibW9kdWxlcyIgaWQ9Im1vZHVsZXMiPk1vZHVsZXM8L2E+PC9oMj4KICAgIAoKICAgIDx0YWJsZSBjbGFzcz0icmVsYXRlZCI+PHRyPjx0aD5SZWxhdGVkIE1vZHVsZXM8L3RoPjx0aD5SZWxhdGVkIERpcmVjdGl2ZXM8L3RoPjwvdHI+PHRyPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zby5odG1sIj5tb2Rfc288L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNpZm1vZHVsZSI+Jmx0O0lmTW9kdWxlJmd0OzwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NvLmh0bWwjbG9hZG1vZHVsZSI+TG9hZE1vZHVsZTwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PC90cj48L3RhYmxlPgoKICAgIDxwPmh0dHBkIGlzIGEgbW9kdWxhciBzZXJ2ZXIuIFRoaXMgaW1wbGllcyB0aGF0IG9ubHkgdGhlIG1vc3QKICAgIGJhc2ljIGZ1bmN0aW9uYWxpdHkgaXMgaW5jbHVkZWQgaW4gdGhlIGNvcmUgc2VydmVyLiBFeHRlbmRlZAogICAgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIDxhIGhyZWY9Im1vZC8iPm1vZHVsZXM8L2E+IHdoaWNoIGNhbiBiZSBsb2FkZWQKICAgIGludG8gaHR0cGQuIEJ5IGRlZmF1bHQsIGEgPGEgaHJlZj0ibW9kL21vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5iYXNlPC9hPiBzZXQgb2YgbW9kdWxlcyBpcwogICAgaW5jbHVkZWQgaW4gdGhlIHNlcnZlciBhdCBjb21waWxlLXRpbWUuIElmIHRoZSBzZXJ2ZXIgaXMKICAgIGNvbXBpbGVkIHRvIHVzZSA8YSBocmVmPSJkc28uaHRtbCI+ZHluYW1pY2FsbHkgbG9hZGVkPC9hPgogICAgbW9kdWxlcywgdGhlbiBtb2R1bGVzIGNhbiBiZSBjb21waWxlZCBzZXBhcmF0ZWx5IGFuZCBhZGRlZCBhdAogICAgYW55IHRpbWUgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zby5odG1sI2xvYWRtb2R1bGUiPkxvYWRNb2R1bGU8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlLgogICAgT3RoZXJ3aXNlLCBodHRwZCBtdXN0IGJlIHJlY29tcGlsZWQgdG8gYWRkIG9yIHJlbW92ZSBtb2R1bGVzLgogICAgQ29uZmlndXJhdGlvbiBkaXJlY3RpdmVzIG1heSBiZSBpbmNsdWRlZCBjb25kaXRpb25hbCBvbiBhCiAgICBwcmVzZW5jZSBvZiBhIHBhcnRpY3VsYXIgbW9kdWxlIGJ5IGVuY2xvc2luZyB0aGVtIGluIGFuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNpZm1vZHVsZSI+Jmx0O0lmTW9kdWxlJmd0OzwvYT48L2NvZGU+IGJsb2NrLiBIb3dldmVyLAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmTW9kdWxlJmd0OzwvY29kZT4gYmxvY2tzIGFyZSBub3QKICAgIHJlcXVpcmVkLCBhbmQgaW4gc29tZSBjYXNlcyBtYXkgbWFzayB0aGUgZmFjdCB0aGF0IHlvdSdyZSBtaXNzaW5nIGFuCiAgICBpbXBvcnRhbnQgbW9kdWxlLjwvcD4KCiAgICA8cD5UbyBzZWUgd2hpY2ggbW9kdWxlcyBhcmUgY3VycmVudGx5IGNvbXBpbGVkIGludG8gdGhlIHNlcnZlciwKICAgIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT4tbDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbi4gWW91IGNhbiBhbHNvCiAgICBzZWUgd2hhdCBtb2R1bGVzIGFyZSBsb2FkZWQgZHluYW1pY2FsbHkgdXNpbmcgdGhlIDxjb2RlPi1NPC9jb2RlPgogICAgY29tbWFuZCBsaW5lIG9wdGlvbi48L3A+CiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzY29wZSIgaWQ9InNjb3BlIj5TY29wZSBvZiBEaXJlY3RpdmVzPC9hPjwvaDI+CiAgICAKCiAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQgLz48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeW1hdGNoIj4mbHQ7RGlyZWN0b3J5TWF0Y2gmZ3Q7PC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNmaWxlc21hdGNoIj4mbHQ7RmlsZXNNYXRjaCZndDs8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2xvY2F0aW9ubWF0Y2giPiZsdDtMb2NhdGlvbk1hdGNoJmd0OzwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI3ZpcnR1YWxob3N0Ij4mbHQ7VmlydHVhbEhvc3QmZ3Q7PC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+CgogICAgPHA+RGlyZWN0aXZlcyBwbGFjZWQgaW4gdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlcyBhcHBseSB0bwogICAgdGhlIGVudGlyZSBzZXJ2ZXIuIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBmb3IKICAgIG9ubHkgYSBwYXJ0IG9mIHRoZSBzZXJ2ZXIsIHlvdSBjYW4gc2NvcGUgeW91ciBkaXJlY3RpdmVzIGJ5CiAgICBwbGFjaW5nIHRoZW0gaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeW1hdGNoIj4mbHQ7RGlyZWN0b3J5TWF0Y2gmZ3Q7PC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNmaWxlcyI+Jmx0O0ZpbGVzJmd0OzwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZmlsZXNtYXRjaCI+Jmx0O0ZpbGVzTWF0Y2gmZ3Q7PC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2NvZGU+LCBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2xvY2F0aW9ubWF0Y2giPiZsdDtMb2NhdGlvbk1hdGNoJmd0OzwvYT48L2NvZGU+CiAgICBzZWN0aW9ucy4gVGhlc2Ugc2VjdGlvbnMgbGltaXQgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZQogICAgZGlyZWN0aXZlcyB3aGljaCB0aGV5IGVuY2xvc2UgdG8gcGFydGljdWxhciBmaWxlc3lzdGVtCiAgICBsb2NhdGlvbnMgb3IgVVJMcy4gVGhleSBjYW4gYWxzbyBiZSBuZXN0ZWQsIGFsbG93aW5nIGZvciB2ZXJ5CiAgICBmaW5lIGdyYWluZWQgY29uZmlndXJhdGlvbi48L3A+CgogICAgPHA+aHR0cGQgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHNlcnZlIG1hbnkgZGlmZmVyZW50IHdlYnNpdGVzCiAgICBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBjYWxsZWQgPGEgaHJlZj0idmhvc3RzLyI+VmlydHVhbAogICAgSG9zdGluZzwvYT4uIERpcmVjdGl2ZXMgY2FuIGFsc28gYmUgc2NvcGVkIGJ5IHBsYWNpbmcgdGhlbQogICAgaW5zaWRlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCN2aXJ0dWFsaG9zdCI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvYT48L2NvZGU+CiAgICBzZWN0aW9ucywgc28gdGhhdCB0aGV5IHdpbGwgb25seSBhcHBseSB0byByZXF1ZXN0cyBmb3IgYQogICAgcGFydGljdWxhciB3ZWJzaXRlLjwvcD4KCiAgICA8cD5BbHRob3VnaCBtb3N0IGRpcmVjdGl2ZXMgY2FuIGJlIHBsYWNlZCBpbiBhbnkgb2YgdGhlc2UKICAgIHNlY3Rpb25zLCBzb21lIGRpcmVjdGl2ZXMgZG8gbm90IG1ha2Ugc2Vuc2UgaW4gc29tZSBjb250ZXh0cy4KICAgIEZvciBleGFtcGxlLCBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIHByb2Nlc3MgY3JlYXRpb24gY2FuIG9ubHkKICAgIGJlIHBsYWNlZCBpbiB0aGUgbWFpbiBzZXJ2ZXIgY29udGV4dC4gVG8gZmluZCB3aGljaCBkaXJlY3RpdmVzCiAgICBjYW4gYmUgcGxhY2VkIGluIHdoaWNoIHNlY3Rpb25zLCBjaGVjayB0aGUgPGEgaHJlZj0ibW9kL2RpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDwvYT4gb2YgdGhlCiAgICBkaXJlY3RpdmUuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCB3ZSBwcm92aWRlIGRldGFpbHMgb24gPGEgaHJlZj0ic2VjdGlvbnMuaHRtbCI+SG93IERpcmVjdG9yeSwgTG9jYXRpb24gYW5kIEZpbGVzIHNlY3Rpb25zCiAgICB3b3JrPC9hPi48L3A+CiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJodGFjY2VzcyIgaWQ9Imh0YWNjZXNzIj4uaHRhY2Nlc3MgRmlsZXM8L2E+PC9oMj4KICAgIAoKICAgIDx0YWJsZSBjbGFzcz0icmVsYXRlZCI+PHRyPjx0aD5SZWxhdGVkIE1vZHVsZXM8L3RoPjx0aD5SZWxhdGVkIERpcmVjdGl2ZXM8L3RoPjwvdHI+PHRyPjx0ZCAvPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNhY2Nlc3NmaWxlbmFtZSI+QWNjZXNzRmlsZU5hbWU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNhbGxvd292ZXJyaWRlIj5BbGxvd092ZXJyaWRlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+CgogICAgPHA+aHR0cGQgYWxsb3dzIGZvciBkZWNlbnRyYWxpemVkIG1hbmFnZW1lbnQgb2YgY29uZmlndXJhdGlvbgogICAgdmlhIHNwZWNpYWwgZmlsZXMgcGxhY2VkIGluc2lkZSB0aGUgd2ViIHRyZWUuIFRoZSBzcGVjaWFsIGZpbGVzCiAgICBhcmUgdXN1YWxseSBjYWxsZWQgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiwgYnV0IGFueSBuYW1lIGNhbiBiZQogICAgc3BlY2lmaWVkIGluIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjYWNjZXNzZmlsZW5hbWUiPkFjY2Vzc0ZpbGVOYW1lPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZS4gRGlyZWN0aXZlcyBwbGFjZWQgaW4gPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcwogICAgYXBwbHkgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgcGxhY2UgdGhlIGZpbGUsIGFuZCBhbGwKICAgIHN1Yi1kaXJlY3Rvcmllcy4gVGhlIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMgZm9sbG93IHRoZQogICAgc2FtZSBzeW50YXggYXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlcy4gU2luY2UKICAgIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMgYXJlIHJlYWQgb24gZXZlcnkgcmVxdWVzdCwgY2hhbmdlcwogICAgbWFkZSBpbiB0aGVzZSBmaWxlcyB0YWtlIGltbWVkaWF0ZSBlZmZlY3QuPC9wPgoKICAgIDxwPlRvIGZpbmQgd2hpY2ggZGlyZWN0aXZlcyBjYW4gYmUgcGxhY2VkIGluCiAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzLCBjaGVjayB0aGUgPGEgaHJlZj0ibW9kL2RpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDwvYT4gb2YgdGhlCiAgICBkaXJlY3RpdmUuIFRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRvciBmdXJ0aGVyIGNvbnRyb2xzIHdoYXQKICAgIGRpcmVjdGl2ZXMgbWF5IGJlIHBsYWNlZCBpbiA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzIGJ5CiAgICBjb25maWd1cmluZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2FsbG93b3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlIGluIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMuPC9wPgoKICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMsIHNlZQogICAgdGhlIDxhIGhyZWY9Imhvd3RvL2h0YWNjZXNzLmh0bWwiPi5odGFjY2VzcyB0dXRvcmlhbDwvYT4uPC9wPgogIDwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZGUvY29uZmlndXJpbmcuaHRtbCIgaHJlZmxhbmc9ImRlIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkRldXRzY2giPiZuYnNwO2RlJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZW4vY29uZmlndXJpbmcuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvY29uZmlndXJpbmcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2phL2NvbmZpZ3VyaW5nLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9rby9jb25maWd1cmluZy5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2NvbmZpZ3VyaW5nLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L2NvbmZpZ3VyaW5nLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsgCiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=