PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfRU5VTV9CSU5BUllfUEFSQU1TX1o8L2I+IG1hY3JvIGdlbmVyYXRlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGJpbmFyeSBwYXJhbWV0ZXJzLiZuYnNwOwoJCUl0IHJlZW50ZXJzIDxiPkJPT1NUX1BQX1JFUEVBVDwvYj4gd2l0aCBtYXhpbXVtIGVmZmljaWVuY3kuCgk8L2Rpdj4KCTxoND5Vc2FnZTwvaDQ+CgkJPGRpdiBjbGFzcz0iY29kZSI+CgkJCTxiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aPC9iPig8aT56PC9pPiwgPGk+Y291bnQ8L2k+LCA8aT5wMTwvaT4sIDxpPnAyPC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0Pno8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfUkVQRUFUPC9iPiBkaW1lbnNpb24uCgkJCTwvZGQ+CgkJCTxkdD5jb3VudDwvZHQ+CgkJCTxkZD4KCQkJCVRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyB0byBnZW5lcmF0ZS4mbmJzcDsKCQkJCVZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDxpPjA8L2k+IHRvIDxiPkJPT1NUX1BQX0xJTUlUX1JFUEVBVDwvYj4uCgkJCTwvZGQ+CgkJCTxkdD5wMTwvZHQ+CgkJCTxkZD4KCQkJCVRoZSB0ZXh0IG9mIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXJhbWV0ZXIuJm5ic3A7CgkJCQk8Yj5CT09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVM8L2I+IGNvbmNhdGVuYXRlcyBudW1iZXJzIHJhbmdpbmcgZnJvbSA8aT4wPC9pPiB0byA8aT5jb3VudDwvaT4gLSA8aT4xPC9pPgoJCQkJdG8gZ2VuZXJhdGUgcGFyYW1ldGVycy4KCQkJPC9kZD4KCQkJPGR0PnAyPC9kdD4KCQkJPGRkPgoJCQkJVGhlIHRleHQgb2YgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhcmFtZXRlci4mbmJzcDsKCQkJCTxiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUzwvYj4gY29uY2F0ZW5hdGVzIG51bWJlcnMgcmFuZ2luZyBmcm9tIDxpPjA8L2k+IHRvIDxpPmNvdW50PC9pPiAtIDxpPjE8L2k+CgkJCQl0byBnZW5lcmF0ZSBwYXJhbWV0ZXJzLgoJCQk8L2RkPgoJCTwvZGw+Cgk8aDQ+UmVtYXJrczwvaDQ+CgkJPGRpdj4KCQkJVGhpcyBtYWNybyBleHBhbmRzIHRvIHRoZSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2U6CgkJCTxkaXY+CgkJCQk8aT5wMTwvaT4gIyMgPGk+MDwvaT4gPGk+cDI8L2k+ICMjIDxpPjA8L2k+LCA8aT5wMTwvaT4gIyMgPGk+MTwvaT4gPGk+cDI8L2k+ICMjIDxpPjE8L2k+LCAuLi4gPGk+cDE8L2k+ICMjIDxpPmNvdW50PC9pPiAtIDxpPjE8L2k+IDxpPnAyPC9pPiAjIyA8aT5jb3VudDwvaT4gLSA8aT4xPC9pPgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGlzIG1hY3JvIGlzIGEgcmVwbGFjZW1lbnQgZm9yIGJvdGggPGI+Qk9PU1RfUFBfRU5VTV9QQVJBTVNfV0lUSF9BX0RFRkFVTFQ8L2I+IGFuZCA8Yj5CT09TVF9QUF9FTlVNX1BBUkFNU19XSVRIX0RFRkFVTFRTPC9iPi4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0iZW51bV9iaW5hcnlfcGFyYW1zLmh0bWwiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUzwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iZW51bV9wYXJhbXNfd2l0aF9hX2RlZmF1bHQuaHRtbCI+Qk9PU1RfUFBfRU5VTV9QQVJBTVNfV0lUSF9BX0RFRkFVTFQ8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9ImVudW1fcGFyYW1zX3dpdGhfZGVmYXVsdHMuaHRtbCI+Qk9PU1RfUFBfRU5VTV9QQVJBTVNfV0lUSF9ERUZBVUxUUzwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0ibGltaXRfcmVwZWF0Lmh0bWwiPkJPT1NUX1BQX0xJTUlUX1JFUEVBVDwvYT48L2xpPgoJCTwvdWw+Cgk8aDQ+UmVxdWlyZW1lbnRzPC9oND4KCQk8ZGl2PgoJCQk8Yj5IZWFkZXI6PC9iPiAmbmJzcDs8YSBocmVmPSIuLi9oZWFkZXJzL3JlcGV0aXRpb24vZW51bV9iaW5hcnlfcGFyYW1zLmh0bWwiPiZsdDtib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9lbnVtX2JpbmFyeV9wYXJhbXMuaHBwJmd0OzwvYT4KCQk8L2Rpdj4KCTxoND5TYW1wbGUgQ29kZTwvaDQ+CjxkaXY+PHByZT4KI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvYXJpdGhtZXRpYy9pbmMuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvaW5jLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3JlcGV0aXRpb24vZW51bV9iaW5hcnlfcGFyYW1zLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2VudW1fYmluYXJ5X3BhcmFtcy5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9yZXBldGl0aW9uL2VudW1fcGFyYW1zLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2VudW1fcGFyYW1zLmhwcDwvYT4mZ3Q7CgojZGVmaW5lIEZVTkNUSU9OKHosIG4sIF8pIFwKICAgdGVtcGxhdGUmbHQ7PGEgaHJlZj0iZW51bV9wYXJhbXNfei5odG1sIj5CT09TVF9QUF9FTlVNX1BBUkFNU19aPC9hPih6LCA8YSBocmVmPSJpbmMuaHRtbCI+Qk9PU1RfUFBfSU5DPC9hPihuKSwgY2xhc3MgVCkmZ3Q7IFwKICAgdm9pZCBmKDxhIGhyZWY9ImVudW1fYmluYXJ5X3BhcmFtc196Lmh0bWwiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aPC9hPih6LCA8YSBocmVmPSJpbmMuaHRtbCI+Qk9PU1RfUFBfSU5DPC9hPihuKSwgVCwgcCkpIHsgXAogICAgICAvKiAuLi4gKi8gXAogICB9IFwKICAgLyoqLwoKPGEgaHJlZj0icmVwZWF0Lmh0bWwiPkJPT1NUX1BQX1JFUEVBVDwvYT4oMiwgRlVOQ1RJT04sIG5pbCkKLyoKICAgZXhwYW5kcyB0by4uLgoKICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVDAmZ3Q7IHZvaWQgZihUMCBwMCkgeyB9CiAgIHRlbXBsYXRlJmx0O2NsYXNzIFQwLCBjbGFzcyBUMSZndDsgdm9pZCBmKFQwIHAwLCBUMSBwMSkgeyB9CiovCjwvcHJlPjwvZGl2PgoJPGhyIHNpemU9IjEiPgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxpPqkgQ29weXJpZ2h0IDxhIGhyZWY9Imh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tIiB0YXJnZXQ9Il90b3AiPkhvdXNlbWFycXVlIE95PC9hPiAyMDAyPC9pPgoJCTwvYnI+PGk+qSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDI8L2k+Cgk8L2Rpdj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8cD48c21hbGw+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCgkJYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCgkJY29weSBhdCA8YSBocmVmPQoJCSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3NtYWxsPjwvcD4KCTwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K