PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfY2hhcnNldF9saXRlIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNDwvYT4gJmd0OyA8YSBocmVmPSIuLyI+TW9kdWxlczwvYT48L2Rpdj4KPGRpdiBpZD0icGFnZS1jb250ZW50Ij4KPGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgTW9kdWxlIG1vZF9jaGFyc2V0X2xpdGU8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfY2hhcnNldF9saXRlLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL21vZC9tb2RfY2hhcnNldF9saXRlLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPjwvcD4KPC9kaXY+Cjx0YWJsZSBjbGFzcz0ibW9kdWxlIj48dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TcGVjaWZ5IGNoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gb3IgcmVjb2Rpbmc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjTW9kdWxlSWRlbnRpZmllciI+TW9kdWxloElkZW50aWZpZXI6PC9hPjwvdGg+PHRkPmNoYXJzZXRfbGl0ZV9tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX2NoYXJzZXRfbGl0ZS5jPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCiAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIj5tb2RfY2hhcnNldF9saXRlPC9hPjwvY29kZT4gYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gY2hhbmdlCiAgICB0aGUgY2hhcmFjdGVyIHNldCBvZiByZXNwb25zZXMgYmVmb3JlIHNlbmRpbmcgdGhlbSB0byB0aGUgY2xpZW50LgogICAgSW4gYW4gRUJDRElDIGVudmlyb25tZW50LCBBcGFjaGUgYWx3YXlzIHRyYW5zbGF0ZXMgSFRUUCBwcm90b2NvbAogICAgY29udGVudCAoZS5nLiByZXNwb25zZSBoZWFkZXJzKSBmcm9tIHRoZSBjb2RlIHBhZ2Ugb2YgdGhlIEFwYWNoZQogICAgcHJvY2VzcyBsb2NhbGUgdG8gSVNPLTg4NTktMSwgYnV0IG5vdCB0aGUgYm9keSBvZiByZXNwb25zZXMuICBJbgogICAgYW55IGVudmlyb25tZW50LCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIj5tb2RfY2hhcnNldF9saXRlPC9hPjwvY29kZT4gY2FuIGJlIHVzZWQgdG8KICAgIHNwZWNpZnkgdGhhdCByZXNwb25zZSBib2RpZXMgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuICBGb3IgZXhhbXBsZSwKICAgIGlmIGZpbGVzIGFyZSBzdG9yZWQgaW4gRUJDRElDLCB0aGVuCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIj5tb2RfY2hhcnNldF9saXRlPC9hPjwvY29kZT4gY2FuIHRyYW5zbGF0ZSB0aGVtIHRvCiAgICBJU08tODg1OS0xIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gdGhlIGNsaWVudC48L3A+CgogICAgPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzbWFsbCBzdWJzZXQgb2YgY29uZmlndXJhdGlvbgogICAgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZCBieSBSdXNzaWFuIEFwYWNoZSBhbmQgaXRzIGFzc29jaWF0ZWQKICAgIDxjb2RlPm1vZF9jaGFyc2V0PC9jb2RlPi48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb2JsZW1zIj5Db21tb24gUHJvYmxlbXM8L2E+PC9saT4KPC91bD48aDMgY2xhc3M9ImRpcmVjdGl2ZXMiPkRpcmVjdGl2ZXM8L2gzPgo8dWwgaWQ9InRvYyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NoYXJzZXRkZWZhdWx0Ij5DaGFyc2V0RGVmYXVsdDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjaGFyc2V0b3B0aW9ucyI+Q2hhcnNldE9wdGlvbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY2hhcnNldHNvdXJjZWVuYyI+Q2hhcnNldFNvdXJjZUVuYzwvYT48L2xpPgo8L3VsPgo8aDM+QnVnZml4IGNoZWNrbGlzdDwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L2h0dHBkL0NIQU5HRVNfMi40Ij5odHRwZCBjaGFuZ2Vsb2c8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2J1Z2xpc3QuY2dpP2J1Z19zdGF0dXM9X19vcGVuX18mYW1wO2xpc3RfaWQ9MTQ0NTMyJmFtcDtwcm9kdWN0PUFwYWNoZSUyMGh0dHBkLTImYW1wO3F1ZXJ5X2Zvcm1hdD1zcGVjaWZpYyZhbXA7b3JkZXI9Y2hhbmdlZGRhdGUlMjBERVNDJTJDcHJpb3JpdHklMkNidWdfc2V2ZXJpdHkmYW1wO2NvbXBvbmVudD1tb2RfY2hhcnNldF9saXRlIj5Lbm93biBpc3N1ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtjb21wb25lbnQ9bW9kX2NoYXJzZXRfbGl0ZSI+UmVwb3J0IGEgYnVnPC9hPjwvbGk+PC91bD48aDM+U2VlIGFsc288L2gzPgo8dWwgY2xhc3M9InNlZWFsc28iPgo8bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icHJvYmxlbXMiIGlkPSJwcm9ibGVtcyI+Q29tbW9uIFByb2JsZW1zPC9hPjwvaDI+CgogICAgPGgzPkludmFsaWQgY2hhcmFjdGVyIHNldCBuYW1lczwvaDM+CgogICAgICA8cD5UaGUgY2hhcmFjdGVyIHNldCBuYW1lIHBhcmFtZXRlcnMgb2YgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2NoYXJzZXRzb3VyY2VlbmMiPkNoYXJzZXRTb3VyY2VFbmM8L2E+PC9jb2RlPiBhbmQKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2NoYXJzZXRkZWZhdWx0Ij5DaGFyc2V0RGVmYXVsdDwvYT48L2NvZGU+CiAgICAgIG11c3QgYmUgYWNjZXB0YWJsZSB0byB0aGUgdHJhbnNsYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkKICAgICAgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNhcHIiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkFQUjwvYT4gb24gdGhlIHN5c3RlbSB3aGVyZQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIj5tb2RfY2hhcnNldF9saXRlPC9hPjwvY29kZT4gaXMgZGVwbG95ZWQuICBUaGVzZSBjaGFyYWN0ZXIKICAgICAgc2V0IG5hbWVzIGFyZSBub3Qgc3RhbmRhcmRpemVkIGFuZCBhcmUgdXN1YWxseSBub3QgdGhlIHNhbWUgYXMKICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIHVzZWQgaW4gaHR0cCBoZWFkZXJzLiAgQ3VycmVudGx5LCBBUFIKICAgICAgY2FuIG9ubHkgdXNlIGljb252KDMpLCBzbyB5b3UgY2FuIGVhc2lseSB0ZXN0IHlvdXIgY2hhcmFjdGVyIHNldAogICAgICBuYW1lcyB1c2luZyB0aGUgaWNvbnYoMSkgcHJvZ3JhbSwgYXMgZm9sbG93czo8L3A+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICBpY29udiAtZiBjaGFyc2V0c291cmNlZW5jLXZhbHVlIC10IGNoYXJzZXRkZWZhdWx0LXZhbHVlCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICAKCiAgICA8aDM+TWlzbWF0Y2ggYmV0d2VlbiBjaGFyYWN0ZXIgc2V0IG9mIGNvbnRlbnQgYW5kIHRyYW5zbGF0aW9uCiAgICBydWxlczwvaDM+CgogICAgICA8cD5JZiB0aGUgdHJhbnNsYXRpb24gcnVsZXMgZG9uJ3QgbWFrZSBzZW5zZSBmb3IgdGhlIGNvbnRlbnQsCiAgICAgIHRyYW5zbGF0aW9uIGNhbiBmYWlsIGluIHZhcmlvdXMgd2F5cywgaW5jbHVkaW5nOjwvcD4KCiAgICAgIDx1bD4KICAgICAgPGxpPlRoZSB0cmFuc2xhdGlvbiBtZWNoYW5pc20gbWF5IHJldHVybiBhIGJhZCByZXR1cm4gY29kZSwKICAgICAgYW5kIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgYWJvcnRlZC48L2xpPgoKICAgICAgPGxpPlRoZSB0cmFuc2xhdGlvbiBtZWNoYW5pc20gbWF5IHNpbGVudGx5IHBsYWNlIHNwZWNpYWwKICAgICAgY2hhcmFjdGVycyAoZS5nLiwgcXVlc3Rpb24gbWFya3MpIGluIHRoZSBvdXRwdXQgYnVmZmVyIHdoZW4KICAgICAgaXQgY2Fubm90IHRyYW5zbGF0ZSB0aGUgaW5wdXQgYnVmZmVyLjwvbGk+CiAgICAgIDwvdWw+CiAgICAKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkNoYXJzZXREZWZhdWx0IiBpZD0iQ2hhcnNldERlZmF1bHQiPkNoYXJzZXREZWZhdWx0PC9hPiA8YSBuYW1lPSJjaGFyc2V0ZGVmYXVsdCIgaWQ9ImNoYXJzZXRkZWZhdWx0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5DaGFyc2V0IHRvIHRyYW5zbGF0ZSBpbnRvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkNoYXJzZXREZWZhdWx0IDx2YXI+Y2hhcnNldDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2NoYXJzZXRfbGl0ZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DaGFyc2V0RGVmYXVsdDwvY29kZT4gZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUKICAgIGNoYXJzZXQgdGhhdCBjb250ZW50IGluIHRoZSBhc3NvY2lhdGVkIGNvbnRhaW5lciBzaG91bGQgYmUKICAgIHRyYW5zbGF0ZWQgdG8uPC9wPgoKICAgIDxwPlRoZSB2YWx1ZSBvZiB0aGUgPHZhcj5jaGFyc2V0PC92YXI+IGFyZ3VtZW50IG11c3QgYmUgYWNjZXB0ZWQKICAgIGFzIGEgdmFsaWQgY2hhcmFjdGVyIHNldCBuYW1lIGJ5IHRoZSBjaGFyYWN0ZXIgc2V0IHN1cHBvcnQgaW4KICAgIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjYXByIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5BUFI8L2E+LiBHZW5lcmFsbHksIHRoaXMgbWVhbnMgdGhhdCBpdCBtdXN0IGJlCiAgICBzdXBwb3J0ZWQgYnkgaWNvbnYuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0RpcmVjdG9yeSAiL2V4cG9ydC9ob21lL3RyYXdpY2svYXBhY2hlaW5zdC9odGRvY3MvY29udmVydCImZ3Q7CiAgICBDaGFyc2V0U291cmNlRW5jICBVVEYtMTZCRQogICAgQ2hhcnNldERlZmF1bHQgICAgSVNPLTg4NTktMQombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KPC9kaXY+CgogICAgIDxkaXYgY2xhc3M9Im5vdGUiPgogICAgIFNwZWNpZnlpbmcgdGhlIHNhbWUgY2hhcnNldCBmb3IgYm90aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjY2hhcnNldHNvdXJjZWVuYyI+Q2hhcnNldFNvdXJjZUVuYzwvYT48L2NvZGU+CiAgICAgYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjaGFyc2V0ZGVmYXVsdCI+Q2hhcnNldERlZmF1bHQ8L2E+PC9jb2RlPiBkaXNhYmxlcyB0cmFuc2xhdGlvbi4gVGhlIGNoYXJzZXQKICAgICBuZWVkIG5vdCBtYXRjaCB0aGUgY2hhcnNldCBvZiB0aGUgcmVzcG9uc2UsIGJ1dCBpdCBtdXN0IGJlIGEgdmFsaWQgY2hhcnNldCBvbiB0aGUgc3lzdGVtLgogICAgIDwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJDaGFyc2V0T3B0aW9ucyIgaWQ9IkNoYXJzZXRPcHRpb25zIj5DaGFyc2V0T3B0aW9uczwvYT4gPGEgbmFtZT0iY2hhcnNldG9wdGlvbnMiIGlkPSJjaGFyc2V0b3B0aW9ucyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29uZmlndXJlcyBjaGFyc2V0IHRyYW5zbGF0aW9uIGJlaGF2aW9yPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkNoYXJzZXRPcHRpb25zIDx2YXI+b3B0aW9uPC92YXI+IFs8dmFyPm9wdGlvbjwvdmFyPl0gLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkNoYXJzZXRPcHRpb25zIEltcGxpY2l0QWRkPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfY2hhcnNldF9saXRlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkNoYXJzZXRPcHRpb25zPC9jb2RlPiBkaXJlY3RpdmUgY29uZmlndXJlcyBjZXJ0YWluCiAgICBiZWhhdmlvcnMgb2YgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jaGFyc2V0X2xpdGUuaHRtbCI+bW9kX2NoYXJzZXRfbGl0ZTwvYT48L2NvZGU+LiA8dmFyPk9wdGlvbjwvdmFyPiBjYW4KICAgIGJlIG9uZSBvZjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT5JbXBsaWNpdEFkZCB8IE5vSW1wbGljaXRBZGQ8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5UaGUgPGNvZGU+SW1wbGljaXRBZGQ8L2NvZGU+IGtleXdvcmQgc3BlY2lmaWVzIHRoYXQKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jaGFyc2V0X2xpdGUuaHRtbCI+bW9kX2NoYXJzZXRfbGl0ZTwvYT48L2NvZGU+IHNob3VsZCBpbXBsaWNpdGx5IGluc2VydCBpdHMKICAgICAgZmlsdGVyIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIGNoYXJhY3RlcgogICAgICBzZXQgb2YgY29udGVudCBzaG91bGQgYmUgdHJhbnNsYXRlZC4gSWYgdGhlIGZpbHRlciBjaGFpbiBpcwogICAgICBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZG91dHB1dGZpbHRlciI+QWRkT3V0cHV0RmlsdGVyPC9hPjwvY29kZT4gZGlyZWN0aXZlLCA8Y29kZT5Ob0ltcGxpY2l0QWRkPC9jb2RlPgogICAgICBzaG91bGQgYmUgc3BlY2lmaWVkIHNvIHRoYXQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jaGFyc2V0X2xpdGUuaHRtbCI+bW9kX2NoYXJzZXRfbGl0ZTwvYT48L2NvZGU+CiAgICAgIGRvZXNuJ3QgYWRkIGl0cyBmaWx0ZXIuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5UcmFuc2xhdGVBbGxNaW1lVHlwZXMgfCBOb1RyYW5zbGF0ZUFsbE1pbWVUeXBlczwvY29kZT48L2R0PgogICAgICA8ZGQ+Tm9ybWFsbHksIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2hhcnNldF9saXRlLmh0bWwiPm1vZF9jaGFyc2V0X2xpdGU8L2E+PC9jb2RlPiB3aWxsIG9ubHkgcGVyZm9ybQogICAgICB0cmFuc2xhdGlvbiBvbiBhIHNtYWxsIHN1YnNldCBvZiBwb3NzaWJsZSBtaW1ldHlwZXMuICBXaGVuIHRoZQogICAgICA8Y29kZT5UcmFuc2xhdGVBbGxNaW1lVHlwZXM8L2NvZGU+IGtleXdvcmQgaXMgc3BlY2lmaWVkIGZvciBhIGdpdmVuCiAgICAgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiwgdHJhbnNsYXRpb24gaXMgcGVyZm9ybWVkIHdpdGhvdXQgcmVnYXJkIGZvcgogICAgICBtaW1ldHlwZS48L2RkPgoKICAgIDwvZGw+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQ2hhcnNldFNvdXJjZUVuYyIgaWQ9IkNoYXJzZXRTb3VyY2VFbmMiPkNoYXJzZXRTb3VyY2VFbmM8L2E+IDxhIG5hbWU9ImNoYXJzZXRzb3VyY2VlbmMiIGlkPSJjaGFyc2V0c291cmNlZW5jIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Tb3VyY2UgY2hhcnNldCBvZiBmaWxlczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5DaGFyc2V0U291cmNlRW5jIDx2YXI+Y2hhcnNldDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2NoYXJzZXRfbGl0ZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DaGFyc2V0U291cmNlRW5jPC9jb2RlPiBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZQogICAgc291cmNlIGNoYXJzZXQgb2YgZmlsZXMgaW4gdGhlIGFzc29jaWF0ZWQgY29udGFpbmVyLjwvcD4KCiAgICA8cD5UaGUgdmFsdWUgb2YgdGhlIDx2YXI+Y2hhcnNldDwvdmFyPiBhcmd1bWVudCBtdXN0IGJlIGFjY2VwdGVkCiAgICBhcyBhIHZhbGlkIGNoYXJhY3RlciBzZXQgbmFtZSBieSB0aGUgY2hhcmFjdGVyIHNldCBzdXBwb3J0IGluCiAgICA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuLi9nbG9zc2FyeS5odG1sI2FwciIgdGl0bGU9InNlZSBnbG9zc2FyeSI+QVBSPC9hPi4gR2VuZXJhbGx5LCB0aGlzIG1lYW5zIHRoYXQgaXQgbXVzdCBiZQogICAgc3VwcG9ydGVkIGJ5IGljb252LjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtEaXJlY3RvcnkgIi9leHBvcnQvaG9tZS90cmF3aWNrL2FwYWNoZWluc3QvaHRkb2NzL2NvbnZlcnQiJmd0OwogICAgQ2hhcnNldFNvdXJjZUVuYyAgVVRGLTE2QkUKICAgIENoYXJzZXREZWZhdWx0ICAgIElTTy04ODU5LTEKJmx0Oy9EaXJlY3RvcnkmZ3Q7PC9wcmU+CjwvZGl2PgoKICAgIDxwPlRoZSBjaGFyYWN0ZXIgc2V0IG5hbWVzIGluIHRoaXMgZXhhbXBsZSB3b3JrIHdpdGggdGhlIGljb252CiAgICB0cmFuc2xhdGlvbiBzdXBwb3J0IGluIFNvbGFyaXMgOC48L3A+CgogICAgIDxkaXYgY2xhc3M9Im5vdGUiPgogICAgIFNwZWNpZnlpbmcgdGhlIHNhbWUgY2hhcnNldCBmb3IgYm90aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjY2hhcnNldHNvdXJjZWVuYyI+Q2hhcnNldFNvdXJjZUVuYzwvYT48L2NvZGU+CiAgICAgYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjaGFyc2V0ZGVmYXVsdCI+Q2hhcnNldERlZmF1bHQ8L2E+PC9jb2RlPiBkaXNhYmxlcyB0cmFuc2xhdGlvbi4gVGhlIGNoYXJzZXQKICAgICBuZWVkIG5vdCBtYXRjaCB0aGUgY2hhcnNldCBvZiB0aGUgcmVzcG9uc2UsIGJ1dCBpdCBtdXN0IGJlIGEgdmFsaWQgY2hhcnNldCBvbiB0aGUgc3lzdGVtLgogICAgIDwvZGl2PgoKCjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbW9kL21vZF9jaGFyc2V0X2xpdGUuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9tb2QvbW9kX2NoYXJzZXRfbGl0ZS5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9jaGFyc2V0X2xpdGUuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=