PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfUFJPRFVDVDwvdGl0bGU+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZXMuY3NzIj4KPC9oZWFkPgo8Ym9keT4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAgMHB4OyI+CgkJVGhlIDxiPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfUFJPRFVDVDwvYj4gbWFjcm8gcmVwZWF0cyBhIG1hY3JvIGZvciBlYWNoIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHNldmVyYWwgPGk+bGlzdHM8L2k+LgoJPC9kaXY+Cgk8aDQ+VXNhZ2U8L2g0PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8Yj5CT09TVF9QUF9MSVNUX0ZPUl9FQUNIX1BST0RVQ1Q8L2I+KDxpPm1hY3JvPC9pPiwgPGk+c2l6ZTwvaT4sIDxpPnR1cGxlPC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0Pm1hY3JvPC9kdD4KCQkJPGRkPgoJCQkJVGhlIGJpbmFyeSBtYWNybyBvZiB0aGUgZm9ybSA8aT5tYWNybzwvaT4oPGk+cjwvaT4sIDxpPnByb2R1Y3Q8L2k+KS4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gaXMgZXhwYW5kZWQgYnkgPGI+Qk9PU1RfUFBfRk9SX0VBQ0hfUFJPRFVDVDwvYj4gd2l0aCBlYWNoIGNhcnRlc2lhbiBwcm9kdWN0IGluIDxpPnR1cGxlPC9pPi4mbmJzcDsKCQkJCUl0IGlzIGV4cGFuZGVkIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX0ZPUjwvYj4gcmVwZXRpdGlvbiBhbmQgYSA8aT50dXBsZTwvaT4gY29udGFpbmluZyBhIGNhcnRlc2lhbiBwcm9kdWN0LiZuYnNwOwoJCQkJVGhpcyA8aT50dXBsZTwvaT4gd2lsbCBoYXZlIDxpPnNpemU8L2k+IGVsZW1lbnRzLgoJCQk8L2RkPgoJCQk8ZHQ+c2l6ZTwvZHQ+CgkJCTxkZD4KCQkJCVRoZSBzaXplIG9mIDxpPnR1cGxlPC9pPi4KCQkJPC9kZD4KCQkJPGR0PnR1cGxlPC9kdD4KCQkJPGRkPgoJCQkJQSA8aT50dXBsZTwvaT4gb2YgPGk+bGlzdHM8L2k+IGZyb20gd2hpY2ggY2FydGVzaWFuIHByb2R1Y3RzIGFyZSBvYnRhaW5lZC4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCVRoaXMgbWFjcm8gaXMgYSByZXBldGl0aW9uIGNvbnN0cnVjdC4mbmJzcDsKCQkJSWYgdHdvIDxpPmxpc3RzPC9pPiBhcmUgKDxpPmE8L2k+LCAoPGk+YjwvaT4sICg8aT5jPC9pPiwgPGI+Qk9PU1RfUFBfTklMPC9iPikpKSBhbmQgKDxpPng8L2k+LCAoPGk+eTwvaT4sICg8aT56PC9pPiwgPGI+Qk9PU1RfUFBfTklMPC9iPikpKSwKCQkJdGhpcyBtYWNybyB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZToKCQkJPGRpdj4KCQkJCTxpPm1hY3JvPC9pPig8aT5yPC9pPiwgKDxpPmE8L2k+LCA8aT54PC9pPikpCgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sICg8aT5hPC9pPiwgPGk+eTwvaT4pKQoJCQkJPGk+bWFjcm88L2k+KDxpPnI8L2k+LCAoPGk+YTwvaT4sIDxpPno8L2k+KSk8YnI+CgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sICg8aT5iPC9pPiwgPGk+eDwvaT4pKQoJCQkJPGk+bWFjcm88L2k+KDxpPnI8L2k+LCAoPGk+YjwvaT4sIDxpPnk8L2k+KSkKCQkJCTxpPm1hY3JvPC9pPig8aT5yPC9pPiwgKDxpPmI8L2k+LCA8aT56PC9pPikpPGJyPgoJCQkJPGk+bWFjcm88L2k+KDxpPnI8L2k+LCAoPGk+YzwvaT4sIDxpPng8L2k+KSkKCQkJCTxpPm1hY3JvPC9pPig8aT5yPC9pPiwgKDxpPmM8L2k+LCA8aT55PC9pPikpCgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sICg8aT5jPC9pPiwgPGk+ejwvaT4pKQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlQcmV2aW91c2x5LCB0aGlzIG1hY3JvIGNvdWxkIG5vdCBiZSB1c2VkIGluc2lkZSA8Yj5CT09TVF9QUF9GT1I8L2I+LiZuYnNwOwoJCQlUaGVyZSBpcyBubyBsb25nZXIgYW55IHN1Y2ggcmVzdHJpY3Rpb24uJm5ic3A7CgkJCUl0IGlzIG1vcmUgZWZmaWNpZW50LCBob3dldmVyLCB0byB1c2UgPGI+Qk9PU1RfUFBfTElTVF9GT1JfRUFDSF9QUk9EVUNUX1I8L2I+IGluIHN1Y2ggYSBzaXR1YXRpb24uCgkJPC9kaXY+Cgk8aDQ+U2VlIEFsc288L2g0PgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9Imxpc3RfZm9yX2VhY2hfcHJvZHVjdF9yLmh0bWwiPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfUFJPRFVDVF9SPC9hPjwvbGk+CgkJPC91bD4KCTxoND5SZXF1aXJlbWVudHM8L2g0PgoJCTxkaXY+CgkJCTxiPkhlYWRlcjo8L2I+ICZuYnNwOzxhIGhyZWY9Ii4uL2hlYWRlcnMvbGlzdC9mb3JfZWFjaF9wcm9kdWN0Lmh0bWwiPiZsdDtib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb3JfZWFjaF9wcm9kdWN0LmhwcCZndDs8L2E+CgkJPC9kaXY+Cgk8aDQ+U2FtcGxlIENvZGU8L2g0Pgo8ZGl2PjxwcmU+CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2xpc3QvZm9yX2VhY2hfcHJvZHVjdC5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb3JfZWFjaF9wcm9kdWN0LmhwcDwvYT4mZ3Q7CgojZGVmaW5lIEwxIChhLCAoYiwgKGMsIDxhIGhyZWY9Im5pbC5odG1sIj5CT09TVF9QUF9OSUw8L2E+KSkpCiNkZWZpbmUgTDIgKHgsICh5LCAoeiwgPGEgaHJlZj0ibmlsLmh0bWwiPkJPT1NUX1BQX05JTDwvYT4pKSkKCiNkZWZpbmUgTUFDUk8ociwgcHJvZHVjdCkgcHJvZHVjdAoKPGEgaHJlZj0ibGlzdF9mb3JfZWFjaF9wcm9kdWN0Lmh0bWwiPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfUFJPRFVDVDwvYT4oTUFDUk8sIDIsIChMMSwgTDIpKQogICAvLyBleHBhbmRzIHRvIChhLCB4KSAoYSwgeSkgKGEsIHopIChiLCB4KSAoYiwgeSkgKGIsIHopIChjLCB4KSAoYywgeSkgKGMsIHopCjwvcHJlPjwvZGl2PgoJPGhyIHNpemU9IjEiPgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxpPqkgQ29weXJpZ2h0IDxhIGhyZWY9Imh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tIiB0YXJnZXQ9Il90b3AiPkhvdXNlbWFycXVlIE95PC9hPiAyMDAyPC9pPgoJCTwvYnI+PGk+qSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDI8L2k+Cgk8L2Rpdj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8cD48c21hbGw+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCgkJYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCgkJY29weSBhdCA8YSBocmVmPQoJCSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3NtYWxsPjwvcD4KCTwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K