From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22830 invoked by alias); 17 Oct 2018 12:31:42 -0000 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 Received: (qmail 5376 invoked by uid 89); 17 Oct 2018 12:31:31 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=ciao, steven, ciao!, Ciao! X-HELO: mail-lf1-f50.google.com Received: from mail-lf1-f50.google.com (HELO mail-lf1-f50.google.com) (209.85.167.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 17 Oct 2018 12:31:28 +0000 Received: by mail-lf1-f50.google.com with SMTP id x24-v6so3894675lfe.5 for ; Wed, 17 Oct 2018 05:31:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=dTblHxIzBIAeoJ6lSX/21YrKzr/EukLkktmCtTAGVg4=; b=e3S5GY/v5siApKCo4eO4KGQICSEirwIIBThct2GbJsqx3riRQDXxHnexOveQ2D9Kw6 h1U9c3E5dMbgKxz4eoyyWH5ylTD9iaVD5HoWzWefzdE4EW3voq2PvQ9JKtWI/Tf3uc9X hUQzSUAd35LelzP5raMR0aK8m+YgBcqKLMmwiw1wrPO0gjtUmHSbdVP1tWDNeI79qn20 GsGwNII9mx7JZRoZJb7ayniFHQoReczw0uCLLz+xBNJEHdNkc+Bx0I+ounAcg8o/Nh5i lorPda0wi7jgo0fbFxg6erLZgON/5bpyPPOv7axvxFe0m6rDsmdmom7hx1EWjKrNdw9m lpSg== MIME-Version: 1.0 References: In-Reply-To: From: Richard Biener Date: Wed, 17 Oct 2018 14:04:00 -0000 Message-ID: Subject: Re: [patch][RFC] bitmaps as lists *or* trees To: Steven Bosscher Cc: GCC Patches , Michael Matz , Jan Hubicka Content-Type: multipart/mixed; boundary="0000000000003e3f8805786bd935" X-IsSubscribed: yes X-SW-Source: 2018-10/txt/msg01038.txt.bz2 --0000000000003e3f8805786bd935 Content-Type: text/plain; charset="UTF-8" Content-length: 1462 On Thu, Mar 7, 2013 at 9:18 PM Steven Bosscher wrote: > > > 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. I have updated the patch to trunk and fixed another bug (the patch applied OK to gcc 4.8 where the same bug exists - not sure what you developed it ontop of). We have a premature optimization in bitmap_find_bit: @@ -506,7 +858,9 @@ bitmap_find_bit (bitmap head, unsigned i if (head->current == NULL || head->indx == indx) return head->current; - if (head->current == head->first + /* ??? Premature optimization? */ + if (!head->tree_form + && head->current == head->first && head->first->next == NULL) return NULL; the reginfo.c use-case seems to be gone so I put the use in the SSA propagator instead where it is supposed to help PR63155. Meanwhile bitmap_head->descriptor_id is dead so I made tree_form a bool. Richard. > Ciao! > Steven --0000000000003e3f8805786bd935 Content-Type: application/octet-stream; name=tree-bitmap Content-Disposition: attachment; filename=tree-bitmap Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jnd4xcsi0 Content-length: 74754 MjAxOC0xMC0xNwlTdGV2ZW4gQm9zc2NoZXIgIDxzdGV2ZW5AZ2NjLmdudS5v cmc+CgoJKiBiaXRtYXAuaDogVXBkYXRlIGRhdGEgc3RydWN0dXJlIGRvY3Vt ZW50YXRpb24sIGluY2x1ZGluZyBhCglkZXNjcmlwdGlvbiBvZiBiaXRtYXAg dmlld3MgYXMgZWl0aGVyIGxpbmtlZC1saXN0cyBvciBzcGxheSB0cmVlcy4K CShzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmKTogVXBkYXRlIGNvbW1lbnRz IGZvciBzcGxheSB0cmVlIGJpdG1hcHMuCgkoc3RydWN0IGJpdG1hcF9oZWFk X2RlZik6IExpa2V3aXNlLgoJKGJpdG1hcF9saXN0X3ZpZXcsIGJpdG1hcF90 cmVlX3ZpZXcpOiBOZXcgcHJvdG90eXBlcy4KCShkZWJ1Z19iaXRtYXAsIGRl YnVnX2JpdG1hcF9maWxlLCBiaXRtYXBfcHJpbnQpOiBVcGRhdGUgcHJvdG90 eXBlcy4KCShkdW1wX2JpdG1hcCk6IFVwZGF0ZSB0byB0YWtlIG5vbi1jb25z dCBiaXRtYXAuCgkoYml0bWFwX2luaXRpYWxpemVfc3RhdCk6IEluaXRpYWxp emUgYSBiaXRtYXBfaGVhZCdzIGluZHggYW5kCgl0cmVlX2Zvcm0gZmllbGRz LgoJKGJtcF9pdGVyX3NldF9pbml0KTogQXNzZXJ0IHRoZSBpdGVyYXRlZCBi aXRtYXBzIGFyZSBpbiBsaXN0IGZvcm0uCgkoYm1wX2l0ZXJfYW5kX2luaXQs IGJtcF9pdGVyX2FuZF9jb21wbF9pbml0KTogTGlrZXdpc2UuCgoJKiBiaXRt YXAuYyAobmV4dF9iaXRtYXBfZGVzY19pZCk6IE1ha2UgdW5zaWduZWQuCgko Z2V0X2JpdG1hcF9kZXNjcmlwdG9yKTogTWFrZSBzdXJlIHRoZXJlIGFyZSBu byBtb3JlIHRoYW4gMl4zMQoJYml0bWFwIGRlc2NyaXB0b3JzLgoJKGJpdG1h cF9lbGVtX3RvX2ZyZWVsaXN0KTogVW5yZWdpc3RlciBvdmVyaGVhZCBvZiBh IHJlbGVhc2VkIGJpdG1hcAoJZWxlbWVudCBoZXJlLgoJKGJpdG1hcF9lbGVt ZW50X2ZyZWUpOiBSZW1vdmUuCgkoYml0bWFwX2VsdF9jbGVhcl9mcm9tKTog V29yayBvbiBzcGxheSB0cmVlIGJpdG1hcHMuCgoJKGJpdG1hcF9saXN0X2xp bmtfZWxlbWVudCk6IFJlbmFtZWQgZnJvbSBiaXRtYXBfZWxlbWVudF9saW5r LiAgTW92ZQoJdGhpcyBmdW5jdGlvbiBzaW1pbGFyIG9uZXMgc3VjaCB0aGF0 IGxpbmtlZC1saXN0IGJpdG1hcCBpbXBsZW1lbnRhdGlvbgoJZnVuY3Rpb25z IGFyZSBncm91cGVkLgoJKGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50KTog UmVuYW1lZCBmcm9tIGJpdG1hcF9lbGVtZW50X3VubGluaywKCWFuZCBtb3Zl ZCBmb3IgZ3JvdXBpbmcuCgkoYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRf YWZ0ZXIpOiBSZW5hbWVkIGZyb20KCWJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVy LCBhbmQgbW92ZWQgZm9yIGdyb3VwaW5nLgoJKGJpdG1hcF9saXN0X2ZpbmRf ZWxlbWVudCk6IE5ldyBmdW5jdGlvbiBzcGxpY2VkIGZyb20gYml0bWFwX2Zp bmRfYml0LgoKCShiaXRtYXBfdHJlZV9saW5rX2xlZnQsIGJpdG1hcF90cmVl X2xpbmtfcmlnaHQsCgliaXRtYXBfdHJlZV9yb3RhdGVfbGVmdCwgYml0bWFw X3RyZWVfcm90YXRlX3JpZ2h0LCBiaXRtYXBfdHJlZV9zcGxheSwKCWJpdG1h cF90cmVlX2xpbmtfZWxlbWVudCwgYml0bWFwX3RyZWVfdW5saW5rX2VsZW1l bnQsCgliaXRtYXBfdHJlZV9maW5kX2VsZW1lbnQpOiBOZXcgZnVuY3Rpb25z IGZvciBzcGxheS10cmVlIGJpdG1hcAoJaW1wbGVtZW50YXRpb24uCgkoYml0 bWFwX2VsZW1lbnRfbGluaywgYml0bWFwX2VsZW1lbnRfdW5saW5rLCBiaXRt YXBfZWx0X2luc2VydF9hZnRlcik6CglSZW5hbWVkIGFuZCBtb3ZlZCwgc2Vl IGFib3ZlIGVudHJpZXMuCgoJKGJpdG1hcF90cmVlX2xpc3RpZnlfZnJvbSk6 IE5ldyBmdW5jdGlvbiB0byBjb252ZXJ0IHBhcnQgb2YgYSBzcGxheQoJdHJl ZSBiaXRtYXAgdG8gYSBsaW5rZWQtbGlzdCBiaXRtYXAuCgkoYml0bWFwX2xp c3Rfdmlldyk6IENvbnZlcnQgYSBzcGxheSB0cmVlIGJpdG1hcCB0byBsaW5r ZWQtbGlzdCBmb3JtLgoJKGJpdG1hcF90cmVlX3ZpZXcpOiBDb252ZXJ0IGEg bGlua2VkLWxpc3QgYml0bWFwIHRvIHNwbGF5IHRyZWUgZm9ybS4KCgkoYml0 bWFwX2ZpbmRfYml0LCBiaXRtYXBfY2xlYXIsIGJpdG1hcF9jbGVhcl9iaXQs IGJpdG1hcF9zZXRfYml0LAoJYml0bWFwX3NpbmdsZV9iaXRfc2V0X3AsIGJp dG1hcF9maXJzdF9zZXRfYml0LCBiaXRtYXBfbGFzdF9zZXRfYml0KToKCUhh bmRsZSBzcGxheSB0cmVlIGJpdG1hcHMuCgoJKGJpdG1hcF9jb3B5LCBiaXRt YXBfY291bnRfYml0cywgYml0bWFwX2FuZCwgYml0bWFwX2FuZF9pbnRvLAoJ Yml0bWFwX2VsdF9jb3B5LCBiaXRtYXBfYW5kX2NvbXBsLCBiaXRtYXBfYW5k X2NvbXBsX2ludG8sCgliaXRtYXBfY29tcGxfYW5kX2ludG8sIGJpdG1hcF9l bHRfaW9yLCBiaXRtYXBfaW9yLCBiaXRtYXBfaW9yX2ludG8sCgliaXRtYXBf eG9yLCBiaXRtYXBfeG9yX2ludG8sIGJpdG1hcF9lcXVhbF9wLCBiaXRtYXBf aW50ZXJzZWN0X3AsCgliaXRtYXBfaW50ZXJzZWN0X2NvbXBsX3AsIGJpdG1h cF9pb3JfYW5kX2NvbXBsLAoJYml0bWFwX2lvcl9hbmRfY29tcGxfaW50bywg Yml0bWFwX3NldF9yYW5nZSwgYml0bWFwX2NsZWFyX3JhbmdlLAoJYml0bWFw X2hhc2gpOiBSZWplY3QgdHJ5aW5nIHRvIGFjdCBvbiBzcGxheSB0cmVlIGJp dG1hcHMuICBNYWtlCgljb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gdXNlIGxp bmtlZC1saXN0IHNwZWNpZmljIGJpdG1hcF9lbGVtZW50CgltYW5pcHVsYXRp b24gZnVuY3Rpb25zIGFzIGFwcGxpY2FibGUgZm9yIGVmZmljaWVuY3kuCgoJ KGRlYnVnX2JpdG1hcF9maWxlKTogSGFuZGxlIHNwbGF5IHRyZWUgYml0bWFw cyBieSBjb252ZXJ0aW5nIHRoZQoJYml0bWFwIHRvIGxpbmtlZC1saXN0IGZv cm0gYW5kIGJhY2suCgkoYml0bWFwX3ByaW50KTogTGlrZXdpc2UuCgkoZGVi dWdfYml0bWFwKTogVGFrZSBhIG5vbi1jb25zdCBiaXRtYXAuCgpJbmRleDog Z2NjL2JpdG1hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9i aXRtYXAuYwkocmV2aXNpb24gMjY1MjM2KQorKysgZ2NjL2JpdG1hcC5jCSh3 b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBAIGFsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCiAvKiBNZW1vcnkgYWxsb2NhdGlv biBzdGF0aXN0aWNzIHB1cnBvc2UgaW5zdGFuY2UuICAqLwogbWVtX2FsbG9j X2Rlc2NyaXB0aW9uPGJpdG1hcF91c2FnZT4gYml0bWFwX21lbV9kZXNjOwog CitzdGF0aWMgYml0bWFwX2VsZW1lbnQgKmJpdG1hcF90cmVlX2xpc3RpZnlf ZnJvbSAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAqKTsKKwogLyogUmVnaXN0 ZXIgbmV3IGJpdG1hcC4gICovCiB2b2lkCiBiaXRtYXBfcmVnaXN0ZXIgKGJp dG1hcCBiIE1FTV9TVEFUX0RFQ0wpCkBAIC00OSwyMiArNTEsMTggQEAgc3Rh dGljIGludCBiaXRtYXBfZGVmYXVsdF9vYnN0YWNrX2RlcHRoOwogc3RhdGlj IEdUWSgoZGVsZXRhYmxlKSkgYml0bWFwX2VsZW1lbnQgKmJpdG1hcF9nZ2Nf ZnJlZTsgLyogRnJlZWxpc3Qgb2YKIAkJCQkJCQkgICAgR0MnZCBlbGVtZW50 cy4gICovCiAKLXN0YXRpYyB2b2lkIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0 IChiaXRtYXAsIGJpdG1hcF9lbGVtZW50ICopOwotc3RhdGljIHZvaWQgYml0 bWFwX2VsZW1lbnRfZnJlZSAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAqKTsK LXN0YXRpYyBiaXRtYXBfZWxlbWVudCAqYml0bWFwX2VsZW1lbnRfYWxsb2Nh dGUgKGJpdG1hcCk7Ci1zdGF0aWMgaW50IGJpdG1hcF9lbGVtZW50X3plcm9w IChjb25zdCBiaXRtYXBfZWxlbWVudCAqKTsKLXN0YXRpYyB2b2lkIGJpdG1h cF9lbGVtZW50X2xpbmsgKGJpdG1hcCwgYml0bWFwX2VsZW1lbnQgKik7Ci1z dGF0aWMgYml0bWFwX2VsZW1lbnQgKmJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVy IChiaXRtYXAsIGJpdG1hcF9lbGVtZW50ICosIHVuc2lnbmVkIGludCk7Ci1z dGF0aWMgdm9pZCBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCwgYml0 bWFwX2VsZW1lbnQgKik7Ci1zdGF0aWMgYml0bWFwX2VsZW1lbnQgKmJpdG1h cF9maW5kX2JpdCAoYml0bWFwLCB1bnNpZ25lZCBpbnQpOwogDAorLyogQml0 bWFwIG1lbW9yeSBtYW5hZ2VtZW50LiAgKi8KIAotLyogQWRkIEVMRU0gdG8g dGhlIGFwcHJvcHJpYXRlIGZyZWVsaXN0LiAgKi8KKy8qIEFkZCBFTFQgdG8g dGhlIGFwcHJvcHJpYXRlIGZyZWVsaXN0LiAgKi8KIHN0YXRpYyBpbmxpbmUg dm9pZAogYml0bWFwX2VsZW1fdG9fZnJlZWxpc3QgKGJpdG1hcCBoZWFkLCBi aXRtYXBfZWxlbWVudCAqZWx0KQogewogICBiaXRtYXBfb2JzdGFjayAqYml0 X29ic3RhY2sgPSBoZWFkLT5vYnN0YWNrOwogCisgIGlmIChHQVRIRVJfU1RB VElTVElDUykKKyAgICByZWdpc3Rlcl9vdmVyaGVhZCAoaGVhZCwgLSgoaW50 KXNpemVvZiAoYml0bWFwX2VsZW1lbnQpKSk7CisKICAgZWx0LT5uZXh0ID0g TlVMTDsKICAgZWx0LT5pbmR4ID0gLTE7CiAgIGlmIChiaXRfb2JzdGFjaykK QEAgLTc5LDQxICs3Nyw2IEBAIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChi aXRtYXAgaGVhZCwgYmkKICAgICB9CiB9CiAKLS8qIEZyZWUgYSBiaXRtYXAg ZWxlbWVudC4gIFNpbmNlIHRoZXNlIGFyZSBhbGxvY2F0ZWQgb2ZmIHRoZQot ICAgYml0bWFwX29ic3RhY2ssICJmcmVlIiBhY3R1YWxseSBtZWFucyAicHV0 IG9udG8gdGhlIGZyZWVsaXN0Ii4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9p ZAotYml0bWFwX2VsZW1lbnRfZnJlZSAoYml0bWFwIGhlYWQsIGJpdG1hcF9l bGVtZW50ICplbHQpCi17Ci0gIGJpdG1hcF9lbGVtZW50ICpuZXh0ID0gZWx0 LT5uZXh0OwotICBiaXRtYXBfZWxlbWVudCAqcHJldiA9IGVsdC0+cHJldjsK LQotICBpZiAocHJldikKLSAgICBwcmV2LT5uZXh0ID0gbmV4dDsKLQotICBp ZiAobmV4dCkKLSAgICBuZXh0LT5wcmV2ID0gcHJldjsKLQotICBpZiAoaGVh ZC0+Zmlyc3QgPT0gZWx0KQotICAgIGhlYWQtPmZpcnN0ID0gbmV4dDsKLQot ICAvKiBTaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2UgdHJ5IGlzIHRvIGluc2Vy dCBiZWZvcmUgY3VycmVudCwKLSAgICAgbWFrZSBjdXJyZW50IHRoZSBuZXh0 IGVudHJ5IGluIHByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzLiAgKi8KLSAg aWYgKGhlYWQtPmN1cnJlbnQgPT0gZWx0KQotICAgIHsKLSAgICAgIGhlYWQt PmN1cnJlbnQgPSBuZXh0ICE9IDAgPyBuZXh0IDogcHJldjsKLSAgICAgIGlm IChoZWFkLT5jdXJyZW50KQotCWhlYWQtPmluZHggPSBoZWFkLT5jdXJyZW50 LT5pbmR4OwotICAgICAgZWxzZQotCWhlYWQtPmluZHggPSAwOwotICAgIH0K LQotICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCi0gICAgcmVnaXN0ZXJfb3Zl cmhlYWQgKGhlYWQsIC0oKGludClzaXplb2YgKGJpdG1hcF9lbGVtZW50KSkp OwotCi0gIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChoZWFkLCBlbHQpOwot fQotDAogLyogQWxsb2NhdGUgYSBiaXRtYXAgZWxlbWVudC4gIFRoZSBiaXRz IGFyZSBjbGVhcmVkLCBidXQgbm90aGluZyBlbHNlIGlzLiAgKi8KIAogc3Rh dGljIGlubGluZSBiaXRtYXBfZWxlbWVudCAqCkBAIC0xNjYsNyArMTI5LDgg QEAgYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGJpdG1hcCBoZWFkKQogICBy ZXR1cm4gZWxlbWVudDsKIH0KIAotLyogUmVtb3ZlIEVMVCBhbmQgYWxsIGZv bGxvd2luZyBlbGVtZW50cyBmcm9tIGJpdG1hcCBIRUFELiAgKi8KKy8qIFJl bW92ZSBFTFQgYW5kIGFsbCBmb2xsb3dpbmcgZWxlbWVudHMgZnJvbSBiaXRt YXAgSEVBRC4KKyAgIFB1dCB0aGUgcmVsZWFzZWQgZWxlbWVudHMgaW4gdGhl IGZyZWVsaXN0IGZvciBIRUFELiAgKi8KIAogdm9pZAogYml0bWFwX2VsdF9j bGVhcl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCkK QEAgLTE3NCw3ICsxMzgsMTEgQEAgYml0bWFwX2VsdF9jbGVhcl9mcm9tIChi aXRtYXAgaGVhZCwgYml0bQogICBiaXRtYXBfZWxlbWVudCAqcHJldjsKICAg Yml0bWFwX29ic3RhY2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+b2JzdGFjazsK IAotICBpZiAoIWVsdCkgcmV0dXJuOworICBpZiAoIWVsdCkKKyAgICByZXR1 cm47CisKKyAgaWYgKGhlYWQtPnRyZWVfZm9ybSkKKyAgICBlbHQgPSBiaXRt YXBfdHJlZV9saXN0aWZ5X2Zyb20gKGhlYWQsIGVsdCk7CiAKICAgaWYgKEdB VEhFUl9TVEFUSVNUSUNTKQogICAgIHsKQEAgLTIwMSw3ICsxNjksNyBAQCBi aXRtYXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCBoZWFkLCBiaXRtCiAgICAg ICBoZWFkLT5pbmR4ID0gMDsKICAgICB9CiAKLSAgLyogUHV0IHRoZSBlbnRp cmUgbGlzdCBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gb25lIG9wZXJhdGlvbi4g Ki8KKyAgLyogUHV0IHRoZSBlbnRpcmUgbGlzdCBvbnRvIHRoZSBmcmVlbGlz dCBpbiBvbmUgb3BlcmF0aW9uLiAqLwogICBpZiAoYml0X29ic3RhY2spCiAg ICAgewogICAgICAgZWx0LT5wcmV2ID0gYml0X29ic3RhY2stPmVsZW1lbnRz OwpAQCAtMjEzLDE0ICsxODEsNDg1IEBAIGJpdG1hcF9lbHRfY2xlYXJfZnJv bSAoYml0bWFwIGhlYWQsIGJpdG0KICAgICAgIGJpdG1hcF9nZ2NfZnJlZSA9 IGVsdDsKICAgICB9CiB9CisMCisvKiBMaW5rZWQtbGlzdCB2aWV3IG9mIGJp dG1hcHMuCisKKyAgIEluIHRoaXMgcmVwcmVzZW50YXRpb24sIHRoZSBiaXRt YXAgZWxlbWVudHMgZm9ybSBhIGRvdWJsZS1saW5rZWQgbGlzdAorICAgd2l0 aCBlbGVtZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBpbmRleC4gICovCisK Ky8qIExpbmsgdGhlIGJpdG1hcCBlbGVtZW50IGludG8gdGhlIGN1cnJlbnQg Yml0bWFwIGxpbmtlZCBsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lk CitiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQgKGJpdG1hcCBoZWFkLCBiaXRt YXBfZWxlbWVudCAqZWxlbWVudCkKK3sKKyAgdW5zaWduZWQgaW50IGluZHgg PSBlbGVtZW50LT5pbmR4OworICBiaXRtYXBfZWxlbWVudCAqcHRyOworCisg IGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zvcm0pOworCisg IC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGVsZW1lbnQsIHNl dCBpdCBpbi4gICovCisgIGlmIChoZWFkLT5maXJzdCA9PSAwKQorICAgIHsK KyAgICAgIGVsZW1lbnQtPm5leHQgPSBlbGVtZW50LT5wcmV2ID0gMDsKKyAg ICAgIGhlYWQtPmZpcnN0ID0gZWxlbWVudDsKKyAgICB9CisKKyAgLyogSWYg dGhpcyBpbmRleCBpcyBsZXNzIHRoYW4gdGhhdCBvZiB0aGUgY3VycmVudCBl bGVtZW50LCBpdCBnb2VzIHNvbWVwbGFjZQorICAgICBiZWZvcmUgdGhlIGN1 cnJlbnQgZWxlbWVudC4gICovCisgIGVsc2UgaWYgKGluZHggPCBoZWFkLT5p bmR4KQorICAgIHsKKyAgICAgIGZvciAocHRyID0gaGVhZC0+Y3VycmVudDsK KwkgICBwdHItPnByZXYgIT0gMCAmJiBwdHItPnByZXYtPmluZHggPiBpbmR4 OworCSAgIHB0ciA9IHB0ci0+cHJldikKKwk7CisKKyAgICAgIGlmIChwdHIt PnByZXYpCisJcHRyLT5wcmV2LT5uZXh0ID0gZWxlbWVudDsKKyAgICAgIGVs c2UKKwloZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisKKyAgICAgIGVsZW1lbnQt PnByZXYgPSBwdHItPnByZXY7CisgICAgICBlbGVtZW50LT5uZXh0ID0gcHRy OworICAgICAgcHRyLT5wcmV2ID0gZWxlbWVudDsKKyAgICB9CisKKyAgLyog T3RoZXJ3aXNlLCBpdCBtdXN0IGdvIHNvbWVwbGFjZSBhZnRlciB0aGUgY3Vy cmVudCBlbGVtZW50LiAgKi8KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAo cHRyID0gaGVhZC0+Y3VycmVudDsKKwkgICBwdHItPm5leHQgIT0gMCAmJiBw dHItPm5leHQtPmluZHggPCBpbmR4OworCSAgIHB0ciA9IHB0ci0+bmV4dCkK Kwk7CisKKyAgICAgIGlmIChwdHItPm5leHQpCisJcHRyLT5uZXh0LT5wcmV2 ID0gZWxlbWVudDsKKworICAgICAgZWxlbWVudC0+bmV4dCA9IHB0ci0+bmV4 dDsKKyAgICAgIGVsZW1lbnQtPnByZXYgPSBwdHI7CisgICAgICBwdHItPm5l eHQgPSBlbGVtZW50OworICAgIH0KKworICAvKiBTZXQgdXAgc28gdGhpcyBp cyB0aGUgZmlyc3QgZWxlbWVudCBzZWFyY2hlZC4gICovCisgIGhlYWQtPmN1 cnJlbnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gaW5keDsKK30KKwor LyogVW5saW5rIHRoZSBiaXRtYXAgZWxlbWVudCBmcm9tIHRoZSBjdXJyZW50 IGJpdG1hcCBsaW5rZWQgbGlzdCwKKyAgIGFuZCByZXR1cm4gaXQgdG8gdGhl IGZyZWVsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRtYXBf bGlzdF91bmxpbmtfZWxlbWVudCAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVt ZW50ICplbGVtZW50KQoreworICBiaXRtYXBfZWxlbWVudCAqbmV4dCA9IGVs ZW1lbnQtPm5leHQ7CisgIGJpdG1hcF9lbGVtZW50ICpwcmV2ID0gZWxlbWVu dC0+cHJldjsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJl ZV9mb3JtKTsKKworICBpZiAocHJldikKKyAgICBwcmV2LT5uZXh0ID0gbmV4 dDsKKworICBpZiAobmV4dCkKKyAgICBuZXh0LT5wcmV2ID0gcHJldjsKKwor ICBpZiAoaGVhZC0+Zmlyc3QgPT0gZWxlbWVudCkKKyAgICBoZWFkLT5maXJz dCA9IG5leHQ7CisKKyAgLyogU2luY2UgdGhlIGZpcnN0IHRoaW5nIHdlIHRy eSBpcyB0byBpbnNlcnQgYmVmb3JlIGN1cnJlbnQsCisgICAgIG1ha2UgY3Vy cmVudCB0aGUgbmV4dCBlbnRyeSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBwcmV2 aW91cy4gICovCisgIGlmIChoZWFkLT5jdXJyZW50ID09IGVsZW1lbnQpCisg ICAgeworICAgICAgaGVhZC0+Y3VycmVudCA9IG5leHQgIT0gMCA/IG5leHQg OiBwcmV2OworICAgICAgaWYgKGhlYWQtPmN1cnJlbnQpCisJaGVhZC0+aW5k eCA9IGhlYWQtPmN1cnJlbnQtPmluZHg7CisgICAgICBlbHNlCisJaGVhZC0+ aW5keCA9IDA7CisgICAgfQorCisgIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0 IChoZWFkLCBlbGVtZW50KTsKK30KKworLyogSW5zZXJ0IGEgbmV3IHVuaW5p dGlhbGl6ZWQgZWxlbWVudCBpbnRvIGJpdG1hcCBIRUFEIGFmdGVyIGVsZW1l bnQKKyAgIEVMVC4gIElmIEVMVCBpcyBOVUxMLCBpbnNlcnQgdGhlIGVsZW1l bnQgYXQgdGhlIHN0YXJ0LiAgUmV0dXJuIHRoZQorICAgbmV3IGVsZW1lbnQu ICAqLworCitzdGF0aWMgYml0bWFwX2VsZW1lbnQgKgorYml0bWFwX2xpc3Rf aW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGJpdG1hcCBoZWFkLAorCQkJCSAgYml0 bWFwX2VsZW1lbnQgKmVsdCwgdW5zaWduZWQgaW50IGluZHgpCit7CisgIGJp dG1hcF9lbGVtZW50ICpub2RlID0gYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUg KGhlYWQpOworICBub2RlLT5pbmR4ID0gaW5keDsKKworICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9mb3JtKTsKKworICBpZiAoIWVsdCkK KyAgICB7CisgICAgICBpZiAoIWhlYWQtPmN1cnJlbnQpCisJeworCSAgaGVh ZC0+Y3VycmVudCA9IG5vZGU7CisJICBoZWFkLT5pbmR4ID0gaW5keDsKKwl9 CisgICAgICBub2RlLT5uZXh0ID0gaGVhZC0+Zmlyc3Q7CisgICAgICBpZiAo bm9kZS0+bmV4dCkKKwlub2RlLT5uZXh0LT5wcmV2ID0gbm9kZTsKKyAgICAg IGhlYWQtPmZpcnN0ID0gbm9kZTsKKyAgICAgIG5vZGUtPnByZXYgPSBOVUxM OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjY19jaGVja2luZ19h c3NlcnQgKGhlYWQtPmN1cnJlbnQpOworICAgICAgbm9kZS0+bmV4dCA9IGVs dC0+bmV4dDsKKyAgICAgIGlmIChub2RlLT5uZXh0KQorCW5vZGUtPm5leHQt PnByZXYgPSBub2RlOworICAgICAgZWx0LT5uZXh0ID0gbm9kZTsKKyAgICAg IG5vZGUtPnByZXYgPSBlbHQ7CisgICAgfQorICByZXR1cm4gbm9kZTsKK30K IAotLyogQ2xlYXIgYSBiaXRtYXAgYnkgZnJlZWluZyB0aGUgbGlua2VkIGxp c3QuICAqLworLyogUmV0dXJuIHRoZSBlbGVtZW50IGZvciBJTkRYLCBvciBO VUxMIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QuICAqLworCitzdGF0 aWMgaW5saW5lIGJpdG1hcF9lbGVtZW50ICoKK2JpdG1hcF9saXN0X2ZpbmRf ZWxlbWVudCAoYml0bWFwIGhlYWQsIHVuc2lnbmVkIGludCBpbmR4LCBiaXRt YXBfdXNhZ2UgKnVzYWdlKQoreworICBiaXRtYXBfZWxlbWVudCAqZWxlbWVu dDsKKyAgaWYgKGhlYWQtPmluZHggPCBpbmR4KQorICAgIC8qIElORFggaXMg YmV5b25kIGhlYWQtPmluZHguICBTZWFyY2ggZnJvbSBoZWFkLT5jdXJyZW50 CisgICAgICAgZm9yd2FyZC4gICovCisgICAgZm9yIChlbGVtZW50ID0gaGVh ZC0+Y3VycmVudDsKKwkgZWxlbWVudC0+bmV4dCAhPSAwICYmIGVsZW1lbnQt PmluZHggPCBpbmR4OworCSBlbGVtZW50ID0gZWxlbWVudC0+bmV4dCkKKyAg ICAgIHsKKwlpZiAoR0FUSEVSX1NUQVRJU1RJQ1MgJiYgdXNhZ2UpCisJICB1 c2FnZS0+bV9zZWFyY2hfaXRlcisrOworICAgICAgfQorCisgIGVsc2UgaWYg KGhlYWQtPmluZHggLyAyIDwgaW5keCkKKyAgICAvKiBJTkRYIGlzIGxlc3Mg dGhhbiBoZWFkLT5pbmR4IGFuZCBjbG9zZXIgdG8gaGVhZC0+aW5keCB0aGFu IHRvCisgICAgICAgMC4gIFNlYXJjaCBmcm9tIGhlYWQtPmN1cnJlbnQgYmFj a3dhcmQuICAqLworICAgIGZvciAoZWxlbWVudCA9IGhlYWQtPmN1cnJlbnQ7 CisJIGVsZW1lbnQtPnByZXYgIT0gMCAmJiBlbGVtZW50LT5pbmR4ID4gaW5k eDsKKwkgZWxlbWVudCA9IGVsZW1lbnQtPnByZXYpCisgICAgICB7CisJaWYg KEdBVEhFUl9TVEFUSVNUSUNTICYmIHVzYWdlKQorCSAgdXNhZ2UtPm1fc2Vh cmNoX2l0ZXIrKzsKKyAgICAgIH0KKworICBlbHNlCisgICAgLyogSU5EWCBp cyBsZXNzIHRoYW4gaGVhZC0+aW5keCBhbmQgY2xvc2VyIHRvIDAgdGhhbiB0 bworICAgICAgIGhlYWQtPmluZHguICBTZWFyY2ggZnJvbSBoZWFkLT5maXJz dCBmb3J3YXJkLiAgKi8KKyAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5maXJz dDsKKwkgZWxlbWVudC0+bmV4dCAhPSAwICYmIGVsZW1lbnQtPmluZHggPCBp bmR4OworCSBlbGVtZW50ID0gZWxlbWVudC0+bmV4dCkKKyAgICAgIHsKKwlp ZiAoR0FUSEVSX1NUQVRJU1RJQ1MgJiYgdXNhZ2UpCisJICB1c2FnZS0+bV9z ZWFyY2hfaXRlcisrOworICAgICAgfQorCisgIC8qIGBlbGVtZW50JyBpcyB0 aGUgbmVhcmVzdCB0byB0aGUgb25lIHdlIHdhbnQuICBJZiBpdCdzIG5vdCB0 aGUgb25lIHdlCisgICAgIHdhbnQsIHRoZSBvbmUgd2Ugd2FudCBkb2Vzbid0 IGV4aXN0LiAgKi8KKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoZWxlbWVudCAh PSBOVUxMKTsKKyAgaGVhZC0+Y3VycmVudCA9IGVsZW1lbnQ7CisgIGhlYWQt PmluZHggPSBlbGVtZW50LT5pbmR4OworICBpZiAoZWxlbWVudC0+aW5keCAh PSBpbmR4KQorICAgIGVsZW1lbnQgPSAwOworICByZXR1cm4gZWxlbWVudDsK K30KKworDAorLyogU3BsYXktdHJlZSB2aWV3IG9mIGJpdG1hcHMuCisKKyAg IFRoaXMgaXMgYW4gYWxtb3N0IG9uZS10by1vbmUgdGhlIGltcGxlbWVudGF0 aW4gb2YgdGhlIHNpbXBsZSB0b3AtZG93bgorICAgc3BsYXkgdHJlZSBpbiBT bGVhdG9yIGFuZCBUYXJqYW4ncyAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNl YXJjaCBUcmVlcyIuCisgICBJdCBpcyBwcm9iYWJseSBub3QgdGhlIG1vc3Qg ZWZmaWNpZW50IGZvcm0gb2Ygc3BsYXkgdHJlZXMsIGJ1dCBpdCBzaG91bGQK KyAgIGJlIGdvb2QgZW5vdWdoIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGlzIGlk ZWEgb2YgYml0bWFwcy1hcy10cmVlcy4KKyAgIAorICAgRm9yIGFsbCBmdW5j dGlvbnMgYmVsb3csIHRoZSB2YXJpYWJsZSBvciBmdW5jdGlvbiBhcmd1bWVu dCAidCIgaXMgYSBub2RlCisgICBpbiB0aGUgdHJlZSwgYW5kICJlIiBpcyBh IHRlbXBvcmFyeSBvciBuZXcgbm9kZSBpbiB0aGUgdHJlZS4gIFRoZSByZXN0 CisgICBpcyBzdWZmaWNpZW50bHkgc3RyYWlnaC1mb3J3YXJkIChhbmQgdmVy eSB3ZWxsIGV4cGxhaW5lZCBpbiB0aGUgcGFwZXIpCisgICB0aGF0IGNvbW1l bnQgd291bGQgb25seSBjbHV0dGVyIHRoaW5ncy4gICovCisKK3N0YXRpYyBp bmxpbmUgdm9pZAorYml0bWFwX3RyZWVfbGlua19sZWZ0IChiaXRtYXBfZWxl bWVudCAqICZ0LCBiaXRtYXBfZWxlbWVudCAqICZsKQoreworICBsLT5uZXh0 ID0gdDsKKyAgbCA9IHQ7CisgIHQgPSB0LT5uZXh0OworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK2JpdG1hcF90cmVlX2xpbmtfcmlnaHQgKGJpdG1hcF9l bGVtZW50ICogJnQsIGJpdG1hcF9lbGVtZW50ICogJnIpCit7CisgIHItPnBy ZXYgPSB0OworICByID0gdDsKKyAgdCA9IHQtPnByZXY7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfcm90YXRlX2xlZnQgKGJpdG1h cF9lbGVtZW50ICogJnQpCit7CisgIGJpdG1hcF9lbGVtZW50ICplID0gdC0+ bmV4dDsKKyAgdC0+bmV4dCA9IHQtPm5leHQtPnByZXY7CisgIGUtPnByZXYg PSB0OworICB0ID0gZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRt YXBfdHJlZV9yb3RhdGVfcmlnaHQgKGJpdG1hcF9lbGVtZW50ICogJnQpCit7 CisgIGJpdG1hcF9lbGVtZW50ICplID0gdC0+cHJldjsKKyAgdC0+cHJldiA9 IHQtPnByZXYtPm5leHQ7CisgIGUtPm5leHQgPSB0OworICB0ID0gZTsKK30K Kworc3RhdGljIGJpdG1hcF9lbGVtZW50ICoKK2JpdG1hcF90cmVlX3NwbGF5 IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKnQsIHVuc2lnbmVkIGlu dCBpbmR4KQoreworICBiaXRtYXBfZWxlbWVudCBOLCAqbCwgKnI7CisKKyAg aWYgKHQgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBiaXRtYXBf dXNhZ2UgKnVzYWdlID0gTlVMTDsKKyAgaWYgKEdBVEhFUl9TVEFUSVNUSUNT KQorICAgIHVzYWdlID0gYml0bWFwX21lbV9kZXNjLmdldF9kZXNjcmlwdG9y X2Zvcl9pbnN0YW5jZSAoaGVhZCk7CisKKyAgTi5wcmV2ID0gTi5uZXh0ID0g TlVMTDsKKyAgbCA9IHIgPSAmTjsKKworICB3aGlsZSAoaW5keCAhPSB0LT5p bmR4KQorICAgIHsKKyAgICAgIGlmIChHQVRIRVJfU1RBVElTVElDUyAmJiB1 c2FnZSkKKwl1c2FnZS0+bV9zZWFyY2hfaXRlcisrOworCisgICAgICBpZiAo aW5keCA8IHQtPmluZHgpCisJeworCSAgaWYgKHQtPnByZXYgIT0gTlVMTCAm JiBpbmR4IDwgdC0+cHJldi0+aW5keCkKKwkgICAgYml0bWFwX3RyZWVfcm90 YXRlX3JpZ2h0ICh0KTsKKwkgIGlmICh0LT5wcmV2ID09IE5VTEwpCisJICAg IGJyZWFrOworCSAgYml0bWFwX3RyZWVfbGlua19yaWdodCAodCwgcik7CisJ fQorICAgICAgZWxzZSBpZiAoaW5keCA+IHQtPmluZHgpCisJeworCSAgaWYg KHQtPm5leHQgIT0gTlVMTCAmJiBpbmR4ID4gdC0+bmV4dC0+aW5keCkKKwkg ICAgYml0bWFwX3RyZWVfcm90YXRlX2xlZnQgKHQpOworCSAgaWYgKHQtPm5l eHQgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJICBiaXRtYXBfdHJlZV9saW5r X2xlZnQgKHQsIGwpOworCX0KKyAgICB9CisKKyAgbC0+bmV4dCA9IHQtPnBy ZXY7CisgIHItPnByZXYgPSB0LT5uZXh0OworICB0LT5wcmV2ID0gTi5uZXh0 OworICB0LT5uZXh0ID0gTi5wcmV2OworICByZXR1cm4gdDsKK30KKworLyog TGluayBiaXRtYXAgZWxlbWVudCBFIGludG8gdGhlIGN1cnJlbnQgYml0bWFw IHNwbGF5IHRyZWUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdG1h cF90cmVlX2xpbmtfZWxlbWVudCAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVt ZW50ICplKQoreworICBpZiAoaGVhZC0+Zmlyc3QgPT0gTlVMTCkKKyAgICBl LT5wcmV2ID0gZS0+bmV4dCA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAg ICBiaXRtYXBfZWxlbWVudCAqdCA9IGJpdG1hcF90cmVlX3NwbGF5IChoZWFk LCBoZWFkLT5maXJzdCwgZS0+aW5keCk7CisgICAgICBpZiAoZS0+aW5keCA8 IHQtPmluZHgpCisJeworCSAgZS0+cHJldiA9IHQtPnByZXY7CisJICBlLT5u ZXh0ID0gdDsKKwkgIHQtPnByZXYgPSBOVUxMOworCX0KKyAgICAgIGVsc2Ug aWYgKGUtPmluZHggPiB0LT5pbmR4KQorCXsKKwkgIGUtPm5leHQgPSB0LT5u ZXh0OworCSAgZS0+cHJldiA9IHQ7CisJICB0LT5uZXh0ID0gTlVMTDsKKwl9 CisgICAgICBlbHNlCisJZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKyAg aGVhZC0+Zmlyc3QgPSBlOworICBoZWFkLT5jdXJyZW50ID0gZTsKKyAgaGVh ZC0+aW5keCA9IGUtPmluZHg7Cit9CisKKy8qIFVubGluayBiaXRtYXAgZWxl bWVudCBFIGZyb20gdGhlIGN1cnJlbnQgYml0bWFwIHNwbGF5IHRyZWUsCisg ICBhbmQgcmV0dXJuIGl0IHRvIHRoZSBmcmVlbGlzdC4gICovCisKK3N0YXRp YyB2b2lkCitiaXRtYXBfdHJlZV91bmxpbmtfZWxlbWVudCAoYml0bWFwIGhl YWQsIGJpdG1hcF9lbGVtZW50ICplKQoreworICBiaXRtYXBfZWxlbWVudCAq dCA9IGJpdG1hcF90cmVlX3NwbGF5IChoZWFkLCBoZWFkLT5maXJzdCwgZS0+ aW5keCk7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAodCA9PSBlKTsKKwor ICBpZiAoZS0+cHJldiA9PSBOVUxMKQorICAgIHQgPSBlLT5uZXh0OworICBl bHNlCisgICAgeworICAgICAgdCA9IGJpdG1hcF90cmVlX3NwbGF5IChoZWFk LCBlLT5wcmV2LCBlLT5pbmR4KTsKKyAgICAgIHQtPm5leHQgPSBlLT5uZXh0 OworICAgIH0KKyAgaGVhZC0+Zmlyc3QgPSB0OworICBoZWFkLT5jdXJyZW50 ID0gdDsKKyAgaGVhZC0+aW5keCA9ICh0ICE9IE5VTEwpID8gdC0+aW5keCA6 IDA7CisKKyAgYml0bWFwX2VsZW1fdG9fZnJlZWxpc3QgKGhlYWQsIGUpOwor fQorCisvKiBSZXR1cm4gdGhlIGVsZW1lbnQgZm9yIElORFgsIG9yIE5VTEwg aWYgdGhlIGVsZW1lbnQgZG9lc24ndCBleGlzdC4gICovCisKK3N0YXRpYyBp bmxpbmUgYml0bWFwX2VsZW1lbnQgKgorYml0bWFwX3RyZWVfZmluZF9lbGVt ZW50IChiaXRtYXAgaGVhZCwgdW5zaWduZWQgaW50IGluZHgpCit7CisgIGJp dG1hcF9lbGVtZW50ICplbGVtZW50ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhl YWQsIGhlYWQtPmZpcnN0LCBpbmR4KTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2Vy dCAoZWxlbWVudCAhPSBOVUxMKTsKKyAgaGVhZC0+Zmlyc3QgPSBlbGVtZW50 OworICBoZWFkLT5jdXJyZW50ID0gZWxlbWVudDsKKyAgaGVhZC0+aW5keCA9 IGVsZW1lbnQtPmluZHg7CisgIGlmIChlbGVtZW50LT5pbmR4ICE9IGluZHgp CisgICAgZWxlbWVudCA9IDA7CisgIHJldHVybiBlbGVtZW50OworfQorDAor LyogQ29udmVydGluZyBiaXRtYXAgdmlld3MgZnJvbSBsaW5rZWQtbGlzdCB0 byB0cmVlIGFuZCB2aWNlIHZlcnNhLiAgKi8KKworLyogU3BsaWNlIGVsZW1l bnQgRSBhbmQgYWxsIGVsZW1lbnRzIHdpdGggYSBsYXJnZXIgaW5kZXggZnJv bQorICAgYml0bWFwIEhFQUQsIGNvbnZlcnQgdGhlIHNwbGljZWQgZWxlbWVu dHMgdG8gdGhlIGxpbmtlZC1saXN0CisgICB2aWV3LCBhbmQgcmV0dXJuIHRo ZSBoZWFkIG9mIHRoZSBsaXN0ICh3aGljaCBzaG91bGQgYmUgRSBhZ2Fpbiks ICAqLworCitzdGF0aWMgYml0bWFwX2VsZW1lbnQgKgorYml0bWFwX3RyZWVf bGlzdGlmeV9mcm9tIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmUp Cit7CisgIGJpdG1hcF9lbGVtZW50ICp0LCAqZXJiOworCisgIC8qIERldGFj aCB0aGUgcmlnaHQgYnJhbmNoIGZyb20gRSAoYWxsIGVsZW1lbnRzIHdpdGgg aW5keCA+IEUtPmluZHgpLAorICAgICBhbmQgc3BsYXkgRSB0byB0aGUgcm9v dC4gICovCisgIGVyYiA9IGUtPm5leHQ7CisgIGUtPm5leHQgPSBOVUxMOwor ICB0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBl LT5pbmR4KTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAodCA9PSBlKTsKKwor ICAvKiBCZWNhdXNlIEUgaGFzIG5vIHJpZ2h0IGJyYW5jaCwgYW5kIHdlIHJv dGF0ZWQgaXQgdG8gdGhlIHJvb3QsCisgICAgIHRoZSBsZWZ0IGJyYW5jaCBp cyB0aGUgbmV3IHJvb3QuICAqLworICB0ID0gZS0+cHJldjsKKyAgaGVhZC0+ Zmlyc3QgPSB0OworICBoZWFkLT5jdXJyZW50ID0gdDsKKyAgaGVhZC0+aW5k eCA9ICh0ICE9IE5VTEwpID8gdC0+aW5keCA6IDA7CisKKyAgLyogRGV0YWNo IHRoZSB0cmVlIGZyb20gRSwgYW5kIHJlLWF0dGFjaCB0aGUgcmlnaHQgYnJh bmNoIG9mIEUuICAqLworICBlLT5wcmV2ID0gTlVMTDsKKyAgZS0+bmV4dCA9 IGVyYjsKKworICAvKiBUaGUgdHJlZSBpcyBub3cgdmFsaWQgYWdhaW4uICBO b3cgd2UgbmVlZCB0byAidW4tdHJlZSIgRS4KKyAgICAgSXQgaXMgaW1wZXJh dGl2ZSB0aGF0IGEgbm9uLXJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBpcyB1 c2VkCisgICAgIGZvciB0aGlzLCBiZWNhdXNlIHNwbGF5IHRyZWVzIGhhdmUg YSB3b3JzdCBjYXNlIGRlcHRoIG9mIE8oTikKKyAgICAgZm9yIGEgdHJlZSB3 aXRoIE4gbm9kZXMuICBBIHJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBjb3Vs ZAorICAgICByZXN1bHQgaW4gYSBzdGFjayBvdmVyZmxvdyBmb3IgYSBzdWZm aWNpZW50bHkgbGFyZ2UsIHVuYmFsYW5jZWQKKyAgICAgYml0bWFwIHRyZWUu ICAqLworCisgIHZlYzxiaXRtYXBfZWxlbWVudCAqPiBzdGFjayA9IHZOVUxM OworICB2ZWM8Yml0bWFwX2VsZW1lbnQgKj4gc29ydGVkX2VsZW1lbnRzID0g dk5VTEw7CisgIGJpdG1hcF9lbGVtZW50ICpuID0gZTsKKworICB3aGlsZSAo dHJ1ZSkKKyAgICB7CisgICAgICB3aGlsZSAobiAhPSBOVUxMKQorCXsKKwkg IHN0YWNrLnNhZmVfcHVzaCAobik7CisJICBuID0gbi0+cHJldjsKKwl9CisK KyAgICAgIGlmIChzdGFjay5pc19lbXB0eSAoKSkKKwlicmVhazsKKworICAg ICAgbiA9IHN0YWNrLnBvcCAoKTsKKyAgICAgIHNvcnRlZF9lbGVtZW50cy5z YWZlX3B1c2ggKG4pOworICAgICAgbiA9IG4tPm5leHQ7CisgICAgfQorICBz dGFjay5yZWxlYXNlICgpOworCisgIGdjY19hc3NlcnQgKHNvcnRlZF9lbGVt ZW50c1swXSA9PSBlKTsKKworICBiaXRtYXBfZWxlbWVudCAqcHJldiA9IE5V TEw7CisgIHVuc2lnbmVkIGl4OworICBGT1JfRUFDSF9WRUNfRUxUIChzb3J0 ZWRfZWxlbWVudHMsIGl4LCBuKQorICAgIHsKKyAgICAgIGlmIChwcmV2ICE9 IE5VTEwpCisgICAgICAgIHByZXYtPm5leHQgPSBuOworICAgICAgbi0+cHJl diA9IHByZXY7CisgICAgICBuLT5uZXh0ID0gTlVMTDsKKyAgICAgIHByZXYg PSBuOworICAgIH0KKyAgc29ydGVkX2VsZW1lbnRzLnJlbGVhc2UgKCk7CisK KyAgcmV0dXJuIGU7Cit9CisKKy8qIENvbnZlcnQgYml0bWFwIEhFQUQgZnJv bSBzcGxheS10cmVlIHZpZXcgdG8gbGlua2VkLWxpc3Qgdmlldy4gICovCisK K3ZvaWQKK2JpdG1hcF9saXN0X3ZpZXcgKGJpdG1hcCBoZWFkKQoreworICBi aXRtYXBfZWxlbWVudCAqcHRyOworCisgIGdjY19hc3NlcnQgKGhlYWQtPnRy ZWVfZm9ybSk7CisKKyAgcHRyID0gaGVhZC0+Zmlyc3Q7CisgIGlmIChwdHIp CisgICAgeworICAgICAgd2hpbGUgKHB0ci0+cHJldikKKwliaXRtYXBfdHJl ZV9yb3RhdGVfcmlnaHQgKHB0cik7CisgICAgICBoZWFkLT5maXJzdCA9IHB0 cjsKKyAgICAgIGhlYWQtPmZpcnN0ID0gYml0bWFwX3RyZWVfbGlzdGlmeV9m cm9tIChoZWFkLCBwdHIpOworICAgIH0KKworICBoZWFkLT50cmVlX2Zvcm0g PSBmYWxzZTsKK30KKworLyogQ29udmVydCBiaXRtYXAgSEVBRCBmcm9tIGxp bmtlZC1saXN0IHZpZXcgdG8gc3BsYXktdHJlZSB2aWV3LgorICAgVGhpcyBp cyBzaW1wbHkgYSBtYXR0ZXIgb2YgZHJvcHBpbmcgdGhlIHByZXYgb3IgbmV4 dCBwb2ludGVycworICAgYW5kIHNldHRpbmcgdGhlIHRyZWVfZm9ybSBmbGFn LiAgVGhlIHRyZWUgd2lsbCBiYWxhbmNlIGl0c2VsZgorICAgaWYgYW5kIHdo ZW4gaXQgaXMgdXNlZC4gICovCisKK3ZvaWQKK2JpdG1hcF90cmVlX3ZpZXcg KGJpdG1hcCBoZWFkKQoreworICBiaXRtYXBfZWxlbWVudCAqcHRyOworCisg IGdjY19hc3NlcnQgKCEgaGVhZC0+dHJlZV9mb3JtKTsKKworICBwdHIgPSBo ZWFkLT5maXJzdDsKKyAgd2hpbGUgKHB0cikKKyAgICB7CisgICAgICBwdHIt PnByZXYgPSBOVUxMOworICAgICAgcHRyID0gcHRyLT5uZXh0OworICAgIH0K KworICBoZWFkLT50cmVlX2Zvcm0gPSB0cnVlOworfQorDAorLyogQ2xlYXIg YSBiaXRtYXAgYnkgZnJlZWluZyBhbGwgaXRzIGVsZW1lbnRzLiAgKi8KIAog dm9pZAogYml0bWFwX2NsZWFyIChiaXRtYXAgaGVhZCkKIHsKLSAgaWYgKGhl YWQtPmZpcnN0KQotICAgIGJpdG1hcF9lbHRfY2xlYXJfZnJvbSAoaGVhZCwg aGVhZC0+Zmlyc3QpOworICBpZiAoaGVhZC0+Zmlyc3QgPT0gTlVMTCkKKyAg ICByZXR1cm47CisgIGlmIChoZWFkLT50cmVlX2Zvcm0pCisgICAgeworICAg ICAgYml0bWFwX2VsZW1lbnQgKmUsICp0OworICAgICAgZm9yIChlID0gaGVh ZC0+Zmlyc3Q7IGUtPnByZXY7IGUgPSBlLT5wcmV2KQorCS8qIExvb3AgdG8g ZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSBzbWFsbGVzdCBpbmRleC4gICov IDsKKyAgICAgIHQgPSBiaXRtYXBfdHJlZV9zcGxheSAoaGVhZCwgaGVhZC0+ Zmlyc3QsIGUtPmluZHgpOworICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo dCA9PSBlKTsKKyAgICAgIGhlYWQtPmZpcnN0ID0gdDsKKyAgICB9CisgIGJp dG1hcF9lbHRfY2xlYXJfZnJvbSAoaGVhZCwgaGVhZC0+Zmlyc3QpOwogfQog DAogLyogSW5pdGlhbGl6ZSBhIGJpdG1hcCBvYnN0YWNrLiAgSWYgQklUX09C U1RBQ0sgaXMgTlVMTCwgaW5pdGlhbGl6ZQpAQCAtMzQ0LDk2ICs3ODMsNiBA QCBiaXRtYXBfZWxlbWVudF96ZXJvcCAoY29uc3QgYml0bWFwX2VsZW1lCiAj ZW5kaWYKIH0KIAwKLS8qIExpbmsgdGhlIGJpdG1hcCBlbGVtZW50IGludG8g dGhlIGN1cnJlbnQgYml0bWFwIGxpbmtlZCBsaXN0LiAgKi8KLQotc3RhdGlj IGlubGluZSB2b2lkCi1iaXRtYXBfZWxlbWVudF9saW5rIChiaXRtYXAgaGVh ZCwgYml0bWFwX2VsZW1lbnQgKmVsZW1lbnQpCi17Ci0gIHVuc2lnbmVkIGlu dCBpbmR4ID0gZWxlbWVudC0+aW5keDsKLSAgYml0bWFwX2VsZW1lbnQgKnB0 cjsKLQotICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhbmQgb25seSBlbGVt ZW50LCBzZXQgaXQgaW4uICAqLwotICBpZiAoaGVhZC0+Zmlyc3QgPT0gMCkK LSAgICB7Ci0gICAgICBlbGVtZW50LT5uZXh0ID0gZWxlbWVudC0+cHJldiA9 IDA7Ci0gICAgICBoZWFkLT5maXJzdCA9IGVsZW1lbnQ7Ci0gICAgfQotCi0g IC8qIElmIHRoaXMgaW5kZXggaXMgbGVzcyB0aGFuIHRoYXQgb2YgdGhlIGN1 cnJlbnQgZWxlbWVudCwgaXQgZ29lcyBzb21lcGxhY2UKLSAgICAgYmVmb3Jl IHRoZSBjdXJyZW50IGVsZW1lbnQuICAqLwotICBlbHNlIGlmIChpbmR4IDwg aGVhZC0+aW5keCkKLSAgICB7Ci0gICAgICBmb3IgKHB0ciA9IGhlYWQtPmN1 cnJlbnQ7Ci0JICAgcHRyLT5wcmV2ICE9IDAgJiYgcHRyLT5wcmV2LT5pbmR4 ID4gaW5keDsKLQkgICBwdHIgPSBwdHItPnByZXYpCi0JOwotCi0gICAgICBp ZiAocHRyLT5wcmV2KQotCXB0ci0+cHJldi0+bmV4dCA9IGVsZW1lbnQ7Ci0g ICAgICBlbHNlCi0JaGVhZC0+Zmlyc3QgPSBlbGVtZW50OwotCi0gICAgICBl bGVtZW50LT5wcmV2ID0gcHRyLT5wcmV2OwotICAgICAgZWxlbWVudC0+bmV4 dCA9IHB0cjsKLSAgICAgIHB0ci0+cHJldiA9IGVsZW1lbnQ7Ci0gICAgfQot Ci0gIC8qIE90aGVyd2lzZSwgaXQgbXVzdCBnbyBzb21lcGxhY2UgYWZ0ZXIg dGhlIGN1cnJlbnQgZWxlbWVudC4gICovCi0gIGVsc2UKLSAgICB7Ci0gICAg ICBmb3IgKHB0ciA9IGhlYWQtPmN1cnJlbnQ7Ci0JICAgcHRyLT5uZXh0ICE9 IDAgJiYgcHRyLT5uZXh0LT5pbmR4IDwgaW5keDsKLQkgICBwdHIgPSBwdHIt Pm5leHQpCi0JOwotCi0gICAgICBpZiAocHRyLT5uZXh0KQotCXB0ci0+bmV4 dC0+cHJldiA9IGVsZW1lbnQ7Ci0KLSAgICAgIGVsZW1lbnQtPm5leHQgPSBw dHItPm5leHQ7Ci0gICAgICBlbGVtZW50LT5wcmV2ID0gcHRyOwotICAgICAg cHRyLT5uZXh0ID0gZWxlbWVudDsKLSAgICB9Ci0KLSAgLyogU2V0IHVwIHNv IHRoaXMgaXMgdGhlIGZpcnN0IGVsZW1lbnQgc2VhcmNoZWQuICAqLwotICBo ZWFkLT5jdXJyZW50ID0gZWxlbWVudDsKLSAgaGVhZC0+aW5keCA9IGluZHg7 Ci19Ci0KLS8qIEluc2VydCBhIG5ldyB1bmluaXRpYWxpemVkIGVsZW1lbnQg aW50byBiaXRtYXAgSEVBRCBhZnRlciBlbGVtZW50Ci0gICBFTFQuICBJZiBF TFQgaXMgTlVMTCwgaW5zZXJ0IHRoZSBlbGVtZW50IGF0IHRoZSBzdGFydC4g IFJldHVybiB0aGUKLSAgIG5ldyBlbGVtZW50LiAgKi8KLQotc3RhdGljIGJp dG1hcF9lbGVtZW50ICoKLWJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChiaXRt YXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCwgdW5zaWduZWQgaW50IGlu ZHgpCi17Ci0gIGJpdG1hcF9lbGVtZW50ICpub2RlID0gYml0bWFwX2VsZW1l bnRfYWxsb2NhdGUgKGhlYWQpOwotICBub2RlLT5pbmR4ID0gaW5keDsKLQot ICBpZiAoIWVsdCkKLSAgICB7Ci0gICAgICBpZiAoIWhlYWQtPmN1cnJlbnQp Ci0JewotCSAgaGVhZC0+Y3VycmVudCA9IG5vZGU7Ci0JICBoZWFkLT5pbmR4 ID0gaW5keDsKLQl9Ci0gICAgICBub2RlLT5uZXh0ID0gaGVhZC0+Zmlyc3Q7 Ci0gICAgICBpZiAobm9kZS0+bmV4dCkKLQlub2RlLT5uZXh0LT5wcmV2ID0g bm9kZTsKLSAgICAgIGhlYWQtPmZpcnN0ID0gbm9kZTsKLSAgICAgIG5vZGUt PnByZXYgPSBOVUxMOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGdj Y19jaGVja2luZ19hc3NlcnQgKGhlYWQtPmN1cnJlbnQpOwotICAgICAgbm9k ZS0+bmV4dCA9IGVsdC0+bmV4dDsKLSAgICAgIGlmIChub2RlLT5uZXh0KQot CW5vZGUtPm5leHQtPnByZXYgPSBub2RlOwotICAgICAgZWx0LT5uZXh0ID0g bm9kZTsKLSAgICAgIG5vZGUtPnByZXYgPSBlbHQ7Ci0gICAgfQotICByZXR1 cm4gbm9kZTsKLX0KLQwKIC8qIENvcHkgYSBiaXRtYXAgdG8gYW5vdGhlciBi aXRtYXAuICAqLwogCiB2b2lkCkBAIC00NDIsNiArNzkxLDggQEAgYml0bWFw X2NvcHkgKGJpdG1hcCB0bywgY29uc3RfYml0bWFwIGZybwogICBjb25zdCBi aXRtYXBfZWxlbWVudCAqZnJvbV9wdHI7CiAgIGJpdG1hcF9lbGVtZW50ICp0 b19wdHIgPSAwOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCF0by0+dHJl ZV9mb3JtICYmICFmcm9tLT50cmVlX2Zvcm0pOworCiAgIGJpdG1hcF9jbGVh ciAodG8pOwogCiAgIC8qIENvcHkgZWxlbWVudHMgaW4gZm9yd2FyZCBkaXJl Y3Rpb24gb25lIGF0IGEgdGltZS4gICovCkBAIC00NTIsOCArODAzLDkgQEAg Yml0bWFwX2NvcHkgKGJpdG1hcCB0bywgY29uc3RfYml0bWFwIGZybwogICAg ICAgdG9fZWx0LT5pbmR4ID0gZnJvbV9wdHItPmluZHg7CiAgICAgICBtZW1j cHkgKHRvX2VsdC0+Yml0cywgZnJvbV9wdHItPmJpdHMsIHNpemVvZiAodG9f ZWx0LT5iaXRzKSk7CiAKLSAgICAgIC8qIEhlcmUgd2UgaGF2ZSBhIHNwZWNp YWwgY2FzZSBvZiBiaXRtYXBfZWxlbWVudF9saW5rLCBmb3IgdGhlIGNhc2UK LQkgd2hlcmUgd2Uga25vdyB0aGUgbGlua3MgYXJlIGJlaW5nIGVudGVyZWQg aW4gc2VxdWVuY2UuICAqLworICAgICAgLyogSGVyZSB3ZSBoYXZlIGEgc3Bl Y2lhbCBjYXNlIG9mIGJpdG1hcF9saXN0X2xpbmtfZWxlbWVudCwKKyAgICAg ICAgIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBsaW5rcyBhcmUg YmVpbmcgZW50ZXJlZAorCSBpbiBzZXF1ZW5jZS4gICovCiAgICAgICBpZiAo dG9fcHRyID09IDApCiAJewogCSAgdG8tPmZpcnN0ID0gdG8tPmN1cnJlbnQg PSB0b19lbHQ7CkBAIC01MDYsNyArODU4LDkgQEAgYml0bWFwX2ZpbmRfYml0 IChiaXRtYXAgaGVhZCwgdW5zaWduZWQgaQogICBpZiAoaGVhZC0+Y3VycmVu dCA9PSBOVUxMCiAgICAgICB8fCBoZWFkLT5pbmR4ID09IGluZHgpCiAgICAg cmV0dXJuIGhlYWQtPmN1cnJlbnQ7Ci0gIGlmIChoZWFkLT5jdXJyZW50ID09 IGhlYWQtPmZpcnN0CisgIC8qID8/PyAgUHJlbWF0dXJlIG9wdGltaXphdGlv bj8gICovCisgIGlmICghaGVhZC0+dHJlZV9mb3JtCisgICAgICAmJiBoZWFk LT5jdXJyZW50ID09IGhlYWQtPmZpcnN0CiAgICAgICAmJiBoZWFkLT5maXJz dC0+bmV4dCA9PSBOVUxMKQogICAgIHJldHVybiBOVUxMOwogCkBAIC01MjEs NDUgKzg3NSwxMCBAQCBiaXRtYXBfZmluZF9iaXQgKGJpdG1hcCBoZWFkLCB1 bnNpZ25lZCBpCiAgIGlmIChHQVRIRVJfU1RBVElTVElDUyAmJiB1c2FnZSkK ICAgICB1c2FnZS0+bV9uc2VhcmNoZXMrKzsKIAotICBpZiAoaGVhZC0+aW5k eCA8IGluZHgpCi0gICAgLyogSU5EWCBpcyBiZXlvbmQgaGVhZC0+aW5keC4g IFNlYXJjaCBmcm9tIGhlYWQtPmN1cnJlbnQKLSAgICAgICBmb3J3YXJkLiAg Ki8KLSAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5jdXJyZW50OwotCSBlbGVt ZW50LT5uZXh0ICE9IDAgJiYgZWxlbWVudC0+aW5keCA8IGluZHg7Ci0JIGVs ZW1lbnQgPSBlbGVtZW50LT5uZXh0KQotICAgICAgewotCWlmIChHQVRIRVJf U1RBVElTVElDUyAmJiB1c2FnZSkKLQkgIHVzYWdlLT5tX3NlYXJjaF9pdGVy Kys7Ci0gICAgICB9Ci0KLSAgZWxzZSBpZiAoaGVhZC0+aW5keCAvIDIgPCBp bmR4KQotICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhlYWQtPmluZHggYW5k IGNsb3NlciB0byBoZWFkLT5pbmR4IHRoYW4gdG8KLSAgICAgICAwLiAgU2Vh cmNoIGZyb20gaGVhZC0+Y3VycmVudCBiYWNrd2FyZC4gICovCi0gICAgZm9y IChlbGVtZW50ID0gaGVhZC0+Y3VycmVudDsKLQkgZWxlbWVudC0+cHJldiAh PSAwICYmIGVsZW1lbnQtPmluZHggPiBpbmR4OwotCSBlbGVtZW50ID0gZWxl bWVudC0+cHJldikKLSAgICAgIHsKLQlpZiAoR0FUSEVSX1NUQVRJU1RJQ1Mg JiYgdXNhZ2UpCi0JICB1c2FnZS0+bV9zZWFyY2hfaXRlcisrOwotICAgICAg fQotCisgIGlmICghaGVhZC0+dHJlZV9mb3JtKQorICAgIGVsZW1lbnQgPSBi aXRtYXBfbGlzdF9maW5kX2VsZW1lbnQgKGhlYWQsIGluZHgsIHVzYWdlKTsK ICAgZWxzZQotICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhlYWQtPmluZHgg YW5kIGNsb3NlciB0byAwIHRoYW4gdG8KLSAgICAgICBoZWFkLT5pbmR4LiAg U2VhcmNoIGZyb20gaGVhZC0+Zmlyc3QgZm9yd2FyZC4gICovCi0gICAgZm9y IChlbGVtZW50ID0gaGVhZC0+Zmlyc3Q7Ci0JIGVsZW1lbnQtPm5leHQgIT0g MCAmJiBlbGVtZW50LT5pbmR4IDwgaW5keDsKLQkgZWxlbWVudCA9IGVsZW1l bnQtPm5leHQpCi0gICAgICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MgJiYgdXNh Z2UpCi0JewotCSAgdXNhZ2UtPm1fc2VhcmNoX2l0ZXIrKzsKLQl9Ci0KLSAg LyogYGVsZW1lbnQnIGlzIHRoZSBuZWFyZXN0IHRvIHRoZSBvbmUgd2Ugd2Fu dC4gIElmIGl0J3Mgbm90IHRoZSBvbmUgd2UKLSAgICAgd2FudCwgdGhlIG9u ZSB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QuICAqLwotICBoZWFkLT5jdXJyZW50 ID0gZWxlbWVudDsKLSAgaGVhZC0+aW5keCA9IGVsZW1lbnQtPmluZHg7Ci0g IGlmIChlbGVtZW50LT5pbmR4ICE9IGluZHgpCi0gICAgZWxlbWVudCA9IDA7 CisgICAgZWxlbWVudCA9IGJpdG1hcF90cmVlX2ZpbmRfZWxlbWVudCAoaGVh ZCwgaW5keCk7CiAKICAgcmV0dXJuIGVsZW1lbnQ7CiB9CkBAIC01ODMsNyAr OTAyLDEyIEBAIGJpdG1hcF9jbGVhcl9iaXQgKGJpdG1hcCBoZWFkLCBpbnQg Yml0KQogCSAgLyogSWYgd2UgY2xlYXJlZCB0aGUgZW50aXJlIHdvcmQsIGZy ZWUgdXAgdGhlIGVsZW1lbnQuICAqLwogCSAgaWYgKCFwdHItPmJpdHNbd29y ZF9udW1dCiAJICAgICAgJiYgYml0bWFwX2VsZW1lbnRfemVyb3AgKHB0cikp Ci0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGhlYWQsIHB0cik7CisJICAg IHsKKwkgICAgICBpZiAoIWhlYWQtPnRyZWVfZm9ybSkKKwkJYml0bWFwX2xp c3RfdW5saW5rX2VsZW1lbnQgKGhlYWQsIHB0cik7CisJICAgICAgZWxzZQor CQliaXRtYXBfdHJlZV91bmxpbmtfZWxlbWVudCAoaGVhZCwgcHRyKTsKKwkg ICAgfQogCX0KIAogICAgICAgcmV0dXJuIHJlczsKQEAgLTYwMiwyMSArOTI2 LDIyIEBAIGJpdG1hcF9zZXRfYml0IChiaXRtYXAgaGVhZCwgaW50IGJpdCkK ICAgdW5zaWduZWQgYml0X251bSAgPSBiaXQgJSBCSVRNQVBfV09SRF9CSVRT OwogICBCSVRNQVBfV09SRCBiaXRfdmFsID0gKChCSVRNQVBfV09SRCkgMSkg PDwgYml0X251bTsKIAotICBpZiAocHRyID09IDApCi0gICAgewotICAgICAg cHRyID0gYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGhlYWQpOwotICAgICAg cHRyLT5pbmR4ID0gYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7Ci0g ICAgICBwdHItPmJpdHNbd29yZF9udW1dID0gYml0X3ZhbDsKLSAgICAgIGJp dG1hcF9lbGVtZW50X2xpbmsgKGhlYWQsIHB0cik7Ci0gICAgICByZXR1cm4g dHJ1ZTsKLSAgICB9Ci0gIGVsc2UKKyAgaWYgKHB0ciAhPSAwKQogICAgIHsK ICAgICAgIGJvb2wgcmVzID0gKHB0ci0+Yml0c1t3b3JkX251bV0gJiBiaXRf dmFsKSA9PSAwOwogICAgICAgaWYgKHJlcykKIAlwdHItPmJpdHNbd29yZF9u dW1dIHw9IGJpdF92YWw7CiAgICAgICByZXR1cm4gcmVzOwogICAgIH0KKwor ICBwdHIgPSBiaXRtYXBfZWxlbWVudF9hbGxvY2F0ZSAoaGVhZCk7CisgIHB0 ci0+aW5keCA9IGJpdCAvIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworICBw dHItPmJpdHNbd29yZF9udW1dID0gYml0X3ZhbDsKKyAgaWYgKCFoZWFkLT50 cmVlX2Zvcm0pCisgICAgYml0bWFwX2xpc3RfbGlua19lbGVtZW50IChoZWFk LCBwdHIpOworICBlbHNlCisgICAgYml0bWFwX3RyZWVfbGlua19lbGVtZW50 IChoZWFkLCBwdHIpOworICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogUmV0dXJu IHdoZXRoZXIgYSBiaXQgaXMgc2V0IHdpdGhpbiBhIGJpdG1hcC4gICovCkBA IC02OTIsNiArMTAxNyw3IEBAIGJpdG1hcF9jb3VudF9iaXRzIChjb25zdF9i aXRtYXAgYSkKICAgdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CiAgIGNvbnN0 IGJpdG1hcF9lbGVtZW50ICplbHQ7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2Vy dCAoIWEtPnRyZWVfZm9ybSk7CiAgIGZvciAoZWx0ID0gYS0+Zmlyc3Q7IGVs dDsgZWx0ID0gZWx0LT5uZXh0KQogICAgIGNvdW50ICs9IGJpdG1hcF9jb3Vu dF9iaXRzX2luX3dvcmQgKGVsdC0+Yml0cyk7CiAKQEAgLTc0OCw5ICsxMDc0 LDExIEBAIGJpdG1hcF9zaW5nbGVfYml0X3NldF9wIChjb25zdF9iaXRtYXAg YSkKICAgICByZXR1cm4gZmFsc2U7CiAKICAgZWx0ID0gYS0+Zmlyc3Q7CisK ICAgLyogQXMgdGhlcmUgYXJlIG5vIGNvbXBsZXRlbHkgZW1wdHkgYml0bWFw IGVsZW1lbnRzLCBhIHNlY29uZCBvbmUKICAgICAgbWVhbnMgd2UgaGF2ZSBt b3JlIHRoYW4gb25lIGJpdCBzZXQuICAqLwotICBpZiAoZWx0LT5uZXh0ICE9 IE5VTEwpCisgIGlmIChlbHQtPm5leHQgIT0gTlVMTAorICAgICAgJiYgKCFh LT50cmVlX2Zvcm0gfHwgZWx0LT5wcmV2ICE9IE5VTEwpKQogICAgIHJldHVy biBmYWxzZTsKIAogICBmb3IgKGl4ID0gMDsgaXggIT0gQklUTUFQX0VMRU1F TlRfV09SRFM7IGl4KyspCkBAIC03ODIsNiArMTExMCwxMSBAQCBiaXRtYXBf Zmlyc3Rfc2V0X2JpdCAoY29uc3RfYml0bWFwIGEpCiAgIHVuc2lnbmVkIGl4 OwogCiAgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsdCk7CisKKyAgaWYgKGEt PnRyZWVfZm9ybSkKKyAgICB3aGlsZSAoZWx0LT5wcmV2KQorICAgICAgZWx0 ID0gZWx0LT5wcmV2OworCiAgIGJpdF9ubyA9IGVsdC0+aW5keCAqIEJJVE1B UF9FTEVNRU5UX0FMTF9CSVRTOwogICBmb3IgKGl4ID0gMDsgaXggIT0gQklU TUFQX0VMRU1FTlRfV09SRFM7IGl4KyspCiAgICAgewpAQCAtODI3LDE0ICsx MTYwLDIwIEBAIGJpdG1hcF9maXJzdF9zZXRfYml0IChjb25zdF9iaXRtYXAg YSkKIHVuc2lnbmVkCiBiaXRtYXBfbGFzdF9zZXRfYml0IChjb25zdF9iaXRt YXAgYSkKIHsKLSAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmVsdCA9IGEtPmN1 cnJlbnQgPyBhLT5jdXJyZW50IDogYS0+Zmlyc3Q7CisgIGNvbnN0IGJpdG1h cF9lbGVtZW50ICplbHQ7CiAgIHVuc2lnbmVkIGJpdF9ubzsKICAgQklUTUFQ X1dPUkQgd29yZDsKICAgaW50IGl4OwogCisgIGlmIChhLT50cmVlX2Zvcm0p CisgICAgZWx0ID0gYS0+Zmlyc3Q7CisgIGVsc2UKKyAgICBlbHQgPSBhLT5j dXJyZW50ID8gYS0+Y3VycmVudCA6IGEtPmZpcnN0OwogICBnY2NfY2hlY2tp bmdfYXNzZXJ0IChlbHQpOworCiAgIHdoaWxlIChlbHQtPm5leHQpCiAgICAg ZWx0ID0gZWx0LT5uZXh0OworCiAgIGJpdF9ubyA9IGVsdC0+aW5keCAqIEJJ VE1BUF9FTEVNRU5UX0FMTF9CSVRTOwogICBmb3IgKGl4ID0gQklUTUFQX0VM RU1FTlRfV09SRFMgLSAxOyBpeCA+PSAwOyBpeC0tKQogICAgIHsKQEAgLTg3 Niw2ICsxMjE1LDcgQEAgYml0bWFwX2FuZCAoYml0bWFwIGRzdCwgY29uc3Rf Yml0bWFwIGEsCiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdCA9IGIt PmZpcnN0OwogICBiaXRtYXBfZWxlbWVudCAqZHN0X3ByZXYgPSBOVUxMOwog CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFkc3QtPnRyZWVfZm9ybSAmJiAh YS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0 IChkc3QgIT0gYSAmJiBkc3QgIT0gYik7CiAKICAgaWYgKGEgPT0gYikKQEAg LTg5Nyw3ICsxMjM3LDggQEAgYml0bWFwX2FuZCAoYml0bWFwIGRzdCwgY29u c3RfYml0bWFwIGEsCiAJICBCSVRNQVBfV09SRCBpb3IgPSAwOwogCiAJICBp ZiAoIWRzdF9lbHQpCi0JICAgIGRzdF9lbHQgPSBiaXRtYXBfZWx0X2luc2Vy dF9hZnRlciAoZHN0LCBkc3RfcHJldiwgYV9lbHQtPmluZHgpOworCSAgICBk c3RfZWx0ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGRz dCwgZHN0X3ByZXYsCisJCQkJCQkJYV9lbHQtPmluZHgpOwogCSAgZWxzZQog CSAgICBkc3RfZWx0LT5pbmR4ID0gYV9lbHQtPmluZHg7CiAJICBmb3IgKGl4 ID0gMDsgaXggPCBCSVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykKQEAgLTkz NCw2ICsxMjc1LDggQEAgYml0bWFwX2FuZF9pbnRvIChiaXRtYXAgYSwgY29u c3RfYml0bWFwCiAgIGJpdG1hcF9lbGVtZW50ICpuZXh0OwogICBib29sIGNo YW5nZWQgPSBmYWxzZTsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+ dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOworCiAgIGlmIChhID09IGIp CiAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05NDIsNyArMTI4NSw3IEBAIGJp dG1hcF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcAogICAgICAg aWYgKGFfZWx0LT5pbmR4IDwgYl9lbHQtPmluZHgpCiAJewogCSAgbmV4dCA9 IGFfZWx0LT5uZXh0OwotCSAgYml0bWFwX2VsZW1lbnRfZnJlZSAoYSwgYV9l bHQpOworCSAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGEsIGFfZWx0 KTsKIAkgIGFfZWx0ID0gbmV4dDsKIAkgIGNoYW5nZWQgPSB0cnVlOwogCX0K QEAgLTk2NCw3ICsxMzA3LDcgQEAgYml0bWFwX2FuZF9pbnRvIChiaXRtYXAg YSwgY29uc3RfYml0bWFwCiAJICAgIH0KIAkgIG5leHQgPSBhX2VsdC0+bmV4 dDsKIAkgIGlmICghaW9yKQotCSAgICBiaXRtYXBfZWxlbWVudF9mcmVlIChh LCBhX2VsdCk7CisJICAgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChh LCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7CiAJICBiX2VsdCA9IGJfZWx0 LT5uZXh0OwogCX0KQEAgLTEwMDYsNyArMTM0OSw4IEBAIGJpdG1hcF9lbHRf Y29weSAoYml0bWFwIGRzdCwgYml0bWFwX2VsZW0KICAgICB7CiAgICAgICBj aGFuZ2VkID0gdHJ1ZTsKICAgICAgIGlmICghZHN0X2VsdCkKLQlkc3RfZWx0 ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsIHNy Y19lbHQtPmluZHgpOworCWRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRf ZWxlbWVudF9hZnRlciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJCSAgICBzcmNf ZWx0LT5pbmR4KTsKICAgICAgIGVsc2UKIAlkc3RfZWx0LT5pbmR4ID0gc3Jj X2VsdC0+aW5keDsKICAgICAgIG1lbWNweSAoZHN0X2VsdC0+Yml0cywgc3Jj X2VsdC0+Yml0cywgc2l6ZW9mIChkc3RfZWx0LT5iaXRzKSk7CkBAIC0xMDI4 LDYgKzEzNzIsNyBAQCBiaXRtYXBfYW5kX2NvbXBsIChiaXRtYXAgZHN0LCBj b25zdF9iaXRtCiAgIGJpdG1hcF9lbGVtZW50ICoqZHN0X3ByZXZfcG5leHQg PSAmZHN0LT5maXJzdDsKICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAKKyAg Z2NjX2NoZWNraW5nX2Fzc2VydCAoIWRzdC0+dHJlZV9mb3JtICYmICFhLT50 cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CiAgIGdjY19hc3NlcnQgKGRz dCAhPSBhICYmIGRzdCAhPSBiKTsKIAogICBpZiAoYSA9PSBiKQpAQCAtMTA3 Niw3ICsxNDIxLDggQEAgYml0bWFwX2FuZF9jb21wbCAoYml0bWFwIGRzdCwg Y29uc3RfYml0bQogCSAgICAgIGJvb2wgbmV3X2VsZW1lbnQ7CiAJICAgICAg aWYgKCFkc3RfZWx0IHx8IGRzdF9lbHQtPmluZHggPiBhX2VsdC0+aW5keCkK IAkJewotCQkgIGRzdF9lbHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAo ZHN0LCBkc3RfcHJldiwgYV9lbHQtPmluZHgpOworCQkgIGRzdF9lbHQgPSBi aXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoZHN0LCBkc3RfcHJl diwKKwkJCQkJCQkgICAgICBhX2VsdC0+aW5keCk7CiAJCSAgbmV3X2VsZW1l bnQgPSB0cnVlOwogCQl9CiAJICAgICAgZWxzZQpAQCAtMTA5OCw3ICsxNDQ0 LDcgQEAgYml0bWFwX2FuZF9jb21wbCAoYml0bWFwIGRzdCwgY29uc3RfYml0 bQogCSAgICAgIGVsc2UKIAkgICAgICAgIHsKIAkgICAgICAgICAgY2hhbmdl ZCB8PSAhbmV3X2VsZW1lbnQ7Ci0JCSAgYml0bWFwX2VsZW1lbnRfZnJlZSAo ZHN0LCBkc3RfZWx0KTsKKwkJICBiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVu dCAoZHN0LCBkc3RfZWx0KTsKIAkJICBkc3RfZWx0ID0gKmRzdF9wcmV2X3Bu ZXh0OwogCQl9CiAJICAgIH0KQEAgLTExMzksNiArMTQ4NSw4IEBAIGJpdG1h cF9hbmRfY29tcGxfaW50byAoYml0bWFwIGEsIGNvbnN0X2IKICAgYml0bWFw X2VsZW1lbnQgKm5leHQ7CiAgIEJJVE1BUF9XT1JEIGNoYW5nZWQgPSAwOwog CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYgIWIt PnRyZWVfZm9ybSk7CisKICAgaWYgKGEgPT0gYikKICAgICB7CiAgICAgICBp ZiAoYml0bWFwX2VtcHR5X3AgKGEpKQpAQCAtMTE3Myw3ICsxNTIxLDcgQEAg Yml0bWFwX2FuZF9jb21wbF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYgogCSAg ICB9CiAJICBuZXh0ID0gYV9lbHQtPm5leHQ7CiAJICBpZiAoIWlvcikKLQkg ICAgYml0bWFwX2VsZW1lbnRfZnJlZSAoYSwgYV9lbHQpOworCSAgICBiaXRt YXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYSwgYV9lbHQpOwogCSAgYV9lbHQg PSBuZXh0OwogCSAgYl9lbHQgPSBiX2VsdC0+bmV4dDsKIAl9CkBAIC0xMTkx LDYgKzE1MzksOCBAQCBiaXRtYXBfc2V0X3JhbmdlIChiaXRtYXAgaGVhZCwg dW5zaWduZWQKICAgYml0bWFwX2VsZW1lbnQgKmVsdCwgKmVsdF9wcmV2Owog ICB1bnNpZ25lZCBpbnQgaTsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh aGVhZC0+dHJlZV9mb3JtKTsKKwogICBpZiAoIWNvdW50KQogICAgIHJldHVy bjsKIApAQCAtMTIxMyw3ICsxNTYzLDcgQEAgYml0bWFwX3NldF9yYW5nZSAo Yml0bWFwIGhlYWQsIHVuc2lnbmVkCiAgICAgewogICAgICAgZWx0ID0gYml0 bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGhlYWQpOwogICAgICAgZWx0LT5pbmR4 ID0gZmlyc3RfaW5kZXg7Ci0gICAgICBiaXRtYXBfZWxlbWVudF9saW5rICho ZWFkLCBlbHQpOworICAgICAgYml0bWFwX2xpc3RfbGlua19lbGVtZW50ICho ZWFkLCBlbHQpOwogICAgIH0KIAogICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChl bHQtPmluZHggPT0gZmlyc3RfaW5kZXgpOwpAQCAtMTIzMCw3ICsxNTgwLDcg QEAgYml0bWFwX3NldF9yYW5nZSAoYml0bWFwIGhlYWQsIHVuc2lnbmVkCiAg ICAgICB1bnNpZ25lZCBpbnQgaXg7CiAKICAgICAgIGlmICghZWx0IHx8IGVs dC0+aW5keCAhPSBpKQotCWVsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVy IChoZWFkLCBlbHRfcHJldiwgaSk7CisJZWx0ID0gYml0bWFwX2xpc3RfaW5z ZXJ0X2VsZW1lbnRfYWZ0ZXIgKGhlYWQsIGVsdF9wcmV2LCBpKTsKIAogICAg ICAgaWYgKGVsdF9zdGFydF9iaXQgPD0gc3RhcnQpCiAJewpAQCAtMTI5Niw2 ICsxNjQ2LDggQEAgYml0bWFwX2NsZWFyX3JhbmdlIChiaXRtYXAgaGVhZCwg dW5zaWduZQogICB1bnNpZ25lZCBpbnQgZmlyc3RfaW5kZXgsIGVuZF9iaXRf cGx1czEsIGxhc3RfaW5kZXg7CiAgIGJpdG1hcF9lbGVtZW50ICplbHQ7CiAK KyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWhlYWQtPnRyZWVfZm9ybSk7CisK ICAgaWYgKCFjb3VudCkKICAgICByZXR1cm47CiAKQEAgLTEzMzksNyArMTY5 MSw3IEBAIGJpdG1hcF9jbGVhcl9yYW5nZSAoYml0bWFwIGhlYWQsIHVuc2ln bmUKIAogICAgICAgaWYgKGVsdF9zdGFydF9iaXQgPj0gc3RhcnQgJiYgZWx0 X2VuZF9iaXRfcGx1czEgPD0gZW5kX2JpdF9wbHVzMSkKIAkvKiBHZXQgcmlk IG9mIHRoZSBlbnRpcmUgZWx0IGFuZCBnbyB0byB0aGUgbmV4dCBvbmUuICAq LwotCWJpdG1hcF9lbGVtZW50X2ZyZWUgKGhlYWQsIGVsdCk7CisJYml0bWFw X2xpc3RfdW5saW5rX2VsZW1lbnQgKGhlYWQsIGVsdCk7CiAgICAgICBlbHNl CiAJewogCSAgLyogR29pbmcgdG8gaGF2ZSB0byBrbm9jayBvdXQgc29tZSBi aXRzIGluIHRoaXMgZWx0LiAgKi8KQEAgLTE0MDksNyArMTc2MSw3IEBAIGJp dG1hcF9jbGVhcl9yYW5nZSAoYml0bWFwIGhlYWQsIHVuc2lnbmUKIAkgICAg ICB9CiAJICAvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBiaXRz IGxlZnQuICAqLwogCSAgaWYgKGNsZWFyKQotCSAgICBiaXRtYXBfZWxlbWVu dF9mcmVlIChoZWFkLCBlbHQpOworCSAgICBiaXRtYXBfbGlzdF91bmxpbmtf ZWxlbWVudCAoaGVhZCwgZWx0KTsKIAl9CiAgICAgICBlbHQgPSBuZXh0X2Vs dDsKICAgICB9CkBAIC0xNDMxLDYgKzE3ODMsNyBAQCBiaXRtYXBfY29tcGxf YW5kX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iCiAgIGJpdG1hcF9lbGVtZW50 ICphX3ByZXYgPSBOVUxMOwogICBiaXRtYXBfZWxlbWVudCAqbmV4dDsKIAor ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50 cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0IChhICE9IGIpOwogCiAgIGlmIChi aXRtYXBfZW1wdHlfcCAoYSkpCkBAIC0xNDUxLDEzICsxODA0LDEzIEBAIGJp dG1hcF9jb21wbF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0X2IKIAkgIC8q IEEgaXMgYmVmb3JlIEIuICBSZW1vdmUgQSAqLwogCSAgbmV4dCA9IGFfZWx0 LT5uZXh0OwogCSAgYV9wcmV2ID0gYV9lbHQtPnByZXY7Ci0JICBiaXRtYXBf ZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJICBiaXRtYXBfbGlzdF91bmxp bmtfZWxlbWVudCAoYSwgYV9lbHQpOwogCSAgYV9lbHQgPSBuZXh0OwogCX0K ICAgICAgIGVsc2UgaWYgKCFhX2VsdCB8fCBiX2VsdC0+aW5keCA8IGFfZWx0 LT5pbmR4KQogCXsKIAkgIC8qIEIgaXMgYmVmb3JlIEEuICBDb3B5IEIuICov Ci0JICBuZXh0ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGEsIGFfcHJl diwgYl9lbHQtPmluZHgpOworCSAgbmV4dCA9IGJpdG1hcF9saXN0X2luc2Vy dF9lbGVtZW50X2FmdGVyIChhLCBhX3ByZXYsIGJfZWx0LT5pbmR4KTsKIAkg IG1lbWNweSAobmV4dC0+Yml0cywgYl9lbHQtPmJpdHMsIHNpemVvZiAobmV4 dC0+Yml0cykpOwogCSAgYV9wcmV2ID0gbmV4dDsKIAkgIGJfZWx0ID0gYl9l bHQtPm5leHQ7CkBAIC0xNDc4LDcgKzE4MzEsNyBAQCBiaXRtYXBfY29tcGxf YW5kX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iCiAJICAgIH0KIAkgIG5leHQg PSBhX2VsdC0+bmV4dDsKIAkgIGlmICghaW9yKQotCSAgICBiaXRtYXBfZWxl bWVudF9mcmVlIChhLCBhX2VsdCk7CisJICAgIGJpdG1hcF9saXN0X3VubGlu a19lbGVtZW50IChhLCBhX2VsdCk7CiAJICBlbHNlCiAJICAgIGFfcHJldiA9 IGFfZWx0OwogCSAgYV9lbHQgPSBuZXh0OwpAQCAtMTUyMyw3ICsxODc2LDgg QEAgYml0bWFwX2VsdF9pb3IgKGJpdG1hcCBkc3QsIGJpdG1hcF9lbGVtZQog CXsKIAkgIGNoYW5nZWQgPSB0cnVlOwogCSAgaWYgKCFkc3RfZWx0KQotCSAg ICBkc3RfZWx0ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0 X3ByZXYsIGFfZWx0LT5pbmR4KTsKKwkgICAgZHN0X2VsdCA9IGJpdG1hcF9s aXN0X2luc2VydF9lbGVtZW50X2FmdGVyIChkc3QsIGRzdF9wcmV2LAorCQkJ CQkJCWFfZWx0LT5pbmR4KTsKIAkgIGVsc2UKIAkgICAgZHN0X2VsdC0+aW5k eCA9IGFfZWx0LT5pbmR4OwogCSAgZm9yIChpeCA9IDA7IGl4IDwgQklUTUFQ X0VMRU1FTlRfV09SRFM7IGl4KyspCkBAIC0xNTYyLDYgKzE5MTYsNyBAQCBi aXRtYXBfaW9yIChiaXRtYXAgZHN0LCBjb25zdF9iaXRtYXAgYSwKICAgYml0 bWFwX2VsZW1lbnQgKipkc3RfcHJldl9wbmV4dCA9ICZkc3QtPmZpcnN0Owog ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKIAorICBnY2NfY2hlY2tpbmdfYXNz ZXJ0ICghZHN0LT50cmVlX2Zvcm0gJiYgIWEtPnRyZWVfZm9ybSAmJiAhYi0+ dHJlZV9mb3JtKTsKICAgZ2NjX2Fzc2VydCAoZHN0ICE9IGEgJiYgZHN0ICE9 IGIpOwogCiAgIHdoaWxlIChhX2VsdCB8fCBiX2VsdCkKQEAgLTE2MTAsNiAr MTk2NSw3IEBAIGJpdG1hcF9pb3JfaW50byAoYml0bWFwIGEsIGNvbnN0X2Jp dG1hcAogICBiaXRtYXBfZWxlbWVudCAqKmFfcHJldl9wbmV4dCA9ICZhLT5m aXJzdDsKICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAKKyAgZ2NjX2NoZWNr aW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsK ICAgaWYgKGEgPT0gYikKICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2NDgs NyArMjAwNCw5IEBAIGJpdG1hcF94b3IgKGJpdG1hcCBkc3QsIGNvbnN0X2Jp dG1hcCBhLAogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqYl9lbHQgPSBiLT5m aXJzdDsKICAgYml0bWFwX2VsZW1lbnQgKmRzdF9wcmV2ID0gTlVMTDsKIAor ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghZHN0LT50cmVlX2Zvcm0gJiYgIWEt PnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsKICAgZ2NjX2Fzc2VydCAo ZHN0ICE9IGEgJiYgZHN0ICE9IGIpOworCiAgIGlmIChhID09IGIpCiAgICAg ewogICAgICAgYml0bWFwX2NsZWFyIChkc3QpOwpAQCAtMTY2NCw3ICsyMDIy LDggQEAgYml0bWFwX3hvciAoYml0bWFwIGRzdCwgY29uc3RfYml0bWFwIGEs CiAJICBCSVRNQVBfV09SRCBpb3IgPSAwOwogCiAJICBpZiAoIWRzdF9lbHQp Ci0JICAgIGRzdF9lbHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoZHN0 LCBkc3RfcHJldiwgYV9lbHQtPmluZHgpOworCSAgICBkc3RfZWx0ID0gYml0 bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYs CisJCQkJCQkJYV9lbHQtPmluZHgpOwogCSAgZWxzZQogCSAgICBkc3RfZWx0 LT5pbmR4ID0gYV9lbHQtPmluZHg7CiAJICBmb3IgKGl4ID0gMDsgaXggPCBC SVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykKQEAgLTE2OTksNyArMjA1OCw4 IEBAIGJpdG1hcF94b3IgKGJpdG1hcCBkc3QsIGNvbnN0X2JpdG1hcCBhLAog CSAgICB9CiAKIAkgIGlmICghZHN0X2VsdCkKLQkgICAgZHN0X2VsdCA9IGJp dG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChkc3QsIGRzdF9wcmV2LCBzcmMtPmlu ZHgpOworCSAgICBkc3RfZWx0ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1l bnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsCisJCQkJCQkJc3JjLT5pbmR4KTsK IAkgIGVsc2UKIAkgICAgZHN0X2VsdC0+aW5keCA9IHNyYy0+aW5keDsKIAkg IG1lbWNweSAoZHN0X2VsdC0+Yml0cywgc3JjLT5iaXRzLCBzaXplb2YgKGRz dF9lbHQtPmJpdHMpKTsKQEAgLTE3MjQsNiArMjA4NCw4IEBAIGJpdG1hcF94 b3JfaW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcAogICBjb25zdCBiaXRt YXBfZWxlbWVudCAqYl9lbHQgPSBiLT5maXJzdDsKICAgYml0bWFwX2VsZW1l bnQgKmFfcHJldiA9IE5VTEw7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo IWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsKKwogICBpZiAoYSA9 PSBiKQogICAgIHsKICAgICAgIGJpdG1hcF9jbGVhciAoYSk7CkBAIC0xNzM1 LDcgKzIwOTcsOCBAQCBiaXRtYXBfeG9yX2ludG8gKGJpdG1hcCBhLCBjb25z dF9iaXRtYXAKICAgICAgIGlmICghYV9lbHQgfHwgYl9lbHQtPmluZHggPCBh X2VsdC0+aW5keCkKIAl7CiAJICAvKiBDb3B5IGJfZWx0LiAgKi8KLQkgIGJp dG1hcF9lbGVtZW50ICpkc3QgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAo YSwgYV9wcmV2LCBiX2VsdC0+aW5keCk7CisJICBiaXRtYXBfZWxlbWVudCAq ZHN0ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGEsIGFf cHJldiwKKwkJCQkJCQkJICBiX2VsdC0+aW5keCk7CiAJICBtZW1jcHkgKGRz dC0+Yml0cywgYl9lbHQtPmJpdHMsIHNpemVvZiAoZHN0LT5iaXRzKSk7CiAJ ICBhX3ByZXYgPSBkc3Q7CiAJICBiX2VsdCA9IGJfZWx0LT5uZXh0OwpAQCAt MTc2Myw3ICsyMTI2LDcgQEAgYml0bWFwX3hvcl9pbnRvIChiaXRtYXAgYSwg Y29uc3RfYml0bWFwCiAJICBpZiAoaW9yKQogCSAgICBhX3ByZXYgPSBhX2Vs dDsKIAkgIGVsc2UKLQkgICAgYml0bWFwX2VsZW1lbnRfZnJlZSAoYSwgYV9l bHQpOworCSAgICBiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYSwgYV9l bHQpOwogCSAgYV9lbHQgPSBuZXh0OwogCX0KICAgICB9CkBAIC0xNzgzLDYg KzIxNDYsOCBAQCBiaXRtYXBfZXF1YWxfcCAoY29uc3RfYml0bWFwIGEsIGNv bnN0X2JpCiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdDsKICAgdW5z aWduZWQgaXg7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVf Zm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsKKwogICBmb3IgKGFfZWx0ID0gYS0+ Zmlyc3QsIGJfZWx0ID0gYi0+Zmlyc3Q7CiAgICAgICAgYV9lbHQgJiYgYl9l bHQ7CiAgICAgICAgYV9lbHQgPSBhX2VsdC0+bmV4dCwgYl9lbHQgPSBiX2Vs dC0+bmV4dCkKQEAgLTE4MDUsNiArMjE3MCw4IEBAIGJpdG1hcF9pbnRlcnNl Y3RfcCAoY29uc3RfYml0bWFwIGEsIGNvbnMKICAgY29uc3QgYml0bWFwX2Vs ZW1lbnQgKmJfZWx0OwogICB1bnNpZ25lZCBpeDsKIAorICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOwor CiAgIGZvciAoYV9lbHQgPSBhLT5maXJzdCwgYl9lbHQgPSBiLT5maXJzdDsK ICAgICAgICBhX2VsdCAmJiBiX2VsdDspCiAgICAgewpAQCAtMTgzMiw2ICsy MTk5LDkgQEAgYml0bWFwX2ludGVyc2VjdF9jb21wbF9wIChjb25zdF9iaXRt YXAgYQogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqYV9lbHQ7CiAgIGNvbnN0 IGJpdG1hcF9lbGVtZW50ICpiX2VsdDsKICAgdW5zaWduZWQgaXg7CisKKyAg Z2NjX2NoZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJl ZV9mb3JtKTsKKwogICBmb3IgKGFfZWx0ID0gYS0+Zmlyc3QsIGJfZWx0ID0g Yi0+Zmlyc3Q7CiAgICAgICAgYV9lbHQgJiYgYl9lbHQ7KQogICAgIHsKQEAg LTE4NjYsNiArMjIzNiw5IEBAIGJpdG1hcF9pb3JfYW5kX2NvbXBsIChiaXRt YXAgZHN0LCBjb25zdF8KICAgYml0bWFwX2VsZW1lbnQgKmRzdF9wcmV2ID0g TlVMTDsKICAgYml0bWFwX2VsZW1lbnQgKipkc3RfcHJldl9wbmV4dCA9ICZk c3QtPmZpcnN0OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFkc3QtPnRy ZWVfZm9ybQorCQkgICAgICAgJiYgIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJl ZV9mb3JtCisJCSAgICAgICAmJiAha2lsbC0+dHJlZV9mb3JtKTsKICAgZ2Nj X2Fzc2VydCAoZHN0ICE9IGEgJiYgZHN0ICE9IGIgJiYgZHN0ICE9IGtpbGwp OwogCiAgIC8qIFNwZWNpYWwgY2FzZXMuICBXZSBkb24ndCBib3RoZXIgY2hl Y2tpbmcgZm9yIGJpdG1hcF9lcXVhbF9wIChiLCBraWxsKS4gICovCkBAIC0x OTU4LDE2ICsyMzMxLDE4IEBAIGJpdG1hcF9pb3JfYW5kX2NvbXBsIChiaXRt YXAgZHN0LCBjb25zdF8KICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLS8qIEEg fD0gKEZST00xICYgfkZST00yKS4gIFJldHVybiB0cnVlIGlmIEEgY2hhbmdl cy4gICovCisvKiBBIHw9IChCICYgfkMpLiAgUmV0dXJuIHRydWUgaWYgQSBj aGFuZ2VzLiAgKi8KIAogYm9vbAotYml0bWFwX2lvcl9hbmRfY29tcGxfaW50 byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcCBmcm9tMSwgY29uc3RfYml0bWFw IGZyb20yKQorYml0bWFwX2lvcl9hbmRfY29tcGxfaW50byAoYml0bWFwIGEs IGNvbnN0X2JpdG1hcCBiLCBjb25zdF9iaXRtYXAgYykKIHsKICAgYml0bWFw X2hlYWQgdG1wOwogICBib29sIGNoYW5nZWQ7CiAKKyAgZ2NjX2NoZWNraW5n X2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtICYmICFj LT50cmVlX2Zvcm0pOworCiAgIGJpdG1hcF9pbml0aWFsaXplICgmdG1wLCAm Yml0bWFwX2RlZmF1bHRfb2JzdGFjayk7Ci0gIGJpdG1hcF9hbmRfY29tcGwg KCZ0bXAsIGZyb20xLCBmcm9tMik7CisgIGJpdG1hcF9hbmRfY29tcGwgKCZ0 bXAsIGIsIGMpOwogICBjaGFuZ2VkID0gYml0bWFwX2lvcl9pbnRvIChhLCAm dG1wKTsKICAgYml0bWFwX2NsZWFyICgmdG1wKTsKIApAQCAtMTk4OCw2ICsy MzYzLDggQEAgYml0bWFwX2lvcl9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0 X2JpdAogICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgdW5zaWduZWQgaXg7 CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAmJiAh Yi0+dHJlZV9mb3JtICYmICFjLT50cmVlX2Zvcm0pOworCiAgIGlmIChiID09 IGMpCiAgICAgcmV0dXJuIGJpdG1hcF9pb3JfaW50byAoYSwgYik7CiAgIGlm IChiaXRtYXBfZW1wdHlfcCAoYikgfHwgYml0bWFwX2VtcHR5X3AgKGMpKQpA QCAtMjA1NCw2ICsyNDMxLDcgQEAgYml0bWFwX2lvcl9hbmRfaW50byAoYml0 bWFwIGEsIGNvbnN0X2JpdAogfQogCiAvKiBDb21wdXRlIGhhc2ggb2YgYml0 bWFwIChmb3IgcHVycG9zZXMgb2YgaGFzaGluZykuICAqLworCiBoYXNodmFs X3QKIGJpdG1hcF9oYXNoIChjb25zdF9iaXRtYXAgaGVhZCkKIHsKQEAgLTIw NjEsNiArMjQzOSw4IEBAIGJpdG1hcF9oYXNoIChjb25zdF9iaXRtYXAgaGVh ZCkKICAgQklUTUFQX1dPUkQgaGFzaCA9IDA7CiAgIGludCBpeDsKIAorICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9mb3JtKTsKKwogICBm b3IgKHB0ciA9IGhlYWQtPmZpcnN0OyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkK ICAgICB7CiAgICAgICBoYXNoIF49IHB0ci0+aW5keDsKQEAgLTIwNzQsOSAr MjQ1NCwxMyBAQCBiaXRtYXBfaGFzaCAoY29uc3RfYml0bWFwIGhlYWQpCiAv KiBEZWJ1Z2dpbmcgZnVuY3Rpb24gdG8gcHJpbnQgb3V0IHRoZSBjb250ZW50 cyBvZiBhIGJpdG1hcC4gICovCiAKIERFQlVHX0ZVTkNUSU9OIHZvaWQKLWRl YnVnX2JpdG1hcF9maWxlIChGSUxFICpmaWxlLCBjb25zdF9iaXRtYXAgaGVh ZCkKK2RlYnVnX2JpdG1hcF9maWxlIChGSUxFICpmaWxlLCBiaXRtYXAgaGVh ZCkKIHsKICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKnB0cjsKKyAgYm9vbCB0 cmVlX2Zvcm0gPSBoZWFkLT50cmVlX2Zvcm07CisKKyAgaWYgKHRyZWVfZm9y bSkKKyAgICBiaXRtYXBfbGlzdF92aWV3IChoZWFkKTsKIAogICBmcHJpbnRm IChmaWxlLCAiXG5maXJzdCA9ICIgSE9TVF9QVFJfUFJJTlRGCiAJICAgIiBj dXJyZW50ID0gIiBIT1NUX1BUUl9QUklOVEYgIiBpbmR4ID0gJXVcbiIsCkBA IC0yMTA4LDEzICsyNDkyLDE2IEBAIGRlYnVnX2JpdG1hcF9maWxlIChGSUxF ICpmaWxlLCBjb25zdF9iaXQKIAogICAgICAgZnByaW50ZiAoZmlsZSwgIiB9 XG4iKTsKICAgICB9CisKKyAgaWYgKHRyZWVfZm9ybSkKKyAgICBiaXRtYXBf dHJlZV92aWV3IChoZWFkKTsKIH0KIAogLyogRnVuY3Rpb24gdG8gYmUgY2Fs bGVkIGZyb20gdGhlIGRlYnVnZ2VyIHRvIHByaW50IHRoZSBjb250ZW50cwog ICAgb2YgYSBiaXRtYXAuICAqLwogCiBERUJVR19GVU5DVElPTiB2b2lkCi1k ZWJ1Z19iaXRtYXAgKGNvbnN0X2JpdG1hcCBoZWFkKQorZGVidWdfYml0bWFw IChiaXRtYXAgaGVhZCkKIHsKICAgZGVidWdfYml0bWFwX2ZpbGUgKHN0ZGVy ciwgaGVhZCk7CiB9CkBAIC0yMTIzLDEyICsyNTEwLDE3IEBAIGRlYnVnX2Jp dG1hcCAoY29uc3RfYml0bWFwIGhlYWQpCiAgICBpdCBkb2VzIG5vdCBwcmlu dCBhbnl0aGluZyBidXQgdGhlIGJpdHMuICAqLwogCiBERUJVR19GVU5DVElP TiB2b2lkCi1iaXRtYXBfcHJpbnQgKEZJTEUgKmZpbGUsIGNvbnN0X2JpdG1h cCBoZWFkLCBjb25zdCBjaGFyICpwcmVmaXgsCitiaXRtYXBfcHJpbnQgKEZJ TEUgKmZpbGUsIGJpdG1hcCBoZWFkLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJ ICAgICAgY29uc3QgY2hhciAqc3VmZml4KQogewogICBjb25zdCBjaGFyICpj b21tYSA9ICIiOwogICB1bnNpZ25lZCBpOwogICBiaXRtYXBfaXRlcmF0b3Ig Ymk7CisgIGJvb2wgdHJlZV9mb3JtID0gaGVhZC0+dHJlZV9mb3JtOworCisg IC8qID8/PyAgQXZvaWQgdGhpcyBzb21laG93LiAgKi8KKyAgaWYgKHRyZWVf Zm9ybSkKKyAgICBiaXRtYXBfbGlzdF92aWV3IChoZWFkKTsKIAogICBmcHV0 cyAocHJlZml4LCBmaWxlKTsKICAgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQ IChoZWFkLCAwLCBpLCBiaSkKQEAgLTIxMzcsNiArMjUyOSw5IEBAIGJpdG1h cF9wcmludCAoRklMRSAqZmlsZSwgY29uc3RfYml0bWFwIGgKICAgICAgIGNv bW1hID0gIiwgIjsKICAgICB9CiAgIGZwdXRzIChzdWZmaXgsIGZpbGUpOwor CisgIGlmICh0cmVlX2Zvcm0pCisgICAgYml0bWFwX3RyZWVfdmlldyAoaGVh ZCk7CiB9CiAKIC8qIE91dHB1dCBwZXItYml0bWFwIG1lbW9yeSB1c2FnZSBz dGF0aXN0aWNzLiAgKi8KQEAgLTIxNTAsMTMgKzI1NDUsMTMgQEAgZHVtcF9i aXRtYXBfc3RhdGlzdGljcyAodm9pZCkKIH0KIAogREVCVUdfRlVOQ1RJT04g dm9pZAotZGVidWcgKGNvbnN0IGJpdG1hcF9oZWFkICZyZWYpCitkZWJ1ZyAo Yml0bWFwX2hlYWQgJnJlZikKIHsKICAgZHVtcF9iaXRtYXAgKHN0ZGVyciwg JnJlZik7CiB9CiAKIERFQlVHX0ZVTkNUSU9OIHZvaWQKLWRlYnVnIChjb25z dCBiaXRtYXBfaGVhZCAqcHRyKQorZGVidWcgKGJpdG1hcF9oZWFkICpwdHIp CiB7CiAgIGlmIChwdHIpCiAgICAgZGVidWcgKCpwdHIpOwpJbmRleDogZ2Nj L2JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9iaXRt YXAuaAkocmV2aXNpb24gMjY1MjM2KQorKysgZ2NjL2JpdG1hcC5oCSh3b3Jr aW5nIGNvcHkpCkBAIC0yMCwxNiArMjAsMjEgQEAgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KICNpZm5kZWYgR0NDX0JJVE1BUF9I CiAjZGVmaW5lIEdDQ19CSVRNQVBfSAogCi0vKiBJbXBsZW1lbnRhdGlvbiBv ZiBzcGFyc2UgaW50ZWdlciBzZXRzIGFzIGEgbGlua2VkIGxpc3QuCisvKiBJ bXBsZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBzZXRzIGFzIGEgbGlu a2VkIGxpc3Qgb3IgdHJlZS4KIAogICAgVGhpcyBzcGFyc2Ugc2V0IHJlcHJl c2VudGF0aW9uIGlzIHN1aXRhYmxlIGZvciBzcGFyc2Ugc2V0cyB3aXRoIGFu Ci0gICB1bmtub3duIChhIHByaW9yaSkgdW5pdmVyc2UuICBUaGUgc2V0IGlz IHJlcHJlc2VudGVkIGFzIGEgZG91YmxlLWxpbmtlZAotICAgbGlzdCBvZiBj b250YWluZXIgbm9kZXMgKHN0cnVjdCBiaXRtYXBfZWxlbWVudCkuICBFYWNo IG5vZGUgY29uc2lzdHMKLSAgIG9mIGFuIGluZGV4IGZvciB0aGUgZmlyc3Qg bWVtYmVyIHRoYXQgY291bGQgYmUgaGVsZCBpbiB0aGUgY29udGFpbmVyLAot ICAgYSBzbWFsbCBhcnJheSBvZiBpbnRlZ2VycyB0aGF0IHJlcHJlc2VudCB0 aGUgbWVtYmVycyBpbiB0aGUgY29udGFpbmVyLAotICAgYW5kIHBvaW50ZXJz IHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVtZW50IGluIHRoZSBsaW5r ZWQgbGlzdC4gIFRoZQotICAgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJlIHNv cnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIGkuZS4gdGhlIGhlYWQgb2YKKyAg IHVua25vd24gKGEgcHJpb3JpKSB1bml2ZXJzZS4KKworICAgU2V0cyBhcmUg cmVwcmVzZW50ZWQgYXMgZG91YmxlLWxpbmtlZCBsaXN0cyBvZiBjb250YWlu ZXIgbm9kZXMgb2YKKyAgIHR5cGUgInN0cnVjdCBiaXRtYXBfZWxlbWVudCIg b3IgYXMgYSBiaW5hcnkgdHJlZXMgb2YgdGhlIHNhbWUKKyAgIGNvbnRhaW5l ciBub2Rlcy4gIEVhY2ggY29udGFpbmVyIG5vZGUgY29uc2lzdHMgb2YgYW4g aW5kZXggZm9yIHRoZQorICAgZmlyc3QgbWVtYmVyIHRoYXQgY291bGQgYmUg aGVsZCBpbiB0aGUgY29udGFpbmVyLCBhIHNtYWxsIGFycmF5IG9mCisgICBp bnRlZ2VycyB0aGF0IHJlcHJlc2VudCB0aGUgbWVtYmVycyBpbiB0aGUgY29u dGFpbmVyLCBhbmQgcG9pbnRlcnMKKyAgIHRvIHRoZSBuZXh0IGFuZCBwcmV2 aW91cyBlbGVtZW50IGluIHRoZSBsaW5rZWQgbGlzdCwgb3IgbGVmdCBhbmQK KyAgIHJpZ2h0IGNoaWxkcmVuIGluIHRoZSB0cmVlLiAgSW4gbGlua2VkLWxp c3QgZm9ybSwgdGhlIGNvbnRhaW5lcgorICAgbm9kZXMgaW4gdGhlIGxpc3Qg YXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIGkuZS4gdGhlIGhlYWQg b2YKICAgIHRoZSBsaXN0IGhvbGRzIHRoZSBlbGVtZW50IHdpdGggdGhlIHNt YWxsZXN0IG1lbWJlciBvZiB0aGUgc2V0LgorICAgSW4gdHJlZSBmb3JtLCBu b2RlcyB0byB0aGUgbGVmdCBoYXZlIGEgc21hbGxlciBjb250YWluZXIgaW5k ZXguCiAKICAgIEZvciBhIGdpdmVuIG1lbWJlciBJIGluIHRoZSBzZXQ6CiAg ICAgIC0gdGhlIGVsZW1lbnQgZm9yIEkgd2lsbCBoYXZlIGluZGV4IGlzIEkg LyAoYml0cyBwZXIgZWxlbWVudCkKQEAgLTQyLDE3ICs0Nyw2OCBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgogICAgaGlnaCBz dG9yYWdlIG92ZXJoZWFkICpwZXIgZWxlbWVudCosIGJ1dCBhIHNtYWxsIG92 ZXJhbGwgb3ZlcmhlYWQgaWYKICAgIHRoZSBzZXQgaXMgdmVyeSBzcGFyc2Uu CiAKLSAgIFRoZSBkb3duc2lkZSBpcyB0aGF0IG1hbnkgb3BlcmF0aW9ucyBh cmUgcmVsYXRpdmVseSBzbG93IGJlY2F1c2UgdGhlCi0gICBsaW5rZWQgbGlz dCBoYXMgdG8gYmUgdHJhdmVyc2VkIHRvIHRlc3QgbWVtYmVyc2hpcCAoaS5l LiBtZW1iZXJfcC8KLSAgIGFkZF9tZW1iZXIvcmVtb3ZlX21lbWJlcikuICBU byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzIHNldAotICAgcmVw cmVzZW50YXRpb24sIHRoZSBsYXN0IGFjY2Vzc2VkIGVsZW1lbnQgYW5kIGl0 cyBpbmRleCBhcmUgY2FjaGVkLgotICAgRm9yIG1lbWJlcnNoaXAgdGVzdHMg b24gbWVtYmVycyBjbG9zZSB0byByZWNlbnRseSBhY2Nlc3NlZCBtZW1iZXJz LAotICAgdGhlIGNhY2hlZCBsYXN0IGVsZW1lbnQgaW1wcm92ZXMgbWVtYmVy c2hpcCB0ZXN0IHRvIGEgY29uc3RhbnQtdGltZQotICAgb3BlcmF0aW9uLgor ICAgVGhlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciBsaW5rZWQtbGlzdCBz cGFyc2Ugc2V0cyBhcmUgTyhFKSwgd2l0aCBFLT5OCisgICBpbiB0aGUgd29y c3QgY2FzZSAoYSBzcGFyc2Ugc2V0IHdpdGggbGFyZ2UgZGlzdGFuY2VzIGJl dHdlZW4gdGhlIHZhbHVlcworICAgb2YgdGhlIHNldCBtZW1iZXJzKS4KKwor ICAgVGhpcyByZXByZXNlbnRhdGlvbiBhbHNvIHdvcmtzIHdlbGwgZm9yIGRh dGEgZmxvdyBwcm9ibGVtcyB3aGVyZSB0aGUgc2l6ZQorICAgb2YgdGhlIHNl dCBtYXkgZ3JvdyBkeW5hbWljYWxseSwgYnV0IGNhcmUgbXVzdCBiZSB0YWtl biB0aGF0IHRoZSBtZW1iZXJfcCwKKyAgIGFkZF9tZW1iZXIsIGFuZCByZW1v dmVfbWVtYmVyIG9wZXJhdGlvbnMgb2NjdXIgd2l0aCBhIHN1aXRhYmxlIGFj Y2VzcworICAgcGF0dGVybi4KKworICAgVGhlIGxpbmtlZC1saXN0IHNldCBy ZXByZXNlbnRhdGlvbiB3b3JrcyB3ZWxsIGZvciBwcm9ibGVtcyBpbnZvbHZp bmcgdmVyeQorICAgc3BhcnNlIHNldHMuICBUaGUgY2Fub25pY2FsIGV4YW1w bGUgaW4gR0NDIGlzLCBvZiBjb3Vyc2UsIHRoZSAic2V0IG9mCisgICBzZXRz IiBmb3Igc29tZSBDRkctYmFzZWQgZGF0YSBmbG93IHByb2JsZW1zIChsaXZl bmVzcyBhbmFseXNpcywgZG9taW5hbmNlCisgICBmcm9udGllcnMsIGV0Yy4p LgorICAgCisgICBGb3IgcmFuZG9tLWFjY2VzcyBzcGFyc2Ugc2V0cyBvZiB1 bmtub3duIHVuaXZlcnNlLCB0aGUgYmluYXJ5IHRyZWUKKyAgIHJlcHJlc2Vu dGF0aW9uIGlzIGxpa2VseSB0byBiZSBhIG1vcmUgc3VpdGFibGUgY2hvaWNl LiAgVGhlb3JldGljYWwKKyAgIGFjY2VzcyB0aW1lcyBmb3IgdGhlIGJpbmFy eSB0cmVlIHJlcHJlc2VudGF0aW9uIGFyZSBiZXR0ZXIgdGhhbiB0aG9zZQor ICAgZm9yIHRoZSBsaW5rZWQtbGlzdCwgYnV0IGluIHByYWN0aWNlIHRoaXMg aXMgb25seSB0cnVlIGZvciB0cnVlbHkKKyAgIHJhbmRvbSBhY2Nlc3MuCisK KyAgIE9mdGVuIHRoZSBtb3N0IHN1aXRhYmxlIHJlcHJlc2VudGF0aW9uIGR1 cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhlIHNldAorICAgaXMgbm90IHRoZSBi ZXN0IGNob2ljZSBmb3IgdGhlIHVzYWdlIG9mIHRoZSBzZXQuICBGb3Igc3Vj aCBjYXNlcywgdGhlCisgICAidmlldyIgb2YgdGhlIHNldCBjYW4gYmUgY2hh bmdlZCBmcm9tIG9uZSByZXByZXNlbnRhdGlvbiB0byB0aGUgb3RoZXIuCisg ICBUaGlzIGlzIGFuIE8oRSkgb3BlcmF0aW9uOgorCisgICAgICogZnJvbSBs aXN0IHRvIHRyZWUgdmlldwk6IGJpdG1hcF90cmVlX3ZpZXcKKyAgICAgKiBm cm9tIHRyZWUgdG8gbGlzdCB2aWV3CTogYml0bWFwX2xpc3RfdmlldworCisg ICBUcmF2ZXJzaW5nIGxpbmtlZCBsaXN0cyBvciB0cmVlcyBjYW4gYmUgY2Fj aGUtdW5mcmllbmRseS4gIFBlcmZvcm1hbmNlCisgICBjYW4gYmUgaW1wcm92 ZWQgYnkga2VlcGluZyBjb250YWluZXIgbm9kZXMgaW4gdGhlIHNldCBncm91 cGVkIHRvZ2V0aGVyCisgICBpbiAgbWVtb3J5LCB1c2luZyBhIGRlZGljYXRl ZCBvYnN0YWNrIGZvciBhIHNldCAob3IgZ3JvdXAgb2YgcmVsYXRlZAorICAg c2V0cykuICBFbGVtZW50cyBhbGxvY2F0ZWQgb24gb2JzdGFja3MgYXJlIHJl bGVhc2VkIHRvIGEgZnJlZS1saXN0IGFuZAorICAgdGFrZW4gb2ZmIHRoZSBm cmVlIGxpc3QuICBJZiBtdWx0aXBsZSBzZXRzIGFyZSBhbGxvY2F0ZWQgb24g dGhlIHNhbWUKKyAgIG9ic3RhY2ssIGVsZW1lbnRzIGZyZWVkIGZyb20gb25l IHNldCBtYXkgYmUgcmUtdXNlZCBmb3Igb25lIG9mIHRoZSBvdGhlcgorICAg c2V0cy4gIFRoaXMgdXN1YWxseSBoZWxwcyBhdm9pZCBjYWNoZSBtaXNzZXMu CisKKyAgIEEgc2luZ2xlIGZyZWUtbGlzdCBpcyB1c2VkIGZvciBhbGwgc2V0 cyBhbGxvY2F0ZWQgaW4gR0dDIHNwYWNlLiAgVGhpcyBpcworICAgYmFkIGZv ciBwZXJzaXN0ZW50IHNldHMsIHNvIHBlcnNpc3RlbnQgc2V0cyBzaG91bGQg YmUgYWxsb2NhdGVkIG9uIGFuCisgICBvYnN0YWNrIHdoZW5ldmVyIHBvc3Np YmxlLgorCisgICBGb3IgcmFuZG9tLWFjY2VzcyBzZXRzIHdpdGggYSBrbm93 biwgcmVsYXRpdmVseSBzbWFsbCB1bml2ZXJzZSBzaXplLCB0aGUKKyAgIFNw YXJzZVNldCBvciBzaW1wbGUgYml0bWFwIHJlcHJlc2VudGF0aW9ucyBtYXkg YmUgbW9yZSBlZmZpY2llbnQgdGhhbiBhCisgICBsaW5rZWQtbGlzdCBzZXQu CisKKworICAgTElOS0VEIExJU1QgRk9STQorICAgPT09PT09PT09PT09PT09 PQorCisgICBJbiBsaW5rZWQtbGlzdCBmb3JtLCBpbi1vcmRlciBpdGVyYXRp b25zIG9mIHRoZSBzZXQgY2FuIGJlIGV4ZWN1dGVkCisgICBlZmZpY2llbnRs eS4gIFRoZSBkb3duc2lkZSBpcyB0aGF0IG1hbnkgcmFuZG9tLWFjY2VzcyBv cGVyYXRpb25zIGFyZQorICAgcmVsYXRpdmVseSBzbG93LCBiZWNhdXNlIHRo ZSBsaW5rZWQgbGlzdCBoYXMgdG8gYmUgdHJhdmVyc2VkIHRvIHRlc3QKKyAg IG1lbWJlcnNoaXAgKGkuZS4gbWVtYmVyX3AvIGFkZF9tZW1iZXIvcmVtb3Zl X21lbWJlcikuCisgICAKKyAgIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNl IG9mIHRoaXMgc2V0IHJlcHJlc2VudGF0aW9uLCB0aGUgbGFzdAorICAgYWNj ZXNzZWQgZWxlbWVudCBhbmQgaXRzIGluZGV4IGFyZSBjYWNoZWQuICBGb3Ig bWVtYmVyc2hpcCB0ZXN0cyBvbgorICAgbWVtYmVycyBjbG9zZSB0byByZWNl bnRseSBhY2Nlc3NlZCBtZW1iZXJzLCB0aGUgY2FjaGVkIGxhc3QgZWxlbWVu dAorICAgaW1wcm92ZXMgbWVtYmVyc2hpcCB0ZXN0IHRvIGEgY29uc3RhbnQt dGltZSBvcGVyYXRpb24uCiAKICAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9u cyBjYW4gYWx3YXlzIGJlIHBlcmZvcm1lZCBpbiBPKDEpIHRpbWU6CiAKICAg ICAgKiBjbGVhcgkJCTogYml0bWFwX2NsZWFyCisgICAgICogc21hbGxlc3Rf bWVtYmVyCQk6IGJpdG1hcF9maXJzdF9zZXRfYml0CiAgICAgICogY2hvb3Nl X29uZQkJOiAobm90IGltcGxlbWVudGVkLCBidXQgY291bGQgYmUKIAkJCQkg ICBpbXBsZW1lbnRlZCBpbiBjb25zdGFudCB0aW1lKQogCkBAIC02MSwxNSAr MTE3LDE2IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuCiAgICBzdWl0YWJsZSBhY2Nlc3MgcGF0dGVybnM6CiAKICAgICAgKiBt ZW1iZXJfcAkJCTogYml0bWFwX2JpdF9wCi0gICAgICogYWRkX21lbWJlcgkJ OiBiaXRtYXBfc2V0X2JpdAotICAgICAqIHJlbW92ZV9tZW1iZXIJCTogYml0 bWFwX2NsZWFyX2JpdAorICAgICAqIGFkZF9tZW1iZXIJCTogYml0bWFwX3Nl dF9iaXQgLyBiaXRtYXBfc2V0X3JhbmdlCisgICAgICogcmVtb3ZlX21lbWJl cgkJOiBiaXRtYXBfY2xlYXJfYml0IC8gYml0bWFwX2NsZWFyX3JhbmdlCiAK ICAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVk IGluIE8oRSkgdGltZToKIAogICAgICAqIGNhcmRpbmFsaXR5CQk6IGJpdG1h cF9jb3VudF9iaXRzCi0gICAgICogc2V0X3NpemUJCQk6IGJpdG1hcF9sYXN0 X3NldF9iaXQgKGJ1dCB0aGlzIGNvdWxkCisgICAgICogbGFyZ2VzdF9tZW1i ZXIJCTogYml0bWFwX2xhc3Rfc2V0X2JpdCAoYnV0IHRoaXMgY291bGQKIAkJ CQkgIGluIGNvbnN0YW50IHRpbWUgd2l0aCBhIHBvaW50ZXIgdG8KIAkJCQkg IHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGNoYWluKQorICAgICAqIHNldF9z aXplCQkJOiBiaXRtYXBfbGFzdF9zZXRfYml0CiAKICAgIEFkZGl0aW9uYWxs eSwgdGhlIGxpbmtlZC1saXN0IHNwYXJzZSBzZXQgcmVwcmVzZW50YXRpb24g c3VwcG9ydHMKICAgIGVudW1lcmF0aW9uIG9mIHRoZSBtZW1iZXJzIGluIE8o RSkgdGltZToKQEAgLTkzLDM5ICsxNTAsNTMgQEAgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KICAgICAgKiBBIHwgKEIgJiB+QykJ CTogYml0bWFwX2lvcl9hbmRfY29tcGwgLwogCQkJCSAgYml0bWFwX2lvcl9h bmRfY29tcGxfaW50bwogCi0gICBUaGUgc3RvcmFnZSByZXF1aXJlbWVudHMg Zm9yIGxpbmtlZC1saXN0IHNwYXJzZSBzZXRzIGFyZSBPKEUpLCB3aXRoIEUt Pk4KLSAgIGluIHRoZSB3b3JzdCBjYXNlIChhIHNwYXJzZSBzZXQgd2l0aCBs YXJnZSBkaXN0YW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzCi0gICBvZiB0aGUg c2V0IG1lbWJlcnMpLgogCi0gICBUaGUgbGlua2VkLWxpc3Qgc2V0IHJlcHJl c2VudGF0aW9uIHdvcmtzIHdlbGwgZm9yIHByb2JsZW1zIGludm9sdmluZyB2 ZXJ5Ci0gICBzcGFyc2Ugc2V0cy4gIFRoZSBjYW5vbmljYWwgZXhhbXBsZSBp biBHQ0MgaXMsIG9mIGNvdXJzZSwgdGhlICJzZXQgb2YKLSAgIHNldHMiIGZv ciBzb21lIENGRy1iYXNlZCBkYXRhIGZsb3cgcHJvYmxlbXMgKGxpdmVuZXNz IGFuYWx5c2lzLCBkb21pbmFuY2UKLSAgIGZyb250aWVycywgZXRjLikuCi0g ICAKLSAgIFRoaXMgcmVwcmVzZW50YXRpb24gYWxzbyB3b3JrcyB3ZWxsIGZv ciBkYXRhIGZsb3cgcHJvYmxlbXMgd2hlcmUgdGhlIHNpemUKLSAgIG9mIHRo ZSBzZXQgbWF5IGdyb3cgZHluYW1pY2FsbHksIGJ1dCBjYXJlIG11c3QgYmUg dGFrZW4gdGhhdCB0aGUgbWVtYmVyX3AsCi0gICBhZGRfbWVtYmVyLCBhbmQg cmVtb3ZlX21lbWJlciBvcGVyYXRpb25zIG9jY3VyIHdpdGggYSBzdWl0YWJs ZSBhY2Nlc3MKLSAgIHBhdHRlcm4uCisgICBCSU5BUlkgVFJFRSBGT1JNCisg ICA9PT09PT09PT09PT09PT09CisgICBBbiBhbHRlcm5hdGUgInZpZXciIG9m IGEgYml0bWFwIGlzIGl0cyBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbi4K KyAgIEZvciB0aGlzIHJlcHJlc2VudGF0aW9uLCBzcGxheSB0cmVlcyBhcmUg dXNlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICBpbXBsZW1lbnRlZCB1c2lu ZyB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZXMgYXMgdGhlIGxpbmtlZCBsaXN0 LCB3aXRoCisgICBubyBvdmVyaGVhZCBmb3IgbWV0YS1kYXRhIChsaWtlIGNv bG9yLCBvciByYW5rKSBvbiB0aGUgdHJlZSBub2Rlcy4KKworICAgSW4gYmlu YXJ5IHRyZWUgZm9ybSwgcmFuZG9tLWFjY2VzcyB0byB0aGUgc2V0IGlzIG11 Y2ggbW9yZSBlZmZpY2llbnQKKyAgIHRoYW4gZm9yIHRoZSBsaW5rZWQtbGlz dCByZXByZXNlbnRhdGlvbi4gIERvd25zaWRlcyBhcmUgdGhlIGhpZ2ggY29z dAorICAgb2YgY2xlYXJpbmcgdGhlIHNldCwgYW5kIHRoZSByZWxhdGl2ZWx5 IGxhcmdlIG51bWJlciBvZiBvcGVyYXRpb25zCisgICBuZWNlc3NhcnkgdG8g YmFsYW5jZSB0aGUgdHJlZS4gIEFsc28sIGl0ZXJhdGluZyB0aGUgc2V0IG1l bWJlcnMgaXMKKyAgIG5vdCBzdXBwb3J0ZWQuCiAgICAKLSAgIEZvciByYW5k b20tYWNjZXNzIHNldHMgd2l0aCBhIGtub3duLCByZWxhdGl2ZWx5IHNtYWxs IHVuaXZlcnNlIHNpemUsIHRoZQotICAgU3BhcnNlU2V0IG9yIHNpbXBsZSBi aXRtYXAgcmVwcmVzZW50YXRpb25zIG1heSBiZSBtb3JlIGVmZmljaWVudCB0 aGFuIGEKLSAgIGxpbmtlZC1saXN0IHNldC4gIEZvciByYW5kb20tYWNjZXNz IHNldHMgb2YgdW5rbm93biB1bml2ZXJzZSwgYSBoYXNoIHRhYmxlCi0gICBv ciBhIGJhbGFuY2VkIGJpbmFyeSB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIGxp a2VseSB0byBiZSBhIG1vcmUgc3VpdGFibGUKLSAgIGNob2ljZS4KKyAgIEFz IGZvciB0aGUgbGlua2VkLWxpc3QgcmVwcmVzZW50YXRpb24sIHRoZSBsYXN0 IGFjY2Vzc2VkIGVsZW1lbnQgYW5kCisgICBpdHMgaW5kZXggYXJlIGNhY2hl ZCwgc28gdGhhdCBtZW1iZXJzaGlwIHRlc3RzIG9uIHRoZSBsYXRlc3QgYWNj ZXNzZWQKKyAgIG1lbWJlcnMgaXMgYSBjb25zdGFudC10aW1lIG9wZXJhdGlv bi4gIE90aGVyIGxvb2t1cHMgdGFrZSBPKGxvZ0UpCisgICB0aW1lIGFtb3J0 aXplZCAoYnV0IE8oRSkgdGltZSB3b3JzdC1jYXNlKS4KIAotICAgVHJhdmVy c2luZyBsaW5rZWQgbGlzdHMgaXMgdXN1YWxseSBjYWNoZS11bmZyaWVuZGx5 LCBldmVuIHdpdGggdGhlIGxhc3QKLSAgIGFjY2Vzc2VkIGVsZW1lbnQgY2Fj aGVkLgotICAgCi0gICBDYWNoZSBwZXJmb3JtYW5jZSBjYW4gYmUgaW1wcm92 ZWQgYnkga2VlcGluZyB0aGUgZWxlbWVudHMgaW4gdGhlIHNldAotICAgZ3Jv dXBlZCB0b2dldGhlciBpbiBtZW1vcnksIHVzaW5nIGEgZGVkaWNhdGVkIG9i c3RhY2sgZm9yIGEgc2V0IChvciBncm91cAotICAgb2YgcmVsYXRlZCBzZXRz KS4gIEVsZW1lbnRzIGFsbG9jYXRlZCBvbiBvYnN0YWNrcyBhcmUgcmVsZWFz ZWQgdG8gYQotICAgZnJlZS1saXN0IGFuZCB0YWtlbiBvZmYgdGhlIGZyZWUg bGlzdC4gIElmIG11bHRpcGxlIHNldHMgYXJlIGFsbG9jYXRlZCBvbgotICAg dGhlIHNhbWUgb2JzdGFjaywgZWxlbWVudHMgZnJlZWQgZnJvbSBvbmUgc2V0 IG1heSBiZSByZS11c2VkIGZvciBvbmUgb2YKLSAgIHRoZSBvdGhlciBzZXRz LiAgVGhpcyB1c3VhbGx5IGhlbHBzIGF2b2lkIGNhY2hlIG1pc3Nlcy4KKyAg IFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYWx3YXlzIGJlIHBlcmZv cm1lZCBpbiBPKDEpIHRpbWU6CiAKLSAgIEEgc2luZ2xlIGZyZWUtbGlzdCBp cyB1c2VkIGZvciBhbGwgc2V0cyBhbGxvY2F0ZWQgaW4gR0dDIHNwYWNlLiAg VGhpcyBpcwotICAgYmFkIGZvciBwZXJzaXN0ZW50IHNldHMsIHNvIHBlcnNp c3RlbnQgc2V0cyBzaG91bGQgYmUgYWxsb2NhdGVkIG9uIGFuCi0gICBvYnN0 YWNrIHdoZW5ldmVyIHBvc3NpYmxlLiAgKi8KKyAgICAgKiBjaG9vc2Vfb25l CQk6IChub3QgaW1wbGVtZW50ZWQsIGJ1dCBjb3VsZCBiZQorCQkJCSAgIGlt cGxlbWVudGVkIGluIGNvbnN0YW50IHRpbWUpCisKKyAgIFRoZSBmb2xsb3dp bmcgb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGluIE8obG9nRSkgdGlt ZSBhbW9ydGl6ZWQKKyAgIGJ1dCBPKEUpIHRpbWUgd29yc3QtY2FzZSwgYnV0 IGluIE8oMSkgdGltZSBpZiB0aGUgc2FtZSBlbGVtZW50IGlzCisgICBhY2Nl c3NlZC4KKworICAgICAqIG1lbWJlcl9wCQkJOiBiaXRtYXBfYml0X3AKKyAg ICAgKiBhZGRfbWVtYmVyCQk6IGJpdG1hcF9zZXRfYml0CisgICAgICogcmVt b3ZlX21lbWJlcgkJOiBiaXRtYXBfY2xlYXJfYml0CisKKyAgIFRoZSBmb2xs b3dpbmcgb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGluIE8obG9nRSkg dGltZSBhbW9ydGl6ZWQKKyAgIGJ1dCBPKEUpIHRpbWUgd29yc3QtY2FzZToK KworICAgICAqIHNtYWxsZXN0X21lbWJlcgkJOiBiaXRtYXBfZmlyc3Rfc2V0 X2JpdAorICAgICAqIGxhcmdlc3RfbWVtYmVyCQk6IGJpdG1hcF9sYXN0X3Nl dF9iaXQKKyAgICAgKiBzZXRfc2l6ZQkJCTogYml0bWFwX2xhc3Rfc2V0X2Jp dAorCisgICBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZv cm1lZCBpbiBPKEUpIHRpbWU6CisKKyAgICAgKiBjbGVhcgkJCTogYml0bWFw X2NsZWFyCisKKyAgIFRoZSBiaW5hcnkgdHJlZSBzcGFyc2Ugc2V0IHJlcHJl c2VudGF0aW9uIGRvZXMgKm5vdCogc3VwcG9ydCBhbnkgZm9ybQorICAgb2Yg ZW51bWVyYXRpb24sIGFuZCBkb2VzIGFsc28gKm5vdCogc3VwcG9ydCBsb2dp Y2FsIG9wZXJhdGlvbnMgb24gc2V0cy4KKyAgIFRoZSBiaW5hcnkgdHJlZSBy ZXByZXNlbnRhdGlvbiBpcyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgZm9y IHNldHMKKyAgIG9uIHdoaWNoIG1hbnkgcmFuZG9tLWFjY2VzcyBtZW1iZXJz aGlwIHRlc3RzIHdpbGwgaGFwcGVuLiAgKi8KIAogI2luY2x1ZGUgIm9ic3Rh Y2suaCIKIApAQCAtMjI1LDMwICsyOTYsNDQgQEAgc3RydWN0IEdUWSAoKCkp IGJpdG1hcF9vYnN0YWNrIHsKICAgIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIHRvIGJlIGZyZWVkLiAgKi8KIAogc3RydWN0IEdUWSgoY2hh aW5fbmV4dCAoIiVoLm5leHQiKSwgY2hhaW5fcHJldiAoIiVoLnByZXYiKSkp IGJpdG1hcF9lbGVtZW50IHsKLSAgc3RydWN0IGJpdG1hcF9lbGVtZW50ICpu ZXh0OwkvKiBOZXh0IGVsZW1lbnQuICAqLwotICBzdHJ1Y3QgYml0bWFwX2Vs ZW1lbnQgKnByZXY7CS8qIFByZXZpb3VzIGVsZW1lbnQuICAqLwotICB1bnNp Z25lZCBpbnQgaW5keDsJCQkvKiByZWduby9CSVRNQVBfRUxFTUVOVF9BTExf QklUUy4gICovCi0gIEJJVE1BUF9XT1JEIGJpdHNbQklUTUFQX0VMRU1FTlRf V09SRFNdOyAvKiBCaXRzIHRoYXQgYXJlIHNldC4gICovCisgIC8qIEluIGxp c3QgZm9ybSwgdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgbGlua2VkIGxpc3Q7 CisgICAgIGluIHRyZWUgZm9ybSwgdGhlIGxlZnQgY2hpbGQgbm9kZSBpbiB0 aGUgdHJlZS4gICovCisgIHN0cnVjdCBiaXRtYXBfZWxlbWVudCAqbmV4dDsK KyAgLyogSW4gbGlzdCBmb3JtLCB0aGUgcHJldmlvdXMgZWxlbWVudCBpbiB0 aGUgbGlua2VkIGxpc3Q7CisgICAgIGluIHRyZWUgZm9ybSwgdGhlIHJpZ2h0 IGNoaWxkIG5vZGUgaW4gdGhlIHRyZWUuICAqLworICBzdHJ1Y3QgYml0bWFw X2VsZW1lbnQgKnByZXY7CisgIC8qIHJlZ25vL0JJVE1BUF9FTEVNRU5UX0FM TF9CSVRTLiAgKi8KKyAgdW5zaWduZWQgaW50IGluZHg7CisgIC8qIEJpdHMg dGhhdCBhcmUgc2V0LCBjb3VudGluZyBmcm9tIElORFgsIGluY2x1c2l2ZSAg Ki8KKyAgQklUTUFQX1dPUkQgYml0c1tCSVRNQVBfRUxFTUVOVF9XT1JEU107 CiB9OwogCiAvKiBIZWFkIG9mIGJpdG1hcCBsaW5rZWQgbGlzdC4gIFRoZSAn Y3VycmVudCcgbWVtYmVyIHBvaW50cyB0byBzb21ldGhpbmcKICAgIGFscmVh ZHkgcG9pbnRlZCB0byBieSB0aGUgY2hhaW4gc3RhcnRlZCBieSBmaXJzdCwg c28gR1RZKChza2lwKSkgaXQuICAqLwogCiBzdHJ1Y3QgR1RZKCgpKSBiaXRt YXBfaGVhZCB7Ci0gIHVuc2lnbmVkIGludCBpbmR4OwkJCS8qIEluZGV4IG9m IGxhc3QgZWxlbWVudCBsb29rZWQgYXQuICAqLwotICB1bnNpZ25lZCBpbnQg ZGVzY3JpcHRvcl9pZDsJCS8qIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUg YWxsb2NhdGlvbgotCQkJCQkgICBzaXRlIG9mIHRoaXMgYml0bWFwLCBmb3Ig ZGV0YWlsZWQKLQkJCQkJICAgc3RhdGlzdGljcyBnYXRoZXJpbmcuICAqLwot ICBiaXRtYXBfZWxlbWVudCAqZmlyc3Q7CQkvKiBGaXJzdCBlbGVtZW50IGlu IGxpbmtlZCBsaXN0LiAgKi8KLSAgYml0bWFwX2VsZW1lbnQgKiBHVFkoKHNr aXAoIiIpKSkgY3VycmVudDsgLyogTGFzdCBlbGVtZW50IGxvb2tlZCBhdC4g ICovCi0gIGJpdG1hcF9vYnN0YWNrICpvYnN0YWNrOwkJLyogT2JzdGFjayB0 byBhbGxvY2F0ZSBlbGVtZW50cyBmcm9tLgotCQkJCQkgICBJZiBOVUxMLCB0 aGVuIHVzZSBHR0MgYWxsb2NhdGlvbi4gICovCisgIC8qIEluZGV4IG9mIGxh c3QgZWxlbWVudCBsb29rZWQgYXQuICAqLworICB1bnNpZ25lZCBpbnQgaW5k eDsKKyAgLyogRmFsc2UgaWYgdGhlIGJpdG1hcCBpcyBpbiBsaXN0IGZvcm07 IHRydWUgaWYgdGhlIGJpdG1hcCBpcyBpbiB0cmVlIGZvcm0uCisgICAgIEJp dG1hcCBpdGVyYXRvcnMgb25seSB3b3JrIG9uIGJpdG1hcHMgaW4gbGlzdCBm b3JtLiAgKi8KKyAgYm9vbCB0cmVlX2Zvcm07CisgIC8qIEluIGxpc3QgZm9y bSwgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0OworICAg ICBpbiB0cmVlIGZvcm0sIHRoZSByb290IG9mIHRoZSB0cmVlLiAgICovCisg IGJpdG1hcF9lbGVtZW50ICpmaXJzdDsKKyAgLyogTGFzdCBlbGVtZW50IGxv b2tlZCBhdC4gICovCisgIGJpdG1hcF9lbGVtZW50ICogR1RZKChza2lwKCIi KSkpIGN1cnJlbnQ7CisgIC8qIE9ic3RhY2sgdG8gYWxsb2NhdGUgZWxlbWVu dHMgZnJvbS4gIElmIE5VTEwsIHRoZW4gdXNlIEdHQyBhbGxvY2F0aW9uLiAg Ki8KKyAgYml0bWFwX29ic3RhY2sgKm9ic3RhY2s7CiB9OwogCiAvKiBHbG9i YWwgZGF0YSAqLwogZXh0ZXJuIGJpdG1hcF9lbGVtZW50IGJpdG1hcF96ZXJv X2JpdHM7CS8qIFplcm8gYml0bWFwIGVsZW1lbnQgKi8KIGV4dGVybiBiaXRt YXBfb2JzdGFjayBiaXRtYXBfZGVmYXVsdF9vYnN0YWNrOyAgIC8qIERlZmF1 bHQgYml0bWFwIG9ic3RhY2sgKi8KIAorLyogQ2hhbmdlIHRoZSB2aWV3IG9m IHRoZSBiaXRtYXAgdG8gbGlzdCwgb3IgdHJlZS4gICovCit2b2lkIGJpdG1h cF9saXN0X3ZpZXcgKGJpdG1hcCk7Cit2b2lkIGJpdG1hcF90cmVlX3ZpZXcg KGJpdG1hcCk7CisKIC8qIENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgdXAg dGhlIGxpbmtlZCBsaXN0LiAgKi8KIGV4dGVybiB2b2lkIGJpdG1hcF9jbGVh ciAoYml0bWFwKTsKIApAQCAtMzE1LDE1ICs0MDAsMTUgQEAgZXh0ZXJuIGJv b2wgYml0bWFwX2NsZWFyX2JpdCAoYml0bWFwLCBpbgogLyogU2V0IGEgc2lu Z2xlIGJpdCBpbiBhIGJpdG1hcC4gIFJldHVybiB0cnVlIGlmIHRoZSBiaXQg Y2hhbmdlZC4gICovCiBleHRlcm4gYm9vbCBiaXRtYXBfc2V0X2JpdCAoYml0 bWFwLCBpbnQpOwogCi0vKiBSZXR1cm4gdHJ1ZSBpZiBhIHJlZ2lzdGVyIGlz IHNldCBpbiBhIHJlZ2lzdGVyIHNldC4gICovCisvKiBSZXR1cm4gdHJ1ZSBp ZiBhIGJpdCBpcyBzZXQgaW4gYSBiaXRtYXAuICAqLwogZXh0ZXJuIGludCBi aXRtYXBfYml0X3AgKGJpdG1hcCwgaW50KTsKIAotLyogRGVidWcgZnVuY3Rp b25zIHRvIHByaW50IGEgYml0bWFwIGxpbmtlZCBsaXN0LiAgKi8KLWV4dGVy biB2b2lkIGRlYnVnX2JpdG1hcCAoY29uc3RfYml0bWFwKTsKLWV4dGVybiB2 b2lkIGRlYnVnX2JpdG1hcF9maWxlIChGSUxFICosIGNvbnN0X2JpdG1hcCk7 CisvKiBEZWJ1ZyBmdW5jdGlvbnMgdG8gcHJpbnQgYSBiaXRtYXAuICAqLwor ZXh0ZXJuIHZvaWQgZGVidWdfYml0bWFwIChiaXRtYXApOworZXh0ZXJuIHZv aWQgZGVidWdfYml0bWFwX2ZpbGUgKEZJTEUgKiwgYml0bWFwKTsKIAogLyog UHJpbnQgYSBiaXRtYXAuICAqLwotZXh0ZXJuIHZvaWQgYml0bWFwX3ByaW50 IChGSUxFICosIGNvbnN0X2JpdG1hcCwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICopOworZXh0ZXJuIHZvaWQgYml0bWFwX3ByaW50IChGSUxFICosIGJp dG1hcCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogCiAvKiBJbml0 aWFsaXplIGFuZCByZWxlYXNlIGEgYml0bWFwIG9ic3RhY2suICAqLwogZXh0 ZXJuIHZvaWQgYml0bWFwX29ic3RhY2tfaW5pdGlhbGl6ZSAoYml0bWFwX29i c3RhY2sgKik7CkBAIC0zMzgsNiArNDIzLDcgQEAgc3RhdGljIGlubGluZSB2 b2lkCiBiaXRtYXBfaW5pdGlhbGl6ZSAoYml0bWFwIGhlYWQsIGJpdG1hcF9v YnN0YWNrICpvYnN0YWNrIENYWF9NRU1fU1RBVF9JTkZPKQogewogICBoZWFk LT5maXJzdCA9IGhlYWQtPmN1cnJlbnQgPSBOVUxMOworICBoZWFkLT5pbmR4 ID0gaGVhZC0+dHJlZV9mb3JtID0gMDsKICAgaGVhZC0+b2JzdGFjayA9IG9i c3RhY2s7CiAgIGlmIChHQVRIRVJfU1RBVElTVElDUykKICAgICBiaXRtYXBf cmVnaXN0ZXIgKGhlYWQgUEFTU19NRU1fU1RBVCk7CkBAIC0zNTEsMTIgKzQz NywxMiBAQCBleHRlcm4gYml0bWFwIGJpdG1hcF9nY19hbGxvYyAoQUxPTkVf Q1hYCiBleHRlcm4gdm9pZCBiaXRtYXBfb2JzdGFja19mcmVlIChiaXRtYXAp OwogCiAvKiBBIGZldyBjb21wYXRpYmlsaXR5L2Z1bmN0aW9ucyBtYWNyb3Mg Zm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzYml0bWFwcyAqLwotaW5saW5lIHZv aWQgZHVtcF9iaXRtYXAgKEZJTEUgKmZpbGUsIGNvbnN0X2JpdG1hcCBtYXAp CitpbmxpbmUgdm9pZCBkdW1wX2JpdG1hcCAoRklMRSAqZmlsZSwgYml0bWFw IG1hcCkKIHsKICAgYml0bWFwX3ByaW50IChmaWxlLCBtYXAsICIiLCAiXG4i KTsKIH0KLWV4dGVybiB2b2lkIGRlYnVnIChjb25zdCBiaXRtYXBfaGVhZCAm cmVmKTsKLWV4dGVybiB2b2lkIGRlYnVnIChjb25zdCBiaXRtYXBfaGVhZCAq cHRyKTsKK2V4dGVybiB2b2lkIGRlYnVnIChiaXRtYXBfaGVhZCAmcmVmKTsK K2V4dGVybiB2b2lkIGRlYnVnIChiaXRtYXBfaGVhZCAqcHRyKTsKIAogZXh0 ZXJuIHVuc2lnbmVkIGJpdG1hcF9maXJzdF9zZXRfYml0IChjb25zdF9iaXRt YXApOwogZXh0ZXJuIHVuc2lnbmVkIGJpdG1hcF9sYXN0X3NldF9iaXQgKGNv bnN0X2JpdG1hcCk7CkBAIC0zOTcsNiArNDgzLDggQEAgYm1wX2l0ZXJfc2V0 X2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmksCiAgIGJpLT5lbHQxID0gbWFw LT5maXJzdDsKICAgYmktPmVsdDIgPSBOVUxMOwogCisgIGdjY19jaGVja2lu Z19hc3NlcnQgKCFtYXAtPnRyZWVfZm9ybSk7CisKICAgLyogQWR2YW5jZSBl bHQxIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgdGhlIGJsb2NrIGNvbnRhaW5p bmcgc3RhcnRfYml0LiAgKi8KICAgd2hpbGUgKDEpCiAgICAgewpAQCAtNDM5 LDYgKzUyNyw4IEBAIGJtcF9pdGVyX2FuZF9pbml0IChiaXRtYXBfaXRlcmF0 b3IgKmJpLAogICBiaS0+ZWx0MSA9IG1hcDEtPmZpcnN0OwogICBiaS0+ZWx0 MiA9IG1hcDItPmZpcnN0OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFt YXAxLT50cmVlX2Zvcm0gJiYgIW1hcDItPnRyZWVfZm9ybSk7CisKICAgLyog QWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgdGhlIGJsb2Nr IGNvbnRhaW5pbmcKICAgICAgc3RhcnRfYml0LiAgKi8KICAgd2hpbGUgKDEp CkBAIC00OTcsOCArNTg3LDcgQEAgYm1wX2l0ZXJfYW5kX2luaXQgKGJpdG1h cF9pdGVyYXRvciAqYmksCiAgICpiaXRfbm8gPSBzdGFydF9iaXQ7CiB9CiAK LS8qIEluaXRpYWxpemUgYW4gaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIHRo ZSBiaXRzIGluIE1BUDEgJiB+TUFQMi4KLSAgICovCisvKiBJbml0aWFsaXpl IGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYml0cyBpbiBNQVAx ICYgfk1BUDIuICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGJtcF9pdGVy X2FuZF9jb21wbF9pbml0IChiaXRtYXBfaXRlcmF0b3IgKmJpLApAQCAtNTA4 LDYgKzU5Nyw4IEBAIGJtcF9pdGVyX2FuZF9jb21wbF9pbml0IChiaXRtYXBf aXRlcmF0b3IKICAgYmktPmVsdDEgPSBtYXAxLT5maXJzdDsKICAgYmktPmVs dDIgPSBtYXAyLT5maXJzdDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh bWFwMS0+dHJlZV9mb3JtICYmICFtYXAyLT50cmVlX2Zvcm0pOworCiAgIC8q IEFkdmFuY2UgZWx0MSB1bnRpbCBpdCBpcyBub3QgYmVmb3JlIHRoZSBibG9j ayBjb250YWluaW5nIHN0YXJ0X2JpdC4gICovCiAgIHdoaWxlICgxKQogICAg IHsKSW5kZXg6IGdjYy90cmVlLXNzYS1wcm9wYWdhdGUuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvdHJlZS1zc2EtcHJvcGFnYXRlLmMJKHJl dmlzaW9uIDI2NTIzNikKKysrIGdjYy90cmVlLXNzYS1wcm9wYWdhdGUuYwko d29ya2luZyBjb3B5KQpAQCAtMzgxLDYgKzM4MSw4IEBAIHNzYV9wcm9wX2lu aXQgKHZvaWQpCiAgIC8qIFdvcmtsaXN0cyBvZiBTU0EgZWRnZXMuICAqLwog ICBzc2FfZWRnZV93b3JrbGlzdCA9IEJJVE1BUF9BTExPQyAoTlVMTCk7CiAg IHNzYV9lZGdlX3dvcmtsaXN0X2JhY2sgPSBCSVRNQVBfQUxMT0MgKE5VTEwp OworICBiaXRtYXBfdHJlZV92aWV3IChzc2FfZWRnZV93b3JrbGlzdCk7Cisg IGJpdG1hcF90cmVlX3ZpZXcgKHNzYV9lZGdlX3dvcmtsaXN0X2JhY2spOwog CiAgIC8qIFdvcmtsaXN0IG9mIGJhc2ljLWJsb2Nrcy4gICovCiAgIGJiX3Rv X2NmZ19vcmRlciA9IFhORVdWRUMgKGludCwgbGFzdF9iYXNpY19ibG9ja19m b3JfZm4gKGNmdW4pICsgMSk7Cg== --0000000000003e3f8805786bd935--