PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX1JFUEVBVF96PC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfUkVQRUFUXzxpPno8L2k+PC9iPiBtYWNybyByZXByZXNlbnRzIGEgcmVlbnRyeSBpbnRvIHRoZSA8Yj5CT09TVF9QUF9SRVBFQVQ8L2I+IHJlcGV0aXRpb24gY29uc3RydWN0LgoJPC9kaXY+Cgk8aDQ+VXNhZ2U8L2g0PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8Yj5CT09TVF9QUF9SRVBFQVRfPC9iPiAjIyA8aT56PC9pPig8aT5jb3VudDwvaT4sIDxpPm1hY3JvPC9pPiwgPGk+ZGF0YTwvaT4pCgkJPC9kaXY+Cgk8aDQ+QXJndW1lbnRzPC9oND4KCQk8ZGw+CgkJCTxkdD56PC9kdD4KCQkJPGRkPgoJCQkJVGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX1JFUEVBVDwvYj4gZGltZW5zaW9uLgoJCQk8L2RkPgoJCQk8ZHQ+Y291bnQ8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb3VzIGNhbGxzIHRvIDxpPm1hY3JvPC9pPi4mbmJzcDsKCQkJCVZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDxpPjA8L2k+IHRvIDxiPkJPT1NUX1BQX0xJTUlUX1JFUEVBVDwvYj4uCgkJCTwvZGQ+CgkJCTxkdD5tYWNybzwvZHQ+CgkJCTxkZD4KCQkJCUEgdGVybmFyeSBvcGVyYXRpb24gb2YgdGhlIGZvcm0gPGk+bWFjcm88L2k+KDxpPno8L2k+LCA8aT5uPC9pPiwgPGk+ZGF0YTwvaT4pLiZuYnNwOwoJCQkJVGhpcyBtYWNybyBpcyBleHBhbmRlZCBieSA8Yj5CT09TVF9QUF9SRVBFQVQ8L2I+IHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIHJlcGV0aXRpb24gZGVwdGgsCgkJCQl0aGUgY3VycmVudCByZXBldGl0aW9uIG51bWJlciwgYW5kIHRoZSBhdXhpbGlhcnkgPGk+ZGF0YTwvaT4gYXJndW1lbnQuJm5ic3A7CgkJCTwvZGQ+CgkJCTxkdD5kYXRhPC9kdD4KCQkJPGRkPgoJCQkJQXV4aWxpYXJ5IGRhdGEgcGFzc2VkIHRvIDxpPm1hY3JvPC9pPi4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCVRoaXMgbWFjcm8gZXhwYW5kcyB0byB0aGUgc2VxdWVuY2U6CgkJCTxkaXY+CgkJCQk8aT5tYWNybzwvaT4oPGk+ejwvaT4sIDxpPjA8L2k+LCA8aT5kYXRhPC9pPikgPGk+bWFjcm88L2k+KDxpPno8L2k+LCA8aT4xPC9pPiwgPGk+ZGF0YTwvaT4pIC4uLiA8aT5tYWNybzwvaT4oPGk+ejwvaT4sIDxpPmNvdW50PC9pPiAtIDxpPjE8L2k+LCA8aT5kYXRhPC9pPikKCQkJPC9kaXY+CgkJPC9kaXY+CgkJPGRpdj4KCQkJQXQgY2VydGFpbiB0aW1lcywgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBwZXJmb3JtIHRoZSBjb25jYXRlbmF0aW9uIHdpdGggPGI+Qk9PU1RfUFBfQ0FUPC9iPiByYXRoZXIgdGhhbiB0aGUgcHJlcHJvY2Vzc29yIHRva2VuLXBhc3Rpbmcgb3BlcmF0b3IuJm5ic3A7CgkJCVRoaXMgaGFwcGVucyB3aGVuIHRoZSA8aT56PC9pPiB2YWx1ZSBpcyBhIG1hY3JvIGludm9jYXRpb24gaXRzZWxmLiZuYnNwOwoJCQlJdCBuZWVkcyBhIGRlbGF5IHRvIGFsbG93IGl0IHRvIGV4cGFuZC4mbmJzcDsKCQkJVGhlIHN5bnRheCBpbiBzdWNoIGEgc2NlbmFyaW8gYmVjb21lczoKCQkJPGRpdj4KCQkJCTxiPkJPT1NUX1BQX0NBVDwvYj4oPGI+Qk9PU1RfUFBfUkVQRUFUXzwvYj4sIDxpPno8L2k+KSg8aT5jb3VudDwvaT4sIDxpPm1hY3JvPC9pPiwgPGk+ZGF0YTwvaT4pCgkJCTwvZGl2PgoJCTwvZGl2PgoJPGg0PlNlZSBBbHNvPC9oND4KCQk8dWw+CgkJCTxsaT48YSBocmVmPSJjYXQuaHRtbCI+Qk9PU1RfUFBfQ0FUPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJsaW1pdF9yZXBlYXQuaHRtbCI+Qk9PU1RfUFBfTElNSVRfUkVQRUFUPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJyZXBlYXQuaHRtbCI+Qk9PU1RfUFBfUkVQRUFUPC9hPjwvbGk+CgkJPC91bD4KCTxoND5SZXF1aXJlbWVudHM8L2g0PgoJCTxkaXY+CgkJCTxiPkhlYWRlcjo8L2I+ICZuYnNwOzxhIGhyZWY9Ii4uL2hlYWRlcnMvcmVwZXRpdGlvbi9yZXBlYXQuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL3JlcGVhdC5ocHAmZ3Q7PC9hPgoJCTwvZGl2PgoJPGg0PlNhbXBsZSBDb2RlPC9oND4KPGRpdj48cHJlPgojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9hcml0aG1ldGljL2luYy5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9pbmMuaHBwPC9hPiZndDsKI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvcHVuY3R1YXRpb24vY29tbWFfaWYuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3JlcGV0aXRpb24vcmVwZWF0Lmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL3JlcGVhdC5ocHA8L2E+Jmd0OwoKI2RlZmluZSBURVhUKHosIG4sIHRleHQpIDxhIGhyZWY9ImNvbW1hX2lmLmh0bWwiPkJPT1NUX1BQX0NPTU1BX0lGPC9hPihuKSB0ZXh0CgojZGVmaW5lIFRFTVBMQVRFKHosIG4sIF8pIFwKICAgPGEgaHJlZj0iY29tbWFfaWYuaHRtbCI+Qk9PU1RfUFBfQ09NTUFfSUY8L2E+KG4pIFwKICAgdGVtcGxhdGUmbHQ7IFwKICAgICAgPGEgaHJlZj0icmVwZWF0X3ouaHRtbCI+Qk9PU1RfUFBfUkVQRUFUXzwvYT4gIyMgeiggXAogICAgICAgICA8YSBocmVmPSJpbmMuaHRtbCI+Qk9PU1RfUFBfSU5DPC9hPihuKSwgXAogICAgICAgICBURVhULCBjbGFzcyBcCiAgICAgICkgXAogICAmZ3Q7IGNsYXNzIFQgIyMgbiBcCiAgIC8qKi8KCjxhIGhyZWY9InJlcGVhdC5odG1sIj5CT09TVF9QUF9SRVBFQVQ8L2E+KDMsIFRFTVBMQVRFLCBuaWwpCiAgIC8qCiAgIGV4cGFuZHMgdG86CiAgICAgIHRlbXBsYXRlJmx0O2NsYXNzJmd0OyBjbGFzcyBUMCwKICAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MsIGNsYXNzJmd0OyBjbGFzcyBUMSwKICAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MsIGNsYXNzLCBjbGFzcyZndDsgY2xhc3MgVDIKICAgKi8KPC9wcmU+PC9kaXY+Cgk8aHIgc2l6ZT0iMSI+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CgkJPC9icj48aT6pIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMjwvaT4KCTwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxwPjxzbWFsbD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKCQlhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKCQljb3B5IGF0IDxhIGhyZWY9CgkJImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+PC9wPgoJPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=