PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfZXhhbXBsZV9ob29rcyAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfZXhhbXBsZV9ob29rczwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9leGFtcGxlX2hvb2tzLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX2V4YW1wbGVfaG9va3MuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9tb2QvbW9kX2V4YW1wbGVfaG9va3MuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPklsbHVzdHJhdGVzIHRoZSBBcGFjaGUgbW9kdWxlIEFQSTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHBlcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+ZXhhbXBsZV9ob29rc19tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX2V4YW1wbGVfaG9va3MuYzwvdGQ+PC90cj48L3RhYmxlPgo8aDM+U3VtbWFyeTwvaDM+CgogICAgPHA+VGhlIGZpbGVzIGluIHRoZSA8Y29kZT5tb2R1bGVzL2V4YW1wbGVzPC9jb2RlPiBkaXJlY3RvcnkKICAgIHVuZGVyIHRoZSBBcGFjaGUgZGlzdHJpYnV0aW9uIGRpcmVjdG9yeSB0cmVlIGFyZSBwcm92aWRlZCBhcyBhbgogICAgZXhhbXBsZSB0byB0aG9zZSB0aGF0IHdpc2ggdG8gd3JpdGUgbW9kdWxlcyB0aGF0IHVzZSB0aGUgQXBhY2hlCiAgICBBUEkuPC9wPgoKICAgIDxwPlRoZSBtYWluIGZpbGUgaXMgPGNvZGU+bW9kX2V4YW1wbGVfaG9va3MuYzwvY29kZT4sIHdoaWNoCiAgICBpbGx1c3RyYXRlcyBhbGwgdGhlIGRpZmZlcmVudCBjYWxsYmFjayBtZWNoYW5pc21zIGFuZCBjYWxsCiAgICBzeW50YXhlcy4gQnkgbm8gbWVhbnMgZG9lcyBhbiBhZGQtb24gbW9kdWxlIG5lZWQgdG8gaW5jbHVkZQogICAgcm91dGluZXMgZm9yIGFsbCBvZiB0aGUgY2FsbGJhY2tzIC0gcXVpdGUgdGhlIGNvbnRyYXJ5ITwvcD4KCiAgICA8cD5UaGUgZXhhbXBsZSBtb2R1bGUgaXMgYW4gYWN0dWFsIHdvcmtpbmcgbW9kdWxlLiBJZiB5b3UgbGluawogICAgaXQgaW50byB5b3VyIHNlcnZlciwgZW5hYmxlIHRoZSAiZXhhbXBsZS1ob29rcy1oYW5kbGVyIiBoYW5kbGVyIGZvciBhCiAgICBsb2NhdGlvbiwgYW5kIHRoZW4gYnJvd3NlIHRvIHRoYXQgbG9jYXRpb24sIHlvdSB3aWxsIHNlZSBhCiAgICBkaXNwbGF5IG9mIHNvbWUgb2YgdGhlIHRyYWNpbmcgdGhlIGV4YW1wbGUgbW9kdWxlIGRpZCBhcyB0aGUKICAgIHZhcmlvdXMgY2FsbGJhY2tzIHdlcmUgbWFkZS48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9jb250cmlidXRpbmcuaHRtbCIgY2xhc3M9ImJhZGdlIj48aW1nIHNyYz0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9pbWFnZXMvU3VwcG9ydEFwYWNoZS1zbWFsbC5wbmciIGFsdD0iU3VwcG9ydCBBcGFjaGUhIiAvPjwvYT48aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb21waWxpbmciPkNvbXBpbGluZyB0aGUgZXhhbXBsZV9ob29rcyBtb2R1bGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdXNpbmciPlVzaW5nIHRoZSA8Y29kZT5tb2RfZXhhbXBsZV9ob29rczwvY29kZT4gTW9kdWxlPC9hPjwvbGk+CjwvdWw+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNleGFtcGxlIj5FeGFtcGxlPC9hPjwvbGk+CjwvdWw+CjxoMz5CdWdmaXggY2hlY2tsaXN0PC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2Rpc3QvaHR0cGQvQ0hBTkdFU18yLjQiPmh0dHBkIGNoYW5nZWxvZzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvYnVnbGlzdC5jZ2k/YnVnX3N0YXR1cz1fX29wZW5fXyZhbXA7bGlzdF9pZD0xNDQ1MzImYW1wO3Byb2R1Y3Q9QXBhY2hlJTIwaHR0cGQtMiZhbXA7cXVlcnlfZm9ybWF0PXNwZWNpZmljJmFtcDtvcmRlcj1jaGFuZ2VkZGF0ZSUyMERFU0MlMkNwcmlvcml0eSUyQ2J1Z19zZXZlcml0eSZhbXA7Y29tcG9uZW50PW1vZF9leGFtcGxlX2hvb2tzIj5Lbm93biBpc3N1ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtjb21wb25lbnQ9bW9kX2V4YW1wbGVfaG9va3MiPlJlcG9ydCBhIGJ1ZzwvYT48L2xpPjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbXBpbGluZyIgaWQ9ImNvbXBpbGluZyI+Q29tcGlsaW5nIHRoZSBleGFtcGxlX2hvb2tzIG1vZHVsZTwvYT48L2gyPgoKICAgIDxwPlRvIGluY2x1ZGUgdGhlIGV4YW1wbGVfaG9va3MgbW9kdWxlIGluIHlvdXIgc2VydmVyLCBmb2xsb3cgdGhlCiAgICBzdGVwcyBiZWxvdzo8L3A+CgogICAgPG9sPgogICAgICA8bGk+CiAgICAgICAgUnVuIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9jb25maWd1cmUuaHRtbCI+Y29uZmlndXJlPC9hPjwvY29kZT4gd2l0aCA8Y29kZT4tLWVuYWJsZS1leGFtcGxlLWhvb2tzPC9jb2RlPgogICAgICAgIG9wdGlvbi48L2xpPgoKICAgICAgPGxpPk1ha2UgdGhlIHNlcnZlciAocnVuICI8Y29kZT5tYWtlPC9jb2RlPiIpLjwvbGk+CiAgICA8L29sPgoKICAgIDxwPlRvIGFkZCBhbm90aGVyIG1vZHVsZSBvZiB5b3VyIG93bjo8L3A+CgogICAgPG9sIGNsYXNzPSJ1cC1BIj4KICAgICAgPGxpPjxjb2RlPmNwIG1vZHVsZXMvZXhhbXBsZXMvbW9kX2V4YW1wbGVfaG9va3MuYwogICAgICBtb2R1bGVzL25ld19tb2R1bGUvPGVtPm1vZF9teWV4YW1wbGUuYzwvZW0+PC9jb2RlPjwvbGk+CgogICAgICA8bGk+TW9kaWZ5IHRoZSBmaWxlLjwvbGk+CgogICAgICA8bGk+Q3JlYXRlIDxjb2RlPm1vZHVsZXMvbmV3X21vZHVsZS9jb25maWcubTQ8L2NvZGU+LgogICAgICAgIDxvbD4KICAgICAgICAgIDxsaT5BZGQgPGNvZGU+QVBBQ0hFX01PRFBBVEhfSU5JVChuZXdfbW9kdWxlKTwvY29kZT4uPC9saT4KICAgICAgICAgIDxsaT5Db3B5IEFQQUNIRV9NT0RVTEUgbGluZSB3aXRoICJleGFtcGxlX2hvb2tzIiBmcm9tCiAgICAgICAgICAgIDxjb2RlPm1vZHVsZXMvZXhhbXBsZXMvY29uZmlnLm00PC9jb2RlPi48L2xpPgogICAgICAgICAgPGxpPlJlcGxhY2UgdGhlIGZpcnN0IGFyZ3VtZW50ICJleGFtcGxlX2hvb2tzIiB3aXRoIDxlbT5teWV4YW1wbGU8L2VtPi48L2xpPgogICAgICAgICAgPGxpPlJlcGxhY2UgdGhlIHNlY29uZCBhcmd1bWVudCB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHlvdXIgbW9kdWxlLgogICAgICAgICAgICBJdCB3aWxsIGJlIHVzZWQgaW4gPGNvZGU+Y29uZmlndXJlIC0taGVscDwvY29kZT4uPC9saT4KICAgICAgICAgIDxsaT5JZiB5b3VyIG1vZHVsZSBuZWVkcyBhZGRpdGlvbmFsIEMgY29tcGlsZXIgZmxhZ3MsIGxpbmtlciBmbGFncyBvcgogICAgICAgICAgICBsaWJyYXJpZXMsIGFkZCB0aGVtIHRvIENGTEFHUywgTERGTEFHUyBhbmQgTElCUyBhY2NvcmRpbmdseS4KICAgICAgICAgICAgU2VlIG90aGVyIDxjb2RlPmNvbmZpZy5tNDwvY29kZT4gZmlsZXMgaW4gbW9kdWxlcyBkaXJlY3RvcnkgZm9yCiAgICAgICAgICAgIGV4YW1wbGVzLjwvbGk+CiAgICAgICAgICA8bGk+QWRkIDxjb2RlPkFQQUNIRV9NT0RQQVRIX0ZJTklTSDwvY29kZT4uPC9saT4KICAgICAgICA8L29sPgogICAgICA8L2xpPgoKICAgICAgPGxpPkNyZWF0ZSA8Y29kZT5tb2R1bGUvbmV3X21vZHVsZS9NYWtlZmlsZS5pbjwvY29kZT4uCiAgICAgIElmIHlvdXIgbW9kdWxlIGRvZXNuJ3QgbmVlZCBzcGVjaWFsIGJ1aWxkIGluc3RydWN0aW9ucywKICAgICAgYWxsIHlvdSBuZWVkIHRvIGhhdmUgaW4gdGhhdCBmaWxlIGlzCiAgICAgIDxjb2RlPmluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9idWlsZC9zcGVjaWFsLm1rPC9jb2RlPi48L2xpPgoKICAgICAgPGxpPlJ1biAuL2J1aWxkY29uZiBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LjwvbGk+CgogICAgICA8bGk+QnVpbGQgdGhlIHNlcnZlciB3aXRoIC0tZW5hYmxlLW15ZXhhbXBsZTwvbGk+CgogICAgPC9vbD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0idXNpbmciIGlkPSJ1c2luZyI+VXNpbmcgdGhlIDxjb2RlPm1vZF9leGFtcGxlX2hvb2tzPC9jb2RlPiBNb2R1bGU8L2E+PC9oMj4KCiAgICA8cD5UbyBhY3RpdmF0ZSB0aGUgZXhhbXBsZV9ob29rcyBtb2R1bGUsIGluY2x1ZGUgYSBibG9jayBzaW1pbGFyIHRvCiAgICB0aGUgZm9sbG93aW5nIGluIHlvdXIgPGNvZGU+aHR0cGQuY29uZjwvY29kZT4gZmlsZTo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7TG9jYXRpb24gIi9leGFtcGxlLWhvb2tzLWluZm8iJmd0OwogICBTZXRIYW5kbGVyIGV4YW1wbGUtaG9va3MtaGFuZGxlcgombHQ7L0xvY2F0aW9uJmd0OzwvcHJlPgoKCiAgICA8cD5BcyBhbiBhbHRlcm5hdGl2ZSwgeW91IGNhbiBwdXQgdGhlIGZvbGxvd2luZyBpbnRvIGEgPGEgaHJlZj0iY29yZS5odG1sI2FjY2Vzc2ZpbGVuYW1lIj48Y29kZT4uaHRhY2Nlc3M8L2NvZGU+PC9hPiBmaWxlCiAgICBhbmQgdGhlbiByZXF1ZXN0IHRoZSBmaWxlICJ0ZXN0LmV4YW1wbGUiIGZyb20gdGhhdCBsb2NhdGlvbjo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5BZGRIYW5kbGVyIGV4YW1wbGUtaG9va3MtaGFuZGxlciAiLmV4YW1wbGUiPC9wcmU+CgoKICAgIDxwPkFmdGVyIHJlbG9hZGluZy9yZXN0YXJ0aW5nIHlvdXIgc2VydmVyLCB5b3Ugc2hvdWxkIGJlIGFibGUKICAgIHRvIGJyb3dzZSB0byB0aGlzIGxvY2F0aW9uIGFuZCBzZWUgdGhlIGJyaWVmIGRpc3BsYXkgbWVudGlvbmVkCiAgICBlYXJsaWVyLjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkV4YW1wbGUiIGlkPSJFeGFtcGxlIj5FeGFtcGxlPC9hPiA8YSBuYW1lPSJleGFtcGxlIiBpZD0iZXhhbXBsZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGVtb25zdHJhdGlvbiBkaXJlY3RpdmUgdG8gaWxsdXN0cmF0ZSB0aGUgQXBhY2hlIG1vZHVsZQpBUEk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+RXhhbXBsZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4cGVyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfZXhhbXBsZV9ob29rczwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5FeGFtcGxlPC9jb2RlPiBkaXJlY3RpdmUganVzdCBzZXRzIGEgZGVtb25zdHJhdGlvbgogICAgZmxhZyB3aGljaCB0aGUgZXhhbXBsZSBtb2R1bGUncyBjb250ZW50IGhhbmRsZXIgZGlzcGxheXMuIEl0CiAgICB0YWtlcyBubyBhcmd1bWVudHMuIElmIHlvdSBicm93c2UgdG8gYW4gVVJMIHRvIHdoaWNoIHRoZQogICAgZXhhbXBsZS1ob29rcyBjb250ZW50LWhhbmRsZXIgYXBwbGllcywgeW91IHdpbGwgZ2V0IGEgZGlzcGxheSBvZiB0aGUKICAgIHJvdXRpbmVzIHdpdGhpbiB0aGUgbW9kdWxlIGFuZCBob3cgYW5kIGluIHdoYXQgb3JkZXIgdGhleSB3ZXJlCiAgICBjYWxsZWQgdG8gc2VydmljZSB0aGUgZG9jdW1lbnQgcmVxdWVzdC4gVGhlIGVmZmVjdCBvZiB0aGlzCiAgICBkaXJlY3RpdmUgb25lIGNhbiBvYnNlcnZlIHVuZGVyIHRoZSBwb2ludCAiPGNvZGU+RXhhbXBsZQogICAgZGlyZWN0aXZlIGRlY2xhcmVkIGhlcmU6IFlFUy9OTzwvY29kZT4iLjwvcD4KCjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX2V4YW1wbGVfaG9va3MuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL21vZC9tb2RfZXhhbXBsZV9ob29rcy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL21vZC9tb2RfZXhhbXBsZV9ob29rcy5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9leGFtcGxlX2hvb2tzLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsgCiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxOCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+