PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGh0bWwKICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sPgo8aGVhZD4KPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqIAogKiBDb250cmlidXRvcnM6CiAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgLz4KPHRpdGxlPkNyZWF0aW5nIGEgY3VzdG9tIHRhZyBsaWJyYXJ5PC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9Im5lc3RlZDAiIGlkPSJ0Y3JlYXRldGFnIj48YSBuYW1lPSJ0Y3JlYXRldGFnIj48IS0tIC0tPjwvYT48aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhIGN1c3RvbSB0YWcgbGlicmFyeTwvaDE+CjxkaXY+PGRpdiBjbGFzcz0ic2tpcHNwYWNlIj4gPHA+VGhlIHN0ZXBzIGludm9sdmVkIGluIGNyZWF0aW5nIGEgY3VzdG9tIHRhZyBsaWJyYXJ5IGFyZSBiZXN0CgppbGx1c3RyYXRlZCBieSBleGFtcGxlLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgeW91IHRoZSBzdGVwcyBmb3IgY3JlYXRpbmcKCmEgbmV3IHRhZyBsaWJyYXJ5IGNhbGxlZCA8aT5zc2xDaGVjazwvaT4uIFRoaXMgbGlicmFyeSAgdXNlcyBTZWN1cmUgU29ja2V0CgogTGF5ZXIgKFNTTCkgZm9yIHNlY3VyaW5nIHlvdXIgV2ViIHNpdGUuIFNTTCBhbGxvd3MgYSBzZWN1cmUgY29ubmVjdGlvbiBiZXR3ZWVuCgogeW91ciBXZWIgYnJvd3NlciBhbmQgYSBXZWIgc2VydmVyLCBhbmQgdGhlIDxpPnNzbENoZWNrPC9pPiB0YWcgcHJvdmlkZXMgYQoKZmxleGlibGUgd2F5IG9mIHVzaW5nIHNlY3VyZSBjb25uZWN0aW9ucy4gVGhlIHRhZyBjYW4gYmUgdXNlZCBpbiBhbnkgSlNQIHNjcmlwdCwKCmluY2x1ZGluZyBKYXZhmSBhbmQgSmF2YVNjcmlwdJkuIDwvcD4KIDxwPlRoZSBmb2xsb3dpbmcgc2ltcGxlCgp0YWcgaW1wbGVtZW50YXRpb24gY2hlY2tzIHRoZSBwcm90b2NvbCB1c2VkLCB0aGVuIHJlZGlyZWN0cyB0aGUgdXNlciB0byB0aGUKCnNlY3VyZSBwYWdlIG9yIHRvIGFuIGVycm9yIHBhZ2UsIGRlcGVuZGluZyBvbiB0aGUgIHBhcmFtZXRlcml6YXRpb24gb2YgdGhlCgp0YWcgKGV4cGxhaW5lZCBsYXRlcikuIFRoaXMgc2VjdXJlIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gb25seSB3b3JrcyBmb3IKCkpTUCBwYWdlcyAoc2VydmVyLXNpZGUgZHluYW1pY2FsbHkgcnVubmluZyBwYWdlcyksIGFuZCBub3QgZm9yIEhUTUwgKHN0YXRpYykKCnBhZ2VzLiA8L3A+CiA8ZGl2IGNsYXNzPSJwIj5Ud28gZmlsZXMgbXVzdCBiZSBjcmVhdGVkIGZvciB0aGUgbmV3IHRhZzo8dWw+PGxpPjxpPnNzbENoZWNrLmphdmE8L2k+IC0gdGhlIEphdmEgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRhZzwvbGk+CjxsaT48aT5zc2xDaGVjay50bGQ8L2k+IC0gdGhlIHRhZ2xpYiBkZWZpbml0aW9uIGZvciB0aGUgbmV3IHRhZzwvbGk+CjwvdWw+CjwvZGl2PgogPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0ibmVzdGVkMCIgaWQ9InRhc2siPjxhIG5hbWU9InRhc2siPjwhLS0gLS0+PC9hPjxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0ZSBzc2xDaGVjayAuamF2YTwvaDE+CjxkaXY+PGRpdiBjbGFzcz0ic2tpcHNwYWNlIj5Gcm9tIHRoZSBKYXZhIHBlcnNwZWN0aXZlOiA8L2Rpdj4KPG9sPjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+WW91ckFwcDwvc3Bhbj4uPC9zcGFuPjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DbGFzczwvc3Bhbj48L3NwYW4+LiAgVHlwZSB0aGUgZm9sbG93aW5nIGluIHRoZSBOZXcgSmF2YSBDbGFzcwoKd2luZG93OiA8L3NwYW4+IDx1bD48bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+UGFja2FnZTo8L3NwYW4+IG9yZy5lY2xpcHNlLmVudHJ5LnNlY3VyaXR5IDwvbGk+CjxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5OYW1lOjwvc3Bhbj4gc3NsQ2hlY2s8L2xpPgo8bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+U3VwZXJjbGFzczo8L3NwYW4+IGphdmEubGFuZy5PYmplY3Q8L2xpPgo8L3VsPgo8L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRoZSBzb3VyY2UKCmZpbGUgd2lsbCBvcGVuIGF1dG9tYXRpY2FsbHkuIDwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5EZWxldGUgdGhlIGF1dG9tYXRpYyBjb2RlIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOjwvc3Bhbj4gPHByZT5wYWNrYWdlIG9yZy5lY2xpcHNlLmVudHJ5LnNlY3VyaXR5OwoKIGltcG9ydCBqYXZhLmlvLio7CgogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOwoKIGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwoKIGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuVGFnU3VwcG9ydDsKCgoKcHVibGljIGNsYXNzIHNzbENoZWNrIGV4dGVuZHMgVGFnU3VwcG9ydCB7CgoKCiAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JwYWdlPW51bGw7CgoKCiAgcHVibGljIHZvaWQgc2V0RXJyb3JwYWdlKFN0cmluZyBlcnJvcnBhZ2UpIHsKCiAgICAgdGhpcy5lcnJvcnBhZ2U9ZXJyb3JwYWdlOwoKICAgfQoKCgogIHB1YmxpYyBpbnQgZG9TdGFydFRhZygpIHRocm93cyBKc3BFeGNlcHRpb24gewoKICAgICB0cnkgewoKICAgICAgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3Q9KEh0dHBTZXJ2bGV0UmVxdWVzdClwYWdlQ29udGV4dC5nZXRSZXF1ZXN0KCk7CgogICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZT0oSHR0cFNlcnZsZXRSZXNwb25zZSlwYWdlQ29udGV4dC5nZXRSZXNwb25zZSgpOwoKICAgICAgIGlmKHJlcXVlc3QuZ2V0U2NoZW1lKCkuaW5kZXhPZigiaHR0cHMiKT09LTEpIHsKCiAgICAgICAgIGlmKGVycm9ycGFnZSE9bnVsbCkgewoKICAgICAgICAgICAvLyByZWRpcmVjdCB0byB0aGUgZXJyb3IgcGFnZQoKICAgICAgICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoZXJyb3JwYWdlKTsKCiAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgIC8vIHJlZGlyZWN0IHRvIHRoZSBwYWdlIHVzaW5nIHNzbAoKICAgICAgICAgICBTdHJpbmcganVtcFVSTD0iaHR0cHM6Ly8iK3JlcXVlc3QuZ2V0U2VydmVyTmFtZSgpK3JlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpOwoKICAgICAgICAgICBpZihyZXF1ZXN0LmdldFF1ZXJ5U3RyaW5nKCkhPW51bGwpIGp1bXBVUkwrPSI/IityZXF1ZXN0LmdldFF1ZXJ5U3RyaW5nKCk7CgogICAgICAgICAgIHJlc3BvbnNlLnNlbmRSZWRpcmVjdChqdW1wVVJMKTsKCiAgICAgICAgIH0KCiAgICAgICAgIHJldHVybiBTS0lQX1BBR0U7CgogICAgICAgfQoKICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKCiAgICAgICB0aHJvdyBuZXcgSnNwVGFnRXhjZXB0aW9uKCJzc2xjaGVjayB0YWcgZmFpbGVkIik7CgogICAgIH0KCiAgICByZXR1cm4gRVZBTF9CT0RZX0lOQ0xVREU7CgogICB9CgoKCiAgcHVibGljIGludCBkb0VuZFRhZygpIHsKCiAgICAgcmV0dXJuIEVWQUxfUEFHRTsKCiAgIH0KCiB9IDwvcHJlPgo8L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+U2F2ZSBhbmQgY2xvc2UgdGhlIGZpbGUuPC9zcGFuPjwvbGk+Cjwvb2w+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0ibmVzdGVkMCIgaWQ9InRhc2syIj48YSBuYW1lPSJ0YXNrMiI+PCEtLSAtLT48L2E+PGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRlIHNzbENoZWNrLnRsZDwvaDE+CjxkaXY+PGRpdiBjbGFzcz0ic2tpcHNwYWNlIj5UaGUgdGFnIG11c3QgYmUgZGVmaW5lZCBpbiBhIFRMRCBmaWxlLiBUbyBjcmVhdGUgdGhlIFRMRCBmaWxlIGZyb20KCnRoZSBXZWIgcGVyc3BlY3RpdmU6IDwvZGl2Pgo8b2w+PGxpIGNsYXNzPSJza2lwc3BhY2UiPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Zb3VyQXBwPC9zcGFuPi48L3NwYW4+PC9saT4KPGxpIGNsYXNzPSJza2lwc3BhY2UiPjxzcGFuPlNlbGVjdCB0aGUgV2ViIG1vZHVsZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XRUItSU5GPC9zcGFuPi48L3NwYW4+PC9saT4KPGxpIGNsYXNzPSJza2lwc3BhY2UiPjxzcGFuPlJpZ2h0LWNsaWNrIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XRUItSU5GL3RsZHM8L3NwYW4+IGZvbGRlci48L3NwYW4+PC9saT4KPGxpIGNsYXNzPSJza2lwc3BhY2UiPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPjwvc3Bhbj4uPC9zcGFuPjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5OYW1lIHRoZSBmaWxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+c3NsQ2hlY2sudGxkPC9rYmQ+Ljwvc3Bhbj48L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRoZSBzb3VyY2UKCmZpbGUgd2lsbCBvcGVuIGF1dG9tYXRpY2FsbHkuIERlbGV0ZSB0aGUgYXV0b21hdGljIGNvZGUgYW5kIHJlcGxhY2UgaXQgd2l0aAoKdGhlIGZvbGxvd2luZyBjb2RlOiAgPHByZT4mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Jmd0OwoKICAmbHQ7dGFnbGliJmd0OwoKICAgICZsdDt0bGlidmVyc2lvbiZndDsxLjAmbHQ7L3RsaWJ2ZXJzaW9uJmd0OwoKICAgICZsdDtzaG9ydG5hbWUmZ3Q7c3NsY2hrJmx0Oy9zaG9ydG5hbWUmZ3Q7CgogICAgJmx0O2luZm8mZ3Q7VGFnIGxpYnJhcnkgZm9yIGNoZWNraW5nIFNTTCZsdDsvaW5mbyZndDsKCiAgICAmbHQ7dGFnJmd0OwoKICAgICAgJmx0O25hbWUmZ3Q7c3NsY2hlY2smbHQ7L25hbWUmZ3Q7CgogICAgICAmbHQ7dGFnY2xhc3MmZ3Q7b3JnLmVjbGlwc2UuZW50cnkuc2VjdXJpdHkuc3NsQ2hlY2smbHQ7L3RhZ2NsYXNzJmd0OwoKICAgICAgJmx0O2JvZHljb250ZW50Jmd0O2VtcHR5Jmx0Oy9ib2R5Y29udGVudCZndDsKCiAgICAgICZsdDthdHRyaWJ1dGUmZ3Q7CgogICAgICAgICZsdDtuYW1lJmd0O2Vycm9ycGFnZSZsdDsvbmFtZSZndDsKCiAgICAgICAgJmx0O3JlcXVpcmVkJmd0O2ZhbHNlJmx0Oy9yZXF1aXJlZCZndDsKCiAgICAgICAgJmx0O3J0ZXhwcnZhbHVlJmd0O3RydWUmbHQ7L3J0ZXhwcnZhbHVlJmd0OwoKICAgICAgJmx0Oy9hdHRyaWJ1dGUmZ3Q7CgogICAgJmx0Oy90YWcmZ3Q7CgogICZsdDsvdGFnbGliJmd0OzwvcHJlPgo8L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+U2F2ZSBhbmQgY2xvc2UgdGhlIGZpbGUuPC9zcGFuPjwvbGk+Cjwvb2w+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0ibmVzdGVkMCIgaWQ9InRhc2szIj48YSBuYW1lPSJ0YXNrMyI+PCEtLSAtLT48L2E+PGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VXNpbmcgdGhlIHRhZzwvaDE+CjxkaXY+PGRpdiBjbGFzcz0ic2tpcHNwYWNlIj5CZWZvcmUgdGhlIDxpPnNzbGNoZWNrPC9pPiB0YWcgY2FuIGJlIHVzZWQsIHRoZSBmb2xsb3dpbmcgdGFnbGliCgpyZWZlcmVuY2UgbXVzdCBiZSBtYWRlLjwvZGl2Pgo8b2w+PGxpIGNsYXNzPSJza2lwc3BhY2UiPjxzcGFuPlBsYWNlIHRoZSBmb2xsb3dpbmcgdGFnbGliIGRlZmluaXRpb24gb24gdGhlIGZpcnN0IGxpbmUgb2YgdGhlCgpKU1Agc291cmNlIGZpbGU6PC9zcGFuPiA8cHJlPiZsdDslQCB0YWdsaWIgdXJpPSIvV0VCLUlORi90bGRzL3NzbENoZWNrLnRsZCIgcHJlZml4PSJzc2xjaGsiICUmZ3Q7PC9wcmU+CjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5JbW1lZGlhdGVseSBhZnRlciB0aGUgdGFnbGliIGRlZmluaXRpb24sIHBsYWNlIG9uZSBvZiB0aGUgZm9sbG93aW5nCgpTU0wgY2hlY2tpbmcgdGFnIGluIHRoZSBjb2RlLiBZb3UgIGNhbiB1c2UgdGhlIHRhZyB3aXRoIG9yIHdpdGhvdXQgdGhlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmVycm9ycGFnZTwvc2FtcD4gYXR0cmlidXRlLjwvc3Bhbj4KPHRhYmxlIGJvcmRlcj0iMSIgZnJhbWU9ImhzaWRlcyIgcnVsZXM9InJvd3MiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iIiBjbGFzcz0ic2tpcHNwYWNlIj4KPHRib2R5Pgo8dHI+PHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9ImQwZTE4MiI+T3B0aW9uPC90aD4KPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9ImQwZTE4NCI+RGVzY3JpcHRpb248L3RoPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgaWQ9ImQwZTE4NyIgaGVhZGVycz0iZDBlMTgyIj48Yj48c2FtcCBjbGFzcz0iY29kZXBoIj4mbHQ7c3NsY2hrOnNzbGNoZWNrIGVycm9ycGFnZT0iZXJyb3JfcGFnZSIvJmd0Ozwvc2FtcD48L2I+PC90ZD4KPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgaGVhZGVycz0iZDBlMTg0IGQwZTE4NyI+V2hlbiB0aGUgcmVxdWVzdCBnb2VzIHRvIHRoZSBKU1AgYW5kIGl0IGlzIG5vdCB1c2luZyBTU0wsIHRoZSBwYWdlCgpkZWZpbmVkIHdpdGggdGhlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmVycm9ycGFnZTwvc2FtcD4gYXR0cmlidXRlIHdpbGwgYmUgZGlzcGxheWVkLiBZb3UKCm11c3QgY3JlYXRlIHRoZSBlcnJvciBwYWdlIHdpdGggdGhlIGVycm9yIG1lc3NhZ2VzIGJlZm9yZSB5b3Ugc3RhcnQgdXNpbmcKCnRoZSBhcHBsaWNhdGlvbi48L3RkPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgaWQ9ImQwZTE5NiIgaGVhZGVycz0iZDBlMTgyIj48Yj48c2FtcCBjbGFzcz0iY29kZXBoIj4mbHQ7c3NsY2hrOnNzbGNoZWNrLyZndDs8L3NhbXA+PC9iPjwvdGQ+Cjx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9ImQwZTE4NCBkMGUxOTYiPlVzaW5nCgp0aGUgdGFnIHdpdGhvdXQgdGhlIDxzcGFuPmVycm9ycGFnZTwvc3Bhbj4gYXR0cmlidXRlIHdpbGwgcmVkaXJlY3QgdGhlIHBhZ2UgaW1tZWRpYXRlbHkKCnRvIHRoZSBzYW1lIGxvY2F0aW9uIGJ1dCB1c2luZyBhIHNlY3VyZSBjb25uZWN0aW9uLiA8L3RkPgo8L3RyPgo8L3Rib2R5PjwvdGFibGU+CjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5TYXZlIGFuZCBjbG9zZSB0aGUgZmlsZS48L3NwYW4+PC9saT4KPC9vbD4KPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJuZXN0ZWQwIiBpZD0idGFzazQiPjxhIG5hbWU9InRhc2s0Ij48IS0tIC0tPjwvYT48aDEgY2xhc3M9InRvcGljdGl0bGUxIj5TZXQgdXAgdGhlIFNTTCB0cmFuc3BvcnQ8L2gxPgo8ZGl2PjxkaXYgY2xhc3M9InNraXBzcGFjZSI+SWYgeW91IGFyZSBkZXBsb3lpbmcgdG8gYSBXZWJTcGhlcmU8c3VwPq48L3N1cD4gVjUgb3IgVjUuMSBzZXJ2ZXIsIHlvdSBuZWVkIHRvIHNldAoKdXAgdGhlIFNTTCB0cmFuc3BvcnQgZm9yIHRoZSB0ZXN0IGFwcGxpY2F0aW9uIHNlcnZlciBiZWZvcmUgeW91IGNhbiB0ZXN0IHRoZQoKU1NMIGNvbm5lY3Rpb24gaW4gdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50LiAgVG8gc2V0IHVwIHRoZSBTU0wgdHJhbnNwb3J0LAoKY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2Rpdj4KPG9sPjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5Gcm9tIHRoZSBmcm9tIHRoZSBKMkVFIHBlcnNwZWN0aXZlLCBvcGVuIHRoZSB0ZXN0IHNlcnZlciBjb25maWd1cmF0aW9uCgooV2ViU3BoZXJlIEFkbWluaXN0cmF0aXZlCgpEb21haW4pIGZvciB0aGUgZG9jdW1lbnQgZGlzdHJpYnV0aW9uIGFwcGxpY2F0aW9uLjwvc3Bhbj48L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+Q2xpY2sgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnRzPC9zcGFuPiB0YWIuPC9zcGFuPjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5DbGljayBvbiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+IG5leHQgdG8gdGhlIEhUVFAgdHJhbnNwb3J0CgpsaXN0LiBTdXBwbHkgdGhlIGZvbGxvd2luZyB2YWx1ZXM6PC9zcGFuPiA8dWw+PGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkhvc3QgbmFtZTo8L3NwYW4+IDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+Kjwva2JkPiAoYXN0ZXJpc2spPC9saT4KPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQ6PC9zcGFuPiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPjQ0Mzwva2JkPjwvbGk+CjwvdWw+CjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5DaGVjayB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RW5hYmxlIFNTTDwvc3Bhbj4gY2hlY2sgYm94Ljwvc3Bhbj48L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+Q2hlY2sgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkV4dGVybmFsPC9zcGFuPiBjaGVjayBib3guPC9zcGFuPjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4uPC9zcGFuPjwvbGk+CjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5TYXZlIGFuZCBjbG9zZSB0aGUgZmlsZS48L3NwYW4+PC9saT4KPC9vbD4KPGRpdiBjbGFzcz0ic2tpcHNwYWNlIj5TU0wgdHJhbnNwb3J0IGlzIG5vdyBzZXQgZm9yIHRoZSB0ZXN0IGFwcGxpY2F0aW9uIHNlcnZlciBhbmQgeW91IGNhbgoKdGVzdCBTU0wgY29ubmVjdGlvbiBpbiB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIFRoZSBlbWJlZGRlZCBIVFRQIHNlcnZlcgoKaXMgdXNpbmcgYSBkdW1teSBTU0wgc2VydmVyIGNlcnRpZmljYXRlIGZvciB0aGUgdGVzdCBzZXJ2ZXIuIElmIHlvdSB3YW50IHRvCgpjaGFuZ2UgdGhlIGNlcnRpZmljYXRlLCB1c2UgdGhlIGlLZXltYW4gdXRpbGl0eS4gVGhlIGR1bW15IFNTTCBzZXJ2ZXIgY2VydGlmaWNhdGUKCmlzIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjo8cHJlPiZsdDtpbnN0YWxsIGRpcmVjdG9yeSZndDtcZWNsaXBzZVxwbHVnaW5zXG9yZy5lY2xpcHNlLmpzdC53ZWJzcGhlcmUucnVudGltZVxldGNcRHVtbXlTZXJ2ZXJLZXlGaWxlLmprczwvcHJlPgo8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPldlYkFTPC9rYmQ+IGlzIHRoZSBwYXNzd29yZCBmb3IgdGhlIEpLUyBmaWxlLjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9Im5lc3RlZDAiIGlkPSJ0YXNrNSI+PGEgbmFtZT0idGFzazUiPjwhLS0gLS0+PC9hPjxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlRlc3QgdGhlIHRhZzwvaDE+CjxkaXY+PG9sPjxsaSBjbGFzcz0ic2tpcHNwYWNlIj48c3Bhbj5PcGVuIHRoZSBmaWxlIDxzcGFuIGNsYXNzPSJmaWxlcGF0aCI+bG9naW4vbG9naW4uanNwPC9zcGFuPiBhbmQgY2xpY2sgdGhlCgpTb3VyY2UgdGFiLjwvc3Bhbj48L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+UGxhY2UgdGhlIGZvbGxvd2luZyBsaW5lcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlOiA8L3NwYW4+IDxwcmU+Jmx0OyVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3RsZHMvc3NsQ2hlY2sudGxkIiBwcmVmaXg9InNzbGNoayIgJSZndDsKCiZsdDtzc2xjaGs6c3NsY2hlY2svJmd0OzwvcHJlPgo8L2xpPgo8bGkgY2xhc3M9InNraXBzcGFjZSI+PHNwYW4+U2F2ZSB0aGUgZmlsZS48L3NwYW4+PC9saT4KPGxpIGNsYXNzPSJza2lwc3BhY2UiPjxzcGFuPlN0YXJ0IHRoZSBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gbG9nIGluLjwvc3Bhbj48L2xpPgo8L29sPgo8ZGl2IGNsYXNzPSJza2lwc3BhY2UiPlRoZSBicm93c2VyIHdpbGwgbm90aWZ5IHlvdSB0aGF0IHRoZSBzaXRlIGlzIGFjY2Vzc2VkIHVzaW5nIGEgc2VjdXJlCgpjb25uZWN0aW9uLiBJZiB0aGUgYXBwbGljYXRpb24gaXMgdXNpbmcgZnJhbWVzLCBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGZyYW1lcwoKaXMgdXNpbmcgc2VjdXJlIGNvbm5lY3Rpb24sIHRoZSBsb2NhdGlvbiBpbiB0aGUgYnJvd3NlciB3aWxsIHJlbWFpbiA8c3Bhbj4iaHR0cCI8L3NwYW4+IGFuZAoKd2lsbCBub3QgY2hhbmdlIHRvIDxzcGFuPiJodHRwcyI8L3NwYW4+IC48L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4=