From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24237 invoked by alias); 7 Jul 2009 21:25:00 -0000 Received: (qmail 24214 invoked by uid 22791); 7 Jul 2009 21:24:56 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_05,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 07 Jul 2009 21:24:48 +0000 Received: from zps38.corp.google.com (zps38.corp.google.com [172.25.146.38]) by smtp-out.google.com with ESMTP id n67LOklF021415 for ; Tue, 7 Jul 2009 14:24:46 -0700 Received: from ewy17 (ewy17.prod.google.com [10.241.103.17]) by zps38.corp.google.com with ESMTP id n67LOgQr008932 for ; Tue, 7 Jul 2009 14:24:43 -0700 Received: by ewy17 with SMTP id 17so115028ewy.41 for ; Tue, 07 Jul 2009 14:24:42 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.2.212 with SMTP id 62mr1719705wef.150.1247001881924; Tue, 07 Jul 2009 14:24:41 -0700 (PDT) Date: Tue, 07 Jul 2009 21:25:00 -0000 Message-ID: <7e6c8d660907071424j7e96ffb3r5b129ba97040d7e1@mail.gmail.com> Subject: [RFA] Rewrite data cache to use splay tree From: Jacob Potter To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016364d2597354701046e24404a X-System-Of-Record: true Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00220.txt.bz2 --0016364d2597354701046e24404a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 1817 Here's the first part of the dcache rewrite and stack caching changes I've been working on. This patch re-implements the cache using a splay tree, along with a linked list for an oldest-first replacement policy. It also makes the cache write-through, rather than the old partially-implemented writeback functionality. I couldn't find a good place to store separate cache structures for different inferiors; I think the answer is to just clear the cache when current_target is changed, which I'll do in the second patch. - Jacob 2009-07-07 Jacob Potter * dcache.c (ENTRY_INVALID, ENTRY_VALID, ENTRY_DIRTY): Delete. (state_chars): Delete. (struct dcache_block): Clean up; remove state and anydirty fields. (struct dcache_struct): Redefine as a splay tree and linked list. (dcache_writeback): Remove declaration. (dcache_invalidate, dcache_hit): Rewrite for new cache structure. (dcache_write_line): Delete. (dcache_read_line, dcache_alloc): Rewrite for new cache structure. (dcache_writeback): Delete. (dcache_peek_byte): Clean up; remove "invalid" state check. (dcache_poke_byte): Rewrite for new cache structure; clarify comment. (dcache_splay_tree_compare): New function. (dcache_init, dcache_free): Rewrite for new cache structure. (dcache_xfer_memory): Rewrite for new write-through cache structure. (dcache_update, dcache_print_line): New functions. (dcache_info): Rewrite for new cache structure. (_initialize_dcache): Rewrite for new cache structure. * dcache.h (dcache_xfer_memory): Update definition. (dcache_update, dcache_stack_enabled_p): Declare. * target.c (memory_xfer_partial): Update calls to dcache_xfer_memory. --0016364d2597354701046e24404a Content-Type: text/plain; charset=US-ASCII; name="part1-dcache-rewrite.patch.txt" Content-Disposition: attachment; filename="part1-dcache-rewrite.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwv4kyrc0 Content-length: 31582 ZGlmZiAtLWdpdCBhL2dkYi9kY2FjaGUuYyBiL2dkYi9kY2FjaGUuYwppbmRl eCAzMDc3NmU5Li4wNjk1NmNiIDEwMDY0NAotLS0gYS9nZGIvZGNhY2hlLmMK KysrIGIvZ2RiL2RjYWNoZS5jCkBAIC0yNCw1NyArMjQsMzQgQEAKICNpbmNs dWRlICJnZGJfc3RyaW5nLmgiCiAjaW5jbHVkZSAiZ2RiY29yZS5oIgogI2lu Y2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKIAog LyogVGhlIGRhdGEgY2FjaGUgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVz dWx0cyBiZWNhdXNlIGl0IGRvZXNuJ3QKICAgIGtub3cgYWJvdXQgdm9sYXRp bGUgdmFyaWFibGVzLCB0aHVzIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRl YnVnCiAgICBmdW5jdGlvbnMgd2hpY2ggdXNlIG1lbW9yeSBtYXBwZWQgSS9P IGRldmljZXMuICBTZXQgdGhlIG5vY2FjaGUKICAgIG1lbW9yeSByZWdpb24g YXR0cmlidXRlIGluIHRob3NlIGNhc2VzLgogCi0gICBJbiBnZW5lcmFsIHRo ZSBkY2FjaGUgc3BlZWRzIHVwIHBlcmZvcm1hbmNlLCBzb21lIHNwZWVkIGlt cHJvdmVtZW50CisgICBJbiBnZW5lcmFsIHRoZSBkY2FjaGUgc3BlZWRzIHVw IHBlcmZvcm1hbmNlLiAgU29tZSBzcGVlZCBpbXByb3ZlbWVudAogICAgY29t ZXMgZnJvbSB0aGUgYWN0dWFsIGNhY2hpbmcgbWVjaGFuaXNtLCBidXQgdGhl IG1ham9yIGdhaW4gaXMgaW4KICAgIHRoZSByZWR1Y3Rpb24gb2YgdGhlIHJl bW90ZSBwcm90b2NvbCBvdmVyaGVhZDsgaW5zdGVhZCBvZiByZWFkaW5nCiAg ICBvciB3cml0aW5nIGEgbGFyZ2UgYXJlYSBvZiBtZW1vcnkgaW4gNCBieXRl IHJlcXVlc3RzLCB0aGUgY2FjaGUKLSAgIGJ1bmRsZXMgdXAgdGhlIHJlcXVl c3RzIGludG8gMzIgYnl0ZSAoYWN0dWFsbHkgTElORV9TSVpFKSBjaHVua3Mu Ci0gICBSZWR1Y2luZyB0aGUgb3ZlcmhlYWQgdG8gYW4gZWlnaHRoIG9mIHdo YXQgaXQgd2FzLiAgVGhpcyBpcyB2ZXJ5Ci0gICBvYnZpb3VzIHdoZW4gZGlz cGxheWluZyBhIGxhcmdlIGFtb3VudCBvZiBkYXRhLAotCi0gICBlZywgeC8y MDB4IDAgCi0KLSAgIGNhY2hpbmcgICAgIHwgICBubyAgICB5ZXMgCi0gICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgZmlyc3QgdGltZSAg fCAgIDQgc2VjICAyIHNlYyBpbXByb3ZlbWVudCBkdWUgdG8gY2h1bmtpbmcg Ci0gICBzZWNvbmQgdGltZSB8ICAgNCBzZWMgIDAgc2VjIGltcHJvdmVtZW50 IGR1ZSB0byBjYWNoaW5nCi0KLSAgIFRoZSBjYWNoZSBzdHJ1Y3R1cmUgaXMg dW51c3VhbCwgd2Uga2VlcCBhIG51bWJlciBvZiBjYWNoZSBibG9ja3MKLSAg IChEQ0FDSEVfU0laRSkgYW5kIGVhY2ggb25lIGNhY2hlcyBhIExJTkVfU0la RWVkIGFyZWEgb2YgbWVtb3J5LgotICAgV2l0aGluIGVhY2ggbGluZSB3ZSBy ZW1lbWJlciB0aGUgYWRkcmVzcyBvZiB0aGUgbGluZSAoYWx3YXlzIGEKLSAg IG11bHRpcGxlIG9mIHRoZSBMSU5FX1NJWkUpIGFuZCBhIHZlY3RvciBvZiBi eXRlcyBvdmVyIHRoZSByYW5nZS4KLSAgIFRoZXJlJ3MgYW5vdGhlciB2ZWN0 b3Igd2hpY2ggY29udGFpbnMgdGhlIHN0YXRlIG9mIHRoZSBieXRlcy4KLQot ICAgRU5UUllfSU5WQUxJRCBtZWFucyB0aGF0IHRoZSBieXRlIGlzIGp1c3Qg cGxhaW4gd3JvbmcsIGFuZCBoYXMgbm8KLSAgIGNvcnJlc3BvbmRlbmNlIHdp dGggYW55dGhpbmcgZWxzZSAoYXMgaXQgd291bGQgd2hlbiB0aGUgY2FjaGUg aXMKLSAgIHR1cm5lZCBvbiwgYnV0IG5vdGhpbmcgaGFzIGJlZW4gZG9uZSB0 byBpdCkuCi0KLSAgIEVOVFJZX0RJUlRZIG1lYW5zIHRoYXQgdGhlIGJ5dGUg aGFzIHNvbWUgZGF0YSBpbiBpdCB3aGljaCBzaG91bGQgYmUKLSAgIHdyaXR0 ZW4gb3V0IHRvIHRoZSByZW1vdGUgdGFyZ2V0IG9uZSBkYXksIGJ1dCBjb250 YWlucyBjb3JyZWN0Ci0gICBkYXRhLgotCi0gICBFTlRSWV9WQUxJRCBtZWFu cyB0aGF0IHRoZSBkYXRhIGlzIHRoZSBzYW1lIGluIHRoZSBjYWNoZSBhcyBp dCBpcyBpbgotICAgcmVtb3RlIG1lbW9yeS4KLQotCi0gICBUaGUgRU5UUllf RElSVFkgc3RhdGUgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgR0RCIGxpa2VzIHRv IHdyaXRlIGxhcmdlCi0gICBsdW1wcyBvZiBtZW1vcnkgaW4gc21hbGwgYml0 cy4gIElmIHRoZSBjYWNoaW5nIG1lY2hhbmlzbSBkaWRuJ3QKLSAgIG1haW50 YWluIHRoZSBESVJUWSBpbmZvcm1hdGlvbiwgdGhlbiBzb21ldGhpbmcgbGlr ZSBhIHR3byBieXRlCi0gICB3cml0ZSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVu dGlyZSBjYWNoZSBsaW5lIHdvdWxkIGhhdmUgdG8gYmUgcmVhZCwKLSAgIHRo ZSB0d28gYnl0ZXMgbW9kaWZpZWQgYW5kIHRoZW4gd3JpdHRlbiBvdXQgYWdh aW4uICBUaGUgYWx0ZXJuYXRpdmUKLSAgIHdvdWxkIGJlIHRvIG5vdCByZWFk IGluIHRoZSBjYWNoZSBsaW5lIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIGp1 c3QKLSAgIHdyaXRlIHRoZSB0d28gYnl0ZXMgZGlyZWN0bHkgaW50byB0YXJn ZXQgbWVtb3J5LiAgVGhlIHRyb3VibGUgd2l0aAotICAgdGhhdCBpcyB0aGF0 IGl0IHJlYWxseSBuYWlscyBwZXJmb3JtYW5jZSwgYmVjYXVzZSBvZiB0aGUg cmVtb3RlCi0gICBwcm90b2NvbCBvdmVyaGVhZC4gIFRoaXMgd2F5LCBhbGwg dGhvc2UgbGl0dGxlIHdyaXRlcyBhcmUgYnVuZGxlZAotICAgdXAgaW50byBh biBlbnRpcmUgY2FjaGUgbGluZSB3cml0ZSBpbiBvbmUgZ28sIHdpdGhvdXQg aGF2aW5nIHRvCi0gICByZWFkIHRoZSBjYWNoZSBsaW5lIGluIHRoZSBmaXJz dCBwbGFjZS4KLSAqLworICAgYnVuZGxlcyB1cCB0aGUgcmVxdWVzdHMgaW50 byBMSU5FX1NJWkUgY2h1bmtzLCByZWR1Y2luZyBvdmVyaGVhZAorICAgc2ln bmlmaWNhbnRseS4gIFRoaXMgaXMgbW9zdCB1c2VmdWwgd2hlbiBhY2Nlc3Np bmcgYSBsYXJnZSBhbW91bnQKKyAgIG9mIGRhdGEsIHN1Y2ggYXMgd2hlbiBw ZXJmb3JtaW5nIGEgYmFja3RyYWNlLgorCisgICBUaGUgY2FjaGUgaXMgYSBz cGxheSB0cmVlIGFsb25nIHdpdGggYSBsaW5rZWQgbGlzdCBmb3IgcmVwbGFj ZW1lbnQuCisgICBFYWNoIGJsb2NrIGNhY2hlcyBhIExJTkVfU0laRSBhcmVh IG9mIG1lbW9yeS4gIFd0aWhpbiBlYWNoIGxpbmUgd2UgcmVtZW1iZXIKKyAg IHRoZSBhZGRyZXNzIG9mIHRoZSBsaW5lICh3aGljaCBtdXN0IGJlIGEgbXVs dGlwbGUgb2YgTElORV9TSVpFKSBhbmQgdGhlCisgICBhY3R1YWwgZGF0YSBi bG9jay4KKworICAgTGluZXMgYXJlIG9ubHkgYWxsb2NhdGVkIGFzIG5lZWRl ZCwgc28gRENBQ0hFX1NJWkUgcmVhbGx5IHNwZWNpZmllcyB0aGUKKyAgICpt YXhpbXVtKiBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGNhY2hlLgorCisgICBB dCBwcmVzZW50LCB0aGUgY2FjaGUgaXMgd3JpdGUtdGhyb3VnaCByYXRoZXIg dGhhbiB3cml0ZWJhY2s6IGFzIHNvb24KKyAgIGFzIGRhdGEgaXMgd3JpdHRl biB0byB0aGUgY2FjaGUsIGl0IGlzIGFsc28gaW1tZWRpYXRlbHkgd3JpdHRl biB0bworICAgdGhlIHRhcmdldC4gIFRoZXJlZm9yZSwgY2FjaGUgbGluZXMg YXJlIG5ldmVyICJkaXJ0eSIuICBXaGV0aGVyIGEgZ2l2ZW4KKyAgIGxpbmUg aXMgdmFsaWQgb3Igbm90IGRlcGVuZHMgb24gd2hlcmUgaXQgaXMgc3RvcmVk IGluIHRoZSBkY2FjaGVfc3RydWN0OworICAgdGhlcmUgaXMgbm8gcGVyLWJs b2NrIHZhbGlkIGZsYWcuICAqLwogCiAvKiBOT1RFOiBJbnRlcmFjdGlvbiBv ZiBkY2FjaGUgYW5kIG1lbW9yeSByZWdpb24gYXR0cmlidXRlcwogCkBAIC04 OSwyMCArNjYsMTYgQEAKICAgIHRoZSBsYXN0IGJpdCBvZiB0aGUgLnRleHQg c2VnbWVudCBhbmQgdGhlIGZpcnN0IGJpdCBvZiB0aGUgLmRhdGEKICAgIHNl Z21lbnQgZmFsbCB3aXRoaW4gdGhlIHNhbWUgZGNhY2hlIHBhZ2Ugd2l0aCBh IHJvL2NhY2hlYWJsZSBtZW1vcnkKICAgIHJlZ2lvbiBkZWZpbmVkIGZvciB0 aGUgLnRleHQgc2VnbWVudCBhbmQgYSBydy9ub24tY2FjaGVhYmxlIG1lbW9y eQotICAgcmVnaW9uIGRlZmluZWQgZm9yIHRoZSAuZGF0YSBzZWdtZW50LiAq LwotCi0vKiBUaGlzIHZhbHVlIHJlZ3VsYXRlcyB0aGUgbnVtYmVyIG9mIGNh Y2hlIGJsb2NrcyBzdG9yZWQuCi0gICBTbWFsbGVyIHZhbHVlcyByZWR1Y2Ug dGhlIHRpbWUgc3BlbnQgc2VhcmNoaW5nIGZvciBhIGNhY2hlCi0gICBsaW5l LCBhbmQgcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMsIGJ1dCBpbmNyZWFz ZSB0aGUgcmlzawotICAgb2YgYSBsaW5lIG5vdCBiZWluZyBpbiBtZW1vcnkg Ki8KLQotI2RlZmluZSBEQ0FDSEVfU0laRSA2NAorICAgcmVnaW9uIGRlZmlu ZWQgZm9yIHRoZSAuZGF0YSBzZWdtZW50LiAgKi8KIAotLyogVGhpcyB2YWx1 ZSByZWd1bGF0ZXMgdGhlIHNpemUgb2YgYSBjYWNoZSBsaW5lLiAgU21hbGxl ciB2YWx1ZXMKLSAgIHJlZHVjZSB0aGUgdGltZSB0YWtlbiB0byByZWFkIGEg c2luZ2xlIGJ5dGUsIGJ1dCByZWR1Y2Ugb3ZlcmFsbAotICAgdGhyb3VnaHB1 dC4gICovCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgc3RvcmVk LiAgVGhlIHRvdGFsIHNpemUgb2YgdGhlIGNhY2hlIGlzCisgICBlcXVhbCB0 byBEQ0FDSEVfU0laRSB0aW1lcyBMSU5FX1NJWkUuICAqLworI2RlZmluZSBE Q0FDSEVfU0laRQk0MDk2CiAKLSNkZWZpbmUgTElORV9TSVpFX1BPV0VSICg1 KQorLyogVGhlIHNpemUgb2YgYSBjYWNoZSBsaW5lLiAgU21hbGxlciB2YWx1 ZXMgcmVkdWNlIHRoZSB0aW1lIHRha2VuIHRvCisgICByZWFkIGEgc2luZ2xl IGJ5dGUgYW5kIG1ha2UgdGhlIGNhY2hlIG1vcmUgZ3JhbnVsYXIsIGJ1dCBp bmNyZWFzZQorICAgb3ZlcmhlYWQgYW5kIHJlZHVjZSB0aGUgZWZmZWN0aXZl bmVzcyBvZiB0aGUgY2FjaGUgYXMgYSBwcmVmZXRjaGVyLiAgKi8KKyNkZWZp bmUgTElORV9TSVpFX1BPV0VSIDYKICNkZWZpbmUgTElORV9TSVpFICgxIDw8 IExJTkVfU0laRV9QT1dFUikKIAogLyogRWFjaCBjYWNoZSBibG9jayBob2xk cyBMSU5FX1NJWkUgYnl0ZXMgb2YgZGF0YQpAQCAtMTEyLDU5ICs4NSwyNCBA QAogI2RlZmluZSBYRk9STSh4KSAJKCh4KSAmIExJTkVfU0laRV9NQVNLKQog I2RlZmluZSBNQVNLKHgpICAgICAgICAgKCh4KSAmIH5MSU5FX1NJWkVfTUFT SykKIAotCi0jZGVmaW5lIEVOVFJZX0lOVkFMSUQgMCAvKiBkYXRhIGF0IHRo aXMgYnl0ZSBpcyB3cm9uZyAqLwotI2RlZmluZSBFTlRSWV9ESVJUWSAgIDEg LyogZGF0YSBhdCB0aGlzIGJ5dGUgbmVlZHMgdG8gYmUgd3JpdHRlbiBiYWNr ICovCi0jZGVmaW5lIEVOVFJZX1ZBTElEICAgMiAvKiBkYXRhIGF0IHRoaXMg Ynl0ZSBpcyBzYW1lIGFzIGluIG1lbW9yeSAqLwotCi0vKiBGb3IgY2FjaGUg c3RhdGUgZGlzcGxheSBieSAiaW5mbyBkY2FjaGUiLgotICAgVGhlIGxldHRl cnMgSSxELFYgbWFwIHRvCi0gICBJID0gRU5UUllfSU5WQUxJRAotICAgRCA9 IEVOVFJZX0RJUlRZCi0gICBWID0gRU5UUllfVkFMSUQgICovCi1zdGF0aWMg Y29uc3QgY2hhciBzdGF0ZV9jaGFyc1szXSA9IHsgJ0knLCAnRCcsICdWJyB9 OwotCiBzdHJ1Y3QgZGNhY2hlX2Jsb2NrCi0gIHsKLSAgICBzdHJ1Y3QgZGNh Y2hlX2Jsb2NrICpwOwkvKiBuZXh0IGluIGxpc3QgKi8KLSAgICBDT1JFX0FE RFIgYWRkcjsJCS8qIEFkZHJlc3MgZm9yIHdoaWNoIGRhdGEgaXMgcmVjb3Jk ZWQuICAqLwotICAgIGdkYl9ieXRlIGRhdGFbTElORV9TSVpFXTsJLyogYnl0 ZXMgYXQgZ2l2ZW4gYWRkcmVzcyAqLwotICAgIHVuc2lnbmVkIGNoYXIgc3Rh dGVbTElORV9TSVpFXTsJLyogd2hhdCBzdGF0ZSB0aGUgZGF0YSBpcyBpbiAq LwotCi0gICAgLyogd2hldGhlciBhbnl0aGluZyBpbiBzdGF0ZSBpcyBkaXJ0 eSAtIHVzZWQgdG8gc3BlZWQgdXAgdGhlIAotICAgICAgIGRpcnR5IHNjYW4u ICovCi0gICAgaW50IGFueWRpcnR5OwotCi0gICAgaW50IHJlZnM7Ci0gIH07 Ci0KLQotLyogRklYTUU6IGRjYWNoZV9zdHJ1Y3QgdXNlZCB0byBoYXZlIGEg Y2FjaGVfaGFzX3N0dWZmIGZpZWxkIHRoYXQgd2FzCi0gICB1c2VkIHRvIHJl Y29yZCB3aGV0aGVyIHRoZSBjYWNoZSBoYWQgYmVlbiBhY2Nlc3NlZC4gIFRo aXMgd2FzIHVzZWQKLSAgIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIHdoZW5l dmVyIGNhY2hpbmcgd2FzIChyZS0pZW5hYmxlZCAoaWYgdGhlCi0gICBjYWNo ZSB3YXMgZGlzYWJsZWQgYW5kIGxhdGVyIHJlLWVuYWJsZWQsIGl0IGNvdWxk IGNvbnRhaW4gc3RhbGUKLSAgIGRhdGEpLiAgVGhpcyB3YXMgbm90IG5lZWRl ZCBiZWNhdXNlIHRoZSBjYWNoZSBpcyB3cml0ZSB0aHJvdWdoIGFuZAotICAg dGhlIGNvZGUgdGhhdCBlbmFibGVzLCBkaXNhYmxlcywgYW5kIGRlbGV0ZXMg bWVtb3J5IHJlZ2lvbiBhbGwKLSAgIGludmFsaWRhdGUgdGhlIGNhY2hlLgor eworICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpuZXdlcjsJLyogZm9yIExSVSBh bmQgZnJlZSBsaXN0ICovCisgIENPUkVfQUREUiBhZGRyOwkJLyogYWRkcmVz cyBvZiBkYXRhICovCisgIGdkYl9ieXRlIGRhdGFbTElORV9TSVpFXTsJLyog Ynl0ZXMgYXQgZ2l2ZW4gYWRkcmVzcyAqLwogCi0gICBUaGlzIGlzIG92ZXJr aWxsLCBzaW5jZSBpdCBhbHNvIGludmFsaWRhdGVzIGNhY2hlIGxpbmVzIGZy b20KLSAgIHVucmVsYXRlZCByZWdpb25zLiAgT25lIHdheSB0aGlzIGNvdWxk IGJlIGFkZHJlc3NlZCBieSBhZGRpbmcgYQotICAgbmV3IGZ1bmN0aW9uIHRo YXQgdGFrZXMgYW4gYWRkcmVzcyBhbmQgYSBsZW5ndGggYW5kIGludmFsaWRh dGVzCi0gICBvbmx5IHRob3NlIGNhY2hlIGxpbmVzIHRoYXQgbWF0Y2guICov CisgIGludCByZWZzOworfTsKIAogc3RydWN0IGRjYWNoZV9zdHJ1Y3QKLSAg ewotICAgIC8qIGZyZWUgbGlzdCAqLwotICAgIHN0cnVjdCBkY2FjaGVfYmxv Y2sgKmZyZWVfaGVhZDsKLSAgICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpmcmVl X3RhaWw7Ci0KLSAgICAvKiBpbiB1c2UgbGlzdCAqLwotICAgIHN0cnVjdCBk Y2FjaGVfYmxvY2sgKnZhbGlkX2hlYWQ7Ci0gICAgc3RydWN0IGRjYWNoZV9i bG9jayAqdmFsaWRfdGFpbDsKK3sKKyAgc3BsYXlfdHJlZSB0cmVlOworICBz dHJ1Y3QgZGNhY2hlX2Jsb2NrICpvbGRlc3Q7CisgIHN0cnVjdCBkY2FjaGVf YmxvY2sgKm5ld2VzdDsKIAotICAgIC8qIFRoZSBjYWNoZSBpdHNlbGYuICov Ci0gICAgc3RydWN0IGRjYWNoZV9ibG9jayAqdGhlX2NhY2hlOwotICB9Owor ICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpmcmVlbGlzdDsKKyAgaW50IHNpemU7 Cit9OwogCiBzdGF0aWMgc3RydWN0IGRjYWNoZV9ibG9jayAqZGNhY2hlX2hp dCAoRENBQ0hFICpkY2FjaGUsIENPUkVfQUREUiBhZGRyKTsKIApAQCAtMTc0 LDggKzExMiw2IEBAIHN0YXRpYyBpbnQgZGNhY2hlX3JlYWRfbGluZSAoRENB Q0hFICpkY2FjaGUsIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRiKTsKIAogc3Rh dGljIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRjYWNoZV9hbGxvYyAoRENBQ0hF ICpkY2FjaGUsIENPUkVfQUREUiBhZGRyKTsKIAotc3RhdGljIGludCBkY2Fj aGVfd3JpdGViYWNrIChEQ0FDSEUgKmRjYWNoZSk7Ci0KIHN0YXRpYyB2b2lk IGRjYWNoZV9pbmZvIChjaGFyICpleHAsIGludCB0dHkpOwogCiB2b2lkIF9p bml0aWFsaXplX2RjYWNoZSAodm9pZCk7CkBAIC0xOTIsMTM4ICsxMjgsNDgg QEAgc2hvd19kY2FjaGVfZW5hYmxlZF9wIChzdHJ1Y3QgdWlfZmlsZSAqZmls ZSwgaW50IGZyb21fdHR5LAogCiBEQ0FDSEUgKmxhc3RfY2FjaGU7CQkvKiBV c2VkIGJ5IGluZm8gZGNhY2hlICovCiAKLQogLyogRnJlZSBhbGwgdGhlIGRh dGEgY2FjaGUgYmxvY2tzLCB0aHVzIGRpc2NhcmRpbmcgYWxsIGNhY2hlZCBk YXRhLiAgKi8KIAogdm9pZAogZGNhY2hlX2ludmFsaWRhdGUgKERDQUNIRSAq ZGNhY2hlKQogewotICBpbnQgaTsKLSAgZGNhY2hlLT52YWxpZF9oZWFkID0g MDsKLSAgZGNhY2hlLT52YWxpZF90YWlsID0gMDsKKyAgc3RydWN0IGRjYWNo ZV9ibG9jayAqYmxvY2ssICpuZXh0OwogCi0gIGRjYWNoZS0+ZnJlZV9oZWFk ID0gMDsKLSAgZGNhY2hlLT5mcmVlX3RhaWwgPSAwOworICBibG9jayA9IGRj YWNoZS0+b2xkZXN0OwogCi0gIGZvciAoaSA9IDA7IGkgPCBEQ0FDSEVfU0la RTsgaSsrKQorICB3aGlsZSAoYmxvY2spCiAgICAgewotICAgICAgc3RydWN0 IGRjYWNoZV9ibG9jayAqZGIgPSBkY2FjaGUtPnRoZV9jYWNoZSArIGk7Cisg ICAgICBzcGxheV90cmVlX3JlbW92ZSAoZGNhY2hlLT50cmVlLCAoc3BsYXlf dHJlZV9rZXkpIGJsb2NrLT5hZGRyKTsKKyAgICAgIG5leHQgPSBibG9jay0+ bmV3ZXI7CiAKLSAgICAgIGlmICghZGNhY2hlLT5mcmVlX2hlYWQpCi0JZGNh Y2hlLT5mcmVlX2hlYWQgPSBkYjsKLSAgICAgIGVsc2UKLQlkY2FjaGUtPmZy ZWVfdGFpbC0+cCA9IGRiOwotICAgICAgZGNhY2hlLT5mcmVlX3RhaWwgPSBk YjsKLSAgICAgIGRiLT5wID0gMDsKKyAgICAgIGJsb2NrLT5uZXdlciA9IGRj YWNoZS0+ZnJlZWxpc3Q7CisgICAgICBkY2FjaGUtPmZyZWVsaXN0ID0gYmxv Y2s7CisKKyAgICAgIGJsb2NrID0gbmV4dDsKICAgICB9CiAKLSAgcmV0dXJu OworICBkY2FjaGUtPm9sZGVzdCA9IE5VTEw7CisgIGRjYWNoZS0+bmV3ZXN0 ID0gTlVMTDsKKyAgZGNhY2hlLT5zaXplID0gMDsKIH0KIAogLyogSWYgYWRk ciBpcyBwcmVzZW50IGluIHRoZSBkY2FjaGUsIHJldHVybiB0aGUgYWRkcmVz cyBvZiB0aGUgYmxvY2sKLSAgIGNvbnRhaW5pbmcgaXQuICovCisgICBjb250 YWluaW5nIGl0LiAgKi8KIAogc3RhdGljIHN0cnVjdCBkY2FjaGVfYmxvY2sg KgogZGNhY2hlX2hpdCAoRENBQ0hFICpkY2FjaGUsIENPUkVfQUREUiBhZGRy KQogewotICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpkYjsKLQotICAvKiBTZWFy Y2ggYWxsIGNhY2hlIGJsb2NrcyBmb3Igb25lIHRoYXQgaXMgYXQgdGhpcyBh ZGRyZXNzLiAgKi8KLSAgZGIgPSBkY2FjaGUtPnZhbGlkX2hlYWQ7Ci0KLSAg d2hpbGUgKGRiKQotICAgIHsKLSAgICAgIGlmIChNQVNLIChhZGRyKSA9PSBk Yi0+YWRkcikKLQl7Ci0JICBkYi0+cmVmcysrOwotCSAgcmV0dXJuIGRiOwot CX0KLSAgICAgIGRiID0gZGItPnA7Ci0gICAgfQorICBzcGxheV90cmVlX25v ZGUgbm9kZSA9IHNwbGF5X3RyZWVfbG9va3VwIChkY2FjaGUtPnRyZWUsCisJ CQkJCSAgICAoc3BsYXlfdHJlZV9rZXkpIE1BU0soYWRkcikpOwogCi0gIHJl dHVybiBOVUxMOworICBpZiAobm9kZSkKKyAgICByZXR1cm4gKHN0cnVjdCBk Y2FjaGVfYmxvY2sgKikgbm9kZS0+dmFsdWU7CisgIGVsc2UKKyAgICByZXR1 cm4gTlVMTDsKIH0KIAotLyogTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgaW4g dGhpcyBsaW5lIHdoaWNoIG5lZWRzIHRvCi0gICBiZSB3cml0dGVuIGlzLiAq LwogCi1zdGF0aWMgaW50Ci1kY2FjaGVfd3JpdGVfbGluZSAoRENBQ0hFICpk Y2FjaGUsIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRiKQotewotICBDT1JFX0FE RFIgbWVtYWRkcjsKLSAgZ2RiX2J5dGUgKm15YWRkcjsKLSAgaW50IGxlbjsK LSAgaW50IHJlczsKLSAgaW50IHJlZ19sZW47Ci0gIHN0cnVjdCBtZW1fcmVn aW9uICpyZWdpb247Ci0KLSAgaWYgKCFkYi0+YW55ZGlydHkpCi0gICAgcmV0 dXJuIDE7Ci0KLSAgbGVuID0gTElORV9TSVpFOwotICBtZW1hZGRyID0gZGIt PmFkZHI7Ci0gIG15YWRkciAgPSBkYi0+ZGF0YTsKLQotICB3aGlsZSAobGVu ID4gMCkKLSAgICB7Ci0gICAgICBpbnQgczsKLSAgICAgIGludCBlOwotICAg ICAgaW50IGRpcnR5X2xlbjsKLSAgICAgIAotICAgICAgcmVnaW9uID0gbG9v a3VwX21lbV9yZWdpb24obWVtYWRkcik7Ci0gICAgICBpZiAobWVtYWRkciAr IGxlbiA8IHJlZ2lvbi0+aGkpCi0JcmVnX2xlbiA9IGxlbjsKLSAgICAgIGVs c2UKLQlyZWdfbGVuID0gcmVnaW9uLT5oaSAtIG1lbWFkZHI7Ci0KLSAgICAg IGlmICghcmVnaW9uLT5hdHRyaWIuY2FjaGUgfHwgcmVnaW9uLT5hdHRyaWIu bW9kZSA9PSBNRU1fUk8pCi0JewotCSAgbWVtYWRkciArPSByZWdfbGVuOwot CSAgbXlhZGRyICArPSByZWdfbGVuOwotCSAgbGVuICAgICAtPSByZWdfbGVu OwotCSAgY29udGludWU7Ci0JfQotCi0gICAgICB3aGlsZSAocmVnX2xlbiA+ IDApCi0JewotCSAgcyA9IFhGT1JNKG1lbWFkZHIpOwotCSAgd2hpbGUgKHJl Z19sZW4gPiAwKSB7Ci0JICAgIGlmIChkYi0+c3RhdGVbc10gPT0gRU5UUllf RElSVFkpCi0JICAgICAgYnJlYWs7Ci0JICAgIHMrKzsKLQkgICAgcmVnX2xl bi0tOwotCi0JICAgIG1lbWFkZHIrKzsKLQkgICAgbXlhZGRyKys7Ci0JICAg IGxlbi0tOwotCSAgfQotCi0JICBlID0gczsKLQkgIHdoaWxlIChyZWdfbGVu ID4gMCkgewotCSAgICBpZiAoZGItPnN0YXRlW2VdICE9IEVOVFJZX0RJUlRZ KQotCSAgICAgIGJyZWFrOwotCSAgICBlKys7Ci0JICAgIHJlZ19sZW4tLTsK LQkgIH0KLQotCSAgZGlydHlfbGVuID0gZSAtIHM7Ci0JICByZXMgPSB0YXJn ZXRfd3JpdGUgKCZjdXJyZW50X3RhcmdldCwgVEFSR0VUX09CSkVDVF9SQVdf TUVNT1JZLAotCQkJICAgICAgTlVMTCwgbXlhZGRyLCBtZW1hZGRyLCBkaXJ0 eV9sZW4pOwotCSAgaWYgKHJlcyA8IGRpcnR5X2xlbikKLQkgICAgcmV0dXJu IDA7Ci0KLQkgIG1lbXNldCAoJmRiLT5zdGF0ZVtYRk9STShtZW1hZGRyKV0s IEVOVFJZX1ZBTElELCByZXMpOwotCSAgbWVtYWRkciArPSByZXM7Ci0JICBt eWFkZHIgKz0gcmVzOwotCSAgbGVuIC09IHJlczsKLQl9Ci0gICAgfQotCi0g IGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIHJldHVybiAxOwotfQotCi0vKiBSZWFk IGNhY2hlIGxpbmUgKi8KKy8qIEZpbGwgYSBjYWNoZSBsaW5lIGZyb20gdGFy Z2V0IG1lbW9yeS4gICovCiBzdGF0aWMgaW50CiBkY2FjaGVfcmVhZF9saW5l IChEQ0FDSEUgKmRjYWNoZSwgc3RydWN0IGRjYWNoZV9ibG9jayAqZGIpCiB7 CkBAIC0zMzQsMjcgKzE4MCwyMiBAQCBkY2FjaGVfcmVhZF9saW5lIChEQ0FD SEUgKmRjYWNoZSwgc3RydWN0IGRjYWNoZV9ibG9jayAqZGIpCiAgIGludCBy ZWdfbGVuOwogICBzdHJ1Y3QgbWVtX3JlZ2lvbiAqcmVnaW9uOwogCi0gIC8q IElmIHRoZXJlIGFyZSBhbnkgZGlydHkgYnl0ZXMgaW4gdGhlIGxpbmUsIGl0 IG11c3QgYmUgd3JpdHRlbgotICAgICBiZWZvcmUgYSBuZXcgbGluZSBjYW4g YmUgcmVhZCAqLwotICBpZiAoZGItPmFueWRpcnR5KQotICAgIHsKLSAgICAg IGlmICghZGNhY2hlX3dyaXRlX2xpbmUgKGRjYWNoZSwgZGIpKQotCXJldHVy biAwOwotICAgIH0KLSAgCiAgIGxlbiA9IExJTkVfU0laRTsKICAgbWVtYWRk ciA9IGRiLT5hZGRyOwogICBteWFkZHIgID0gZGItPmRhdGE7CiAKICAgd2hp bGUgKGxlbiA+IDApCiAgICAgewotICAgICAgcmVnaW9uID0gbG9va3VwX21l bV9yZWdpb24obWVtYWRkcik7Ci0gICAgICBpZiAobWVtYWRkciArIGxlbiA8 IHJlZ2lvbi0+aGkpCisgICAgICAvKiBEb24ndCBvdmVycnVuIGlmIHRoaXMg YmxvY2sgaXMgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgcmVnaW9uLiAgKi8K KyAgICAgIHJlZ2lvbiA9IGxvb2t1cF9tZW1fcmVnaW9uIChtZW1hZGRyKTsK KyAgICAgIGlmIChyZWdpb24tPmhpID09IDAgfHwgbWVtYWRkciArIGxlbiA8 IHJlZ2lvbi0+aGkpCiAJcmVnX2xlbiA9IGxlbjsKICAgICAgIGVsc2UKIAly ZWdfbGVuID0gcmVnaW9uLT5oaSAtIG1lbWFkZHI7CiAKLSAgICAgIGlmICgh cmVnaW9uLT5hdHRyaWIuY2FjaGUgfHwgcmVnaW9uLT5hdHRyaWIubW9kZSA9 PSBNRU1fV08pCisgICAgICAvKiBTa2lwIG5vbi1yZWFkYWJsZSByZWdpb25z LiAgVGhlIGNhY2hlIGF0dHJpYnV0ZSBjYW4gYmUgaWdub3JlZCwKKyAgICAg ICAgIHNpbmNlIHdlIG1heSBiZSBsb2FkaW5nIHRoaXMgZm9yIGEgc3RhY2sg YWNjZXNzLiAgKi8KKyAgICAgIGlmIChyZWdpb24tPmF0dHJpYi5tb2RlID09 IE1FTV9XTykKIAl7CiAJICBtZW1hZGRyICs9IHJlZ19sZW47CiAJICBteWFk ZHIgICs9IHJlZ19sZW47CkBAIC0zNzIsOSArMjEzLDYgQEAgZGNhY2hlX3Jl YWRfbGluZSAoRENBQ0hFICpkY2FjaGUsIHN0cnVjdCBkY2FjaGVfYmxvY2sg KmRiKQogICAgICAgbGVuIC09IHJlczsKICAgICB9CiAKLSAgbWVtc2V0IChk Yi0+c3RhdGUsIEVOVFJZX1ZBTElELCBzaXplb2YgKGRiLT5kYXRhKSk7Ci0g IGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIAogICByZXR1cm4gMTsKIH0KIApAQCAt Mzg2LDYxICsyMjQsNDcgQEAgZGNhY2hlX2FsbG9jIChEQ0FDSEUgKmRjYWNo ZSwgQ09SRV9BRERSIGFkZHIpCiB7CiAgIHN0cnVjdCBkY2FjaGVfYmxvY2sg KmRiOwogCi0gIC8qIFRha2Ugc29tZXRoaW5nIGZyb20gdGhlIGZyZWUgbGlz dCAqLwotICBkYiA9IGRjYWNoZS0+ZnJlZV9oZWFkOwotICBpZiAoZGIpCisg IGlmIChkY2FjaGUtPnNpemUgPj0gRENBQ0hFX1NJWkUpCiAgICAgewotICAg ICAgZGNhY2hlLT5mcmVlX2hlYWQgPSBkYi0+cDsKKyAgICAgIC8qIEV2aWN0 IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGxpbmUuICAqLworICAgICAgZGIg PSBkY2FjaGUtPm9sZGVzdDsKKyAgICAgIGRjYWNoZS0+b2xkZXN0ID0gZGIt Pm5ld2VyOworCisgICAgICBzcGxheV90cmVlX3JlbW92ZSAoZGNhY2hlLT50 cmVlLCAoc3BsYXlfdHJlZV9rZXkpIGRiLT5hZGRyKTsKICAgICB9CiAgIGVs c2UKICAgICB7Ci0gICAgICAvKiBOb3RoaW5nIGxlZnQgb24gZnJlZSBsaXN0 LCBzbyBncmFiIG9uZSBmcm9tIHRoZSB2YWxpZCBsaXN0ICovCi0gICAgICBk YiA9IGRjYWNoZS0+dmFsaWRfaGVhZDsKKyAgICAgIGRiID0gZGNhY2hlLT5m cmVlbGlzdDsKKyAgICAgIGlmIChkYikKKyAgICAgICAgZGNhY2hlLT5mcmVl bGlzdCA9IGRiLT5uZXdlcjsKKyAgICAgIGVsc2UKKwlkYiA9IHhtYWxsb2Mg KHNpemVvZiAoc3RydWN0IGRjYWNoZV9ibG9jaykpOwogCi0gICAgICBpZiAo IWRjYWNoZV93cml0ZV9saW5lIChkY2FjaGUsIGRiKSkKLQlyZXR1cm4gTlVM TDsKLSAgICAgIAotICAgICAgZGNhY2hlLT52YWxpZF9oZWFkID0gZGItPnA7 CisgICAgICBkY2FjaGUtPnNpemUrKzsKICAgICB9CiAKICAgZGItPmFkZHIg PSBNQVNLKGFkZHIpOworICBkYi0+bmV3ZXIgPSBOVUxMOwogICBkYi0+cmVm cyA9IDA7Ci0gIGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIG1lbXNldCAoZGItPnN0 YXRlLCBFTlRSWV9JTlZBTElELCBzaXplb2YgKGRiLT5kYXRhKSk7CiAKLSAg LyogYXBwZW5kIHRoaXMgbGluZSB0byBlbmQgb2YgdmFsaWQgbGlzdCAqLwot ICBpZiAoIWRjYWNoZS0+dmFsaWRfaGVhZCkKLSAgICBkY2FjaGUtPnZhbGlk X2hlYWQgPSBkYjsKLSAgZWxzZQotICAgIGRjYWNoZS0+dmFsaWRfdGFpbC0+ cCA9IGRiOwotICBkY2FjaGUtPnZhbGlkX3RhaWwgPSBkYjsKLSAgZGItPnAg PSAwOworICBpZiAoZGNhY2hlLT5uZXdlc3QpCisgICAgZGNhY2hlLT5uZXdl c3QtPm5ld2VyID0gZGI7CiAKLSAgcmV0dXJuIGRiOwotfQorICBkY2FjaGUt Pm5ld2VzdCA9IGRiOwogCi0vKiBXcml0ZWJhY2sgYW55IGRpcnR5IGxpbmVz LiAqLwotc3RhdGljIGludAotZGNhY2hlX3dyaXRlYmFjayAoRENBQ0hFICpk Y2FjaGUpCi17Ci0gIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRiOworICBpZiAo IWRjYWNoZS0+b2xkZXN0KQorICAgIGRjYWNoZS0+b2xkZXN0ID0gZGI7CiAK LSAgZGIgPSBkY2FjaGUtPnZhbGlkX2hlYWQ7CisgIHNwbGF5X3RyZWVfaW5z ZXJ0IChkY2FjaGUtPnRyZWUsIChzcGxheV90cmVlX2tleSkgZGItPmFkZHIs IChzcGxheV90cmVlX3ZhbHVlKSBkYik7CiAKLSAgd2hpbGUgKGRiKQotICAg IHsKLSAgICAgIGlmICghZGNhY2hlX3dyaXRlX2xpbmUgKGRjYWNoZSwgZGIp KQotCXJldHVybiAwOwotICAgICAgZGIgPSBkYi0+cDsKLSAgICB9Ci0gIHJl dHVybiAxOworICByZXR1cm4gZGI7CiB9CiAKIAogLyogVXNpbmcgdGhlIGRh dGEgY2FjaGUgRENBQ0hFIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGJ5 dGUgYXQKICAgIGFkZHJlc3MgQUREUiBpbiB0aGUgcmVtb3RlIG1hY2hpbmUu ICAKIAotICAgUmV0dXJucyAwIG9uIGVycm9yLiAqLworICAgUmV0dXJucyAw IG9uIGVycm9yLiAgKi8KIAogc3RhdGljIGludAogZGNhY2hlX3BlZWtfYnl0 ZSAoRENBQ0hFICpkY2FjaGUsIENPUkVfQUREUiBhZGRyLCBnZGJfYnl0ZSAq cHRyKQpAQCAtNDUwLDEzICsyNzQsOCBAQCBkY2FjaGVfcGVla19ieXRlIChE Q0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIGFkZHIsIGdkYl9ieXRlICpwdHIp CiAgIGlmICghZGIpCiAgICAgewogICAgICAgZGIgPSBkY2FjaGVfYWxsb2Mg KGRjYWNoZSwgYWRkcik7Ci0gICAgICBpZiAoIWRiKQotCXJldHVybiAwOwot ICAgIH0KLSAgCi0gIGlmIChkYi0+c3RhdGVbWEZPUk0gKGFkZHIpXSA9PSBF TlRSWV9JTlZBTElEKQotICAgIHsKLSAgICAgIGlmICghZGNhY2hlX3JlYWRf bGluZShkY2FjaGUsIGRiKSkKKworICAgICAgaWYgKCFkY2FjaGVfcmVhZF9s aW5lIChkY2FjaGUsIGRiKSkKICAgICAgICAgIHJldHVybiAwOwogICAgIH0K IApAQCAtNDY2LDUzICsyODUsNzAgQEAgZGNhY2hlX3BlZWtfYnl0ZSAoRENB Q0hFICpkY2FjaGUsIENPUkVfQUREUiBhZGRyLCBnZGJfYnl0ZSAqcHRyKQog CiAKIC8qIFdyaXRlIHRoZSBieXRlIGF0IFBUUiBpbnRvIEFERFIgaW4gdGhl IGRhdGEgY2FjaGUuCi0gICBSZXR1cm4gemVybyBvbiB3cml0ZSBlcnJvci4K LSAqLworCisgICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbHNv IHByb21wdGx5IHdyaXRpbmcgdGhlIGRhdGEKKyAgIHRocm91Z2ggdG8gdGFy Z2V0IG1lbW9yeS4KKworICAgSWYgYWRkciBpcyBub3QgaW4gY2FjaGUsIHRo aXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nOyB3cml0aW5nIHRvCisgICBhbiBh cmVhIG9mIG1lbW9yeSB3aGljaCB3YXNuJ3QgcHJlc2VudCBpbiB0aGUgY2Fj aGUgZG9lc24ndCBjYXVzZQorICAgaXQgdG8gYmUgbG9hZGVkIGluLgorCisg ICBBbHdheXMgcmV0dXJuIDEgdG8gc2ltcGxpZnkgZGNhY2hlX3hmZXJfbWVt b3J5LiAgKi8KIAogc3RhdGljIGludAogZGNhY2hlX3Bva2VfYnl0ZSAoRENB Q0hFICpkY2FjaGUsIENPUkVfQUREUiBhZGRyLCBnZGJfYnl0ZSAqcHRyKQog ewogICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpkYiA9IGRjYWNoZV9oaXQgKGRj YWNoZSwgYWRkcik7CiAKLSAgaWYgKCFkYikKLSAgICB7Ci0gICAgICBkYiA9 IGRjYWNoZV9hbGxvYyAoZGNhY2hlLCBhZGRyKTsKLSAgICAgIGlmICghZGIp Ci0JcmV0dXJuIDA7Ci0gICAgfQorICBpZiAoZGIpCisgICAgZGItPmRhdGFb WEZPUk0gKGFkZHIpXSA9ICpwdHI7CiAKLSAgZGItPmRhdGFbWEZPUk0gKGFk ZHIpXSA9ICpwdHI7Ci0gIGRiLT5zdGF0ZVtYRk9STSAoYWRkcildID0gRU5U UllfRElSVFk7Ci0gIGRiLT5hbnlkaXJ0eSA9IDE7CiAgIHJldHVybiAxOwog fQogCisKK3N0YXRpYyBpbnQKK2RjYWNoZV9zcGxheV90cmVlX2NvbXBhcmUg KHNwbGF5X3RyZWVfa2V5IGEsIHNwbGF5X3RyZWVfa2V5IGIpCit7CisgIGlm IChhID4gYikKKyAgICByZXR1cm4gMTsKKyAgZWxzZSBpZiAoYSA9PSBiKQor ICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIC0xOworfQorCisK IC8qIEluaXRpYWxpemUgdGhlIGRhdGEgY2FjaGUuICAqLwogRENBQ0hFICoK IGRjYWNoZV9pbml0ICh2b2lkKQogewotICBpbnQgY3NpemUgPSBzaXplb2Yg KHN0cnVjdCBkY2FjaGVfYmxvY2spICogRENBQ0hFX1NJWkU7CiAgIERDQUNI RSAqZGNhY2hlOworICBpbnQgaTsKIAogICBkY2FjaGUgPSAoRENBQ0hFICop IHhtYWxsb2MgKHNpemVvZiAoKmRjYWNoZSkpOwogCi0gIGRjYWNoZS0+dGhl X2NhY2hlID0gKHN0cnVjdCBkY2FjaGVfYmxvY2sgKikgeG1hbGxvYyAoY3Np emUpOwotICBtZW1zZXQgKGRjYWNoZS0+dGhlX2NhY2hlLCAwLCBjc2l6ZSk7 Ci0KLSAgZGNhY2hlX2ludmFsaWRhdGUgKGRjYWNoZSk7CisgIGRjYWNoZS0+ dHJlZSA9IHNwbGF5X3RyZWVfbmV3IChkY2FjaGVfc3BsYXlfdHJlZV9jb21w YXJlLAorCQkJCSBOVUxMLAorCQkJCSBOVUxMKTsKIAorICBkY2FjaGUtPm9s ZGVzdCA9IE5VTEw7CisgIGRjYWNoZS0+bmV3ZXN0ID0gTlVMTDsKKyAgZGNh Y2hlLT5mcmVlbGlzdCA9IE5VTEw7CisgIGRjYWNoZS0+c2l6ZSA9IDA7CiAg IGxhc3RfY2FjaGUgPSBkY2FjaGU7CisKICAgcmV0dXJuIGRjYWNoZTsKIH0K IAotLyogRnJlZSBhIGRhdGEgY2FjaGUgKi8KKy8qIEZyZWUgYSBkYXRhIGNh Y2hlLiAgKi8KIHZvaWQKIGRjYWNoZV9mcmVlIChEQ0FDSEUgKmRjYWNoZSkK IHsKICAgaWYgKGxhc3RfY2FjaGUgPT0gZGNhY2hlKQogICAgIGxhc3RfY2Fj aGUgPSBOVUxMOwogCi0gIHhmcmVlIChkY2FjaGUtPnRoZV9jYWNoZSk7Cisg IHNwbGF5X3RyZWVfZGVsZXRlKGRjYWNoZS0+dHJlZSk7CiAgIHhmcmVlIChk Y2FjaGUpOwogfQogCkBAIC01MjAsNjYgKzM1NiwxNTEgQEAgZGNhY2hlX2Zy ZWUgKERDQUNIRSAqZGNhY2hlKQogICAgdG8gb3IgZnJvbSBkZWJ1Z2dlciBh ZGRyZXNzIE1ZQUREUi4gIFdyaXRlIHRvIGluZmVyaW9yIGlmIFNIT1VMRF9X UklURSBpcwogICAgbm9uemVyby4gCiAKLSAgIFJldHVybnMgbGVuZ3RoIG9m IGRhdGEgd3JpdHRlbiBvciByZWFkOyAwIGZvciBlcnJvci4gIAotCi0gICBU aGlzIHJvdXRpbmUgaXMgaW5kZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IHJlbW90 ZV94ZmVyXyBmdW5jdGlvbnMuICovCisgICBSZXR1cm5zIGxlbmd0aCBvZiBk YXRhIHdyaXR0ZW4gb3IgcmVhZDsgMCBmb3IgZXJyb3IuICAqLwogCiBpbnQK LWRjYWNoZV94ZmVyX21lbW9yeSAoRENBQ0hFICpkY2FjaGUsIENPUkVfQURE UiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLAorZGNhY2hlX3hmZXJfbWVt b3J5IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBEQ0FDSEUgKmRjYWNoZSwK KwkJICAgIENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLAog CQkgICAgaW50IGxlbiwgaW50IHNob3VsZF93cml0ZSkKIHsKICAgaW50IGk7 CisgIGludCByZXM7CiAgIGludCAoKnhmdW5jKSAoRENBQ0hFICpkY2FjaGUs IENPUkVfQUREUiBhZGRyLCBnZGJfYnl0ZSAqcHRyKTsKICAgeGZ1bmMgPSBz aG91bGRfd3JpdGUgPyBkY2FjaGVfcG9rZV9ieXRlIDogZGNhY2hlX3BlZWtf Ynl0ZTsKIAorICAvKiBEbyB3cml0ZS10aHJvdWdoIGZpcnN0LCBzbyB0aGF0 IGlmIGl0IGZhaWxzLCB3ZSBkb24ndCB3cml0ZSB0bworICAgICB0aGUgY2Fj aGUgYXQgYWxsLiAgKi8KKworICBpZiAoc2hvdWxkX3dyaXRlKQorICAgIHsK KyAgICAgIHJlcyA9IHRhcmdldF93cml0ZSAob3BzLCBUQVJHRVRfT0JKRUNU X1JBV19NRU1PUlksCisJCQkgIE5VTEwsIG15YWRkciwgbWVtYWRkciwgbGVu KTsKKyAgICAgIGlmIChyZXMgPCBsZW4pCisJcmV0dXJuIDA7CisgICAgfQor ICAgICAgCiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICB7CiAg ICAgICBpZiAoIXhmdW5jIChkY2FjaGUsIG1lbWFkZHIgKyBpLCBteWFkZHIg KyBpKSkKIAlyZXR1cm4gMDsKICAgICB9CisgICAgCisgIHJldHVybiBsZW47 Cit9CiAKLSAgLyogRklYTUU6IFRoZXJlIG1heSBiZSBzb21lIGJlbmVmaXQg ZnJvbSBtb3ZpbmcgdGhlIGNhY2hlIHdyaXRlYmFjawotICAgICB0byBhIGhp Z2hlciBsYXllciwgYXMgaXQgY291bGQgb2NjdXIgYWZ0ZXIgYSBzZXF1ZW5j ZSBvZiBzbWFsbGVyCi0gICAgIHdyaXRlcyBoYXZlIGJlZW4gY29tcGxldGVk IChhcyB3aGVuIGEgc3RhY2sgZnJhbWUgaXMgY29uc3RydWN0ZWQKLSAgICAg Zm9yIGFuIGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwpLiAgTm90ZSB0aGF0IG9u bHkgbW92aW5nIGl0IHVwIG9uZQotICAgICBsZXZlbCB0byB0YXJnZXRfeGZl cl9tZW1vcnkoKSAoYWxzbyB0YXJnZXRfeGZlcl9tZW1vcnlfcGFydGlhbCgp KQotICAgICBpcyBub3Qgc3VmZmljZW50LCBzaW5jZSB3ZSB3YW50IHRvIGNv YWxlc2NlIG1lbW9yeSB0cmFuc2ZlcnMgdGhhdAotICAgICBhcmUgImxvZ2lj YWxseSIgY29ubmVjdGVkIGJ1dCBub3QgYWN0dWFsbHkgYSBzaW5nbGUgY2Fs bCB0byBvbmUKLSAgICAgb2YgdGhlIG1lbW9yeSB0cmFuc2ZlciBmdW5jdGlv bnMuICovCisvKiBGSVhNRTogVGhlcmUgd291bGQgYmUgc29tZSBiZW5lZml0 IHRvIG1ha2luZyB0aGUgY2FjaGUgd3JpdGUtYmFjayBhbmQKKyAgIG1vdmlu ZyB0aGUgd3JpdGViYWNrIG9wZXJhdGlvbiB0byBhIGhpZ2hlciBsYXllciwg YXMgaXQgY291bGQgb2NjdXIKKyAgIGFmdGVyIGEgc2VxdWVuY2Ugb2Ygc21h bGxlciB3cml0ZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZCAoYXMgd2hlbiBhIHN0 YWNrCisgICBmcmFtZSBpcyBjb25zdHJ1Y3RlZCBmb3IgYW4gaW5mZXJpb3Ig ZnVuY3Rpb24gY2FsbCkuICBOb3RlIHRoYXQgb25seQorICAgbW92aW5nIGl0 IHVwIG9uZSBsZXZlbCB0byB0YXJnZXRfeGZlcl9tZW1vcnlbX3BhcnRpYWxd KCkgaXMgbm90CisgICBzdWZmaWNpZW50IHNpbmNlIHdlIHdhbnQgdG8gY29h bGVzY2UgbWVtb3J5IHRyYW5zZmVycyB0aGF0IGFyZQorICAgImxvZ2ljYWxs eSIgY29ubmVjdGVkIGJ1dCBub3QgYWN0dWFsbHkgYSBzaW5nbGUgY2FsbCB0 byBvbmUgb2YgdGhlCisgICBtZW1vcnkgdHJhbnNmZXIgZnVuY3Rpb25zLiAg Ki8KIAotICBpZiAoc2hvdWxkX3dyaXRlKQotICAgIGRjYWNoZV93cml0ZWJh Y2sgKGRjYWNoZSk7CisvKiBKdXN0IHVwZGF0ZSBhbnkgY2FjaGUgbGluZXMg d2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudC4gIFRoaXMgaXMgY2FsbGVkCisg ICBieSBtZW1vcnlfeGZlcl9wYXJ0aWFsIGluIGNhc2VzIHdoZXJlIHRoZSBh Y2Nlc3Mgd291bGQgb3RoZXJ3aXNlIG5vdCBnbworICAgdGhyb3VnaCB0aGUg Y2FjaGUuICAqLworCit2b2lkCitkY2FjaGVfdXBkYXRlIChEQ0FDSEUgKmRj YWNoZSwgQ09SRV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsIGlu dCBsZW4pCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCisgICAgZGNhY2hlX3Bva2VfYnl0ZSAoZGNhY2hlLCBtZW1hZGRyICsg aSwgbXlhZGRyICsgaSk7Cit9CisKK3N0YXRpYyB2b2lkCitkY2FjaGVfcHJp bnRfbGluZSAoaW50IGluZGV4KQoreworICBzcGxheV90cmVlX25vZGUgbjsK KyAgc3RydWN0IGRjYWNoZV9ibG9jayAqcDsKKyAgaW50IGo7CisKKyAgaWYg KCFsYXN0X2NhY2hlKQorICAgIHsKKyAgICAgIHByaW50Zl9maWx0ZXJlZCAo XygiTm8gZGF0YSBjYWNoZSBhdmFpbGFibGUuXG4iKSk7CisgICAgICByZXR1 cm47CisgICAgfQorCisgIG4gPSBzcGxheV90cmVlX21pbihsYXN0X2NhY2hl LT50cmVlKTsKKworICB3aGlsZSAoaW5kZXggPiAwKQorICAgIHsKKyAgICAg IGlmICghbikgYnJlYWs7CisgICAgICBuID0gc3BsYXlfdHJlZV9zdWNjZXNz b3IgKGxhc3RfY2FjaGUtPnRyZWUsIG4tPmtleSk7CisgICAgICBpbmRleC0t OworICAgIH0KKworICBpZiAoIW4pCisgICAgeworICAgICAgcHJpbnRmX2Zp bHRlcmVkIChfKCJObyBzdWNoIGNhY2hlIGxpbmUgZXhpc3RzLlxuIikpOwor ICAgICAgcmV0dXJuOworICAgIH0KICAgICAKLSAgcmV0dXJuIGxlbjsKKyAg cCA9IChzdHJ1Y3QgZGNhY2hlX2Jsb2NrICopIG4tPnZhbHVlOworCisgIHBy aW50Zl9maWx0ZXJlZCAoXygiTGluZSAlZDogYWRkcmVzcyAlbHggWyVkIGhp dHNdXG4iKSwKKwkJICBpbmRleCwgcC0+YWRkciwgcC0+cmVmcyk7CisKKyAg Zm9yIChqID0gMDsgaiA8IExJTkVfU0laRTsgaisrKQorICAgIHsKKyAgICAg IHByaW50Zl9maWx0ZXJlZCAoIiUwMnggIiwgcC0+ZGF0YVtqXSk7CisKKyAg ICAgIC8qIFByaW50IGEgbmV3bGluZSBldmVyeSAxNiBieXRlcyAoNDggY2hh cmFjdGVycykgKi8KKyAgICAgIGlmICgoaiAlIDE2ID09IDE1KSAmJiAoaiAh PSBMSU5FX1NJWkUgLSAxKSkKKwlwcmludGZfZmlsdGVyZWQgKCJcbiIpOwor ICAgIH0KKyAgcHJpbnRmX2ZpbHRlcmVkICgiXG4iKTsKIH0KIAogc3RhdGlj IHZvaWQKIGRjYWNoZV9pbmZvIChjaGFyICpleHAsIGludCB0dHkpCiB7CiAg IHN0cnVjdCBkY2FjaGVfYmxvY2sgKnA7CisgIHNwbGF5X3RyZWVfbm9kZSBu OworICBpbnQgaSwgcmVmY291bnQsIGxpbmVubzsKKworICBpZiAoZXhwKQor ICAgIHsKKyAgICAgIGNoYXIgKmxpbmVzdGFydDsKKyAgICAgIGkgPSBzdHJ0 b2wgKGV4cCwgJmxpbmVzdGFydCwgMTApOworICAgICAgaWYgKGxpbmVzdGFy dCA9PSBleHAgfHwgaSA8IDApCisJeworCSAgcHJpbnRmX2ZpbHRlcmVkIChf KCJVc2FnZTogaW5mbyBkY2FjaGUgW2xpbmVudW1iZXJdXG4iKSk7CisgICAg ICAgICAgcmV0dXJuOworCX0KIAotICBwcmludGZfZmlsdGVyZWQgKF8oIkRj YWNoZSBsaW5lIHdpZHRoICVkLCBkZXB0aCAlZFxuIiksCisgICAgICBkY2Fj aGVfcHJpbnRfbGluZSAoaSk7CisgICAgICByZXR1cm47CisgICAgfQorCisg IHByaW50Zl9maWx0ZXJlZCAoXygiRGNhY2hlIGxpbmUgd2lkdGggJWQsIG1h eGltdW0gc2l6ZSAlZFxuIiksCiAJCSAgIExJTkVfU0laRSwgRENBQ0hFX1NJ WkUpOwogCi0gIGlmIChsYXN0X2NhY2hlKQorICBpZiAoIWxhc3RfY2FjaGUp CiAgICAgewotICAgICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJDYWNoZSBzdGF0 ZTpcbiIpKTsKKyAgICAgIHByaW50Zl9maWx0ZXJlZCAoXygiTm8gZGF0YSBj YWNoZSBhdmFpbGFibGUuXG4iKSk7CisgICAgICByZXR1cm47CisgICAgfQog Ci0gICAgICBmb3IgKHAgPSBsYXN0X2NhY2hlLT52YWxpZF9oZWFkOyBwOyBw ID0gcC0+cCkKLQl7Ci0JICBpbnQgajsKLQkgIHByaW50Zl9maWx0ZXJlZCAo XygiTGluZSBhdCAlcywgcmVmZXJlbmNlZCAlZCB0aW1lc1xuIiksCi0JCQkg ICBwYWRkcmVzcyAodGFyZ2V0X2dkYmFyY2gsIHAtPmFkZHIpLCBwLT5yZWZz KTsKKyAgcmVmY291bnQgPSAwOwogCi0JICBmb3IgKGogPSAwOyBqIDwgTElO RV9TSVpFOyBqKyspCi0JICAgIHByaW50Zl9maWx0ZXJlZCAoIiUwMngiLCBw LT5kYXRhW2pdICYgMHhGRik7Ci0JICBwcmludGZfZmlsdGVyZWQgKCgiXG4i KSk7CisgIG4gPSBzcGxheV90cmVlX21pbihsYXN0X2NhY2hlLT50cmVlKTsK KyAgaSA9IDA7CiAKLQkgIGZvciAoaiA9IDA7IGogPCBMSU5FX1NJWkU7IGor KykKLQkgICAgcHJpbnRmX2ZpbHRlcmVkICgiICVjIiwgc3RhdGVfY2hhcnNb cC0+c3RhdGVbal1dKTsKLQkgIHByaW50Zl9maWx0ZXJlZCAoIlxuIik7Ci0J fQorICB3aGlsZSAobikKKyAgICB7CisgICAgICBwID0gKHN0cnVjdCBkY2Fj aGVfYmxvY2sgKikgbi0+dmFsdWU7CisKKyAgICAgIHByaW50Zl9maWx0ZXJl ZCAoXygiTGluZSAlZDogYWRkcmVzcyAlbHggWyVkIGhpdHNdXG4iKSwKKwkJ ICAgICAgIGksIHAtPmFkZHIsIHAtPnJlZnMpOworICAgICAgaSsrOworICAg ICAgcmVmY291bnQgKz0gcC0+cmVmczsKKworICAgICAgbiA9IHNwbGF5X3Ry ZWVfc3VjY2Vzc29yIChsYXN0X2NhY2hlLT50cmVlLCBuLT5rZXkpOwogICAg IH0KKworICBwcmludGZfZmlsdGVyZWQgKF8oIkNhY2hlIHN0YXRlOiAlZCBh Y3RpdmUgbGluZXMsICVkIGhpdHNcbiIpLCBpLCByZWZjb3VudCk7CiB9CiAK IHZvaWQKQEAgLTYwMCw5ICs1MjEsNSBAQCB2b2xhdGlsZSByZWdpc3RlcnMg YXJlIGluIHVzZS4gIEJ5IGRlZmF1bHQsIHRoaXMgb3B0aW9uIGlzIG9mZi4i KSwKIAogICBhZGRfaW5mbyAoImRjYWNoZSIsIGRjYWNoZV9pbmZvLAogCSAg ICBfKCJcCi1QcmludCBpbmZvcm1hdGlvbiBvbiB0aGUgZGNhY2hlIHBlcmZv cm1hbmNlLlxuXAotVGhlIHN0YXRlIG9mIGVhY2ggY2FjaGVkIGJ5dGUgaXMg cmVwcmVzZW50ZWQgYnkgYSBsZXR0ZXI6XG5cCi0gIEkgPSBpbnZhbGlkXG5c Ci0gIEQgPSBkaXJ0eVxuXAotICBWID0gdmFsaWQiKSk7CitQcmludCBpbmZv cm1hdGlvbiBvbiB0aGUgZGNhY2hlIHBlcmZvcm1hbmNlLiIpKTsKIH0KZGlm ZiAtLWdpdCBhL2dkYi9kY2FjaGUuaCBiL2dkYi9kY2FjaGUuaAppbmRleCAz MjA3N2E2Li5mZGMyMmM1IDEwMDY0NAotLS0gYS9nZGIvZGNhY2hlLmgKKysr IGIvZ2RiL2RjYWNoZS5oCkBAIC0zNSw3ICszNSwxMyBAQCB2b2lkIGRjYWNo ZV9mcmVlIChEQ0FDSEUgKik7CiAKIC8qIFNpbXBsZSB0byBjYWxsIGZyb20g PHJlbW90ZT5feGZlcl9tZW1vcnkgKi8KIAotaW50IGRjYWNoZV94ZmVyX21l bW9yeSAoRENBQ0hFICpjYWNoZSwgQ09SRV9BRERSIG1lbSwgZ2RiX2J5dGUg Km15LAotCQkJaW50IGxlbiwgaW50IHNob3VsZF93cml0ZSk7CitpbnQgZGNh Y2hlX3hmZXJfbWVtb3J5IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBEQ0FD SEUgKmNhY2hlLCBDT1JFX0FERFIgbWVtLAorCQkJZ2RiX2J5dGUgKm15LCBp bnQgbGVuLCBpbnQgc2hvdWxkX3dyaXRlKTsKKwordm9pZCBkY2FjaGVfdXBk YXRlIChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIG1lbWFkZHIsIGdkYl9i eXRlICpteWFkZHIsCisJCSAgICBpbnQgbGVuKTsKKworLyogU2hvdWxkIHdl IHVzZSB0aGUgZGNhY2hlIGZvciBzdGFjayBhY2Nlc3M/ICovCitleHRlcm4g aW50IGRjYWNoZV9zdGFja19lbmFibGVkX3A7CiAKICNlbmRpZiAvKiBEQ0FD SEVfSCAqLwpkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5jIGIvZ2RiL3Rhcmdl dC5jCmluZGV4IGUxYzFlMGIuLjA2MjNiYzMgMTAwNjQ0Ci0tLSBhL2dkYi90 YXJnZXQuYworKysgYi9nZGIvdGFyZ2V0LmMKQEAgLTEyMjUsMTYgKzEyMjUs MTQgQEAgbWVtb3J5X3hmZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMg Km9wcywgdm9pZCAqcmVhZGJ1ZiwgY29uc3Qgdm9pZCAqd3JpdGVidWYKIAog ICBpZiAocmVnaW9uLT5hdHRyaWIuY2FjaGUpCiAgICAgewotICAgICAgLyog RklYTUUgZHJvdy8yMDA2LTA4LTA5OiBUaGlzIGNhbGwgZGlzY2FyZHMgT1BT LCBzbyB0aGUgcmF3Ci0JIG1lbW9yeSByZXF1ZXN0IHdpbGwgc3RhcnQgYmFj ayBhdCBjdXJyZW50X3RhcmdldC4gICovCiAgICAgICBpZiAocmVhZGJ1ZiAh PSBOVUxMKQotCXJlcyA9IGRjYWNoZV94ZmVyX21lbW9yeSAodGFyZ2V0X2Rj YWNoZSwgbWVtYWRkciwgcmVhZGJ1ZiwKKwlyZXMgPSBkY2FjaGVfeGZlcl9t ZW1vcnkgKG9wcywgdGFyZ2V0X2RjYWNoZSwgbWVtYWRkciwgcmVhZGJ1ZiwK IAkJCQkgIHJlZ19sZW4sIDApOwogICAgICAgZWxzZQogCS8qIEZJWE1FIGRy b3cvMjAwNi0wOC0wOTogSWYgd2UncmUgZ29pbmcgdG8gcHJlc2VydmUgY29u c3QKIAkgICBjb3JyZWN0bmVzcyBkY2FjaGVfeGZlcl9tZW1vcnkgc2hvdWxk IHRha2UgcmVhZGJ1ZiBhbmQKIAkgICB3cml0ZWJ1Zi4gICovCi0JcmVzID0g ZGNhY2hlX3hmZXJfbWVtb3J5ICh0YXJnZXRfZGNhY2hlLCBtZW1hZGRyLAor CXJlcyA9IGRjYWNoZV94ZmVyX21lbW9yeSAob3BzLCB0YXJnZXRfZGNhY2hl LCBtZW1hZGRyLAogCQkJCSAgKHZvaWQgKikgd3JpdGVidWYsCiAJCQkJICBy ZWdfbGVuLCAxKTsKICAgICAgIGlmIChyZXMgPD0gMCkK --0016364d2597354701046e24404a--