From: Marc Alff Date: February 28 2011 9:07am Subject: bzr commit into mysql-trunk branch (marc.alff:3214) List-Archive: http://lists.mysql.com/commits/132087 Message-Id: <201102280908.p1S98IGJ004110@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 I0F0IGZpbGU6Ly8vVXNlcnMvbWFsZmYvQlpSX1RSRUUvbXlzcWwtdHJ1bmstd2w0ODEzLyBiYXNl ZCBvbiByZXZpZDptYXJjLmFsZmZAb3JhY2xlLmNvbS0yMDExMDIyNTE2NDE1Ny1jODB4NzZ2NWxn NnZqajk3CgogMzIxNCBNYXJjIEFsZmYJMjAxMS0wMi0yOCBbbWVyZ2VdCiAgICAgIE1lcmdlIG15 c3FsLXRydW5rIC0tPiBteXNxbC10cnVuay13bDQ4MTMKCiAgICByZW1vdmVkOgogICAgICBzdG9y YWdlL2lubm9iYXNlL2luY2x1ZGUvdXQwYmguaAogICAgICBzdG9yYWdlL2lubm9iYXNlL3V0L3V0 MGJoLmMKICAgIGFkZGVkOgogICAgICBzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvdXQwYmguaAog ICAgICBzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvdXQwYmguaWMKICAgICAgc3RvcmFnZS9pbm5v YmFzZS91dC91dDBiaC5jCiAgICBtb2RpZmllZDoKICAgICAgbXlzcWwtdGVzdC9leHRyYS9iaW5s b2dfdGVzdHMvY3R5cGVfY3A5MzIudGVzdAogICAgICBteXNxbC10ZXN0L3IvZmlsZXNvcnRfZGVi dWcucmVzdWx0CiAgICAgIG15c3FsLXRlc3Qvc3VpdGUvc3lzX3ZhcnMvci9hbGxfdmFycy5yZXN1 bHQKICAgICAgbXlzcWwtdGVzdC90L2ZpbGVzb3J0X2RlYnVnLnRlc3QKICAgICAgc3FsL2ZpbGVz b3J0LmNjCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvQ01ha2VMaXN0cy50eHQKICAgICAgc3RvcmFn ZS9pbm5vYmFzZS9oYW5kbGVyL2hhX2lubm9kYi5jYwogICAgICBzdG9yYWdlL2lubm9iYXNlL2lu Y2x1ZGUvYnVmMGZsdS5oCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9zcnYwc3J2LmgK ICAgICAgc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRlL3N5bmMwc3luYy5oCiAgICAgIHN0b3JhZ2Uv aW5ub2Jhc2UvaW5jbHVkZS90cngwcHVyZ2UuaAogICAgICBzdG9yYWdlL2lubm9iYXNlL2luY2x1 ZGUvdHJ4MHJzZWcuaAogICAgICBzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvdHJ4MHN5cy5oCiAg ICAgIHN0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS90cngwc3lzLmljCiAgICAgIHN0b3JhZ2UvaW5u b2Jhc2Uvc3J2L3NydjBzcnYuYwogICAgICBzdG9yYWdlL2lubm9iYXNlL3Nydi9zcnYwc3RhcnQu YwogICAgICBzdG9yYWdlL2lubm9iYXNlL3N5bmMvc3luYzBzeW5jLmMKICAgICAgc3RvcmFnZS9p bm5vYmFzZS90cngvdHJ4MHB1cmdlLmMKICAgICAgc3RvcmFnZS9pbm5vYmFzZS90cngvdHJ4MHJz ZWcuYwogICAgICBzdG9yYWdlL2lubm9iYXNlL3RyeC90cngwc3lzLmMKICAgICAgc3RvcmFnZS9p bm5vYmFzZS90cngvdHJ4MHRyeC5jCiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvdXQvdXQwdXQuYwo9 PT0gbW9kaWZpZWQgZmlsZSAnbXlzcWwtdGVzdC9leHRyYS9iaW5sb2dfdGVzdHMvY3R5cGVfY3A5 MzIudGVzdCcKLS0tIGEvbXlzcWwtdGVzdC9leHRyYS9iaW5sb2dfdGVzdHMvY3R5cGVfY3A5MzIu dGVzdAkyMDA4LTAyLTIwIDE4OjQ5OjI2ICswMDAwCisrKyBiL215c3FsLXRlc3QvZXh0cmEvYmlu bG9nX3Rlc3RzL2N0eXBlX2NwOTMyLnRlc3QJMjAxMS0wMi0yMyAxMTozMjowOCArMDAwMApAQCAt NDYyLDcgKzQ2Miw4IEBAIGRyb3AgdGFibGUgdDE7CiAtLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1j aGFyYWN0ZXItc2V0PWNwOTMyIHRlc3QgLWUgImNoYXJzZXQgdXRmODsiCiAKICMgaXRzIHVzYWdl IHRvIHN3aXRjaCBpbnRlcm5hbGx5IGluIG15c3FsIHRvIHJlcXVlc3RlZCBjaGFyc2V0Ci0tLWV4 ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAiY2hhcnNldCBj cDkzMjsgc2VsZWN0ICfvv71cJzsgY3JlYXRlIHRhYmxlIHQxIChjX2NwOTMyIFRFWFQgQ0hBUkFD VEVSIFNFVCBjcDkzMik7IGluc2VydCBpbnRvIHQxIHZhbHVlcygn77+9XCcpOyBzZWxlY3QgKiBm cm9tIHQxOyAgZHJvcCB0YWJsZSB0MTsiCi0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0 ZXItc2V0PXV0ZjggdGVzdCAtZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICfvv71cJyIKLS0tZXhl YyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCB0ZXN0IC1lICIvKmNoYXJzZXQg Y3A5MzIgKi87IHNldCBjaGFyYWN0ZXJfc2V0X2NsaWVudD0gY3A5MzI7IHNlbGVjdCAn77+9XCci Ci0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAiLyoh XEMgY3A5MzIgKi87IHNldCBjaGFyYWN0ZXJfc2V0X2NsaWVudD0gY3A5MzI7IHNlbGVjdCAn77+9 XCciCistLWNoYXJhY3Rlcl9zZXQgbGF0aW4xCistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hh cmFjdGVyLXNldD1sYXRpbjEgdGVzdCAtZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICfvv71cJzsg Y3JlYXRlIHRhYmxlIHQxIChjX2NwOTMyIFRFWFQgQ0hBUkFDVEVSIFNFVCBjcDkzMik7IGluc2Vy dCBpbnRvIHQxIHZhbHVlcygn77+9XCcpOyBzZWxlY3QgKiBmcm9tIHQxOyAgZHJvcCB0YWJsZSB0 MTsiCistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD1sYXRpbjEgdGVzdCAt ZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICfvv71cJyIKKy0tZXhlY3cgJE1ZU1FMIC0tZGVmYXVs dC1jaGFyYWN0ZXItc2V0PWxhdGluMSB0ZXN0IC1lICIvKmNoYXJzZXQgY3A5MzIgKi87IHNldCBu YW1lcyBjcDkzMiwgY2hhcmFjdGVyX3NldF9yZXN1bHRzPXV0Zjg7IHNlbGVjdCAn77+9XCciCist LWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD1sYXRpbjEgdGVzdCAtZSAiLyoh XEMgY3A5MzIgKi87IHNldCBjaGFyYWN0ZXJfc2V0X2NsaWVudD0gY3A5MzI7IHNlbGVjdCAn77+9 XCciCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzcWwtdGVzdC9yL2ZpbGVzb3J0X2RlYnVnLnJlc3Vs dCcKLS0tIGEvbXlzcWwtdGVzdC9yL2ZpbGVzb3J0X2RlYnVnLnJlc3VsdAkyMDExLTAyLTAyIDEz OjQxOjEwICswMDAwCisrKyBiL215c3FsLXRlc3Qvci9maWxlc29ydF9kZWJ1Zy5yZXN1bHQJMjAx MS0wMi0yNCAwNzoxODowMyArMDAwMApAQCAtMjYsMyArMjYsMjAgQEAgREVMRVRFIEZST00gdDEg T1JERVIgQlkgKGYxKDEwKSkgTElNSVQgMQogRVJST1IgNDIwMDA6IEluY29ycmVjdCBudW1iZXIg b2YgYXJndW1lbnRzIGZvciBGVU5DVElPTiB0ZXN0LmYxOyBleHBlY3RlZCAwLCBnb3QgMQogRFJP UCBUQUJMRSB0MTsKIERST1AgRlVOQ1RJT04gZjE7CisjCisjIEJ1ZyAjMTE3NDcxMDIKKyMgMzA3 NzE6IExPRyBNT1JFIElORk8gQUJPVVQgVEhSRUFEUyBLSUxMJ0QgQU5EIFNPUlQgQUJPUlRFRCBN RVNTQUdFUworIworIyBjb25uZWN0aW9uIDEKK0NSRUFURSBUQUJMRSB0MShmMCBpbnQgYXV0b19p bmNyZW1lbnQgcHJpbWFyeSBrZXksIGYxIGludCk7CitJTlNFUlQgSU5UTyB0MShmMSkgVkFMVUVT ICgwKSwoMSksKDIpLCgzKSwoNCksKDUpOworU0VUIERFQlVHX1NZTkM9J2ZpbGVzb3J0X3N0YXJ0 IFNJR05BTCBmaWxlc29ydF9zdGFydGVkIFdBSVRfRk9SIGZpbGVzb3J0X2tpbGxlZCc7CisjIFNl bmRpbmc6IChub3QgcmVhcGVkIHNpbmNlIGNvbm5lY3Rpb24gaXMga2lsbGVkIGxhdGVyKQorU0VM RUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMSBBU0MsIGYwOworIyBjb25uZWN0aW9uIDIKK1NFVCBE RUJVR19TWU5DPSdub3cgV0FJVF9GT1IgZmlsZXNvcnRfc3RhcnRlZCc7CitLSUxMIEBpZDsKK1NF VCBERUJVR19TWU5DPSdub3cgU0lHTkFMIGZpbGVzb3J0X2tpbGxlZCc7CisjIGNvbm5lY3Rpb24g ZGVmYXVsdAorU0VUIERFQlVHX1NZTkM9ICJSRVNFVCI7CitEUk9QIFRBQkxFIHQxOwoKPT09IG1v ZGlmaWVkIGZpbGUgJ215c3FsLXRlc3Qvc3VpdGUvc3lzX3ZhcnMvci9hbGxfdmFycy5yZXN1bHQn Ci0tLSBhL215c3FsLXRlc3Qvc3VpdGUvc3lzX3ZhcnMvci9hbGxfdmFycy5yZXN1bHQJMjAxMS0w Mi0xNyAxNDowNjowOSArMDAwMAorKysgYi9teXNxbC10ZXN0L3N1aXRlL3N5c192YXJzL3IvYWxs X3ZhcnMucmVzdWx0CTIwMTEtMDItMjMgMTQ6NTc6MjkgKzAwMDAKQEAgLTEzLDYgKzEzLDcgQEAg c2VsZWN0IHZhcmlhYmxlX25hbWUgYXMgYFRoZXJlIHNob3VsZCBiZQogbGVmdCBqb2luIHQxIG9u IHZhcmlhYmxlX25hbWU9dGVzdF9uYW1lIHdoZXJlIHRlc3RfbmFtZSBpcyBudWxsOwogVGhlcmUg c2hvdWxkIGJlICpubyogdmFyaWFibGVzIGxpc3RlZCBiZWxvdzoKIElOTk9EQl9TVEFUU19UUkFO U0lFTlRfU0FNUExFX1BBR0VTCitJTk5PREJfUk9MTEJBQ0tfU0VHTUVOVFMKIElOTk9EQl9TVEFU U19QRVJTSVNURU5UX1NBTVBMRV9QQUdFUwogUkVMQVlfTE9HX0JBU0VOQU1FCiBMT0dfQklOX0JB U0VOQU1FCkBAIC0yNiw2ICsyNyw3IEBAIElOTk9EQl9NT05JVE9SX0RJU0FCTEUKIElOTk9EQl9G SUxFX0ZPUk1BVF9NQVgKIElOTk9EQl9NT05JVE9SX0VOQUJMRQogSU5OT0RCX1NUQVRTX1RSQU5T SUVOVF9TQU1QTEVfUEFHRVMKK0lOTk9EQl9ST0xMQkFDS19TRUdNRU5UUwogSU5OT0RCX1NUQVRT X1BFUlNJU1RFTlRfU0FNUExFX1BBR0VTCiBSRUxBWV9MT0dfQkFTRU5BTUUKIExPR19CSU5fQkFT RU5BTUUKCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L3QvZmlsZXNvcnRfZGVidWcudGVz dCcKLS0tIGEvbXlzcWwtdGVzdC90L2ZpbGVzb3J0X2RlYnVnLnRlc3QJMjAxMS0wMi0wMiAxMzo0 MToxMCArMDAwMAorKysgYi9teXNxbC10ZXN0L3QvZmlsZXNvcnRfZGVidWcudGVzdAkyMDExLTAy LTI0IDA3OjE4OjAzICswMDAwCkBAIC0xLDQgKzEsNiBAQAogLS1zb3VyY2UgaW5jbHVkZS9oYXZl X2RlYnVnLmluYworLS1zb3VyY2UgaW5jbHVkZS9oYXZlX2RlYnVnX3N5bmMuaW5jCistLXNvdXJj ZSBpbmNsdWRlL2NvdW50X3Nlc3Npb25zLmluYwogCiBTRVQgQG9sZF9kZWJ1Zz0gQEBzZXNzaW9u LmRlYnVnOwogCkBAIC0zOCwzICs0MCwzNyBAQCBERUxFVEUgRlJPTSB0MSBPUkRFUiBCWSAoZjEo MTApKSBMSU1JVCAxCiAKIERST1AgVEFCTEUgdDE7CiBEUk9QIEZVTkNUSU9OIGYxOworCistLWVj aG8gIworLS1lY2hvICMgQnVnICMxMTc0NzEwMgorLS1lY2hvICMgMzA3NzE6IExPRyBNT1JFIElO Rk8gQUJPVVQgVEhSRUFEUyBLSUxMJ0QgQU5EIFNPUlQgQUJPUlRFRCBNRVNTQUdFUworLS1lY2hv ICMKKworY29ubmVjdCAoY29uMSwgbG9jYWxob3N0LCByb290KTsKK2Nvbm5lY3QgKGNvbjIsIGxv Y2FsaG9zdCwgcm9vdCk7CisKKy0tZWNobyAjIGNvbm5lY3Rpb24gMQorY29ubmVjdGlvbiBjb24x OworQ1JFQVRFIFRBQkxFIHQxKGYwIGludCBhdXRvX2luY3JlbWVudCBwcmltYXJ5IGtleSwgZjEg aW50KTsKK0lOU0VSVCBJTlRPIHQxKGYxKSBWQUxVRVMgKDApLCgxKSwoMiksKDMpLCg0KSwoNSk7 CisKK2xldCAkSUQ9IGBTRUxFQ1QgQGlkIDo9IENPTk5FQ1RJT05fSUQoKWA7CisKK1NFVCBERUJV R19TWU5DPSdmaWxlc29ydF9zdGFydCBTSUdOQUwgZmlsZXNvcnRfc3RhcnRlZCBXQUlUX0ZPUiBm aWxlc29ydF9raWxsZWQnOworLS1lY2hvICMgU2VuZGluZzogKG5vdCByZWFwZWQgc2luY2UgY29u bmVjdGlvbiBpcyBraWxsZWQgbGF0ZXIpCistLXNlbmQgU0VMRUNUICogRlJPTSB0MSBPUkRFUiBC WSBmMSBBU0MsIGYwCisKKy0tZWNobyAjIGNvbm5lY3Rpb24gMgorY29ubmVjdGlvbiBjb24yOwor bGV0ICRpZ25vcmU9IGBTRUxFQ1QgQGlkIDo9ICRJRGA7CitTRVQgREVCVUdfU1lOQz0nbm93IFdB SVRfRk9SIGZpbGVzb3J0X3N0YXJ0ZWQnOworS0lMTCBAaWQ7CitTRVQgREVCVUdfU1lOQz0nbm93 IFNJR05BTCBmaWxlc29ydF9raWxsZWQnOworCistLWVjaG8gIyBjb25uZWN0aW9uIGRlZmF1bHQK K2Nvbm5lY3Rpb24gZGVmYXVsdDsKK2Rpc2Nvbm5lY3QgY29uMTsKK2Rpc2Nvbm5lY3QgY29uMjsK Ky0tc291cmNlIGluY2x1ZGUvd2FpdF91bnRpbF9jb3VudF9zZXNzaW9ucy5pbmMKK1NFVCBERUJV R19TWU5DPSAiUkVTRVQiOworRFJPUCBUQUJMRSB0MTsKCj09PSBtb2RpZmllZCBmaWxlICdzcWwv ZmlsZXNvcnQuY2MnCi0tLSBhL3NxbC9maWxlc29ydC5jYwkyMDExLTAyLTE1IDE3OjE0OjE1ICsw MDAwCisrKyBiL3NxbC9maWxlc29ydC5jYwkyMDExLTAyLTI4IDA5OjA2OjQxICswMDAwCkBAIC0z NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiYm91bmRlZF9xdWV1ZS5oIgogI2luY2x1ZGUgImZpbGVz b3J0X3V0aWxzLmgiCiAjaW5jbHVkZSAic3FsX3NlbGVjdC5oIgorI2luY2x1ZGUgImRlYnVnX3N5 bmMuaCIKIAogI2lmZGVmIEhBVkVfRVhQTElDSVRfVEVNUExBVEVfSU5TVEFOVElBVElPTgogdGVt cGxhdGUgY2xhc3MgQm91bmRlZF9xdWV1ZTx1Y2hhciwgdWNoYXI+OwpAQCAtMTY0LDYgKzE2NSw3 IEBAIGhhX3Jvd3MgZmlsZXNvcnQoVEhEICp0aGQsIFRBQkxFICp0YWJsZSwKICAgSXRlbV9zdWJz ZWxlY3QgKnN1YnNlbGVjdD0gdGFiID8gdGFiLT5jb250YWluaW5nX3N1YnNlbGVjdCgpIDogMDsK IAogICBNWVNRTF9GSUxFU09SVF9TVEFSVCh0YWJsZS0+cy0+ZGIuc3RyLCB0YWJsZS0+cy0+dGFi bGVfbmFtZS5zdHIpOworICBERUJVR19TWU5DKHRoZCwgImZpbGVzb3J0X3N0YXJ0Iik7CiAKICAg LyoKICAgIFJlbGVhc2UgSW5ub0RCJ3MgYWRhcHRpdmUgaGFzaCBpbmRleCBsYXRjaCAoaWYgaG9s ZGluZykgYmVmb3JlCkBAIC0zNTcsMTIgKzM1OSwxMyBAQCBoYV9yb3dzIGZpbGVzb3J0KFRIRCAq dGhkLCBUQUJMRSAqdGFibGUsCiAgIH0KICAgaWYgKGVycm9yKQogICB7Ci0gICAgREJVR19BU1NF UlQodGhkLT5pc19lcnJvcigpKTsKKyAgICBpbnQga2lsbF9lcnJubz0gdGhkLT5raWxsZWRfZXJy bm8oKTsKKyAgICBEQlVHX0FTU0VSVCh0aGQtPmlzX2Vycm9yKCkgfHwga2lsbF9lcnJubyk7CiAg ICAgbXlfcHJpbnRmX2Vycm9yKEVSX0ZJTFNPUlRfQUJPUlQsCiAgICAgICAgICAgICAgICAgICAg ICIlczogJXMiLAogICAgICAgICAgICAgICAgICAgICBNWUYoTUVfRVJST1IgKyBNRV9XQUlUVEFO RyksCiAgICAgICAgICAgICAgICAgICAgIEVSX1RIRCh0aGQsIEVSX0ZJTFNPUlRfQUJPUlQpLAot ICAgICAgICAgICAgICAgICAgICB0aGQtPnN0bXRfZGEtPm1lc3NhZ2UoKSk7CisgICAgICAgICAg ICAgICAgICAgIGtpbGxfZXJybm8gPyBFUihraWxsX2Vycm5vKSA6IHRoZC0+c3RtdF9kYS0+bWVz c2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgaWYgKGdsb2JhbF9zeXN0ZW1fdmFy aWFibGVzLmxvZ193YXJuaW5ncyA+IDEpCiAgICAgewoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvaW5ub2Jhc2UvQ01ha2VMaXN0cy50eHQnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvQ01ha2VM aXN0cy50eHQJMjAxMS0wMS0yMSAxNjoxNDo0NyArMDAwMAorKysgYi9zdG9yYWdlL2lubm9iYXNl L0NNYWtlTGlzdHMudHh0CTIwMTEtMDItMjIgMDU6MTE6MTUgKzAwMDAKQEAgLTEsNCArMSw0IEBA Ci0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAxMCwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRl cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDExLCBPcmFj bGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL2lubm9i YXNlL2hhbmRsZXIvaGFfaW5ub2RiLmNjJwotLS0gYS9zdG9yYWdlL2lubm9iYXNlL2hhbmRsZXIv aGFfaW5ub2RiLmNjCTIwMTEtMDItMTggMTM6MDA6NTcgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5v YmFzZS9oYW5kbGVyL2hhX2lubm9kYi5jYwkyMDExLTAyLTIzIDE3OjM1OjA3ICswMDAwCkBAIC0y NzIsNyArMjcyLDcgQEAgc3RhdGljIFBTSV9tdXRleF9pbmZvIGFsbF9pbm5vZGJfbXV0ZXhlcwog IyAgZW5kaWYgLyogVU5JVl9NRU1fREVCVUcgKi8KIAl7Jm1lbV9wb29sX211dGV4X2tleSwgIm1l bV9wb29sX211dGV4IiwgMH0sCiAJeyZtdXRleF9saXN0X211dGV4X2tleSwgIm11dGV4X2xpc3Rf bXV0ZXgiLCAwfSwKLQl7JnB1cmdlX3N5c19tdXRleF9rZXksICJwdXJnZV9zeXNfbXV0ZXgiLCAw fSwKKwl7JnB1cmdlX3N5c19iaF9tdXRleF9rZXksICJwdXJnZV9zeXNfYmhfbXV0ZXgiLCAwfSwK IAl7JnJlY3Zfc3lzX211dGV4X2tleSwgInJlY3Zfc3lzX211dGV4IiwgMH0sCiAJeyZyc2VnX211 dGV4X2tleSwgInJzZWdfbXV0ZXgiLCAwfSwKICMgIGlmZGVmIFVOSVZfU1lOQ19ERUJVRwpAQCAt MTIwNjQsMTMgKzEyMDY0LDIwIEBAIHN0YXRpYyBNWVNRTF9TWVNWQVJfVUxPTkcoaW9fY2FwYWNp dHksIHMKIAogc3RhdGljIE1ZU1FMX1NZU1ZBUl9VTE9ORyhwdXJnZV9iYXRjaF9zaXplLCBzcnZf cHVyZ2VfYmF0Y2hfc2l6ZSwKICAgUExVR0lOX1ZBUl9PUENNREFSRywKLSAgIk51bWJlciBvZiBV TkRPIGxvZ3MgdG8gcHVyZ2UgaW4gb25lIGJhdGNoIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4gIgot ICAiRGVmYXVsdCBpcyAyMCIsCisgICJOdW1iZXIgb2YgVU5ETyBsb2cgcGFnZXMgdG8gcHVyZ2Ug aW4gb25lIGJhdGNoIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4iLAogICBOVUxMLCBOVUxMLAogICAy MCwJCQkvKiBEZWZhdWx0IHNldHRpbmcgKi8KICAgMSwJCQkvKiBNaW5pbXVtIHZhbHVlICovCiAg IDUwMDAsIDApOwkJLyogTWF4aW11bSB2YWx1ZSAqLwogCitzdGF0aWMgTVlTUUxfU1lTVkFSX1VM T05HKHJvbGxiYWNrX3NlZ21lbnRzLCBzcnZfcm9sbGJhY2tfc2VnbWVudHMsCisgIFBMVUdJTl9W QVJfT1BDTURBUkcsCisgICJOdW1iZXIgb2YgVU5ETyBsb2dzIHRvIHVzZS4iLAorICBOVUxMLCBO VUxMLAorICAxMjgsCQkJLyogRGVmYXVsdCBzZXR0aW5nICovCisgIDEsCQkJLyogTWluaW11bSB2 YWx1ZSAqLworICBUUlhfU1lTX05fUlNFR1MsIDApOwkvKiBNYXhpbXVtIHZhbHVlICovCisKIHN0 YXRpYyBNWVNRTF9TWVNWQVJfVUxPTkcocHVyZ2VfdGhyZWFkcywgc3J2X25fcHVyZ2VfdGhyZWFk cywKICAgUExVR0lOX1ZBUl9PUENNREFSRyB8IFBMVUdJTl9WQVJfUkVBRE9OTFksCiAgICJQdXJn ZSB0aHJlYWRzIGNhbiBiZSBmcm9tIDAgdG8gMzIuIERlZmF1bHQgaXMgMC4iLApAQCAtMTI0OTQs NiArMTI1MDEsNyBAQCBzdGF0aWMgc3RydWN0IHN0X215c3FsX3N5c192YXIqIGlubm9iYXNlCiAg IE1ZU1FMX1NZU1ZBUihwYWdlX2hhc2hfbG9ja3MpLAogI2VuZGlmIC8qIGRlZmluZWQgVU5JVl9E RUJVRyB8fCBkZWZpbmVkIFVOSVZfUEVSRl9ERUJVRyAqLwogICBNWVNRTF9TWVNWQVIocHJpbnRf YWxsX2RlYWRsb2NrcyksCisgIE1ZU1FMX1NZU1ZBUihyb2xsYmFja19zZWdtZW50cyksCiAgIE5V TEwKIH07CiAKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvYnVm MGZsdS5oJwotLS0gYS9zdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvYnVmMGZsdS5oCTIwMTAtMTIt MTQgMDQ6NDU6MzIgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRlL2J1ZjBmbHUu aAkyMDExLTAyLTIyIDA1OjExOjE1ICswMDAwCkBAIC0xNDEsNyArMTQxLDE4IEBAIFVOSVZfSU5U RVJOCiB2b2lkCiBidWZfZmx1c2hfd2FpdF9iYXRjaF9lbmQoCiAvKj09PT09PT09PT09PT09PT09 PT09PSovCi0JYnVmX3Bvb2xfdCoJYnVmX3Bvb2wsCS8qITwgYnVmZmVyIHBvb2wgaW5zdGFuY2Ug Ki8KKwlidWZfcG9vbF90KglidWZfcG9vbCwJLyohPCBpbjogYnVmZmVyIHBvb2wgaW5zdGFuY2Ug Ki8KKwllbnVtIGJ1Zl9mbHVzaAl0eXBlKTsJCS8qITwgaW46IEJVRl9GTFVTSF9MUlUKKwkJCQkJ b3IgQlVGX0ZMVVNIX0xJU1QgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCitXYWl0cyB1bnRpbCBhIGZsdXNo IGJhdGNoIG9mIHRoZSBnaXZlbiB0eXBlIGVuZHMuIFRoaXMgaXMgY2FsbGVkIGJ5CithIHRocmVh ZCB0aGF0IG9ubHkgd2FudHMgdG8gd2FpdCBmb3IgYSBmbHVzaCB0byBlbmQgYnV0IGRvZXNuJ3Qg ZG8KK2FueSBmbHVzaGluZyBpdHNlbGYuICovCitVTklWX0lOVEVSTgordm9pZAorYnVmX2ZsdXNo X3dhaXRfYmF0Y2hfZW5kX3dhaXRfb25seSgKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSovCisJYnVmX3Bvb2xfdCoJYnVmX3Bvb2wsCS8qITwgaW46IGJ1ZmZlciBwb29sIGluc3Rh bmNlICovCiAJZW51bSBidWZfZmx1c2gJdHlwZSk7CQkvKiE8IGluOiBCVUZfRkxVU0hfTFJVCiAJ CQkJCW9yIEJVRl9GTFVTSF9MSVNUICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRlL3NydjBzcnYuaCcKLS0tIGEvc3RvcmFnZS9p bm5vYmFzZS9pbmNsdWRlL3NydjBzcnYuaAkyMDExLTAyLTEwIDE1OjAxOjAxICswMDAwCisrKyBi L3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9zcnYwc3J2LmgJMjAxMS0wMi0yMiAwNToxMToxNSAr MDAwMApAQCAtMjk3LDkgKzI5NywxMiBAQCBleHRlcm4gdWxpbnQgc3J2X2xvZ193YWl0czsKIC8q IHRoZSBudW1iZXIgb2YgcHVyZ2UgdGhyZWFkcyB0byB1c2UgZnJvbSB0aGUgd29ya2VyIHBvb2wg KGN1cnJlbnRseSAwIG9yIDEpICovCiBleHRlcm4gdWxvbmcgc3J2X25fcHVyZ2VfdGhyZWFkczsK IAotLyogdGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHB1cmdlIGluIG9uZSBiYXRjaCAqLworLyog dGhlIG51bWJlciBvZiBwYWdlcyB0byBwdXJnZSBpbiBvbmUgYmF0Y2ggKi8KIGV4dGVybiB1bG9u ZyBzcnZfcHVyZ2VfYmF0Y2hfc2l6ZTsKIAorLyogdGhlIG51bWJlciBvZiByb2xsYmFjayBzZWdt ZW50cyB0byB1c2UgKi8KK2V4dGVybiB1bG9uZyBzcnZfcm9sbGJhY2tfc2VnbWVudHM7CisKIC8q IHZhcmlhYmxlIHRoYXQgY291bnRzIGFtb3VudCBvZiBkYXRhIHJlYWQgaW4gdG90YWwgKGluIGJ5 dGVzKSAqLwogZXh0ZXJuIHVsaW50IHNydl9kYXRhX3JlYWQ7CiAKCj09PSBtb2RpZmllZCBmaWxl ICdzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvc3luYzBzeW5jLmgnCi0tLSBhL3N0b3JhZ2UvaW5u b2Jhc2UvaW5jbHVkZS9zeW5jMHN5bmMuaAkyMDExLTAyLTE1IDA5OjQwOjM0ICswMDAwCisrKyBi L3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9zeW5jMHN5bmMuaAkyMDExLTAyLTIyIDA1OjExOjE1 ICswMDAwCkBAIC05MCw3ICs5MCw3IEBAIGV4dGVybiBteXNxbF9wZnNfa2V5X3QJbWVtX2hhc2hf bXV0ZXhfa2UKICMgZW5kaWYgLyogVU5JVl9NRU1fREVCVUcgKi8KIGV4dGVybiBteXNxbF9wZnNf a2V5X3QJbWVtX3Bvb2xfbXV0ZXhfa2V5OwogZXh0ZXJuIG15c3FsX3Bmc19rZXlfdAltdXRleF9s aXN0X211dGV4X2tleTsKLWV4dGVybiBteXNxbF9wZnNfa2V5X3QJcHVyZ2Vfc3lzX211dGV4X2tl eTsKK2V4dGVybiBteXNxbF9wZnNfa2V5X3QJcHVyZ2Vfc3lzX2JoX211dGV4X2tleTsKIGV4dGVy biBteXNxbF9wZnNfa2V5X3QJcmVjdl9zeXNfbXV0ZXhfa2V5OwogZXh0ZXJuIG15c3FsX3Bmc19r ZXlfdAlyc2VnX211dGV4X2tleTsKICMgaWZkZWYgVU5JVl9TWU5DX0RFQlVHCkBAIC02NjAsNyAr NjYwLDYgQEAgb3Igcm93IGxvY2shICovCiAjZGVmaW5lIFNZTkNfVFJFRV9OT0RFX05FVwk4OTIK ICNkZWZpbmUgU1lOQ19UUkVFX05PREVfRlJPTV9IQVNIIDg5MQogI2RlZmluZSBTWU5DX1RSRUVf Tk9ERQkJODkwCi0jZGVmaW5lCVNZTkNfUFVSR0VfU1lTCQk4MTAKICNkZWZpbmUJU1lOQ19QVVJH RV9MQVRDSAk4MDAKICNkZWZpbmUJU1lOQ19UUlhfVU5ETwkJNzAwCiAjZGVmaW5lIFNZTkNfUlNF RwkJNjAwCkBAIC02ODYsNiArNjg1LDcgQEAgb3Igcm93IGxvY2shICovCiAjZGVmaW5lIFNZTkNf VEhSRUFEUwkJMjk1CiAjZGVmaW5lIFNZTkNfUkVDX0xPQ0sJCTI5NAogI2RlZmluZSBTWU5DX1RS WF9TWVNfSEVBREVSCTI5MAorI2RlZmluZQlTWU5DX1BVUkdFX1FVRVVFCTIwMAogI2RlZmluZSBT WU5DX0xPRwkJMTcwCiAjZGVmaW5lIFNZTkNfTE9HX0ZMVVNIX09SREVSCTE0NwogI2RlZmluZSBT WU5DX1JFQ1YJCTE2OAoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVk ZS90cngwcHVyZ2UuaCcKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRlL3RyeDBwdXJnZS5o CTIwMTEtMDEtMDUgMjI6NDk6MjAgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRl L3RyeDBwdXJnZS5oCTIwMTEtMDItMjIgMDU6MTE6MTUgKzAwMDAKQEAgLTEsNiArMSw2IEBACiAv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKIAotQ29weXJpZ2h0IChjKSAxOTk2LCAyMDA5LCBJbm5vYmFz ZSBPeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMTk5NiwgMjAxMSwgSW5u b2Jhc2UgT3kuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZQpAQCAtNzAsNyArNzAsOCBAQCBVTklWX0lOVEVSTgogdm9pZAog dHJ4X3B1cmdlX3N5c19jcmVhdGUoCiAvKj09PT09PT09PT09PT09PT09Ki8KLQl1bGludAluX3B1 cmdlX3RocmVhZHMpOwkvKiE8IGluOiBudW1iZXIgb2YgcHVyZ2UgdGhyZWFkcyAqLworCXVsaW50 CQluX3B1cmdlX3RocmVhZHMsLyohPCBpbjogbnVtYmVyIG9mIHB1cmdlIHRocmVhZHMgKi8KKwlp Yl9iaF90KglpYl9iaCk7CQkvKiE8IGluL293bjogVU5ETyBsb2cgbWluIGJpbmFyeSBoZWFwKi8K IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8vKioKIEZyZWVzIHRoZSBnbG9iYWwgcHVyZ2Ugc3lzdGVtIGNvbnRyb2wg c3RydWN0dXJlLiAqLwogVU5JVl9JTlRFUk4KQEAgLTE0MCw5ICsxNDEsMTAgQEAgc3RydWN0IHRy eF9wdXJnZV9zdHJ1Y3R7CiAJCQkJCXdvcmtlciB0aHJlYWRzICovCiAJdWxpbnQJCW5fY29tcGxl dGVkOwkvKiE8IENvdW50IG9mIHRvdGFsIHRhc2tzIGNvbXBsZXRlZCAqLwogCi0JbXV0ZXhfdAkJ bXV0ZXg7CQkvKiE8IE11dGV4IHByb3RlY3RpbmcgdGhlIGZpZWxkcwotCQkJCQliZWxvdyAqLwot CS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCS8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KKwkvKiBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgZm9ybSB0aGUgJ3B1 cmdlIHBvaW50ZXInIHdoaWNoIGFkdmFuY2VzCisJZHVyaW5nIGEgcHVyZ2UsIGFuZCB3aGljaCBp cyB1c2VkIGluIGhpc3RvcnkgbGlzdCB0cnVuY2F0aW9uICovCisKIAlwdXJnZV9pdGVyX3QJaXRl cjsJCS8qIExpbWl0IHVwIHRvIHdoaWNoIHdlIGhhdmUgcmVhZCBhbmQKIAkJCQkJcGFyc2VkIHRo ZSBVTkRPIGxvZyByZWNvcmRzLiAgTm90CiAJCQkJCW5lY2Vzc2FyaWx5IHB1cmdlZCBmcm9tIHRo ZSBpbmRleGVzLgpAQCAtMTczLDYgKzE3NSwxMSBAQCBzdHJ1Y3QgdHJ4X3B1cmdlX3N0cnVjdHsK IAltZW1faGVhcF90KgloZWFwOwkJLyohPCBUZW1wb3Jhcnkgc3RvcmFnZSB1c2VkIGR1cmluZyBh CiAJCQkJCXB1cmdlOiBjYW4gYmUgZW1wdGllZCBhZnRlciBwdXJnZQogCQkJCQljb21wbGV0ZXMg Ki8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlpYl9iaF90KglpYl9iaDsJ CS8qITwgQmluYXJ5IG1pbi1oZWFwLCBvcmRlcmVkIG9uCisJCQkJCXJzZWdfcXVldWVfdDo6dHJ4 X25vLiBJdCBpcyBwcm90ZWN0ZWQKKwkJCQkJYnkgdGhlIGJoX211dGV4ICovCisJbXV0ZXhfdAkJ YmhfbXV0ZXg7CS8qITwgTXV0ZXggcHJvdGVjdGluZyBpYl9iaCAqLwogfTsKIAogLyoqIEluZm8g cmVxdWlyZWQgdG8gcHVyZ2UgYSByZWNvcmQgKi8KQEAgLTE4MywxOSArMTkwLDYgQEAgc3RydWN0 IHRyeF9wdXJnZV9yZWNfc3RydWN0IHsKIAogdHlwZWRlZiBzdHJ1Y3QgdHJ4X3B1cmdlX3JlY19z dHJ1Y3QgdHJ4X3B1cmdlX3JlY190OwogCi0vKiogVGVzdCBpZiBwdXJnZSBtdXRleCBpcyBvd25l ZC4gKi8KLSNkZWZpbmUgcHVyZ2VfbXV0ZXhfb3duKCkgbXV0ZXhfb3duKCZwdXJnZV9zeXMtPm11 dGV4KQotCi0vKiogQWNxdWlyZSB0aGUgZmx1c2ggbGlzdCBtdXRleC4gKi8KLSNkZWZpbmUgcHVy Z2VfbXV0ZXhfZW50ZXIoKSBkbyB7CQlcCi0JbXV0ZXhfZW50ZXIoJnB1cmdlX3N5cy0+bXV0ZXgp OwkJXAotfSB3aGlsZSAoMCkKLQotLyoqIFJlbGVhc2UgdGhlIHB1cmdlIG11dGV4LiAqLwotIyBk ZWZpbmUgcHVyZ2VfbXV0ZXhfZXhpdCgpIGRvIHsJXAotCW11dGV4X2V4aXQoJnB1cmdlX3N5cy0+ bXV0ZXgpOwlcCi19IHdoaWxlICgwKQotCiAjaWZuZGVmIFVOSVZfTk9OSU5MCiAjaW5jbHVkZSAi dHJ4MHB1cmdlLmljIgogI2VuZGlmCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFz ZS9pbmNsdWRlL3RyeDByc2VnLmgnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS90cngw cnNlZy5oCTIwMTEtMDEtMTggMjE6MTQ6MjIgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5vYmFzZS9p bmNsdWRlL3RyeDByc2VnLmgJMjAxMS0wMi0yMiAwNToxMToxNSArMDAwMApAQCAtMTEzLDYgKzEx Myw3IEBAIHZvaWQKIHRyeF9yc2VnX2FycmF5X2luaXQoCiAvKj09PT09PT09PT09PT09PT0qLwog CXRyeF9zeXNmX3QqCXN5c19oZWFkZXIsCS8qITwgaW4vb3V0OiB0cnggc3lzdGVtIGhlYWRlciAq LworCWliX2JoX3QqCWliX2JoLAkJLyohPCBpbjogcnNlZyBxdWV1ZSAqLwogCW10cl90KgkJbXRy KTsJCS8qITwgaW4vb3V0OiBtdHIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIEZyZWUncyBhbiBp bnN0YW5jZSBvZiB0aGUgcm9sbGJhY2sgc2VnbWVudCBpbiBtZW1vcnkuICovCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRlL3RyeDBzeXMuaCcKLS0tIGEvc3RvcmFn ZS9pbm5vYmFzZS9pbmNsdWRlL3RyeDBzeXMuaAkyMDExLTAyLTEwIDAxOjU2OjA3ICswMDAwCisr KyBiL3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS90cngwc3lzLmgJMjAxMS0wMi0yMiAwNToxMTox NSArMDAwMApAQCAtMzgsNiArMzgsNyBAQCBDcmVhdGVkIDMvMjYvMTk5NiBIZWlra2kgVHV1cmkK ICNpbmNsdWRlICJtZW0wbWVtLmgiCiAjaW5jbHVkZSAic3luYzBzeW5jLmgiCiAjaW5jbHVkZSAi dXQwbHN0LmgiCisjaW5jbHVkZSAidXQwYmguaCIKICNpbmNsdWRlICJyZWFkMHR5cGVzLmgiCiAj aW5jbHVkZSAicGFnZTB0eXBlcy5oIgogI2luY2x1ZGUgInV0MGJoLmgiCkBAIC0xMjQsOSArMTI1 LDEwIEBAIHRyeF9zeXNfaGRyX3BhZ2UoCiAJdWxpbnQJcGFnZV9ubyk7LyohPCBpbjogcGFnZSBu dW1iZXIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8vKioKIENyZWF0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBjZW50 cmFsIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciB0aGUgdHJhbnNhY3Rpb24KLXN5c3RlbS4gVGhpcyBp cyBjYWxsZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgc3RhcnRlZC4gKi8KK3N5c3RlbS4gVGhpcyBp cyBjYWxsZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgc3RhcnRlZC4gCitAcmV0dXJuIG1pbiBiaW5h cnkgaGVhcCBvZiByc2VncyB0byBwdXJnZSAqLwogVU5JVl9JTlRFUk4KLXZvaWQKK2liX2JoX3Qq CiB0cnhfc3lzX2luaXRfYXRfZGJfc3RhcnQodm9pZCk7CiAvKj09PT09PT09PT09PT09PT09PT09 PT09PT09Ki8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8vKioKQEAgLTY5Niw5ICs2OTgsNiBAQCBzdHJ1Y3QgdHJ4X3N5 c19zdHJ1Y3R7CiAJCQkJCWxpc3QgKHVwZGF0ZSB1bmRvIGxvZ3MgZm9yIGNvbW1pdHRlZAogCQkJ CQl0cmFuc2FjdGlvbnMpLCBwcm90ZWN0ZWQgYnkKIAkJCQkJcnNlZy0+bXV0ZXggKi8KLQlpYl9i aF90KglpYl9iaDsJCS8qITwgQmluYXJ5IG1pbi1oZWFwLCBvcmRlcmVkIG9uCi0JCQkJCXJzZWdf cXVldWVfdDo6dHJ4X25vLiBJdCBpcyBwcm90ZWN0ZWQKLQkJCQkJYnkgdGhlIHB1cmdlIG11dGV4 ICovCiAJbXV0ZXhfdAkJcmVhZF92aWV3X211dGV4Oy8qITwgUHJvdGVjdHMgdGhlIHZpZXdfbGlz dCAqLwogCVVUX0xJU1RfQkFTRV9OT0RFX1QocmVhZF92aWV3X3QpIHZpZXdfbGlzdDsKIAkJCQkJ LyohPCBMaXN0IG9mIHJlYWQgdmlld3Mgc29ydGVkCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFn ZS9pbm5vYmFzZS9pbmNsdWRlL3RyeDBzeXMuaWMnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvaW5j bHVkZS90cngwc3lzLmljCTIwMTEtMDEtMjQgMTE6Mzk6MDkgKzAwMDAKKysrIGIvc3RvcmFnZS9p bm5vYmFzZS9pbmNsdWRlL3RyeDBzeXMuaWMJMjAxMS0wMi0yMiAwNToxMToxNSArMDAwMApAQCAt NTA0LDUgKzUwNCw0IEBAIHRyeF9zeXNfZ2V0X25fdHJ4KHZvaWQpCiAKIAlyZXR1cm4obl90cngp OwogfQotCiAjZW5kaWYgLyogIVVOSVZfSE9UQkFDS1VQICovCgo9PT0gYWRkZWQgZmlsZSAnc3Rv cmFnZS9pbm5vYmFzZS9pbmNsdWRlL3V0MGJoLmgnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvaW5j bHVkZS91dDBiaC5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5v YmFzZS9pbmNsdWRlL3V0MGJoLmgJMjAxMS0wMi0yMyAwNjo0ODoxNSArMDAwMApAQCAtMCwwICsx LDE1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKworQ29weXJpZ2h0IChjKSAyMDExLCBP cmFjbGUgQ29ycG4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy Cit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCitGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAordGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs ZQorUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKK0BmaWxlIGluY2x1ZGUvdXQwYmguaAor QmluYXJ5IG1pbi1oZWFwIGludGVyZmFjZS4KKworQ3JlYXRlZCAyMDEwLTA1LTI4IGJ5IFN1bm55 IEJhaW5zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisjaWZuZGVmIElOTk9CQVNFX1VUMEJIX0gKKyNkZWZpbmUgSU5OT0JBU0VfVVQw QkhfSAorCisjaW5jbHVkZSAidW5pdi5pIgorCisvKiogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Ig b2JqZWN0cyBpbiB0aGUgYmluYXJ5IGhlYXAuICovCit0eXBlZGVmIGludCAoKmliX2JoX2NtcF90 KShjb25zdCB2b2lkKiBwMSwgY29uc3Qgdm9pZCogcDIpOworCit0eXBlZGVmIHN0cnVjdCBpYl9i aF9zdHJ1Y3QgaWJfYmhfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCitHZXQgdGhlIG51bWJlciBv ZiBlbGVtZW50cyBpbiB0aGUgYmluYXJ5IGhlYXAuCitAcmV0dXJuIG51bWJlciBvZiBlbGVtZW50 cyAqLworVU5JVl9JTkxJTkUKK3VsaW50CitpYl9iaF9zaXplKAorLyo9PT09PT09Ki8KKwljb25z dCBpYl9iaF90KglpYl9iaCk7CQkJLyohPCBpbjogaW5zdGFuY2UgKi8KKworLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovLyoqCitUZXN0IGlmIGJpbmFyeSBoZWFwIGlzIGVtcHR5LgorQHJldHVybiBUUlVFIGlmIGVt cHR5LiAqLworVU5JVl9JTkxJTkUKK2lib29sCitpYl9iaF9pc19lbXB0eSgKKy8qPT09PT09PT09 PT0qLworCWNvbnN0IGliX2JoX3QqCWliX2JoKTsJCQkvKiE8IGluOiBpbnN0YW5jZSAqLworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8vKioKK1Rlc3QgaWYgYmluYXJ5IGhlYXAgaXMgZnVsbC4KK0ByZXR1cm4g VFJVRSBpZiBmdWxsLiAqLworVU5JVl9JTkxJTkUKK2lib29sCitpYl9iaF9pc19mdWxsKAorLyo9 PT09PT09PT09PSovCisJY29uc3QgaWJfYmhfdCoJaWJfYmgpOwkJCS8qITwgaW46IGluc3RhbmNl ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLy8qKgorR2V0IGEgcG9pbnRlciB0byB0aGUgZWxlbWVudC4K K0ByZXR1cm4gcG9pbnRlciB0byBlbGVtZW50ICovCitVTklWX0lOTElORQordm9pZCoKK2liX2Jo X2dldCgKKy8qPT09PT09PSovCisJaWJfYmhfdCoJaWJfYmgsCQkJLyohPCBpbjogaW5zdGFuY2Ug Ki8KKwl1bGludAkJaSk7CQkJLyohPCBpbjogaW5kZXggKi8KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoq CitDb3B5IGFuIGVsZW1lbnQgdG8gdGhlIGJpbmFyeSBoZWFwLgorQHJldHVybiBwb2ludGVyIHRv IGNvcGllZCBlbGVtZW50ICovCitVTklWX0lOTElORQordm9pZCoKK2liX2JoX3NldCgKKy8qPT09 PT09Ki8KKwlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGluL291dDogaW5zdGFuY2UgKi8KKwl1bGlu dAkJaSwJCQkvKiE8IGluOiBpbmRleCAqLworCWNvbnN0IHZvaWQqCWVsZW0pOwkJCS8qITwgaW46 IGVsZW1lbnQgdG8gYWRkICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorUmV0dXJuIHRoZSBmaXJz dCBlbGVtZW50IGZyb20gdGhlIGJpbmFyeSBoZWFwLgorQHJldHVybiBwb2ludGVyIHRvIGZpcnN0 IGVsZW1lbnQgb3IgTlVMTCBpZiBlbXB0eS4gKi8KK1VOSVZfSU5MSU5FCit2b2lkKgoraWJfYmhf Zmlyc3QoCisvKj09PT09PT09Ki8KKwlpYl9iaF90KglpYl9iaCk7CQkJLyohPCBpbjogaW5zdGFu Y2UgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovLyoqCitSZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmcm9t IHRoZSBiaW5hcnkgaGVhcC4KK0ByZXR1cm4gcG9pbnRlciB0byBsYXN0IGVsZW1lbnQgb3IgTlVM TCBpZiBlbXB0eS4gKi8KK1VOSVZfSU5MSU5FCit2b2lkKgoraWJfYmhfbGFzdCgKKy8qPT09PT09 PT0qLworCWliX2JoX3QqCWliX2JoKTsJCQkvKiE8IGluL291dDogaW5zdGFuY2UgKi8KKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovLyoqCitDcmVhdGUgYSBiaW5hcnkgaGVhcC4KK0ByZXR1cm4gYSBuZXcgYmlu YXJ5IGhlYXAgKi8KK1VOSVZfSU5URVJOCitpYl9iaF90KgoraWJfYmhfY3JlYXRlKAorLyo9PT09 PT09PT0qLworCWliX2JoX2NtcF90CWNvbXBhcmUsCQkvKiE8IGluOiBjb21wYXJhdG9yICovCisJ dWxpbnQJCXNpemVvZl9lbGVtLAkJLyohPCBpbjogc2l6ZSBvZiBvbmUgZWxlbWVudCAqLworCXVs aW50CQltYXhfZWxlbXMpOwkJLyohPCBpbjogbWF4IGVsZW1lbnRzIGFsbG93ZWQgKi8KKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovLyoqCitGcmVlIGEgYmluYXJ5IGhlYXAuCitAcmV0dXJuIGEgbmV3IGJpbmFy eSBoZWFwICovCitVTklWX0lOVEVSTgordm9pZAoraWJfYmhfZnJlZSgKKy8qPT09PT09PSovCisJ aWJfYmhfdCoJaWJfYmgpOwkJCS8qITwgaW4sb3duOiBpbnN0YW5jZSAqLworCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8vKioKK0FkZCBhbiBlbGVtZW50IHRvIHRoZSBiaW5hcnkgaGVhcC4gTm90ZTogVGhlIGVs ZW1lbnQgaXMgY29waWVkLgorQHJldHVybiBwb2ludGVyIHRvIGFkZGVkIGVsZW1lbnQgb3IgTlVM TCBpZiBmdWxsLiAqLworVU5JVl9JTlRFUk4KK3ZvaWQqCitpYl9iaF9wdXNoKAorLyo9PT09PT09 Ki8KKwlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGluL291dDogaW5zdGFuY2UgKi8KKwljb25zdCB2 b2lkKgllbGVtKTsJCQkvKiE8IGluOiBlbGVtZW50IHRvIGFkZCAqLworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8vKioKK1JlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIHRoZSBiaW5hcnkgaGVhcC4gKi8K K1VOSVZfSU5URVJOCit2b2lkCitpYl9iaF9wb3AoCisvKj09PT09PSovCisJaWJfYmhfdCoJaWJf YmgpOwkJCS8qITwgaW4vb3V0OiBpbnN0YW5jZSAqLworCisvKiogQmluYXJ5IGhlYXAgZGF0YSBz dHJ1Y3R1cmUgKi8KK3N0cnVjdCBpYl9iaF9zdHJ1Y3QgeworCXVsaW50CQltYXhfZWxlbXM7CQkv KiE8IG1heCBlbGVtZW50cyBhbGxvd2VkICovCisJdWxpbnQJCW5fZWxlbXM7CQkvKiE8IGN1cnJl bnQgc2l6ZSAqLworCXVsaW50CQlzaXplb2ZfZWxlbTsJCS8qITwgc2l6ZW9mIGVsZW1lbnQgKi8K KwlpYl9iaF9jbXBfdAljb21wYXJlOwkJLyohPCBjb21wYXJhdG9yICovCit9OworCisjaWZuZGVm IFVOSVZfTk9OSU5MCisjaW5jbHVkZSAidXQwYmguaWMiCisjZW5kaWYKKworI2VuZGlmIC8qIElO Tk9CQVNFX1VUMEJIX0ggKi8KCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvaW5ub2Jhc2UvaW5j bHVkZS91dDBiaC5oJwotLS0gYS9zdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvdXQwYmguaAkyMDEw LTA2LTE1IDAzOjQ4OjM0ICswMDAwCisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS91dDBi aC5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKQEAgLTEsMTQ1ICswLDAgQEAKLS8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovLyoqCi0KLUNvcHlyaWdodCAoYykgMjAxMCwgT3JhY2xlIENvcnBuLiBBbGwg UmlnaHRzIFJlc2VydmVkLgotCi1Qb3J0aW9ucyBvZiB0aGlzIGZpbGUgY29udGFpbiBtb2RpZmlj YXRpb25zIGNvbnRyaWJ1dGVkIGFuZCBjb3B5cmlnaHRlZCBieQotU3VuIE1pY3Jvc3lzdGVtcywg SW5jLiBUaG9zZSBtb2RpZmljYXRpb25zIGFyZSBncmF0ZWZ1bGx5IGFja25vd2xlZGdlZCBhbmQK LWFyZSBkZXNjcmliZWQgYnJpZWZseSBpbiB0aGUgSW5ub0RCIGRvY3VtZW50YXRpb24uIFRoZSBj b250cmlidXRpb25zIGJ5Ci1TdW4gTWljcm9zeXN0ZW1zIGFyZSBpbmNvcnBvcmF0ZWQgd2l0aCB0 aGVpciBwZXJtaXNzaW9uLCBhbmQgc3ViamVjdCB0byB0aGUKLWNvbmRpdGlvbnMgY29udGFpbmVk IGluIHRoZSBmaWxlIENPUFlJTkcuU3VuX01pY3Jvc3lzdGVtcy4KLQotVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQg dW5kZXIKLXRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UuCi0KLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKLUZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi10aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg VGVtcGxlCi1QbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0KLSoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotQGZpbGUgaW5jbHVkZS91dDBi aC5oCi1CaW5hcnkgbWluLWhlYXAgaW50ZXJmYWNlLgotCi1DcmVhdGVkIDIwMTAtMDUtMjggYnkg U3VubnkgQmFpbnMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0KLSNpZm5kZWYgSU5OT0JBU0VfVVQwQkhfSAotI2RlZmluZSBJTk5PQkFT RV9VVDBCSF9ICi0KLSNpbmNsdWRlICJ1bml2LmkiCi0KLXR5cGVkZWYgaW50ICgqaWJfYmhfY21w X3QpKGNvbnN0IHZvaWQqIHAxLCBjb25zdCB2b2lkKiBwMik7Ci0KLXR5cGVkZWYgc3RydWN0IGli X2JoX3N0cnVjdCBpYl9iaF90OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLUdldCB0aGUgbnVtYmVy IG9mIGVsZW1lbnRzIGluIHRoZSBiaW5hcnkgaGVhcC4KLUByZXR1cm4gbnVtYmVyIG9mIGVsZW1l bnRzICovCi1VTklWX0lOVEVSTgotdWxpbnQKLWliX2JoX3NpemUoCi0vKj09PT09PT0qLwotCWNv bnN0IGliX2JoX3QqCWliX2JoKTsJCQkvKiE8IGluOiBpbnN0YW5jZSAqLwotCi0vKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8vKioKLVRlc3QgaWYgYmluYXJ5IGhlYXAgaXMgZW1wdHkuCi1AcmV0dXJuIFRSVUUgaWYg ZW1wdHkuICovCi1VTklWX0lOVEVSTgotaWJvb2wKLWliX2JoX2lzX2VtcHR5KAotLyo9PT09PT09 PT09PSovCi0JY29uc3QgaWJfYmhfdCoJaWJfYmgpOwkJCS8qITwgaW46IGluc3RhbmNlICovCi0K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLy8qKgotVGVzdCBpZiBiaW5hcnkgaGVhcCBpcyBmdWxsLgotQHJldHVy biBUUlVFIGlmIGZ1bGwuICovCi1VTklWX0lOVEVSTgotaWJvb2wKLWliX2JoX2lzX2Z1bGwoCi0v Kj09PT09PT09PT09Ki8KLQljb25zdCBpYl9iaF90KglpYl9iaCk7CQkJLyohPCBpbjogaW5zdGFu Y2UgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovLyoqCi1HZXQgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50 LgotQHJldHVybiBwb2ludGVyIHRvIGVsZW1lbnQgKi8KLVVOSVZfSU5URVJOCi12b2lkKgotaWJf YmhfZ2V0KAotLyo9PT09PT09Ki8KLQlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGluOiBpbnN0YW5j ZSAqLwotCXVsaW50CQlpKTsJCQkvKiE8IGluOiBpbmRleCAqLwotCi0vKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8v KioKLUNvcHkgYW4gZWxlbWVudCB0byB0aGUgYmluYXJ5IGhlYXAuCi1AcmV0dXJuIHBvaW50ZXIg dG8gY29waWVkIGVsZW1lbnQgKi8KLVVOSVZfSU5URVJOCi12b2lkKgotaWJfYmhfc2V0KAotLyo9 PT09PT0qLwotCWliX2JoX3QqCWliX2JoLAkJCS8qITwgaW4sb3V0OiBpbnN0YW5jZSAqLwotCXVs aW50CQlpLAkJCS8qITwgaW46IGluZGV4ICovCi0JY29uc3Qgdm9pZCoJZWxlbSk7CQkJLyohPCBp bjogZWxlbWVudCB0byBhZGQgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCi1DcmVhdGUgYSBiaW5h cnkgaGVhcC4KLUByZXR1cm4gYSBuZXcgYmluYXJ5IGhlYXAgKi8KLVVOSVZfSU5URVJOCi1pYl9i aF90KgotaWJfYmhfY3JlYXRlKAotLyo9PT09PT09PT0qLwotCWliX2JoX2NtcF90CWNvbXBhcmUs CQkvKiE8IGluOiBjb21wYXJhdG9yICovCi0JdWxpbnQJCXNpemVvZl9lbGVtLAkJLyohPCBpbjog c2l6ZSBvZiBvbmUgZWxlbWVudCAqLwotCXVsaW50CQltYXhfZWxlbXMpOwkJLyohPCBpbjogbWF4 IGVsZW1lbnRzIGFsbG93ZWQgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCi1GcmVlIGEgYmluYXJ5 IGhlYXAuCi1AcmV0dXJuIGEgbmV3IGJpbmFyeSBoZWFwICovCi1VTklWX0lOVEVSTgotdm9pZAot aWJfYmhfZnJlZSgKLS8qPT09PT09PSovCi0JaWJfYmhfdCoJaWJfYmgpOwkJCS8qITwgaW4sb3du OiBpbnN0YW5jZSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLUFkZCBhbiBlbGVtZW50IHRvIHRo ZSBiaW5hcnkgaGVhcC4gTm90ZTogVGhlIGVsZW1lbnQgaXMgY29waWVkLgotQHJldHVybiBwb2lu dGVyIHRvIGFkZGVkIGVsZW1lbnQgb3IgTlVMTCBpZiBmdWxsLiAqLwotVU5JVl9JTlRFUk4KLXZv aWQqCi1pYl9iaF9wdXNoKAotLyo9PT09PT09Ki8KLQlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGlu LG91dDogaW5zdGFuY2UgKi8KLQljb25zdCB2b2lkKgllbGVtKTsJCQkvKiE8IGluOiBlbGVtZW50 IHRvIGFkZCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLVJldHVybiB0aGUgZmlyc3QgZWxlbWVu dCBmcm9tIHRoZSBiaW5hcnkgaGVhcC4gCi1AcmV0dXJuIHBvaW50ZXIgdG8gZmlyc3QgZWxlbWVu dCBvciBOVUxMIGlmIGVtcHR5LiAqLwotVU5JVl9JTlRFUk4KLXZvaWQqCi1pYl9iaF9maXJzdCgK LS8qPT09PT09PT0qLwotCWliX2JoX3QqCWliX2JoKTsJCQkvKiE8IGluLG91dDogaW5zdGFuY2Ug Ki8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovLyoqCi1SZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRo ZSBiaW5hcnkgaGVhcC4gCi1AcmV0dXJuIHBvaW50ZXIgdG8gbGFzdCBlbGVtZW50IG9yIE5VTEwg aWYgZW1wdHkuICovCi1VTklWX0lOVEVSTgotdm9pZCoKLWliX2JoX2xhc3QoCi0vKj09PT09PT09 Ki8KLQlpYl9iaF90KglpYl9iaCk7CQkJLyohPCBpbixvdXQ6IGluc3RhbmNlICovCi0KLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLy8qKgotUmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gdGhlIGJpbmFyeSBo ZWFwLiAqLwotVU5JVl9JTlRFUk4KLXZvaWQKLWliX2JoX3BvcCgKLS8qPT09PT09Ki8KLQlpYl9i aF90KglpYl9iaCk7CQkJLyohPCBpbixvdXQ6IGluc3RhbmNlICovCi0KLSNlbmRpZiAvKiBJTk5P QkFTRV9VVDBCSF9IICovCgo9PT0gYWRkZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRl L3V0MGJoLmljJwotLS0gYS9zdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvdXQwYmguaWMJMTk3MC0w MS0wMSAwMDowMDowMCArMDAwMAorKysgYi9zdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvdXQwYmgu aWMJMjAxMS0wMi0yMiAyMDoyNDozNCArMDAwMApAQCAtMCwwICsxLDEyNSBAQAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8vKioKK0NvcHlyaWdodCAoYykgMjAxMSwgT3JhY2xlIENvcnBuLiBBbGwgUmln aHRzIFJlc2VydmVkLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUKK0ZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKworVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCitBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nIHdpdGgKK3RoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKK1BsYWNlLCBTdWl0ZSAzMzAs IEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovLyoqCitAZmlsZSBpbmNsdWRlL3V0MGJoLmljCitCaW5hcnkgbWluLWhlYXAgaW1w bGVtZW50YXRpb24uCisKK0NyZWF0ZWQgMjAxMS0wMS0xNSBieSBTdW5ueSBCYWlucworKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lu Y2x1ZGUgInV0MGJoLmgiCisjaW5jbHVkZSAidXQwbWVtLmgiCS8qIEZvciB1dF9tZW1jcHkoKSAq LworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8vKioKK0dldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRo ZSBiaW5hcnkgaGVhcC4KK0ByZXR1cm4gbnVtYmVyIG9mIGVsZW1lbnRzICovCitVTklWX0lOTElO RQordWxpbnQKK2liX2JoX3NpemUoCisvKj09PT09PT0qLworCWNvbnN0IGliX2JoX3QqCWliX2Jo KQkJCS8qITwgaW46IGluc3RhbmNlICovCit7CisJcmV0dXJuKGliX2JoLT5uX2VsZW1zKTsKK30K KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovLyoqCitUZXN0IGlmIGJpbmFyeSBoZWFwIGlzIGVtcHR5LgorQHJl dHVybiBUUlVFIGlmIGVtcHR5LiAqLworVU5JVl9JTkxJTkUKK2lib29sCitpYl9iaF9pc19lbXB0 eSgKKy8qPT09PT09PT09PT0qLworCWNvbnN0IGliX2JoX3QqCWliX2JoKQkJCS8qITwgaW46IGlu c3RhbmNlICovCit7CisJcmV0dXJuKGliX2JoX3NpemUoaWJfYmgpID09IDApOworfQorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8vKioKK1Rlc3QgaWYgYmluYXJ5IGhlYXAgaXMgZnVsbC4KK0ByZXR1cm4gVFJV RSBpZiBmdWxsLiAqLworVU5JVl9JTkxJTkUKK2lib29sCitpYl9iaF9pc19mdWxsKAorLyo9PT09 PT09PT09PSovCisJY29uc3QgaWJfYmhfdCoJaWJfYmgpCQkJLyohPCBpbjogaW5zdGFuY2UgKi8K K3sKKwlyZXR1cm4oaWJfYmhfc2l6ZShpYl9iaCkgPj0gaWJfYmgtPm1heF9lbGVtcyk7Cit9CisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLy8qKgorR2V0IGEgcG9pbnRlciB0byB0aGUgZWxlbWVudC4KK0ByZXR1 cm4gcG9pbnRlciB0byBlbGVtZW50ICovCitVTklWX0lOTElORQordm9pZCoKK2liX2JoX2dldCgK Ky8qPT09PT09PSovCisJaWJfYmhfdCoJaWJfYmgsCQkJLyohPCBpbjogaW5zdGFuY2UgKi8KKwl1 bGludAkJaSkJCQkvKiE8IGluOiBpbmRleCAqLworeworCWJ5dGUqCQlwdHIgPSAoYnl0ZSopIChp Yl9iaCArIDEpOworCisJdXRfYShpIDwgaWJfYmhfc2l6ZShpYl9iaCkpOworCisJcmV0dXJuKHB0 ciArIChpYl9iaC0+c2l6ZW9mX2VsZW0gKiBpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgor Q29weSBhbiBlbGVtZW50IHRvIHRoZSBiaW5hcnkgaGVhcC4KK0ByZXR1cm4gcG9pbnRlciB0byBj b3BpZWQgZWxlbWVudCAqLworVU5JVl9JTkxJTkUKK3ZvaWQqCitpYl9iaF9zZXQoCisvKj09PT09 PSovCisJaWJfYmhfdCoJaWJfYmgsCQkJLyohPCBpbi9vdXQ6IGluc3RhbmNlICovCisJdWxpbnQJ CWksCQkJLyohPCBpbjogaW5kZXggKi8KKwljb25zdCB2b2lkKgllbGVtKQkJCS8qITwgaW46IGVs ZW1lbnQgdG8gYWRkICovCit7CisJdm9pZCoJCXB0ciA9IGliX2JoX2dldChpYl9iaCwgaSk7CisK Kwl1dF9tZW1jcHkocHRyLCBlbGVtLCBpYl9iaC0+c2l6ZW9mX2VsZW0pOworCisJcmV0dXJuKHB0 cik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorUmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGZy b20gdGhlIGJpbmFyeSBoZWFwLgorQHJldHVybiBwb2ludGVyIHRvIGZpcnN0IGVsZW1lbnQgb3Ig TlVMTCBpZiBlbXB0eS4gKi8KK1VOSVZfSU5MSU5FCit2b2lkKgoraWJfYmhfZmlyc3QoCisvKj09 PT09PT09Ki8KKwlpYl9iaF90KglpYl9iaCkJCQkvKiE8IGluOiBpbnN0YW5jZSAqLworeworCXJl dHVybihpYl9iaF9pc19lbXB0eShpYl9iaCkgPyBOVUxMIDogaWJfYmhfZ2V0KGliX2JoLCAwKSk7 Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLy8qKgorUmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZnJvbSB0 aGUgYmluYXJ5IGhlYXAuCitAcmV0dXJuIHBvaW50ZXIgdG8gbGFzdCBlbGVtZW50IG9yIE5VTEwg aWYgZW1wdHkuICovCitVTklWX0lOTElORQordm9pZCoKK2liX2JoX2xhc3QoCisvKj09PT09PT09 Ki8KKwlpYl9iaF90KglpYl9iaCkJCQkvKiE8IGluL291dDogaW5zdGFuY2UgKi8KK3sKKwlyZXR1 cm4oaWJfYmhfaXNfZW1wdHkoaWJfYmgpCisJCT8gTlVMTAorCQk6IGliX2JoX2dldChpYl9iaCwg aWJfYmhfc2l6ZShpYl9iaCkgLSAxKSk7Cit9CisKKwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvaW5ub2Jhc2Uvc3J2L3NydjBzcnYuYycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9zcnYvc3J2 MHNydi5jCTIwMTEtMDItMTcgMTQ6MDY6MDkgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5vYmFzZS9z cnYvc3J2MHNydi5jCTIwMTEtMDItMjIgMTA6MDA6MDcgKzAwMDAKQEAgLTI0OCw5ICsyNDgsMTIg QEAgVU5JVl9JTlRFUk4gdWxvbmcJc3J2X21heF9idWZfcG9vbF9tb2RpZgogLyogdGhlIG51bWJl ciBvZiBwdXJnZSB0aHJlYWRzIHRvIHVzZSBmcm9tIHRoZSB3b3JrZXIgcG9vbCAoY3VycmVudGx5 IDAgb3IgMSkuKi8KIFVOSVZfSU5URVJOIHVsb25nIHNydl9uX3B1cmdlX3RocmVhZHMgPSAwOwog Ci0vKiB0aGUgbnVtYmVyIG9mIFVORE8gbG9nIHBhZ2VzIHRvIHB1cmdlIGluIG9uZSBiYXRjaCAq LworLyogdGhlIG51bWJlciBvZiBwYWdlcyB0byBwdXJnZSBpbiBvbmUgYmF0Y2ggKi8KIFVOSVZf SU5URVJOIHVsb25nIHNydl9wdXJnZV9iYXRjaF9zaXplID0gMjA7CiAKKy8qIHRoZSBudW1iZXIg b2Ygcm9sbGJhY2sgc2VnbWVudHMgdG8gdXNlICovCitVTklWX0lOVEVSTiB1bG9uZyBzcnZfcm9s bGJhY2tfc2VnbWVudHMgPSBUUlhfU1lTX05fUlNFR1M7CisKIC8qIHZhcmlhYmxlIGNvdW50cyBh bW91bnQgb2YgZGF0YSByZWFkIGluIHRvdGFsIChpbiBieXRlcykgKi8KIFVOSVZfSU5URVJOIHVs aW50IHNydl9kYXRhX3JlYWQgPSAwOwogCkBAIC0yNjM5LDcgKzI2NDIsNyBAQCBzcnZfdGFza19l eGVjdXRlKHZvaWQpCiAKIAl1dF9hKHNydl9mb3JjZV9yZWNvdmVyeSA8IFNSVl9GT1JDRV9OT19C QUNLR1JPVU5EKTsKIAotCW9zX2F0b21pY19pbmNfdWxpbnQoJnB1cmdlX3N5cy0+bXV0ZXgsICZw dXJnZV9zeXMtPm5fZXhlY3V0aW5nLCAxKTsKKwlvc19hdG9taWNfaW5jX3VsaW50KCZwdXJnZV9z eXMtPmJoX211dGV4LCAmcHVyZ2Vfc3lzLT5uX2V4ZWN1dGluZywgMSk7CiAKIAltdXRleF9lbnRl cigmc3J2X3N5cy0+dGFza3NfbXV0ZXgpOwogCkBAIC0yNjU5LDEwICsyNjYyLDEwIEBAIHNydl90 YXNrX2V4ZWN1dGUodm9pZCkKIAkJcXVlX3J1bl90aHJlYWRzKHRocik7CiAKIAkJb3NfYXRvbWlj X2luY191bGludCgKLQkJCSZwdXJnZV9zeXMtPm11dGV4LCAmcHVyZ2Vfc3lzLT5uX2NvbXBsZXRl ZCwgMSk7CisJCQkmcHVyZ2Vfc3lzLT5iaF9tdXRleCwgJnB1cmdlX3N5cy0+bl9jb21wbGV0ZWQs IDEpOwogCX0KIAotCW9zX2F0b21pY19kZWNfdWxpbnQoJnB1cmdlX3N5cy0+bXV0ZXgsICZwdXJn ZV9zeXMtPm5fZXhlY3V0aW5nLCAxKTsKKwlvc19hdG9taWNfZGVjX3VsaW50KCZwdXJnZV9zeXMt PmJoX211dGV4LCAmcHVyZ2Vfc3lzLT5uX2V4ZWN1dGluZywgMSk7CiAKIAlyZXR1cm4odGhyICE9 IE5VTEwpOwogfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvaW5ub2Jhc2Uvc3J2L3NydjBz dGFydC5jJwotLS0gYS9zdG9yYWdlL2lubm9iYXNlL3Nydi9zcnYwc3RhcnQuYwkyMDExLTAyLTE1 IDA5OjQwOjM0ICswMDAwCisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2Uvc3J2L3NydjBzdGFydC5jCTIw MTEtMDItMjIgMDU6MTE6MTUgKzAwMDAKQEAgLTEwMTUsNiArMTAxNSw4IEBAIGlubm9iYXNlX3N0 YXJ0X29yX2NyZWF0ZV9mb3JfbXlzcWwodm9pZCkKIAlteV9ib29sCQlzcnZfZmlsZV9wZXJfdGFi bGVfb3JpZ2luYWxfdmFsdWUKIAkJPSBzcnZfZmlsZV9wZXJfdGFibGU7CiAJbXRyX3QJCW10cjsK KwlpYl9iaF90KglpYl9iaDsKKwogI2lmZGVmIEhBVkVfREFSV0lOX1RIUkVBRFMKICMgaWZkZWYg Rl9GVUxMRlNZTkMKIAkvKiBUaGlzIGV4ZWN1dGFibGUgaGFzIGJlZW4gY29tcGlsZWQgb24gTWFj IE9TIFggMTAuMyBvciBsYXRlci4KQEAgLTE2MjgsMTIgKzE2MzAsMTIgQEAgaW5ub2Jhc2Vfc3Rh cnRfb3JfY3JlYXRlX2Zvcl9teXNxbCh2b2lkKQogCQlhZnRlciB0aGUgZG91YmxlIHdyaXRlIGJ1 ZmZlciBoYXMgYmVlbiBjcmVhdGVkLiAqLwogCQl0cnhfc3lzX2NyZWF0ZV9zeXNfcGFnZXMoKTsK IAotCQl0cnhfc3lzX2luaXRfYXRfZGJfc3RhcnQoKTsKKwkJaWJfYmggPSB0cnhfc3lzX2luaXRf YXRfZGJfc3RhcnQoKTsKIAogCQkvKiBUaGUgcHVyZ2Ugc3lzdGVtIG5lZWRzIHRvIGNyZWF0ZSB0 aGUgcHVyZ2UgdmlldyBhbmQKIAkJdGhlcmVmb3JlIHJlcXVpcmVzIHRoYXQgdGhlIHRyeF9zeXMg aXMgaW5pdGVkLiAqLwogCi0JCXRyeF9wdXJnZV9zeXNfY3JlYXRlKHNydl9uX3B1cmdlX3RocmVh ZHMpOworCQl0cnhfcHVyZ2Vfc3lzX2NyZWF0ZShzcnZfbl9wdXJnZV90aHJlYWRzLCBpYl9iaCk7 CiAKIAkJZGljdF9jcmVhdGUoKTsKIApAQCAtMTY1NywxMiArMTY1OSwxMiBAQCBpbm5vYmFzZV9z dGFydF9vcl9jcmVhdGVfZm9yX215c3FsKHZvaWQpCiAKIAkJZGljdF9ib290KCk7CiAKLQkJdHJ4 X3N5c19pbml0X2F0X2RiX3N0YXJ0KCk7CisJCWliX2JoID0gdHJ4X3N5c19pbml0X2F0X2RiX3N0 YXJ0KCk7CiAKIAkJLyogVGhlIHB1cmdlIHN5c3RlbSBuZWVkcyB0byBjcmVhdGUgdGhlIHB1cmdl IHZpZXcgYW5kCiAJCXRoZXJlZm9yZSByZXF1aXJlcyB0aGF0IHRoZSB0cnhfc3lzIGlzIGluaXRl ZC4gKi8KIAotCQl0cnhfcHVyZ2Vfc3lzX2NyZWF0ZShzcnZfbl9wdXJnZV90aHJlYWRzKTsKKwkJ dHJ4X3B1cmdlX3N5c19jcmVhdGUoc3J2X25fcHVyZ2VfdGhyZWFkcywgaWJfYmgpOwogCiAJCXNy dl9zdGFydHVwX2lzX2JlZm9yZV90cnhfcm9sbGJhY2tfcGhhc2UgPSBGQUxTRTsKIApAQCAtMTcy MCwxMiArMTcyMiwxMiBAQCBpbm5vYmFzZV9zdGFydF9vcl9jcmVhdGVfZm9yX215c3FsKHZvaWQp CiAKIAkJZGljdF9ib290KCk7CiAKLQkJdHJ4X3N5c19pbml0X2F0X2RiX3N0YXJ0KCk7CisJCWli X2JoID0gdHJ4X3N5c19pbml0X2F0X2RiX3N0YXJ0KCk7CiAKIAkJLyogVGhlIHB1cmdlIHN5c3Rl bSBuZWVkcyB0byBjcmVhdGUgdGhlIHB1cmdlIHZpZXcgYW5kCiAJCXRoZXJlZm9yZSByZXF1aXJl cyB0aGF0IHRoZSB0cnhfc3lzIGlzIGluaXRlZC4gKi8KIAotCQl0cnhfcHVyZ2Vfc3lzX2NyZWF0 ZShzcnZfbl9wdXJnZV90aHJlYWRzKTsKKwkJdHJ4X3B1cmdlX3N5c19jcmVhdGUoc3J2X25fcHVy Z2VfdGhyZWFkcywgaWJfYmgpOwogCiAJCS8qIEluaXRpYWxpemUgdGhlIGZzcCBmcmVlIGxpbWl0 IGdsb2JhbCB2YXJpYWJsZSBpbiB0aGUgbG9nCiAJCXN5c3RlbSAqLwoKPT09IG1vZGlmaWVkIGZp bGUgJ3N0b3JhZ2UvaW5ub2Jhc2Uvc3luYy9zeW5jMHN5bmMuYycKLS0tIGEvc3RvcmFnZS9pbm5v YmFzZS9zeW5jL3N5bmMwc3luYy5jCTIwMTEtMDItMTUgMDk6NDA6MzQgKzAwMDAKKysrIGIvc3Rv cmFnZS9pbm5vYmFzZS9zeW5jL3N5bmMwc3luYy5jCTIwMTEtMDItMjIgMDU6MTE6MTUgKzAwMDAK QEAgLTExNzYsNyArMTE3Niw3IEBAIHN5bmNfdGhyZWFkX2FkZF9sZXZlbCgKIAljYXNlIFNZTkNf UlNFRzoKIAljYXNlIFNZTkNfVFJYX1VORE86CiAJY2FzZSBTWU5DX1BVUkdFX0xBVENIOgotCWNh c2UgU1lOQ19QVVJHRV9TWVM6CisJY2FzZSBTWU5DX1BVUkdFX1FVRVVFOgogCWNhc2UgU1lOQ19E SUNUX0FVVE9JTkNfTVVURVg6CiAJY2FzZSBTWU5DX0RJQ1RfT1BFUkFUSU9OOgogCWNhc2UgU1lO Q19ESUNUX0hFQURFUjoKQEAgLTEyNTgsMTAgKzEyNTgsMTYgQEAgc3luY190aHJlYWRfYWRkX2xl dmVsKAogCQkgICAgIHx8IHN5bmNfdGhyZWFkX2xldmVsc19nKGFycmF5LCBTWU5DX0ZTUCwgVFJV RSkpOwogCQlicmVhazsKIAljYXNlIFNZTkNfVFJYX1VORE9fUEFHRToKKwkJLyogUHVyZ2UgaXMg YWxsb3dlZCB0byByZWFkIGluIGFzIG1hbnkgVU5ETyBwYWdlcyBhcyBpdCBsaWtlcywKKwkJdGhl cmUgd2FzIGEgYm9ndXMgcnVsZSBoZXJlIGVhcmxpZXIgdGhhdCBmb3JjZWQgdGhlIGNhbGxlciB0 bworCQlhY3F1aXJlIHRoZSBwdXJnZV9zeXNfdDo6bXV0ZXguIFRoZSBwdXJnZSBtdXRleCBkaWQg bm90IHJlYWxseQorCQlwcm90ZWN0IGFueXRoaW5nIGJlY2F1c2UgaXQgd2FzIG9ubHkgZXZlciBh Y3F1aXJlZCBieSB0aGUKKwkJc2luZ2xlIHB1cmdlIHRocmVhZC4gVGhlIHB1cmdlIHRocmVhZCBj YW4gcmVhZCB0aGUgVU5ETyBwYWdlcworCQl3aXRob3V0IGFueSBjb3ZlcmluZyBtdXRleC4gKi8K KwogCQl1dF9hKHN5bmNfdGhyZWFkX2xldmVsc19jb250YWluKGFycmF5LCBTWU5DX1RSWF9VTkRP KQogCQkgICAgIHx8IHN5bmNfdGhyZWFkX2xldmVsc19jb250YWluKGFycmF5LCBTWU5DX1JTRUcp Ci0JCSAgICAgfHwgc3luY190aHJlYWRfbGV2ZWxzX2NvbnRhaW4oYXJyYXksIFNZTkNfUFVSR0Vf U1lTKQotCQkgICAgIHx8IHN5bmNfdGhyZWFkX2xldmVsc19nKGFycmF5LCBTWU5DX1RSWF9VTkRP X1BBR0UsIFRSVUUpKTsKKwkJICAgICB8fCBzeW5jX3RocmVhZF9sZXZlbHNfZyhhcnJheSwgbGV2 ZWwgLSAxLCBUUlVFKSk7CiAJCWJyZWFrOwogCWNhc2UgU1lOQ19SU0VHX0hFQURFUjoKIAkJdXRf YShzeW5jX3RocmVhZF9sZXZlbHNfY29udGFpbihhcnJheSwgU1lOQ19SU0VHKSk7Cgo9PT0gbW9k aWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS90cngvdHJ4MHB1cmdlLmMnCi0tLSBhL3N0b3Jh Z2UvaW5ub2Jhc2UvdHJ4L3RyeDBwdXJnZS5jCTIwMTEtMDItMTcgMTQ6MDY6MDkgKzAwMDAKKysr IGIvc3RvcmFnZS9pbm5vYmFzZS90cngvdHJ4MHB1cmdlLmMJMjAxMS0wMi0yMiAwNToxMToxNSAr MDAwMApAQCAtNjIsOCArNjIsOCBAQCBVTklWX0lOVEVSTiBteXNxbF9wZnNfa2V5X3QJdHJ4X3B1 cmdlX2xhCiAjZW5kaWYgLyogVU5JVl9QRlNfUldMT0NLICovCiAKICNpZmRlZiBVTklWX1BGU19N VVRFWAotLyogS2V5IHRvIHJlZ2lzdGVyIHB1cmdlX3N5c19tdXRleCB3aXRoIHBlcmZvcm1hbmNl IHNjaGVtYSAqLwotVU5JVl9JTlRFUk4gbXlzcWxfcGZzX2tleV90CXB1cmdlX3N5c19tdXRleF9r ZXk7CisvKiBLZXkgdG8gcmVnaXN0ZXIgcHVyZ2Vfc3lzX2JoX211dGV4IHdpdGggcGVyZm9ybWFu Y2Ugc2NoZW1hICovCitVTklWX0lOVEVSTiBteXNxbF9wZnNfa2V5X3QJcHVyZ2Vfc3lzX2JoX211 dGV4X2tleTsKICNlbmRpZiAvKiBVTklWX1BGU19NVVRFWCAqLwogCiAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoq CkBAIC0xMzcsMTUgKzEzNywyMiBAQCBVTklWX0lOVEVSTgogdm9pZAogdHJ4X3B1cmdlX3N5c19j cmVhdGUoCiAvKj09PT09PT09PT09PT09PT09Ki8KLQl1bGludAluX3B1cmdlX3RocmVhZHMpCS8q ITwgaW46IG51bWJlciBvZiBwdXJnZSB0aHJlYWRzICovCisJdWxpbnQJCW5fcHVyZ2VfdGhyZWFk cywJLyohPCBpbjogbnVtYmVyIG9mIHB1cmdlCisJCQkJCQl0aHJlYWRzICovCisJaWJfYmhfdCoJ aWJfYmgpCQkJLyohPCBpbiwgb3duOiBVTkRPIGxvZyBtaW4KKwkJCQkJCWJpbmFyeSBoZWFwICov CiB7CiAJcHVyZ2Vfc3lzID0gbWVtX3phbGxvYyhzaXplb2YoKnB1cmdlX3N5cykpOwogCisJLyog VGFrZSBvd25lcnNoaXAgb2YgaWJfYmgsIHdlIGFyZSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBp dC4gKi8KKwlwdXJnZV9zeXMtPmliX2JoID0gaWJfYmg7CisKIAlyd19sb2NrX2NyZWF0ZSh0cnhf cHVyZ2VfbGF0Y2hfa2V5LAogCQkgICAgICAgJnB1cmdlX3N5cy0+bGF0Y2gsIFNZTkNfUFVSR0Vf TEFUQ0gpOwogCi0JbXV0ZXhfY3JlYXRlKHB1cmdlX3N5c19tdXRleF9rZXksCi0JCSAgICAgJnB1 cmdlX3N5cy0+bXV0ZXgsIFNZTkNfUFVSR0VfU1lTKTsKKwltdXRleF9jcmVhdGUoCisJCXB1cmdl X3N5c19iaF9tdXRleF9rZXksICZwdXJnZV9zeXMtPmJoX211dGV4LAorCQlTWU5DX1BVUkdFX1FV RVVFKTsKIAogCXB1cmdlX3N5cy0+aGVhcCA9IG1lbV9oZWFwX2NyZWF0ZSgyNTYpOwogCkBAIC0x OTksOSArMjA2LDEyIEBAIHRyeF9wdXJnZV9zeXNfY2xvc2Uodm9pZCkKIAl9CiAKIAlyd19sb2Nr X2ZyZWUoJnB1cmdlX3N5cy0+bGF0Y2gpOwotCW11dGV4X2ZyZWUoJnB1cmdlX3N5cy0+bXV0ZXgp OworCW11dGV4X2ZyZWUoJnB1cmdlX3N5cy0+YmhfbXV0ZXgpOwogCiAJbWVtX2hlYXBfZnJlZShw dXJnZV9zeXMtPmhlYXApOworCisJaWJfYmhfZnJlZShwdXJnZV9zeXMtPmliX2JoKTsKKwogCW1l bV9mcmVlKHB1cmdlX3N5cyk7CiAKIAlwdXJnZV9zeXMgPSBOVUxMOwpAQCAtMjI0LDMwICsyMzQs MjggQEAgdHJ4X3B1cmdlX2FkZF91cGRhdGVfdW5kb190b19oaXN0b3J5KAogCXRyeF91bmRvX3Qq CXVuZG87CiAJdHJ4X3JzZWdfdCoJcnNlZzsKIAl0cnhfcnNlZ2ZfdCoJcnNlZ19oZWFkZXI7Ci0J dHJ4X3VzZWdmX3QqCXNlZ19oZWFkZXI7CiAJdHJ4X3Vsb2dmX3QqCXVuZG9faGVhZGVyOwogCXRy eF91cGFnZWZfdCoJcGFnZV9oZWFkZXI7Ci0JdWxpbnQJCWhpc3Rfc2l6ZTsKIAogCXVuZG8gPSB0 cngtPnVwZGF0ZV91bmRvOwotCi0JdXRfYWQodW5kbyk7Ci0KIAlyc2VnID0gdW5kby0+cnNlZzsK IAotCXV0X2FkKG11dGV4X293bigmKHJzZWctPm11dGV4KSkpOwotCi0JcnNlZ19oZWFkZXIgPSB0 cnhfcnNlZ2ZfZ2V0KHJzZWctPnNwYWNlLCByc2VnLT56aXBfc2l6ZSwKLQkJCQkgICAgcnNlZy0+ cGFnZV9ubywgbXRyKTsKKwlyc2VnX2hlYWRlciA9IHRyeF9yc2VnZl9nZXQoCisJCXVuZG8tPnJz ZWctPnNwYWNlLCB1bmRvLT5yc2VnLT56aXBfc2l6ZSwgdW5kby0+cnNlZy0+cGFnZV9ubywKKwkJ bXRyKTsKIAogCXVuZG9faGVhZGVyID0gdW5kb19wYWdlICsgdW5kby0+aGRyX29mZnNldDsKLQlz ZWdfaGVhZGVyICA9IHVuZG9fcGFnZSArIFRSWF9VTkRPX1NFR19IRFI7CiAJcGFnZV9oZWFkZXIg PSB1bmRvX3BhZ2UgKyBUUlhfVU5ET19QQUdFX0hEUjsKIAogCWlmICh1bmRvLT5zdGF0ZSAhPSBU UlhfVU5ET19DQUNIRUQpIHsKKwkJdWxpbnQJCWhpc3Rfc2l6ZTsKKyNpZmRlZiBVTklWX0RFQlVH CisJCXRyeF91c2VnZl90KglzZWdfaGVhZGVyID0gdW5kb19wYWdlICsgVFJYX1VORE9fU0VHX0hE UjsKKyNlbmRpZiAvKiBVTklWX0RFQlVHICovCisKIAkJLyogVGhlIHVuZG8gbG9nIHNlZ21lbnQg d2lsbCBub3QgYmUgcmV1c2VkICovCiAKLQkJaWYgKHVuZG8tPmlkID49IFRSWF9SU0VHX05fU0xP VFMpIHsKKwkJaWYgKFVOSVZfVU5MSUtFTFkodW5kby0+aWQgPj0gVFJYX1JTRUdfTl9TTE9UUykp IHsKIAkJCWZwcmludGYoc3RkZXJyLAogCQkJCSJJbm5vREI6IEVycm9yOiB1bmRvLT5pZCBpcyAl bHVcbiIsCiAJCQkJKHVsb25nKSB1bmRvLT5pZCk7CkBAIC0yNTgsMTMgKzI2NiwxNSBAQCB0cnhf cHVyZ2VfYWRkX3VwZGF0ZV91bmRvX3RvX2hpc3RvcnkoCiAKIAkJTU9OSVRPUl9ERUMoTU9OSVRP Ul9OVU1fVU5ET19TTE9UX1VTRUQpOwogCi0JCWhpc3Rfc2l6ZSA9IG10cl9yZWFkX3VsaW50KHJz ZWdfaGVhZGVyICsgVFJYX1JTRUdfSElTVE9SWV9TSVpFLAotCQkJCQkgICBNTE9HXzRCWVRFUywg bXRyKTsKKwkJaGlzdF9zaXplID0gbXRyX3JlYWRfdWxpbnQoCisJCQlyc2VnX2hlYWRlciArIFRS WF9SU0VHX0hJU1RPUllfU0laRSwgTUxPR180QllURVMsIG10cik7CisKIAkJdXRfYWQodW5kby0+ c2l6ZSA9PSBmbHN0X2dldF9sZW4oCiAJCQkgICAgICBzZWdfaGVhZGVyICsgVFJYX1VORE9fUEFH RV9MSVNULCBtdHIpKTsKIAotCQltbG9nX3dyaXRlX3VsaW50KHJzZWdfaGVhZGVyICsgVFJYX1JT RUdfSElTVE9SWV9TSVpFLAotCQkJCSBoaXN0X3NpemUgKyB1bmRvLT5zaXplLCBNTE9HXzRCWVRF UywgbXRyKTsKKwkJbWxvZ193cml0ZV91bGludCgKKwkJCXJzZWdfaGVhZGVyICsgVFJYX1JTRUdf SElTVE9SWV9TSVpFLAorCQkJaGlzdF9zaXplICsgdW5kby0+c2l6ZSwgTUxPR180QllURVMsIG10 cik7CiAJfQogCiAJLyogQWRkIHRoZSBsb2cgYXMgdGhlIGZpcnN0IGluIHRoZSBoaXN0b3J5IGxp c3QgKi8KQEAgLTI4Myw2ICsyOTMsNyBAQCB0cnhfcHVyZ2VfYWRkX3VwZGF0ZV91bmRvX3RvX2hp c3RvcnkoCiAKIAkvKiBXcml0ZSB0aGUgdHJ4IG51bWJlciB0byB0aGUgdW5kbyBsb2cgaGVhZGVy ICovCiAJbWxvZ193cml0ZV91bGwodW5kb19oZWFkZXIgKyBUUlhfVU5ET19UUlhfTk8sIHRyeC0+ bm8sIG10cik7CisKIAkvKiBXcml0ZSBpbmZvcm1hdGlvbiBhYm91dCBkZWxldGUgbWFya2luZ3Mg dG8gdGhlIHVuZG8gbG9nIGhlYWRlciAqLwogCiAJaWYgKCF1bmRvLT5kZWxfbWFya3MpIHsKQEAg LTI5MSwyMyArMzAyLDEwIEBAIHRyeF9wdXJnZV9hZGRfdXBkYXRlX3VuZG9fdG9faGlzdG9yeSgK IAl9CiAKIAlpZiAocnNlZy0+bGFzdF9wYWdlX25vID09IEZJTF9OVUxMKSB7Ci0JCXZvaWQqCQlw dHI7Ci0JCXJzZWdfcXVldWVfdAlyc2VnX3F1ZXVlOwotCiAJCXJzZWctPmxhc3RfcGFnZV9ubyA9 IHVuZG8tPmhkcl9wYWdlX25vOwogCQlyc2VnLT5sYXN0X29mZnNldCA9IHVuZG8tPmhkcl9vZmZz ZXQ7CiAJCXJzZWctPmxhc3RfdHJ4X25vID0gdHJ4LT5ubzsKIAkJcnNlZy0+bGFzdF9kZWxfbWFy a3MgPSB1bmRvLT5kZWxfbWFya3M7Ci0KLQkJcnNlZ19xdWV1ZS5yc2VnID0gcnNlZzsKLQkJcnNl Z19xdWV1ZS50cnhfbm8gPSByc2VnLT5sYXN0X3RyeF9ubzsKLQotCQlyd19sb2NrX3hfbG9jaygm dHJ4X3N5cy0+bG9jayk7Ci0KLQkJcHRyID0gaWJfYmhfcHVzaCh0cnhfc3lzLT5pYl9iaCwgJnJz ZWdfcXVldWUpOwotCQl1dF9hKHB0cik7Ci0KLQkJcndfbG9ja194X3VubG9jaygmdHJ4X3N5cy0+ bG9jayk7CiAJfQogfQogCkBAIC0zMzQsOCArMzMyLDYgQEAgdHJ4X3B1cmdlX2ZyZWVfc2VnbWVu dCgKIAogCS8qCWZwdXRzKCJGcmVlaW5nIGFuIHVwZGF0ZSB1bmRvIGxvZyBzZWdtZW50XG4iLCBz dGRlcnIpOyAqLwogCi0JdXRfYWQobXV0ZXhfb3duKCYocHVyZ2Vfc3lzLT5tdXRleCkpKTsKLQog CWZvciAoOzspIHsKIAkJcGFnZV90Kgl1bmRvX3BhZ2U7CiAKQEAgLTM3Myw2ICszNjksNyBAQCB0 cnhfcHVyZ2VfZnJlZV9zZWdtZW50KAogCQl9CiAKIAkJbXV0ZXhfZXhpdCgmcnNlZy0+bXV0ZXgp OworCiAJCW10cl9jb21taXQoJm10cik7CiAJfQogCkBAIC00NDQsOCArNDQxLDYgQEAgdHJ4X3B1 cmdlX3RydW5jYXRlX3JzZWdfaGlzdG9yeSgKIAltdHJfdAkJbXRyOwogCXRyeF9pZF90CXVuZG9f dHJ4X25vOwogCi0JdXRfYWQobXV0ZXhfb3duKCYocHVyZ2Vfc3lzLT5tdXRleCkpKTsKLQogCW10 cl9zdGFydCgmbXRyKTsKIAltdXRleF9lbnRlcigmKHJzZWctPm11dGV4KSk7CiAKQEAgLTU0Niw4 ICs1NDEsNiBAQCB0cnhfcHVyZ2VfdHJ1bmNhdGVfaGlzdG9yeSgKIHsKIAl1bGludAkJaTsKIAot CXV0X2FkKHB1cmdlX211dGV4X293bigpKTsKLQogCS8qIFdlIHBsYXkgc2FmZSBhbmQgc2V0IHRo ZSB0cnVuY2F0ZSBsaW1pdCBhdCBtb3N0IHRvIHRoZSBwdXJnZSB2aWV3CiAJbG93X2xpbWl0IG51 bWJlciwgdGhvdWdoIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSAqLwogCkBAIC01NjgsNiArNTYxLDcg QEAgdHJ4X3B1cmdlX3RydW5jYXRlX2hpc3RvcnkoCiAJfQogfQogCisKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8vKioKIFVwZGF0ZXMgdGhlIGxhc3Qgbm90IHlldCBwdXJnZWQgaGlzdG9yeSBsb2cgaW5mbyBp biByc2VnIHdoZW4gd2UgaGF2ZSBwdXJnZWQKIGEgd2hvbGUgdW5kbyBsb2cuIEFkdmFuY2VzIGFs c28gcHVyZ2Vfc3lzLT5wdXJnZV90cnhfbm8gcGFzdCB0aGUgcHVyZ2VkIGxvZy4gKi8KQEAgLTU3 OSw3ICs1NzMsNyBAQCB0cnhfcHVyZ2VfcnNlZ19nZXRfbmV4dF9oaXN0b3J5X2xvZygKIAl1bGlu dCoJCW5fcGFnZXNfaGFuZGxlZCkvKiE8IGluL291dDogbnVtYmVyIG9mIFVORE8gcGFnZXMKIAkJ CQkJaGFuZGxlZCAqLwogewotCXZvaWQqCQlwdHI7CisJY29uc3Qgdm9pZCoJcHRyOwogCXBhZ2Vf dCoJCXVuZG9fcGFnZTsKIAl0cnhfdWxvZ2ZfdCoJbG9nX2hkcjsKIAl0cnhfdXNlZ2ZfdCoJc2Vn X2hkcjsKQEAgLTU4OSw4ICs1ODMsNiBAQCB0cnhfcHVyZ2VfcnNlZ19nZXRfbmV4dF9oaXN0b3J5 X2xvZygKIAltdHJfdAkJbXRyOwogCXJzZWdfcXVldWVfdAlyc2VnX3F1ZXVlOwogCi0JdXRfYWQo bXV0ZXhfb3duKCYocHVyZ2Vfc3lzLT5tdXRleCkpKTsKLQogCW11dGV4X2VudGVyKCYocnNlZy0+ bXV0ZXgpKTsKIAogCXV0X2EocnNlZy0+bGFzdF9wYWdlX25vICE9IEZJTF9OVUxMKTsKQEAgLTYw MSw4ICs1OTMsOSBAQCB0cnhfcHVyZ2VfcnNlZ19nZXRfbmV4dF9oaXN0b3J5X2xvZygKIAogCW10 cl9zdGFydCgmbXRyKTsKIAotCXVuZG9fcGFnZSA9IHRyeF91bmRvX3BhZ2VfZ2V0X3NfbGF0Y2hl ZChyc2VnLT5zcGFjZSwgcnNlZy0+emlwX3NpemUsCi0JCQkJCQlyc2VnLT5sYXN0X3BhZ2Vfbm8s ICZtdHIpOworCXVuZG9fcGFnZSA9IHRyeF91bmRvX3BhZ2VfZ2V0X3NfbGF0Y2hlZCgKKwkJcnNl Zy0+c3BhY2UsIHJzZWctPnppcF9zaXplLCByc2VnLT5sYXN0X3BhZ2Vfbm8sICZtdHIpOworCiAJ bG9nX2hkciA9IHVuZG9fcGFnZSArIHJzZWctPmxhc3Rfb2Zmc2V0OwogCXNlZ19oZHIgPSB1bmRv X3BhZ2UgKyBUUlhfVU5ET19TRUdfSERSOwogCkBAIC02MjcsMTEgKzYyMCwxMSBAQCB0cnhfcHVy Z2VfcnNlZ19nZXRfbmV4dF9oaXN0b3J5X2xvZygKIAkJb24gdGhlIE15U1FMIG1haWxpbmcgbGlz dCBvbiBOb3YgOSwgMjAwNC4gVGhlIGZ1dDBsc3QuYwogCQlmaWxlLWJhc2VkIGxpc3Qgd2FzIGNv cnJ1cHQuIFRoZSBwcmV2IG5vZGUgcG9pbnRlciB3YXMKIAkJRklMX05VTEwsIGV2ZW4gdGhvdWdo IHRoZSBsaXN0IGxlbmd0aCB3YXMgb3ZlciA4IG1pbGxpb24gbm9kZXMhCi0JCVdlIGFzc3VtZSB0 aGF0IHB1cmdlIHRydW5jYXRlcyB0aGUgaGlzdG9yeSBsaXN0IGluIG1vZGVyYXRlCisJCVdlIGFz c3VtZSB0aGF0IHB1cmdlIHRydW5jYXRlcyB0aGUgaGlzdG9yeSBsaXN0IGluIGxhcmdlCiAJCXNp emUgcGllY2VzLCBhbmQgaWYgd2UgaGVyZSByZWFjaCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgdGhl Ci0JCWxpc3QgY2Fubm90IGJlIGxvbmdlciB0aGFuIDIwIDAwMCB1bmRvIGxvZ3Mgbm93LiAqLwor CQlsaXN0IGNhbm5vdCBiZSBsb25nZXIgdGhhbiAyMDAwIDAwMCB1bmRvIGxvZ3Mgbm93LiAqLwog Ci0JCWlmICh0cnhfc3lzLT5yc2VnX2hpc3RvcnlfbGVuID4gMjAwMDApIHsKKwkJaWYgKHRyeF9z eXMtPnJzZWdfaGlzdG9yeV9sZW4gPiAyMDAwMDAwKSB7CiAJCQl1dF9wcmludF90aW1lc3RhbXAo c3RkZXJyKTsKIAkJCWZwcmludGYoc3RkZXJyLAogCQkJCSIgIElubm9EQjogV2FybmluZzogcHVy Z2UgcmVhY2hlZCB0aGUiCkBAIC02NDgsNyArNjQxLDggQEAgdHJ4X3B1cmdlX3JzZWdfZ2V0X25l eHRfaGlzdG9yeV9sb2coCiAJCXJldHVybjsKIAl9CiAKLQltdXRleF9leGl0KCYocnNlZy0+bXV0 ZXgpKTsKKwltdXRleF9leGl0KCZyc2VnLT5tdXRleCk7CisKIAltdHJfY29tbWl0KCZtdHIpOwog CiAJLyogUmVhZCB0aGUgdHJ4IG51bWJlciBhbmQgZGVsIG1hcmtzIGZyb20gdGhlIHByZXZpb3Vz IGxvZyBoZWFkZXIgKi8KQEAgLTY3NCwxOSArNjY4LDI1IEBAIHRyeF9wdXJnZV9yc2VnX2dldF9u ZXh0X2hpc3RvcnlfbG9nKAogCXJzZWdfcXVldWUucnNlZyA9IHJzZWc7CiAJcnNlZ19xdWV1ZS50 cnhfbm8gPSByc2VnLT5sYXN0X3RyeF9ubzsKIAotCW11dGV4X2V4aXQoJihyc2VnLT5tdXRleCkp OworCS8qIFB1cmdlIGNhbiBhbHNvIHByb2R1Y2UgZXZlbnRzLCBob3dldmVyIHRoZXNlIGFyZSBh bHJlYWR5IG9yZGVyZWQKKwlpbiB0aGUgcm9sbGJhY2sgc2VnbWVudCBhbmQgYW55IHVzZXIgZ2Vu ZXJhdGVkIGV2ZW50IHdpbGwgYmUgZ3JlYXRlcgorCXRoYW4gdGhlIGV2ZW50cyB0aGF0IFB1cmdl IHByb2R1Y2VzLiBpZS4gUHVyZ2UgY2FuIG5ldmVyIHByb2R1Y2UKKwlldmVudHMgZnJvbSBhbiBl bXB0eSByb2xsYmFjayBzZWdtZW50LiAqLwogCi0JcndfbG9ja194X2xvY2soJnRyeF9zeXMtPmxv Y2spOworCW11dGV4X2VudGVyKCZwdXJnZV9zeXMtPmJoX211dGV4KTsKIAotCXB0ciA9IGliX2Jo X3B1c2godHJ4X3N5cy0+aWJfYmgsICZyc2VnX3F1ZXVlKTsKKwlwdHIgPSBpYl9iaF9wdXNoKHB1 cmdlX3N5cy0+aWJfYmgsICZyc2VnX3F1ZXVlKTsKIAl1dF9hKHB0ciAhPSBOVUxMKTsKIAotCXJ3 X2xvY2tfeF91bmxvY2soJnRyeF9zeXMtPmxvY2spOworCW11dGV4X2V4aXQoJnB1cmdlX3N5cy0+ YmhfbXV0ZXgpOworCisJbXV0ZXhfZXhpdCgmcnNlZy0+bXV0ZXgpOwogfQogCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovLyoqCiBDaG9vc2VzIHRoZSByb2xsYmFjayBzZWdtZW50IHdpdGggdGhlIHNtYWxsZXN0 IHRyeF9pZC4KLUByZXR1cm4gemlwX3NpemUgaWYgbG9nIGlzIGZvciBhIGNvbXByZXNzZWQgdGFi bGUgKi8KK0ByZXR1cm4gemlwX3NpemUgaWYgbG9nIGlzIGZvciBhIGNvbXByZXNzZWQgdGFibGUs IFVMSU5UX1VOREVGSU5FRCBpZgorCW5vIHJvbGxiYWNrIHNlZ21lbnRzIHRvIHB1cmdlLCAwIGZv ciBub24gY29tcHJlc3NlZCB0YWJsZXMuICovCiBzdGF0aWMKIHVsaW50CiB0cnhfcHVyZ2VfZ2V0 X3JzZWdfd2l0aF9taW5fdHJ4X2lkKApAQCAtNjk1LDUxICs2OTUsNDYgQEAgdHJ4X3B1cmdlX2dl dF9yc2VnX3dpdGhfbWluX3RyeF9pZCgKIAogewogCXVsaW50CQl6aXBfc2l6ZSA9IDA7Ci0JdHJ4 X2lkX3QJbGFzdF90cnhfbm8gPSBJQl9VTE9OR0xPTkdfTUFYOwotCi0JdXRfYWQobXV0ZXhfb3du KCYocHVyZ2Vfc3lzLT5tdXRleCkpKTsKIAotCXJ3X2xvY2tfc19sb2NrKCZ0cnhfc3lzLT5sb2Nr KTsKKwltdXRleF9lbnRlcigmcHVyZ2Vfc3lzLT5iaF9tdXRleCk7CiAKLQlpZiAoIWliX2JoX2lz X2VtcHR5KHRyeF9zeXMtPmliX2JoKSkgewotCQlyc2VnX3F1ZXVlX3QqCXJzZWdfcXVldWU7CisJ LyogT25seSBwdXJnZSBjb25zdW1lcyBldmVudHMgZnJvbSB0aGUgYmluYXJ5IGhlYXAsIHVzZXIK Kwl0aHJlYWRzIG9ubHkgcHJvZHVjZSB0aGUgZXZlbnRzLiAqLwogCi0JCXJzZWdfcXVldWUgPSBp Yl9iaF9maXJzdCh0cnhfc3lzLT5pYl9iaCk7CisJaWYgKCFpYl9iaF9pc19lbXB0eShwdXJnZV9z eXMtPmliX2JoKSkgeworCQl0cnhfcnNlZ190Kglyc2VnOwogCi0JCXB1cmdlX3N5cy0+cnNlZyA9 IHJzZWdfcXVldWUtPnJzZWc7Ci0JCWxhc3RfdHJ4X25vID0gcnNlZ19xdWV1ZS0+dHJ4X25vOwor CQlyc2VnID0gKChyc2VnX3F1ZXVlX3QqKSBpYl9iaF9maXJzdChwdXJnZV9zeXMtPmliX2JoKSkt PnJzZWc7CisJCWliX2JoX3BvcChwdXJnZV9zeXMtPmliX2JoKTsKIAotCQlpYl9iaF9wb3AodHJ4 X3N5cy0+aWJfYmgpOworCQltdXRleF9leGl0KCZwdXJnZV9zeXMtPmJoX211dGV4KTsKIAorCQlw dXJnZV9zeXMtPnJzZWcgPSByc2VnOwogCX0gZWxzZSB7Ci0JCXB1cmdlX3N5cy0+cnNlZyA9IE5V TEw7Ci0JfQorCQltdXRleF9leGl0KCZwdXJnZV9zeXMtPmJoX211dGV4KTsKIAotCXJ3X2xvY2tf c191bmxvY2soJnRyeF9zeXMtPmxvY2spOwotCi0JaWYgKHB1cmdlX3N5cy0+cnNlZyAhPSBOVUxM KSB7Ci0JCXRyeF9yc2VnX3QqCXJzZWcgPSBwdXJnZV9zeXMtPnJzZWc7Ci0KLQkJbXV0ZXhfZW50 ZXIoJnJzZWctPm11dGV4KTsKKwkJcHVyZ2Vfc3lzLT5yc2VnID0gTlVMTDsKIAotCQl1dF9hKHJz ZWctPmxhc3RfcGFnZV9ubyAhPSBGSUxfTlVMTCk7CisJCXJldHVybihVTElOVF9VTkRFRklORUQp OworCX0KIAotCQkvKiBXZSBhc3N1bWUgaW4gcHVyZ2Ugb2YgZXh0ZXJuYWxseSBzdG9yZWQgZmll bGRzIHRoYXQKLQkJc3BhY2UgaWQgPT0gMCAqLwotCQl1dF9hKHJzZWctPnNwYWNlID09IDApOwor CXV0X2EocHVyZ2Vfc3lzLT5yc2VnICE9IE5VTEwpOwogCi0JCXppcF9zaXplID0gcnNlZy0+emlw X3NpemU7CisJbXV0ZXhfZW50ZXIoJnB1cmdlX3N5cy0+cnNlZy0+bXV0ZXgpOwogCi0JCXV0X2Eo bGFzdF90cnhfbm8gPT0gcnNlZy0+bGFzdF90cnhfbm8pOworCXV0X2EocHVyZ2Vfc3lzLT5yc2Vn LT5sYXN0X3BhZ2Vfbm8gIT0gRklMX05VTEwpOwogCi0JCXB1cmdlX3N5cy0+aXRlci50cnhfbm8g PSByc2VnLT5sYXN0X3RyeF9ubzsKKwkvKiBXZSBhc3N1bWUgaW4gcHVyZ2Ugb2YgZXh0ZXJuYWxs eSBzdG9yZWQgZmllbGRzIHRoYXQgc3BhY2UgaWQgPT0gMCAqLworCXV0X2EocHVyZ2Vfc3lzLT5y c2VnLT5zcGFjZSA9PSAwKTsKKwl6aXBfc2l6ZSA9IHB1cmdlX3N5cy0+cnNlZy0+emlwX3NpemU7 CiAKLQkJcHVyZ2Vfc3lzLT5oZHJfb2Zmc2V0ID0gcnNlZy0+bGFzdF9vZmZzZXQ7CisJdXRfYShw dXJnZV9zeXMtPml0ZXIudHJ4X25vIDw9IHB1cmdlX3N5cy0+cnNlZy0+bGFzdF90cnhfbm8pOwog Ci0JCXB1cmdlX3N5cy0+aGRyX3BhZ2Vfbm8gPSByc2VnLT5sYXN0X3BhZ2Vfbm87CisJcHVyZ2Vf c3lzLT5pdGVyLnRyeF9ubyA9IHB1cmdlX3N5cy0+cnNlZy0+bGFzdF90cnhfbm87CisJcHVyZ2Vf c3lzLT5oZHJfb2Zmc2V0ID0gcHVyZ2Vfc3lzLT5yc2VnLT5sYXN0X29mZnNldDsKKwlwdXJnZV9z eXMtPmhkcl9wYWdlX25vID0gcHVyZ2Vfc3lzLT5yc2VnLT5sYXN0X3BhZ2Vfbm87CiAKLQkJbXV0 ZXhfZXhpdCgmcnNlZy0+bXV0ZXgpOwotCX0KKwltdXRleF9leGl0KCZwdXJnZV9zeXMtPnJzZWct Pm11dGV4KTsKIAogCXJldHVybih6aXBfc2l6ZSk7CiB9CkBAIC04MDUsMTMgKzgwMCwxNSBAQCB0 cnhfcHVyZ2VfY2hvb3NlX25leHRfbG9nKHZvaWQpCiB7CiAJdWxpbnQJCXppcF9zaXplOwogCi0J dXRfYWQobXV0ZXhfb3duKCYocHVyZ2Vfc3lzLT5tdXRleCkpKTsKIAl1dF9hZChwdXJnZV9zeXMt Pm5leHRfc3RvcmVkID09IEZBTFNFKTsKIAogCXppcF9zaXplID0gdHJ4X3B1cmdlX2dldF9yc2Vn X3dpdGhfbWluX3RyeF9pZChwdXJnZV9zeXMpOwogCiAJaWYgKHB1cmdlX3N5cy0+cnNlZyAhPSBO VUxMKSB7CiAJCXRyeF9wdXJnZV9yZWFkX3VuZG9fcmVjKHB1cmdlX3N5cywgemlwX3NpemUpOwor CX0gZWxzZSB7CisJCS8qIFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8geWV0LiAqLworCQlvc190aHJl YWRfeWllbGQoKTsKIAl9CiB9CiAKQEAgLTgzNyw3ICs4MzQsNiBAQCB0cnhfcHVyZ2VfZ2V0X25l eHRfcmVjKAogCXVsaW50CQl6aXBfc2l6ZTsKIAltdHJfdAkJbXRyOwogCi0JdXRfYWQobXV0ZXhf b3duKCYocHVyZ2Vfc3lzLT5tdXRleCkpKTsKIAl1dF9hZChwdXJnZV9zeXMtPm5leHRfc3RvcmVk KTsKIAogCXNwYWNlID0gcHVyZ2Vfc3lzLT5yc2VnLT5zcGFjZTsKQEAgLTg3NSw5ICs4NzEsOSBA QCB0cnhfcHVyZ2VfZ2V0X25leHRfcmVjKAogCQkvKiBUcnkgZmlyc3QgdG8gZmluZCB0aGUgbmV4 dCByZWNvcmQgd2hpY2ggcmVxdWlyZXMgYSBwdXJnZQogCQlvcGVyYXRpb24gZnJvbSB0aGUgc2Ft ZSBwYWdlIG9mIHRoZSBzYW1lIHVuZG8gbG9nICovCiAKLQkJbmV4dF9yZWMgPSB0cnhfdW5kb19w YWdlX2dldF9uZXh0X3JlYyhyZWMyLAotCQkJCQkJICAgICAgcHVyZ2Vfc3lzLT5oZHJfcGFnZV9u bywKLQkJCQkJCSAgICAgIHB1cmdlX3N5cy0+aGRyX29mZnNldCk7CisJCW5leHRfcmVjID0gdHJ4 X3VuZG9fcGFnZV9nZXRfbmV4dF9yZWMoCisJCQlyZWMyLCBwdXJnZV9zeXMtPmhkcl9wYWdlX25v LCBwdXJnZV9zeXMtPmhkcl9vZmZzZXQpOworCiAJCWlmIChuZXh0X3JlYyA9PSBOVUxMKSB7CiAJ CQlyZWMyID0gdHJ4X3VuZG9fZ2V0X25leHRfcmVjKAogCQkJCXJlYzIsIHB1cmdlX3N5cy0+aGRy X3BhZ2Vfbm8sCkBAIC05NTksOCArOTU1LDYgQEAgdHJ4X3B1cmdlX2ZldGNoX25leHRfcmVjKAog CWNvbnN0IHJlYWRfdmlld190Kgl2aWV3ID0gcHVyZ2Vfc3lzLT52aWV3OwogCWNvbnN0IHB1cmdl X2l0ZXJfdAlpdGVyID0gcHVyZ2Vfc3lzLT5pdGVyOwogCi0JdXRfYWQobXV0ZXhfb3duKCZwdXJn ZV9zeXMtPm11dGV4KSk7Ci0KIAlpZiAoIXB1cmdlX3N5cy0+bmV4dF9zdG9yZWQpIHsKIAkJdHJ4 X3B1cmdlX2Nob29zZV9uZXh0X2xvZygpOwogCkBAIC05OTYsMTAgKzk5MCwxMCBAQCB0cnhfcHVy Z2VfZmV0Y2hfbmV4dF9yZWMoCiAJcmV0dXJuKHRyeF9wdXJnZV9nZXRfbmV4dF9yZWMobl9wYWdl c19oYW5kbGVkLCBoZWFwKSk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLUZldGNoZXMgYW4gdW5kbyBsb2cgcmVj b3JkIGludG8gdGhlIHB1cmdlIG5vZGVzIGluIHRoZSBxdWVyeSBncmFwaC4KLUByZXR1cm4gdGhl IG51bWJlciBvZiBwYWdlcyBwcm9jZXNzZWQuICovCi1zdGF0aWMKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgor VGhpcyBmdW5jdGlvbiBydW5zIGEgcHVyZ2UgYmF0Y2guCitAcmV0dXJuCW51bWJlciBvZiB1bmRv IGxvZyBwYWdlcyBoYW5kbGVkIGluIHRoZSBiYXRjaCAqLworVU5JVl9JTlRFUk4KIHVsaW50CiB0 cnhfcHVyZ2VfYXR0YWNoX3VuZG9fcmVjcygKIC8qPT09PT09PT09PT09PT09PT09PT09PT0qLwpA QCAtMTAxMyw4ICsxMDA3LDYgQEAgdHJ4X3B1cmdlX2F0dGFjaF91bmRvX3JlY3MoCiAJdWxpbnQJ CW5fcGFnZXNfaGFuZGxlZCA9IDA7CiAJdWxpbnQJCW5fdGhycyA9IFVUX0xJU1RfR0VUX0xFTihw dXJnZV9zeXMtPnF1ZXJ5LT50aHJzKTsKIAotCXV0X2FkKG11dGV4X293bigmcHVyZ2Vfc3lzLT5t dXRleCkpOwotCiAJKmxpbWl0ID0gcHVyZ2Vfc3lzLT5pdGVyOwogCiAJLyogRGVidWcgY29kZSB0 byB2YWxpZGF0ZSBzb21lIHByZS1yZXF1aXNpdGVzIGFuZCByZXNldCBkb25lIGZsYWcuICovCkBA IC0xMjAzLDEwICsxMTk1LDE0IEBAIHZvaWQKIHRyeF9wdXJnZV90cnVuY2F0ZSh2b2lkKQogLyo9 PT09PT09PT09PT09PT09PT09PSovCiB7Ci0JdXRfYWQobXV0ZXhfb3duKCZwdXJnZV9zeXMtPm11 dGV4KSk7CisJc3RhdGljIHVsaW50CWNvdW50OwogCiAJdXRfYWQodHJ4X3B1cmdlX2NoZWNrX2xp bWl0KCkpOwogCisJaWYgKCsrY291bnQgJSBUUlhfU1lTX05fUlNFR1MpIHsKKwkJcmV0dXJuOwor CX0KKwogCWlmIChwdXJnZV9zeXMtPmxpbWl0LnRyeF9ubyA9PSAwKSB7CiAJCXRyeF9wdXJnZV90 cnVuY2F0ZV9oaXN0b3J5KCZwdXJnZV9zeXMtPml0ZXIsIHB1cmdlX3N5cy0+dmlldyk7CiAJfSBl bHNlIHsKQEAgLTEyMzEsOCArMTIyNyw2IEBAIHRyeF9wdXJnZSgKIAogCXNydl9kbWxfbmVlZGVk X2RlbGF5ID0gdHJ4X3B1cmdlX2RtbF9kZWxheSgpOwogCi0JbXV0ZXhfZW50ZXIoJnB1cmdlX3N5 cy0+bXV0ZXgpOwotCiAJLyogVGhlIG51bWJlciBvZiB0YXNrcyBzdWJtaXR0ZWQgc2hvdWxkIGJl IGNvbXBsZXRlZC4gKi8KIAl1dF9hKHB1cmdlX3N5cy0+bl9zdWJtaXR0ZWQgPT0gcHVyZ2Vfc3lz LT5uX2NvbXBsZXRlZCk7CiAKQEAgLTEyNTIsOCArMTI0Niw2IEBAIHRyeF9wdXJnZSgKIAluX3Bh Z2VzX2hhbmRsZWQgPSB0cnhfcHVyZ2VfYXR0YWNoX3VuZG9fcmVjcygKIAkJbl9wdXJnZV90aHJl YWRzLCBwdXJnZV9zeXMsICZwdXJnZV9zeXMtPmxpbWl0LCBiYXRjaF9zaXplKTsKIAotCW11dGV4 X2V4aXQoJnB1cmdlX3N5cy0+bXV0ZXgpOwotCiAJLyogRG8gd2UgZG8gYW4gYXN5bmNocm9ub3Vz IHB1cmdlIG9yIG5vdCA/ICovCiAJaWYgKG5fcHVyZ2VfdGhyZWFkcyA+IDApIHsKIAkJdWxpbnQJ aSA9IDA7CkBAIC0xMjkwLDcgKzEyODIsNyBAQCBydW5fc3luY2hyb25vdXNseToKIAkJcXVlX3J1 bl90aHJlYWRzKHRocik7CiAKIAkJb3NfYXRvbWljX2luY191bGludCgKLQkJCSZwdXJnZV9zeXMt Pm11dGV4LCAmcHVyZ2Vfc3lzLT5uX2NvbXBsZXRlZCwgMSk7CisJCQkmcHVyZ2Vfc3lzLT5iaF9t dXRleCwgJnB1cmdlX3N5cy0+bl9jb21wbGV0ZWQsIDEpOwogCiAJCWlmIChuX3B1cmdlX3RocmVh ZHMgPiAxKSB7CiAJCQl0cnhfcHVyZ2Vfd2FpdF9mb3Jfd29ya2Vyc190b19jb21wbGV0ZShwdXJn ZV9zeXMpOwpAQCAtMTMwMSwxNiArMTI5MywxMiBAQCBydW5fc3luY2hyb25vdXNseToKICAgICAg ICAgdG8gaGF2ZSBhbHJlYWR5IGV4aXRlZCB2aWEgb3NfZXZlbnRfd2FpdCgpLiBXZSBvbmx5IHRy dW5jYXRlIHRoZSBVTkRPCiAJbG9nIHdoZW4gd2UgYXJlIDEwMCUgc3VyZSB0aGF0IGFsbCBzdWJt aXR0ZWQgdGFza3MgaGF2ZSBjb21wbGV0ZWQuICovCiAKLQltdXRleF9lbnRlcigmcHVyZ2Vfc3lz LT5tdXRleCk7Ci0KIAlpZiAocHVyZ2Vfc3lzLT5uX3N1Ym1pdHRlZCA9PSBwdXJnZV9zeXMtPm5f Y29tcGxldGVkKSB7CiAJCXRyeF9wdXJnZV90cnVuY2F0ZSgpOwogCX0KIAogCU1PTklUT1JfSU5D X1ZBTFVFKE1PTklUT1JfUFVSR0VfTl9QQUdFX0hBTkRMRUQsIG5fcGFnZXNfaGFuZGxlZCk7CiAK LQltdXRleF9leGl0KCZwdXJnZV9zeXMtPm11dGV4KTsKLQogCWlmIChzcnZfcHJpbnRfdGhyZWFk X3JlbGVhc2VzKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiUHVyZ2UgZW5kczsgcGFnZXMgaGFuZGxl ZCAlbHVcbiIsCiAJCQluX3BhZ2VzX2hhbmRsZWQpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvaW5ub2Jhc2UvdHJ4L3RyeDByc2VnLmMnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvdHJ4L3Ry eDByc2VnLmMJMjAxMS0wMS0xOCAyMToxNDoyMiArMDAwMAorKysgYi9zdG9yYWdlL2lubm9iYXNl L3RyeC90cngwcnNlZy5jCTIwMTEtMDItMjIgMDU6MTE6MTUgKzAwMDAKQEAgLTE2NywxMiArMTY3 LDE1IEBAIHN0YXRpYwogdHJ4X3JzZWdfdCoKIHRyeF9yc2VnX21lbV9jcmVhdGUoCiAvKj09PT09 PT09PT09PT09PT0qLwotCXVsaW50CWlkLAkJLyohPCBpbjogcm9sbGJhY2sgc2VnbWVudCBpZCAq LwotCXVsaW50CXNwYWNlLAkJLyohPCBpbjogc3BhY2Ugd2hlcmUgdGhlIHNlZ21lbnQgcGxhY2Vk ICovCi0JdWxpbnQJemlwX3NpemUsCS8qITwgaW46IGNvbXByZXNzZWQgcGFnZSBzaXplIGluIGJ5 dGVzCi0JCQkJb3IgMCBmb3IgdW5jb21wcmVzc2VkIHBhZ2VzICovCi0JdWxpbnQJcGFnZV9ubywJ LyohPCBpbjogcGFnZSBudW1iZXIgb2YgdGhlIHNlZ21lbnQgaGVhZGVyICovCi0JbXRyX3QqCW10 cikJCS8qITwgaW46IG10ciAqLworCXVsaW50CQlpZCwJCS8qITwgaW46IHJvbGxiYWNrIHNlZ21l bnQgaWQgKi8KKwl1bGludAkJc3BhY2UsCQkvKiE8IGluOiBzcGFjZSB3aGVyZSB0aGUgc2VnbWVu dAorCQkJCQlwbGFjZWQgKi8KKwl1bGludAkJemlwX3NpemUsCS8qITwgaW46IGNvbXByZXNzZWQg cGFnZSBzaXplIGluIGJ5dGVzCisJCQkJCW9yIDAgZm9yIHVuY29tcHJlc3NlZCBwYWdlcyAqLwor CXVsaW50CQlwYWdlX25vLAkvKiE8IGluOiBwYWdlIG51bWJlciBvZiB0aGUgc2VnbWVudAorCQkJ CQloZWFkZXIgKi8KKwlpYl9iaF90KglpYl9iaCwJCS8qITwgaW4vb3V0OiByc2VnIHF1ZXVlICov CisJbXRyX3QqCQltdHIpCQkvKiE8IGluOiBtdHIgKi8KIHsKIAl1bGludAkJbGVuOwogCXRyeF9y c2VnX3QqCXJzZWc7CkBAIC0xOTQsNTEgKzE5Nyw1NiBAQCB0cnhfcnNlZ19tZW1fY3JlYXRlKAog CiAJcnNlZ19oZWFkZXIgPSB0cnhfcnNlZ2ZfZ2V0X25ldyhzcGFjZSwgemlwX3NpemUsIHBhZ2Vf bm8sIG10cik7CiAKLQlyc2VnLT5tYXhfc2l6ZSA9IG10cl9yZWFkX3VsaW50KHJzZWdfaGVhZGVy ICsgVFJYX1JTRUdfTUFYX1NJWkUsCi0JCQkJCU1MT0dfNEJZVEVTLCBtdHIpOworCXJzZWctPm1h eF9zaXplID0gbXRyX3JlYWRfdWxpbnQoCisJCXJzZWdfaGVhZGVyICsgVFJYX1JTRUdfTUFYX1NJ WkUsIE1MT0dfNEJZVEVTLCBtdHIpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdW5kbyBsb2cgbGlz dHMgYWNjb3JkaW5nIHRvIHRoZSByc2VnIGhlYWRlciAqLwogCiAJc3VtX29mX3VuZG9fc2l6ZXMg PSB0cnhfdW5kb19saXN0c19pbml0KHJzZWcpOwogCi0JcnNlZy0+Y3Vycl9zaXplID0gbXRyX3Jl YWRfdWxpbnQocnNlZ19oZWFkZXIgKyBUUlhfUlNFR19ISVNUT1JZX1NJWkUsCi0JCQkJCSBNTE9H XzRCWVRFUywgbXRyKQorCXJzZWctPmN1cnJfc2l6ZSA9IG10cl9yZWFkX3VsaW50KAorCQlyc2Vn X2hlYWRlciArIFRSWF9SU0VHX0hJU1RPUllfU0laRSwgTUxPR180QllURVMsIG10cikKIAkJKyAx ICsgc3VtX29mX3VuZG9fc2l6ZXM7CiAKIAlsZW4gPSBmbHN0X2dldF9sZW4ocnNlZ19oZWFkZXIg KyBUUlhfUlNFR19ISVNUT1JZLCBtdHIpOworCiAJaWYgKGxlbiA+IDApIHsKLQkJdm9pZCoJCXB0 cjsKIAkJcnNlZ19xdWV1ZV90CXJzZWdfcXVldWU7CiAKIAkJdHJ4X3N5cy0+cnNlZ19oaXN0b3J5 X2xlbiArPSBsZW47CiAKIAkJbm9kZV9hZGRyID0gdHJ4X3B1cmdlX2dldF9sb2dfZnJvbV9oaXN0 KAogCQkJZmxzdF9nZXRfbGFzdChyc2VnX2hlYWRlciArIFRSWF9SU0VHX0hJU1RPUlksIG10cikp OworCiAJCXJzZWctPmxhc3RfcGFnZV9ubyA9IG5vZGVfYWRkci5wYWdlOwogCQlyc2VnLT5sYXN0 X29mZnNldCA9IG5vZGVfYWRkci5ib2Zmc2V0OwogCi0JCXVuZG9fbG9nX2hkciA9IHRyeF91bmRv X3BhZ2VfZ2V0KHJzZWctPnNwYWNlLCByc2VnLT56aXBfc2l6ZSwKLQkJCQkJCSBub2RlX2FkZHIu cGFnZSwKLQkJCQkJCSBtdHIpICsgbm9kZV9hZGRyLmJvZmZzZXQ7CisJCXVuZG9fbG9nX2hkciA9 IHRyeF91bmRvX3BhZ2VfZ2V0KAorCQkJcnNlZy0+c3BhY2UsIHJzZWctPnppcF9zaXplLCBub2Rl X2FkZHIucGFnZSwKKwkJCW10cikgKyBub2RlX2FkZHIuYm9mZnNldDsKIAogCQlyc2VnLT5sYXN0 X3RyeF9ubyA9IG1hY2hfcmVhZF9mcm9tXzgoCiAJCQl1bmRvX2xvZ19oZHIgKyBUUlhfVU5ET19U UlhfTk8pOworCiAJCXJzZWctPmxhc3RfZGVsX21hcmtzID0gbXRyX3JlYWRfdWxpbnQoCiAJCQl1 bmRvX2xvZ19oZHIgKyBUUlhfVU5ET19ERUxfTUFSS1MsIE1MT0dfMkJZVEVTLCBtdHIpOwogCiAJ CXJzZWdfcXVldWUucnNlZyA9IHJzZWc7CiAJCXJzZWdfcXVldWUudHJ4X25vID0gcnNlZy0+bGFz dF90cnhfbm87CiAKLQkJLyogVGhlcmUgaXMgbm8gbmVlZCB0byBjb3ZlciB0aGlzIG9wZXJhdGlv biBieSB0aGUgcHVyZ2UKLQkJbXV0ZXggYmVjYXVzZSB3ZSBhcmUgc3RpbGwgYm9vdHN0cmFwcGlu Zy4gKi8KKwkJaWYgKHJzZWctPmxhc3RfcGFnZV9ubyAhPSBGSUxfTlVMTCkgeworCQkJY29uc3Qg dm9pZCoJcHRyOwogCi0JCXB0ciA9IGliX2JoX3B1c2godHJ4X3N5cy0+aWJfYmgsICZyc2VnX3F1 ZXVlKTsKLQkJdXRfYShwdHIgIT0gTlVMTCk7CisJCQkvKiBUaGVyZSBpcyBubyBuZWVkIHRvIGNv dmVyIHRoaXMgb3BlcmF0aW9uIGJ5IHRoZSBwdXJnZQorCQkJbXV0ZXggYmVjYXVzZSB3ZSBhcmUg c3RpbGwgYm9vdHN0cmFwcGluZy4gKi8KKworCQkJcHRyID0gaWJfYmhfcHVzaChpYl9iaCwgJnJz ZWdfcXVldWUpOworCQkJdXRfYShwdHIgIT0gTlVMTCk7CisJCX0KIAl9IGVsc2UgewogCQlyc2Vn LT5sYXN0X3BhZ2Vfbm8gPSBGSUxfTlVMTDsKIAl9CiAKLQogCXJldHVybihyc2VnKTsKIH0KIApA QCAtMjQ5LDggKzI1Nyw5IEBAIHN0YXRpYwogdm9pZAogdHJ4X3JzZWdfY3JlYXRlX2luc3RhbmNl KAogLyo9PT09PT09PT09PT09PT09PT09PT0qLwotCXRyeF9zeXNmX3QqCXN5c19oZWFkZXIsCS8q ITwgaW4vb3V0OiB0cnggc3lzdGVtIGhlYWRlciAqLwotCW10cl90KgkJbXRyKQkJLyohPCBpbi9v dXQ6IG10ciAqLworCXRyeF9zeXNmX3QqCXN5c19oZWFkZXIsCS8qITwgaW46IHRyeCBzeXN0ZW0g aGVhZGVyICovCisJaWJfYmhfdCoJaWJfYmgsCQkvKiE8IGluL291dDogcnNlZyBxdWV1ZSAqLwor CW10cl90KgkJbXRyKQkJLyohPCBpbjogbXRyICovCiB7CiAJdWxpbnQJCWk7CiAKQEAgLTI3Myw3 ICsyODIsNyBAQCB0cnhfcnNlZ19jcmVhdGVfaW5zdGFuY2UoCiAJCQl6aXBfc2l6ZSA9IHNwYWNl ID8gZmlsX3NwYWNlX2dldF96aXBfc2l6ZShzcGFjZSkgOiAwOwogCiAJCQlyc2VnID0gdHJ4X3Jz ZWdfbWVtX2NyZWF0ZSgKLQkJCQlpLCBzcGFjZSwgemlwX3NpemUsIHBhZ2Vfbm8sIG10cik7CisJ CQkJaSwgc3BhY2UsIHppcF9zaXplLCBwYWdlX25vLCBpYl9iaCwgbXRyKTsKIAogCQkJdXRfYShy c2VnLT5pZCA9PSBpKTsKIAkJfQpAQCAtMzE4LDcgKzMyNyw4IEBAIHRyeF9yc2VnX2NyZWF0ZSh2 b2lkKQogCQl6aXBfc2l6ZSA9IHNwYWNlID8gZmlsX3NwYWNlX2dldF96aXBfc2l6ZShzcGFjZSkg OiAwOwogCiAJCXJzZWcgPSB0cnhfcnNlZ19tZW1fY3JlYXRlKAotCQkJc2xvdF9ubywgc3BhY2Us IHppcF9zaXplLCBwYWdlX25vLCAmbXRyKTsKKwkJCXNsb3Rfbm8sIHNwYWNlLCB6aXBfc2l6ZSwg cGFnZV9ubywKKwkJCXB1cmdlX3N5cy0+aWJfYmgsICZtdHIpOwogCX0KIAogCW10cl9jb21taXQo Jm10cik7CkBAIC0zMzQsOSArMzQ0LDEwIEBAIHZvaWQKIHRyeF9yc2VnX2FycmF5X2luaXQoCiAv Kj09PT09PT09PT09PT09PT0qLwogCXRyeF9zeXNmX3QqCXN5c19oZWFkZXIsCS8qIGluL291dDog dHJ4IHN5c3RlbSBoZWFkZXIgKi8KLQltdHJfdCoJCW10cikJCS8qIGluL291dDogbXRyICovCisJ aWJfYmhfdCoJaWJfYmgsCQkvKiE8IGluOiByc2VnIHF1ZXVlICovCisJbXRyX3QqCQltdHIpCQkv KiE8IGluOiBtdHIgKi8KIHsKIAl0cnhfc3lzLT5yc2VnX2hpc3RvcnlfbGVuID0gMDsKIAotCXRy eF9yc2VnX2NyZWF0ZV9pbnN0YW5jZShzeXNfaGVhZGVyLCBtdHIpOworCXRyeF9yc2VnX2NyZWF0 ZV9pbnN0YW5jZShzeXNfaGVhZGVyLCBpYl9iaCwgbXRyKTsKIH0KCj09PSBtb2RpZmllZCBmaWxl ICdzdG9yYWdlL2lubm9iYXNlL3RyeC90cngwc3lzLmMnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2Uv dHJ4L3RyeDBzeXMuYwkyMDExLTAxLTI0IDEwOjI4OjI4ICswMDAwCisrKyBiL3N0b3JhZ2UvaW5u b2Jhc2UvdHJ4L3RyeDBzeXMuYwkyMDExLTAyLTIyIDA1OjExOjE1ICswMDAwCkBAIC05NTAsMjMg Kzk1MCw1OCBAQCB0cnhfc3lzZl9jcmVhdGUoCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKK0NvbXBhcmUg dHdvIHRyeF9yc2VnX3QgaW5zdGFuY2VzIG9uIGxhc3RfdHJ4X25vLiAqLworc3RhdGljCitpbnQK K3RyeF9yc2VnX2NvbXBhcmVfbGFzdF90cnhfbm8oCisvKj09PT09PT09PT09PT09PT09PT09PT09 PT0qLworCWNvbnN0IHZvaWQqCXAxLAkJLyohPCBpbjogZWxlbSB0byBjb21wYXJlICovCisJY29u c3Qgdm9pZCoJcDIpCQkvKiE8IGluOiBlbGVtIHRvIGNvbXBhcmUgKi8KK3sKKwlpYl9pbnQ2NF90 CWNtcDsKKworCWNvbnN0IHJzZWdfcXVldWVfdCoJcnNlZ19xMSA9IChjb25zdCByc2VnX3F1ZXVl X3QqKSBwMTsKKwljb25zdCByc2VnX3F1ZXVlX3QqCXJzZWdfcTIgPSAoY29uc3QgcnNlZ19xdWV1 ZV90KikgcDI7CisKKwljbXAgPSByc2VnX3ExLT50cnhfbm8gLSByc2VnX3EyLT50cnhfbm87CisK KwlpZiAoY21wIDwgMCkgeworCQlyZXR1cm4oLTEpOworCX0gZWxzZSBpZiAoY21wID4gMCkgewor CQlyZXR1cm4oMSk7CisJfQorCisJcmV0dXJuKDApOworfQorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCiBDcmVh dGVzIGFuZCBpbml0aWFsaXplcyB0aGUgY2VudHJhbCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgdGhl IHRyYW5zYWN0aW9uCi1zeXN0ZW0uIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGRhdGFiYXNlIGlz IHN0YXJ0ZWQuICovCitzeXN0ZW0uIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGRhdGFiYXNlIGlz IHN0YXJ0ZWQuCitAcmV0dXJuIG1pbiBiaW5hcnkgaGVhcCBvZiByc2VncyB0byBwdXJnZSAqLwog VU5JVl9JTlRFUk4KLXZvaWQKK2liX2JoX3QqCiB0cnhfc3lzX2luaXRfYXRfZGJfc3RhcnQodm9p ZCkKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogeworCW10cl90CQltdHI7CisJaWJf YmhfdCoJaWJfYmg7CiAJdHJ4X3N5c2ZfdCoJc3lzX2hlYWRlcjsKIAlpYl91aW50NjRfdAlyb3dz X3RvX3VuZG8JPSAwOwogCWNvbnN0IGNoYXIqCXVuaXQJCT0gIiI7Ci0JbXRyX3QJCW10cjsKKwor CS8qIFdlIGNyZWF0ZSB0aGUgbWluIGJpbmFyeSBoZWFwIGhlcmUgYW5kIHBhc3Mgb3duZXJzaGlw IHRvCisJcHVyZ2Ugd2hlbiB3ZSBpbml0IHRoZSBwdXJnZSBzdWItc3lzdGVtLiBQdXJnZSBpcyBy ZXNwb25zaWJsZQorCWZvciBmcmVlaW5nIHRoZSBiaW5hcnkgaGVhcC4gKi8KKworCWliX2JoID0g aWJfYmhfY3JlYXRlKAorCQl0cnhfcnNlZ19jb21wYXJlX2xhc3RfdHJ4X25vLAorCQlzaXplb2Yo cnNlZ19xdWV1ZV90KSwgVFJYX1NZU19OX1JTRUdTKTsKIAogCW10cl9zdGFydCgmbXRyKTsKIAog CXN5c19oZWFkZXIgPSB0cnhfc3lzZl9nZXQoJm10cik7CiAKLQl0cnhfcnNlZ19hcnJheV9pbml0 KHN5c19oZWFkZXIsICZtdHIpOworCXRyeF9yc2VnX2FycmF5X2luaXQoc3lzX2hlYWRlciwgaWJf YmgsICZtdHIpOwogCiAJLyogVkVSWSBpbXBvcnRhbnQ6IGFmdGVyIHRoZSBkYXRhYmFzZSBpcyBz dGFydGVkLCBtYXhfdHJ4X2lkIHZhbHVlIGlzCiAJZGl2aXNpYmxlIGJ5IFRSWF9TWVNfVFJYX0lE X1dSSVRFX01BUkdJTiwgYW5kIHRoZSAnaWYnIGluCkBAIC05ODYsNiArMTAyMSwxMCBAQCB0cnhf c3lzX2luaXRfYXRfZGJfc3RhcnQodm9pZCkKIAogCXRyeF9saXN0c19pbml0X2F0X2RiX3N0YXJ0 KCk7CiAKKwkvKiBUaGlzIFMgbG9jayBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQsIGl0IGlzIGhl cmUgb25seSB0byBzYXRpc2Z5CisJdGhlIGRlYnVnIGNvZGUgKGFzc2VydGlvbnMpLiBXZSBhcmUg c3RpbGwgcnVubmluZyBpbiBzaW5nbGUgdGhyZWFkZWQKKwlib290c3RyYXAgbW9kZS4gKi8KKwog CXJ3X2xvY2tfc19sb2NrKCZ0cnhfc3lzLT5sb2NrKTsKIAogCWlmIChVVF9MSVNUX0dFVF9MRU4o dHJ4X3N5cy0+dHJ4X2xpc3QpID4gMCkgewpAQCAtMTAyMiwzMSArMTA2MSw4IEBAIHRyeF9zeXNf aW5pdF9hdF9kYl9zdGFydCh2b2lkKQogCVVUX0xJU1RfSU5JVCh0cnhfc3lzLT52aWV3X2xpc3Qp OwogCiAJbXRyX2NvbW1pdCgmbXRyKTsKLX0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotQ29tcGFyZSB0d28g dHJ4X3JzZWdfdCBpbnN0YW5jZXMgb24gbGFzdF90cnhfbm8uICovCi1zdGF0aWMKLWludAotdHJ4 X3JzZWdfY29tcGFyZV9sYXN0X3RyeF9ubygKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PSov Ci0JY29uc3Qgdm9pZCoJcDEsCQkvKiE8IGluOiBlbGVtIHRvIGNvbXBhcmUgKi8KLQljb25zdCB2 b2lkKglwMikJCS8qITwgaW46IGVsZW0gdG8gY29tcGFyZSAqLwotewotCWliX2ludDY0X3QJY21w OwotCi0JY29uc3QgcnNlZ19xdWV1ZV90Kglyc2VnX3ExID0gKGNvbnN0IHJzZWdfcXVldWVfdCop IHAxOwotCWNvbnN0IHJzZWdfcXVldWVfdCoJcnNlZ19xMiA9IChjb25zdCByc2VnX3F1ZXVlX3Qq KSBwMjsKLQotCWNtcCA9IHJzZWdfcTEtPnRyeF9ubyAtIHJzZWdfcTItPnRyeF9ubzsKLQotCWlm IChjbXAgPCAwKSB7Ci0JCXJldHVybigtMSk7Ci0JfSBlbHNlIGlmIChjbXAgPiAwKSB7Ci0JCXJl dHVybigxKTsKLQl9Ci0KLQlyZXR1cm4oMCk7CisJcmV0dXJuKGliX2JoKTsKIH0KIAogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLy8qKgpAQCAtMTA2MSwxMCArMTA3Nyw2IEBAIHRyeF9zeXNfY3JlYXRlKHZvaWQpCiAKIAl0 cnhfc3lzID0gbWVtX3phbGxvYyhzaXplb2YoKnRyeF9zeXMpKTsKIAotCXRyeF9zeXMtPmliX2Jo ID0gaWJfYmhfY3JlYXRlKAotCQl0cnhfcnNlZ19jb21wYXJlX2xhc3RfdHJ4X25vLAotCSAgICAg ICAJc2l6ZW9mKHJzZWdfcXVldWVfdCksIFRSWF9TWVNfTl9SU0VHUyAqIDEyOCk7Ci0KIAlyd19s b2NrX2NyZWF0ZSh0cnhfc3lzX3J3X2xvY2tfa2V5LCAmdHJ4X3N5cy0+bG9jaywgU1lOQ19UUlhf U1lTKTsKIAogCW11dGV4X2NyZWF0ZSgKQEAgLTE2OTQsOCArMTcwNiw2IEBAIHRyeF9zeXNfY2xv c2Uodm9pZCkKIAogCXJ3X2xvY2tfZnJlZSgmdHJ4X3N5cy0+bG9jayk7CiAKLQlpYl9iaF9mcmVl KHRyeF9zeXMtPmliX2JoKTsKLQogCW1lbV9mcmVlKHRyeF9zeXMpOwogCiAJdHJ4X3N5cyA9IE5V TEw7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS90cngvdHJ4MHRyeC5jJwot LS0gYS9zdG9yYWdlL2lubm9iYXNlL3RyeC90cngwdHJ4LmMJMjAxMS0wMi0xNyAxNDowNjowOSAr MDAwMAorKysgYi9zdG9yYWdlL2lubm9iYXNlL3RyeC90cngwdHJ4LmMJMjAxMS0wMi0yMiAwNTox MToxNSArMDAwMApAQCAtNDMsNiArNDMsNyBAQCBDcmVhdGVkIDMvMjYvMTk5NiBIZWlra2kgVHV1 cmkKICNpbmNsdWRlICJidHIwc2VhLmgiCiAjaW5jbHVkZSAib3MwcHJvYy5oIgogI2luY2x1ZGUg InRyeDB4YS5oIgorI2luY2x1ZGUgInRyeDBwdXJnZS5oIgogI2luY2x1ZGUgImhhX3Byb3RvdHlw ZXMuaCIKICNpbmNsdWRlICJzcnYwbW9uLmgiCiAKQEAgLTU5NSwxMSArNTk2LDEyIEBAIHRyeF9s aXN0c19pbml0X2F0X2RiX3N0YXJ0KHZvaWQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCiBBc3NpZ25zIGEg cm9sbGJhY2sgc2VnbWVudCB0byBhIHRyYW5zYWN0aW9uIGluIGEgcm91bmQtcm9iaW4gZmFzaGlv bi4KLUByZXR1cm4JYXNzaWduZWQgcm9sbGJhY2sgc2VnbWVudCAqLworQHJldHVybglhc3NpZ25l ZCByb2xsYmFjayBzZWdtZW50IGluc3RhbmNlICovCiBVTklWX0lOTElORQogdHJ4X3JzZWdfdCoK LXRyeF9hc3NpZ25fcnNlZyh2b2lkKQotLyo9PT09PT09PT09PT09PT09PSovCit0cnhfYXNzaWdu X3JzZWcoCisvKj09PT09PT09PT09PSovCisJdWxpbnQJbWF4X3VuZG9fbG9ncykJLyohPCBpbjog bWF4aW11bSBudW1iZXIgb2YgVU5ETyBsb2dzIHRvIHVzZSAqLwogewogCXVsaW50CQlpOwogCXRy eF9yc2VnX3QqCXJzZWc7CkBAIC02MDcsOCArNjA5LDE2IEBAIHRyeF9hc3NpZ25fcnNlZyh2b2lk KQogCiAJLyogVGhpcyBicmVha3MgdHJ1ZSByb3VuZCByb2JpbiBidXQgdGhhdCBzaG91bGQgYmUg T0suICovCiAKKwl1dF9hKG1heF91bmRvX2xvZ3MgPiAwICYmIG1heF91bmRvX2xvZ3MgPD0gVFJY X1NZU19OX1JTRUdTKTsKKwogCWkgPSBsYXRlc3RfcnNlZysrOwotICAgICAgICBpICU9IFRSWF9T WVNfTl9SU0VHUzsKKyAgICAgICAgaSAlPSBtYXhfdW5kb19sb2dzOworCisJLyogTm90ZTogVGhl IGFzc3VtdGlvbiBoZXJlIGlzIHRoYXQgdGhlcmUgY2FuJ3QgYmUgYW55IGdhcHMgaW4KKwl0aGUg YXJyYXkuIE9uY2Ugd2UgaW1wbGVtZW50IG1vcmUgZmxleGlibGUgcm9sbGJhY2sgc2VnbWVudAor CW1hbmFnZW1lbnQgdGhpcyBtYXkgbm90IGhvbGQuIFRoZSBhc3NlcnRpb24gY2hlY2tzIGZvciB0 aGF0IGNhc2UuICovCisKKwl1dF9hKHRyeF9zeXMtPnJzZWdfYXJyYXlbMF0gIT0gTlVMTCk7CiAK IAlkbyB7CiAJCXJzZWcgPSB0cnhfc3lzLT5yc2VnX2FycmF5W2ldOwpAQCAtNjE4LDE0ICs2Mjgs NiBAQCB0cnhfYXNzaWduX3JzZWcodm9pZCkKIAogCX0gd2hpbGUgKHJzZWcgPT0gTlVMTCk7CiAK LSNpZmRlZiBVTklWX0RFQlVHCi0JcndfbG9ja194X2xvY2soJnRyeF9zeXMtPmxvY2spOwotCi0J dXRfYWQodHJ4X3N5c192YWxpZGF0ZV90cnhfbGlzdCgpKTsKLQotCXJ3X2xvY2tfeF91bmxvY2so JnRyeF9zeXMtPmxvY2spOwotI2VuZGlmIC8qIFVOSVZfREVCVUcgKi8KLQogCXJldHVybihyc2Vn KTsKIH0KIApAQCAtNjQ4LDcgKzY1MCw3IEBAIHRyeF9zdGFydF9sb3coCiAJLyogVGhlIGluaXRp YWwgdmFsdWUgZm9yIHRyeC0+bm86IElCX1VMT05HTE9OR19NQVggaXMgdXNlZCBpbgogCXJlYWRf dmlld19vcGVuX25vdzogKi8KIAotCXJzZWcgPSB0cnhfYXNzaWduX3JzZWcoKTsKKwlyc2VnID0g dHJ4X2Fzc2lnbl9yc2VnKHNydl9yb2xsYmFja19zZWdtZW50cyk7CiAKIAl0cngtPm5vID0gSUJf VUxPTkdMT05HX01BWDsKIApAQCAtNjYzLDYgKzY2NSw3IEBAIHRyeF9zdGFydF9sb3coCiAJdHJ4 LT5pbl9teXNxbF90cnhfbGlzdCB3b3VsZCBob2xkLiBJbiB0aGF0IGNhc2UsIHRoZSB0cngtPnN0 YXRlCiAJY2hhbmdlIG11c3QgYmUgcHJvdGVjdGVkIGJ5IHRoZSB0cnhfc3lzLT5sb2NrLCBzbyB0 aGF0CiAJbG9ja19wcmludF9pbmZvX2FsbF90cmFuc2FjdGlvbnMoKSB3aWxsIGhhdmUgYSBjb25z aXN0ZW50IHZpZXcuICovCisKIAl0cngtPnN0YXRlID0gVFJYX1NUQVRFX0FDVElWRTsKIAogCXRy eC0+aWQgPSB0cnhfc3lzX2dldF9uZXdfdHJ4X2lkKCk7CkBAIC02NzksMTAwICs2ODIsMTcwIEBA IHRyeF9zdGFydF9sb3coCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotQ29tbWl0cyBhIHRyYW5zYWN0aW9u LiAqLwotVU5JVl9JTlRFUk4KK1NldCB0aGUgdHJhbnNhY3Rpb24gc2VyaWFsaXNhdGlvbiBudW1i ZXIuICovCitzdGF0aWMKIHZvaWQKLXRyeF9jb21taXQoCi0vKj09PT09PT0qLwotCXRyeF90Kgl0 cngpCS8qITwgaW46IHRyYW5zYWN0aW9uICovCit0cnhfc2VyaWFsaXNhdGlvbl9udW1iZXJfZ2V0 KAorLyo9PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl0cnhfdCoJCXRyeCkJLyohPCBpbjog dHJhbnNhY3Rpb24gKi8KIHsKLQltdHJfdAkJCW10cjsKLQl0cnhfbmFtZWRfc2F2ZXB0X3QqCXNh dmVwOwotCWliX3VpbnQ2NF90CQlsc24gPSAwOwotCXBhZ2VfdCoJCQl1cGRhdGVfaGRyX3BhZ2U7 CisJdHJ4X3JzZWdfdCoJcnNlZzsKIAotCXV0X2FkKHRyeC0+aW5fdHJ4X2xpc3QpOwotCXV0X2Fk KCF0cnhfc3RhdGVfZXEodHJ4LCBUUlhfU1RBVEVfQ09NTUlUVEVEX0lOX01FTU9SWSkpOworCXJz ZWcgPSB0cngtPnJzZWc7CiAKLQlpZiAodHJ4LT5pbnNlcnRfdW5kbyAhPSBOVUxMIHx8IHRyeC0+ dXBkYXRlX3VuZG8gIT0gTlVMTCkgewotCQl0cnhfcnNlZ190Kglyc2VnOworCXV0X2FkKG11dGV4 X293bigmcnNlZy0+bXV0ZXgpKTsKIAotCQlyc2VnID0gdHJ4LT5yc2VnOworCXJ3X2xvY2tfeF9s b2NrKCZ0cnhfc3lzLT5sb2NrKTsKIAotCQltdHJfc3RhcnQoJm10cik7CisJdHJ4LT5ubyA9IHRy eF9zeXNfZ2V0X25ld190cnhfaWQoKTsKIAotCQkvKiBDaGFuZ2UgdGhlIHVuZG8gbG9nIHNlZ21l bnQgc3RhdGVzIGZyb20gVFJYX1VORE9fQUNUSVZFCi0JCXRvIHNvbWUgb3RoZXIgc3RhdGU6IHRo ZXNlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGUgZGF0YQotCQlzdHJ1Y3R1cmUgZGVmaW5lIHRo ZSB0cmFuc2FjdGlvbiBhcyBjb21taXR0ZWQgaW4gdGhlIGZpbGUKLQkJYmFzZWQgd29ybGQsIGF0 IHRoZSBzZXJpYWxpemF0aW9uIHBvaW50IG9mIHRoZSBsb2cgc2VxdWVuY2UKLQkJbnVtYmVyIGxz biBvYnRhaW5lZCBiZWxvdy4gKi8KKwkvKiBJZiB0aGUgcm9sbGFjayBzZWdtZW50IGlzIG5vdCBl bXB0eSB0aGVuIHRoZQorCW5ldyB0cnhfdDo6bm8gY2FuJ3QgYmUgbGVzcyB0aGFuIGFueSB0cnhf dDo6bm8KKwlhbHJlYWR5IGluIHRoZSByb2xsYmFjayBzZWdtZW50LiBVc2VyIHRocmVhZHMgb25s eQorCXByb2R1Y2UgZXZlbnRzIHdoZW4gYSByb2xsYmFjayBzZWdtZW50IGlzIGVtcHR5LiAqLwor CisJaWYgKHJzZWctPmxhc3RfcGFnZV9ubyA9PSBGSUxfTlVMTCkgeworCQl2b2lkKgkJcHRyOwor CQlyc2VnX3F1ZXVlX3QJcnNlZ19xdWV1ZTsKKworCQlyc2VnX3F1ZXVlLnJzZWcgPSByc2VnOwor CQlyc2VnX3F1ZXVlLnRyeF9ubyA9IHRyeC0+bm87CisKKwkJbXV0ZXhfZW50ZXIoJnB1cmdlX3N5 cy0+YmhfbXV0ZXgpOworCisJCS8qIFRoaXMgaXMgdG8gcmVkdWNlIHRoZSBwcmVzc3VyZSBvbiB0 aGUgdHJ4X3N5c190Ojpsb2NrCisJCXRob3VnaCBpbiByZWFsaXR5IGl0IHNob3VsZCBtYWtlIHZl cnkgbGl0dGxlIChyZWFkIG5vKQorCQlkaWZmZXJlbmNlIGJlY2F1c2UgdGhpcyBjb2RlIHBhdGgg aXMgb25seSB0YWtlbiB3aGVuIHRoZQorCQlyYnMgaXMgZW1wdHkuICovCisKKwkJcndfbG9ja194 X3VubG9jaygmdHJ4X3N5cy0+bG9jayk7CisKKwkJcHRyID0gaWJfYmhfcHVzaChwdXJnZV9zeXMt PmliX2JoLCAmcnNlZ19xdWV1ZSk7CisJCXV0X2EocHRyKTsKKworCQltdXRleF9leGl0KCZwdXJn ZV9zeXMtPmJoX211dGV4KTsKKwl9IGVsc2UgeworCQlyd19sb2NrX3hfdW5sb2NrKCZ0cnhfc3lz LT5sb2NrKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorQXNzaWduIHRoZSB0cmFuc2FjdGlvbiBp dHMgaGlzdG9yeSBzZXJpYWxpc2F0aW9uIG51bWJlciBhbmQgd3JpdGUgdGhlCit1cGRhdGUgVU5E TyBsb2cgcmVjb3JkIHRvIHRoZSBhc3NpZ25lZCByb2xsYmFjayBzZWdtZW50LgorQHJldHVybiB0 aGUgTFNOIG9mIHRoZSBVTkRPIGxvZyB3cml0ZS4gKi8KK3N0YXRpYworaWJfdWludDY0X3QKK3Ry eF93cml0ZV9zZXJpYWxpc2F0aW9uX2hpc3RvcnkoCisvKj09PT09PT09PT09PT09PT09PT09PT09 PT09PT0qLworCXRyeF90KgkJdHJ4KQkvKiE8IGluOiB0cmFuc2FjdGlvbiAqLworeworCisJbXRy X3QJCW10cjsKKwl0cnhfcnNlZ190Kglyc2VnOworCisJcnNlZyA9IHRyeC0+cnNlZzsKKworCW10 cl9zdGFydCgmbXRyKTsKKworCS8qIENoYW5nZSB0aGUgdW5kbyBsb2cgc2VnbWVudCBzdGF0ZXMg ZnJvbSBUUlhfVU5ET19BQ1RJVkUKKwl0byBzb21lIG90aGVyIHN0YXRlOiB0aGVzZSBtb2RpZmlj YXRpb25zIHRvIHRoZSBmaWxlIGRhdGEKKwlzdHJ1Y3R1cmUgZGVmaW5lIHRoZSB0cmFuc2FjdGlv biBhcyBjb21taXR0ZWQgaW4gdGhlIGZpbGUKKwliYXNlZCBkb21haW4sIGF0IHRoZSBzZXJpYWxp emF0aW9uIHBvaW50IG9mIHRoZSBsb2cgc2VxdWVuY2UKKwludW1iZXIgbHNuIG9idGFpbmVkIGJl bG93LiAqLworCisJaWYgKHRyeC0+dXBkYXRlX3VuZG8gIT0gTlVMTCkgeworCQlwYWdlX3QqCQl1 bmRvX2hkcl9wYWdlOworCQl0cnhfdW5kb190Kgl1bmRvID0gdHJ4LT51cGRhdGVfdW5kbzsKKwor CQkvKiBXZSBoYXZlIHRvIGhvbGQgdGhlIHJzZWcgbXV0ZXggYmVjYXVzZSB1cGRhdGUKKwkJbG9n IGhlYWRlcnMgaGF2ZSB0byBiZSBwdXQgdG8gdGhlIGhpc3RvcnkgbGlzdCBpbiB0aGUKKwkJKHNl cmlhbGlzYXRpb24pIG9yZGVyIG9mIHRoZSBVTkRPIHRyeCBudW1iZXIuIFRoaXMgaXMKKwkJcmVx dWlyZWQgZm9yIHRoZSBwdXJnZSBpbi1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIHRvby4gKi8KIAog CQltdXRleF9lbnRlcigmcnNlZy0+bXV0ZXgpOwogCi0JCWlmICh0cngtPmluc2VydF91bmRvICE9 IE5VTEwpIHsKLQkJCXRyeF91bmRvX3NldF9zdGF0ZV9hdF9maW5pc2godHJ4LT5pbnNlcnRfdW5k bywgJm10cik7Ci0JCX0KKwkJLyogQXNzaWduIHRoZSB0cmFuc2FjdGlvbiBzZXJpYWxpc2F0aW9u IG51bWJlciBhbmQgYWxzbworCQl1cGRhdGUgdGhlIHB1cmdlIG1pbiBiaW5hcnkgaGVhcCBpZiB0 aGlzIGlzIHRoZSBmaXJzdAorCQlVTkRPIGxvZyBiZWluZyB3cml0dGVuIHRvIHRoZSBhc3NpZ25l ZCByb2xsYmFjayBzZWdtZW50LiAqLwogCi0JCWlmICh0cngtPnVwZGF0ZV91bmRvICE9IE5VTEwp IHsKKwkJdHJ4X3NlcmlhbGlzYXRpb25fbnVtYmVyX2dldCh0cngpOwogCi0JCQlyd19sb2NrX3hf bG9jaygmdHJ4X3N5cy0+bG9jayk7CisJCS8qIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gb2J0YWlu IHRyeC0+dW5kb19tdXRleCBoZXJlCisJCWJlY2F1c2Ugb25seSBhIHNpbmdsZSBPUyB0aHJlYWQg aXMgYWxsb3dlZCB0byBkbyB0aGUKKwkJdHJhbnNhY3Rpb24gY29tbWl0IGZvciB0aGlzIHRyYW5z YWN0aW9uLiAqLwogCi0JCQl0cngtPm5vID0gdHJ4X3N5c19nZXRfbmV3X3RyeF9pZCgpOworCQl1 bmRvX2hkcl9wYWdlID0gdHJ4X3VuZG9fc2V0X3N0YXRlX2F0X2ZpbmlzaCh1bmRvLCAmbXRyKTsK IAotCQkJcndfbG9ja194X3VubG9jaygmdHJ4X3N5cy0+bG9jayk7CisJCXRyeF91bmRvX3VwZGF0 ZV9jbGVhbnVwKHRyeCwgdW5kb19oZHJfcGFnZSwgJm10cik7CisJfSBlbHNlIHsKKwkJbXV0ZXhf ZW50ZXIoJnJzZWctPm11dGV4KTsKKwl9CiAKLQkJCS8qIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8g b2J0YWluIHRyeC0+dW5kb19tdXRleCBoZXJlCi0JCQliZWNhdXNlIG9ubHkgYSBzaW5nbGUgT1Mg dGhyZWFkIGlzIGFsbG93ZWQgdG8gZG8gdGhlCi0JCQl0cmFuc2FjdGlvbiBjb21taXQgZm9yIHRo aXMgdHJhbnNhY3Rpb24uICovCisJaWYgKHRyeC0+aW5zZXJ0X3VuZG8gIT0gTlVMTCkgeworCQl0 cnhfdW5kb19zZXRfc3RhdGVfYXRfZmluaXNoKHRyeC0+aW5zZXJ0X3VuZG8sICZtdHIpOworCX0K IAotCQkJdXBkYXRlX2hkcl9wYWdlID0gdHJ4X3VuZG9fc2V0X3N0YXRlX2F0X2ZpbmlzaCgKLQkJ CQl0cngtPnVwZGF0ZV91bmRvLCAmbXRyKTsKKwltdXRleF9leGl0KCZyc2VnLT5tdXRleCk7CiAK LQkJCS8qIFdlIGhhdmUgdG8gZG8gdGhlIGNsZWFudXAgZm9yIHRoZSB1cGRhdGUgbG9nIHdoaWxl Ci0JCQlob2xkaW5nIHRoZSByc2VnIG11dGV4IGJlY2F1c2UgdXBkYXRlIGxvZyBoZWFkZXJzCi0J CQloYXZlIHRvIGJlIHB1dCB0byB0aGUgaGlzdG9yeSBsaXN0IGluIHRoZSBvcmRlciBvZgotCQkJ dGhlIHRyeCBudW1iZXIuICovCisJTU9OSVRPUl9JTkMoTU9OSVRPUl9UUlhfQ09NTUlUX1VORE8p OwogCi0JCQl0cnhfdW5kb191cGRhdGVfY2xlYW51cCh0cngsIHVwZGF0ZV9oZHJfcGFnZSwgJm10 cik7Ci0JCX0KKwkvKiBVcGRhdGUgdGhlIGxhdGVzdCBNeVNRTCBiaW5sb2cgbmFtZSBhbmQgb2Zm c2V0IGluZm8KKwlpbiB0cnggc3lzIGhlYWRlciBpZiBNeVNRTCBiaW5sb2dnaW5nIGlzIG9uIG9y IHRoZSBkYXRhYmFzZQorCXNlcnZlciBpcyBhIE15U1FMIHJlcGxpY2F0aW9uIHNsYXZlICovCiAK LQkJTU9OSVRPUl9JTkMoTU9OSVRPUl9UUlhfQ09NTUlUX1VORE8pOworCWlmICh0cngtPm15c3Fs X2xvZ19maWxlX25hbWUKKwkgICAgJiYgdHJ4LT5teXNxbF9sb2dfZmlsZV9uYW1lWzBdICE9ICdc MCcpIHsKIAotCQltdXRleF9leGl0KCZyc2VnLT5tdXRleCk7CisJCXRyeF9zeXNfdXBkYXRlX215 c3FsX2JpbmxvZ19vZmZzZXQoCisJCQl0cngtPm15c3FsX2xvZ19maWxlX25hbWUsCisJCQl0cngt Pm15c3FsX2xvZ19vZmZzZXQsCisJCQlUUlhfU1lTX01ZU1FMX0xPR19JTkZPLCAmbXRyKTsKIAot CQkvKiBVcGRhdGUgdGhlIGxhdGVzdCBNeVNRTCBiaW5sb2cgbmFtZSBhbmQgb2Zmc2V0IGluZm8K LQkJaW4gdHJ4IHN5cyBoZWFkZXIgaWYgTXlTUUwgYmlubG9nZ2luZyBpcyBvbiBvciB0aGUgZGF0 YWJhc2UKLQkJc2VydmVyIGlzIGEgTXlTUUwgcmVwbGljYXRpb24gc2xhdmUgKi8KLQotCQlpZiAo dHJ4LT5teXNxbF9sb2dfZmlsZV9uYW1lCi0JCSAgICAmJiB0cngtPm15c3FsX2xvZ19maWxlX25h bWVbMF0gIT0gJ1wwJykgewotCQkJdHJ4X3N5c191cGRhdGVfbXlzcWxfYmlubG9nX29mZnNldCgK LQkJCQl0cngtPm15c3FsX2xvZ19maWxlX25hbWUsCi0JCQkJdHJ4LT5teXNxbF9sb2dfb2Zmc2V0 LAotCQkJCVRSWF9TWVNfTVlTUUxfTE9HX0lORk8sICZtdHIpOwotCQkJdHJ4LT5teXNxbF9sb2df ZmlsZV9uYW1lID0gTlVMTDsKLQkJfQorCQl0cngtPm15c3FsX2xvZ19maWxlX25hbWUgPSBOVUxM OworCX0KIAotCQkvKiBUaGUgZm9sbG93aW5nIGNhbGwgY29tbWl0cyB0aGUgbWluaS10cmFuc2Fj dGlvbiwgbWFraW5nIHRoZQotCQl3aG9sZSB0cmFuc2FjdGlvbiBjb21taXR0ZWQgaW4gdGhlIGZp bGUtYmFzZWQgd29ybGQsIGF0IHRoaXMKLQkJbG9nIHNlcXVlbmNlIG51bWJlci4gVGhlIHRyYW5z YWN0aW9uIGJlY29tZXMgJ2R1cmFibGUnIHdoZW4KLQkJd2Ugd3JpdGUgdGhlIGxvZyB0byBkaXNr LCBidXQgaW4gdGhlIGxvZ2ljYWwgc2Vuc2UgdGhlIGNvbW1pdAotCQlpbiB0aGUgZmlsZS1iYXNl ZCBkYXRhIHN0cnVjdHVyZXMgKHVuZG8gbG9ncyBldGMuKSBoYXBwZW5zCi0JCWhlcmUuCi0KLQkJ Tk9URSB0aGF0IHRyYW5zYWN0aW9uIG51bWJlcnMsIHdoaWNoIGFyZSBhc3NpZ25lZCBvbmx5IHRv Ci0JCXRyYW5zYWN0aW9ucyB3aXRoIGFuIHVwZGF0ZSB1bmRvIGxvZywgZG8gbm90IG5lY2Vzc2Fy aWx5IGNvbWUKLQkJaW4gZXhhY3RseSB0aGUgc2FtZSBvcmRlciBhcyBjb21taXQgbHNuJ3MsIGlm IHRoZSB0cmFuc2FjdGlvbnMKLQkJaGF2ZSBkaWZmZXJlbnQgcm9sbGJhY2sgc2VnbWVudHMuIFRv IGdldCBleGFjdGx5IHRoZSBzYW1lCi0JCW9yZGVyIHdlIHNob3VsZCBob2xkIHRoZSB0cnggc3lz IG11dGV4IHVwIHRvIHRoaXMgcG9pbnQuCi0JCUhvd2V2ZXIsIGlmIGEgdHJhbnNhY3Rpb24gVDIg aXMgYWJsZSB0byBzZWUgbW9kaWZpY2F0aW9ucwotCQltYWRlIGJ5IGEgdHJhbnNhY3Rpb24gVDEs IFQyIHdpbGwgYWx3YXlzIGdldCBhIGJpZ2dlcgotCQl0cmFuc2FjdGlvbiBudW1iZXIgYW5kIGEg YmlnZ2VyIGNvbW1pdCBsc24gdGhhbiBUMS4gKi8KKwkvKiBUaGUgZm9sbG93aW5nIGNhbGwgY29t bWl0cyB0aGUgbWluaS10cmFuc2FjdGlvbiwgbWFraW5nIHRoZQorCXdob2xlIHRyYW5zYWN0aW9u IGNvbW1pdHRlZCBpbiB0aGUgZmlsZS1iYXNlZCB3b3JsZCwgYXQgdGhpcworCWxvZyBzZXF1ZW5j ZSBudW1iZXIuIFRoZSB0cmFuc2FjdGlvbiBiZWNvbWVzICdkdXJhYmxlJyB3aGVuCisJd2Ugd3Jp dGUgdGhlIGxvZyB0byBkaXNrLCBidXQgaW4gdGhlIGxvZ2ljYWwgc2Vuc2UgdGhlIGNvbW1pdAor CWluIHRoZSBmaWxlLWJhc2VkIGRhdGEgc3RydWN0dXJlcyAodW5kbyBsb2dzIGV0Yy4pIGhhcHBl bnMKKwloZXJlLgogCi0JCS8qLS0tLS0tLS0tLS0tLS0qLwotCQltdHJfY29tbWl0KCZtdHIpOwot CQkvKi0tLS0tLS0tLS0tLS0tKi8KLQkJbHNuID0gbXRyLmVuZF9sc247CisJTk9URSB0aGF0IHRy YW5zYWN0aW9uIG51bWJlcnMsIHdoaWNoIGFyZSBhc3NpZ25lZCBvbmx5IHRvCisJdHJhbnNhY3Rp b25zIHdpdGggYW4gdXBkYXRlIHVuZG8gbG9nLCBkbyBub3QgbmVjZXNzYXJpbHkgY29tZQorCWlu IGV4YWN0bHkgdGhlIHNhbWUgb3JkZXIgYXMgY29tbWl0IGxzbidzLCBpZiB0aGUgdHJhbnNhY3Rp b25zCisJaGF2ZSBkaWZmZXJlbnQgcm9sbGJhY2sgc2VnbWVudHMuIFRvIGdldCBleGFjdGx5IHRo ZSBzYW1lCisJb3JkZXIgd2Ugc2hvdWxkIGhvbGQgdGhlIGtlcm5lbCBtdXRleCB1cCB0byB0aGlz IHBvaW50LAorCWFkZGluZyB0byB0aGUgY29udGVudGlvbiBvZiB0aGUga2VybmVsIG11dGV4LiBI b3dldmVyLCBpZgorCWEgdHJhbnNhY3Rpb24gVDIgaXMgYWJsZSB0byBzZWUgbW9kaWZpY2F0aW9u cyBtYWRlIGJ5CisJYSB0cmFuc2FjdGlvbiBUMSwgVDIgd2lsbCBhbHdheXMgZ2V0IGEgYmlnZ2Vy IHRyYW5zYWN0aW9uCisJbnVtYmVyIGFuZCBhIGJpZ2dlciBjb21taXQgbHNuIHRoYW4gVDEuICov CisKKwkvKi0tLS0tLS0tLS0tLS0tKi8KKwltdHJfY29tbWl0KCZtdHIpOworCS8qLS0tLS0tLS0t LS0tLS0qLworCisJcmV0dXJuKG10ci5lbmRfbHNuKTsKK30KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCitDb21t aXRzIGEgdHJhbnNhY3Rpb24uICovCitVTklWX0lOVEVSTgordm9pZAordHJ4X2NvbW1pdCgKKy8q PT09PT09PSovCisJdHJ4X3QqCXRyeCkJLyohPCBpbjogdHJhbnNhY3Rpb24gKi8KK3sKKwl0cnhf bmFtZWRfc2F2ZXB0X3QqCXNhdmVwOworCWliX3VpbnQ2NF90CQlsc24gPSAwOworCisJdXRfYWQo dHJ4LT5pbl90cnhfbGlzdCk7CisJdXRfYWQoIXRyeF9zdGF0ZV9lcSh0cngsIFRSWF9TVEFURV9D T01NSVRURURfSU5fTUVNT1JZKSk7CisKKwlpZiAodHJ4LT5pbnNlcnRfdW5kbyAhPSBOVUxMIHx8 IHRyeC0+dXBkYXRlX3VuZG8gIT0gTlVMTCkgeworCQlsc24gPSB0cnhfd3JpdGVfc2VyaWFsaXNh dGlvbl9oaXN0b3J5KHRyeCk7CisJfSBlbHNlIHsKKwkJbHNuID0gMDsKIAl9CiAKIAl0cngtPm11 c3RfZmx1c2hfbG9nX2xhdGVyID0gRkFMU0U7CkBAIC03ODEsMTQgKzg1NCwxNyBAQCB0cnhfY29t bWl0KAogCiAJLyogUmVtb3ZlIHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2 ZSB0cmFuc2FjdGlvbnMKIAlub3cgdGhhdCBpdCBubyBsb25nZXIgaG9sZHMgYW55IHVzZXIgbG9j a3MuICovCisKIAlyd19sb2NrX3hfbG9jaygmdHJ4X3N5cy0+bG9jayk7CiAJdXRfYWQodHJ4LT5p bl90cnhfbGlzdCk7CiAJdXRfZCh0cngtPmluX3RyeF9saXN0ID0gRkFMU0UpOwogCVVUX0xJU1Rf UkVNT1ZFKHRyeF9saXN0LCB0cnhfc3lzLT50cnhfbGlzdCwgdHJ4KTsKKwogCS8qIElmIHRoaXMg dHJhbnNhY3Rpb24gY2FtZSBmcm9tIHRyeF9hbGxvY2F0ZV9mb3JfbXlzcWwoKSwKIAl0cngtPmlu X215c3FsX3RyeF9saXN0IHdvdWxkIGhvbGQuIEluIHRoYXQgY2FzZSwgdGhlCiAJdHJ4LT5zdGF0 ZSBjaGFuZ2UgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgdHJ4X3N5cy0+bG9jaywgc28gdGhhdAogCWxv Y2tfcHJpbnRfaW5mb19hbGxfdHJhbnNhY3Rpb25zKCkgd2lsbCBoYXZlIGEgY29uc2lzdGVudCB2 aWV3LiAqLworCiAJdHJ4LT5zdGF0ZSA9IFRSWF9TVEFURV9OT1RfU1RBUlRFRDsKIAl1dF9hZCh0 cnhfc3lzX3ZhbGlkYXRlX3RyeF9saXN0KCkpOwogCU1PTklUT1JfSU5DKE1PTklUT1JfVFJYX0NP TU1JVCk7Cgo9PT0gYWRkZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS91dC91dDBiaC5jJwotLS0g YS9zdG9yYWdlL2lubm9iYXNlL3V0L3V0MGJoLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgYi9zdG9yYWdlL2lubm9iYXNlL3V0L3V0MGJoLmMJMjAxMS0wMi0yMyAwNjo0ODoxNSArMDAw MApAQCAtMCwwICsxLDE2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKK0NvcHlyaWdodCAo YykgMjAxMCwgMjAxMSwgT3JhY2xlIENvcnBuLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQb3J0 aW9ucyBvZiB0aGlzIGZpbGUgY29udGFpbiBtb2RpZmljYXRpb25zIGNvbnRyaWJ1dGVkIGFuZCBj b3B5cmlnaHRlZCBieQorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBUaG9zZSBtb2RpZmljYXRpb25z IGFyZSBncmF0ZWZ1bGx5IGFja25vd2xlZGdlZCBhbmQKK2FyZSBkZXNjcmliZWQgYnJpZWZseSBp biB0aGUgSW5ub0RCIGRvY3VtZW50YXRpb24uIFRoZSBjb250cmlidXRpb25zIGJ5CitTdW4gTWlj cm9zeXN0ZW1zIGFyZSBpbmNvcnBvcmF0ZWQgd2l0aCB0aGVpciBwZXJtaXNzaW9uLCBhbmQgc3Vi amVjdCB0byB0aGUKK2NvbmRpdGlvbnMgY29udGFpbmVkIGluIHRoZSBmaWxlIENPUFlJTkcuU3Vu X01pY3Jvc3lzdGVtcy4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlCitGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisKK1RoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g U2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCit0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCitQbGFjZSwgU3VpdGUgMzMw LCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLy8qKgorQGZpbGUgdXQvdXQwYmguYworQmluYXJ5IG1pbi1oZWFwIGltcGxlbWVu dGF0aW9uLgorCitDcmVhdGVkIDIwMTAtMDUtMjggYnkgU3VubnkgQmFpbnMKKyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRl ICJ1dDBiaC5oIgorI2luY2x1ZGUgInV0MG1lbS5oIgorCisjaWZkZWYgVU5JVl9OT05JTkwKKyNp bmNsdWRlICJ1dDBiaC5pYyIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLy8qKgorQ3JlYXRlIGEgYmluYXJ5IGhlYXAuCitAcmV0dXJuIGEgbmV3IGJpbmFy eSBoZWFwICovCitVTklWX0lOVEVSTgoraWJfYmhfdCoKK2liX2JoX2NyZWF0ZSgKKy8qPT09PT09 PT09Ki8KKwlpYl9iaF9jbXBfdAljb21wYXJlLAkJLyohPCBpbjogY29tcGFyYXRvciAqLworCXVs aW50CQlzaXplb2ZfZWxlbSwJCS8qITwgaW46IHNpemUgb2Ygb25lIGVsZW1lbnQgKi8KKwl1bGlu dAkJbWF4X2VsZW1zKQkJLyohPCBpbjogbWF4IGVsZW1lbnRzIGFsbG93ZWQgKi8KK3sKKwl1bGlu dAkJc3o7CisJaWJfYmhfdCoJaWJfYmg7CisKKwlzeiA9IHNpemVvZigqaWJfYmgpICsgKHNpemVv Zl9lbGVtICogbWF4X2VsZW1zKTsKKworCWliX2JoID0gKGliX2JoX3QqKSB1dF9tYWxsb2Moc3op OworCW1lbXNldChpYl9iaCwgMHgwLCBzeik7CisKKwlpYl9iaC0+Y29tcGFyZSA9IGNvbXBhcmU7 CisJaWJfYmgtPm1heF9lbGVtcyA9IG1heF9lbGVtczsKKwlpYl9iaC0+c2l6ZW9mX2VsZW0gPSBz aXplb2ZfZWxlbTsKKworCXJldHVybihpYl9iaCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgor RnJlZSBhIGJpbmFyeSBoZWFwLgorQHJldHVybiBhIG5ldyBiaW5hcnkgaGVhcCAqLworVU5JVl9J TlRFUk4KK3ZvaWQKK2liX2JoX2ZyZWUoCisvKj09PT09PT0qLworCWliX2JoX3QqCWliX2JoKQkJ CS8qITwgaW4vb3duOiBpbnN0YW5jZSAqLworeworCXV0X2ZyZWUoaWJfYmgpOworfQorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8vKioKK0FkZCBhbiBlbGVtZW50IHRvIHRoZSBiaW5hcnkgaGVhcC4gTm90ZTog VGhlIGVsZW1lbnQgaXMgY29waWVkLgorQHJldHVybiBwb2ludGVyIHRvIGFkZGVkIGVsZW1lbnQg b3IgTlVMTCBpZiBmdWxsLiAqLworVU5JVl9JTlRFUk4KK3ZvaWQqCitpYl9iaF9wdXNoKAorLyo9 PT09PT09Ki8KKwlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGluL291dDogaW5zdGFuY2UgKi8KKwlj b25zdCB2b2lkKgllbGVtKQkJCS8qITwgaW46IGVsZW1lbnQgdG8gYWRkICovCit7CisJdm9pZCoJ CXB0cjsKKworCWlmIChpYl9iaF9pc19mdWxsKGliX2JoKSkgeworCQlyZXR1cm4oTlVMTCk7CisJ fSBlbHNlIGlmIChpYl9iaF9pc19lbXB0eShpYl9iaCkpIHsKKwkJKytpYl9iaC0+bl9lbGVtczsK KwkJcmV0dXJuKGliX2JoX3NldChpYl9iaCwgMCwgZWxlbSkpOworCX0gZWxzZSB7CisJCXVsaW50 CWk7CisKKwkJaSA9IGliX2JoLT5uX2VsZW1zOworCisJCSsraWJfYmgtPm5fZWxlbXM7CisKKwkJ Zm9yIChwdHIgPSBpYl9iaF9nZXQoaWJfYmgsIGkgPj4gMSk7CisJCSAgICAgaSA+IDAgJiYgaWJf YmgtPmNvbXBhcmUocHRyLCBlbGVtKSA+IDA7CisJCSAgICAgaSA+Pj0gMSwgcHRyID0gaWJfYmhf Z2V0KGliX2JoLCBpID4+IDEpKSB7CisKKwkJCWliX2JoX3NldChpYl9iaCwgaSwgcHRyKTsKKwkJ fQorCisJCXB0ciA9IGliX2JoX3NldChpYl9iaCwgaSwgZWxlbSk7CisJfQorCisJcmV0dXJuKHB0 cik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorUmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZy b20gdGhlIGJpbmFyeSBoZWFwLiAqLworVU5JVl9JTlRFUk4KK3ZvaWQKK2liX2JoX3BvcCgKKy8q PT09PT09Ki8KKwlpYl9iaF90KglpYl9iaCkJCQkvKiE8IGluL291dDogaW5zdGFuY2UgKi8KK3sK KwlieXRlKgkJcHRyOworCWJ5dGUqCQlsYXN0OworCXVsaW50CQlwYXJlbnQgPSAwOworCisJaWYg KGliX2JoX2lzX2VtcHR5KGliX2JoKSkgeworCQlyZXR1cm47CisJfSBlbHNlIGlmIChpYl9iaF9z aXplKGliX2JoKSA9PSAxKSB7CisJCS0taWJfYmgtPm5fZWxlbXM7CisJCXJldHVybjsKKwl9CisK KwlsYXN0ID0gKGJ5dGUqKSBpYl9iaF9sYXN0KGliX2JoKTsKKworCS8qIFN0YXJ0IGZyb20gdGhl IGNoaWxkIG5vZGUgKi8KKwlwdHIgPSAoYnl0ZSopIGliX2JoX2dldChpYl9iaCwgMSk7CisKKwl3 aGlsZSAocHRyIDwgbGFzdCkgeworCQkvKiBJZiB0aGUgInJpZ2h0IiBjaGlsZCBub2RlIGlzIDwg ImxlZnQiIGNoaWxkIG5vZGUgKi8KKwkJaWYgKGliX2JoLT5jb21wYXJlKHB0ciArIGliX2JoLT5z aXplb2ZfZWxlbSwgcHRyKSA8IDApIHsKKwkJCXB0ciArPSBpYl9iaC0+c2l6ZW9mX2VsZW07CisJ CX0KKworCQlpZiAoaWJfYmgtPmNvbXBhcmUobGFzdCwgcHRyKSA8PSAwKSB7CisJCQlicmVhazsK KwkJfQorCisJCWliX2JoX3NldChpYl9iaCwgcGFyZW50LCBwdHIpOworCisJCXBhcmVudCA9IChw dHIgLSAoYnl0ZSopIGliX2JoX2ZpcnN0KGliX2JoKSkKKwkJICAgICAgIC8gaWJfYmgtPnNpemVv Zl9lbGVtOworCisJCWlmICgocGFyZW50IDw8IDEpID49IGliX2JoX3NpemUoaWJfYmgpKSB7CisJ CQlicmVhazsKKwkJfQorCisJCXB0ciA9IChieXRlKikgaWJfYmhfZ2V0KGliX2JoLCBwYXJlbnQg PDwgMSk7CisJfQorCisJLS1pYl9iaC0+bl9lbGVtczsKKworCWliX2JoX3NldChpYl9iaCwgcGFy ZW50LCBsYXN0KTsKK30KCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvaW5ub2Jhc2UvdXQvdXQw YmguYycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS91dC91dDBiaC5jCTIwMTAtMDUtMjggMTA6MTI6 MzEgKzAwMDAKKysrIGIvc3RvcmFnZS9pbm5vYmFzZS91dC91dDBiaC5jCTE5NzAtMDEtMDEgMDA6 MDA6MDAgKzAwMDAKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCi0K LUNvcHlyaWdodCAoYykgMjAxMCwgT3JhY2xlIENvcnBuLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot Ci1Qb3J0aW9ucyBvZiB0aGlzIGZpbGUgY29udGFpbiBtb2RpZmljYXRpb25zIGNvbnRyaWJ1dGVk IGFuZCBjb3B5cmlnaHRlZCBieQotU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBUaG9zZSBtb2RpZmlj YXRpb25zIGFyZSBncmF0ZWZ1bGx5IGFja25vd2xlZGdlZCBhbmQKLWFyZSBkZXNjcmliZWQgYnJp ZWZseSBpbiB0aGUgSW5ub0RCIGRvY3VtZW50YXRpb24uIFRoZSBjb250cmlidXRpb25zIGJ5Ci1T dW4gTWljcm9zeXN0ZW1zIGFyZSBpbmNvcnBvcmF0ZWQgd2l0aCB0aGVpciBwZXJtaXNzaW9uLCBh bmQgc3ViamVjdCB0byB0aGUKLWNvbmRpdGlvbnMgY29udGFpbmVkIGluIHRoZSBmaWxlIENPUFlJ TkcuU3VuX01pY3Jvc3lzdGVtcy4KLQotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKLXRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlCi1Gb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0KLVRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAotQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKLUZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi10aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi1QbGFjZSwgU3Vp dGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0KLSoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLy8qKgotQGZpbGUgdXQvdXQwYmguYwotQmluYXJ5IG1pbi1oZWFwIGlt cGxlbWVudGF0aW9uLgotCi1DcmVhdGVkIDIwMTAtMDUtMjggYnkgU3VubnkgQmFpbnMKLSoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNp bmNsdWRlICJ1dDBiaC5oIgotI2luY2x1ZGUgInV0MG1lbS5oIgotCi0jaW5jbHVkZSA8c3RyaW5n Lmg+Ci0KLS8qKiBCaW5hcnkgaGVhcCBkYXRhIHN0cnVjdHVyZSAqLwotc3RydWN0IGliX2JoX3N0 cnVjdCB7Ci0JdWxpbnQJCW1heF9lbGVtczsJCS8qITwgbWF4IGVsZW1lbnRzIGFsbG93ZWQgKi8K LQl1bGludAkJbl9lbGVtczsJCS8qITwgY3VycmVudCBzaXplICovCi0JdWxpbnQJCXNpemVvZl9l bGVtOwkJLyohPCBzaXplb2YgZWxlbWVudCAqLwotCWliX2JoX2NtcF90CWNvbXBhcmU7CQkvKiE8 IGNvbXBhcmF0b3IgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotR2V0IHRoZSBudW1iZXIg b2YgZWxlbWVudHMgaW4gdGhlIGJpbmFyeSBoZWFwLgotQHJldHVybiBudW1iZXIgb2YgZWxlbWVu dHMgKi8KLVVOSVZfSU5URVJOCi11bGludAotaWJfYmhfc2l6ZSgKLS8qPT09PT09PSovCi0JY29u c3QgaWJfYmhfdCoJaWJfYmgpCQkJLyohPCBpbjogaW5zdGFuY2UgKi8KLXsKLQlyZXR1cm4oaWJf YmgtPm5fZWxlbXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLVRlc3QgaWYgYmluYXJ5IGhl YXAgaXMgZW1wdHkuCi1AcmV0dXJuIFRSVUUgaWYgZW1wdHkuICovCi1VTklWX0lOVEVSTgotaWJv b2wKLWliX2JoX2lzX2VtcHR5KAotLyo9PT09PT09PT09PSovCi0JY29uc3QgaWJfYmhfdCoJaWJf YmgpCQkJLyohPCBpbjogaW5zdGFuY2UgKi8KLXsKLQlyZXR1cm4oaWJfYmhfc2l6ZShpYl9iaCkg PT0gMCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotVGVzdCBpZiBiaW5hcnkgaGVhcCBpcyBm dWxsLgotQHJldHVybiBUUlVFIGlmIGZ1bGwuICovCi1VTklWX0lOVEVSTgotaWJvb2wKLWliX2Jo X2lzX2Z1bGwoCi0vKj09PT09PT09PT09Ki8KLQljb25zdCBpYl9iaF90KglpYl9iaCkJCQkvKiE8 IGluOiBpbnN0YW5jZSAqLwotewotCXJldHVybihpYl9iaF9zaXplKGliX2JoKSA+PSBpYl9iaC0+ bWF4X2VsZW1zKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCi1HZXQgYSBwb2ludGVyIHRvIHRo ZSBlbGVtZW50LgotQHJldHVybiBwb2ludGVyIHRvIGVsZW1lbnQgKi8KLVVOSVZfSU5URVJOCi12 b2lkKgotaWJfYmhfZ2V0KAotLyo9PT09PT09Ki8KLQlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGlu OiBpbnN0YW5jZSAqLwotCXVsaW50CQlpKQkJCS8qITwgaW46IGluZGV4ICovCi17Ci0JYnl0ZSoJ CXB0ciA9IChieXRlKikgKGliX2JoICsgMSk7Ci0KLQl1dF9hKGkgPCBpYl9iaF9zaXplKGliX2Jo KSk7Ci0KLQlyZXR1cm4ocHRyICsgKGliX2JoLT5zaXplb2ZfZWxlbSAqIGkpKTsKLX0KLQotLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovLyoqCi1Db3B5IGFuIGVsZW1lbnQgdG8gdGhlIGJpbmFyeSBoZWFwLgotQHJl dHVybiBwb2ludGVyIHRvIGNvcGllZCBlbGVtZW50ICovCi1VTklWX0lOVEVSTgotdm9pZCoKLWli X2JoX3NldCgKLS8qPT09PT09Ki8KLQlpYl9iaF90KglpYl9iaCwJCQkvKiE8IGluLG91dDogaW5z dGFuY2UgKi8KLQl1bGludAkJaSwJCQkvKiE8IGluOiBpbmRleCAqLwotCWNvbnN0IHZvaWQqCWVs ZW0pCQkJLyohPCBpbjogZWxlbWVudCB0byBhZGQgKi8KLXsKLQl2b2lkKgkJcHRyID0gaWJfYmhf Z2V0KGliX2JoLCBpKTsKLQotCW1lbWNweShwdHIsIGVsZW0sIGliX2JoLT5zaXplb2ZfZWxlbSk7 Ci0KLQlyZXR1cm4ocHRyKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCi1DcmVhdGUgYSBiaW5h cnkgaGVhcC4KLUByZXR1cm4gYSBuZXcgYmluYXJ5IGhlYXAgKi8KLVVOSVZfSU5URVJOCi1pYl9i aF90KgotaWJfYmhfY3JlYXRlKAotLyo9PT09PT09PT0qLwotCWliX2JoX2NtcF90CWNvbXBhcmUs CQkvKiE8IGluOiBjb21wYXJhdG9yICovCi0JdWxpbnQJCXNpemVvZl9lbGVtLAkJLyohPCBpbjog c2l6ZSBvZiBvbmUgZWxlbWVudCAqLwotCXVsaW50CQltYXhfZWxlbXMpCQkvKiE8IGluOiBtYXgg ZWxlbWVudHMgYWxsb3dlZCAqLwotewotCXVsaW50CQlzejsKLQlpYl9iaF90KglpYl9iaDsKLQot CXN6ID0gc2l6ZW9mKCppYl9iaCkgKyAoc2l6ZW9mX2VsZW0gKiBtYXhfZWxlbXMpOwotCi0JaWJf YmggPSAoaWJfYmhfdCopIHV0X21hbGxvYyhzeik7Ci0JbWVtc2V0KGliX2JoLCAweDAsIHN6KTsK LQkKLQlpYl9iaC0+Y29tcGFyZSA9IGNvbXBhcmU7Ci0JaWJfYmgtPm1heF9lbGVtcyA9IG1heF9l bGVtczsKLQlpYl9iaC0+c2l6ZW9mX2VsZW0gPSBzaXplb2ZfZWxlbTsKLQotCXJldHVybihpYl9i aCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotRnJlZSBhIGJpbmFyeSBoZWFwLgotQHJldHVy biBhIG5ldyBiaW5hcnkgaGVhcCAqLwotVU5JVl9JTlRFUk4KLXZvaWQKLWliX2JoX2ZyZWUoCi0v Kj09PT09PT0qLwotCWliX2JoX3QqCWliX2JoKQkJCS8qITwgaW4sb3duOiBpbnN0YW5jZSAqLwot ewotCXV0X2ZyZWUoaWJfYmgpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLUFkZCBhbiBlbGVt ZW50IHRvIHRoZSBiaW5hcnkgaGVhcC4gTm90ZTogVGhlIGVsZW1lbnQgaXMgY29waWVkLgotQHJl dHVybiBwb2ludGVyIHRvIGFkZGVkIGVsZW1lbnQgb3IgTlVMTCBpZiBmdWxsLiAqLwotVU5JVl9J TlRFUk4KLXZvaWQqCi1pYl9iaF9wdXNoKAotLyo9PT09PT09Ki8KLQlpYl9iaF90KglpYl9iaCwJ CQkvKiE8IGluLG91dDogaW5zdGFuY2UgKi8KLQljb25zdCB2b2lkKgllbGVtKQkJCS8qITwgaW46 IGVsZW1lbnQgdG8gYWRkICovCi17Ci0Jdm9pZCoJCXB0ciA9IE5VTEw7Ci0KLQlpZiAoIWliX2Jo X2lzX2Z1bGwoaWJfYmgpKSB7Ci0JCXVsaW50CWk7Ci0KLQkJaWYgKGliX2JoX2lzX2VtcHR5KGli X2JoKSkgewotCQkJKytpYl9iaC0+bl9lbGVtczsKLQkJCXJldHVybihpYl9iaF9zZXQoaWJfYmgs IDAsIGVsZW0pKTsKLQkJfQotCi0JCWkgPSBpYl9iaC0+bl9lbGVtczsKLQotCQkrK2liX2JoLT5u X2VsZW1zOwotCi0JCWZvciAocHRyID0gaWJfYmhfZ2V0KGliX2JoLCBpID4+IDEpOwotCQkgICAg IGkgPiAwICYmIGliX2JoLT5jb21wYXJlKHB0ciwgZWxlbSkgPiAwOwotCQkgICAgIGkgPj49IDEs IHB0ciA9IGliX2JoX2dldChpYl9iaCwgaSA+PiAxKSkgewotCi0JCQlpYl9iaF9zZXQoaWJfYmgs IGksIHB0cik7Ci0JCX0KLQotCQlwdHIgPSBpYl9iaF9zZXQoaWJfYmgsIGksIGVsZW0pOwotCX0K LQotCXJldHVybihwdHIpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKLVJldHVybiB0aGUgZmly c3QgZWxlbWVudCBmcm9tIHRoZSBiaW5hcnkgaGVhcC4gCi1AcmV0dXJuIHBvaW50ZXIgdG8gZmly c3QgZWxlbWVudCBvciBOVUxMIGlmIGVtcHR5LiAqLwotVU5JVl9JTlRFUk4KLXZvaWQqCi1pYl9i aF9maXJzdCgKLS8qPT09PT09PT0qLwotCWliX2JoX3QqCWliX2JoKQkJCS8qITwgaW4sb3V0OiBp bnN0YW5jZSAqLwotewotCXJldHVybihpYl9iaF9pc19lbXB0eShpYl9iaCkgPyBOVUxMIDogaWJf YmhfZ2V0KGliX2JoLCAwKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgotUmV0dXJuIHRoZSBs YXN0IGVsZW1lbnQgZnJvbSB0aGUgYmluYXJ5IGhlYXAuIAotQHJldHVybiBwb2ludGVyIHRvIGxh c3QgZWxlbWVudCBvciBOVUxMIGlmIGVtcHR5LiAqLwotVU5JVl9JTlRFUk4KLXZvaWQqCi1pYl9i aF9sYXN0KAotLyo9PT09PT09PSovCi0JaWJfYmhfdCoJaWJfYmgpCQkJLyohPCBpbixvdXQ6IGlu c3RhbmNlICovCi17Ci0JcmV0dXJuKGliX2JoX2lzX2VtcHR5KGliX2JoKQotCSAgICAgICA/IE5V TEwgCi0JICAgICAgIDogaWJfYmhfZ2V0KGliX2JoLCBpYl9iaF9zaXplKGliX2JoKSAtIDEpKTsK LX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovLyoqCi1SZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0 aGUgYmluYXJ5IGhlYXAuICovCi1VTklWX0lOVEVSTgotdm9pZAotaWJfYmhfcG9wKAotLyo9PT09 PT0qLwotCWliX2JoX3QqCWliX2JoKQkJCS8qITwgaW4sb3V0OiBpbnN0YW5jZSAqLwotewotCWJ5 dGUqCQlwdHI7Ci0JYnl0ZSoJCWxhc3Q7Ci0JdWxpbnQJCXBhcmVudCA9IDA7Ci0KLQlpZiAoaWJf YmhfaXNfZW1wdHkoaWJfYmgpKSB7Ci0JCXJldHVybjsKLQl9IGVsc2UgaWYgKGliX2JoX3NpemUo aWJfYmgpID09IDEpIHsKLQkJLS1pYl9iaC0+bl9lbGVtczsKLQkJcmV0dXJuOwotCX0KLQotCWxh c3QgPSAoYnl0ZSopIGliX2JoX2xhc3QoaWJfYmgpOwotCi0JLyogU3RhcnQgZnJvbSB0aGUgY2hp bGQgbm9kZSAqLwotCXB0ciA9IChieXRlKikgaWJfYmhfZ2V0KGliX2JoLCAxKTsKLQotCXdoaWxl IChwdHIgPCBsYXN0KSB7Ci0JCS8qIElmIHRoZSAicmlnaHQiIGNoaWxkIG5vZGUgaXMgPCAibGVm dCIgY2hpbGQgbm9kZSAqLwotCQlpZiAoaWJfYmgtPmNvbXBhcmUocHRyICsgaWJfYmgtPnNpemVv Zl9lbGVtLCBwdHIpIDwgMCkgewotCQkJcHRyICs9IGliX2JoLT5zaXplb2ZfZWxlbTsKLQkJfQot Ci0JCWlmIChpYl9iaC0+Y29tcGFyZShsYXN0LCBwdHIpID4gMCkgewotCQkJaWJfYmhfc2V0KGli X2JoLCBwYXJlbnQsIHB0cik7Ci0JCX0gZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCXBhcmVu dCA9IChwdHIgLSAoYnl0ZSopIGliX2JoX2ZpcnN0KGliX2JoKSkgLyBpYl9iaC0+c2l6ZW9mX2Vs ZW07Ci0KLQkJaWYgKChwYXJlbnQgPDwgMSkgPCBpYl9iaF9zaXplKGliX2JoKSkgewotCQkJcHRy ID0gKGJ5dGUqKSBpYl9iaF9nZXQoaWJfYmgsIHBhcmVudCA8PCAxKTsKLQkJfSBlbHNlIHsKLQkJ CWJyZWFrOwotCQl9Ci0JfQotCi0JLS1pYl9iaC0+bl9lbGVtczsKLQotCWliX2JoX3NldChpYl9i aCwgcGFyZW50LCBsYXN0KTsKLX0KCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL2lubm9iYXNl L3V0L3V0MHV0LmMnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2UvdXQvdXQwdXQuYwkyMDEwLTExLTE1 IDA3OjExOjE4ICswMDAwCisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2UvdXQvdXQwdXQuYwkyMDExLTAy LTIyIDA1OjExOjE1ICswMDAwCkBAIC0xLDEzICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgogCi1Db3B5cmlnaHQgKGMpIDE5OTQsIDIwMTAsIElubm9iYXNlIE95LiBBbGwgUmlnaHRzIFJl c2VydmVkLgotQ29weXJpZ2h0IChjKSAyMDA5LCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0KLVBv cnRpb25zIG9mIHRoaXMgZmlsZSBjb250YWluIG1vZGlmaWNhdGlvbnMgY29udHJpYnV0ZWQgYW5k IGNvcHlyaWdodGVkIGJ5Ci1TdW4gTWljcm9zeXN0ZW1zLCBJbmMuIFRob3NlIG1vZGlmaWNhdGlv bnMgYXJlIGdyYXRlZnVsbHkgYWNrbm93bGVkZ2VkIGFuZAotYXJlIGRlc2NyaWJlZCBicmllZmx5 IGluIHRoZSBJbm5vREIgZG9jdW1lbnRhdGlvbi4gVGhlIGNvbnRyaWJ1dGlvbnMgYnkKLVN1biBN aWNyb3N5c3RlbXMgYXJlIGluY29ycG9yYXRlZCB3aXRoIHRoZWlyIHBlcm1pc3Npb24sIGFuZCBz dWJqZWN0IHRvIHRoZQotY29uZGl0aW9ucyBjb250YWluZWQgaW4gdGhlIGZpbGUgQ09QWUlORy5T dW5fTWljcm9zeXN0ZW1zLgorQ29weXJpZ2h0IChjKSAyMDExLCBPcmFjbGUgQ29ycG4uIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCiAKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZQoKTm8gYnVuZGxlIChyZWFzb246IHJldmlzaW9uIGlzIGEgbWVyZ2UpLg==