From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6980 invoked by alias); 7 Mar 2013 20:18:43 -0000 Received: (qmail 6941 invoked by uid 22791); 7 Mar 2013 20:18:39 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP X-Spam-Check-By: sourceware.org Received: from mail-ve0-f174.google.com (HELO mail-ve0-f174.google.com) (209.85.128.174) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 07 Mar 2013 20:18:24 +0000 Received: by mail-ve0-f174.google.com with SMTP id pb11so725655veb.33 for ; Thu, 07 Mar 2013 12:18:23 -0800 (PST) X-Received: by 10.221.2.71 with SMTP id nt7mr13268611vcb.71.1362687503187; Thu, 07 Mar 2013 12:18:23 -0800 (PST) MIME-Version: 1.0 Received: by 10.58.237.1 with HTTP; Thu, 7 Mar 2013 12:17:42 -0800 (PST) In-Reply-To: References: From: Steven Bosscher Date: Thu, 07 Mar 2013 20:18:00 -0000 Message-ID: Subject: Re: [patch][RFC] bitmaps as lists *or* trees To: GCC Patches Cc: Richard Biener , Michael Matz , Jan Hubicka Content-Type: multipart/mixed; boundary=bcaec54b54389146f604d75b6815 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00315.txt.bz2 --bcaec54b54389146f604d75b6815 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 588 > Attached is a version that passes bootstrap&testing on > x86_64-unknown-linux-gnu. and with a ChangeLog. Hello, Testing with some bitmap view changes revealed a few bugs: - Listifying a tree was broken, the prev pointer was never set. Oops! - As a result of the above, clearing bitmaps was broken, the whole bitmap would be leaked instead of released. - Likewise, changing view from tree to list would only retain head->first and lose the rest of the set... - bitmap_last_set_bit has to search from the root, as head->current may be in the left branch of another node. Ciao! Steven --bcaec54b54389146f604d75b6815 Content-Type: text/plain; charset=US-ASCII; name="tbitmap.diff.txt" Content-Disposition: attachment; filename="tbitmap.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_he0cxeim1 Content-length: 75319 CSogYml0bWFwLmg6IFVwZGF0ZSBkYXRhIHN0cnVjdHVyZSBkb2N1bWVudGF0 aW9uLCBpbmNsdWRpbmcgYQoJZGVzY3JpcHRpb24gb2YgYml0bWFwIHZpZXdz IGFzIGVpdGhlciBsaW5rZWQtbGlzdHMgb3Igc3BsYXkgdHJlZXMuCgkoc3Ry dWN0IGJpdG1hcF9lbGVtZW50X2RlZik6IFVwZGF0ZSBjb21tZW50cyBmb3Ig c3BsYXkgdHJlZSBiaXRtYXBzLgoJKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYp OiBMaWtld2lzZS4KCShiaXRtYXBfbGlzdF92aWV3LCBiaXRtYXBfdHJlZV92 aWV3KTogTmV3IHByb3RvdHlwZXMuCgkoZGVidWdfYml0bWFwLCBkZWJ1Z19i aXRtYXBfZmlsZSwgYml0bWFwX3ByaW50KTogVXBkYXRlIHByb3RvdHlwZXMu CgkoZHVtcF9iaXRtYXApOiBVcGRhdGUgdG8gdGFrZSBub24tY29uc3QgYml0 bWFwLgoJKGJpdG1hcF9pbml0aWFsaXplX3N0YXQpOiBJbml0aWFsaXplIGEg Yml0bWFwX2hlYWQncyBpbmR4IGFuZAoJdHJlZV9mb3JtIGZpZWxkcy4KCShi bXBfaXRlcl9zZXRfaW5pdCk6IEFzc2VydCB0aGUgaXRlcmF0ZWQgYml0bWFw cyBhcmUgaW4gbGlzdCBmb3JtLgoJKGJtcF9pdGVyX2FuZF9pbml0LCBibXBf aXRlcl9hbmRfY29tcGxfaW5pdCk6IExpa2V3aXNlLgoKCSogYml0bWFwLmMg KG5leHRfYml0bWFwX2Rlc2NfaWQpOiBNYWtlIHVuc2lnbmVkLgoJKGdldF9i aXRtYXBfZGVzY3JpcHRvcik6IE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbW9y ZSB0aGFuIDJeMzEKCWJpdG1hcCBkZXNjcmlwdG9ycy4KCShiaXRtYXBfZWxl bV90b19mcmVlbGlzdCk6IFVucmVnaXN0ZXIgb3ZlcmhlYWQgb2YgYSByZWxl YXNlZCBiaXRtYXAKCWVsZW1lbnQgaGVyZS4KCShiaXRtYXBfZWxlbWVudF9m cmVlKTogUmVtb3ZlLgoJKGJpdG1hcF9lbHRfY2xlYXJfZnJvbSk6IFdvcmsg b24gc3BsYXkgdHJlZSBiaXRtYXBzLgoKCShiaXRtYXBfbGlzdF9saW5rX2Vs ZW1lbnQpOiBSZW5hbWVkIGZyb20gYml0bWFwX2VsZW1lbnRfbGluay4gIE1v dmUKCXRoaXMgZnVuY3Rpb24gc2ltaWxhciBvbmVzIHN1Y2ggdGhhdCBsaW5r ZWQtbGlzdCBiaXRtYXAgaW1wbGVtZW50YXRpb24KCWZ1bmN0aW9ucyBhcmUg Z3JvdXBlZC4KCShiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCk6IFJlbmFt ZWQgZnJvbSBiaXRtYXBfZWxlbWVudF91bmxpbmssCglhbmQgbW92ZWQgZm9y IGdyb3VwaW5nLgoJKGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50X2FmdGVy KTogUmVuYW1lZCBmcm9tCgliaXRtYXBfZWx0X2luc2VydF9hZnRlciwgYW5k IG1vdmVkIGZvciBncm91cGluZy4KCShiaXRtYXBfbGlzdF9maW5kX2VsZW1l bnQpOiBOZXcgZnVuY3Rpb24gc3BsaWNlZCBmcm9tIGJpdG1hcF9maW5kX2Jp dC4KCgkoYml0bWFwX3RyZWVfbGlua19sZWZ0LCBiaXRtYXBfdHJlZV9saW5r X3JpZ2h0LAoJYml0bWFwX3RyZWVfcm90YXRlX2xlZnQsIGJpdG1hcF90cmVl X3JvdGF0ZV9yaWdodCwgYml0bWFwX3RyZWVfc3BsYXksCgliaXRtYXBfdHJl ZV9saW5rX2VsZW1lbnQsIGJpdG1hcF90cmVlX3VubGlua19lbGVtZW50LAoJ Yml0bWFwX3RyZWVfZmluZF9lbGVtZW50KTogTmV3IGZ1bmN0aW9ucyBmb3Ig c3BsYXktdHJlZSBiaXRtYXAKCWltcGxlbWVudGF0aW9uLgoJKGJpdG1hcF9l bGVtZW50X2xpbmssIGJpdG1hcF9lbGVtZW50X3VubGluaywgYml0bWFwX2Vs dF9pbnNlcnRfYWZ0ZXIpOgoJUmVuYW1lZCBhbmQgbW92ZWQsIHNlZSBhYm92 ZSBlbnRyaWVzLgoKCShiaXRtYXBfdHJlZV9saXN0aWZ5X2Zyb20pOiBOZXcg ZnVuY3Rpb24gdG8gY29udmVydCBwYXJ0IG9mIGEgc3BsYXkKCXRyZWUgYml0 bWFwIHRvIGEgbGlua2VkLWxpc3QgYml0bWFwLgoJKGJpdG1hcF9saXN0X3Zp ZXcpOiBDb252ZXJ0IGEgc3BsYXkgdHJlZSBiaXRtYXAgdG8gbGlua2VkLWxp c3QgZm9ybS4KCShiaXRtYXBfdHJlZV92aWV3KTogQ29udmVydCBhIGxpbmtl ZC1saXN0IGJpdG1hcCB0byBzcGxheSB0cmVlIGZvcm0uCgoJKGJpdG1hcF9m aW5kX2JpdCwgYml0bWFwX2NsZWFyLCBiaXRtYXBfY2xlYXJfYml0LCBiaXRt YXBfc2V0X2JpdCwKCWJpdG1hcF9zaW5nbGVfYml0X3NldF9wLCBiaXRtYXBf Zmlyc3Rfc2V0X2JpdCwgYml0bWFwX2xhc3Rfc2V0X2JpdCk6CglIYW5kbGUg c3BsYXkgdHJlZSBiaXRtYXBzLgoKCShiaXRtYXBfY29weSwgYml0bWFwX2Nv dW50X2JpdHMsIGJpdG1hcF9hbmQsIGJpdG1hcF9hbmRfaW50bywKCWJpdG1h cF9lbHRfY29weSwgYml0bWFwX2FuZF9jb21wbCwgYml0bWFwX2FuZF9jb21w bF9pbnRvLAoJYml0bWFwX2NvbXBsX2FuZF9pbnRvLCBiaXRtYXBfZWx0X2lv ciwgYml0bWFwX2lvciwgYml0bWFwX2lvcl9pbnRvLAoJYml0bWFwX3hvciwg Yml0bWFwX3hvcl9pbnRvLCBiaXRtYXBfZXF1YWxfcCwgYml0bWFwX2ludGVy c2VjdF9wLAoJYml0bWFwX2ludGVyc2VjdF9jb21wbF9wLCBiaXRtYXBfaW9y X2FuZF9jb21wbCwKCWJpdG1hcF9pb3JfYW5kX2NvbXBsX2ludG8sIGJpdG1h cF9zZXRfcmFuZ2UsIGJpdG1hcF9jbGVhcl9yYW5nZSwKCWJpdG1hcF9oYXNo KTogUmVqZWN0IHRyeWluZyB0byBhY3Qgb24gc3BsYXkgdHJlZSBiaXRtYXBz LiAgTWFrZQoJY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIHVzZSBsaW5rZWQt bGlzdCBzcGVjaWZpYyBiaXRtYXBfZWxlbWVudAoJbWFuaXB1bGF0aW9uIGZ1 bmN0aW9ucyBhcyBhcHBsaWNhYmxlIGZvciBlZmZpY2llbmN5LgoKCShkZWJ1 Z19iaXRtYXBfZmlsZSk6IEhhbmRsZSBzcGxheSB0cmVlIGJpdG1hcHMgYnkg Y29udmVydGluZyB0aGUKCWJpdG1hcCB0byBsaW5rZWQtbGlzdCBmb3JtIGFu ZCBiYWNrLgoJKGJpdG1hcF9wcmludCk6IExpa2V3aXNlLgoJKGRlYnVnX2Jp dG1hcCk6IFRha2UgYSBub24tY29uc3QgYml0bWFwLgoKCSogcmVnaW5mby5j IChpbml0X3N1YnJlZ3Nfb2ZfbW9kZSk6IFZpZXcgaW52YWxpZF9tb2RlX2No YW5nZXMgYW5kCglzdWJyZWdzX29mX21vZGUgYml0bWFwcyBhcyBzcGxheSB0 cmVlIGJpdG1hcHMuCgpJbmRleDogYml0bWFwLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gYml0bWFwLmgJKHJldmlzaW9uIDE5NjUwNSkKKysrIGJp dG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNiArMjAsMjEgQEAgYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KICNpZm5kZWYg R0NDX0JJVE1BUF9ICiAjZGVmaW5lIEdDQ19CSVRNQVBfSAogCi0vKiBJbXBs ZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBzZXRzIGFzIGEgbGlua2Vk IGxpc3QuCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBz ZXRzIGFzIGEgbGlua2VkIGxpc3Qgb3IgdHJlZXMuCiAKICAgIFRoaXMgc3Bh cnNlIHNldCByZXByZXNlbnRhdGlvbiBpcyBzdWl0YWJsZSBmb3Igc3BhcnNl IHNldHMgd2l0aCBhbgotICAgdW5rbm93biAoYSBwcmlvcmkpIHVuaXZlcnNl LiAgVGhlIHNldCBpcyByZXByZXNlbnRlZCBhcyBhIGRvdWJsZS1saW5rZWQK LSAgIGxpc3Qgb2YgY29udGFpbmVyIG5vZGVzIChzdHJ1Y3QgYml0bWFwX2Vs ZW1lbnRfZGVmKS4gIEVhY2ggbm9kZSBjb25zaXN0cwotICAgb2YgYW4gaW5k ZXggZm9yIHRoZSBmaXJzdCBtZW1iZXIgdGhhdCBjb3VsZCBiZSBoZWxkIGlu IHRoZSBjb250YWluZXIsCi0gICBhIHNtYWxsIGFycmF5IG9mIGludGVnZXJz IHRoYXQgcmVwcmVzZW50IHRoZSBtZW1iZXJzIGluIHRoZSBjb250YWluZXIs Ci0gICBhbmQgcG9pbnRlcnMgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGVs ZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0LiAgVGhlCi0gICBlbGVtZW50cyBp biB0aGUgbGlzdCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciwgaS5l LiB0aGUgaGVhZCBvZgorICAgdW5rbm93biAoYSBwcmlvcmkpIHVuaXZlcnNl LgorICAgCisgICBTZXRzIGFyZSByZXByZXNlbnRlZCBhcyBkb3VibGUtbGlu a2VkIGxpc3RzIG9mIGNvbnRhaW5lciBub2RlcyBvZgorICAgdHlwZSAic3Ry dWN0IGJpdG1hcF9lbGVtZW50X2RlZiIgb3IgYXMgYSBiaW5hcnkgdHJlZXMg b2YgdGhlIHNhbWUKKyAgIGNvbnRhaW5lciBub2Rlcy4gIEVhY2ggY29udGFp bmVyIG5vZGUgY29uc2lzdHMgb2YgYW4gaW5kZXggZm9yIHRoZQorICAgZmly c3QgbWVtYmVyIHRoYXQgY291bGQgYmUgaGVsZCBpbiB0aGUgY29udGFpbmVy LCBhIHNtYWxsIGFycmF5IG9mCisgICBpbnRlZ2VycyB0aGF0IHJlcHJlc2Vu dCB0aGUgbWVtYmVycyBpbiB0aGUgY29udGFpbmVyLCBhbmQgcG9pbnRlcnMK KyAgIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVtZW50IGluIHRoZSBs aW5rZWQgbGlzdCwgb3IgbGVmdCBhbmQKKyAgIHJpZ2h0IGNoaWxkcmVuIGlu IHRoZSB0cmVlLiAgSW4gbGlua2VkLWxpc3QgZm9ybSwgdGhlIGNvbnRhaW5l cgorICAgbm9kZXMgaW4gdGhlIGxpc3QgYXJlIHNvcnRlZCBpbiBhc2NlbmRp bmcgb3JkZXIsIGkuZS4gdGhlIGhlYWQgb2YKICAgIHRoZSBsaXN0IGhvbGRz IHRoZSBlbGVtZW50IHdpdGggdGhlIHNtYWxsZXN0IG1lbWJlciBvZiB0aGUg c2V0LgorICAgSW4gdHJlZSBmb3JtLCBub2RlcyB0byB0aGUgbGVmdCBoYXZl IGEgc21hbGxlciBjb250YWluZXIgaW5kZXguCiAKICAgIEZvciBhIGdpdmVu IG1lbWJlciBJIGluIHRoZSBzZXQ6CiAgICAgIC0gdGhlIGVsZW1lbnQgZm9y IEkgd2lsbCBoYXZlIGluZGV4IGlzIEkgLyAoYml0cyBwZXIgZWxlbWVudCkK QEAgLTQyLDE3ICs0Nyw2OCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLgogICAgaGlnaCBzdG9yYWdlIG92ZXJoZWFkICpwZXIg ZWxlbWVudCosIGJ1dCBhIHNtYWxsIG92ZXJhbGwgb3ZlcmhlYWQgaWYKICAg IHRoZSBzZXQgaXMgdmVyeSBzcGFyc2UuCiAKLSAgIFRoZSBkb3duc2lkZSBp cyB0aGF0IG1hbnkgb3BlcmF0aW9ucyBhcmUgcmVsYXRpdmVseSBzbG93IGJl Y2F1c2UgdGhlCi0gICBsaW5rZWQgbGlzdCBoYXMgdG8gYmUgdHJhdmVyc2Vk IHRvIHRlc3QgbWVtYmVyc2hpcCAoaS5lLiBtZW1iZXJfcC8KLSAgIGFkZF9t ZW1iZXIvcmVtb3ZlX21lbWJlcikuICBUbyBpbXByb3ZlIHRoZSBwZXJmb3Jt YW5jZSBvZiB0aGlzIHNldAotICAgcmVwcmVzZW50YXRpb24sIHRoZSBsYXN0 IGFjY2Vzc2VkIGVsZW1lbnQgYW5kIGl0cyBpbmRleCBhcmUgY2FjaGVkLgot ICAgRm9yIG1lbWJlcnNoaXAgdGVzdHMgb24gbWVtYmVycyBjbG9zZSB0byBy ZWNlbnRseSBhY2Nlc3NlZCBtZW1iZXJzLAotICAgdGhlIGNhY2hlZCBsYXN0 IGVsZW1lbnQgaW1wcm92ZXMgbWVtYmVyc2hpcCB0ZXN0IHRvIGEgY29uc3Rh bnQtdGltZQotICAgb3BlcmF0aW9uLgorICAgVGhlIHN0b3JhZ2UgcmVxdWly ZW1lbnRzIGZvciBsaW5rZWQtbGlzdCBzcGFyc2Ugc2V0cyBhcmUgTyhFKSwg d2l0aCBFLT5OCisgICBpbiB0aGUgd29yc3QgY2FzZSAoYSBzcGFyc2Ugc2V0 IHdpdGggbGFyZ2UgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHZhbHVlcworICAg b2YgdGhlIHNldCBtZW1iZXJzKS4KKworICAgVGhpcyByZXByZXNlbnRhdGlv biBhbHNvIHdvcmtzIHdlbGwgZm9yIGRhdGEgZmxvdyBwcm9ibGVtcyB3aGVy ZSB0aGUgc2l6ZQorICAgb2YgdGhlIHNldCBtYXkgZ3JvdyBkeW5hbWljYWxs eSwgYnV0IGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRoZSBtZW1iZXJfcCwK KyAgIGFkZF9tZW1iZXIsIGFuZCByZW1vdmVfbWVtYmVyIG9wZXJhdGlvbnMg b2NjdXIgd2l0aCBhIHN1aXRhYmxlIGFjY2VzcworICAgcGF0dGVybi4KKwor ICAgVGhlIGxpbmtlZC1saXN0IHNldCByZXByZXNlbnRhdGlvbiB3b3JrcyB3 ZWxsIGZvciBwcm9ibGVtcyBpbnZvbHZpbmcgdmVyeQorICAgc3BhcnNlIHNl dHMuICBUaGUgY2Fub25pY2FsIGV4YW1wbGUgaW4gR0NDIGlzLCBvZiBjb3Vy c2UsIHRoZSAic2V0IG9mCisgICBzZXRzIiBmb3Igc29tZSBDRkctYmFzZWQg ZGF0YSBmbG93IHByb2JsZW1zIChsaXZlbmVzcyBhbmFseXNpcywgZG9taW5h bmNlCisgICBmcm9udGllcnMsIGV0Yy4pLgorICAgCisgICBGb3IgcmFuZG9t LWFjY2VzcyBzcGFyc2Ugc2V0cyBvZiB1bmtub3duIHVuaXZlcnNlLCB0aGUg YmluYXJ5IHRyZWUKKyAgIHJlcHJlc2VudGF0aW9uIGlzIGxpa2VseSB0byBi ZSBhIG1vcmUgc3VpdGFibGUgY2hvaWNlLiAgVGhlb3JldGljYWwKKyAgIGFj Y2VzcyB0aW1lcyBmb3IgdGhlIGJpbmFyeSB0cmVlIHJlcHJlc2VudGF0aW9u IGFyZSBiZXR0ZXIgdGhhbiB0aG9zZQorICAgZm9yIHRoZSBsaW5rZWQtbGlz dCwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgb25seSB0cnVlIGZvciB0cnVl bHkKKyAgIHJhbmRvbSBhY2Nlc3MuCisKKyAgIE9mdGVuIHRoZSBtb3N0IHN1 aXRhYmxlIHJlcHJlc2VudGF0aW9uIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2Yg dGhlIHNldAorICAgaXMgbm90IHRoZSBiZXN0IGNob2ljZSBmb3IgdGhlIHVz YWdlIG9mIHRoZSBzZXQuICBGb3Igc3VjaCBjYXNlcywgdGhlCisgICAidmll dyIgb2YgdGhlIHNldCBjYW4gYmUgY2hhbmdlZCBmcm9tIG9uZSByZXByZXNl bnRhdGlvbiB0byB0aGUgb3RoZXIuCisgICBUaGlzIGlzIGFuIE8oRSkgb3Bl cmF0aW9uOgorCisgICAgICogZnJvbSBsaXN0IHRvIHRyZWUgdmlldwk6IGJp dG1hcF90cmVlX3ZpZXcKKyAgICAgKiBmcm9tIHRyZWUgdG8gbGlzdCB2aWV3 CTogYml0bWFwX2xpc3RfdmlldworCisgICBUcmF2ZXJzaW5nIGxpbmtlZCBs aXN0cyBvciB0cmVlcyBjYW4gYmUgY2FjaGUtdW5mcmllbmRseS4gIFBlcmZv cm1hbmNlCisgICBjYW4gYmUgaW1wcm92ZWQgYnkga2VlcGluZyBjb250YWlu ZXIgbm9kZXMgaW4gdGhlIHNldCBncm91cGVkIHRvZ2V0aGVyCisgICBpbiAg bWVtb3J5LCB1c2luZyBhIGRlZGljYXRlZCBvYnN0YWNrIGZvciBhIHNldCAo b3IgZ3JvdXAgb2YgcmVsYXRlZAorICAgc2V0cykuICBFbGVtZW50cyBhbGxv Y2F0ZWQgb24gb2JzdGFja3MgYXJlIHJlbGVhc2VkIHRvIGEgZnJlZS1saXN0 IGFuZAorICAgdGFrZW4gb2ZmIHRoZSBmcmVlIGxpc3QuICBJZiBtdWx0aXBs ZSBzZXRzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHNhbWUKKyAgIG9ic3RhY2ss IGVsZW1lbnRzIGZyZWVkIGZyb20gb25lIHNldCBtYXkgYmUgcmUtdXNlZCBm b3Igb25lIG9mIHRoZSBvdGhlcgorICAgc2V0cy4gIFRoaXMgdXN1YWxseSBo ZWxwcyBhdm9pZCBjYWNoZSBtaXNzZXMuCisKKyAgIEEgc2luZ2xlIGZyZWUt bGlzdCBpcyB1c2VkIGZvciBhbGwgc2V0cyBhbGxvY2F0ZWQgaW4gR0dDIHNw YWNlLiAgVGhpcyBpcworICAgYmFkIGZvciBwZXJzaXN0ZW50IHNldHMsIHNv IHBlcnNpc3RlbnQgc2V0cyBzaG91bGQgYmUgYWxsb2NhdGVkIG9uIGFuCisg ICBvYnN0YWNrIHdoZW5ldmVyIHBvc3NpYmxlLgorCisgICBGb3IgcmFuZG9t LWFjY2VzcyBzZXRzIHdpdGggYSBrbm93biwgcmVsYXRpdmVseSBzbWFsbCB1 bml2ZXJzZSBzaXplLCB0aGUKKyAgIFNwYXJzZVNldCBvciBzaW1wbGUgYml0 bWFwIHJlcHJlc2VudGF0aW9ucyBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdGhh biBhCisgICBsaW5rZWQtbGlzdCBzZXQuCisKKworICAgTElOS0VEIExJU1Qg Rk9STQorICAgPT09PT09PT09PT09PT09PQorCisgICBJbiBsaW5rZWQtbGlz dCBmb3JtLCBpbi1vcmRlciBpdGVyYXRpb25zIG9mIHRoZSBzZXQgY2FuIGJl IGV4ZWN1dGVkCisgICBlZmZpY2llbnRseS4gIFRoZSBkb3duc2lkZSBpcyB0 aGF0IG1hbnkgcmFuZG9tLWFjY2VzcyBvcGVyYXRpb25zIGFyZQorICAgcmVs YXRpdmVseSBzbG93LCBiZWNhdXNlIHRoZSBsaW5rZWQgbGlzdCBoYXMgdG8g YmUgdHJhdmVyc2VkIHRvIHRlc3QKKyAgIG1lbWJlcnNoaXAgKGkuZS4gbWVt YmVyX3AvIGFkZF9tZW1iZXIvcmVtb3ZlX21lbWJlcikuCisgICAKKyAgIFRv IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgc2V0IHJlcHJlc2Vu dGF0aW9uLCB0aGUgbGFzdAorICAgYWNjZXNzZWQgZWxlbWVudCBhbmQgaXRz IGluZGV4IGFyZSBjYWNoZWQuICBGb3IgbWVtYmVyc2hpcCB0ZXN0cyBvbgor ICAgbWVtYmVycyBjbG9zZSB0byByZWNlbnRseSBhY2Nlc3NlZCBtZW1iZXJz LCB0aGUgY2FjaGVkIGxhc3QgZWxlbWVudAorICAgaW1wcm92ZXMgbWVtYmVy c2hpcCB0ZXN0IHRvIGEgY29uc3RhbnQtdGltZSBvcGVyYXRpb24uCiAKICAg IFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYWx3YXlzIGJlIHBlcmZv cm1lZCBpbiBPKDEpIHRpbWU6CiAKICAgICAgKiBjbGVhcgkJCTogYml0bWFw X2NsZWFyCisgICAgICogc21hbGxlc3RfbWVtYmVyCQk6IGJpdG1hcF9maXJz dF9zZXRfYml0CiAgICAgICogY2hvb3NlX29uZQkJOiAobm90IGltcGxlbWVu dGVkLCBidXQgY291bGQgYmUKIAkJCQkgICBpbXBsZW1lbnRlZCBpbiBjb25z dGFudCB0aW1lKQogCkBAIC02MSwxNSArMTE3LDE2IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCiAgICBzdWl0YWJsZSBhY2Nl c3MgcGF0dGVybnM6CiAKICAgICAgKiBtZW1iZXJfcAkJCTogYml0bWFwX2Jp dF9wCi0gICAgICogYWRkX21lbWJlcgkJOiBiaXRtYXBfc2V0X2JpdAotICAg ICAqIHJlbW92ZV9tZW1iZXIJCTogYml0bWFwX2NsZWFyX2JpdAorICAgICAq IGFkZF9tZW1iZXIJCTogYml0bWFwX3NldF9iaXQgLyBiaXRtYXBfc2V0X3Jh bmdlCisgICAgICogcmVtb3ZlX21lbWJlcgkJOiBiaXRtYXBfY2xlYXJfYml0 IC8gYml0bWFwX2NsZWFyX3JhbmdlCiAKICAgIFRoZSBmb2xsb3dpbmcgb3Bl cmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGluIE8oRSkgdGltZToKIAogICAg ICAqIGNhcmRpbmFsaXR5CQk6IGJpdG1hcF9jb3VudF9iaXRzCi0gICAgICog c2V0X3NpemUJCQk6IGJpdG1hcF9sYXN0X3NldF9iaXQgKGJ1dCB0aGlzIGNv dWxkCisgICAgICogbGFyZ2VzdF9tZW1iZXIJCTogYml0bWFwX2xhc3Rfc2V0 X2JpdCAoYnV0IHRoaXMgY291bGQKIAkJCQkgIGluIGNvbnN0YW50IHRpbWUg d2l0aCBhIHBvaW50ZXIgdG8KIAkJCQkgIHRoZSBsYXN0IGVsZW1lbnQgaW4g dGhlIGNoYWluKQorICAgICAqIHNldF9zaXplCQkJOiBiaXRtYXBfbGFzdF9z ZXRfYml0CiAKICAgIEFkZGl0aW9uYWxseSwgdGhlIGxpbmtlZC1saXN0IHNw YXJzZSBzZXQgcmVwcmVzZW50YXRpb24gc3VwcG9ydHMKICAgIGVudW1lcmF0 aW9uIG9mIHRoZSBtZW1iZXJzIGluIE8oRSkgdGltZToKQEAgLTkzLDM5ICsx NTAsNTMgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4KICAgICAgKiBBIHwgKEIgJiB+QykJCTogYml0bWFwX2lvcl9hbmRfY29t cGwgLwogCQkJCSAgYml0bWFwX2lvcl9hbmRfY29tcGxfaW50bwogCi0gICBU aGUgc3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIGxpbmtlZC1saXN0IHNwYXJz ZSBzZXRzIGFyZSBPKEUpLCB3aXRoIEUtPk4KLSAgIGluIHRoZSB3b3JzdCBj YXNlIChhIHNwYXJzZSBzZXQgd2l0aCBsYXJnZSBkaXN0YW5jZXMgYmV0d2Vl biB0aGUgdmFsdWVzCi0gICBvZiB0aGUgc2V0IG1lbWJlcnMpLgogCi0gICBU aGUgbGlua2VkLWxpc3Qgc2V0IHJlcHJlc2VudGF0aW9uIHdvcmtzIHdlbGwg Zm9yIHByb2JsZW1zIGludm9sdmluZyB2ZXJ5Ci0gICBzcGFyc2Ugc2V0cy4g IFRoZSBjYW5vbmljYWwgZXhhbXBsZSBpbiBHQ0MgaXMsIG9mIGNvdXJzZSwg dGhlICJzZXQgb2YKLSAgIHNldHMiIGZvciBzb21lIENGRy1iYXNlZCBkYXRh IGZsb3cgcHJvYmxlbXMgKGxpdmVuZXNzIGFuYWx5c2lzLCBkb21pbmFuY2UK LSAgIGZyb250aWVycywgZXRjLikuCisgICBCSU5BUlkgVFJFRSBGT1JNCisg ICA9PT09PT09PT09PT09PT09CisgICBBbiBhbHRlcm5hdGUgInZpZXciIG9m IGEgYml0bWFwIGlzIGl0cyBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbi4K KyAgIEZvciB0aGlzIHJlcHJlc2VudGF0aW9uLCBzcGxheSB0cmVlcyBhcmUg dXNlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICBpbXBsZW1lbnRlZCB1c2lu ZyB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZXMgYXMgdGhlIGxpbmtlZCBsaXN0 LCB3aXRoCisgICBubyBvdmVyaGVhZCBmb3IgbWV0YS1kYXRhIChsaWtlIGNv bG9yLCBvciByYW5rKSBvbiB0aGUgdHJlZSBub2Rlcy4KKworICAgSW4gYmlu YXJ5IHRyZWUgZm9ybSwgcmFuZG9tLWFjY2VzcyB0byB0aGUgc2V0IGlzIG11 Y2ggbW9yZSBlZmZpY2llbnQKKyAgIHRoYW4gZm9yIHRoZSBsaW5rZWQtbGlz dCByZXByZXNlbnRhdGlvbi4gIERvd25zaWRlcyBhcmUgdGhlIGhpZ2ggY29z dAorICAgb2YgY2xlYXJpbmcgdGhlIHNldCwgYW5kIHRoZSByZWxhdGl2ZWx5 IGxhcmdlIG51bWJlciBvZiBvcGVyYXRpb25zCisgICBuZWNlc3NhcnkgdG8g YmFsYW5jZSB0aGUgdHJlZS4gIEFsc28sIGl0ZXJhdGluZyB0aGUgc2V0IG1l bWJlcnMgaXMKKyAgIG5vdCBzdXBwb3J0ZWQuCiAgICAKLSAgIFRoaXMgcmVw cmVzZW50YXRpb24gYWxzbyB3b3JrcyB3ZWxsIGZvciBkYXRhIGZsb3cgcHJv YmxlbXMgd2hlcmUgdGhlIHNpemUKLSAgIG9mIHRoZSBzZXQgbWF5IGdyb3cg ZHluYW1pY2FsbHksIGJ1dCBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUg bWVtYmVyX3AsCi0gICBhZGRfbWVtYmVyLCBhbmQgcmVtb3ZlX21lbWJlciBv cGVyYXRpb25zIG9jY3VyIHdpdGggYSBzdWl0YWJsZSBhY2Nlc3MKLSAgIHBh dHRlcm4uCi0gICAKLSAgIEZvciByYW5kb20tYWNjZXNzIHNldHMgd2l0aCBh IGtub3duLCByZWxhdGl2ZWx5IHNtYWxsIHVuaXZlcnNlIHNpemUsIHRoZQot ICAgU3BhcnNlU2V0IG9yIHNpbXBsZSBiaXRtYXAgcmVwcmVzZW50YXRpb25z IG1heSBiZSBtb3JlIGVmZmljaWVudCB0aGFuIGEKLSAgIGxpbmtlZC1saXN0 IHNldC4gIEZvciByYW5kb20tYWNjZXNzIHNldHMgb2YgdW5rbm93biB1bml2 ZXJzZSwgYSBoYXNoIHRhYmxlCi0gICBvciBhIGJhbGFuY2VkIGJpbmFyeSB0 cmVlIHJlcHJlc2VudGF0aW9uIGlzIGxpa2VseSB0byBiZSBhIG1vcmUgc3Vp dGFibGUKLSAgIGNob2ljZS4KKyAgIEFzIGZvciB0aGUgbGlua2VkLWxpc3Qg cmVwcmVzZW50YXRpb24sIHRoZSBsYXN0IGFjY2Vzc2VkIGVsZW1lbnQgYW5k CisgICBpdHMgaW5kZXggYXJlIGNhY2hlZCwgc28gdGhhdCBtZW1iZXJzaGlw IHRlc3RzIG9uIHRoZSBsYXRlc3QgYWNjZXNzZWQKKyAgIG1lbWJlcnMgaXMg YSBjb25zdGFudC10aW1lIG9wZXJhdGlvbi4gIE90aGVyIGxvb2t1cHMgdGFr ZSBPKGxvZ0UpCisgICB0aW1lIGFtb3J0aXplZCAoYnV0IE8oRSkgdGltZSB3 b3JzdC1jYXNlKS4KIAotICAgVHJhdmVyc2luZyBsaW5rZWQgbGlzdHMgaXMg dXN1YWxseSBjYWNoZS11bmZyaWVuZGx5LCBldmVuIHdpdGggdGhlIGxhc3QK LSAgIGFjY2Vzc2VkIGVsZW1lbnQgY2FjaGVkLgotICAgCi0gICBDYWNoZSBw ZXJmb3JtYW5jZSBjYW4gYmUgaW1wcm92ZWQgYnkga2VlcGluZyB0aGUgZWxl bWVudHMgaW4gdGhlIHNldAotICAgZ3JvdXBlZCB0b2dldGhlciBpbiBtZW1v cnksIHVzaW5nIGEgZGVkaWNhdGVkIG9ic3RhY2sgZm9yIGEgc2V0IChvciBn cm91cAotICAgb2YgcmVsYXRlZCBzZXRzKS4gIEVsZW1lbnRzIGFsbG9jYXRl ZCBvbiBvYnN0YWNrcyBhcmUgcmVsZWFzZWQgdG8gYQotICAgZnJlZS1saXN0 IGFuZCB0YWtlbiBvZmYgdGhlIGZyZWUgbGlzdC4gIElmIG11bHRpcGxlIHNl dHMgYXJlIGFsbG9jYXRlZCBvbgotICAgdGhlIHNhbWUgb2JzdGFjaywgZWxl bWVudHMgZnJlZWQgZnJvbSBvbmUgc2V0IG1heSBiZSByZS11c2VkIGZvciBv bmUgb2YKLSAgIHRoZSBvdGhlciBzZXRzLiAgVGhpcyB1c3VhbGx5IGhlbHBz IGF2b2lkIGNhY2hlIG1pc3Nlcy4KKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0 aW9ucyBjYW4gYWx3YXlzIGJlIHBlcmZvcm1lZCBpbiBPKDEpIHRpbWU6CiAK LSAgIEEgc2luZ2xlIGZyZWUtbGlzdCBpcyB1c2VkIGZvciBhbGwgc2V0cyBh bGxvY2F0ZWQgaW4gR0dDIHNwYWNlLiAgVGhpcyBpcwotICAgYmFkIGZvciBw ZXJzaXN0ZW50IHNldHMsIHNvIHBlcnNpc3RlbnQgc2V0cyBzaG91bGQgYmUg YWxsb2NhdGVkIG9uIGFuCi0gICBvYnN0YWNrIHdoZW5ldmVyIHBvc3NpYmxl LiAgKi8KKyAgICAgKiBjaG9vc2Vfb25lCQk6IChub3QgaW1wbGVtZW50ZWQs IGJ1dCBjb3VsZCBiZQorCQkJCSAgIGltcGxlbWVudGVkIGluIGNvbnN0YW50 IHRpbWUpCisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYmUg cGVyZm9ybWVkIGluIE8obG9nRSkgdGltZSBhbW9ydGl6ZWQKKyAgIGJ1dCBP KEUpIHRpbWUgd29yc3QtY2FzZSwgYnV0IGluIE8oMSkgdGltZSBpZiB0aGUg c2FtZSBlbGVtZW50IGlzCisgICBhY2Nlc3NlZC4KKworICAgICAqIG1lbWJl cl9wCQkJOiBiaXRtYXBfYml0X3AKKyAgICAgKiBhZGRfbWVtYmVyCQk6IGJp dG1hcF9zZXRfYml0CisgICAgICogcmVtb3ZlX21lbWJlcgkJOiBiaXRtYXBf Y2xlYXJfYml0CisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4g YmUgcGVyZm9ybWVkIGluIE8obG9nRSkgdGltZSBhbW9ydGl6ZWQKKyAgIGJ1 dCBPKEUpIHRpbWUgd29yc3QtY2FzZToKKworICAgICAqIHNtYWxsZXN0X21l bWJlcgkJOiBiaXRtYXBfZmlyc3Rfc2V0X2JpdAorICAgICAqIGxhcmdlc3Rf bWVtYmVyCQk6IGJpdG1hcF9sYXN0X3NldF9iaXQKKyAgICAgKiBzZXRfc2l6 ZQkJCTogYml0bWFwX2xhc3Rfc2V0X2JpdAorCisgICBUaGUgZm9sbG93aW5n IG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBpbiBPKEUpIHRpbWU6CisK KyAgICAgKiBjbGVhcgkJCTogYml0bWFwX2NsZWFyCisKKyAgIFRoZSBiaW5h cnkgdHJlZSBzcGFyc2Ugc2V0IHJlcHJlc2VudGF0aW9uIGRvZXMgKm5vdCog c3VwcG9ydCBhbnkgZm9ybQorICAgb2YgZW51bWVyYXRpb24sIGFuZCBkb2Vz IGFsc28gKm5vdCogc3VwcG9ydCBsb2dpY2FsIG9wZXJhdGlvbnMgb24gc2V0 cy4KKyAgIFRoZSBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbiBpcyBvbmx5 IHN1cHBvc2VkIHRvIGJlIHVzZWQgZm9yIHNldHMKKyAgIG9uIHdoaWNoIG1h bnkgcmFuZG9tLWFjY2VzcyBtZW1iZXJzaGlwIHRlc3RzIHdpbGwgaGFwcGVu LiAgKi8KIAogI2luY2x1ZGUgImhhc2h0YWIuaCIKICNpbmNsdWRlICJzdGF0 aXN0aWNzLmgiCkBAIC0xNjgsMzEgKzIzOSw1NyBAQCB0eXBlZGVmIHN0cnVj dCBHVFkgKCgpKSBiaXRtYXBfb2JzdGFjayB7CiAgICBsaW5lYXIgaW4gdGhl IG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBmcmVlZC4gICovCiAKIHR5cGVk ZWYgc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIiVoLm5leHQiKSwgY2hhaW5f cHJldiAoIiVoLnByZXYiKSkpIGJpdG1hcF9lbGVtZW50X2RlZiB7Ci0gIHN0 cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKm5leHQ7CS8qIE5leHQgZWxlbWVu dC4gICovCi0gIHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKnByZXY7CS8q IFByZXZpb3VzIGVsZW1lbnQuICAqLwotICB1bnNpZ25lZCBpbnQgaW5keDsJ CQkvKiByZWduby9CSVRNQVBfRUxFTUVOVF9BTExfQklUUy4gICovCi0gIEJJ VE1BUF9XT1JEIGJpdHNbQklUTUFQX0VMRU1FTlRfV09SRFNdOyAvKiBCaXRz IHRoYXQgYXJlIHNldC4gICovCisgIC8qIEluIGxpc3QgZm9ybSwgdGhlIG5l eHQgZWxlbWVudCBpbiB0aGUgbGlua2VkIGxpc3Q7CisgICAgIGluIHRyZWUg Zm9ybSwgdGhlIGxlZnQgY2hpbGQgbm9kZSBpbiB0aGUgdHJlZS4gICovCisg IHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKm5leHQ7CisKKyAgLyogSW4g bGlzdCBmb3JtLCB0aGUgcHJldmlvdXMgZWxlbWVudCBpbiB0aGUgbGlua2Vk IGxpc3Q7CisgICAgIGluIHRyZWUgZm9ybSwgdGhlIHJpZ2h0IGNoaWxkIG5v ZGUgaW4gdGhlIHRyZWUuICAqLworICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRf ZGVmICpwcmV2OworCisgIC8qIHJlZ25vL0JJVE1BUF9FTEVNRU5UX0FMTF9C SVRTLiAgKi8KKyAgdW5zaWduZWQgaW50IGluZHg7CisKKyAgLyogQml0cyB0 aGF0IGFyZSBzZXQsIGNvdW50aW5nIGZyb20gSU5EWCwgaW5jbHVzaXZlLiAg Ki8KKyAgQklUTUFQX1dPUkQgYml0c1tCSVRNQVBfRUxFTUVOVF9XT1JEU107 CiB9IGJpdG1hcF9lbGVtZW50OwogCiAvKiBIZWFkIG9mIGJpdG1hcCBsaW5r ZWQgbGlzdC4gIFRoZSAnY3VycmVudCcgbWVtYmVyIHBvaW50cyB0byBzb21l dGhpbmcKICAgIGFscmVhZHkgcG9pbnRlZCB0byBieSB0aGUgY2hhaW4gc3Rh cnRlZCBieSBmaXJzdCwgc28gR1RZKChza2lwKSkgaXQuICAqLwogCiB0eXBl ZGVmIHN0cnVjdCBHVFkoKCkpIGJpdG1hcF9oZWFkX2RlZiB7Ci0gIHVuc2ln bmVkIGludCBpbmR4OwkJCS8qIEluZGV4IG9mIGxhc3QgZWxlbWVudCBsb29r ZWQgYXQuICAqLwotICB1bnNpZ25lZCBpbnQgZGVzY3JpcHRvcl9pZDsJCS8q IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYWxsb2NhdGlvbgotCQkJCQkg ICBzaXRlIG9mIHRoaXMgYml0bWFwLCBmb3IgZGV0YWlsZWQKLQkJCQkJICAg c3RhdGlzdGljcyBnYXRoZXJpbmcuICAqLwotICBiaXRtYXBfZWxlbWVudCAq Zmlyc3Q7CQkvKiBGaXJzdCBlbGVtZW50IGluIGxpbmtlZCBsaXN0LiAgKi8K LSAgYml0bWFwX2VsZW1lbnQgKiBHVFkoKHNraXAoIiIpKSkgY3VycmVudDsg LyogTGFzdCBlbGVtZW50IGxvb2tlZCBhdC4gICovCi0gIGJpdG1hcF9vYnN0 YWNrICpvYnN0YWNrOwkJLyogT2JzdGFjayB0byBhbGxvY2F0ZSBlbGVtZW50 cyBmcm9tLgotCQkJCQkgICBJZiBOVUxMLCB0aGVuIHVzZSBHR0MgYWxsb2Nh dGlvbi4gICovCisgIC8qIEluZGV4IG9mIGxhc3QgZWxlbWVudCBsb29rZWQg YXQuICAqLworICB1bnNpZ25lZCBpbnQgaW5keDsKKworICAvKiBVbmlxdWUg aWRlbnRpZmllciBmb3IgdGhlIGFsbG9jYXRpb24gc2l0ZSBvZiB0aGlzIGJp dG1hcCwKKyAgICAgZm9yIGRldGFpbGVkIHN0YXRpc3RpY3MgZ2F0aGVyaW5n LiAgKi8KKyAgdW5zaWduZWQgaW50IGRlc2NyaXB0b3JfaWQgOiAzMTsKKwor ICAvKiAwIGlmIHRoZSBiaXRtYXAgaXMgaW4gbGlzdCBmb3JtOyAxIGlmIHRo ZSBiaXRtYXAgaXMgaW4gdHJlZSBmb3JtLgorICAgICBCaXRtYXAgaXRlcmF0 b3JzIG9ubHkgd29yayBvbiBiaXRtYXBzIGluIGxpc3QgZm9ybS4gICovCisg IHVuc2lnbmVkIGludCB0cmVlX2Zvcm0gOiAxOworCisgIC8qIEluIGxpc3Qg Zm9ybSwgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0Owor ICAgICBpbiB0cmVlIGZvcm0sIFRoZSByb290IG9mIHRoZSB0cmVlLiAgICov CisgIGJpdG1hcF9lbGVtZW50ICpmaXJzdDsKKworICAvKiBMYXN0IGVsZW1l bnQgbG9va2VkIGF0LiAgKi8KKyAgYml0bWFwX2VsZW1lbnQgKiBHVFkoKHNr aXAoIiIpKSkgY3VycmVudDsKKworICAvKiBPYnN0YWNrIHRvIGFsbG9jYXRl IGVsZW1lbnRzIGZyb20uCisgICAgIElmIE5VTEwsIHRoZW4gdXNlIEdHQyBh bGxvY2F0aW9uLiAgKi8KKyAgYml0bWFwX29ic3RhY2sgKm9ic3RhY2s7CiB9 IGJpdG1hcF9oZWFkOwogCiAvKiBHbG9iYWwgZGF0YSAqLwogZXh0ZXJuIGJp dG1hcF9lbGVtZW50IGJpdG1hcF96ZXJvX2JpdHM7CS8qIFplcm8gYml0bWFw IGVsZW1lbnQgKi8KIGV4dGVybiBiaXRtYXBfb2JzdGFjayBiaXRtYXBfZGVm YXVsdF9vYnN0YWNrOyAgIC8qIERlZmF1bHQgYml0bWFwIG9ic3RhY2sgKi8K IAotLyogQ2xlYXIgYSBiaXRtYXAgYnkgZnJlZWluZyB1cCB0aGUgbGlua2Vk IGxpc3QuICAqLworLyogQ2hhbmdlIHRoZSB2aWV3IG9mIHRoZSBiaXRtYXAg dG8gbGlzdCwgb3IgdHJlZS4gICovCit2b2lkIGJpdG1hcF9saXN0X3ZpZXcg KGJpdG1hcCk7Cit2b2lkIGJpdG1hcF90cmVlX3ZpZXcgKGJpdG1hcCk7CisK Ky8qIENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgdXAgdGhlIGVsZW1lbnRz LiAgKi8KIGV4dGVybiB2b2lkIGJpdG1hcF9jbGVhciAoYml0bWFwKTsKIAog LyogQ29weSBhIGJpdG1hcCB0byBhbm90aGVyIGJpdG1hcC4gICovCkBAIC0y NTIsMTUgKzM0OSwxNSBAQCBleHRlcm4gYm9vbCBiaXRtYXBfY2xlYXJfYml0 IChiaXRtYXAsIGluCiAvKiBTZXQgYSBzaW5nbGUgYml0IGluIGEgYml0bWFw LiAgUmV0dXJuIHRydWUgaWYgdGhlIGJpdCBjaGFuZ2VkLiAgKi8KIGV4dGVy biBib29sIGJpdG1hcF9zZXRfYml0IChiaXRtYXAsIGludCk7CiAKLS8qIFJl dHVybiB0cnVlIGlmIGEgcmVnaXN0ZXIgaXMgc2V0IGluIGEgcmVnaXN0ZXIg c2V0LiAgKi8KKy8qIFJldHVybiB0cnVlIGlmIGEgYml0IGlzIHNldCBpbiBh IGJpdG1hcC4gICovCiBleHRlcm4gaW50IGJpdG1hcF9iaXRfcCAoYml0bWFw LCBpbnQpOwogCi0vKiBEZWJ1ZyBmdW5jdGlvbnMgdG8gcHJpbnQgYSBiaXRt YXAgbGlua2VkIGxpc3QuICAqLwotZXh0ZXJuIHZvaWQgZGVidWdfYml0bWFw IChjb25zdF9iaXRtYXApOwotZXh0ZXJuIHZvaWQgZGVidWdfYml0bWFwX2Zp bGUgKEZJTEUgKiwgY29uc3RfYml0bWFwKTsKKy8qIERlYnVnIGZ1bmN0aW9u cyB0byBwcmludCBhIGJpdG1hcC4gICovCitleHRlcm4gdm9pZCBkZWJ1Z19i aXRtYXAgKGJpdG1hcCk7CitleHRlcm4gdm9pZCBkZWJ1Z19iaXRtYXBfZmls ZSAoRklMRSAqLCBiaXRtYXApOwogCiAvKiBQcmludCBhIGJpdG1hcC4gICov Ci1leHRlcm4gdm9pZCBiaXRtYXBfcHJpbnQgKEZJTEUgKiwgY29uc3RfYml0 bWFwLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9p ZCBiaXRtYXBfcHJpbnQgKEZJTEUgKiwgYml0bWFwLCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CiAKIC8qIEluaXRpYWxpemUgYW5kIHJlbGVhc2Ug YSBiaXRtYXAgb2JzdGFjay4gICovCiBleHRlcm4gdm9pZCBiaXRtYXBfb2Jz dGFja19pbml0aWFsaXplIChiaXRtYXBfb2JzdGFjayAqKTsKQEAgLTI3NSw2 ICszNzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIGJpdG1hcF9pbml0aWFs aXplX3N0YXQgKGJpdG1hcCBoZWFkLCBiaXRtYXBfb2JzdGFjayAqb2JzdGFj ayBNRU1fU1RBVF9ERUNMKQogewogICBoZWFkLT5maXJzdCA9IGhlYWQtPmN1 cnJlbnQgPSBOVUxMOworICBoZWFkLT5pbmR4ID0gaGVhZC0+dHJlZV9mb3Jt ID0gMDsKICAgaGVhZC0+b2JzdGFjayA9IG9ic3RhY2s7CiAgIGlmIChHQVRI RVJfU1RBVElTVElDUykKICAgICBiaXRtYXBfcmVnaXN0ZXIgKGhlYWQgUEFT U19NRU1fU1RBVCk7CkBAIC0yODksNyArMzg3LDcgQEAgZXh0ZXJuIGJpdG1h cCBiaXRtYXBfZ2NfYWxsb2Nfc3RhdCAoQUxPTgogZXh0ZXJuIHZvaWQgYml0 bWFwX29ic3RhY2tfZnJlZSAoYml0bWFwKTsKIAogLyogQSBmZXcgY29tcGF0 aWJpbGl0eS9mdW5jdGlvbnMgbWFjcm9zIGZvciBjb21wYXRpYmlsaXR5IHdp dGggc2JpdG1hcHMgKi8KLWlubGluZSB2b2lkIGR1bXBfYml0bWFwIChGSUxF ICpmaWxlLCBjb25zdF9iaXRtYXAgbWFwKQoraW5saW5lIHZvaWQgZHVtcF9i aXRtYXAgKEZJTEUgKmZpbGUsIGJpdG1hcCBtYXApCiB7CiAgIGJpdG1hcF9w cmludCAoZmlsZSwgbWFwLCAiIiwgIlxuIik7CiB9CkBAIC0zMzksNiArNDM3 LDggQEAgYm1wX2l0ZXJfc2V0X2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmks CiAgIGJpLT5lbHQxID0gbWFwLT5maXJzdDsKICAgYmktPmVsdDIgPSBOVUxM OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFtYXAtPnRyZWVfZm9ybSk7 CisKICAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUg dGhlIGJsb2NrIGNvbnRhaW5pbmcgc3RhcnRfYml0LiAgKi8KICAgd2hpbGUg KDEpCiAgICAgewpAQCAtMzgxLDYgKzQ4MSw4IEBAIGJtcF9pdGVyX2FuZF9p bml0IChiaXRtYXBfaXRlcmF0b3IgKmJpLAogICBiaS0+ZWx0MSA9IG1hcDEt PmZpcnN0OwogICBiaS0+ZWx0MiA9IG1hcDItPmZpcnN0OwogCisgIGdjY19j aGVja2luZ19hc3NlcnQgKCFtYXAxLT50cmVlX2Zvcm0gJiYgIW1hcDItPnRy ZWVfZm9ybSk7CisKICAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5v dCBiZWZvcmUgdGhlIGJsb2NrIGNvbnRhaW5pbmcKICAgICAgc3RhcnRfYml0 LiAgKi8KICAgd2hpbGUgKDEpCkBAIC00MzksOCArNTQxLDcgQEAgYm1wX2l0 ZXJfYW5kX2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmksCiAgICpiaXRfbm8g PSBzdGFydF9iaXQ7CiB9CiAKLS8qIEluaXRpYWxpemUgYW4gaXRlcmF0b3Ig dG8gaXRlcmF0ZSBvdmVyIHRoZSBiaXRzIGluIE1BUDEgJiB+TUFQMi4KLSAg ICovCisvKiBJbml0aWFsaXplIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3Zl ciB0aGUgYml0cyBpbiBNQVAxICYgfk1BUDIuICAqLwogCiBzdGF0aWMgaW5s aW5lIHZvaWQKIGJtcF9pdGVyX2FuZF9jb21wbF9pbml0IChiaXRtYXBfaXRl cmF0b3IgKmJpLApAQCAtNDUwLDYgKzU1MSw4IEBAIGJtcF9pdGVyX2FuZF9j b21wbF9pbml0IChiaXRtYXBfaXRlcmF0b3IKICAgYmktPmVsdDEgPSBtYXAx LT5maXJzdDsKICAgYmktPmVsdDIgPSBtYXAyLT5maXJzdDsKIAorICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0ICghbWFwMS0+dHJlZV9mb3JtICYmICFtYXAyLT50 cmVlX2Zvcm0pOworCiAgIC8qIEFkdmFuY2UgZWx0MSB1bnRpbCBpdCBpcyBu b3QgYmVmb3JlIHRoZSBibG9jayBjb250YWluaW5nIHN0YXJ0X2JpdC4gICov CiAgIHdoaWxlICgxKQogICAgIHsKSW5kZXg6IGJpdG1hcC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGJpdG1hcC5jCShyZXZpc2lvbiAxOTY1MDUp CisrKyBiaXRtYXAuYwkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTAg QEAgc3RydWN0IGJpdG1hcF9kZXNjcmlwdG9yX2QKIHR5cGVkZWYgc3RydWN0 IGJpdG1hcF9kZXNjcmlwdG9yX2QgKmJpdG1hcF9kZXNjcmlwdG9yOwogdHlw ZWRlZiBjb25zdCBzdHJ1Y3QgYml0bWFwX2Rlc2NyaXB0b3JfZCAqY29uc3Rf Yml0bWFwX2Rlc2NyaXB0b3I7CiAKK3N0YXRpYyBiaXRtYXBfZWxlbWVudCAq Yml0bWFwX3RyZWVfbGlzdGlmeV9mcm9tIChiaXRtYXAsIGJpdG1hcF9lbGVt ZW50ICopOworCiAvKiBOZXh0IGF2YWlsYWJsZSB1bmlxdWUgaWQgbnVtYmVy IGZvciBiaXRtYXAgZGVzY2lwdG9ycy4gICovCi1zdGF0aWMgaW50IG5leHRf Yml0bWFwX2Rlc2NfaWQgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBuZXh0 X2JpdG1hcF9kZXNjX2lkID0gMDsKIAogLyogVmVjdG9yIG1hcHBpbmcgZGVz Y3JpcHRvciBpZHMgdG8gZGVzY3JpcHRvcnMuICAqLwogc3RhdGljIHZlYzxi aXRtYXBfZGVzY3JpcHRvcj4gYml0bWFwX2Rlc2NyaXB0b3JzOwpAQCAtOTUs NiArOTcsMTEgQEAgZ2V0X2JpdG1hcF9kZXNjcmlwdG9yIChjb25zdCBjaGFy ICpmaWxlLAogICBpZiAoKnNsb3QpCiAgICAgcmV0dXJuICpzbG90OwogCisg IC8qIFRoZSBkZXNjcmlwdG9yIElEIGNhbiBiZSBhdCBtb3N0IDMxIGJpdHMg bG9uZywgYmVjYXVzZSB0aGUgbW9zdAorICAgICBzaWduaWZpY2FudCBvZiB0 aGUgKGhhbGYpd29yZCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RlIG9m CisgICAgIHRoZSBiaXRtYXAsIGkuZS4gd2hldGhlciBpdHMgY3VycmVudCBm b3JtIGlzIGxpc3Qgb3IgdHJlZS4gICovCisgIGdjY19hc3NlcnQgKG5leHRf Yml0bWFwX2Rlc2NfaWQgPCAoKHVuc2lnbmVkKSAxIDw8IDMxKSAtIDEpOwor CiAgICpzbG90ID0gWENORVcgKHN0cnVjdCBiaXRtYXBfZGVzY3JpcHRvcl9k KTsKICAgYml0bWFwX2Rlc2NyaXB0b3JzLnNhZmVfcHVzaCAoKnNsb3QpOwog ICAoKnNsb3QpLT5pZCA9IG5leHRfYml0bWFwX2Rlc2NfaWQrKzsKQEAgLTEz MywyMiArMTQwLDE4IEBAIHN0YXRpYyBpbnQgYml0bWFwX2RlZmF1bHRfb2Jz dGFja19kZXB0aDsKIHN0YXRpYyBHVFkoKGRlbGV0YWJsZSkpIGJpdG1hcF9l bGVtZW50ICpiaXRtYXBfZ2djX2ZyZWU7IC8qIEZyZWVsaXN0IG9mCiAJCQkJ CQkJICAgIEdDJ2QgZWxlbWVudHMuICAqLwogCi1zdGF0aWMgdm9pZCBiaXRt YXBfZWxlbV90b19mcmVlbGlzdCAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAq KTsKLXN0YXRpYyB2b2lkIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGJpdG1hcCwg Yml0bWFwX2VsZW1lbnQgKik7Ci1zdGF0aWMgYml0bWFwX2VsZW1lbnQgKmJp dG1hcF9lbGVtZW50X2FsbG9jYXRlIChiaXRtYXApOwotc3RhdGljIGludCBi aXRtYXBfZWxlbWVudF96ZXJvcCAoY29uc3QgYml0bWFwX2VsZW1lbnQgKik7 Ci1zdGF0aWMgdm9pZCBiaXRtYXBfZWxlbWVudF9saW5rIChiaXRtYXAsIGJp dG1hcF9lbGVtZW50ICopOwotc3RhdGljIGJpdG1hcF9lbGVtZW50ICpiaXRt YXBfZWx0X2luc2VydF9hZnRlciAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAq LCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgYml0bWFwX2VsdF9jbGVh cl9mcm9tIChiaXRtYXAsIGJpdG1hcF9lbGVtZW50ICopOwotc3RhdGljIGJp dG1hcF9lbGVtZW50ICpiaXRtYXBfZmluZF9iaXQgKGJpdG1hcCwgdW5zaWdu ZWQgaW50KTsKIAwKKy8qIEJpdG1hcCBtZW1vcnkgbWFuYWdlbWVudC4gICov CiAKLS8qIEFkZCBFTEVNIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlbGlzdC4g ICovCisvKiBBZGQgRUxUIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlbGlzdC4g ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIGJpdG1hcF9lbGVtX3RvX2ZyZWVs aXN0IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCkKIHsKICAg Yml0bWFwX29ic3RhY2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+b2JzdGFjazsK IAorICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCisgICAgcmVnaXN0ZXJfb3Zl cmhlYWQgKGhlYWQsIC0oKGludClzaXplb2YgKGJpdG1hcF9lbGVtZW50KSkp OworCiAgIGVsdC0+bmV4dCA9IE5VTEw7CiAgIGlmIChiaXRfb2JzdGFjaykK ICAgICB7CkBAIC0xNjIsNDEgKzE2NSw2IEBAIGJpdG1hcF9lbGVtX3RvX2Zy ZWVsaXN0IChiaXRtYXAgaGVhZCwgYmkKICAgICB9CiB9CiAKLS8qIEZyZWUg YSBiaXRtYXAgZWxlbWVudC4gIFNpbmNlIHRoZXNlIGFyZSBhbGxvY2F0ZWQg b2ZmIHRoZQotICAgYml0bWFwX29ic3RhY2ssICJmcmVlIiBhY3R1YWxseSBt ZWFucyAicHV0IG9udG8gdGhlIGZyZWVsaXN0Ii4gICovCi0KLXN0YXRpYyBp bmxpbmUgdm9pZAotYml0bWFwX2VsZW1lbnRfZnJlZSAoYml0bWFwIGhlYWQs IGJpdG1hcF9lbGVtZW50ICplbHQpCi17Ci0gIGJpdG1hcF9lbGVtZW50ICpu ZXh0ID0gZWx0LT5uZXh0OwotICBiaXRtYXBfZWxlbWVudCAqcHJldiA9IGVs dC0+cHJldjsKLQotICBpZiAocHJldikKLSAgICBwcmV2LT5uZXh0ID0gbmV4 dDsKLQotICBpZiAobmV4dCkKLSAgICBuZXh0LT5wcmV2ID0gcHJldjsKLQot ICBpZiAoaGVhZC0+Zmlyc3QgPT0gZWx0KQotICAgIGhlYWQtPmZpcnN0ID0g bmV4dDsKLQotICAvKiBTaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2UgdHJ5IGlz IHRvIGluc2VydCBiZWZvcmUgY3VycmVudCwKLSAgICAgbWFrZSBjdXJyZW50 IHRoZSBuZXh0IGVudHJ5IGluIHByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3Vz LiAgKi8KLSAgaWYgKGhlYWQtPmN1cnJlbnQgPT0gZWx0KQotICAgIHsKLSAg ICAgIGhlYWQtPmN1cnJlbnQgPSBuZXh0ICE9IDAgPyBuZXh0IDogcHJldjsK LSAgICAgIGlmIChoZWFkLT5jdXJyZW50KQotCWhlYWQtPmluZHggPSBoZWFk LT5jdXJyZW50LT5pbmR4OwotICAgICAgZWxzZQotCWhlYWQtPmluZHggPSAw OwotICAgIH0KLQotICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCi0gICAgcmVn aXN0ZXJfb3ZlcmhlYWQgKGhlYWQsIC0oKGludClzaXplb2YgKGJpdG1hcF9l bGVtZW50KSkpOwotCi0gIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChoZWFk LCBlbHQpOwotfQotDAogLyogQWxsb2NhdGUgYSBiaXRtYXAgZWxlbWVudC4g IFRoZSBiaXRzIGFyZSBjbGVhcmVkLCBidXQgbm90aGluZyBlbHNlIGlzLiAg Ki8KIAogc3RhdGljIGlubGluZSBiaXRtYXBfZWxlbWVudCAqCkBAIC0yNDks NyArMjE3LDggQEAgYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGJpdG1hcCBo ZWFkKQogICByZXR1cm4gZWxlbWVudDsKIH0KIAotLyogUmVtb3ZlIEVMVCBh bmQgYWxsIGZvbGxvd2luZyBlbGVtZW50cyBmcm9tIGJpdG1hcCBIRUFELiAg Ki8KKy8qIFJlbW92ZSBFTFQgYW5kIGFsbCBmb2xsb3dpbmcgZWxlbWVudHMg ZnJvbSBiaXRtYXAgSEVBRC4KKyAgIFB1dCB0aGUgcmVsZWFzZWQgZWxlbWVu dHMgaW4gdGhlIGZyZWVsaXN0IGZvciBIRUFELiAgKi8KIAogdm9pZAogYml0 bWFwX2VsdF9jbGVhcl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1l bnQgKmVsdCkKQEAgLTI1Nyw3ICsyMjYsMTEgQEAgYml0bWFwX2VsdF9jbGVh cl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bQogICBiaXRtYXBfZWxlbWVudCAq cHJldjsKICAgYml0bWFwX29ic3RhY2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+ b2JzdGFjazsKIAotICBpZiAoIWVsdCkgcmV0dXJuOworICBpZiAoIWVsdCkK KyAgICByZXR1cm47CisKKyAgaWYgKGhlYWQtPnRyZWVfZm9ybSkKKyAgICBl bHQgPSBiaXRtYXBfdHJlZV9saXN0aWZ5X2Zyb20gKGhlYWQsIGVsdCk7CiAK ICAgaWYgKEdBVEhFUl9TVEFUSVNUSUNTKQogICAgIHsKQEAgLTI4NCw3ICsy NTcsNyBAQCBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCBoZWFkLCBi aXRtCiAgICAgICBoZWFkLT5pbmR4ID0gMDsKICAgICB9CiAKLSAgLyogUHV0 IHRoZSBlbnRpcmUgbGlzdCBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gb25lIG9w ZXJhdGlvbi4gKi8KKyAgLyogUHV0IHRoZSBlbnRpcmUgbGlzdCBvbnRvIHRo ZSBmcmVlbGlzdCBpbiBvbmUgb3BlcmF0aW9uLiAqLwogICBpZiAoYml0X29i c3RhY2spCiAgICAgewogICAgICAgZWx0LT5wcmV2ID0gYml0X29ic3RhY2st PmVsZW1lbnRzOwpAQCAtMjk2LDE0ICsyNjksNDgxIEBAIGJpdG1hcF9lbHRf Y2xlYXJfZnJvbSAoYml0bWFwIGhlYWQsIGJpdG0KICAgICAgIGJpdG1hcF9n Z2NfZnJlZSA9IGVsdDsKICAgICB9CiB9CisMCisvKiBMaW5rZWQtbGlzdCB2 aWV3IG9mIGJpdG1hcHMuCisKKyAgIEluIHRoaXMgcmVwcmVzZW50YXRpb24s IHRoZSBiaXRtYXAgZWxlbWVudHMgZm9ybSBhIGRvdWJsZS1saW5rZWQgbGlz dAorICAgd2l0aCBlbGVtZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBpbmRl eC4gICovCisKKy8qIExpbmsgdGhlIGJpdG1hcCBlbGVtZW50IGludG8gdGhl IGN1cnJlbnQgYml0bWFwIGxpbmtlZCBsaXN0LiAgKi8KKworc3RhdGljIGlu bGluZSB2b2lkCitiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQgKGJpdG1hcCBo ZWFkLCBiaXRtYXBfZWxlbWVudCAqZWxlbWVudCkKK3sKKyAgdW5zaWduZWQg aW50IGluZHggPSBlbGVtZW50LT5pbmR4OworICBiaXRtYXBfZWxlbWVudCAq cHRyOworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zv cm0pOworCisgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGVs ZW1lbnQsIHNldCBpdCBpbi4gICovCisgIGlmIChoZWFkLT5maXJzdCA9PSAw KQorICAgIHsKKyAgICAgIGVsZW1lbnQtPm5leHQgPSBlbGVtZW50LT5wcmV2 ID0gMDsKKyAgICAgIGhlYWQtPmZpcnN0ID0gZWxlbWVudDsKKyAgICB9CisK KyAgLyogSWYgdGhpcyBpbmRleCBpcyBsZXNzIHRoYW4gdGhhdCBvZiB0aGUg Y3VycmVudCBlbGVtZW50LCBpdCBnb2VzIHNvbWVwbGFjZQorICAgICBiZWZv cmUgdGhlIGN1cnJlbnQgZWxlbWVudC4gICovCisgIGVsc2UgaWYgKGluZHgg PCBoZWFkLT5pbmR4KQorICAgIHsKKyAgICAgIGZvciAocHRyID0gaGVhZC0+ Y3VycmVudDsKKwkgICBwdHItPnByZXYgIT0gMCAmJiBwdHItPnByZXYtPmlu ZHggPiBpbmR4OworCSAgIHB0ciA9IHB0ci0+cHJldikKKwk7CisKKyAgICAg IGlmIChwdHItPnByZXYpCisJcHRyLT5wcmV2LT5uZXh0ID0gZWxlbWVudDsK KyAgICAgIGVsc2UKKwloZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisKKyAgICAg IGVsZW1lbnQtPnByZXYgPSBwdHItPnByZXY7CisgICAgICBlbGVtZW50LT5u ZXh0ID0gcHRyOworICAgICAgcHRyLT5wcmV2ID0gZWxlbWVudDsKKyAgICB9 CisKKyAgLyogT3RoZXJ3aXNlLCBpdCBtdXN0IGdvIHNvbWVwbGFjZSBhZnRl ciB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgZWxzZQorICAgIHsKKyAg ICAgIGZvciAocHRyID0gaGVhZC0+Y3VycmVudDsKKwkgICBwdHItPm5leHQg IT0gMCAmJiBwdHItPm5leHQtPmluZHggPCBpbmR4OworCSAgIHB0ciA9IHB0 ci0+bmV4dCkKKwk7CisKKyAgICAgIGlmIChwdHItPm5leHQpCisJcHRyLT5u ZXh0LT5wcmV2ID0gZWxlbWVudDsKKworICAgICAgZWxlbWVudC0+bmV4dCA9 IHB0ci0+bmV4dDsKKyAgICAgIGVsZW1lbnQtPnByZXYgPSBwdHI7CisgICAg ICBwdHItPm5leHQgPSBlbGVtZW50OworICAgIH0KKworICAvKiBTZXQgdXAg c28gdGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBzZWFyY2hlZC4gICovCisg IGhlYWQtPmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gaW5k eDsKK30KKworLyogVW5saW5rIHRoZSBiaXRtYXAgZWxlbWVudCBmcm9tIHRo ZSBjdXJyZW50IGJpdG1hcCBsaW5rZWQgbGlzdCwKKyAgIGFuZCByZXR1cm4g aXQgdG8gdGhlIGZyZWVsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lk CitiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYml0bWFwIGhlYWQsIGJp dG1hcF9lbGVtZW50ICplbGVtZW50KQoreworICBiaXRtYXBfZWxlbWVudCAq bmV4dCA9IGVsZW1lbnQtPm5leHQ7CisgIGJpdG1hcF9lbGVtZW50ICpwcmV2 ID0gZWxlbWVudC0+cHJldjsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh aGVhZC0+dHJlZV9mb3JtKTsKKworICBpZiAocHJldikKKyAgICBwcmV2LT5u ZXh0ID0gbmV4dDsKKworICBpZiAobmV4dCkKKyAgICBuZXh0LT5wcmV2ID0g cHJldjsKKworICBpZiAoaGVhZC0+Zmlyc3QgPT0gZWxlbWVudCkKKyAgICBo ZWFkLT5maXJzdCA9IG5leHQ7CisKKyAgLyogU2luY2UgdGhlIGZpcnN0IHRo aW5nIHdlIHRyeSBpcyB0byBpbnNlcnQgYmVmb3JlIGN1cnJlbnQsCisgICAg IG1ha2UgY3VycmVudCB0aGUgbmV4dCBlbnRyeSBpbiBwcmVmZXJlbmNlIHRv IHRoZSBwcmV2aW91cy4gICovCisgIGlmIChoZWFkLT5jdXJyZW50ID09IGVs ZW1lbnQpCisgICAgeworICAgICAgaGVhZC0+Y3VycmVudCA9IG5leHQgIT0g MCA/IG5leHQgOiBwcmV2OworICAgICAgaWYgKGhlYWQtPmN1cnJlbnQpCisJ aGVhZC0+aW5keCA9IGhlYWQtPmN1cnJlbnQtPmluZHg7CisgICAgICBlbHNl CisJaGVhZC0+aW5keCA9IDA7CisgICAgfQorCisgIGJpdG1hcF9lbGVtX3Rv X2ZyZWVsaXN0IChoZWFkLCBlbGVtZW50KTsKK30KKworLyogSW5zZXJ0IGEg bmV3IHVuaW5pdGlhbGl6ZWQgZWxlbWVudCBpbnRvIGJpdG1hcCBIRUFEIGFm dGVyIGVsZW1lbnQKKyAgIEVMVC4gIElmIEVMVCBpcyBOVUxMLCBpbnNlcnQg dGhlIGVsZW1lbnQgYXQgdGhlIHN0YXJ0LiAgUmV0dXJuIHRoZQorICAgbmV3 IGVsZW1lbnQuICAqLworCitzdGF0aWMgYml0bWFwX2VsZW1lbnQgKgorYml0 bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGJpdG1hcCBoZWFkLAor CQkJCSAgYml0bWFwX2VsZW1lbnQgKmVsdCwgdW5zaWduZWQgaW50IGluZHgp Cit7CisgIGJpdG1hcF9lbGVtZW50ICpub2RlID0gYml0bWFwX2VsZW1lbnRf YWxsb2NhdGUgKGhlYWQpOworICBub2RlLT5pbmR4ID0gaW5keDsKKworICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9mb3JtKTsKKworICBp ZiAoIWVsdCkKKyAgICB7CisgICAgICBpZiAoIWhlYWQtPmN1cnJlbnQpCisJ eworCSAgaGVhZC0+Y3VycmVudCA9IG5vZGU7CisJICBoZWFkLT5pbmR4ID0g aW5keDsKKwl9CisgICAgICBub2RlLT5uZXh0ID0gaGVhZC0+Zmlyc3Q7Cisg ICAgICBpZiAobm9kZS0+bmV4dCkKKwlub2RlLT5uZXh0LT5wcmV2ID0gbm9k ZTsKKyAgICAgIGhlYWQtPmZpcnN0ID0gbm9kZTsKKyAgICAgIG5vZGUtPnBy ZXYgPSBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjY19j aGVja2luZ19hc3NlcnQgKGhlYWQtPmN1cnJlbnQpOworICAgICAgbm9kZS0+ bmV4dCA9IGVsdC0+bmV4dDsKKyAgICAgIGlmIChub2RlLT5uZXh0KQorCW5v ZGUtPm5leHQtPnByZXYgPSBub2RlOworICAgICAgZWx0LT5uZXh0ID0gbm9k ZTsKKyAgICAgIG5vZGUtPnByZXYgPSBlbHQ7CisgICAgfQorICByZXR1cm4g bm9kZTsKK30KKworLyogUmV0dXJuIHRoZSBlbGVtZW50IGZvciBJTkRYLCBv ciBOVUxMIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QuICAqLworCitz dGF0aWMgaW5saW5lIGJpdG1hcF9lbGVtZW50ICoKK2JpdG1hcF9saXN0X2Zp bmRfZWxlbWVudCAoYml0bWFwIGhlYWQsIHVuc2lnbmVkIGludCBpbmR4KQor eworICBiaXRtYXBfZWxlbWVudCAqZWxlbWVudDsKKyAgaWYgKGhlYWQtPmlu ZHggPCBpbmR4KQorICAgIC8qIElORFggaXMgYmV5b25kIGhlYWQtPmluZHgu ICBTZWFyY2ggZnJvbSBoZWFkLT5jdXJyZW50CisgICAgICAgZm9yd2FyZC4g ICovCisgICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Y3VycmVudDsKKwkgZWxl bWVudC0+bmV4dCAhPSAwICYmIGVsZW1lbnQtPmluZHggPCBpbmR4OworCSBl bGVtZW50ID0gZWxlbWVudC0+bmV4dCkKKyAgICAgIHsKKwlpZiAoR0FUSEVS X1NUQVRJU1RJQ1MpCisJICBiaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVz Y3JpcHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7CisgICAgICB9CisKKyAgZWxz ZSBpZiAoaGVhZC0+aW5keCAvIDIgPCBpbmR4KQorICAgIC8qIElORFggaXMg bGVzcyB0aGFuIGhlYWQtPmluZHggYW5kIGNsb3NlciB0byBoZWFkLT5pbmR4 IHRoYW4gdG8KKyAgICAgICAwLiAgU2VhcmNoIGZyb20gaGVhZC0+Y3VycmVu dCBiYWNrd2FyZC4gICovCisgICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Y3Vy cmVudDsKKwkgZWxlbWVudC0+cHJldiAhPSAwICYmIGVsZW1lbnQtPmluZHgg PiBpbmR4OworCSBlbGVtZW50ID0gZWxlbWVudC0+cHJldikKKyAgICAgIHsK KwlpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCisJICBiaXRtYXBfZGVzY3JpcHRv cnNbaGVhZC0+ZGVzY3JpcHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7CisgICAg ICB9CisKKyAgZWxzZQorICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhlYWQt PmluZHggYW5kIGNsb3NlciB0byAwIHRoYW4gdG8KKyAgICAgICBoZWFkLT5p bmR4LiAgU2VhcmNoIGZyb20gaGVhZC0+Zmlyc3QgZm9yd2FyZC4gICovCisg ICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Zmlyc3Q7CisJIGVsZW1lbnQtPm5l eHQgIT0gMCAmJiBlbGVtZW50LT5pbmR4IDwgaW5keDsKKwkgZWxlbWVudCA9 IGVsZW1lbnQtPm5leHQpCisgICAgICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1Mp CisJeworCSAgYml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3Jf aWRdLT5zZWFyY2hfaXRlcisrOworCX0KKworICAvKiBgZWxlbWVudCcgaXMg dGhlIG5lYXJlc3QgdG8gdGhlIG9uZSB3ZSB3YW50LiAgSWYgaXQncyBub3Qg dGhlIG9uZSB3ZQorICAgICB3YW50LCB0aGUgb25lIHdlIHdhbnQgZG9lc24n dCBleGlzdC4gICovCisgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsZW1lbnQg IT0gTlVMTCk7CisgIGhlYWQtPmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFk LT5pbmR4ID0gZWxlbWVudC0+aW5keDsKKyAgaWYgKGVsZW1lbnQtPmluZHgg IT0gaW5keCkKKyAgICBlbGVtZW50ID0gMDsKKyAgcmV0dXJuIGVsZW1lbnQ7 Cit9CisKKwwKKy8qIFNwbGF5LXRyZWUgdmlldyBvZiBiaXRtYXBzLgorCisg ICBUaGlzIGlzIGFuIGFsbW9zdCBvbmUtdG8tb25lIHRoZSBpbXBsZW1lbnRh dGluIG9mIHRoZSBzaW1wbGUgdG9wLWRvd24KKyAgIHNwbGF5IHRyZWUgaW4g U2xlYXRvciBhbmQgVGFyamFuJ3MgIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBT ZWFyY2ggVHJlZXMiLgorICAgSXQgaXMgcHJvYmFibHkgbm90IHRoZSBtb3N0 IGVmZmljaWVudCBmb3JtIG9mIHNwbGF5IHRyZWVzLCBidXQgaXQgc2hvdWxk CisgICBiZSBnb29kIGVub3VnaCB0byBleHBlcmltZW50IHdpdGggdGhpcyBp ZGVhIG9mIGJpdG1hcHMtYXMtdHJlZXMuCisgICAKKyAgIEZvciBhbGwgZnVu Y3Rpb25zIGJlbG93LCB0aGUgdmFyaWFibGUgb3IgZnVuY3Rpb24gYXJndW1l bnQgInQiIGlzIGEgbm9kZQorICAgaW4gdGhlIHRyZWUsIGFuZCAiZSIgaXMg YSB0ZW1wb3Jhcnkgb3IgbmV3IG5vZGUgaW4gdGhlIHRyZWUuICBUaGUgcmVz dAorICAgaXMgc3VmZmljaWVudGx5IHN0cmFpZ2gtZm9yd2FyZCAoYW5kIHZl cnkgd2VsbCBleHBsYWluZWQgaW4gdGhlIHBhcGVyKQorICAgdGhhdCBjb21t ZW50IHdvdWxkIG9ubHkgY2x1dHRlciB0aGluZ3MuICAqLworCitzdGF0aWMg aW5saW5lIHZvaWQKK2JpdG1hcF90cmVlX2xpbmtfbGVmdCAoYml0bWFwX2Vs ZW1lbnQgKiAmdCwgYml0bWFwX2VsZW1lbnQgKiAmbCkKK3sKKyAgbC0+bmV4 dCA9IHQ7CisgIGwgPSB0OworICB0ID0gdC0+bmV4dDsKK30KKworc3RhdGlj IGlubGluZSB2b2lkCitiaXRtYXBfdHJlZV9saW5rX3JpZ2h0IChiaXRtYXBf ZWxlbWVudCAqICZ0LCBiaXRtYXBfZWxlbWVudCAqICZyKQoreworICByLT5w cmV2ID0gdDsKKyAgciA9IHQ7CisgIHQgPSB0LT5wcmV2OworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK2JpdG1hcF90cmVlX3JvdGF0ZV9sZWZ0IChiaXRt YXBfZWxlbWVudCAqICZ0KQoreworICBiaXRtYXBfZWxlbWVudCAqZSA9IHQt Pm5leHQ7CisgIHQtPm5leHQgPSB0LT5uZXh0LT5wcmV2OworICBlLT5wcmV2 ID0gdDsKKyAgdCA9IGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0 bWFwX3RyZWVfcm90YXRlX3JpZ2h0IChiaXRtYXBfZWxlbWVudCAqICZ0KQor eworICBiaXRtYXBfZWxlbWVudCAqZSA9IHQtPnByZXY7CisgIHQtPnByZXYg PSB0LT5wcmV2LT5uZXh0OworICBlLT5uZXh0ID0gdDsKKyAgdCA9IGU7Cit9 CisKK3N0YXRpYyBiaXRtYXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9zcGxh eSAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50ICp0LCB1bnNpZ25lZCBp bnQgaW5keCkKK3sKKyAgYml0bWFwX2VsZW1lbnQgTiwgKmwsICpyOworCisg IGlmICh0ID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgTi5wcmV2 ID0gTi5uZXh0ID0gTlVMTDsKKyAgbCA9IHIgPSAmTjsKKworICB3aGlsZSAo aW5keCAhPSB0LT5pbmR4KQorICAgIHsKKyAgICAgIGlmIChHQVRIRVJfU1RB VElTVElDUykKKwliaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVzY3JpcHRv cl9pZF0tPnNlYXJjaF9pdGVyKys7CisKKyAgICAgIGlmIChpbmR4IDwgdC0+ aW5keCkKKwl7CisJICBpZiAodC0+cHJldiAhPSBOVUxMICYmIGluZHggPCB0 LT5wcmV2LT5pbmR4KQorCSAgICBiaXRtYXBfdHJlZV9yb3RhdGVfcmlnaHQg KHQpOworCSAgaWYgKHQtPnByZXYgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJ ICBiaXRtYXBfdHJlZV9saW5rX3JpZ2h0ICh0LCByKTsKKwl9CisgICAgICBl bHNlIGlmIChpbmR4ID4gdC0+aW5keCkKKwl7CisJICBpZiAodC0+bmV4dCAh PSBOVUxMICYmIGluZHggPiB0LT5uZXh0LT5pbmR4KQorCSAgICBiaXRtYXBf dHJlZV9yb3RhdGVfbGVmdCAodCk7CisJICBpZiAodC0+bmV4dCA9PSBOVUxM KQorCSAgICBicmVhazsKKwkgIGJpdG1hcF90cmVlX2xpbmtfbGVmdCAodCwg bCk7CisJfQorICAgIH0KKworICBsLT5uZXh0ID0gdC0+cHJldjsKKyAgci0+ cHJldiA9IHQtPm5leHQ7CisgIHQtPnByZXYgPSBOLm5leHQ7CisgIHQtPm5l eHQgPSBOLnByZXY7CisgIHJldHVybiB0OworfQorCisvKiBMaW5rIGJpdG1h cCBlbGVtZW50IEUgaW50byB0aGUgY3VycmVudCBiaXRtYXAgc3BsYXkgdHJl ZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfbGlu a19lbGVtZW50IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmUpCit7 CisgIGlmIChoZWFkLT5maXJzdCA9PSBOVUxMKQorICAgIGUtPnByZXYgPSBl LT5uZXh0ID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdG1hcF9l bGVtZW50ICp0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZp cnN0LCBlLT5pbmR4KTsKKyAgICAgIGlmIChlLT5pbmR4IDwgdC0+aW5keCkK Kwl7CisJICBlLT5wcmV2ID0gdC0+cHJldjsKKwkgIGUtPm5leHQgPSB0Owor CSAgdC0+cHJldiA9IE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZS0+aW5k eCA+IHQtPmluZHgpCisJeworCSAgZS0+bmV4dCA9IHQtPm5leHQ7CisJICBl LT5wcmV2ID0gdDsKKwkgIHQtPm5leHQgPSBOVUxMOworCX0KKyAgICAgIGVs c2UKKwlnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorICBoZWFkLT5maXJz dCA9IGU7CisgIGhlYWQtPmN1cnJlbnQgPSBlOworICBoZWFkLT5pbmR4ID0g ZS0+aW5keDsKK30KKworLyogVW5saW5rIGJpdG1hcCBlbGVtZW50IEUgZnJv bSB0aGUgY3VycmVudCBiaXRtYXAgc3BsYXkgdHJlZSwKKyAgIGFuZCByZXR1 cm4gaXQgdG8gdGhlIGZyZWVsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2Jp dG1hcF90cmVlX3VubGlua19lbGVtZW50IChiaXRtYXAgaGVhZCwgYml0bWFw X2VsZW1lbnQgKmUpCit7CisgIGJpdG1hcF9lbGVtZW50ICp0ID0gYml0bWFw X3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5pbmR4KTsKKwor ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICh0ID09IGUpOworCisgIGlmIChlLT5w cmV2ID09IE5VTEwpCisgICAgdCA9IGUtPm5leHQ7CisgIGVsc2UKKyAgICB7 CisgICAgICB0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGUtPnByZXYs IGUtPmluZHgpOworICAgICAgdC0+bmV4dCA9IGUtPm5leHQ7CisgICAgfQor ICBoZWFkLT5maXJzdCA9IHQ7CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBo ZWFkLT5pbmR4ID0gKHQgIT0gTlVMTCkgPyB0LT5pbmR4IDogMDsKKworICBi aXRtYXBfZWxlbV90b19mcmVlbGlzdCAoaGVhZCwgZSk7Cit9CisKKy8qIFJl dHVybiB0aGUgZWxlbWVudCBmb3IgSU5EWCwgb3IgTlVMTCBpZiB0aGUgZWxl bWVudCBkb2Vzbid0IGV4aXN0LiAgKi8KKworc3RhdGljIGlubGluZSBiaXRt YXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9maW5kX2VsZW1lbnQgKGJpdG1h cCBoZWFkLCB1bnNpZ25lZCBpbnQgaW5keCkKK3sKKyAgYml0bWFwX2VsZW1l bnQgKmVsZW1lbnQgPSBiaXRtYXBfdHJlZV9zcGxheSAoaGVhZCwgaGVhZC0+ Zmlyc3QsIGluZHgpOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChlbGVtZW50 ICE9IE5VTEwpOworICBoZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisgIGhlYWQt PmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gZWxlbWVudC0+ aW5keDsKKyAgaWYgKGVsZW1lbnQtPmluZHggIT0gaW5keCkKKyAgICBlbGVt ZW50ID0gMDsKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9CisMCisvKiBDb252ZXJ0 aW5nIGJpdG1hcCB2aWV3cyBmcm9tIGxpbmtlZC1saXN0IHRvIHRyZWUgYW5k IHZpY2UgdmVyc2EuICAqLworCisvKiBTcGxpY2UgZWxlbWVudCBFIGFuZCBh bGwgZWxlbWVudHMgd2l0aCBhIGxhcmdlciBpbmRleCBmcm9tCisgICBiaXRt YXAgSEVBRCwgY29udmVydCB0aGUgc3BsaWNlZCBlbGVtZW50cyB0byB0aGUg bGlua2VkLWxpc3QKKyAgIHZpZXcsIGFuZCByZXR1cm4gdGhlIGhlYWQgb2Yg dGhlIGxpc3QgKHdoaWNoIHNob3VsZCBiZSBFIGFnYWluKSwgICovCisKK3N0 YXRpYyBiaXRtYXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9saXN0aWZ5X2Zy b20gKGJpdG1hcCBoZWFkLCBiaXRtYXBfZWxlbWVudCAqZSkKK3sKKyAgYml0 bWFwX2VsZW1lbnQgKnQsICplcmI7CisKKyAgLyogRGV0YWNoIHRoZSByaWdo dCBicmFuY2ggZnJvbSBFIChhbGwgZWxlbWVudHMgd2l0aCBpbmR4ID4gRS0+ aW5keCksCisgICAgIGFuZCBzcGxheSBFIHRvIHRoZSByb290LiAgKi8KKyAg ZXJiID0gZS0+bmV4dDsKKyAgZS0+bmV4dCA9IE5VTEw7CisgIHQgPSBiaXRt YXBfdHJlZV9zcGxheSAoaGVhZCwgaGVhZC0+Zmlyc3QsIGUtPmluZHgpOwor ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICh0ID09IGUpOworCisgIC8qIEJlY2F1 c2UgRSBoYXMgbm8gcmlnaHQgYnJhbmNoLCBhbmQgd2Ugcm90YXRlZCBpdCB0 byB0aGUgcm9vdCwKKyAgICAgdGhlIGxlZnQgYnJhbmNoIGlzIHRoZSBuZXcg cm9vdC4gICovCisgIHQgPSBlLT5wcmV2OworICBoZWFkLT5maXJzdCA9IHQ7 CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBoZWFkLT5pbmR4ID0gKHQgIT0g TlVMTCkgPyB0LT5pbmR4IDogMDsKKworICAvKiBEZXRhY2ggdGhlIHRyZWUg ZnJvbSBFLCBhbmQgcmUtYXR0YWNoIHRoZSByaWdodCBicmFuY2ggb2YgRS4g ICovCisgIGUtPnByZXYgPSBOVUxMOworICBlLT5uZXh0ID0gZXJiOworCisg IC8qIFRoZSB0cmVlIGlzIG5vdyB2YWxpZCBhZ2Fpbi4gIE5vdyB3ZSBuZWVk IHRvICJ1bi10cmVlIiBFLgorICAgICBJdCBpcyBpbXBlcmF0aXZlIHRoYXQg YSBub24tcmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIGlzIHVzZWQKKyAgICAg Zm9yIHRoaXMsIGJlY2F1c2Ugc3BsYXkgdHJlZXMgaGF2ZSBhIHdvcnN0IGNh c2UgZGVwdGggb2YgTyhOKQorICAgICBmb3IgYSB0cmVlIHdpdGggTiBub2Rl cy4gIEEgcmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIGNvdWxkCisgICAgIHJl c3VsdCBpbiBhIHN0YWNrIG92ZXJmbG93IGZvciBhIHN1ZmZpY2llbnRseSBs YXJnZSwgdW5iYWxhbmNlZAorICAgICBiaXRtYXAgdHJlZS4gICovCisKKyAg dmVjPGJpdG1hcF9lbGVtZW50ICo+IHN0YWNrID0gdk5VTEw7CisgIHZlYzxi aXRtYXBfZWxlbWVudCAqPiBzb3J0ZWRfZWxlbWVudHMgPSB2TlVMTDsKKyAg Yml0bWFwX2VsZW1lbnQgKm4gPSBlOworCisgIHdoaWxlICh0cnVlKQorICAg IHsKKyAgICAgIHdoaWxlIChuICE9IE5VTEwpCisJeworCSAgc3RhY2suc2Fm ZV9wdXNoIChuKTsKKwkgIG4gPSBuLT5wcmV2OworCX0KKworICAgICAgaWYg KHN0YWNrLmlzX2VtcHR5ICgpKQorCWJyZWFrOworCisgICAgICBuID0gc3Rh Y2sucG9wICgpOworICAgICAgc29ydGVkX2VsZW1lbnRzLnNhZmVfcHVzaCAo bik7CisgICAgICBuID0gbi0+bmV4dDsKKyAgICB9CisgIHN0YWNrLnJlbGVh c2UgKCk7CisKKyAgZ2NjX2Fzc2VydCAoc29ydGVkX2VsZW1lbnRzWzBdID09 IGUpOworCisgIGJpdG1hcF9lbGVtZW50ICpwcmV2ID0gTlVMTDsKKyAgdW5z aWduZWQgaXg7CisgIEZPUl9FQUNIX1ZFQ19FTFQgKHNvcnRlZF9lbGVtZW50 cywgaXgsIG4pCisgICAgeworICAgICAgaWYgKHByZXYgIT0gTlVMTCkKKyAg ICAgICAgcHJldi0+bmV4dCA9IG47CisgICAgICBuLT5wcmV2ID0gcHJldjsK KyAgICAgIG4tPm5leHQgPSBOVUxMOworICAgICAgcHJldiA9IG47CisgICAg fQorICBzb3J0ZWRfZWxlbWVudHMucmVsZWFzZSAoKTsKKworICByZXR1cm4g ZTsKK30KIAotLyogQ2xlYXIgYSBiaXRtYXAgYnkgZnJlZWluZyB0aGUgbGlu a2VkIGxpc3QuICAqLworLyogQ29udmVydCBiaXRtYXAgSEVBRCBmcm9tIHNw bGF5LXRyZWUgdmlldyB0byBsaW5rZWQtbGlzdCB2aWV3LiAgKi8KKwordm9p ZAorYml0bWFwX2xpc3RfdmlldyAoYml0bWFwIGhlYWQpCit7CisgIGJpdG1h cF9lbGVtZW50ICpwdHI7CisKKyAgZ2NjX2Fzc2VydCAoaGVhZC0+dHJlZV9m b3JtKTsKKworICBwdHIgPSBoZWFkLT5maXJzdDsKKyAgaWYgKHB0cikKKyAg ICB7CisgICAgICB3aGlsZSAocHRyLT5wcmV2KQorCWJpdG1hcF90cmVlX3Jv dGF0ZV9yaWdodCAocHRyKTsKKyAgICAgIGhlYWQtPmZpcnN0ID0gcHRyOwor ICAgICAgaGVhZC0+Zmlyc3QgPSBiaXRtYXBfdHJlZV9saXN0aWZ5X2Zyb20g KGhlYWQsIHB0cik7CisgICAgfQorCisgIGhlYWQtPnRyZWVfZm9ybSA9IDA7 Cit9CisKKy8qIENvbnZlcnQgYml0bWFwIEhFQUQgZnJvbSBsaW5rZWQtbGlz dCB2aWV3IHRvIHNwbGF5LXRyZWUgdmlldy4KKyAgIFRoaXMgaXMgc2ltcGx5 IGEgbWF0dGVyIG9mIGRyb3BwaW5nIHRoZSBwcmV2IG9yIG5leHQgcG9pbnRl cnMKKyAgIGFuZCBzZXR0aW5nIHRoZSB0cmVlX2Zvcm0gZmxhZy4gIFRoZSB0 cmVlIHdpbGwgYmFsYW5jZSBpdHNlbGYKKyAgIGlmIGFuZCB3aGVuIGl0IGlz IHVzZWQuICAqLworCit2b2lkCitiaXRtYXBfdHJlZV92aWV3IChiaXRtYXAg aGVhZCkKK3sKKyAgYml0bWFwX2VsZW1lbnQgKnB0cjsKKworICBnY2NfYXNz ZXJ0ICghIGhlYWQtPnRyZWVfZm9ybSk7CisKKyAgcHRyID0gaGVhZC0+Zmly c3Q7CisgIHdoaWxlIChwdHIpCisgICAgeworICAgICAgcHRyLT5wcmV2ID0g TlVMTDsKKyAgICAgIHB0ciA9IHB0ci0+bmV4dDsKKyAgICB9CisKKyAgaGVh ZC0+dHJlZV9mb3JtID0gMTsKK30KKwwKKy8qIENsZWFyIGEgYml0bWFwIGJ5 IGZyZWVpbmcgYWxsIGl0cyBlbGVtZW50cy4gICovCiAKIHZvaWQKIGJpdG1h cF9jbGVhciAoYml0bWFwIGhlYWQpCiB7Ci0gIGlmIChoZWFkLT5maXJzdCkK LSAgICBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGhlYWQsIGhlYWQtPmZpcnN0 KTsKKyAgaWYgKGhlYWQtPmZpcnN0ID09IE5VTEwpCisgICAgcmV0dXJuOwor ICBpZiAoaGVhZC0+dHJlZV9mb3JtKQorICAgIHsKKyAgICAgIGJpdG1hcF9l bGVtZW50ICplLCAqdDsKKyAgICAgIGZvciAoZSA9IGhlYWQtPmZpcnN0OyBl LT5wcmV2OyBlID0gZS0+cHJldikKKwkvKiBMb29wIHRvIGZpbmQgdGhlIGVs ZW1lbnQgd2l0aCB0aGUgc21hbGxlc3QgaW5kZXguICAqLyA7CisgICAgICB0 ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5p bmR4KTsKKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHQgPT0gZSk7Cisg ICAgICBoZWFkLT5maXJzdCA9IHQ7CisgICAgfQorICBiaXRtYXBfZWx0X2Ns ZWFyX2Zyb20gKGhlYWQsIGhlYWQtPmZpcnN0KTsKIH0KIAwKIC8qIEluaXRp YWxpemUgYSBiaXRtYXAgb2JzdGFjay4gIElmIEJJVF9PQlNUQUNLIGlzIE5V TEwsIGluaXRpYWxpemUKQEAgLTQyNyw5NiArODY3LDYgQEAgYml0bWFwX2Vs ZW1lbnRfemVyb3AgKGNvbnN0IGJpdG1hcF9lbGVtZQogI2VuZGlmCiB9CiAM Ci0vKiBMaW5rIHRoZSBiaXRtYXAgZWxlbWVudCBpbnRvIHRoZSBjdXJyZW50 IGJpdG1hcCBsaW5rZWQgbGlzdC4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9p ZAotYml0bWFwX2VsZW1lbnRfbGluayAoYml0bWFwIGhlYWQsIGJpdG1hcF9l bGVtZW50ICplbGVtZW50KQotewotICB1bnNpZ25lZCBpbnQgaW5keCA9IGVs ZW1lbnQtPmluZHg7Ci0gIGJpdG1hcF9lbGVtZW50ICpwdHI7Ci0KLSAgLyog SWYgdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgZWxlbWVudCwgc2V0IGl0 IGluLiAgKi8KLSAgaWYgKGhlYWQtPmZpcnN0ID09IDApCi0gICAgewotICAg ICAgZWxlbWVudC0+bmV4dCA9IGVsZW1lbnQtPnByZXYgPSAwOwotICAgICAg aGVhZC0+Zmlyc3QgPSBlbGVtZW50OwotICAgIH0KLQotICAvKiBJZiB0aGlz IGluZGV4IGlzIGxlc3MgdGhhbiB0aGF0IG9mIHRoZSBjdXJyZW50IGVsZW1l bnQsIGl0IGdvZXMgc29tZXBsYWNlCi0gICAgIGJlZm9yZSB0aGUgY3VycmVu dCBlbGVtZW50LiAgKi8KLSAgZWxzZSBpZiAoaW5keCA8IGhlYWQtPmluZHgp Ci0gICAgewotICAgICAgZm9yIChwdHIgPSBoZWFkLT5jdXJyZW50OwotCSAg IHB0ci0+cHJldiAhPSAwICYmIHB0ci0+cHJldi0+aW5keCA+IGluZHg7Ci0J ICAgcHRyID0gcHRyLT5wcmV2KQotCTsKLQotICAgICAgaWYgKHB0ci0+cHJl dikKLQlwdHItPnByZXYtPm5leHQgPSBlbGVtZW50OwotICAgICAgZWxzZQot CWhlYWQtPmZpcnN0ID0gZWxlbWVudDsKLQotICAgICAgZWxlbWVudC0+cHJl diA9IHB0ci0+cHJldjsKLSAgICAgIGVsZW1lbnQtPm5leHQgPSBwdHI7Ci0g ICAgICBwdHItPnByZXYgPSBlbGVtZW50OwotICAgIH0KLQotICAvKiBPdGhl cndpc2UsIGl0IG11c3QgZ28gc29tZXBsYWNlIGFmdGVyIHRoZSBjdXJyZW50 IGVsZW1lbnQuICAqLwotICBlbHNlCi0gICAgewotICAgICAgZm9yIChwdHIg PSBoZWFkLT5jdXJyZW50OwotCSAgIHB0ci0+bmV4dCAhPSAwICYmIHB0ci0+ bmV4dC0+aW5keCA8IGluZHg7Ci0JICAgcHRyID0gcHRyLT5uZXh0KQotCTsK LQotICAgICAgaWYgKHB0ci0+bmV4dCkKLQlwdHItPm5leHQtPnByZXYgPSBl bGVtZW50OwotCi0gICAgICBlbGVtZW50LT5uZXh0ID0gcHRyLT5uZXh0Owot ICAgICAgZWxlbWVudC0+cHJldiA9IHB0cjsKLSAgICAgIHB0ci0+bmV4dCA9 IGVsZW1lbnQ7Ci0gICAgfQotCi0gIC8qIFNldCB1cCBzbyB0aGlzIGlzIHRo ZSBmaXJzdCBlbGVtZW50IHNlYXJjaGVkLiAgKi8KLSAgaGVhZC0+Y3VycmVu dCA9IGVsZW1lbnQ7Ci0gIGhlYWQtPmluZHggPSBpbmR4OwotfQotCi0vKiBJ bnNlcnQgYSBuZXcgdW5pbml0aWFsaXplZCBlbGVtZW50IGludG8gYml0bWFw IEhFQUQgYWZ0ZXIgZWxlbWVudAotICAgRUxULiAgSWYgRUxUIGlzIE5VTEws IGluc2VydCB0aGUgZWxlbWVudCBhdCB0aGUgc3RhcnQuICBSZXR1cm4gdGhl Ci0gICBuZXcgZWxlbWVudC4gICovCi0KLXN0YXRpYyBiaXRtYXBfZWxlbWVu dCAqCi1iaXRtYXBfZWx0X2luc2VydF9hZnRlciAoYml0bWFwIGhlYWQsIGJp dG1hcF9lbGVtZW50ICplbHQsIHVuc2lnbmVkIGludCBpbmR4KQotewotICBi aXRtYXBfZWxlbWVudCAqbm9kZSA9IGJpdG1hcF9lbGVtZW50X2FsbG9jYXRl IChoZWFkKTsKLSAgbm9kZS0+aW5keCA9IGluZHg7Ci0KLSAgaWYgKCFlbHQp Ci0gICAgewotICAgICAgaWYgKCFoZWFkLT5jdXJyZW50KQotCXsKLQkgIGhl YWQtPmN1cnJlbnQgPSBub2RlOwotCSAgaGVhZC0+aW5keCA9IGluZHg7Ci0J fQotICAgICAgbm9kZS0+bmV4dCA9IGhlYWQtPmZpcnN0OwotICAgICAgaWYg KG5vZGUtPm5leHQpCi0Jbm9kZS0+bmV4dC0+cHJldiA9IG5vZGU7Ci0gICAg ICBoZWFkLT5maXJzdCA9IG5vZGU7Ci0gICAgICBub2RlLT5wcmV2ID0gTlVM TDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBnY2NfY2hlY2tpbmdf YXNzZXJ0IChoZWFkLT5jdXJyZW50KTsKLSAgICAgIG5vZGUtPm5leHQgPSBl bHQtPm5leHQ7Ci0gICAgICBpZiAobm9kZS0+bmV4dCkKLQlub2RlLT5uZXh0 LT5wcmV2ID0gbm9kZTsKLSAgICAgIGVsdC0+bmV4dCA9IG5vZGU7Ci0gICAg ICBub2RlLT5wcmV2ID0gZWx0OwotICAgIH0KLSAgcmV0dXJuIG5vZGU7Ci19 Ci0MCiAvKiBDb3B5IGEgYml0bWFwIHRvIGFub3RoZXIgYml0bWFwLiAgKi8K IAogdm9pZApAQCAtNTI1LDYgKzg3NSw4IEBAIGJpdG1hcF9jb3B5IChiaXRt YXAgdG8sIGNvbnN0X2JpdG1hcCBmcm8KICAgY29uc3QgYml0bWFwX2VsZW1l bnQgKmZyb21fcHRyOwogICBiaXRtYXBfZWxlbWVudCAqdG9fcHRyID0gMDsK IAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdG8tPnRyZWVfZm9ybSAmJiAh ZnJvbS0+dHJlZV9mb3JtKTsKKwogICBiaXRtYXBfY2xlYXIgKHRvKTsKIAog ICAvKiBDb3B5IGVsZW1lbnRzIGluIGZvcndhcmQgZGlyZWN0aW9uIG9uZSBh dCBhIHRpbWUuICAqLwpAQCAtNTM1LDggKzg4Nyw5IEBAIGJpdG1hcF9jb3B5 IChiaXRtYXAgdG8sIGNvbnN0X2JpdG1hcCBmcm8KICAgICAgIHRvX2VsdC0+ aW5keCA9IGZyb21fcHRyLT5pbmR4OwogICAgICAgbWVtY3B5ICh0b19lbHQt PmJpdHMsIGZyb21fcHRyLT5iaXRzLCBzaXplb2YgKHRvX2VsdC0+Yml0cykp OwogCi0gICAgICAvKiBIZXJlIHdlIGhhdmUgYSBzcGVjaWFsIGNhc2Ugb2Yg Yml0bWFwX2VsZW1lbnRfbGluaywgZm9yIHRoZSBjYXNlCi0JIHdoZXJlIHdl IGtub3cgdGhlIGxpbmtzIGFyZSBiZWluZyBlbnRlcmVkIGluIHNlcXVlbmNl LiAgKi8KKyAgICAgIC8qIEhlcmUgd2UgaGF2ZSBhIHNwZWNpYWwgY2FzZSBv ZiBiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQsCisgICAgICAgICBmb3IgdGhl IGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgbGlua3MgYXJlIGJlaW5nIGVudGVy ZWQKKwkgaW4gc2VxdWVuY2UuICAqLwogICAgICAgaWYgKHRvX3B0ciA9PSAw KQogCXsKIAkgIHRvLT5maXJzdCA9IHRvLT5jdXJyZW50ID0gdG9fZWx0OwpA QCAtNTcyLDQ1ICs5MjUsMTAgQEAgYml0bWFwX2ZpbmRfYml0IChiaXRtYXAg aGVhZCwgdW5zaWduZWQgaQogICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCiAg ICAgYml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5u c2VhcmNoZXMrKzsKIAotICBpZiAoaGVhZC0+aW5keCA8IGluZHgpCi0gICAg LyogSU5EWCBpcyBiZXlvbmQgaGVhZC0+aW5keC4gIFNlYXJjaCBmcm9tIGhl YWQtPmN1cnJlbnQKLSAgICAgICBmb3J3YXJkLiAgKi8KLSAgICBmb3IgKGVs ZW1lbnQgPSBoZWFkLT5jdXJyZW50OwotCSBlbGVtZW50LT5uZXh0ICE9IDAg JiYgZWxlbWVudC0+aW5keCA8IGluZHg7Ci0JIGVsZW1lbnQgPSBlbGVtZW50 LT5uZXh0KQotICAgICAgewotCWlmIChHQVRIRVJfU1RBVElTVElDUykKLQkg IGJpdG1hcF9kZXNjcmlwdG9yc1toZWFkLT5kZXNjcmlwdG9yX2lkXS0+c2Vh cmNoX2l0ZXIrKzsKLSAgICAgIH0KLQotICBlbHNlIGlmIChoZWFkLT5pbmR4 IC8gMiA8IGluZHgpCi0gICAgLyogSU5EWCBpcyBsZXNzIHRoYW4gaGVhZC0+ aW5keCBhbmQgY2xvc2VyIHRvIGhlYWQtPmluZHggdGhhbiB0bwotICAgICAg IDAuICBTZWFyY2ggZnJvbSBoZWFkLT5jdXJyZW50IGJhY2t3YXJkLiAgKi8K LSAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5jdXJyZW50OwotCSBlbGVtZW50 LT5wcmV2ICE9IDAgJiYgZWxlbWVudC0+aW5keCA+IGluZHg7Ci0JIGVsZW1l bnQgPSBlbGVtZW50LT5wcmV2KQotICAgICAgewotCWlmIChHQVRIRVJfU1RB VElTVElDUykKLQkgIGJpdG1hcF9kZXNjcmlwdG9yc1toZWFkLT5kZXNjcmlw dG9yX2lkXS0+c2VhcmNoX2l0ZXIrKzsKLSAgICAgIH0KLQorICBpZiAoIWhl YWQtPnRyZWVfZm9ybSkKKyAgICBlbGVtZW50ID0gYml0bWFwX2xpc3RfZmlu ZF9lbGVtZW50IChoZWFkLCBpbmR4KTsKICAgZWxzZQotICAgIC8qIElORFgg aXMgbGVzcyB0aGFuIGhlYWQtPmluZHggYW5kIGNsb3NlciB0byAwIHRoYW4g dG8KLSAgICAgICBoZWFkLT5pbmR4LiAgU2VhcmNoIGZyb20gaGVhZC0+Zmly c3QgZm9yd2FyZC4gICovCi0gICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Zmly c3Q7Ci0JIGVsZW1lbnQtPm5leHQgIT0gMCAmJiBlbGVtZW50LT5pbmR4IDwg aW5keDsKLQkgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQpCi0gICAgICBpZiAo R0FUSEVSX1NUQVRJU1RJQ1MpCi0JewotCSAgYml0bWFwX2Rlc2NyaXB0b3Jz W2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5zZWFyY2hfaXRlcisrOwotCX0KLQot ICAvKiBgZWxlbWVudCcgaXMgdGhlIG5lYXJlc3QgdG8gdGhlIG9uZSB3ZSB3 YW50LiAgSWYgaXQncyBub3QgdGhlIG9uZSB3ZQotICAgICB3YW50LCB0aGUg b25lIHdlIHdhbnQgZG9lc24ndCBleGlzdC4gICovCi0gIGhlYWQtPmN1cnJl bnQgPSBlbGVtZW50OwotICBoZWFkLT5pbmR4ID0gZWxlbWVudC0+aW5keDsK LSAgaWYgKGVsZW1lbnQgIT0gMCAmJiBlbGVtZW50LT5pbmR4ICE9IGluZHgp Ci0gICAgZWxlbWVudCA9IDA7CisgICAgZWxlbWVudCA9IGJpdG1hcF90cmVl X2ZpbmRfZWxlbWVudCAoaGVhZCwgaW5keCk7CiAKICAgcmV0dXJuIGVsZW1l bnQ7CiB9CkBAIC02MzQsNyArOTUyLDEyIEBAIGJpdG1hcF9jbGVhcl9iaXQg KGJpdG1hcCBoZWFkLCBpbnQgYml0KQogCSAgLyogSWYgd2UgY2xlYXJlZCB0 aGUgZW50aXJlIHdvcmQsIGZyZWUgdXAgdGhlIGVsZW1lbnQuICAqLwogCSAg aWYgKCFwdHItPmJpdHNbd29yZF9udW1dCiAJICAgICAgJiYgYml0bWFwX2Vs ZW1lbnRfemVyb3AgKHB0cikpCi0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUg KGhlYWQsIHB0cik7CisJICAgIHsKKwkgICAgICBpZiAoIWhlYWQtPnRyZWVf Zm9ybSkKKwkJYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGhlYWQsIHB0 cik7CisJICAgICAgZWxzZQorCQliaXRtYXBfdHJlZV91bmxpbmtfZWxlbWVu dCAoaGVhZCwgcHRyKTsKKwkgICAgfQogCX0KIAogICAgICAgcmV0dXJuIHJl czsKQEAgLTY1MywyMSArOTc2LDIyIEBAIGJpdG1hcF9zZXRfYml0IChiaXRt YXAgaGVhZCwgaW50IGJpdCkKICAgdW5zaWduZWQgYml0X251bSAgPSBiaXQg JSBCSVRNQVBfV09SRF9CSVRTOwogICBCSVRNQVBfV09SRCBiaXRfdmFsID0g KChCSVRNQVBfV09SRCkgMSkgPDwgYml0X251bTsKIAotICBpZiAocHRyID09 IDApCi0gICAgewotICAgICAgcHRyID0gYml0bWFwX2VsZW1lbnRfYWxsb2Nh dGUgKGhlYWQpOwotICAgICAgcHRyLT5pbmR4ID0gYml0IC8gQklUTUFQX0VM RU1FTlRfQUxMX0JJVFM7Ci0gICAgICBwdHItPmJpdHNbd29yZF9udW1dID0g Yml0X3ZhbDsKLSAgICAgIGJpdG1hcF9lbGVtZW50X2xpbmsgKGhlYWQsIHB0 cik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIGVsc2UKKyAgaWYg KHB0ciAhPSAwKQogICAgIHsKICAgICAgIGJvb2wgcmVzID0gKHB0ci0+Yml0 c1t3b3JkX251bV0gJiBiaXRfdmFsKSA9PSAwOwogICAgICAgaWYgKHJlcykK IAlwdHItPmJpdHNbd29yZF9udW1dIHw9IGJpdF92YWw7CiAgICAgICByZXR1 cm4gcmVzOwogICAgIH0KKworICBwdHIgPSBiaXRtYXBfZWxlbWVudF9hbGxv Y2F0ZSAoaGVhZCk7CisgIHB0ci0+aW5keCA9IGJpdCAvIEJJVE1BUF9FTEVN RU5UX0FMTF9CSVRTOworICBwdHItPmJpdHNbd29yZF9udW1dID0gYml0X3Zh bDsKKyAgaWYgKCFoZWFkLT50cmVlX2Zvcm0pCisgICAgYml0bWFwX2xpc3Rf bGlua19lbGVtZW50IChoZWFkLCBwdHIpOworICBlbHNlCisgICAgYml0bWFw X3RyZWVfbGlua19lbGVtZW50IChoZWFkLCBwdHIpOworICByZXR1cm4gdHJ1 ZTsKIH0KIAogLyogUmV0dXJuIHdoZXRoZXIgYSBiaXQgaXMgc2V0IHdpdGhp biBhIGJpdG1hcC4gICovCkBAIC03MjQsMTMgKzEwNDgsMTQgQEAgYml0bWFw X2NvdW50X2JpdHMgKGNvbnN0X2JpdG1hcCBhKQogICBjb25zdCBiaXRtYXBf ZWxlbWVudCAqZWx0OwogICB1bnNpZ25lZCBpeDsKIAorICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtKTsKICAgZm9yIChlbHQgPSBhLT5m aXJzdDsgZWx0OyBlbHQgPSBlbHQtPm5leHQpCiAgICAgewogICAgICAgZm9y IChpeCA9IDA7IGl4ICE9IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsrKQog CXsKICNpZiBHQ0NfVkVSU0lPTiA+PSAzNDAwCi0gCSAgLyogTm90ZSB0aGF0 IHBvcGNvdW50bCBtYXRjaGVzIEJJVE1BUF9XT1JEIGluIHR5cGUsIHNvIHRo ZSBhY3R1YWwgc2l6ZQotCSBvZiBCSVRNQVBfV09SRCBpcyBub3QgbWF0ZXJp YWwuICAqLworIAkgIC8qIE5vdGUgdGhhdCBwb3Bjb3VudGwgbWF0Y2hlcyBC SVRNQVBfV09SRCBpbiB0eXBlLAorCSAgICAgc28gdGhlIGFjdHVhbCBzaXpl IG9mIEJJVE1BUF9XT1JEIGlzIG5vdCBtYXRlcmlhbC4gICovCiAJICBjb3Vu dCArPSBfX2J1aWx0aW5fcG9wY291bnRsIChlbHQtPmJpdHNbaXhdKTsKICNl bHNlCiAJICBjb3VudCArPSBiaXRtYXBfcG9wY291bnQgKGVsdC0+Yml0c1tp eF0pOwpAQCAtNzU0LDkgKzEwNzksMTEgQEAgYml0bWFwX3NpbmdsZV9iaXRf c2V0X3AgKGNvbnN0X2JpdG1hcCBhKQogICAgIHJldHVybiBmYWxzZTsKIAog ICBlbHQgPSBhLT5maXJzdDsKKwogICAvKiBBcyB0aGVyZSBhcmUgbm8gY29t cGxldGVseSBlbXB0eSBiaXRtYXAgZWxlbWVudHMsIGEgc2Vjb25kIG9uZQog ICAgICBtZWFucyB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYml0IHNldC4gICov Ci0gIGlmIChlbHQtPm5leHQgIT0gTlVMTCkKKyAgaWYgKGVsdC0+bmV4dCAh PSBOVUxMCisgICAgICAmJiAoIWEtPnRyZWVfZm9ybSB8fCBlbHQtPnByZXYg IT0gTlVMTCkpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIGZvciAoaXggPSAw OyBpeCAhPSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykKQEAgLTc4OCw2 ICsxMTE1LDExIEBAIGJpdG1hcF9maXJzdF9zZXRfYml0IChjb25zdF9iaXRt YXAgYSkKICAgdW5zaWduZWQgaXg7CiAKICAgZ2NjX2NoZWNraW5nX2Fzc2Vy dCAoZWx0KTsKKworICBpZiAoYS0+dHJlZV9mb3JtKQorICAgIHdoaWxlIChl bHQtPnByZXYpCisgICAgICBlbHQgPSBlbHQtPnByZXY7CisKICAgYml0X25v ID0gZWx0LT5pbmR4ICogQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7CiAgIGZv ciAoaXggPSAwOyBpeCAhPSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykK ICAgICB7CkBAIC04MzMsMTQgKzExNjUsMjAgQEAgYml0bWFwX2ZpcnN0X3Nl dF9iaXQgKGNvbnN0X2JpdG1hcCBhKQogdW5zaWduZWQKIGJpdG1hcF9sYXN0 X3NldF9iaXQgKGNvbnN0X2JpdG1hcCBhKQogewotICBjb25zdCBiaXRtYXBf ZWxlbWVudCAqZWx0ID0gYS0+Y3VycmVudCA/IGEtPmN1cnJlbnQgOiBhLT5m aXJzdDsKKyAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmVsdDsKICAgdW5zaWdu ZWQgYml0X25vOwogICBCSVRNQVBfV09SRCB3b3JkOwogICBpbnQgaXg7CiAK KyAgaWYgKGEtPnRyZWVfZm9ybSkKKyAgICBlbHQgPSBhLT5maXJzdDsKKyAg ZWxzZQorICAgIGVsdCA9IGEtPmN1cnJlbnQgPyBhLT5jdXJyZW50IDogYS0+ Zmlyc3Q7CiAgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsdCk7CisKICAgd2hp bGUgKGVsdC0+bmV4dCkKICAgICBlbHQgPSBlbHQtPm5leHQ7CisKICAgYml0 X25vID0gZWx0LT5pbmR4ICogQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7CiAg IGZvciAoaXggPSBCSVRNQVBfRUxFTUVOVF9XT1JEUyAtIDE7IGl4ID49IDA7 IGl4LS0pCiAgICAgewpAQCAtODgyLDYgKzEyMjAsNyBAQCBiaXRtYXBfYW5k IChiaXRtYXAgZHN0LCBjb25zdF9iaXRtYXAgYSwKICAgY29uc3QgYml0bWFw X2VsZW1lbnQgKmJfZWx0ID0gYi0+Zmlyc3Q7CiAgIGJpdG1hcF9lbGVtZW50 ICpkc3RfcHJldiA9IE5VTEw7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo IWRzdC0+dHJlZV9mb3JtICYmICFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVf Zm9ybSk7CiAgIGdjY19hc3NlcnQgKGRzdCAhPSBhICYmIGRzdCAhPSBiKTsK IAogICBpZiAoYSA9PSBiKQpAQCAtOTAzLDcgKzEyNDIsOCBAQCBiaXRtYXBf YW5kIChiaXRtYXAgZHN0LCBjb25zdF9iaXRtYXAgYSwKIAkgIEJJVE1BUF9X T1JEIGlvciA9IDA7CiAKIAkgIGlmICghZHN0X2VsdCkKLQkgICAgZHN0X2Vs dCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChkc3QsIGRzdF9wcmV2LCBh X2VsdC0+aW5keCk7CisJICAgIGRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNl cnRfZWxlbWVudF9hZnRlciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJCQlhX2Vs dC0+aW5keCk7CiAJICBlbHNlCiAJICAgIGRzdF9lbHQtPmluZHggPSBhX2Vs dC0+aW5keDsKIAkgIGZvciAoaXggPSAwOyBpeCA8IEJJVE1BUF9FTEVNRU5U X1dPUkRTOyBpeCsrKQpAQCAtOTQwLDYgKzEyODAsOCBAQCBiaXRtYXBfYW5k X2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXRtYXAKICAgYml0bWFwX2VsZW1l bnQgKm5leHQ7CiAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCisgIGdjY19j aGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9y bSk7CisKICAgaWYgKGEgPT0gYikKICAgICByZXR1cm4gZmFsc2U7CiAKQEAg LTk0OCw3ICsxMjkwLDcgQEAgYml0bWFwX2FuZF9pbnRvIChiaXRtYXAgYSwg Y29uc3RfYml0bWFwCiAgICAgICBpZiAoYV9lbHQtPmluZHggPCBiX2VsdC0+ aW5keCkKIAl7CiAJICBuZXh0ID0gYV9lbHQtPm5leHQ7Ci0JICBiaXRtYXBf ZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJICBiaXRtYXBfbGlzdF91bmxp bmtfZWxlbWVudCAoYSwgYV9lbHQpOwogCSAgYV9lbHQgPSBuZXh0OwogCSAg Y2hhbmdlZCA9IHRydWU7CiAJfQpAQCAtOTcwLDcgKzEzMTIsNyBAQCBiaXRt YXBfYW5kX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXRtYXAKIAkgICAgfQog CSAgbmV4dCA9IGFfZWx0LT5uZXh0OwogCSAgaWYgKCFpb3IpCi0JICAgIGJp dG1hcF9lbGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsKKwkgICAgYml0bWFwX2xp c3RfdW5saW5rX2VsZW1lbnQgKGEsIGFfZWx0KTsKIAkgIGFfZWx0ID0gbmV4 dDsKIAkgIGJfZWx0ID0gYl9lbHQtPm5leHQ7CiAJfQpAQCAtMTAxMiw3ICsx MzU0LDggQEAgYml0bWFwX2VsdF9jb3B5IChiaXRtYXAgZHN0LCBiaXRtYXBf ZWxlbQogICAgIHsKICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgaWYg KCFkc3RfZWx0KQotCWRzdF9lbHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRl ciAoZHN0LCBkc3RfcHJldiwgc3JjX2VsdC0+aW5keCk7CisJZHN0X2VsdCA9 IGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50X2FmdGVyIChkc3QsIGRzdF9w cmV2LAorCQkJCQkJICAgIHNyY19lbHQtPmluZHgpOwogICAgICAgZWxzZQog CWRzdF9lbHQtPmluZHggPSBzcmNfZWx0LT5pbmR4OwogICAgICAgbWVtY3B5 IChkc3RfZWx0LT5iaXRzLCBzcmNfZWx0LT5iaXRzLCBzaXplb2YgKGRzdF9l bHQtPmJpdHMpKTsKQEAgLTEwMzQsNiArMTM3Nyw3IEBAIGJpdG1hcF9hbmRf Y29tcGwgKGJpdG1hcCBkc3QsIGNvbnN0X2JpdG0KICAgYml0bWFwX2VsZW1l bnQgKipkc3RfcHJldl9wbmV4dCA9ICZkc3QtPmZpcnN0OwogICBib29sIGNo YW5nZWQgPSBmYWxzZTsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghZHN0 LT50cmVlX2Zvcm0gJiYgIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3Jt KTsKICAgZ2NjX2Fzc2VydCAoZHN0ICE9IGEgJiYgZHN0ICE9IGIpOwogCiAg IGlmIChhID09IGIpCkBAIC0xMDgyLDcgKzE0MjYsOCBAQCBiaXRtYXBfYW5k X2NvbXBsIChiaXRtYXAgZHN0LCBjb25zdF9iaXRtCiAJICAgICAgYm9vbCBu ZXdfZWxlbWVudDsKIAkgICAgICBpZiAoIWRzdF9lbHQgfHwgZHN0X2VsdC0+ aW5keCA+IGFfZWx0LT5pbmR4KQogCQl7Ci0JCSAgZHN0X2VsdCA9IGJpdG1h cF9lbHRfaW5zZXJ0X2FmdGVyIChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5k eCk7CisJCSAgZHN0X2VsdCA9IGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50 X2FmdGVyIChkc3QsIGRzdF9wcmV2LAorCQkJCQkJCSAgICAgIGFfZWx0LT5p bmR4KTsKIAkJICBuZXdfZWxlbWVudCA9IHRydWU7CiAJCX0KIAkgICAgICBl bHNlCkBAIC0xMTA0LDcgKzE0NDksNyBAQCBiaXRtYXBfYW5kX2NvbXBsIChi aXRtYXAgZHN0LCBjb25zdF9iaXRtCiAJICAgICAgZWxzZQogCSAgICAgICAg ewogCSAgICAgICAgICBjaGFuZ2VkIHw9ICFuZXdfZWxlbWVudDsKLQkJICBi aXRtYXBfZWxlbWVudF9mcmVlIChkc3QsIGRzdF9lbHQpOworCQkgIGJpdG1h cF9saXN0X3VubGlua19lbGVtZW50IChkc3QsIGRzdF9lbHQpOwogCQkgIGRz dF9lbHQgPSAqZHN0X3ByZXZfcG5leHQ7CiAJCX0KIAkgICAgfQpAQCAtMTE0 NSw2ICsxNDkwLDggQEAgYml0bWFwX2FuZF9jb21wbF9pbnRvIChiaXRtYXAg YSwgY29uc3RfYgogICBiaXRtYXBfZWxlbWVudCAqbmV4dDsKICAgQklUTUFQ X1dPUkQgY2hhbmdlZCA9IDA7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo IWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsKKwogICBpZiAoYSA9 PSBiKQogICAgIHsKICAgICAgIGlmIChiaXRtYXBfZW1wdHlfcCAoYSkpCkBA IC0xMTc5LDcgKzE1MjYsNyBAQCBiaXRtYXBfYW5kX2NvbXBsX2ludG8gKGJp dG1hcCBhLCBjb25zdF9iCiAJICAgIH0KIAkgIG5leHQgPSBhX2VsdC0+bmV4 dDsKIAkgIGlmICghaW9yKQotCSAgICBiaXRtYXBfZWxlbWVudF9mcmVlIChh LCBhX2VsdCk7CisJICAgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChh LCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7CiAJICBiX2VsdCA9IGJfZWx0 LT5uZXh0OwogCX0KQEAgLTExOTcsNiArMTU0NCw4IEBAIGJpdG1hcF9zZXRf cmFuZ2UgKGJpdG1hcCBoZWFkLCB1bnNpZ25lZAogICBiaXRtYXBfZWxlbWVu dCAqZWx0LCAqZWx0X3ByZXY7CiAgIHVuc2lnbmVkIGludCBpOwogCisgIGdj Y19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zvcm0pOworCiAgIGlm ICghY291bnQpCiAgICAgcmV0dXJuOwogCkBAIC0xMjEzLDcgKzE1NjIsNyBA QCBiaXRtYXBfc2V0X3JhbmdlIChiaXRtYXAgaGVhZCwgdW5zaWduZWQKICAg ICB7CiAgICAgICBlbHQgPSBiaXRtYXBfZWxlbWVudF9hbGxvY2F0ZSAoaGVh ZCk7CiAgICAgICBlbHQtPmluZHggPSBmaXJzdF9pbmRleDsKLSAgICAgIGJp dG1hcF9lbGVtZW50X2xpbmsgKGhlYWQsIGVsdCk7CisgICAgICBiaXRtYXBf bGlzdF9saW5rX2VsZW1lbnQgKGhlYWQsIGVsdCk7CiAgICAgfQogCiAgIGdj Y19jaGVja2luZ19hc3NlcnQgKGVsdC0+aW5keCA9PSBmaXJzdF9pbmRleCk7 CkBAIC0xMjMwLDcgKzE1NzksNyBAQCBiaXRtYXBfc2V0X3JhbmdlIChiaXRt YXAgaGVhZCwgdW5zaWduZWQKICAgICAgIHVuc2lnbmVkIGludCBpeDsKIAog ICAgICAgaWYgKCFlbHQgfHwgZWx0LT5pbmR4ICE9IGkpCi0JZWx0ID0gYml0 bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGhlYWQsIGVsdF9wcmV2LCBpKTsKKwll bHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoaGVhZCwg ZWx0X3ByZXYsIGkpOwogCiAgICAgICBpZiAoZWx0X3N0YXJ0X2JpdCA8PSBz dGFydCkKIAl7CkBAIC0xMjk2LDYgKzE2NDUsOCBAQCBiaXRtYXBfY2xlYXJf cmFuZ2UgKGJpdG1hcCBoZWFkLCB1bnNpZ25lCiAgIHVuc2lnbmVkIGludCBm aXJzdF9pbmRleCwgZW5kX2JpdF9wbHVzMSwgbGFzdF9pbmRleDsKICAgYml0 bWFwX2VsZW1lbnQgKmVsdDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh aGVhZC0+dHJlZV9mb3JtKTsKKwogICBpZiAoIWNvdW50KQogICAgIHJldHVy bjsKIApAQCAtMTMzMyw3ICsxNjg0LDcgQEAgYml0bWFwX2NsZWFyX3Jhbmdl IChiaXRtYXAgaGVhZCwgdW5zaWduZQogCiAgICAgICBpZiAoZWx0X3N0YXJ0 X2JpdCA+PSBzdGFydCAmJiBlbHRfZW5kX2JpdF9wbHVzMSA8PSBlbmRfYml0 X3BsdXMxKQogCS8qIEdldCByaWQgb2YgdGhlIGVudGlyZSBlbHQgYW5kIGdv IHRvIHRoZSBuZXh0IG9uZS4gICovCi0JYml0bWFwX2VsZW1lbnRfZnJlZSAo aGVhZCwgZWx0KTsKKwliaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoaGVh ZCwgZWx0KTsKICAgICAgIGVsc2UKIAl7CiAJICAvKiBHb2luZyB0byBoYXZl IHRvIGtub2NrIG91dCBzb21lIGJpdHMgaW4gdGhpcyBlbHQuICAqLwpAQCAt MTQwMyw3ICsxNzU0LDcgQEAgYml0bWFwX2NsZWFyX3JhbmdlIChiaXRtYXAg aGVhZCwgdW5zaWduZQogCSAgICAgIH0KIAkgIC8qIENoZWNrIHRvIHNlZSBp ZiB0aGVyZSBhcmUgYW55IGJpdHMgbGVmdC4gICovCiAJICBpZiAoY2xlYXIp Ci0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGhlYWQsIGVsdCk7CisJICAg IGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChoZWFkLCBlbHQpOwogCX0K ICAgICAgIGVsdCA9IG5leHRfZWx0OwogICAgIH0KQEAgLTE0MjUsNiArMTc3 Niw3IEBAIGJpdG1hcF9jb21wbF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0 X2IKICAgYml0bWFwX2VsZW1lbnQgKmFfcHJldiA9IE5VTEw7CiAgIGJpdG1h cF9lbGVtZW50ICpuZXh0OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFh LT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CiAgIGdjY19hc3NlcnQg KGEgIT0gYik7CiAKICAgaWYgKGJpdG1hcF9lbXB0eV9wIChhKSkKQEAgLTE0 NDUsMTMgKzE3OTcsMTMgQEAgYml0bWFwX2NvbXBsX2FuZF9pbnRvIChiaXRt YXAgYSwgY29uc3RfYgogCSAgLyogQSBpcyBiZWZvcmUgQi4gIFJlbW92ZSBB ICovCiAJICBuZXh0ID0gYV9lbHQtPm5leHQ7CiAJICBhX3ByZXYgPSBhX2Vs dC0+cHJldjsKLQkgIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsK KwkgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChhLCBhX2VsdCk7CiAJ ICBhX2VsdCA9IG5leHQ7CiAJfQogICAgICAgZWxzZSBpZiAoIWFfZWx0IHx8 IGJfZWx0LT5pbmR4IDwgYV9lbHQtPmluZHgpCiAJewogCSAgLyogQiBpcyBi ZWZvcmUgQS4gIENvcHkgQi4gKi8KLQkgIG5leHQgPSBiaXRtYXBfZWx0X2lu c2VydF9hZnRlciAoYSwgYV9wcmV2LCBiX2VsdC0+aW5keCk7CisJICBuZXh0 ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGEsIGFfcHJl diwgYl9lbHQtPmluZHgpOwogCSAgbWVtY3B5IChuZXh0LT5iaXRzLCBiX2Vs dC0+Yml0cywgc2l6ZW9mIChuZXh0LT5iaXRzKSk7CiAJICBhX3ByZXYgPSBu ZXh0OwogCSAgYl9lbHQgPSBiX2VsdC0+bmV4dDsKQEAgLTE0NzIsNyArMTgy NCw3IEBAIGJpdG1hcF9jb21wbF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0 X2IKIAkgICAgfQogCSAgbmV4dCA9IGFfZWx0LT5uZXh0OwogCSAgaWYgKCFp b3IpCi0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsKKwkg ICAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGEsIGFfZWx0KTsKIAkg IGVsc2UKIAkgICAgYV9wcmV2ID0gYV9lbHQ7CiAJICBhX2VsdCA9IG5leHQ7 CkBAIC0xNTE3LDcgKzE4NjksOCBAQCBiaXRtYXBfZWx0X2lvciAoYml0bWFw IGRzdCwgYml0bWFwX2VsZW1lCiAJewogCSAgY2hhbmdlZCA9IHRydWU7CiAJ ICBpZiAoIWRzdF9lbHQpCi0JICAgIGRzdF9lbHQgPSBiaXRtYXBfZWx0X2lu c2VydF9hZnRlciAoZHN0LCBkc3RfcHJldiwgYV9lbHQtPmluZHgpOworCSAg ICBkc3RfZWx0ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIg KGRzdCwgZHN0X3ByZXYsCisJCQkJCQkJYV9lbHQtPmluZHgpOwogCSAgZWxz ZQogCSAgICBkc3RfZWx0LT5pbmR4ID0gYV9lbHQtPmluZHg7CiAJICBmb3Ig KGl4ID0gMDsgaXggPCBCSVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykKQEAg LTE1NTYsNiArMTkwOSw3IEBAIGJpdG1hcF9pb3IgKGJpdG1hcCBkc3QsIGNv bnN0X2JpdG1hcCBhLAogICBiaXRtYXBfZWxlbWVudCAqKmRzdF9wcmV2X3Bu ZXh0ID0gJmRzdC0+Zmlyc3Q7CiAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwog CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFkc3QtPnRyZWVfZm9ybSAmJiAh YS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0 IChkc3QgIT0gYSAmJiBkc3QgIT0gYik7CiAKICAgd2hpbGUgKGFfZWx0IHx8 IGJfZWx0KQpAQCAtMTYwMiw2ICsxOTU2LDcgQEAgYml0bWFwX2lvcl9pbnRv IChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAgIGJpdG1hcF9lbGVtZW50ICoq YV9wcmV2X3BuZXh0ID0gJmEtPmZpcnN0OwogICBib29sIGNoYW5nZWQgPSBm YWxzZTsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3Jt ICYmICFiLT50cmVlX2Zvcm0pOwogICBpZiAoYSA9PSBiKQogICAgIHJldHVy biBmYWxzZTsKIApAQCAtMTY0MCw3ICsxOTk1LDkgQEAgYml0bWFwX3hvciAo Yml0bWFwIGRzdCwgY29uc3RfYml0bWFwIGEsCiAgIGNvbnN0IGJpdG1hcF9l bGVtZW50ICpiX2VsdCA9IGItPmZpcnN0OwogICBiaXRtYXBfZWxlbWVudCAq ZHN0X3ByZXYgPSBOVUxMOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFk c3QtPnRyZWVfZm9ybSAmJiAhYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zv cm0pOwogICBnY2NfYXNzZXJ0IChkc3QgIT0gYSAmJiBkc3QgIT0gYik7CisK ICAgaWYgKGEgPT0gYikKICAgICB7CiAgICAgICBiaXRtYXBfY2xlYXIgKGRz dCk7CkBAIC0xNjU2LDcgKzIwMTMsOCBAQCBiaXRtYXBfeG9yIChiaXRtYXAg ZHN0LCBjb25zdF9iaXRtYXAgYSwKIAkgIEJJVE1BUF9XT1JEIGlvciA9IDA7 CiAKIAkgIGlmICghZHN0X2VsdCkKLQkgICAgZHN0X2VsdCA9IGJpdG1hcF9l bHRfaW5zZXJ0X2FmdGVyIChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5keCk7 CisJICAgIGRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9h ZnRlciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJCQlhX2VsdC0+aW5keCk7CiAJ ICBlbHNlCiAJICAgIGRzdF9lbHQtPmluZHggPSBhX2VsdC0+aW5keDsKIAkg IGZvciAoaXggPSAwOyBpeCA8IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsr KQpAQCAtMTY5MSw3ICsyMDQ5LDggQEAgYml0bWFwX3hvciAoYml0bWFwIGRz dCwgY29uc3RfYml0bWFwIGEsCiAJICAgIH0KIAogCSAgaWYgKCFkc3RfZWx0 KQotCSAgICBkc3RfZWx0ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGRz dCwgZHN0X3ByZXYsIHNyYy0+aW5keCk7CisJICAgIGRzdF9lbHQgPSBiaXRt YXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoZHN0LCBkc3RfcHJldiwK KwkJCQkJCQlzcmMtPmluZHgpOwogCSAgZWxzZQogCSAgICBkc3RfZWx0LT5p bmR4ID0gc3JjLT5pbmR4OwogCSAgbWVtY3B5IChkc3RfZWx0LT5iaXRzLCBz cmMtPmJpdHMsIHNpemVvZiAoZHN0X2VsdC0+Yml0cykpOwpAQCAtMTcxNiw2 ICsyMDc1LDggQEAgYml0bWFwX3hvcl9pbnRvIChiaXRtYXAgYSwgY29uc3Rf Yml0bWFwCiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdCA9IGItPmZp cnN0OwogICBiaXRtYXBfZWxlbWVudCAqYV9wcmV2ID0gTlVMTDsKIAorICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVl X2Zvcm0pOworCiAgIGlmIChhID09IGIpCiAgICAgewogICAgICAgYml0bWFw X2NsZWFyIChhKTsKQEAgLTE3MjcsNyArMjA4OCw4IEBAIGJpdG1hcF94b3Jf aW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcAogICAgICAgaWYgKCFhX2Vs dCB8fCBiX2VsdC0+aW5keCA8IGFfZWx0LT5pbmR4KQogCXsKIAkgIC8qIENv cHkgYl9lbHQuICAqLwotCSAgYml0bWFwX2VsZW1lbnQgKmRzdCA9IGJpdG1h cF9lbHRfaW5zZXJ0X2FmdGVyIChhLCBhX3ByZXYsIGJfZWx0LT5pbmR4KTsK KwkgIGJpdG1hcF9lbGVtZW50ICpkc3QgPSBiaXRtYXBfbGlzdF9pbnNlcnRf ZWxlbWVudF9hZnRlciAoYSwgYV9wcmV2LAorCQkJCQkJCQkgIGJfZWx0LT5p bmR4KTsKIAkgIG1lbWNweSAoZHN0LT5iaXRzLCBiX2VsdC0+Yml0cywgc2l6 ZW9mIChkc3QtPmJpdHMpKTsKIAkgIGFfcHJldiA9IGRzdDsKIAkgIGJfZWx0 ID0gYl9lbHQtPm5leHQ7CkBAIC0xNzU1LDcgKzIxMTcsNyBAQCBiaXRtYXBf eG9yX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXRtYXAKIAkgIGlmIChpb3Ip CiAJICAgIGFfcHJldiA9IGFfZWx0OwogCSAgZWxzZQotCSAgICBiaXRtYXBf ZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJICAgIGJpdG1hcF9saXN0X3Vu bGlua19lbGVtZW50IChhLCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7CiAJ fQogICAgIH0KQEAgLTE3NzUsNiArMjEzNyw4IEBAIGJpdG1hcF9lcXVhbF9w IChjb25zdF9iaXRtYXAgYSwgY29uc3RfYmkKICAgY29uc3QgYml0bWFwX2Vs ZW1lbnQgKmJfZWx0OwogICB1bnNpZ25lZCBpeDsKIAorICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOwor CiAgIGZvciAoYV9lbHQgPSBhLT5maXJzdCwgYl9lbHQgPSBiLT5maXJzdDsK ICAgICAgICBhX2VsdCAmJiBiX2VsdDsKICAgICAgICBhX2VsdCA9IGFfZWx0 LT5uZXh0LCBiX2VsdCA9IGJfZWx0LT5uZXh0KQpAQCAtMTc5Nyw2ICsyMTYx LDggQEAgYml0bWFwX2ludGVyc2VjdF9wIChjb25zdF9iaXRtYXAgYSwgY29u cwogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqYl9lbHQ7CiAgIHVuc2lnbmVk IGl4OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0g JiYgIWItPnRyZWVfZm9ybSk7CisKICAgZm9yIChhX2VsdCA9IGEtPmZpcnN0 LCBiX2VsdCA9IGItPmZpcnN0OwogICAgICAgIGFfZWx0ICYmIGJfZWx0OykK ICAgICB7CkBAIC0xODI0LDYgKzIxOTAsOSBAQCBiaXRtYXBfaW50ZXJzZWN0 X2NvbXBsX3AgKGNvbnN0X2JpdG1hcCBhCiAgIGNvbnN0IGJpdG1hcF9lbGVt ZW50ICphX2VsdDsKICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0Owog ICB1bnNpZ25lZCBpeDsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+ dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOworCiAgIGZvciAoYV9lbHQg PSBhLT5maXJzdCwgYl9lbHQgPSBiLT5maXJzdDsKICAgICAgICBhX2VsdCAm JiBiX2VsdDspCiAgICAgewpAQCAtMTg1OCw2ICsyMjI3LDkgQEAgYml0bWFw X2lvcl9hbmRfY29tcGwgKGJpdG1hcCBkc3QsIGNvbnN0XwogICBiaXRtYXBf ZWxlbWVudCAqZHN0X3ByZXYgPSBOVUxMOwogICBiaXRtYXBfZWxlbWVudCAq KmRzdF9wcmV2X3BuZXh0ID0gJmRzdC0+Zmlyc3Q7CiAKKyAgZ2NjX2NoZWNr aW5nX2Fzc2VydCAoIWRzdC0+dHJlZV9mb3JtCisJCSAgICAgICAmJiAhYS0+ dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0KKwkJICAgICAgICYmICFraWxs LT50cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0IChkc3QgIT0gYSAmJiBkc3Qg IT0gYiAmJiBkc3QgIT0ga2lsbCk7CiAKICAgLyogU3BlY2lhbCBjYXNlcy4g IFdlIGRvbid0IGJvdGhlciBjaGVja2luZyBmb3IgYml0bWFwX2VxdWFsX3Ag KGIsIGtpbGwpLiAgKi8KQEAgLTE5NDgsMTYgKzIzMjAsMTggQEAgYml0bWFw X2lvcl9hbmRfY29tcGwgKGJpdG1hcCBkc3QsIGNvbnN0XwogICByZXR1cm4g Y2hhbmdlZDsKIH0KIAotLyogQSB8PSAoRlJPTTEgJiB+RlJPTTIpLiAgUmV0 dXJuIHRydWUgaWYgQSBjaGFuZ2VzLiAgKi8KKy8qIEEgfD0gKEIgJiB+Qyku ICBSZXR1cm4gdHJ1ZSBpZiBBIGNoYW5nZXMuICAqLwogCiBib29sCi1iaXRt YXBfaW9yX2FuZF9jb21wbF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFw IGZyb20xLCBjb25zdF9iaXRtYXAgZnJvbTIpCitiaXRtYXBfaW9yX2FuZF9j b21wbF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwIGIsIGNvbnN0X2Jp dG1hcCBjKQogewogICBiaXRtYXBfaGVhZCB0bXA7CiAgIGJvb2wgY2hhbmdl ZDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYm ICFiLT50cmVlX2Zvcm0gJiYgIWMtPnRyZWVfZm9ybSk7CisKICAgYml0bWFw X2luaXRpYWxpemUgKCZ0bXAsICZiaXRtYXBfZGVmYXVsdF9vYnN0YWNrKTsK LSAgYml0bWFwX2FuZF9jb21wbCAoJnRtcCwgZnJvbTEsIGZyb20yKTsKKyAg Yml0bWFwX2FuZF9jb21wbCAoJnRtcCwgYiwgYyk7CiAgIGNoYW5nZWQgPSBi aXRtYXBfaW9yX2ludG8gKGEsICZ0bXApOwogICBiaXRtYXBfY2xlYXIgKCZ0 bXApOwogCkBAIC0xOTc4LDYgKzIzNTIsOCBAQCBiaXRtYXBfaW9yX2FuZF9p bnRvIChiaXRtYXAgYSwgY29uc3RfYml0CiAgIGJvb2wgY2hhbmdlZCA9IGZh bHNlOwogICB1bnNpZ25lZCBpeDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0 ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0gJiYgIWMtPnRyZWVf Zm9ybSk7CisKICAgaWYgKGIgPT0gYykKICAgICByZXR1cm4gYml0bWFwX2lv cl9pbnRvIChhLCBiKTsKICAgaWYgKGJpdG1hcF9lbXB0eV9wIChiKSB8fCBi aXRtYXBfZW1wdHlfcCAoYykpCkBAIC0yMDQ0LDYgKzI0MjAsNyBAQCBiaXRt YXBfaW9yX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0CiB9CiAKIC8q IENvbXB1dGUgaGFzaCBvZiBiaXRtYXAgKGZvciBwdXJwb3NlcyBvZiBoYXNo aW5nKS4gICovCisKIGhhc2h2YWxfdAogYml0bWFwX2hhc2ggKGNvbnN0X2Jp dG1hcCBoZWFkKQogewpAQCAtMjA1MSw2ICsyNDI4LDggQEAgYml0bWFwX2hh c2ggKGNvbnN0X2JpdG1hcCBoZWFkKQogICBCSVRNQVBfV09SRCBoYXNoID0g MDsKICAgaW50IGl4OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFk LT50cmVlX2Zvcm0pOworCiAgIGZvciAocHRyID0gaGVhZC0+Zmlyc3Q7IHB0 cjsgcHRyID0gcHRyLT5uZXh0KQogICAgIHsKICAgICAgIGhhc2ggXj0gcHRy LT5pbmR4OwpAQCAtMjA2NCw5ICsyNDQzLDEzIEBAIGJpdG1hcF9oYXNoIChj b25zdF9iaXRtYXAgaGVhZCkKIC8qIERlYnVnZ2luZyBmdW5jdGlvbiB0byBw cmludCBvdXQgdGhlIGNvbnRlbnRzIG9mIGEgYml0bWFwLiAgKi8KIAogREVC VUdfRlVOQ1RJT04gdm9pZAotZGVidWdfYml0bWFwX2ZpbGUgKEZJTEUgKmZp bGUsIGNvbnN0X2JpdG1hcCBoZWFkKQorZGVidWdfYml0bWFwX2ZpbGUgKEZJ TEUgKmZpbGUsIGJpdG1hcCBoZWFkKQogewogICBjb25zdCBiaXRtYXBfZWxl bWVudCAqcHRyOworICBib29sIHRyZWVfZm9ybSA9IGhlYWQtPnRyZWVfZm9y bTsKKworICBpZiAodHJlZV9mb3JtKQorICAgIGJpdG1hcF9saXN0X3ZpZXcg KGhlYWQpOwogCiAgIGZwcmludGYgKGZpbGUsICJcbmZpcnN0ID0gIiBIT1NU X1BUUl9QUklOVEYKIAkgICAiIGN1cnJlbnQgPSAiIEhPU1RfUFRSX1BSSU5U RiAiIGluZHggPSAldVxuIiwKQEAgLTIwOTgsMTMgKzI0ODEsMTYgQEAgZGVi dWdfYml0bWFwX2ZpbGUgKEZJTEUgKmZpbGUsIGNvbnN0X2JpdAogCiAgICAg ICBmcHJpbnRmIChmaWxlLCAiIH1cbiIpOwogICAgIH0KKworICBpZiAodHJl ZV9mb3JtKQorICAgIGJpdG1hcF90cmVlX3ZpZXcgKGhlYWQpOwogfQogCiAv KiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSB0aGUgZGVidWdnZXIgdG8g cHJpbnQgdGhlIGNvbnRlbnRzCiAgICBvZiBhIGJpdG1hcC4gICovCiAKIERF QlVHX0ZVTkNUSU9OIHZvaWQKLWRlYnVnX2JpdG1hcCAoY29uc3RfYml0bWFw IGhlYWQpCitkZWJ1Z19iaXRtYXAgKGJpdG1hcCBoZWFkKQogewogICBkZWJ1 Z19iaXRtYXBfZmlsZSAoc3Rkb3V0LCBoZWFkKTsKIH0KQEAgLTIxMTMsMTEg KzI0OTksMTUgQEAgZGVidWdfYml0bWFwIChjb25zdF9iaXRtYXAgaGVhZCkK ICAgIGl0IGRvZXMgbm90IHByaW50IGFueXRoaW5nIGJ1dCB0aGUgYml0cy4g ICovCiAKIERFQlVHX0ZVTkNUSU9OIHZvaWQKLWJpdG1hcF9wcmludCAoRklM RSAqZmlsZSwgY29uc3RfYml0bWFwIGhlYWQsIGNvbnN0IGNoYXIgKnByZWZp eCwgY29uc3QgY2hhciAqc3VmZml4KQorYml0bWFwX3ByaW50IChGSUxFICpm aWxlLCBiaXRtYXAgaGVhZCwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBj aGFyICpzdWZmaXgpCiB7CiAgIGNvbnN0IGNoYXIgKmNvbW1hID0gIiI7CiAg IHVuc2lnbmVkIGk7CiAgIGJpdG1hcF9pdGVyYXRvciBiaTsKKyAgYm9vbCB0 cmVlX2Zvcm0gPSBoZWFkLT50cmVlX2Zvcm07CisKKyAgaWYgKHRyZWVfZm9y bSkKKyAgICBiaXRtYXBfbGlzdF92aWV3IChoZWFkKTsKIAogICBmcHV0cyAo cHJlZml4LCBmaWxlKTsKICAgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQICho ZWFkLCAwLCBpLCBiaSkKQEAgLTIxMjYsNiArMjUxNiw5IEBAIGJpdG1hcF9w cmludCAoRklMRSAqZmlsZSwgY29uc3RfYml0bWFwIGgKICAgICAgIGNvbW1h ID0gIiwgIjsKICAgICB9CiAgIGZwdXRzIChzdWZmaXgsIGZpbGUpOworCisg IGlmICh0cmVlX2Zvcm0pCisgICAgYml0bWFwX3RyZWVfdmlldyAoaGVhZCk7 CiB9CiAKIApJbmRleDogcmVnaW5mby5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHJlZ2luZm8uYwkocmV2aXNpb24gMTk2NTA1KQorKysgcmVnaW5m by5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUxLDYgKzEyNTEsOCBAQCBpbml0 X3N1YnJlZ3Nfb2ZfbW9kZSAodm9pZCkKICAgaW52YWxpZF9tb2RlX2NoYW5n ZXMgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOwogICBiaXRtYXBfb2JzdGFja19p bml0aWFsaXplICgmc3JvbV9vYnN0YWNrKTsKICAgc3VicmVnc19vZl9tb2Rl ID0gQklUTUFQX0FMTE9DICgmc3JvbV9vYnN0YWNrKTsKKyAgYml0bWFwX3Ry ZWVfdmlldyAoaW52YWxpZF9tb2RlX2NoYW5nZXMpOworICBiaXRtYXBfdHJl ZV92aWV3IChzdWJyZWdzX29mX21vZGUpOwogCiAgIEZPUl9FQUNIX0JCIChi YikKICAgICBGT1JfQkJfSU5TTlMgKGJiLCBpbnNuKQo= --bcaec54b54389146f604d75b6815--