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+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NvbXBpbGluZyI+Q29tcGlsaW5nIHRoZSBleGFtcGxlX2hvb2tzIG1vZHVsZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN1c2luZyI+VXNpbmcgdGhlIDxjb2RlPm1vZF9leGFtcGxlX2hvb2tzPC9jb2RlPiBNb2R1bGU8L2E+PC9saT4KPC91bD48aDMgY2xhc3M9ImRpcmVjdGl2ZXMiPkRpcmVjdGl2ZXM8L2gzPgo8dWwgaWQ9InRvYyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2V4YW1wbGUiPkV4YW1wbGU8L2E+PC9saT4KPC91bD4KPGgzPkJ1Z2ZpeCBjaGVja2xpc3Q8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9odHRwZC9DSEFOR0VTXzIuNCI+aHR0cGQgY2hhbmdlbG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9bW9kX2V4YW1wbGVfaG9va3MiPktub3duIGlzc3VlczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUFwYWNoZSUyMGh0dHBkLTImYW1wO2NvbXBvbmVudD1tb2RfZXhhbXBsZV9ob29rcyI+UmVwb3J0IGEgYnVnPC9hPjwvbGk+PC91bD48aDM+U2VlIGFsc288L2gzPgo8dWwgY2xhc3M9InNlZWFsc28iPgo8bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29tcGlsaW5nIiBpZD0iY29tcGlsaW5nIj5Db21waWxpbmcgdGhlIGV4YW1wbGVfaG9va3MgbW9kdWxlPC9hPjwvaDI+CgogICAgPHA+VG8gaW5jbHVkZSB0aGUgZXhhbXBsZV9ob29rcyBtb2R1bGUgaW4geW91ciBzZXJ2ZXIsIGZvbGxvdyB0aGUKICAgIHN0ZXBzIGJlbG93OjwvcD4KCiAgICA8b2w+CiAgICAgIDxsaT4KICAgICAgICBSdW4gPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIj5jb25maWd1cmU8L2E+PC9jb2RlPiB3aXRoIDxjb2RlPi0tZW5hYmxlLWV4YW1wbGUtaG9va3M8L2NvZGU+CiAgICAgICAgb3B0aW9uLjwvbGk+CgogICAgICA8bGk+TWFrZSB0aGUgc2VydmVyIChydW4gIjxjb2RlPm1ha2U8L2NvZGU+IikuPC9saT4KICAgIDwvb2w+CgogICAgPHA+VG8gYWRkIGFub3RoZXIgbW9kdWxlIG9mIHlvdXIgb3duOjwvcD4KCiAgICA8b2wgY2xhc3M9InVwLUEiPgogICAgICA8bGk+PGNvZGU+Y3AgbW9kdWxlcy9leGFtcGxlcy9tb2RfZXhhbXBsZV9ob29rcy5jCiAgICAgIG1vZHVsZXMvbmV3X21vZHVsZS88ZW0+bW9kX215ZXhhbXBsZS5jPC9lbT48L2NvZGU+PC9saT4KCiAgICAgIDxsaT5Nb2RpZnkgdGhlIGZpbGUuPC9saT4KCiAgICAgIDxsaT5DcmVhdGUgPGNvZGU+bW9kdWxlcy9uZXdfbW9kdWxlL2NvbmZpZy5tNDwvY29kZT4uCiAgICAgICAgPG9sPgogICAgICAgICAgPGxpPkFkZCA8Y29kZT5BUEFDSEVfTU9EUEFUSF9JTklUKG5ld19tb2R1bGUpPC9jb2RlPi48L2xpPgogICAgICAgICAgPGxpPkNvcHkgQVBBQ0hFX01PRFVMRSBsaW5lIHdpdGggImV4YW1wbGVfaG9va3MiIGZyb20KICAgICAgICAgICAgPGNvZGU+bW9kdWxlcy9leGFtcGxlcy9jb25maWcubTQ8L2NvZGU+LjwvbGk+CiAgICAgICAgICA8bGk+UmVwbGFjZSB0aGUgZmlyc3QgYXJndW1lbnQgImV4YW1wbGVfaG9va3MiIHdpdGggPGVtPm15ZXhhbXBsZTwvZW0+LjwvbGk+CiAgICAgICAgICA8bGk+UmVwbGFjZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHdpdGggYnJpZWYgZGVzY3JpcHRpb24gb2YgeW91ciBtb2R1bGUuCiAgICAgICAgICAgIEl0IHdpbGwgYmUgdXNlZCBpbiA8Y29kZT5jb25maWd1cmUgLS1oZWxwPC9jb2RlPi48L2xpPgogICAgICAgICAgPGxpPklmIHlvdXIgbW9kdWxlIG5lZWRzIGFkZGl0aW9uYWwgQyBjb21waWxlciBmbGFncywgbGlua2VyIGZsYWdzIG9yCiAgICAgICAgICAgIGxpYnJhcmllcywgYWRkIHRoZW0gdG8gQ0ZMQUdTLCBMREZMQUdTIGFuZCBMSUJTIGFjY29yZGluZ2x5LgogICAgICAgICAgICBTZWUgb3RoZXIgPGNvZGU+Y29uZmlnLm00PC9jb2RlPiBmaWxlcyBpbiBtb2R1bGVzIGRpcmVjdG9yeSBmb3IKICAgICAgICAgICAgZXhhbXBsZXMuPC9saT4KICAgICAgICAgIDxsaT5BZGQgPGNvZGU+QVBBQ0hFX01PRFBBVEhfRklOSVNIPC9jb2RlPi48L2xpPgogICAgICAgIDwvb2w+CiAgICAgIDwvbGk+CgogICAgICA8bGk+Q3JlYXRlIDxjb2RlPm1vZHVsZS9uZXdfbW9kdWxlL01ha2VmaWxlLmluPC9jb2RlPi4KICAgICAgSWYgeW91ciBtb2R1bGUgZG9lc24ndCBuZWVkIHNwZWNpYWwgYnVpbGQgaW5zdHJ1Y3Rpb25zLAogICAgICBhbGwgeW91IG5lZWQgdG8gaGF2ZSBpbiB0aGF0IGZpbGUgaXMKICAgICAgPGNvZGU+aW5jbHVkZSAkKHRvcF9zcmNkaXIpL2J1aWxkL3NwZWNpYWwubWs8L2NvZGU+LjwvbGk+CgogICAgICA8bGk+UnVuIC4vYnVpbGRjb25mIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuPC9saT4KCiAgICAgIDxsaT5CdWlsZCB0aGUgc2VydmVyIHdpdGggLS1lbmFibGUtbXlleGFtcGxlPC9saT4KCiAgICA8L29sPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ1c2luZyIgaWQ9InVzaW5nIj5Vc2luZyB0aGUgPGNvZGU+bW9kX2V4YW1wbGVfaG9va3M8L2NvZGU+IE1vZHVsZTwvYT48L2gyPgoKICAgIDxwPlRvIGFjdGl2YXRlIHRoZSBleGFtcGxlX2hvb2tzIG1vZHVsZSwgaW5jbHVkZSBhIGJsb2NrIHNpbWlsYXIgdG8KICAgIHRoZSBmb2xsb3dpbmcgaW4geW91ciA8Y29kZT5odHRwZC5jb25mPC9jb2RlPiBmaWxlOjwvcD4KPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMb2NhdGlvbiAiL2V4YW1wbGUtaG9va3MtaW5mbyImZ3Q7CiAgIFNldEhhbmRsZXIgZXhhbXBsZS1ob29rcy1oYW5kbGVyCiZsdDsvTG9jYXRpb24mZ3Q7PC9wcmU+CgoKICAgIDxwPkFzIGFuIGFsdGVybmF0aXZlLCB5b3UgY2FuIHB1dCB0aGUgZm9sbG93aW5nIGludG8gYSA8YSBocmVmPSJjb3JlLmh0bWwjYWNjZXNzZmlsZW5hbWUiPjxjb2RlPi5odGFjY2VzczwvY29kZT48L2E+IGZpbGUKICAgIGFuZCB0aGVuIHJlcXVlc3QgdGhlIGZpbGUgInRlc3QuZXhhbXBsZSIgZnJvbSB0aGF0IGxvY2F0aW9uOjwvcD4KPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkFkZEhhbmRsZXIgZXhhbXBsZS1ob29rcy1oYW5kbGVyICIuZXhhbXBsZSI8L3ByZT4KCgogICAgPHA+QWZ0ZXIgcmVsb2FkaW5nL3Jlc3RhcnRpbmcgeW91ciBzZXJ2ZXIsIHlvdSBzaG91bGQgYmUgYWJsZQogICAgdG8gYnJvd3NlIHRvIHRoaXMgbG9jYXRpb24gYW5kIHNlZSB0aGUgYnJpZWYgZGlzcGxheSBtZW50aW9uZWQKICAgIGVhcmxpZXIuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRXhhbXBsZSIgaWQ9IkV4YW1wbGUiPkV4YW1wbGU8L2E+IDxhIG5hbWU9ImV4YW1wbGUiIGlkPSJleGFtcGxlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZW1vbnN0cmF0aW9uIGRpcmVjdGl2ZSB0byBpbGx1c3RyYXRlIHRoZSBBcGFjaGUgbW9kdWxlCkFQSTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5FeGFtcGxlPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9leGFtcGxlX2hvb2tzPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkV4YW1wbGU8L2NvZGU+IGRpcmVjdGl2ZSBqdXN0IHNldHMgYSBkZW1vbnN0cmF0aW9uCiAgICBmbGFnIHdoaWNoIHRoZSBleGFtcGxlIG1vZHVsZSdzIGNvbnRlbnQgaGFuZGxlciBkaXNwbGF5cy4gSXQKICAgIHRha2VzIG5vIGFyZ3VtZW50cy4gSWYgeW91IGJyb3dzZSB0byBhbiBVUkwgdG8gd2hpY2ggdGhlCiAgICBleGFtcGxlLWhvb2tzIGNvbnRlbnQtaGFuZGxlciBhcHBsaWVzLCB5b3Ugd2lsbCBnZXQgYSBkaXNwbGF5IG9mIHRoZQogICAgcm91dGluZXMgd2l0aGluIHRoZSBtb2R1bGUgYW5kIGhvdyBhbmQgaW4gd2hhdCBvcmRlciB0aGV5IHdlcmUKICAgIGNhbGxlZCB0byBzZXJ2aWNlIHRoZSBkb2N1bWVudCByZXF1ZXN0LiBUaGUgZWZmZWN0IG9mIHRoaXMKICAgIGRpcmVjdGl2ZSBvbmUgY2FuIG9ic2VydmUgdW5kZXIgdGhlIHBvaW50ICI8Y29kZT5FeGFtcGxlCiAgICBkaXJlY3RpdmUgZGVjbGFyZWQgaGVyZTogWUVTL05PPC9jb2RlPiIuPC9wPgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfZXhhbXBsZV9ob29rcy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbW9kL21vZF9leGFtcGxlX2hvb2tzLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vbW9kL21vZF9leGFtcGxlX2hvb2tzLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX2V4YW1wbGVfaG9va3MuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=