From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 102131 invoked by alias); 5 Oct 2015 23:11:20 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 102117 invoked by uid 89); 5 Oct 2015 23:11:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.6 required=5.0 tests=AWL,BAYES_50,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: rcdn-iport-3.cisco.com Received: from rcdn-iport-3.cisco.com (HELO rcdn-iport-3.cisco.com) (173.37.86.74) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Mon, 05 Oct 2015 23:11:15 +0000 X-Files: binutils-gnuxhash.patch, glibc-gnuxhash.patch : 21107, 9544 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0ATBQDUAhNW/4gNJK1egydULUEGuWyGCiGFeYE4PBABAQEBAQEBfwuEK2sJFwEaNjAXDwEEGwYNiBMNmh+kDgEBAQEBAQQBAQEBAQEBFwSGc4N4hhWEMQWNB4Uvg0gBgkuBYWqCb4UKii6EKY0UATgrghABHYFUcQGHOIEGAQEB Received: from alln-core-3.cisco.com ([173.36.13.136]) by rcdn-iport-3.cisco.com with ESMTP; 05 Oct 2015 23:11:13 +0000 Received: from XCH-RCD-016.cisco.com (xch-rcd-016.cisco.com [173.37.102.26]) by alln-core-3.cisco.com (8.14.5/8.14.5) with ESMTP id t95NBC4r003041 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=FAIL) for ; Mon, 5 Oct 2015 23:11:12 GMT Received: from xch-rcd-006.cisco.com (173.37.102.16) by XCH-RCD-016.cisco.com (173.37.102.26) with Microsoft SMTP Server (TLS) id 15.0.1104.5; Mon, 5 Oct 2015 18:11:11 -0500 Received: from xch-rcd-006.cisco.com ([173.37.102.16]) by XCH-RCD-006.cisco.com ([173.37.102.16]) with mapi id 15.00.1104.000; Mon, 5 Oct 2015 18:11:11 -0500 From: "Neil Schellenberger (neschell)" To: "binutils@sourceware.org" Subject: [PATCH] MIPS support for --hash-style=gnu Date: Mon, 05 Oct 2015 23:11:00 -0000 Message-ID: x-ms-exchange-transport-fromentityheader: Hosted Content-Type: multipart/mixed; boundary="_003_b49cd7d6b04d41749d56d557879ad4a6XCHRCD006ciscocom_" MIME-Version: 1.0 X-SW-Source: 2015-10/txt/msg00057.txt.bz2 --_003_b49cd7d6b04d41749d56d557879ad4a6XCHRCD006ciscocom_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 11120 I am tasked with reducing the time spent in the interpreter/loader at progr= am start time for a very large, multi-platform, multi-architecture, legacy = system (25+Mloc, 2000+ DSOs, 1+M symbols). On MIPS this loader overhead is= several much larger than for other supported architectures, which is not u= nexpected given the lack of .gnu.hash support. [1] Measurement shows that = a principal factor for the programs most affected is the very large number = of DSOs which are directly or indirectly needed -- the chief expense being = the cost of successive table misses during symbol resolution. A secondary = factor is that some of the executables and DSOs have a very large number of= symbols with relocations -- on MIPS these tend to run afoul of the multi-G= OT mechanism which places many into secondary GOTs, resulting in unconditio= nally forcing their resolution at load time. [2][3][4] At this stage in th= e lifecycle of this particular product, large scale architectural changes t= end not to be feasible (e.g. appreciably decreasing either the number of DS= Os or the number of relocations) so a more transparent solution is preferab= le. (c.f. [5][6]) In order to tackle the main problem -- large numbers of needed DSOs -- some= means of avoiding unprofitable (i.e. certain miss) hash table probes would= help significantly. Since code to support Bloom filtering already exists = for GNU-style hash tables (DT_GNU_HASH), it seemed attractive to enable tha= t feature for MIPS (and then also benefit from as much of the hash chain op= timization as possible). [6] As I understand it, the fundamental problem w= hich has historically prevented this support is, briefly, that the MIPS ABI= requires that the .dynsym table be sorted in a particular order, while .gn= u.hash mandates a different order; this appears to have stymied at least on= e earlier attempt. [8] As I am expert neither with MIPS and its many ABI o= ddities, nor with the implementation of the BFD linker, I have opted to tak= e a very, very simple -- if perhaps non-optimal -- approach. Inspired by t= he comment made by Richard Sandison to Hiroki Kaminaga concerning external = symbol blocks [9], I chose to reuse GNU-style hash tables, only with the si= mple addition of a translation table to map the GNU symbol order to the MIP= S symbol order. The MIPS .dynsym table proper continues to be completely i= dentical: its sort order and content are entirely unchanged. The proposed = changes also leave the output of all other targets/backends entirely unchan= ged (including MIPS using traditional SysV .hash). In an attempt to avoid forward compatibility issues, a new section and rela= ted dynamic tag are proposed: .gnu.xhash and DT_GNU_XHASH. (The "X" standi= ng either for "extended" or as a mnemonic for "translated", as the reader p= refers.) This ensures that old binutils, glibc, and other third party code= do not attempt to behave as if a traditional .gnu.hash/DT_GNU_HASH is pres= ent. Likewise, the name of the section was chosen so that it is not a text= ual prefix of .gnu.hash in an attempt to preclude any insufficiently discri= minating pattern from matching inadvertently (e.g. in a script parsing read= elf output). In practice, though, the .gnu.xhash section is virtually identical to .gnu.= hash. [9] // Part 0: .gnu.xhash header Elf32_Word ngnusyms; // number of entries in chains (and xlat); dynsymco= unt=3Dsymndx+ngnusyms // Part 1: .gnu.hash header Elf32_Word nbuckets; // number of hash table buckets Elf32_Word symndx; // number of initial .dynsym entires skipped in chain= s[] (and xlat[]) Elf32_Word maskwords; // number of ElfW(Addr) words in bitmask Elf32_Word shift2; // bit shift of hashval for second Bloom filter bit // Part 2: .gnu.hash Bloom filter ElfW(Addr) bitmask[maskwords]; // 2 bit Bloom filter on hashval // Part 3: .gnu.hash buckets Elf32_Word buckets[nbuckets]; // indices into chains[] // Part 4: .gnu.hash chains Elf32_Word chains[ngnusyms]; // consecutive hashvals in a given bucket; = last entry in chain has LSB set // Part 5: .gnu.xhash translation table Elf32_Word xlat[ngnusyms]; // parallel to chains[]; index into .dynsym Parts 1 through 4 correspond exactly in layout to the traditional .gnu.hash= ; part 4 has slightly different semantics since the correct MIPS .dynsym in= dex has to be first looked up in the parallel xlat table i.e. the symbol co= rresponding to the hashval in chain[N] is .dynsym[xlat[N]]. It is intentio= nal that the .gnu.xhash layout contains a .gnu.hash layout as a subcomponen= t: it represents an attempt to reuse unchanged as much BFD and readelf code= as possible. The space cost of .gnu.xhash relative to .gnu.hash is ngnusy= ms+1 32 bit words. (For time cost, the L2 cache hit from the xlat table lo= okup is probably atrocious, but at that point we're already about to perfor= m a string compare which is probably going to be even more atrocious.... I= n any case, it's a whole lot better than SysV .hash.) In order to reuse the maximum amount of existing code with the minimum amou= nt of copying while also maintaining 100% backward compatibility, I chose t= o implement the support as a BFD ELF backend hook: record_hash_symbol(). F= or all platforms other than MIPS, this hook is NULL and the behaviour is to= write .gnu.hash (or not) exactly as they always have done. For MIPS, this= hook is non-NULL and (when --hash-style=3Dgnu) will output a .gnu.xhash se= ction which the MIPS specific ELF backend then updates with a translation t= able to allow .gnu.xhash symbol indices to be translated to MIPS .dynsym in= dices at the right time during linking. The principal changes to the commo= n support (in bfd/elflink.c) are in bfd_elf_size_dynsym_hash_dynstr() which= computes the correct size for the .gnu.[x]hash section; and in elf_renumbe= r_gnu_hash_syms() which did the sorting for .gnu.hash. On the ELF MIPS spe= cific side, the main changes are to mips_elf_sort_hash_table_f(); and in th= e addition of the backend function _bfd_mips_elf_record_hash_symbol() with = an associated new field in struct mips_elf_link_hash_entry. In bfd_elf_size_dynsym_hash_dynstr() the code was modified as little as pos= sible in order to keep the diff small and simple to review; the unfortunate= corollary to that is that the changes are a little ugly and somewhat britt= le (conditionally shifting the contents pointers along etc.) This also to = an extent dictated the layout of the .gnu.xhash section: it is essentially = a .gnu.hash section with a leading ngnusyms word and a following translatio= n table. (The basic form of the .gnu.hash section was retained so as also = to keep the readelf changes to a minimum.) The elf_renumber_gnu_hash_syms() function no longer unconditionally renumbe= rs the symbols. Instead, if the backend supplies record_hash_symbol(), the= n that is called instead to allow it to record the offset of the translatio= n table entry for that symbol. The MIPS backend will then fill this in lat= er once it has finished fiddling with the GOT(s). I chose to pass an offse= t here rather than a pointer only because I wasn't entirely certain if it w= as architecturally acceptable to assume that the content of the section wou= ld never be replaced sometime in between (although this is not currently th= e case). On the ELF MIPS side, mips_elf_sort_hash_table_f() now also outputs the fin= al index of each symbol into the .gnu.xhash translation table as required. = This is also a bit brittle since it assumes that nothing else is going to = come along and change the order yet again afterwards, but that is also true= of all of the already existing MIPS backend code. The readelf support essentially speaks for itself. Again, it's a bit ugly = since I tried to stick only to insertions and not changing existing lines, = so as to make the code inspect simpler. No changes to gold are proposed here because, if I understand correctly, th= ere is as yet no general MIPS support in any case. I have included the glibc changes here only as a convenience to reviewers; = I will be posting to libc-alpha as well. (It is perhaps interesting to not= e in passing that although --hash-style=3Dgnu was disabled in the linker, D= T_GNU_HASH support was never removed from the glibc MIPS sysdep dl-lookup.c= . This means that on MIPS the new and old hashvals are currently always bo= th computed at runtime for every symbol. Fortunately in practice this cost= appears to be entirely negligible. Laterally, I suspect that Jakub Jeline= k had independently confirmed this insignificance and is why .hashvals neve= r made it into .gnu.hash. [11] I experimented with adding .hashvals as wel= l as .gnu.xhash, but it made no appreciable difference.) The patch is relative to binutils-2_24 (which is where I'll ultimately need= it) but is equally applicable to trunk. (The glibc patch is relative to a= lightly customized 2.16 but again is equally applicable to trunk.) As thi= s is my first attempt at a patch for the linker, I've omitted the ChangeLog= and test cases for the moment, pending feedback. Technical and procedural= criticism is gratefully welcomed. I should very much like to thank the ma= ny who have taken the time to post on these and related subjects over the y= ears -- I would have found even this modest attempt very difficult without = the historical context. Particular thanks are due to Michael Meeks, Jakub = Jelinek, Richard Sandiford, and Hiroki Kaminaga. Errors in comprehension a= nd judgement are entirely my own. Regards, Neil P.S. It is not entirely clear to me how xgot support does or should intera= ct with multi-GOT. [12] With xgot supporting about 2**32 entries, shouldn'= t it be the case that multiple GOTs are almost never needed? [1] Disable .gnu.hash on MIPS targets https://www.sourceware.org/ml/binut= ils/2006-07/msg00341.html [2] MIPS Multi GOT https://dmz-portal.mips.com/wiki/MIPS_Multi_GOT [3] MIPS multi-got link support https://www.sourceware.org/ml/binutils/20= 03-01/msg00165.html [4] Description of MIPS/IRIX multigot https://sourceware.org/ml/binutils/= 2014-03/msg00174.html [5] Speeding up the dynamic linker with 100s of DSOs? https://www.sourcew= are.org/ml/libc-alpha/2006-01/msg00018.html [6] Re: OO.o / ld / -Bsymbolic patch https://sourceware.org/ml/binutils/= 2005-07/msg00109.html [7] [PATCH] DT_GNU_HASH: ~ 50% dynamic linking improvement https://www.so= urceware.org/ml/binutils/2006-06/msg00418.html [8] [RFC][PATCH][EXPERIMENTAL] enable MIPS gnu hash (was: Re: use of gnu h= ash for MIPS) https://sourceware.org/ml/binutils/2007-08/msg00387.html [9] Re: use of gnu hash for MIPS https://sourceware.org/ml/binutils/2007-= 03/msg00126.html [10] Re: GNU_HASH section format https://sourceware.org/ml/binutils/2006-= 10/msg00377.html [11] binutils/glibc .hashvals section ... https://sourceware.org/ml/binut= ils/2006-01/msg00171.html [12] Add -mxgot option to mips backend https://gcc.gnu.org/ml/gcc-patches= /2003-08/msg01856.html --_003_b49cd7d6b04d41749d56d557879ad4a6XCHRCD006ciscocom_ Content-Type: application/octet-stream; name="binutils-gnuxhash.patch" Content-Description: binutils-gnuxhash.patch Content-Disposition: attachment; filename="binutils-gnuxhash.patch"; size=21107; creation-date="Tue, 22 Sep 2015 22:44:31 GMT"; modification-date="Mon, 05 Oct 2015 22:26:53 GMT" Content-Transfer-Encoding: base64 Content-length: 28614 ZGlmZiAtLWdpdCBhL2JmZC9lbGYtYmZkLmggYi9iZmQvZWxmLWJmZC5oCmlu ZGV4IGFkZDgwYjMuLjU0MThlMWQgMTAwNjQ0Ci0tLSBhL2JmZC9lbGYtYmZk LmgKKysrIGIvYmZkL2VsZi1iZmQuaApAQCAtMTIxNiw2ICsxMjE2LDEzIEBA IHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhCiAgIC8qIFJldHVybiBUUlVFIGlm IHN5bWJvbCBzaG91bGQgYmUgaGFzaGVkIGluIHRoZSBgLmdudS5oYXNoJyBz ZWN0aW9uLiAgKi8KICAgYmZkX2Jvb2xlYW4gKCplbGZfaGFzaF9zeW1ib2wp IChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKTsKIAorICAvKiBJZiBu b24tTlVMTCwgY2FsbGVkIHRvIHJlZ2lzdGVyIHRoZSBsb2NhdGlvbiBYTEFU X0xPQyB3aXRoaW4KKyAgICAgLmdudS54aGFzaCBhdCB3aGljaCByZWFsIGZp bmFsIGR5bmluZHggZm9yIEggc2hvdWxkIGJlIHdyaXR0ZW4uCisgICAgIElm IFhMQVRfTE9DIGlzIHplcm8sIHRoZSBzeW1ib2wgaXMgbm90IGluY2x1ZGVk IGluCisgICAgIC5nbnUueGhhc2ggYW5kIG5vIGR5bmluZHggc2hvdWxkIGJl IHdyaXR0ZW4uICAqLworICB2b2lkICgqcmVjb3JkX2hhc2hfc3ltYm9sKQor ICAgIChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaCwgYmZkX3ZtYSB4 bGF0X2xvYyk7CisKICAgLyogUmV0dXJuIFRSVUUgaWYgdHlwZSBpcyBhIGZ1 bmN0aW9uIHN5bWJvbCB0eXBlLiAgKi8KICAgYmZkX2Jvb2xlYW4gKCppc19m dW5jdGlvbl90eXBlKSAodW5zaWduZWQgaW50IHR5cGUpOwogCmRpZmYgLS1n aXQgYS9iZmQvZWxmLmMgYi9iZmQvZWxmLmMKaW5kZXggOGRmMzhlZS4uMDUy NjE4MyAxMDA2NDQKLS0tIGEvYmZkL2VsZi5jCisrKyBiL2JmZC9lbGYuYwpA QCAtMTMwOSw2ICsxMzA5LDcgQEAgX2JmZF9lbGZfcHJpbnRfcHJpdmF0ZV9i ZmRfZGF0YSAoYmZkICphYmZkLCB2b2lkICpmYXJnKQogCSAgICBjYXNlIERU X1VTRUQ6IG5hbWUgPSAiVVNFRCI7IGJyZWFrOwogCSAgICBjYXNlIERUX0ZJ TFRFUjogbmFtZSA9ICJGSUxURVIiOyBzdHJpbmdwID0gVFJVRTsgYnJlYWs7 CiAJICAgIGNhc2UgRFRfR05VX0hBU0g6IG5hbWUgPSAiR05VX0hBU0giOyBi cmVhazsKKwkgICAgY2FzZSBEVF9HTlVfWEhBU0g6IG5hbWUgPSAiR05VX1hI QVNIIjsgYnJlYWs7CiAJICAgIH0KIAogCSAgZnByaW50ZiAoZiwgIiAgJS0y MHMgIiwgbmFtZSk7CkBAIC0xNTc1LDYgKzE1NzYsNyBAQCBiZmRfc2VjdGlv bl9mcm9tX3NoZHIgKGJmZCAqYWJmZCwgdW5zaWduZWQgaW50IHNoaW5kZXgp CiAgICAgY2FzZSBTSFRfUFJFSU5JVF9BUlJBWToJLyogLnByZWluaXRfYXJy YXkgc2VjdGlvbi4gICovCiAgICAgY2FzZSBTSFRfR05VX0xJQkxJU1Q6CS8q IC5nbnUubGlibGlzdCBzZWN0aW9uLiAgKi8KICAgICBjYXNlIFNIVF9HTlVf SEFTSDoJCS8qIC5nbnUuaGFzaCBzZWN0aW9uLiAgKi8KKyAgICBjYXNlIFNI VF9HTlVfWEhBU0g6CQkvKiAuZ251LnhoYXNoIHNlY3Rpb24uICAqLwogICAg ICAgcmV0dXJuIF9iZmRfZWxmX21ha2Vfc2VjdGlvbl9mcm9tX3NoZHIgKGFi ZmQsIGhkciwgbmFtZSwgc2hpbmRleCk7CiAKICAgICBjYXNlIFNIVF9EWU5B TUlDOgkvKiBEeW5hbWljIGxpbmtpbmcgaW5mb3JtYXRpb24uICAqLwpAQCAt MjEwMiw2ICsyMTA0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZmRfZWxm X3NwZWNpYWxfc2VjdGlvbiBzcGVjaWFsX3NlY3Rpb25zX2dbXSA9CiAgIHsg U1RSSU5HX0NPTU1BX0xFTiAoIi5nbnUubGlibGlzdCIpLCAgICAgMCwgU0hU X0dOVV9MSUJMSVNULCBTSEZfQUxMT0MgfSwKICAgeyBTVFJJTkdfQ09NTUFf TEVOICgiLmdudS5jb25mbGljdCIpLCAgICAwLCBTSFRfUkVMQSwgICAgICAg IFNIRl9BTExPQyB9LAogICB7IFNUUklOR19DT01NQV9MRU4gKCIuZ251Lmhh c2giKSwgICAgICAgIDAsIFNIVF9HTlVfSEFTSCwgICAgU0hGX0FMTE9DIH0s CisgIHsgU1RSSU5HX0NPTU1BX0xFTiAoIi5nbnUueGhhc2giKSwgICAgICAg MCwgU0hUX0dOVV9YSEFTSCwgICBTSEZfQUxMT0MgfSwKICAgeyBOVUxMLCAg ICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAwLCAwLCAgICAgICAg ICAgICAgIDAgfQogfTsKIApAQCAtMjcxNCw2ICsyNzE3LDcgQEAgZWxmX2Zh a2Vfc2VjdGlvbnMgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKmFzZWN0LCB2b2lk ICpmc2FyZykKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSFRfR05VX0hB U0g6CisgICAgY2FzZSBTSFRfR05VX1hIQVNIOgogICAgICAgdGhpc19oZHIt PnNoX2VudHNpemUgPSBiZWQtPnMtPmFyY2hfc2l6ZSA9PSA2NCA/IDAgOiA0 OwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzIyMCw2ICszMjI0LDcgQEAg YXNzaWduX3NlY3Rpb25fbnVtYmVycyAoYmZkICphYmZkLCBzdHJ1Y3QgYmZk X2xpbmtfaW5mbyAqbGlua19pbmZvKQogCiAJY2FzZSBTSFRfSEFTSDoKIAlj YXNlIFNIVF9HTlVfSEFTSDoKKwljYXNlIFNIVF9HTlVfWEhBU0g6CiAJY2Fz ZSBTSFRfR05VX3ZlcnN5bToKIAkgIC8qIHNoX2xpbmsgaXMgdGhlIHNlY3Rp b24gaGVhZGVyIGluZGV4IG9mIHRoZSBzeW1ib2wgdGFibGUKIAkgICAgIHRo aXMgaGFzaCB0YWJsZSBvciB2ZXJzaW9uIHRhYmxlIGlzIGZvci4gICovCmRp ZmYgLS1naXQgYS9iZmQvZWxmbGluay5jIGIvYmZkL2VsZmxpbmsuYwppbmRl eCA5OWI3Y2ExLi4xZTNlMmRiIDEwMDY0NAotLS0gYS9iZmQvZWxmbGluay5j CisrKyBiL2JmZC9lbGZsaW5rLmMKQEAgLTI3MSw4ICsyNzEsMTIgQEAgX2Jm ZF9lbGZfbGlua19jcmVhdGVfZHluYW1pY19zZWN0aW9ucyAoYmZkICphYmZk LCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKIAogICBpZiAoaW5mby0+ ZW1pdF9nbnVfaGFzaCkKICAgICB7Ci0gICAgICBzID0gYmZkX21ha2Vfc2Vj dGlvbl9hbnl3YXlfd2l0aF9mbGFncyAoYWJmZCwgIi5nbnUuaGFzaCIsCi0J CQkJCSAgICAgIGZsYWdzIHwgU0VDX1JFQURPTkxZKTsKKyAgICAgIGlmIChi ZWQtPnJlY29yZF9oYXNoX3N5bWJvbCA9PSBOVUxMKQorCXMgPSBiZmRfbWFr ZV9zZWN0aW9uX2FueXdheV93aXRoX2ZsYWdzIChhYmZkLCAiLmdudS5oYXNo IiwKKwkJCQkJCWZsYWdzIHwgU0VDX1JFQURPTkxZKTsKKyAgICAgIGVsc2UK KwlzID0gYmZkX21ha2Vfc2VjdGlvbl9hbnl3YXlfd2l0aF9mbGFncyAoYWJm ZCwgIi5nbnUueGhhc2giLAorCQkJCQkJZmxhZ3MgfCBTRUNfUkVBRE9OTFkp OwogICAgICAgaWYgKHMgPT0gTlVMTAogCSAgfHwgISBiZmRfc2V0X3NlY3Rp b25fYWxpZ25tZW50IChhYmZkLCBzLCBiZWQtPnMtPmxvZ19maWxlX2FsaWdu KSkKIAlyZXR1cm4gRkFMU0U7CkBAIC01MTk5LDYgKzUyMDMsNyBAQCBzdHJ1 Y3QgY29sbGVjdF9nbnVfaGFzaF9jb2RlcwogICB1bnNpZ25lZCBsb25nIGlu dCAqY291bnRzOwogICBiZmRfdm1hICpiaXRtYXNrOwogICBiZmRfYnl0ZSAq Y29udGVudHM7CisgIGJmZF92bWEgeGxhdDsKICAgbG9uZyBpbnQgbWluX2R5 bmluZHg7CiAgIHVuc2lnbmVkIGxvbmcgaW50IGJ1Y2tldGNvdW50OwogICB1 bnNpZ25lZCBsb25nIGludCBzeW1pbmR4OwpAQCAtNTI3OCw3ICs1MjgzLDE1 IEBAIGVsZl9yZW51bWJlcl9nbnVfaGFzaF9zeW1zIChzdHJ1Y3QgZWxmX2xp bmtfaGFzaF9lbnRyeSAqaCwgdm9pZCAqZGF0YSkKICAgaWYgKCEgKCpzLT5i ZWQtPmVsZl9oYXNoX3N5bWJvbCkgKGgpKQogICAgIHsKICAgICAgIGlmICho LT5keW5pbmR4ID49IHMtPm1pbl9keW5pbmR4KQotCWgtPmR5bmluZHggPSBz LT5sb2NhbF9pbmR4Kys7CisJeworCSAgaWYgKHMtPmJlZC0+cmVjb3JkX2hh c2hfc3ltYm9sICE9IE5VTEwpCisJICAgIHsKKwkgICAgICAoKnMtPmJlZC0+ cmVjb3JkX2hhc2hfc3ltYm9sKSAoaCwgMCk7CisJICAgICAgKytzLT5sb2Nh bF9pbmR4OworCSAgICB9CisJICBlbHNlCisJICAgIGgtPmR5bmluZHggPSBz LT5sb2NhbF9pbmR4Kys7CisJfQogICAgICAgcmV0dXJuIFRSVUU7CiAgICAg fQogCkBAIC01Mjk1LDcgKzUzMDgsMTQgQEAgZWxmX3JlbnVtYmVyX2dudV9o YXNoX3N5bXMgKHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpoLCB2b2lk ICpkYXRhKQogICBiZmRfcHV0XzMyIChzLT5vdXRwdXRfYmZkLCB2YWwsCiAJ ICAgICAgcy0+Y29udGVudHMgKyAocy0+aW5keFtidWNrZXRdIC0gcy0+c3lt aW5keCkgKiA0KTsKICAgLS1zLT5jb3VudHNbYnVja2V0XTsKLSAgaC0+ZHlu aW5keCA9IHMtPmluZHhbYnVja2V0XSsrOworICBpZiAocy0+YmVkLT5yZWNv cmRfaGFzaF9zeW1ib2wgIT0gTlVMTCkKKyAgICB7CisgICAgICBiZmRfdm1h IHhsYXRfbG9jID0gcy0+eGxhdCArIChzLT5pbmR4W2J1Y2tldF0rKyAtIHMt PnN5bWluZHgpICogNDsKKyAgICAgIEJGRF9BU1NFUlQgKHhsYXRfbG9jICE9 IDApOworICAgICAgKCpzLT5iZWQtPnJlY29yZF9oYXNoX3N5bWJvbCkgKGgs IHhsYXRfbG9jKTsKKyAgICB9CisgIGVsc2UKKyAgICBoLT5keW5pbmR4ID0g cy0+aW5keFtidWNrZXRdKys7CiAgIHJldHVybiBUUlVFOwogfQogCkBAIC01 OTE3LDcgKzU5MzcsOSBAQCBiZmRfZWxmX3NpemVfZHluYW1pY19zZWN0aW9u cyAoYmZkICpvdXRwdXRfYmZkLAogCSAgaWYgKChpbmZvLT5lbWl0X2hhc2gK IAkgICAgICAgJiYgIV9iZmRfZWxmX2FkZF9keW5hbWljX2VudHJ5IChpbmZv LCBEVF9IQVNILCAwKSkKIAkgICAgICB8fCAoaW5mby0+ZW1pdF9nbnVfaGFz aAotCQkgICYmICFfYmZkX2VsZl9hZGRfZHluYW1pY19lbnRyeSAoaW5mbywg RFRfR05VX0hBU0gsIDApKQorCQkgICYmIChiZWQtPnJlY29yZF9oYXNoX3N5 bWJvbCA9PSBOVUxMCisJCSAgICAgID8gIV9iZmRfZWxmX2FkZF9keW5hbWlj X2VudHJ5IChpbmZvLCBEVF9HTlVfSEFTSCwgMCkKKwkJICAgICAgOiAhX2Jm ZF9lbGZfYWRkX2R5bmFtaWNfZW50cnkgKGluZm8sIERUX0dOVV9YSEFTSCwg MCkpKQogCSAgICAgIHx8ICFfYmZkX2VsZl9hZGRfZHluYW1pY19lbnRyeSAo aW5mbywgRFRfU1RSVEFCLCAwKQogCSAgICAgIHx8ICFfYmZkX2VsZl9hZGRf ZHluYW1pY19lbnRyeSAoaW5mbywgRFRfU1lNVEFCLCAwKQogCSAgICAgIHx8 ICFfYmZkX2VsZl9hZGRfZHluYW1pY19lbnRyeSAoaW5mbywgRFRfU1RSU1os IHN0cnNpemUpCkBAIC02NTM1LDE5ICs2NTU3LDMwIEBAIGJmZF9lbGZfc2l6 ZV9keW5zeW1faGFzaF9keW5zdHIgKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0 IGJmZF9saW5rX2luZm8gKmluZm8pCiAJICAgICAgcmV0dXJuIEZBTFNFOwog CSAgICB9CiAKLQkgIHMgPSBiZmRfZ2V0X2xpbmtlcl9zZWN0aW9uIChkeW5v YmosICIuZ251Lmhhc2giKTsKKwkgIGlmIChiZWQtPnJlY29yZF9oYXNoX3N5 bWJvbCA9PSBOVUxMKQorCSAgICBzID0gYmZkX2dldF9saW5rZXJfc2VjdGlv biAoZHlub2JqLCAiLmdudS5oYXNoIik7CisJICBlbHNlCisJICAgIHMgPSBi ZmRfZ2V0X2xpbmtlcl9zZWN0aW9uIChkeW5vYmosICIuZ251LnhoYXNoIik7 CiAJICBCRkRfQVNTRVJUIChzICE9IE5VTEwpOwogCiAJICBpZiAoY2luZm8u bnN5bXMgPT0gMCkKIAkgICAgewotCSAgICAgIC8qIEVtcHR5IC5nbnUuaGFz aCBzZWN0aW9uIGlzIHNwZWNpYWwuICAqLworCSAgICAgIC8qIEVtcHR5IC5n bnUuaGFzaCBvciAuZ251LnhoYXNoIHNlY3Rpb24gaXMgc3BlY2lhbC4gICov CiAJICAgICAgQkZEX0FTU0VSVCAoY2luZm8ubWluX2R5bmluZHggPT0gLTEp OwogCSAgICAgIGZyZWUgKGNpbmZvLmhhc2hjb2Rlcyk7CiAJICAgICAgcy0+ c2l6ZSA9IDUgKiA0ICsgYmVkLT5zLT5hcmNoX3NpemUgLyA4OworCSAgICAg IGlmIChiZWQtPnJlY29yZF9oYXNoX3N5bWJvbCAhPSBOVUxMKQorCQlzLT5z aXplICs9IDQ7CiAJICAgICAgY29udGVudHMgPSAodW5zaWduZWQgY2hhciAq KSBiZmRfemFsbG9jIChvdXRwdXRfYmZkLCBzLT5zaXplKTsKIAkgICAgICBp ZiAoY29udGVudHMgPT0gTlVMTCkKIAkJcmV0dXJuIEZBTFNFOwogCSAgICAg IHMtPmNvbnRlbnRzID0gY29udGVudHM7CisJICAgICAgaWYgKGJlZC0+cmVj b3JkX2hhc2hfc3ltYm9sICE9IE5VTEwpCisJCXsKKwkJICAvKiBDaGFpbiBh bmQgeGxhdCBzeW1ib2wgY291bnQgaXMgemVyby4gICovCisJCSAgYmZkX3B1 dF8zMiAob3V0cHV0X2JmZCwgMCwgY29udGVudHMpOworCQkgIGNvbnRlbnRz ICs9IDQ7CisJCX0KIAkgICAgICAvKiAxIGVtcHR5IGJ1Y2tldC4gICovCiAJ ICAgICAgYmZkX3B1dF8zMiAob3V0cHV0X2JmZCwgMSwgY29udGVudHMpOwog CSAgICAgIC8qIFNZTUlEWCBhYm92ZSB0aGUgc3BlY2lhbCBzeW1ib2wgMC4g ICovCkBAIC02NjIwLDYgKzY2NTMsOCBAQCBiZmRfZWxmX3NpemVfZHluc3lt X2hhc2hfZHluc3RyIChiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBiZmRfbGlu a19pbmZvICppbmZvKQogCiAJICAgICAgcy0+c2l6ZSA9ICg0ICsgYnVja2V0 Y291bnQgKyBjaW5mby5uc3ltcykgKiA0OwogCSAgICAgIHMtPnNpemUgKz0g Y2luZm8ubWFza2JpdHMgLyA4OworCSAgICAgIGlmIChiZWQtPnJlY29yZF9o YXNoX3N5bWJvbCAhPSBOVUxMKQorCQlzLT5zaXplICs9ICgxICsgY2luZm8u bnN5bXMpICogNDsKIAkgICAgICBjb250ZW50cyA9ICh1bnNpZ25lZCBjaGFy ICopIGJmZF96YWxsb2MgKG91dHB1dF9iZmQsIHMtPnNpemUpOwogCSAgICAg IGlmIChjb250ZW50cyA9PSBOVUxMKQogCQl7CkBAIC02NjI5LDYgKzY2NjQs MTEgQEAgYmZkX2VsZl9zaXplX2R5bnN5bV9oYXNoX2R5bnN0ciAoYmZkICpv dXRwdXRfYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKIAkJfQog CiAJICAgICAgcy0+Y29udGVudHMgPSBjb250ZW50czsKKwkgICAgICBpZiAo YmVkLT5yZWNvcmRfaGFzaF9zeW1ib2wgIT0gTlVMTCkKKwkJeworCQkgIGJm ZF9wdXRfMzIgKG91dHB1dF9iZmQsIGNpbmZvLm5zeW1zLCBjb250ZW50cyk7 CisJCSAgY29udGVudHMgKz0gNDsKKwkJfQogCSAgICAgIGJmZF9wdXRfMzIg KG91dHB1dF9iZmQsIGJ1Y2tldGNvdW50LCBjb250ZW50cyk7CiAJICAgICAg YmZkX3B1dF8zMiAob3V0cHV0X2JmZCwgY2luZm8uc3ltaW5keCwgY29udGVu dHMgKyA0KTsKIAkgICAgICBiZmRfcHV0XzMyIChvdXRwdXRfYmZkLCBtYXNr d29yZHMsIGNvbnRlbnRzICsgOCk7CkBAIC02NjQ1LDEyICs2Njg1LDE1IEBA IGJmZF9lbGZfc2l6ZV9keW5zeW1faGFzaF9keW5zdHIgKGJmZCAqb3V0cHV0 X2JmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pCiAJCX0KIAogCSAg ICAgIGNpbmZvLmNvbnRlbnRzID0gY29udGVudHM7Ci0KKwkgICAgICBpZiAo YmVkLT5yZWNvcmRfaGFzaF9zeW1ib2wgIT0gTlVMTCkKKwkJY2luZm8ueGxh dCA9IGNvbnRlbnRzICsgY2luZm8ubnN5bXMgKiA0IC0gcy0+Y29udGVudHM7 CiAJICAgICAgLyogUmVudW1iZXIgZHluYW1pYyBzeW1ib2xzLCBwb3B1bGF0 ZSAuZ251Lmhhc2ggc2VjdGlvbi4gICovCiAJICAgICAgZWxmX2xpbmtfaGFz aF90cmF2ZXJzZSAoZWxmX2hhc2hfdGFibGUgKGluZm8pLAogCQkJCSAgICAg IGVsZl9yZW51bWJlcl9nbnVfaGFzaF9zeW1zLCAmY2luZm8pOwogCiAJICAg ICAgY29udGVudHMgPSBzLT5jb250ZW50cyArIDE2OworCSAgICAgIGlmIChi ZWQtPnJlY29yZF9oYXNoX3N5bWJvbCAhPSBOVUxMKQorCQljb250ZW50cyAr PSA0OwogCSAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXNrd29yZHM7ICsraSkK IAkJewogCQkgIGJmZF9wdXQgKGJlZC0+cy0+YXJjaF9zaXplLCBvdXRwdXRf YmZkLCBjaW5mby5iaXRtYXNrW2ldLApAQCAtMTEzMDEsNiArMTEzNDQsOSBA QCBiZmRfZWxmX2ZpbmFsX2xpbmsgKGJmZCAqYWJmZCwgc3RydWN0IGJmZF9s aW5rX2luZm8gKmluZm8pCiAJICAgIGNhc2UgRFRfR05VX0hBU0g6CiAJICAg ICAgbmFtZSA9ICIuZ251Lmhhc2giOwogCSAgICAgIGdvdG8gZ2V0X3ZtYTsK KwkgICAgY2FzZSBEVF9HTlVfWEhBU0g6CisJICAgICAgbmFtZSA9ICIuZ251 LnhoYXNoIjsKKwkgICAgICBnb3RvIGdldF92bWE7CiAJICAgIGNhc2UgRFRf U1RSVEFCOgogCSAgICAgIG5hbWUgPSAiLmR5bnN0ciI7CiAJICAgICAgZ290 byBnZXRfdm1hOwpkaWZmIC0tZ2l0IGEvYmZkL2VsZnh4LW1pcHMuYyBiL2Jm ZC9lbGZ4eC1taXBzLmMKaW5kZXggZDc0OThlMS4uZDI4NmE2MiAxMDA2NDQK LS0tIGEvYmZkL2VsZnh4LW1pcHMuYworKysgYi9iZmQvZWxmeHgtbWlwcy5j CkBAIC0zMTUsNiArMzE1LDExIEBAIHN0cnVjdCBtaXBzX2VsZl9oYXNoX3Nv cnRfZGF0YQogICAvKiBUaGUgZ3JlYXRlc3QgZHluYW1pYyBzeW1ib2wgdGFi bGUgaW5kZXggbm90IGNvcnJlc3BvbmRpbmcgdG8gYQogICAgICBzeW1ib2wg d2l0aG91dCBhIEdPVCBlbnRyeS4gICovCiAgIGxvbmcgbWF4X25vbl9nb3Rf ZHluaW5keDsKKyAgLyogSWYgbm9uLU5VTEwsIG91dHB1dCBCRkQgZm9yIC5n bnUueGhhc2ggZmluYWxpemF0aW9uLiAgKi8KKyAgYmZkICpvdXRwdXRfYmZk OworICAvKiBJZiBub24tTlVMTCwgcG9pbnRlciB0byBjb250ZW50cyBvZiAu Z251LnhoYXNoIGZvciBmaWxsaW5nIGluCisgICAgIHJlYWwgZmluYWwgZHlu aW5keC4gICovCisgIGJmZF9ieXRlICpnbnV4aGFzaDsKIH07CiAKIC8qIFdl IG1ha2UgdXAgdG8gdHdvIFBMVCBlbnRyaWVzIGlmIG5lZWRlZCwgb25lIGZv ciBzdGFuZGFyZCBNSVBTIGNvZGUKQEAgLTM3Miw2ICszNzcsOSBAQCBzdHJ1 Y3QgbWlwc19lbGZfbGlua19oYXNoX2VudHJ5CiAgICAgIGJlaW5nIGNhbGxl ZCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUuICAqLwogICBhc2Vj dGlvbiAqY2FsbF9mcF9zdHViOwogCisgIC8qIElmIG5vbi16ZXJvLCBsb2Nh dGlvbiBpbiAuZ251LnhoYXNoIHRvIHdyaXRlIHJlYWwgZmluYWwgZHluaW5k eC4gICovCisgIGJmZF92bWEgZ251eGhhc2hfbG9jOworCiAgIC8qIFRoZSBo aWdoZXN0IEdHQV8qIHZhbHVlIHRoYXQgc2F0aXNmaWVzIGFsbCByZWZlcmVu Y2VzIHRvIHRoaXMgc3ltYm9sLiAgKi8KICAgdW5zaWduZWQgaW50IGdsb2Jh bF9nb3RfYXJlYSA6IDI7CiAKQEAgLTEyNDYsNiArMTI1NCw3IEBAIG1pcHNf ZWxmX2xpbmtfaGFzaF9uZXdmdW5jIChzdHJ1Y3QgYmZkX2hhc2hfZW50cnkg KmVudHJ5LAogICAgICAgcmV0LT5mbl9zdHViID0gTlVMTDsKICAgICAgIHJl dC0+Y2FsbF9zdHViID0gTlVMTDsKICAgICAgIHJldC0+Y2FsbF9mcF9zdHVi ID0gTlVMTDsKKyAgICAgIHJldC0+Z251eGhhc2hfbG9jID0gMDsKICAgICAg IHJldC0+Z2xvYmFsX2dvdF9hcmVhID0gR0dBX05PTkU7CiAgICAgICByZXQt PmdvdF9vbmx5X2Zvcl9jYWxscyA9IFRSVUU7CiAgICAgICByZXQtPnJlYWRv bmx5X3JlbG9jID0gRkFMU0U7CkBAIC0zNzI1LDYgKzM3MzQsMTggQEAgbWlw c19lbGZfc29ydF9oYXNoX3RhYmxlIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRf bGlua19pbmZvICppbmZvKQogICAgID0gaHNkLm1pbl9nb3RfZHluaW5keAog ICAgID0gKGVsZl9oYXNoX3RhYmxlIChpbmZvKS0+ZHluc3ltY291bnQgLSBn LT5yZWxvY19vbmx5X2dvdG5vKTsKICAgaHNkLm1heF9ub25fZ290X2R5bmlu ZHggPSBjb3VudF9zZWN0aW9uX2R5bnN5bXMgKGFiZmQsIGluZm8pICsgMTsK KyAgaHNkLm91dHB1dF9iZmQgPSBhYmZkOworICBpZiAoaHRhYi0+cm9vdC5k eW5vYmogIT0gTlVMTAorICAgICAgJiYgaHRhYi0+cm9vdC5keW5hbWljX3Nl Y3Rpb25zX2NyZWF0ZWQKKyAgICAgICYmIGluZm8tPmVtaXRfZ251X2hhc2gp CisgICAgeworICAgICAgYXNlY3Rpb24gKnMgPSBiZmRfZ2V0X2xpbmtlcl9z ZWN0aW9uIChodGFiLT5yb290LmR5bm9iaiwgIi5nbnUueGhhc2giKTsKKyAg ICAgIEJGRF9BU1NFUlQgKHMgIT0gTlVMTCk7CisgICAgICBoc2QuZ251eGhh c2ggPSBzLT5jb250ZW50czsKKyAgICAgIEJGRF9BU1NFUlQgKGhzZC5nbnV4 aGFzaCAhPSBOVUxMKTsKKyAgICB9CisgIGVsc2UKKyAgICBoc2QuZ251eGhh c2ggPSBOVUxMOwogICBtaXBzX2VsZl9saW5rX2hhc2hfdHJhdmVyc2UgKCgo c3RydWN0IG1pcHNfZWxmX2xpbmtfaGFzaF90YWJsZSAqKQogCQkJCWVsZl9o YXNoX3RhYmxlIChpbmZvKSksCiAJCQkgICAgICAgbWlwc19lbGZfc29ydF9o YXNoX3RhYmxlX2YsCkBAIC0zNzc3LDYgKzM3OTgsMTIgQEAgbWlwc19lbGZf c29ydF9oYXNoX3RhYmxlX2YgKHN0cnVjdCBtaXBzX2VsZl9saW5rX2hhc2hf ZW50cnkgKmgsIHZvaWQgKmRhdGEpCiAgICAgICBicmVhazsKICAgICB9CiAK KyAgaWYgKGgtPmdudXhoYXNoX2xvYyAhPSAwICYmIGhzZC0+Z251eGhhc2gg IT0gTlVMTCkKKyAgICB7CisgICAgICBiZmRfcHV0XzMyIChoc2QtPm91dHB1 dF9iZmQsIGgtPnJvb3QuZHluaW5keCwKKwkJICBoc2QtPmdudXhoYXNoICsg aC0+Z251eGhhc2hfbG9jKTsKKyAgICB9CisKICAgcmV0dXJuIFRSVUU7CiB9 CiAKQEAgLTE1Mjg1LDMgKzE1MzEyLDEwIEBAIF9iZmRfbWlwc19wb3N0X3By b2Nlc3NfaGVhZGVycyAoYmZkICphYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5m byAqbGlua19pbmZvKQogCWlfZWhkcnAtPmVfaWRlbnRbRUlfQUJJVkVSU0lP Tl0gPSAxOwogICAgIH0KIH0KKwordm9pZAorX2JmZF9taXBzX2VsZl9yZWNv cmRfaGFzaF9zeW1ib2wgKHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpo LCBiZmRfdm1hIHhsYXRfbG9jKQoreworICBzdHJ1Y3QgbWlwc19lbGZfbGlu a19oYXNoX2VudHJ5ICpobWlwcyA9IChzdHJ1Y3QgbWlwc19lbGZfbGlua19o YXNoX2VudHJ5ICopIGg7CisgIGhtaXBzLT5nbnV4aGFzaF9sb2MgPSB4bGF0 X2xvYzsKK30KZGlmZiAtLWdpdCBhL2JmZC9lbGZ4eC1taXBzLmggYi9iZmQv ZWxmeHgtbWlwcy5oCmluZGV4IGYyN2RjMTUuLmY0NzRmODEgMTAwNjQ0Ci0t LSBhL2JmZC9lbGZ4eC1taXBzLmgKKysrIGIvYmZkL2VsZnh4LW1pcHMuaApA QCAtMTU4LDYgKzE1OCw4IEBAIGV4dGVybiBsb25nIF9iZmRfbWlwc19lbGZf Z2V0X3N5bnRoZXRpY19zeW10YWIKICAgKGJmZCAqLCBsb25nLCBhc3ltYm9s ICoqLCBsb25nLCBhc3ltYm9sICoqLCBhc3ltYm9sICoqKTsKIGV4dGVybiB2 b2lkIF9iZmRfbWlwc19wb3N0X3Byb2Nlc3NfaGVhZGVycwogICAoYmZkICph YmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqbGlua19pbmZvKTsKK2V4dGVy biB2b2lkIF9iZmRfbWlwc19lbGZfcmVjb3JkX2hhc2hfc3ltYm9sCisgIChz dHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaCwgYmZkX3ZtYSB4bGF0X2xv Yyk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmZkX2VsZl9zcGVjaWFsX3Nl Y3Rpb24gX2JmZF9taXBzX2VsZl9zcGVjaWFsX3NlY3Rpb25zIFtdOwogCkBA IC0xODYsMyArMTg4LDQgQEAgbGl0ZXJhbF9yZWxvY19wIChpbnQgcl90eXBl KQogI2RlZmluZSBlbGZfYmFja2VuZF9tZXJnZV9zeW1ib2xfYXR0cmlidXRl ICBfYmZkX21pcHNfZWxmX21lcmdlX3N5bWJvbF9hdHRyaWJ1dGUKICNkZWZp bmUgZWxmX2JhY2tlbmRfaWdub3JlX3VuZGVmX3N5bWJvbCBfYmZkX21pcHNf ZWxmX2lnbm9yZV91bmRlZl9zeW1ib2wKICNkZWZpbmUgZWxmX2JhY2tlbmRf cG9zdF9wcm9jZXNzX2hlYWRlcnMgX2JmZF9taXBzX3Bvc3RfcHJvY2Vzc19o ZWFkZXJzCisjZGVmaW5lIGVsZl9iYWNrZW5kX3JlY29yZF9oYXNoX3N5bWJv bCBfYmZkX21pcHNfZWxmX3JlY29yZF9oYXNoX3N5bWJvbApkaWZmIC0tZ2l0 IGEvYmZkL2VsZnh4LXRhcmdldC5oIGIvYmZkL2VsZnh4LXRhcmdldC5oCmlu ZGV4IGQ0MmNlMjYuLmZkMjA5NDMgMTAwNjQ0Ci0tLSBhL2JmZC9lbGZ4eC10 YXJnZXQuaAorKysgYi9iZmQvZWxmeHgtdGFyZ2V0LmgKQEAgLTY1Niw2ICs2 NTYsMTAgQEAKICNkZWZpbmUgZWxmX2JhY2tlbmRfaGFzaF9zeW1ib2wgX2Jm ZF9lbGZfaGFzaF9zeW1ib2wKICNlbmRpZgogCisjaWZuZGVmIGVsZl9iYWNr ZW5kX3JlY29yZF9oYXNoX3N5bWJvbAorI2RlZmluZSBlbGZfYmFja2VuZF9y ZWNvcmRfaGFzaF9zeW1ib2wgTlVMTAorI2VuZGlmCisKICNpZm5kZWYgZWxm X2JhY2tlbmRfaXNfZnVuY3Rpb25fdHlwZQogI2RlZmluZSBlbGZfYmFja2Vu ZF9pc19mdW5jdGlvbl90eXBlIF9iZmRfZWxmX2lzX2Z1bmN0aW9uX3R5cGUK ICNlbmRpZgpAQCAtNzU4LDYgKzc2Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWxm X2JhY2tlbmRfZGF0YSBlbGZOTl9iZWQgPQogICBlbGZfYmFja2VuZF9jb21t b25fc2VjdGlvbiwKICAgZWxmX2JhY2tlbmRfbWVyZ2Vfc3ltYm9sLAogICBl bGZfYmFja2VuZF9oYXNoX3N5bWJvbCwKKyAgZWxmX2JhY2tlbmRfcmVjb3Jk X2hhc2hfc3ltYm9sLAogICBlbGZfYmFja2VuZF9pc19mdW5jdGlvbl90eXBl LAogICBlbGZfYmFja2VuZF9tYXliZV9mdW5jdGlvbl9zeW0sCiAgIGVsZl9i YWNrZW5kX2xpbmtfb3JkZXJfZXJyb3JfaGFuZGxlciwKZGlmZiAtLWdpdCBh L2JpbnV0aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYwppbmRl eCA2MWVhMGFkLi5lODdiMTExIDEwMDY0NAotLS0gYS9iaW51dGlscy9yZWFk ZWxmLmMKKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCkBAIC0xODEsNiArMTgx LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkeW5hbWljX3N5bWluZm9fbmVu dDsKIHN0YXRpYyBjaGFyIHByb2dyYW1faW50ZXJwcmV0ZXJbUEFUSF9NQVhd Owogc3RhdGljIGJmZF92bWEgZHluYW1pY19pbmZvW0RUX0VOQ09ESU5HXTsK IHN0YXRpYyBiZmRfdm1hIGR5bmFtaWNfaW5mb19EVF9HTlVfSEFTSDsKK3N0 YXRpYyBiZmRfdm1hIGR5bmFtaWNfaW5mb19EVF9HTlVfWEhBU0g7CiBzdGF0 aWMgYmZkX3ZtYSB2ZXJzaW9uX2luZm9bMTZdOwogc3RhdGljIEVsZl9JbnRl cm5hbF9FaGRyIGVsZl9oZWFkZXI7CiBzdGF0aWMgRWxmX0ludGVybmFsX1No ZHIgKiBzZWN0aW9uX2hlYWRlcnM7CkBAIC0xODA1LDYgKzE4MDYsNyBAQCBn ZXRfZHluYW1pY190eXBlICh1bnNpZ25lZCBsb25nIHR5cGUpCiAgICAgY2Fz ZSBEVF9HTlVfTElCTElTVDogcmV0dXJuICJHTlVfTElCTElTVCI7CiAgICAg Y2FzZSBEVF9HTlVfTElCTElTVFNaOiByZXR1cm4gIkdOVV9MSUJMSVNUU1oi OwogICAgIGNhc2UgRFRfR05VX0hBU0g6CXJldHVybiAiR05VX0hBU0giOwor ICAgIGNhc2UgRFRfR05VX1hIQVNIOglyZXR1cm4gIkdOVV9YSEFTSCI7CiAK ICAgICBkZWZhdWx0OgogICAgICAgaWYgKCh0eXBlID49IERUX0xPUFJPQykg JiYgKHR5cGUgPD0gRFRfSElQUk9DKSkKQEAgLTMzMDIsNiArMzMwNCw3IEBA IGdldF9zZWN0aW9uX3R5cGVfbmFtZSAodW5zaWduZWQgaW50IHNoX3R5cGUp CiAgICAgY2FzZSBTSFRfRklOSV9BUlJBWToJcmV0dXJuICJGSU5JX0FSUkFZ IjsKICAgICBjYXNlIFNIVF9QUkVJTklUX0FSUkFZOglyZXR1cm4gIlBSRUlO SVRfQVJSQVkiOwogICAgIGNhc2UgU0hUX0dOVV9IQVNIOgkJcmV0dXJuICJH TlVfSEFTSCI7CisgICAgY2FzZSBTSFRfR05VX1hIQVNIOgkJcmV0dXJuICJH TlVfWEhBU0giOwogICAgIGNhc2UgU0hUX0dST1VQOgkJcmV0dXJuICJHUk9V UCI7CiAgICAgY2FzZSBTSFRfU1lNVEFCX1NITkRYOglyZXR1cm4gIlNZTVRB QiBTRUNUSU9OIElORElDSUVTIjsKICAgICBjYXNlIFNIVF9HTlVfdmVyZGVm OglyZXR1cm4gIlZFUkRFRiI7CkBAIC04NDU0LDYgKzg0NTcsMTYgQEAgcHJv Y2Vzc19keW5hbWljX3NlY3Rpb24gKEZJTEUgKiBmaWxlKQogCSAgICB9CiAJ ICBicmVhazsKIAorCWNhc2UgRFRfR05VX1hIQVNIOgorCSAgZHluYW1pY19p bmZvX0RUX0dOVV9YSEFTSCA9IGVudHJ5LT5kX3VuLmRfdmFsOworCSAgZHlu YW1pY19pbmZvX0RUX0dOVV9IQVNIID0gZHluYW1pY19pbmZvX0RUX0dOVV9Y SEFTSCArIDQ7CisJICBpZiAoZG9fZHluYW1pYykKKwkgICAgeworCSAgICAg IHByaW50X3ZtYSAoZW50cnktPmRfdW4uZF92YWwsIFBSRUZJWF9IRVgpOwor CSAgICAgIHB1dGNoYXIgKCdcbicpOworCSAgICB9CisJICBicmVhazsKKwog CWRlZmF1bHQ6CiAJICBpZiAoKGVudHJ5LT5kX3RhZyA+PSBEVF9WRVJTWU0p ICYmIChlbnRyeS0+ZF90YWcgPD0gRFRfVkVSTkVFRE5VTSkpCiAJICAgIHZl cnNpb25faW5mb1tEVF9WRVJTSU9OVEFHSURYIChlbnRyeS0+ZF90YWcpXSA9 CkBAIC05MzgwLDYgKzkzOTMsNyBAQCBwcm9jZXNzX3N5bWJvbF90YWJsZSAo RklMRSAqIGZpbGUpCiAgIGJmZF92bWEgbmdudWJ1Y2tldHMgPSAwOwogICBi ZmRfdm1hICogZ251YnVja2V0cyA9IE5VTEw7CiAgIGJmZF92bWEgKiBnbnVj aGFpbnMgPSBOVUxMOworICBiZmRfdm1hICogZ251eGxhdCA9IE5VTEw7CiAg IGJmZF92bWEgZ251c3ltaWR4ID0gMDsKIAogICBpZiAoIWRvX3N5bXMgJiYg IWRvX2R5bl9zeW1zICYmICFkb19oaXN0b2dyYW0pCkBAIC05NTEwLDcgKzk1 MjQsNyBAQCBwcm9jZXNzX3N5bWJvbF90YWJsZSAoRklMRSAqIGZpbGUpCiAg ICAgICBpZiAoZnNlZWsgKGZpbGUsCiAJCSAoYXJjaGl2ZV9maWxlX29mZnNl dAogCQkgICsgb2Zmc2V0X2Zyb21fdm1hIChmaWxlLCBidWNrZXRzX3ZtYQot CQkJCQkgICArIDQgKiAobmdudWJ1Y2tldHMgKyBtYXhjaGFpbiksIDQpKSwK KwkJCQkgICAgICsgNCAqIChuZ251YnVja2V0cyArIG1heGNoYWluKSwgNCkp LAogCQkgU0VFS19TRVQpKQogCXsKIAkgIGVycm9yIChfKCJVbmFibGUgdG8g c2VlayB0byBzdGFydCBvZiBkeW5hbWljIGluZm9ybWF0aW9uXG4iKSk7CkBA IC05NTMyLDYgKzk1NDYsMzAgQEAgcHJvY2Vzc19zeW1ib2xfdGFibGUgKEZJ TEUgKiBmaWxlKQogCX0KICAgICAgIHdoaWxlICgoYnl0ZV9nZXQgKG5iLCA0 KSAmIDEpID09IDApOwogCisgICAgICBpZiAoZHluYW1pY19pbmZvX0RUX0dO VV9YSEFTSCkKKwl7CisJICBpZiAoZnNlZWsgKGZpbGUsCisJCSAgICAgKGFy Y2hpdmVfZmlsZV9vZmZzZXQKKwkJICAgICAgKyBvZmZzZXRfZnJvbV92bWEg KGZpbGUsIGR5bmFtaWNfaW5mb19EVF9HTlVfWEhBU0gsIDQpKSwKKwkJICAg ICBTRUVLX1NFVCkpCisJICAgIHsKKwkgICAgICBlcnJvciAoXygiVW5hYmxl IHRvIHNlZWsgdG8gc3RhcnQgb2YgZHluYW1pYyBpbmZvcm1hdGlvblxuIikp OworCSAgICAgIGdvdG8gbm9fZ251X2hhc2g7CisJICAgIH0KKworCSAgaWYg KGZyZWFkIChuYiwgNCwgMSwgZmlsZSkgIT0gMSkKKwkgICAgeworCSAgICAg IGVycm9yIChfKCJGYWlsZWQgdG8gZGV0ZXJtaW5lIGxhc3QgY2hhaW4gbGVu Z3RoXG4iKSk7CisJICAgICAgZ290byBub19nbnVfaGFzaDsKKwkgICAgfQor CisJICBpZiAobWF4Y2hhaW4gIT0gYnl0ZV9nZXQgKG5iLCA0KSkKKwkgICAg eworCSAgICAgIGVycm9yIChfKCJGYWlsZWQgdG8gZGV0ZXJtaW5lIGxhc3Qg Y2hhaW4gbGVuZ3RoXG4iKSk7CisJICAgICAgZ290byBub19nbnVfaGFzaDsK KwkgICAgfQorCX0KKwogICAgICAgaWYgKGZzZWVrIChmaWxlLAogCQkgKGFy Y2hpdmVfZmlsZV9vZmZzZXQKIAkJICArIG9mZnNldF9mcm9tX3ZtYSAoZmls ZSwgYnVja2V0c192bWEgKyA0ICogbmdudWJ1Y2tldHMsIDQpKSwKQEAgLTk1 NDMsNyArOTU4MSw0NSBAQCBwcm9jZXNzX3N5bWJvbF90YWJsZSAoRklMRSAq IGZpbGUpCiAKICAgICAgIGdudWNoYWlucyA9IGdldF9keW5hbWljX2RhdGEg KGZpbGUsIG1heGNoYWluLCA0KTsKIAorICAgICAgaWYgKGdudWNoYWlucyA9 PSBOVUxMKQorCWdvdG8gbm9fZ251X2hhc2g7CisKKyAgICAgIGlmIChkeW5h bWljX2luZm9fRFRfR05VX1hIQVNIKQorCXsKKwkgIGlmIChmc2VlayAoZmls ZSwKKwkJICAgICAoYXJjaGl2ZV9maWxlX29mZnNldAorCQkgICAgICArIG9m ZnNldF9mcm9tX3ZtYSAoZmlsZSwgZHluYW1pY19pbmZvX0RUX0dOVV9YSEFT SCwgNCkpLAorCQkgICAgIFNFRUtfU0VUKSkKKwkgICAgeworCSAgICAgIGVy cm9yIChfKCJVbmFibGUgdG8gc2VlayB0byBzdGFydCBvZiBkeW5hbWljIGlu Zm9ybWF0aW9uXG4iKSk7CisJICAgICAgZ290byBub19nbnVfaGFzaDsKKwkg ICAgfQorCisJICBpZiAoZnJlYWQgKG5iLCA0LCAxLCBmaWxlKSAhPSAxKQor CSAgICB7CisJICAgICAgZXJyb3IgKF8oIkZhaWxlZCB0byByZWFkIGluIG51 bWJlciBvZiBidWNrZXRzXG4iKSk7CisJICAgICAgZ290byBub19nbnVfaGFz aDsKKwkgICAgfQorCSAgaWYgKGZzZWVrIChmaWxlLAorCQkgICAgIChhcmNo aXZlX2ZpbGVfb2Zmc2V0CisJCSAgICAgICsgb2Zmc2V0X2Zyb21fdm1hIChm aWxlLCBidWNrZXRzX3ZtYQorCQkJCQkgICAgICAgKyA0ICogKG5nbnVidWNr ZXRzCisJCQkJCQkgICAgICArIG1heGNoYWluKSwgNCkpLAorCQkgICAgIFNF RUtfU0VUKSkKKwkgICAgeworCSAgICAgIGVycm9yIChfKCJVbmFibGUgdG8g c2VlayB0byBzdGFydCBvZiBkeW5hbWljIGluZm9ybWF0aW9uXG4iKSk7CisJ ICAgICAgZ290byBub19nbnVfaGFzaDsKKwkgICAgfQorCisJICBnbnV4bGF0 ID0gZ2V0X2R5bmFtaWNfZGF0YSAoZmlsZSwgbWF4Y2hhaW4sIDQpOworCX0K KwogICAgIG5vX2dudV9oYXNoOgorICAgICAgaWYgKGR5bmFtaWNfaW5mb19E VF9HTlVfWEhBU0ggJiYgZ251eGxhdCA9PSBOVUxMKQorCXsKKwkgIGZyZWUg KGdudWNoYWlucyk7CisJICBnbnVjaGFpbnMgPSBOVUxMOworCX0KICAgICAg IGlmIChnbnVjaGFpbnMgPT0gTlVMTCkKIAl7CiAJICBmcmVlIChnbnVidWNr ZXRzKTsKQEAgLTk1ODMsNyArOTY1OSw4IEBAIHByb2Nlc3Nfc3ltYm9sX3Rh YmxlIChGSUxFICogZmlsZSkKIAogICAgICAgaWYgKGR5bmFtaWNfaW5mb19E VF9HTlVfSEFTSCkKIAl7Ci0JICBwcmludGYgKF8oIlxuU3ltYm9sIHRhYmxl IG9mIGAuZ251Lmhhc2gnIGZvciBpbWFnZTpcbiIpKTsKKwkgIHByaW50ZiAo XygiXG5TeW1ib2wgdGFibGUgb2YgYCVzJyBmb3IgaW1hZ2U6XG4iKSwKKwkJ ICAhZHluYW1pY19pbmZvX0RUX0dOVV9YSEFTSCA/ICIuZ251Lmhhc2giIDog Ii5nbnUueGhhc2giKTsKIAkgIGlmIChpc18zMmJpdF9lbGYpCiAJICAgIHBy aW50ZiAoXygiICBOdW0gQnVjOiAgICBWYWx1ZSAgU2l6ZSAgIFR5cGUgICBC aW5kIFZpcyAgICAgIE5keCBOYW1lXG4iKSk7CiAJICBlbHNlCkBAIC05NTk3 LDcgKzk2NzQsMTAgQEAgcHJvY2Vzc19zeW1ib2xfdGFibGUgKEZJTEUgKiBm aWxlKQogCiAJCWRvCiAJCSAgewotCQkgICAgcHJpbnRfZHluYW1pY19zeW1i b2wgKHNpLCBobik7CisJCSAgICBpZiAoIWR5bmFtaWNfaW5mb19EVF9HTlVf WEhBU0gpCisJCSAgICAgIHByaW50X2R5bmFtaWNfc3ltYm9sIChzaSwgaG4p OworCQkgICAgZWxzZQorCQkgICAgICBwcmludF9keW5hbWljX3N5bWJvbCAo Z251eGxhdFtvZmZdLCBobik7CiAJCSAgICBzaSsrOwogCQkgIH0KIAkJd2hp bGUgKChnbnVjaGFpbnNbb2ZmKytdICYgMSkgPT0gMCk7CkBAIC05OTMxLDcg KzEwMDExLDggQEAgcHJvY2Vzc19zeW1ib2xfdGFibGUgKEZJTEUgKiBmaWxl KQogCSAgcmV0dXJuIDA7CiAJfQogCi0gICAgICBwcmludGYgKF8oIlxuSGlz dG9ncmFtIGZvciBgLmdudS5oYXNoJyBidWNrZXQgbGlzdCBsZW5ndGggKHRv dGFsIG9mICVsdSBidWNrZXRzKTpcbiIpLAorICAgICAgcHJpbnRmIChfKCJc bkhpc3RvZ3JhbSBmb3IgYCVzJyBidWNrZXQgbGlzdCBsZW5ndGggKHRvdGFs IG9mICVsdSBidWNrZXRzKTpcbiIpLAorCSAgICAgICFkeW5hbWljX2luZm9f RFRfR05VX1hIQVNIID8gIi5nbnUuaGFzaCIgOiAiLmdudS54aGFzaCIsCiAJ ICAgICAgKHVuc2lnbmVkIGxvbmcpIG5nbnVidWNrZXRzKTsKICAgICAgIHBy aW50ZiAoXygiIExlbmd0aCAgTnVtYmVyICAgICAlJSBvZiB0b3RhbCAgQ292 ZXJhZ2VcbiIpKTsKIApAQCAtOTk3Nyw2ICsxMDA1OCw4IEBAIHByb2Nlc3Nf c3ltYm9sX3RhYmxlIChGSUxFICogZmlsZSkKICAgICAgIGZyZWUgKGxlbmd0 aHMpOwogICAgICAgZnJlZSAoZ251YnVja2V0cyk7CiAgICAgICBmcmVlIChn bnVjaGFpbnMpOworICAgICAgZnJlZSAoZ251eGxhdCk7CisKICAgICB9CiAK ICAgcmV0dXJuIDE7CkBAIC0xMzkxMyw2ICsxMzk5Niw3IEBAIHByb2Nlc3Nf b2JqZWN0IChjaGFyICogZmlsZV9uYW1lLCBGSUxFICogZmlsZSkKICAgZm9y IChpID0gQVJSQVlfU0laRSAoZHluYW1pY19pbmZvKTsgaS0tOykKICAgICBk eW5hbWljX2luZm9baV0gPSAwOwogICBkeW5hbWljX2luZm9fRFRfR05VX0hB U0ggPSAwOworICBkeW5hbWljX2luZm9fRFRfR05VX1hIQVNIID0gMDsKIAog ICAvKiBQcm9jZXNzIHRoZSBmaWxlLiAgKi8KICAgaWYgKHNob3dfbmFtZSkK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL2NvbW1vbi5oIGIvaW5jbHVkZS9l bGYvY29tbW9uLmgKaW5kZXggY2QzYmNkZC4uN2NkYmRlYiAxMDA2NDQKLS0t IGEvaW5jbHVkZS9lbGYvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9lbGYvY29t bW9uLmgKQEAgLTQ3Miw2ICs0NzIsNyBAQAogI2RlZmluZSBTSFRfSElPUwkw eDZmZmZmZmZmCS8qIExhc3Qgb2YgT1Mgc3BlY2lmaWMgc2VtYW50aWNzICov CiAKICNkZWZpbmUgU0hUX0dOVV9JTkNSRU1FTlRBTF9JTlBVVFMgMHg2ZmZm NDcwMCAgIC8qIGluY3JlbWVudGFsIGJ1aWxkIGRhdGEgKi8KKyNkZWZpbmUg U0hUX0dOVV9YSEFTSAkweDZmZmZmZmY0CS8qIEdOVSBzdHlsZSBzeW1ib2wg aGFzaCB0YWJsZSB3aXRoIHhsYXQgKi8KICNkZWZpbmUgU0hUX0dOVV9BVFRS SUJVVEVTIDB4NmZmZmZmZjUJLyogT2JqZWN0IGF0dHJpYnV0ZXMgKi8KICNk ZWZpbmUgU0hUX0dOVV9IQVNICTB4NmZmZmZmZjYJLyogR05VIHN0eWxlIHN5 bWJvbCBoYXNoIHRhYmxlICovCiAjZGVmaW5lIFNIVF9HTlVfTElCTElTVAkw eDZmZmZmZmY3CS8qIExpc3Qgb2YgcHJlbGluayBkZXBlbmRlbmNpZXMgKi8K QEAgLTc3NSw2ICs3NzYsNyBAQAogI2RlZmluZSBEVF9WQUxSTkdISQkweDZm ZmZmZGZmCiAKICNkZWZpbmUgRFRfQUREUlJOR0xPCTB4NmZmZmZlMDAKKyNk ZWZpbmUgRFRfR05VX1hIQVNICTB4NmZmZmZlZjQKICNkZWZpbmUgRFRfR05V X0hBU0gJMHg2ZmZmZmVmNQogI2RlZmluZSBEVF9UTFNERVNDX1BMVAkweDZm ZmZmZWY2CiAjZGVmaW5lIERUX1RMU0RFU0NfR09UCTB4NmZmZmZlZjcKZGlm ZiAtLWdpdCBhL2xkL2VtdWx0ZW1wbC9taXBzZWxmLmVtIGIvbGQvZW11bHRl bXBsL21pcHNlbGYuZW0KaW5kZXggM2M2ZWM5Zi4uZTdkNGExNiAxMDA2NDQK LS0tIGEvbGQvZW11bHRlbXBsL21pcHNlbGYuZW0KKysrIGIvbGQvZW11bHRl bXBsL21pcHNlbGYuZW0KQEAgLTM1LDIxICszNSw2IEBAIHN0YXRpYyBiZmQg KnN0dWJfYmZkOwogCiBzdGF0aWMgYmZkX2Jvb2xlYW4gaW5zbjMyOwogCi1z dGF0aWMgdm9pZAotbWlwc19hZnRlcl9wYXJzZSAodm9pZCkKLXsKLSAgLyog LmdudS5oYXNoIGFuZCB0aGUgTUlQUyBBQkkgcmVxdWlyZSAuZHluc3ltIHRv IGJlIHNvcnRlZCBpbiBkaWZmZXJlbnQKLSAgICAgd2F5cy4gIC5nbnUuaGFz aCBuZWVkcyBzeW1ib2xzIHRvIGJlIGdyb3VwZWQgYnkgaGFzaCBjb2RlIHdo ZXJlYXMgdGhlCi0gICAgIE1JUFMgQUJJIHJlcXVpcmVzIGEgbWFwcGluZyBi ZXR3ZWVuIHRoZSBHT1QgYW5kIHRoZSBzeW1ib2wgdGFibGUuICAqLwotICBp ZiAobGlua19pbmZvLmVtaXRfZ251X2hhc2gpCi0gICAgewotICAgICAgZWlu Zm8gKCIlWCVQOiAuZ251Lmhhc2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhl IE1JUFMgQUJJXG4iKTsKLSAgICAgIGxpbmtfaW5mby5lbWl0X2hhc2ggPSBU UlVFOwotICAgICAgbGlua19pbmZvLmVtaXRfZ251X2hhc2ggPSBGQUxTRTsK LSAgICB9Ci0gIGFmdGVyX3BhcnNlX2RlZmF1bHQgKCk7Ci19Ci0KIHN0cnVj dCBob29rX3N0dWJfaW5mbwogewogICBsYW5nX3N0YXRlbWVudF9saXN0X3R5 cGUgYWRkOwpAQCAtMjgxLDYgKzI2Niw1IEBAIFBBUlNFX0FORF9MSVNUX0FS R1NfQ0FTRVM9JwogICAgICAgYnJlYWs7CiAnCiAKLUxERU1VTF9BRlRFUl9Q QVJTRT1taXBzX2FmdGVyX3BhcnNlCiBMREVNVUxfQkVGT1JFX0FMTE9DQVRJ T049bWlwc19iZWZvcmVfYWxsb2NhdGlvbgogTERFTVVMX0NSRUFURV9PVVRQ VVRfU0VDVElPTl9TVEFURU1FTlRTPW1pcHNfY3JlYXRlX291dHB1dF9zZWN0 aW9uX3N0YXRlbWVudHMKZGlmZiAtLWdpdCBhL2xkL3NjcmlwdHRlbXBsL2Vs Zi5zYyBiL2xkL3NjcmlwdHRlbXBsL2VsZi5zYwppbmRleCBlODEyNmNiLi4y ZDg5YWIxIDEwMDY0NAotLS0gYS9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKKysr IGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCkBAIC0zNTMsNiArMzUzLDcgQEAg Y2F0ID4gbGRzY3JpcHRzL2R5bnRtcC4kJCA8PEVPRgogICAke1RFWFRfRFlO QU1JQyske0RZTkFNSUN9fQogICAuaGFzaCAgICAgICAgICR7UkVMT0NBVElO Ry0wfSA6IHsgKiguaGFzaCkgfQogICAuZ251Lmhhc2ggICAgICR7UkVMT0NB VElORy0wfSA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmdudS54aGFzaCAgICAk e1JFTE9DQVRJTkctMH0gOiB7ICooLmdudS54aGFzaCkgfQogICAuZHluc3lt ICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguZHluc3ltKSB9CiAgIC5k eW5zdHIgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5keW5zdHIpIH0K ICAgLmdudS52ZXJzaW9uICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmdudS52 ZXJzaW9uKSB9CmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGQtbWlwcy1l bGYvaGFzaDFiLmQgYi9sZC90ZXN0c3VpdGUvbGQtbWlwcy1lbGYvaGFzaDFi LmQKaW5kZXggNWFmOTAzNy4uNjgzNmJhOSAxMDA2NDQKLS0tIGEvbGQvdGVz dHN1aXRlL2xkLW1pcHMtZWxmL2hhc2gxYi5kCisrKyBiL2xkL3Rlc3RzdWl0 ZS9sZC1taXBzLWVsZi9oYXNoMWIuZApAQCAtMSwzICsxLDQgQEAKICNzb3Vy Y2U6IGhhc2gxLnMKICNsZDogLXNoYXJlZCAtLWhhc2gtc3R5bGU9Ym90aAot I2Vycm9yOiAuZ251Lmhhc2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIE1J UFMgQUJJCisjb2JqZHVtcDogLWRyCisjcGFzcwpkaWZmIC0tZ2l0IGEvbGQv dGVzdHN1aXRlL2xkLW1pcHMtZWxmL2hhc2gxYy5kIGIvbGQvdGVzdHN1aXRl L2xkLW1pcHMtZWxmL2hhc2gxYy5kCmluZGV4IDA5YmZmM2MuLjcyYmRjMTgg MTAwNjQ0Ci0tLSBhL2xkL3Rlc3RzdWl0ZS9sZC1taXBzLWVsZi9oYXNoMWMu ZAorKysgYi9sZC90ZXN0c3VpdGUvbGQtbWlwcy1lbGYvaGFzaDFjLmQKQEAg LTEsMyArMSw0IEBACiAjc291cmNlOiBoYXNoMS5zCiAjbGQ6IC1zaGFyZWQg LS1oYXNoLXN0eWxlPWdudQotI2Vycm9yOiAuZ251Lmhhc2ggaXMgaW5jb21w YXRpYmxlIHdpdGggdGhlIE1JUFMgQUJJCisjb2JqZHVtcDogLWRyCisjcGFz cwo= --_003_b49cd7d6b04d41749d56d557879ad4a6XCHRCD006ciscocom_ Content-Type: application/octet-stream; name="glibc-gnuxhash.patch" Content-Description: glibc-gnuxhash.patch Content-Disposition: attachment; filename="glibc-gnuxhash.patch"; size=9544; creation-date="Mon, 05 Oct 2015 22:26:53 GMT"; modification-date="Mon, 05 Oct 2015 22:26:53 GMT" Content-Transfer-Encoding: base64 Content-length: 12941 SW5kZXg6IGdsaWJjLTIuMTYvZWxmL2R5bmFtaWMtbGluay5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdsaWJjLTIuMTYub3JpZy9lbGYvZHluYW1p Yy1saW5rLmgKKysrIGdsaWJjLTIuMTYvZWxmL2R5bmFtaWMtbGluay5oCkBA IC0xNzIsNiArMTcyLDggQEAgZWxmX2dldF9keW5hbWljX2luZm8gKHN0cnVj dCBsaW5rX21hcCAqbAogICAgICAgQURKVVNUX0RZTl9JTkZPIChWRVJTWU1J RFggKERUX1ZFUlNZTSkpOwogICAgICAgQURKVVNUX0RZTl9JTkZPIChEVF9B RERSVEFHSURYIChEVF9HTlVfSEFTSCkgKyBEVF9OVU0gKyBEVF9USElTUFJP Q05VTQogCQkgICAgICAgKyBEVF9WRVJTSU9OVEFHTlVNICsgRFRfRVhUUkFO VU0gKyBEVF9WQUxOVU0pOworICAgICAgQURKVVNUX0RZTl9JTkZPIChEVF9B RERSVEFHSURYIChEVF9HTlVfWEhBU0gpICsgRFRfTlVNICsgRFRfVEhJU1BS T0NOVU0KKwkJICAgICAgICsgRFRfVkVSU0lPTlRBR05VTSArIERUX0VYVFJB TlVNICsgRFRfVkFMTlVNKTsKICMgdW5kZWYgQURKVVNUX0RZTl9JTkZPCiAg ICAgICBhc3NlcnQgKGNudCA8PSBETF9ST19EWU5fVEVNUF9DTlQpOwogICAg IH0KSW5kZXg6IGdsaWJjLTIuMTYvZWxmL2VsZi5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdsaWJjLTIuMTYub3JpZy9lbGYvZWxmLmgKKysrIGds aWJjLTIuMTYvZWxmL2VsZi5oCkBAIC0zMzQsNiArMzM0LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QKICNkZWZpbmUgU0hUX1NZTVRBQl9TSE5EWCAgMTgJCS8qIEV4 dGVuZGVkIHNlY3Rpb24gaW5kZWNlcyAqLwogI2RlZmluZQlTSFRfTlVNCQkg IDE5CQkvKiBOdW1iZXIgb2YgZGVmaW5lZCB0eXBlcy4gICovCiAjZGVmaW5l IFNIVF9MT09TCSAgMHg2MDAwMDAwMAkvKiBTdGFydCBPUy1zcGVjaWZpYy4g ICovCisjZGVmaW5lIFNIVF9HTlVfWEhBU0gJICAweDZmZmZmZmY0CS8qIEdO VS1zdHlsZSBoYXNoIHRhYmxlIHdpdGggeGxhdC4gICovCiAjZGVmaW5lIFNI VF9HTlVfQVRUUklCVVRFUyAweDZmZmZmZmY1CS8qIE9iamVjdCBhdHRyaWJ1 dGVzLiAgKi8KICNkZWZpbmUgU0hUX0dOVV9IQVNICSAgMHg2ZmZmZmZmNgkv KiBHTlUtc3R5bGUgaGFzaCB0YWJsZS4gICovCiAjZGVmaW5lIFNIVF9HTlVf TElCTElTVAkgIDB4NmZmZmZmZjcJLyogUHJlbGluayBsaWJyYXJ5IGxpc3Qg Ki8KQEAgLTcyMCw2ICs3MjEsNyBAQCB0eXBlZGVmIHN0cnVjdAogICAgSWYg YW55IGFkanVzdG1lbnQgaXMgbWFkZSB0byB0aGUgRUxGIG9iamVjdCBhZnRl ciBpdCBoYXMgYmVlbgogICAgYnVpbHQgdGhlc2UgZW50cmllcyB3aWxsIG5l ZWQgdG8gYmUgYWRqdXN0ZWQuICAqLwogI2RlZmluZSBEVF9BRERSUk5HTE8J MHg2ZmZmZmUwMAorI2RlZmluZSBEVF9HTlVfWEhBU0gJMHg2ZmZmZmVmNAkv KiBHTlUtc3R5bGUgaGFzaCB0YWJsZSB3aXRoIHhsYXQuICAqLwogI2RlZmlu ZSBEVF9HTlVfSEFTSAkweDZmZmZmZWY1CS8qIEdOVS1zdHlsZSBoYXNoIHRh YmxlLiAgKi8KICNkZWZpbmUgRFRfVExTREVTQ19QTFQJMHg2ZmZmZmVmNgog I2RlZmluZSBEVF9UTFNERVNDX0dPVAkweDZmZmZmZWY3CkBAIC03MzMsNyAr NzM1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKICNkZWZpbmUgRFRfU1lNSU5GTwkw eDZmZmZmZWZmCS8qIFN5bWluZm8gdGFibGUuICAqLwogI2RlZmluZSBEVF9B RERSUk5HSEkJMHg2ZmZmZmVmZgogI2RlZmluZSBEVF9BRERSVEFHSURYKHRh ZykJKERUX0FERFJSTkdISSAtICh0YWcpKQkvKiBSZXZlcnNlIG9yZGVyISAq LwotI2RlZmluZSBEVF9BRERSTlVNIDExCisjZGVmaW5lIERUX0FERFJOVU0g MTIKIAogLyogVGhlIHZlcnNpb25pbmcgZW50cnkgdHlwZXMuICBUaGUgbmV4 dCBhcmUgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZQogICAgR05VIGV4dGVuc2lv bi4gICovCkluZGV4OiBnbGliYy0yLjE2L3BvcnRzL3N5c2RlcHMvbWlwcy9k bC1hZGRyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxs CisrKyBnbGliYy0yLjE2L3BvcnRzL3N5c2RlcHMvbWlwcy9kbC1hZGRyLmMK QEAgLTAsMCArMSwxNTcgQEAKKy8qIExvY2F0ZSB0aGUgc2hhcmVkIG9iamVj dCBzeW1ib2wgbmVhcmVzdCBhIGdpdmVuIGFkZHJlc3MuCisgICBDb3B5cmln aHQgKEMpIDE5OTYtMjAwNywgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBH TlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vu c2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUK KyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNp bmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1 ZGUgPGxkc29kZWZzLmg+CisKKworc3RhdGljIGlubGluZSB2b2lkCitfX2F0 dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorZGV0ZXJtaW5lX2luZm8gKGNv bnN0IEVsZlcoQWRkcikgYWRkciwgc3RydWN0IGxpbmtfbWFwICptYXRjaCwg RGxfaW5mbyAqaW5mbywKKwkJc3RydWN0IGxpbmtfbWFwICoqbWFwcCwgY29u c3QgRWxmVyhTeW0pICoqc3ltYm9scCkKK3sKKyAgLyogTm93IHdlIGtub3cg d2hhdCBvYmplY3QgdGhlIGFkZHJlc3MgbGllcyBpbi4gICovCisgIGluZm8t PmRsaV9mbmFtZSA9IG1hdGNoLT5sX25hbWU7CisgIGluZm8tPmRsaV9mYmFz ZSA9ICh2b2lkICopIG1hdGNoLT5sX21hcF9zdGFydDsKKworICAvKiBJZiB0 aGlzIGlzIHRoZSBtYWluIHByb2dyYW0gdGhlIGluZm9ybWF0aW9uIGlzIGlu Y29tcGxldGUuICAqLworICBpZiAoX19idWlsdGluX2V4cGVjdCAobWF0Y2gt PmxfbmFtZVswXSwgJ2EnKSA9PSAnXDAnCisgICAgICAmJiBtYXRjaC0+bF90 eXBlID09IGx0X2V4ZWN1dGFibGUpCisgICAgaW5mby0+ZGxpX2ZuYW1lID0g X2RsX2FyZ3ZbMF07CisKKyAgY29uc3QgRWxmVyhTeW0pICpzeW10YWIKKyAg ICA9IChjb25zdCBFbGZXKFN5bSkgKikgRF9QVFIgKG1hdGNoLCBsX2luZm9b RFRfU1lNVEFCXSk7CisgIGNvbnN0IGNoYXIgKnN0cnRhYiA9IChjb25zdCBj aGFyICopIERfUFRSIChtYXRjaCwgbF9pbmZvW0RUX1NUUlRBQl0pOworCisg IEVsZlcoV29yZCkgc3RydGFic2l6ZSA9IG1hdGNoLT5sX2luZm9bRFRfU1RS U1pdLT5kX3VuLmRfdmFsOworCisgIGNvbnN0IEVsZlcoU3ltKSAqbWF0Y2hz eW0gPSBOVUxMOworICBpZiAobWF0Y2gtPmxfaW5mb1tEVF9BRERSVEFHSURY IChEVF9HTlVfWEhBU0gpICsgRFRfTlVNICsgRFRfVEhJU1BST0NOVU0KKwkJ ICAgICsgRFRfVkVSU0lPTlRBR05VTSArIERUX0VYVFJBTlVNICsgRFRfVkFM TlVNXSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbnN0IEVsZjMyX1dvcmQg KiBjb25zdCB4aGFzaDMyCisJPSAodm9pZCAqKSBEX1BUUiAobWF0Y2gsIGxf aW5mb1tEVF9BRERSVEFHSURYIChEVF9HTlVfWEhBU0gpICsgRFRfTlVNCisJ CQkJCSsgRFRfVEhJU1BST0NOVU0gKyBEVF9WRVJTSU9OVEFHTlVNCisJCQkJ CSsgRFRfRVhUUkFOVU0gKyBEVF9WQUxOVU1dKTsKKyAgICAgIGNvbnN0IEVs ZjMyX1dvcmQgbmdudXN5bXMgPSB4aGFzaDMyWzBdOworICAgICAgY29uc3Qg RWxmMzJfV29yZCBzeW1iaWFzID0geGhhc2gzMlsyXTsKKyAgICAgIGZvciAo RWxmMzJfV29yZCBzeW1uZHggPSBzeW1iaWFzOyBzeW1uZHggPCBzeW1iaWFz ICsgbmdudXN5bXM7ICsrc3ltbmR4KQorCXsKKwkgIC8qIFRoZSBoYXNoIHRh YmxlIG5ldmVyIHJlZmVyZW5jZXMgbG9jYWwgc3ltYm9scyBzbworCSAgICAg d2UgY2FuIG9taXQgdGhhdCB0ZXN0IGhlcmUuICAqLworCSAgaWYgKChzeW10 YWJbc3ltbmR4XS5zdF9zaG5keCAhPSBTSE5fVU5ERUYKKwkgICAgICAgfHwg c3ltdGFiW3N5bW5keF0uc3RfdmFsdWUgIT0gMCkKKwkgICAgICAmJiBFTEZX KFNUX1RZUEUpIChzeW10YWJbc3ltbmR4XS5zdF9pbmZvKSAhPSBTVFRfVExT CisJICAgICAgJiYgRExfQUREUl9TWU1fTUFUQ0ggKG1hdGNoLCAmc3ltdGFi W3N5bW5keF0sCisJCQkJICAgIG1hdGNoc3ltLCBhZGRyKQorCSAgICAgICYm IHN5bXRhYltzeW1uZHhdLnN0X25hbWUgPCBzdHJ0YWJzaXplKQorCSAgICBt YXRjaHN5bSA9IChFbGZXKFN5bSkgKikgJnN5bXRhYltzeW1uZHhdOworCX0K KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjb25zdCBFbGZXKFN5bSkg KnN5bXRhYmVuZDsKKyAgICAgIGlmIChtYXRjaC0+bF9pbmZvW0RUX0hBU0hd ICE9IE5VTEwpCisJc3ltdGFiZW5kID0gKHN5bXRhYgorCQkgICAgICsgKChF bGZfU3ltbmR4ICopIERfUFRSIChtYXRjaCwgbF9pbmZvW0RUX0hBU0hdKSlb MV0pOworICAgICAgZWxzZQorCS8qIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkg dG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiB0aGUKKwkg ICBkeW5hbWljIHN5bWJvbCB0YWJsZSBhbmQgbm8gaGFzaCB0YWJsZSBpcyBw cmVzZW50LiAgVGhlIEVMRgorCSAgIGJpbmFyeSBpcyBpbGwtZm9ybWVkIGJ1 dCB3aGF0IHNoYWxsIHdlIGRvPyAgVXNlIHRoZSBiZWdpbm5pbmcgb2YKKwkg ICB0aGUgc3RyaW5nIHRhYmxlIHdoaWNoIGdlbmVyYWxseSBmb2xsb3dzIHRo ZSBzeW1ib2wgdGFibGUuICAqLworCXN5bXRhYmVuZCA9IChjb25zdCBFbGZX KFN5bSkgKikgc3RydGFiOworCisgICAgICBmb3IgKDsgKHZvaWQgKikgc3lt dGFiIDwgKHZvaWQgKikgc3ltdGFiZW5kOyArK3N5bXRhYikKKwlpZiAoKEVM RlcoU1RfQklORCkgKHN5bXRhYi0+c3RfaW5mbykgPT0gU1RCX0dMT0JBTAor CSAgICAgfHwgRUxGVyhTVF9CSU5EKSAoc3ltdGFiLT5zdF9pbmZvKSA9PSBT VEJfV0VBSykKKwkgICAgJiYgRUxGVyhTVF9UWVBFKSAoc3ltdGFiLT5zdF9p bmZvKSAhPSBTVFRfVExTCisJICAgICYmIChzeW10YWItPnN0X3NobmR4ICE9 IFNITl9VTkRFRgorCQl8fCBzeW10YWItPnN0X3ZhbHVlICE9IDApCisJICAg ICYmIERMX0FERFJfU1lNX01BVENIIChtYXRjaCwgc3ltdGFiLCBtYXRjaHN5 bSwgYWRkcikKKwkgICAgJiYgc3ltdGFiLT5zdF9uYW1lIDwgc3RydGFic2l6 ZSkKKwkgIG1hdGNoc3ltID0gKEVsZlcoU3ltKSAqKSBzeW10YWI7CisgICAg fQorCisgIGlmIChtYXBwKQorICAgICptYXBwID0gbWF0Y2g7CisgIGlmIChz eW1ib2xwKQorICAgICpzeW1ib2xwID0gbWF0Y2hzeW07CisKKyAgaWYgKG1h dGNoc3ltKQorICAgIHsKKyAgICAgIC8qIFdlIGZvdW5kIGEgc3ltYm9sIGNs b3NlIGJ5LiAgRmlsbCBpbiBpdHMgbmFtZSBhbmQgZXhhY3QKKwkgYWRkcmVz cy4gICovCisgICAgICBsb29rdXBfdCBtYXRjaGwgPSBMT09LVVBfVkFMVUUg KG1hdGNoKTsKKworICAgICAgaW5mby0+ZGxpX3NuYW1lID0gc3RydGFiICsg bWF0Y2hzeW0tPnN0X25hbWU7CisgICAgICBpbmZvLT5kbGlfc2FkZHIgPSBE TF9TWU1CT0xfQUREUkVTUyAobWF0Y2hsLCBtYXRjaHN5bSk7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgLyogTm8gc3ltYm9sIG1hdGNoZXMuICBX ZSByZXR1cm4gb25seSB0aGUgY29udGFpbmluZyBvYmplY3QuICAqLworICAg ICAgaW5mby0+ZGxpX3NuYW1lID0gTlVMTDsKKyAgICAgIGluZm8tPmRsaV9z YWRkciA9IE5VTEw7CisgICAgfQorfQorCisKK2ludAoraW50ZXJuYWxfZnVu Y3Rpb24KK19kbF9hZGRyIChjb25zdCB2b2lkICphZGRyZXNzLCBEbF9pbmZv ICppbmZvLAorCSAgc3RydWN0IGxpbmtfbWFwICoqbWFwcCwgY29uc3QgRWxm VyhTeW0pICoqc3ltYm9scCkKK3sKKyAgY29uc3QgRWxmVyhBZGRyKSBhZGRy ID0gRExfTE9PS1VQX0FERFJFU1MgKGFkZHJlc3MpOworICBpbnQgcmVzdWx0 ID0gMDsKKworICAvKiBQcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBsb2Fk cyBhbmQgdW5sb2Fkcy4gICovCisgIF9fcnRsZF9sb2NrX2xvY2tfcmVjdXJz aXZlIChHTChkbF9sb2FkX2xvY2spKTsKKworICAvKiBGaW5kIHRoZSBoaWdo ZXN0LWFkZHJlc3NlZCBvYmplY3QgdGhhdCBBRERSRVNTIGlzIG5vdCBiZWxv dy4gICovCisgIGZvciAoTG1pZF90IG5zID0gMDsgbnMgPCBHTChkbF9ubnMp OyArK25zKQorICAgIGZvciAoc3RydWN0IGxpbmtfbWFwICpsID0gR0woZGxf bnMpW25zXS5fbnNfbG9hZGVkOyBsOyBsID0gbC0+bF9uZXh0KQorICAgICAg aWYgKGFkZHIgPj0gbC0+bF9tYXBfc3RhcnQgJiYgYWRkciA8IGwtPmxfbWFw X2VuZAorCSAgJiYgKGwtPmxfY29udGlndW91cyB8fCBfZGxfYWRkcl9pbnNp ZGVfb2JqZWN0IChsLCBhZGRyKSkpCisJeworCSAgZGV0ZXJtaW5lX2luZm8g KGFkZHIsIGwsIGluZm8sIG1hcHAsIHN5bWJvbHApOworCSAgcmVzdWx0ID0g MTsKKwkgIGdvdG8gb3V0OworCX0KKworIG91dDoKKyAgX19ydGxkX2xvY2tf dW5sb2NrX3JlY3Vyc2l2ZSAoR0woZGxfbG9hZF9sb2NrKSk7CisKKyAgcmV0 dXJuIHJlc3VsdDsKK30KK2xpYmNfaGlkZGVuX2RlZiAoX2RsX2FkZHIpCisK Ky8qIFJldHVybiBub24temVybyBpZiBBRERSIGxpZXMgd2l0aGluIG9uZSBv ZiBMJ3Mgc2VnbWVudHMuICAqLworaW50CitpbnRlcm5hbF9mdW5jdGlvbgor X2RsX2FkZHJfaW5zaWRlX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsLCBj b25zdCBFbGZXKEFkZHIpIGFkZHIpCit7CisgIGludCBuID0gbC0+bF9waG51 bTsKKyAgY29uc3QgRWxmVyhBZGRyKSByZWxhZGRyID0gYWRkciAtIGwtPmxf YWRkcjsKKworICB3aGlsZSAoLS1uID49IDApCisgICAgaWYgKGwtPmxfcGhk cltuXS5wX3R5cGUgPT0gUFRfTE9BRAorCSYmIHJlbGFkZHIgLSBsLT5sX3Bo ZHJbbl0ucF92YWRkciA+PSAwCisJJiYgcmVsYWRkciAtIGwtPmxfcGhkcltu XS5wX3ZhZGRyIDwgbC0+bF9waGRyW25dLnBfbWVtc3opCisgICAgICByZXR1 cm4gMTsKKyAgcmV0dXJuIDA7Cit9CkluZGV4OiBnbGliYy0yLjE2L3BvcnRz L3N5c2RlcHMvbWlwcy9kbC1sb29rdXAuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnbGliYy0yLjE2Lm9yaWcvcG9ydHMvc3lzZGVwcy9taXBzL2Rs LWxvb2t1cC5jCisrKyBnbGliYy0yLjE2L3BvcnRzL3N5c2RlcHMvbWlwcy9k bC1sb29rdXAuYwpAQCAtMjYyLDcgKzI2Miw5IEBAIGRvX2xvb2t1cF94IChj b25zdCBjaGFyICp1bmRlZl9uYW1lLCB1aW4KIAkJICBkbwogCQkgICAgaWYg KCgoKmhhc2hhcnIgXiBuZXdfaGFzaCkgPj4gMSkgPT0gMCkKIAkJICAgICAg ewotCQkJc3ltaWR4ID0gaGFzaGFyciAtIG1hcC0+bF9nbnVfY2hhaW5femVy bzsKKwkJCXN5bWlkeCA9CisJCQkgIG1hcC0+bF9tYWNoLmdudV94bGF0X3pl cm9baGFzaGFyciAtCisJCQkJCQkgICAgbWFwLT5sX2dudV9jaGFpbl96ZXJv XTsKIAkJCXN5bSA9IGNoZWNrX21hdGNoICgmc3ltdGFiW3N5bWlkeF0pOwog CQkJaWYgKHN5bSAhPSBOVUxMKQogCQkJICBnb3RvIGZvdW5kX2l0OwpAQCAt ODc4LDE0ICs4ODAsMTUgQEAgX2RsX3NldHVwX2hhc2ggKHN0cnVjdCBsaW5r X21hcCAqbWFwKQogewogICBFbGZfU3ltbmR4ICpoYXNoOwogCi0gIGlmIChf X2J1aWx0aW5fZXhwZWN0IChtYXAtPmxfaW5mb1tEVF9BRERSVEFHSURYIChE VF9HTlVfSEFTSCkgKyBEVF9OVU0KKyAgaWYgKF9fYnVpbHRpbl9leHBlY3Qg KG1hcC0+bF9pbmZvW0RUX0FERFJUQUdJRFggKERUX0dOVV9YSEFTSCkgKyBE VF9OVU0KIAkJCQkgICAgKyBEVF9USElTUFJPQ05VTSArIERUX1ZFUlNJT05U QUdOVU0KIAkJCQkgICAgKyBEVF9FWFRSQU5VTSArIERUX1ZBTE5VTV0gIT0g TlVMTCwgMSkpCiAgICAgewogICAgICAgRWxmMzJfV29yZCAqaGFzaDMyCi0J PSAodm9pZCAqKSBEX1BUUiAobWFwLCBsX2luZm9bRFRfQUREUlRBR0lEWCAo RFRfR05VX0hBU0gpICsgRFRfTlVNCisJPSAodm9pZCAqKSBEX1BUUiAobWFw LCBsX2luZm9bRFRfQUREUlRBR0lEWCAoRFRfR05VX1hIQVNIKSArIERUX05V TQogCQkJCSAgICAgICsgRFRfVEhJU1BST0NOVU0gKyBEVF9WRVJTSU9OVEFH TlVNCiAJCQkJICAgICAgKyBEVF9FWFRSQU5VTSArIERUX1ZBTE5VTV0pOwor ICAgICAgRWxmMzJfV29yZCBuZ251c3ltcyA9ICpoYXNoMzIrKzsKICAgICAg IG1hcC0+bF9uYnVja2V0cyA9ICpoYXNoMzIrKzsKICAgICAgIEVsZjMyX1dv cmQgc3ltYmlhcyA9ICpoYXNoMzIrKzsKICAgICAgIEVsZjMyX1dvcmQgYml0 bWFza19ud29yZHMgPSAqaGFzaDMyKys7CkBAIC05MDAsNiArOTAzLDggQEAg X2RsX3NldHVwX2hhc2ggKHN0cnVjdCBsaW5rX21hcCAqbWFwKQogICAgICAg bWFwLT5sX2dudV9idWNrZXRzID0gaGFzaDMyOwogICAgICAgaGFzaDMyICs9 IG1hcC0+bF9uYnVja2V0czsKICAgICAgIG1hcC0+bF9nbnVfY2hhaW5femVy byA9IGhhc2gzMiAtIHN5bWJpYXM7CisgICAgICBoYXNoMzIgKz0gbmdudXN5 bXM7CisgICAgICBtYXAtPmxfbWFjaC5nbnVfeGxhdF96ZXJvID0gaGFzaDMy IC0gc3ltYmlhczsKICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IGds aWJjLTIuMTYvcG9ydHMvc3lzZGVwcy9taXBzL2JpdHMvbGlua21hcC5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGdsaWJjLTIuMTYub3JpZy9wb3J0 cy9zeXNkZXBzL21pcHMvYml0cy9saW5rbWFwLmgKKysrIGdsaWJjLTIuMTYv cG9ydHMvc3lzZGVwcy9taXBzL2JpdHMvbGlua21hcC5oCkBAIC0xLDQgKzEs NSBAQAogc3RydWN0IGxpbmtfbWFwX21hY2hpbmUKICAgewogICAgIEVsZlco QWRkcikgcGx0OyAvKiBBZGRyZXNzIG9mIC5wbHQgKi8KKyAgICBjb25zdCBF bGYzMl9Xb3JkICpnbnVfeGxhdF96ZXJvOyAvKiAuZ251LnhoYXNoICovCiAg IH07Cg== --_003_b49cd7d6b04d41749d56d557879ad4a6XCHRCD006ciscocom_--