From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by sourceware.org (Postfix) with ESMTPS id 0232E3858D28 for ; Mon, 17 Jul 2023 20:16:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0232E3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4fb96e2b573so7993192e87.3 for ; Mon, 17 Jul 2023 13:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689624999; x=1692216999; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=K0dE7TpnoBcqnk2GKZbvKKXeartlXDLgjsGuNQKqKr4=; b=E05w5o57byRlyvCoVAwZG/plZz2yMXxOSQeXO6YuKvFrfurf/dfD/5nnHH/fEcGjLO D/8FrHM7onVJyKi21pWZ64wFm3CbG5WY6yPr7XiVIdTDN8EZIIF3HQtfmwgDztoUKrD8 YI1bJadF8gNH9XrTifztDKqfL4FOxX+LfR/lE6c4kL3Ag6Px0KMNMVaUUmlfcVwX2QC/ ev3vZwByuHr4ozEqReMfTKuxbXxOxUiz6ibpq0iOtKskHp+ShsC2P5Cf1K4VoWdH0I+M YN4JYdBAjVCLasCdaHNHCq7jeeUr+istKJ7jiJT15J8IKicGr1+F6RLhUilYy0Is6Xt6 v2JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689624999; x=1692216999; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=K0dE7TpnoBcqnk2GKZbvKKXeartlXDLgjsGuNQKqKr4=; b=Rk56p+CWbiV+UZHuDg/RVT1ozXLkH2hSXMe/OFZAu8hqBXd580kBw0mnSk5XWipmQq B6qmUZWdtSKSUcqs3BAlLlvOqOHlE6v0ZuNabOPYQnEj8rUlGOaIgawU6o6hiqAaHGaa axnacZqy8pqH214ZPG8HtLEqoI0IblHLloHcdv21pArT0NjWr9wR9CGESkU/DNnSALwJ H0aqWu6+p4ONDDUaOtddGAQI2CGWxSq0BJNfbAhiW9qvnZbqB3IYyelC3ErD/xXFyf7B nz4a5zzhwdZKmwPazfEnlctGtCBJqJq/SsXFxFRhKzC2DBqJpxRcIPr8jKPa8YjVnNdU jX+w== X-Gm-Message-State: ABy/qLZ0bO+gIzTHrIQkW6SZXZ9llSifI4Cd4t8NWqqtlOa3qIm7Ckcl YOz6A7y/1G5k56Mkf1ZnW26Ha5z3OVqQYJRvIbfL5HGWKnMSbg== X-Google-Smtp-Source: APBJJlFmrPtRqYcfVdwvuxC/4u/qlTBt7474DQjrH3ughz3A54DbC52KT9ObSkwodniCCzfA9jca+vJZvTYZtvki98s= X-Received: by 2002:a19:5015:0:b0:4fb:7772:7bae with SMTP id e21-20020a195015000000b004fb77727baemr243221lfb.6.1689624998296; Mon, 17 Jul 2023 13:16:38 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Mon, 17 Jul 2023 22:16:27 +0200 Message-ID: Subject: [committed] combine: Change return type of predicate functions from int to bool To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000d49b2a0600b479b1" X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000d49b2a0600b479b1 Content-Type: text/plain; charset="UTF-8" Also change some internal variables and function arguments from int to bool. gcc/ChangeLog: * combine.cc (struct reg_stat_type): Change last_set_invalid to bool. (cant_combine_insn_p): Change return type from int to bool and adjust function body accordingly. (can_combine_p): Ditto. (combinable_i3pat): Ditto. Change "i1_not_in_src" and "i0_not_in_src" function arguments from int to bool. (contains_muldiv): Change return type from int to bool and adjust function body accordingly. (try_combine): Ditto. Change "new_direct_jump" pointer function argument from int to bool. Change "substed_i2", "substed_i1", "substed_i0", "added_sets_0", "added_sets_1", "added_sets_2", "i2dest_in_i2src", "i1dest_in_i1src", "i2dest_in_i1src", "i0dest_in_i0src", "i1dest_in_i0src", "i2dest_in_i0src", "i2dest_killed", "i1dest_killed", "i0dest_killed", "i1_feeds_i2_n", "i0_feeds_i2_n", "i0_feeds_i1_n", "i3_subst_into_i2", "have_mult", "swap_i2i3", "split_i2i3" and "changed_i3_dest" variables from int to bool. (subst): Change "in_dest", "in_cond" and "unique_copy" function arguments from int to bool. (combine_simplify_rtx): Change "in_dest" and "in_cond" function arguments from int to bool. (make_extraction): Change "unsignedp", "in_dest" and "in_compare" function argument from int to bool. (force_int_to_mode): Change "just_select" function argument from int to bool. Change "next_select" variable to bool. (rtx_equal_for_field_assignment_p): Change return type from int to bool and adjust function body accordingly. (merge_outer_ops): Ditto. Change "pcomp_p" pointer function argument from int to bool. (get_last_value_validate): Change return type from int to bool and adjust function body accordingly. (reg_dead_at_p): Ditto. (reg_bitfield_target_p): Ditto. (combine_instructions): Ditto. Change "new_direct_jump" variable to bool. (can_combine_p): Change return type from int to bool and adjust function body accordingly. (likely_spilled_retval_p): Ditto. (can_change_dest_mode): Change "added_sets" function argument from int to bool. (find_split_point): Change "unsignedp" variable to bool. (simplify_if_then_else): Change "comparison_p" and "swapped" variables to bool. (simplify_set): Change "other_changed" variable to bool. (expand_compound_operation): Change "unsignedp" variable to bool. (force_to_mode): Change "just_select" function argument from int to bool. Change "next_select" variable to bool. (extended_count): Change "unsignedp" function argument to bool. (simplify_shift_const_1): Change "complement_p" variable to bool. (simplify_comparison): Change "changed" variable to bool. (rest_of_handle_combine): Change return type to void. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. --000000000000d49b2a0600b479b1 Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lk7b1d9n0 ZGlmZiAtLWdpdCBhL2djYy9jb21iaW5lLmNjIGIvZ2NjL2NvbWJpbmUuY2MKaW5kZXggMzA0YzAy MGVjNzkuLmQ5MTYxYjI1N2U4IDEwMDY0NAotLS0gYS9nY2MvY29tYmluZS5jYworKysgYi9nY2Mv Y29tYmluZS5jYwpAQCAtMTU2LDcgKzE1Niw3IEBAIHN0cnVjdCByZWdfc3RhdF90eXBlIHsKIAkJ CQlyZWdpc3RlciB3YXMgYXNzaWduZWQKICAgICAgbGFzdF9zZXRfdGFibGVfdGljawlyZWNvcmRz IHRoZSB2YWx1ZSBvZiBsYWJlbF90aWNrIHdoZW4gYQogCQkJCXZhbHVlIHVzaW5nIHRoZSByZWdp c3RlciBpcyBhc3NpZ25lZAotICAgICBsYXN0X3NldF9pbnZhbGlkCQlzZXQgdG8gbm9uemVybyB3 aGVuIGl0IGlzIG5vdCB2YWxpZAorICAgICBsYXN0X3NldF9pbnZhbGlkCQlzZXQgdG8gdHJ1ZSB3 aGVuIGl0IGlzIG5vdCB2YWxpZAogCQkJCXRvIHVzZSB0aGUgdmFsdWUgb2YgdGhpcyByZWdpc3Rl ciBpbiBzb21lCiAJCQkJcmVnaXN0ZXIncyB2YWx1ZQogCkBAIC0yMDIsMTEgKzIwMiwxMSBAQCBz dHJ1Y3QgcmVnX3N0YXRfdHlwZSB7CiAgIGNoYXIJCQkJbGFzdF9zZXRfc2lnbl9iaXRfY29waWVz OwogICBFTlVNX0JJVEZJRUxEKG1hY2hpbmVfbW9kZSkJbGFzdF9zZXRfbW9kZSA6IE1BQ0hJTkVf TU9ERV9CSVRTSVpFOwogCi0gIC8qIFNldCBub256ZXJvIGlmIHJlZmVyZW5jZXMgdG8gcmVnaXN0 ZXIgbiBpbiBleHByZXNzaW9ucyBzaG91bGQgbm90IGJlCisgIC8qIFNldCB0byB0cnVlIGlmIHJl ZmVyZW5jZXMgdG8gcmVnaXN0ZXIgbiBpbiBleHByZXNzaW9ucyBzaG91bGQgbm90IGJlCiAgICAg IHVzZWQuICBsYXN0X3NldF9pbnZhbGlkIGlzIHNldCBub256ZXJvIHdoZW4gdGhpcyByZWdpc3Rl ciBpcyBiZWluZwogICAgICBhc3NpZ25lZCB0byBhbmQgbGFzdF9zZXRfdGFibGVfdGljayA9PSBs YWJlbF90aWNrLiAgKi8KIAotICBjaGFyCQkJCWxhc3Rfc2V0X2ludmFsaWQ7CisgIGJvb2wJCQkJ bGFzdF9zZXRfaW52YWxpZDsKIAogICAvKiBTb21lIHJlZ2lzdGVycyB0aGF0IGFyZSBzZXQgbW9y ZSB0aGFuIG9uY2UgYW5kIHVzZWQgaW4gbW9yZSB0aGFuIG9uZQogICAgICBiYXNpYyBibG9jayBh cmUgbmV2ZXJ0aGVsZXNzIGFsd2F5cyBzZXQgaW4gc2ltaWxhciB3YXlzLiAgRm9yIGV4YW1wbGUs CkBAIC00MTYsMzUgKzQxNiwzNiBAQCBzdGF0aWMgdm9pZCBkb19TVUJTVF9JTlQgKGludCAqLCBp bnQpOwogc3RhdGljIHZvaWQgaW5pdF9yZWdfbGFzdCAodm9pZCk7CiBzdGF0aWMgdm9pZCBzZXR1 cF9pbmNvbWluZ19wcm9tb3Rpb25zIChydHhfaW5zbiAqKTsKIHN0YXRpYyB2b2lkIHNldF9ub256 ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzIChydHgsIGNvbnN0X3J0eCwgdm9pZCAqKTsKLXN0YXRp YyBpbnQgY2FudF9jb21iaW5lX2luc25fcCAocnR4X2luc24gKik7Ci1zdGF0aWMgaW50IGNhbl9j b21iaW5lX3AgKHJ0eF9pbnNuICosIHJ0eF9pbnNuICosIHJ0eF9pbnNuICosIHJ0eF9pbnNuICos Ci0JCQkgIHJ0eF9pbnNuICosIHJ0eF9pbnNuICosIHJ0eCAqLCBydHggKik7Ci1zdGF0aWMgaW50 IGNvbWJpbmFibGVfaTNwYXQgKHJ0eF9pbnNuICosIHJ0eCAqLCBydHgsIHJ0eCwgcnR4LCBpbnQs IGludCwgcnR4ICopOwotc3RhdGljIGludCBjb250YWluc19tdWxkaXYgKHJ0eCk7CitzdGF0aWMg Ym9vbCBjYW50X2NvbWJpbmVfaW5zbl9wIChydHhfaW5zbiAqKTsKK3N0YXRpYyBib29sIGNhbl9j b21iaW5lX3AgKHJ0eF9pbnNuICosIHJ0eF9pbnNuICosIHJ0eF9pbnNuICosIHJ0eF9pbnNuICos CisJCQkgICBydHhfaW5zbiAqLCBydHhfaW5zbiAqLCBydHggKiwgcnR4ICopOworc3RhdGljIGJv b2wgY29tYmluYWJsZV9pM3BhdCAocnR4X2luc24gKiwgcnR4ICosIHJ0eCwgcnR4LCBydHgsCisJ CQkgICAgICBib29sLCBib29sLCBydHggKik7CitzdGF0aWMgYm9vbCBjb250YWluc19tdWxkaXYg KHJ0eCk7CiBzdGF0aWMgcnR4X2luc24gKnRyeV9jb21iaW5lIChydHhfaW5zbiAqLCBydHhfaW5z biAqLCBydHhfaW5zbiAqLCBydHhfaW5zbiAqLAotCQkJICAgICAgaW50ICosIHJ0eF9pbnNuICop OworCQkJICAgICAgYm9vbCAqLCBydHhfaW5zbiAqKTsKIHN0YXRpYyB2b2lkIHVuZG9fYWxsICh2 b2lkKTsKIHN0YXRpYyB2b2lkIHVuZG9fY29tbWl0ICh2b2lkKTsKIHN0YXRpYyBydHggKmZpbmRf c3BsaXRfcG9pbnQgKHJ0eCAqLCBydHhfaW5zbiAqLCBib29sKTsKLXN0YXRpYyBydHggc3Vic3Qg KHJ0eCwgcnR4LCBydHgsIGludCwgaW50LCBpbnQpOwotc3RhdGljIHJ0eCBjb21iaW5lX3NpbXBs aWZ5X3J0eCAocnR4LCBtYWNoaW5lX21vZGUsIGludCwgaW50KTsKK3N0YXRpYyBydHggc3Vic3Qg KHJ0eCwgcnR4LCBydHgsIGJvb2wsIGJvb2wsIGJvb2wpOworc3RhdGljIHJ0eCBjb21iaW5lX3Np bXBsaWZ5X3J0eCAocnR4LCBtYWNoaW5lX21vZGUsIGJvb2wsIGJvb2wpOwogc3RhdGljIHJ0eCBz aW1wbGlmeV9pZl90aGVuX2Vsc2UgKHJ0eCk7CiBzdGF0aWMgcnR4IHNpbXBsaWZ5X3NldCAocnR4 KTsKIHN0YXRpYyBydHggc2ltcGxpZnlfbG9naWNhbCAocnR4KTsKIHN0YXRpYyBydHggZXhwYW5k X2NvbXBvdW5kX29wZXJhdGlvbiAocnR4KTsKIHN0YXRpYyBjb25zdF9ydHggZXhwYW5kX2ZpZWxk X2Fzc2lnbm1lbnQgKGNvbnN0X3J0eCk7Ci1zdGF0aWMgcnR4IG1ha2VfZXh0cmFjdGlvbiAobWFj aGluZV9tb2RlLCBydHgsIEhPU1RfV0lERV9JTlQsCi0JCQkgICAgcnR4LCB1bnNpZ25lZCBIT1NU X1dJREVfSU5ULCBpbnQsIGludCwgaW50KTsKK3N0YXRpYyBydHggbWFrZV9leHRyYWN0aW9uICht YWNoaW5lX21vZGUsIHJ0eCwgSE9TVF9XSURFX0lOVCwgcnR4LAorCQkJICAgIHVuc2lnbmVkIEhP U1RfV0lERV9JTlQsIGJvb2wsIGJvb2wsIGJvb2wpOwogc3RhdGljIGludCBnZXRfcG9zX2Zyb21f bWFzayAodW5zaWduZWQgSE9TVF9XSURFX0lOVCwKIAkJCSAgICAgIHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgKik7CiBzdGF0aWMgcnR4IGNhbm9uX3JlZ19mb3JfY29tYmluZSAocnR4LCBydHgpOwog c3RhdGljIHJ0eCBmb3JjZV9pbnRfdG9fbW9kZSAocnR4LCBzY2FsYXJfaW50X21vZGUsIHNjYWxh cl9pbnRfbW9kZSwKLQkJCSAgICAgIHNjYWxhcl9pbnRfbW9kZSwgdW5zaWduZWQgSE9TVF9XSURF X0lOVCwgaW50KTsKKwkJCSAgICAgIHNjYWxhcl9pbnRfbW9kZSwgdW5zaWduZWQgSE9TVF9XSURF X0lOVCwgYm9vbCk7CiBzdGF0aWMgcnR4IGZvcmNlX3RvX21vZGUgKHJ0eCwgbWFjaGluZV9tb2Rl LAotCQkJICB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBpbnQpOworCQkJICB1bnNpZ25lZCBIT1NU X1dJREVfSU5ULCBib29sKTsKIHN0YXRpYyBydHggaWZfdGhlbl9lbHNlX2NvbmQgKHJ0eCwgcnR4 ICosIHJ0eCAqKTsKIHN0YXRpYyBydHgga25vd25fY29uZCAocnR4LCBlbnVtIHJ0eF9jb2RlLCBy dHgsIHJ0eCk7Ci1zdGF0aWMgaW50IHJ0eF9lcXVhbF9mb3JfZmllbGRfYXNzaWdubWVudF9wIChy dHgsIHJ0eCwgYm9vbCA9IGZhbHNlKTsKK3N0YXRpYyBib29sIHJ0eF9lcXVhbF9mb3JfZmllbGRf YXNzaWdubWVudF9wIChydHgsIHJ0eCwgYm9vbCA9IGZhbHNlKTsKIHN0YXRpYyBydHggbWFrZV9m aWVsZF9hc3NpZ25tZW50IChydHgpOwogc3RhdGljIHJ0eCBhcHBseV9kaXN0cmlidXRpdmVfbGF3 IChydHgpOwogc3RhdGljIHJ0eCBkaXN0cmlidXRlX2FuZF9zaW1wbGlmeV9ydHggKHJ0eCwgaW50 KTsKQEAgLTQ1Miw4ICs0NTMsOCBAQCBzdGF0aWMgcnR4IHNpbXBsaWZ5X2FuZF9jb25zdF9pbnRf MSAoc2NhbGFyX2ludF9tb2RlLCBydHgsCiAJCQkJICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5U KTsKIHN0YXRpYyBydHggc2ltcGxpZnlfYW5kX2NvbnN0X2ludCAocnR4LCBzY2FsYXJfaW50X21v ZGUsIHJ0eCwKIAkJCQkgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKLXN0YXRpYyBpbnQgbWVy Z2Vfb3V0ZXJfb3BzIChlbnVtIHJ0eF9jb2RlICosIEhPU1RfV0lERV9JTlQgKiwgZW51bSBydHhf Y29kZSwKLQkJCSAgICBIT1NUX1dJREVfSU5ULCBtYWNoaW5lX21vZGUsIGludCAqKTsKK3N0YXRp YyBib29sIG1lcmdlX291dGVyX29wcyAoZW51bSBydHhfY29kZSAqLCBIT1NUX1dJREVfSU5UICos IGVudW0gcnR4X2NvZGUsCisJCQkgICAgIEhPU1RfV0lERV9JTlQsIG1hY2hpbmVfbW9kZSwgYm9v bCAqKTsKIHN0YXRpYyBydHggc2ltcGxpZnlfc2hpZnRfY29uc3RfMSAoZW51bSBydHhfY29kZSwg bWFjaGluZV9tb2RlLCBydHgsIGludCk7CiBzdGF0aWMgcnR4IHNpbXBsaWZ5X3NoaWZ0X2NvbnN0 IChydHgsIGVudW0gcnR4X2NvZGUsIG1hY2hpbmVfbW9kZSwgcnR4LAogCQkJCSBpbnQpOwpAQCAt NDY3LDEzICs0NjgsMTQgQEAgc3RhdGljIHZvaWQgcmVjb3JkX3ZhbHVlX2Zvcl9yZWcgKHJ0eCwg cnR4X2luc24gKiwgcnR4KTsKIHN0YXRpYyB2b2lkIGNoZWNrX3Byb21vdGVkX3N1YnJlZyAocnR4 X2luc24gKiwgcnR4KTsKIHN0YXRpYyB2b2lkIHJlY29yZF9kZWFkX2FuZF9zZXRfcmVnc18xIChy dHgsIGNvbnN0X3J0eCwgdm9pZCAqKTsKIHN0YXRpYyB2b2lkIHJlY29yZF9kZWFkX2FuZF9zZXRf cmVncyAocnR4X2luc24gKik7Ci1zdGF0aWMgaW50IGdldF9sYXN0X3ZhbHVlX3ZhbGlkYXRlIChy dHggKiwgcnR4X2luc24gKiwgaW50LCBpbnQpOworc3RhdGljIGJvb2wgZ2V0X2xhc3RfdmFsdWVf dmFsaWRhdGUgKHJ0eCAqLCBydHhfaW5zbiAqLCBpbnQsIGJvb2wpOwogc3RhdGljIHJ0eCBnZXRf bGFzdF92YWx1ZSAoY29uc3RfcnR4KTsKIHN0YXRpYyB2b2lkIHJlZ19kZWFkX2F0X3BfMSAocnR4 LCBjb25zdF9ydHgsIHZvaWQgKik7Ci1zdGF0aWMgaW50IHJlZ19kZWFkX2F0X3AgKHJ0eCwgcnR4 X2luc24gKik7CitzdGF0aWMgYm9vbCByZWdfZGVhZF9hdF9wIChydHgsIHJ0eF9pbnNuICopOwog c3RhdGljIHZvaWQgbW92ZV9kZWF0aHMgKHJ0eCwgcnR4LCBpbnQsIHJ0eF9pbnNuICosIHJ0eCAq KTsKLXN0YXRpYyBpbnQgcmVnX2JpdGZpZWxkX3RhcmdldF9wIChydHgsIHJ0eCk7Ci1zdGF0aWMg dm9pZCBkaXN0cmlidXRlX25vdGVzIChydHgsIHJ0eF9pbnNuICosIHJ0eF9pbnNuICosIHJ0eF9p bnNuICosIHJ0eCwgcnR4LCBydHgpOworc3RhdGljIGJvb2wgcmVnX2JpdGZpZWxkX3RhcmdldF9w IChydHgsIHJ0eCk7CitzdGF0aWMgdm9pZCBkaXN0cmlidXRlX25vdGVzIChydHgsIHJ0eF9pbnNu ICosIHJ0eF9pbnNuICosIHJ0eF9pbnNuICosCisJCQkgICAgICBydHgsIHJ0eCwgcnR4KTsKIHN0 YXRpYyB2b2lkIGRpc3RyaWJ1dGVfbGlua3MgKHN0cnVjdCBpbnNuX2xpbmsgKik7CiBzdGF0aWMg dm9pZCBtYXJrX3VzZWRfcmVnc19jb21iaW5lIChydHgpOwogc3RhdGljIHZvaWQgcmVjb3JkX3By b21vdGVkX3ZhbHVlIChydHhfaW5zbiAqLCBydHgpOwpAQCAtOTA3LDcgKzkwOSw3IEBAIGNvbWJp bmVfdmFsaWRhdGVfY29zdCAocnR4X2luc24gKmkwLCBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICpp MiwgcnR4X2luc24gKmkzLAogCiAgIC8qIERpc2FsbG93IHRoaXMgY29tYmluYXRpb24gaWYgYm90 aCBuZXdfY29zdCBhbmQgb2xkX2Nvc3QgYXJlIGdyZWF0ZXIgdGhhbgogICAgICB6ZXJvLCBhbmQg bmV3X2Nvc3QgaXMgZ3JlYXRlciB0aGFuIG9sZCBjb3N0LiAgKi8KLSAgaW50IHJlamVjdCA9IG9s ZF9jb3N0ID4gMCAmJiBuZXdfY29zdCA+IG9sZF9jb3N0OworICBib29sIHJlamVjdCA9IG9sZF9j b3N0ID4gMCAmJiBuZXdfY29zdCA+IG9sZF9jb3N0OwogCiAgIGlmIChkdW1wX2ZpbGUpCiAgICAg ewpAQCAtMTExMyw3ICsxMTE1LDcgQEAgaW5zbl9hX2ZlZWRzX2IgKHJ0eF9pbnNuICphLCBydHhf aW5zbiAqYikKIAogICAgUmV0dXJuIG5vbnplcm8gaWYgdGhlIENGRyB3YXMgY2hhbmdlZCAoZS5n LiBpZiB0aGUgY29tYmluZXIgaGFzCiAgICB0dXJuZWQgYW4gaW5kaXJlY3QganVtcCBpbnN0cnVj dGlvbiBpbnRvIGEgZGlyZWN0IGp1bXApLiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBj b21iaW5lX2luc3RydWN0aW9ucyAocnR4X2luc24gKmYsIHVuc2lnbmVkIGludCBucmVncykKIHsK ICAgcnR4X2luc24gKmluc24sICpuZXh0OwpAQCAtMTEyMSwxMiArMTEyMywxMiBAQCBjb21iaW5l X2luc3RydWN0aW9ucyAocnR4X2luc24gKmYsIHVuc2lnbmVkIGludCBucmVncykKICAgcnR4X2lu c24gKmZpcnN0OwogICBiYXNpY19ibG9jayBsYXN0X2JiOwogCi0gIGludCBuZXdfZGlyZWN0X2p1 bXBfcCA9IDA7CisgIGJvb2wgbmV3X2RpcmVjdF9qdW1wX3AgPSBmYWxzZTsKIAogICBmb3IgKGZp cnN0ID0gZjsgZmlyc3QgJiYgIU5PTkRFQlVHX0lOU05fUCAoZmlyc3QpOyApCiAgICAgZmlyc3Qg PSBORVhUX0lOU04gKGZpcnN0KTsKICAgaWYgKCFmaXJzdCkKLSAgICByZXR1cm4gMDsKKyAgICBy ZXR1cm4gZmFsc2U7CiAKICAgY29tYmluZV9hdHRlbXB0cyA9IDA7CiAgIGNvbWJpbmVfbWVyZ2Vz ID0gMDsKQEAgLTE0MzIsOCArMTQzNCwxMSBAQCByZXRyeToKIAogICBkZWZhdWx0X3J0bF9wcm9m aWxlICgpOwogICBjbGVhcl9iYl9mbGFncyAoKTsKLSAgbmV3X2RpcmVjdF9qdW1wX3AgfD0gcHVy Z2VfYWxsX2RlYWRfZWRnZXMgKCk7Ci0gIG5ld19kaXJlY3RfanVtcF9wIHw9IGRlbGV0ZV9ub29w X21vdmVzICgpOworCisgIGlmIChwdXJnZV9hbGxfZGVhZF9lZGdlcyAoKSkKKyAgICBuZXdfZGly ZWN0X2p1bXBfcCA9IHRydWU7CisgIGlmIChkZWxldGVfbm9vcF9tb3ZlcyAoKSkKKyAgICBuZXdf ZGlyZWN0X2p1bXBfcCA9IHRydWU7CiAKICAgLyogQ2xlYW4gdXAuICAqLwogICBvYnN0YWNrX2Zy ZWUgKCZpbnNuX2xpbmtfb2JzdGFjaywgTlVMTCk7CkBAIC0xNzE4LDEzICsxNzIzLDEzIEBAIHNl dF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzIChydHggeCwgY29uc3RfcnR4IHNldCwgdm9p ZCAqZGF0YSkKICAgIGNvbWJpbmVkIGludG8gdGhlIG1lcmdlciBvZiBJTlNOIGFuZCBJMy4gIFRo ZSBvcmRlciBpcyBQUkVELCBQUkVEMiwKICAgIElOU04sIFNVQ0MsIFNVQ0MyLCBJMy4KIAotICAg UmV0dXJuIDAgaWYgdGhlIGNvbWJpbmF0aW9uIGlzIG5vdCBhbGxvd2VkIGZvciBhbnkgcmVhc29u LgorICAgUmV0dXJuIGZhbHNlIGlmIHRoZSBjb21iaW5hdGlvbiBpcyBub3QgYWxsb3dlZCBmb3Ig YW55IHJlYXNvbi4KIAogICAgSWYgdGhlIGNvbWJpbmF0aW9uIGlzIGFsbG93ZWQsICpQREVTVCB3 aWxsIGJlIHNldCB0byB0aGUgc2luZ2xlCiAgICBkZXN0aW5hdGlvbiBvZiBJTlNOIGFuZCAqUFNS QyB0byB0aGUgc2luZ2xlIHNvdXJjZSwgYW5kIHRoaXMgZnVuY3Rpb24KLSAgIHdpbGwgcmV0dXJu IDEuICAqLworICAgd2lsbCByZXR1cm4gdHJ1ZS4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBi b29sCiBjYW5fY29tYmluZV9wIChydHhfaW5zbiAqaW5zbiwgcnR4X2luc24gKmkzLCBydHhfaW5z biAqcHJlZCBBVFRSSUJVVEVfVU5VU0VELAogCSAgICAgICBydHhfaW5zbiAqcHJlZDIgQVRUUklC VVRFX1VOVVNFRCwgcnR4X2luc24gKnN1Y2MsIHJ0eF9pbnNuICpzdWNjMiwKIAkgICAgICAgcnR4 ICpwZGVzdCwgcnR4ICpwc3JjKQpAQCAtMTgxMyw3ICsxODE4LDcgQEAgY2FuX2NvbWJpbmVfcCAo cnR4X2luc24gKmluc24sIHJ0eF9pbnNuICppMywgcnR4X2luc24gKnByZWQgQVRUUklCVVRFX1VO VVNFRCwKIAkJCSAgICAgID8gcmVnX3NldF9iZXR3ZWVuX3AgKFhFWFAgKGVsdCwgMCksCiAJCQkJ CQkgICBQUkVWX0lOU04gKGluc24pLCBpMykKIAkJCSAgICAgIDogcmVnbm8gPj0gRklSU1RfUFNF VURPX1JFR0lTVEVSKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZhbHNlOwogCQkgICAgfQog CQkgIHdoaWxlICgtLWkgPj0gMCk7CiAJCX0KQEAgLTE4MzQsMTQgKzE4MzksMTQgQEAgY2FuX2Nv bWJpbmVfcCAocnR4X2luc24gKmluc24sIHJ0eF9pbnNuICppMywgcnR4X2luc24gKnByZWQgQVRU UklCVVRFX1VOVVNFRCwKIAkgICAgICAvKiBJZiB3ZSBoYXZlIGFscmVhZHkgZm91bmQgYSBTRVQs IHRoaXMgaXMgYSBzZWNvbmQgb25lIGFuZAogCQkgc28gd2UgY2Fubm90IGNvbWJpbmUgd2l0aCB0 aGlzIGluc24uICAqLwogCSAgICAgIGlmIChzZXQpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFs c2U7CiAKIAkgICAgICBzZXQgPSBlbHQ7CiAJICAgICAgYnJlYWs7CiAKIAkgICAgZGVmYXVsdDoK IAkgICAgICAvKiBBbnl0aGluZyBlbHNlIG1lYW5zIHdlIGNhbid0IGNvbWJpbmUuICAqLwotCSAg ICAgIHJldHVybiAwOworCSAgICAgIHJldHVybiBmYWxzZTsKIAkgICAgfQogCX0KIApAQCAtMTg0 OSwxMyArMTg1NCwxMyBAQCBjYW5fY29tYmluZV9wIChydHhfaW5zbiAqaW5zbiwgcnR4X2luc24g KmkzLCBydHhfaW5zbiAqcHJlZCBBVFRSSUJVVEVfVU5VU0VELAogCSAgLyogSWYgU0VUX1NSQyBp cyBhbiBBU01fT1BFUkFORFMgd2UgY2FuJ3QgdGhyb3cgYXdheSB0aGVzZSBDTE9CQkVScywKIAkg ICAgIHNvIGRvbid0IGRvIGFueXRoaW5nIHdpdGggaXQuICAqLwogCSAgfHwgR0VUX0NPREUgKFNF VF9TUkMgKHNldCkpID09IEFTTV9PUEVSQU5EUykKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7 CiAgICAgfQogICBlbHNlCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIGlm IChzZXQgPT0gMCkKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgLyogVGhl IHNpbXBsaWZpY2F0aW9uIGluIGV4cGFuZF9maWVsZF9hc3NpZ25tZW50IG1heSBjYWxsIGJhY2sg dG8KICAgICAgZ2V0X2xhc3RfdmFsdWUsIHNvIHNldCBzYWZlIGd1YXJkIGhlcmUuICAqLwpAQCAt MTg3MSw3ICsxODc2LDcgQEAgY2FuX2NvbWJpbmVfcCAocnR4X2luc24gKmluc24sIHJ0eF9pbnNu ICppMywgcnR4X2luc24gKnByZWQgQVRUUklCVVRFX1VOVVNFRCwKICAgICAgc2hvdWxkIGJlIGhh cm1sZXNzLiAgKi8KICAgaWYgKFJFR19QIChkZXN0KSAmJiBSRUdfVVNFUlZBUl9QIChkZXN0KSAm JiBIQVJEX1JFR0lTVEVSX1AgKGRlc3QpCiAgICAgICAmJiBleHRyYWN0X2FzbV9vcGVyYW5kcyAo UEFUVEVSTiAoaTMpKSkKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgLyog RG9uJ3QgZWxpbWluYXRlIGEgc3RvcmUgaW4gdGhlIHN0YWNrIHBvaW50ZXIuICAqLwogICBpZiAo ZGVzdCA9PSBzdGFja19wb2ludGVyX3J0eApAQCAtMTkzMSw3ICsxOTM2LDcgQEAgY2FuX2NvbWJp bmVfcCAocnR4X2luc24gKmluc24sIHJ0eF9pbnNuICppMywgcnR4X2luc24gKnByZWQgQVRUUklC VVRFX1VOVVNFRCwKIAkgRXhjZXB0aW9uOiBpZiBzb3VyY2UgaXMgYSBjb25zdGFudCwgbW92aW5n IGl0IGxhdGVyIGNhbid0IGh1cnQuCiAJIEFjY2VwdCB0aGF0IGFzIGEgc3BlY2lhbCBjYXNlLiAg Ki8KICAgICAgIHx8IChERl9JTlNOX0xVSUQgKGluc24pIDwgbGFzdF9jYWxsX2x1aWQgJiYgISBD T05TVEFOVF9QIChzcmMpKSkKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAg LyogREVTVCBtdXN0IGJlIGEgUkVHLiAgKi8KICAgaWYgKFJFR19QIChkZXN0KSkKQEAgLTE5NTgs MTAgKzE5NjMsMTAgQEAgY2FuX2NvbWJpbmVfcCAocnR4X2luc24gKmluc24sIHJ0eF9pbnNuICpp MywgcnR4X2luc24gKnByZWQgQVRUUklCVVRFX1VOVVNFRCwKIAkgICAgICB8fCAoUkVHTk8gKHNy YykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIKIAkJICAmJiAhdGFyZ2V0bS5oYXJkX3JlZ25vX21v ZGVfb2sgKFJFR05PIChzcmMpLAogCQkJCQkJICBHRVRfTU9ERSAoc3JjKSkpKSkKLQlyZXR1cm4g MDsKKwlyZXR1cm4gZmFsc2U7CiAgICAgfQogICBlbHNlCi0gICAgcmV0dXJuIDA7CisgICAgcmV0 dXJuIGZhbHNlOwogCiAKICAgaWYgKEdFVF9DT0RFIChQQVRURVJOIChpMykpID09IFBBUkFMTEVM KQpAQCAtMTk4MSw3ICsxOTg2LDcgQEAgY2FuX2NvbWJpbmVfcCAocnR4X2luc24gKmluc24sIHJ0 eF9pbnNuICppMywgcnR4X2luc24gKnByZWQgQVRUUklCVVRFX1VOVVNFRCwKIAkgICAgICB8fCBS RUdOTyAocmVnKSA+PSBGSVJTVF9QU0VVRE9fUkVHSVNURVIKIAkgICAgICB8fCAhZml4ZWRfcmVn c1tSRUdOTyAocmVnKV0pCiAJICAgIGlmIChyZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAocmVnLCBz cmMpKQotCSAgICAgIHJldHVybiAwOworCSAgICAgIHJldHVybiBmYWxzZTsKIAl9CiAKICAgLyog SWYgSU5TTiBjb250YWlucyBhbnl0aGluZyB2b2xhdGlsZSwgb3IgaXMgYW4gYGFzbScgKHdoZXRo ZXIgdm9sYXRpbGUKQEAgLTE5OTEsOSArMTk5Niw5IEBAIGNhbl9jb21iaW5lX3AgKHJ0eF9pbnNu ICppbnNuLCBydHhfaW5zbiAqaTMsIHJ0eF9pbnNuICpwcmVkIEFUVFJJQlVURV9VTlVTRUQsCiAg ICAgewogICAgICAgLyogTWFrZSBzdXJlIG5laXRoZXIgc3VjYyBub3Igc3VjYzIgY29udGFpbnMg YSB2b2xhdGlsZSByZWZlcmVuY2UuICAqLwogICAgICAgaWYgKHN1Y2MyICE9IDAgJiYgdm9sYXRp bGVfcmVmc19wIChQQVRURVJOIChzdWNjMikpKQotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsK ICAgICAgIGlmIChzdWNjICE9IDAgJiYgdm9sYXRpbGVfcmVmc19wIChQQVRURVJOIChzdWNjKSkp Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogICAgICAgLyogV2UnbGwgY2hlY2sgaW5zbnMg YmV0d2VlbiBJTlNOIGFuZCBJMyBiZWxvdy4gICovCiAgICAgfQogCkBAIC0yMDAyLDcgKzIwMDcs NyBAQCBjYW5fY29tYmluZV9wIChydHhfaW5zbiAqaW5zbiwgcnR4X2luc24gKmkzLCBydHhfaW5z biAqcHJlZCBBVFRSSUJVVEVfVU5VU0VELAogCiAgIGlmIChHRVRfQ09ERSAoc3JjKSA9PSBBU01f T1BFUkFORFMKICAgICAgICYmIFJFR19QIChkZXN0KSAmJiBSRUdOTyAoZGVzdCkgPCBGSVJTVF9Q U0VVRE9fUkVHSVNURVIpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIC8q IElmIElOU04gY29udGFpbnMgdm9sYXRpbGUgcmVmZXJlbmNlcyAoc3BlY2lmaWNhbGx5IHZvbGF0 aWxlIE1FTXMpLAogICAgICB3ZSBjYW5ub3QgY29tYmluZSBhY3Jvc3MgYW55IG90aGVyIHZvbGF0 aWxlIHJlZmVyZW5jZXMuCkBAIC0yMDE1LDcgKzIwMjAsNyBAQCBjYW5fY29tYmluZV9wIChydHhf aW5zbiAqaW5zbiwgcnR4X2luc24gKmkzLCBydHhfaW5zbiAqcHJlZCBBVFRSSUJVVEVfVU5VU0VE LAogCiAgIGZvciAocCA9IE5FWFRfSU5TTiAoaW5zbik7IHAgIT0gaTM7IHAgPSBORVhUX0lOU04g KHApKQogICAgIGlmIChJTlNOX1AgKHApICYmIHAgIT0gc3VjYyAmJiBwICE9IHN1Y2MyICYmIGlz X3ZvbGF0aWxlX3AgKFBBVFRFUk4gKHApKSkKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJu IGZhbHNlOwogCiAgIC8qIElmIElOU04gY29udGFpbnMgYW4gYXV0b2luY3JlbWVudCBvciBhdXRv ZGVjcmVtZW50LCBtYWtlIHN1cmUgdGhhdAogICAgICByZWdpc3RlciBpcyBub3QgdXNlZCBiZXR3 ZWVuIHRoZXJlIGFuZCBJMywgYW5kIG5vdCBhbHJlYWR5IHVzZWQgaW4KQEAgLTIwMzgsNyArMjA0 Myw3IEBAIGNhbl9jb21iaW5lX3AgKHJ0eF9pbnNuICppbnNuLCBydHhfaW5zbiAqaTMsIHJ0eF9p bnNuICpwcmVkIEFUVFJJQlVURV9VTlVTRUQsCiAJICAgICAgfHwgKHN1Y2MyICE9IE5VTExfUlRY CiAJCSAgJiYgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgKFhFWFAgKGxpbmssIDApLCBQQVRURVJO IChzdWNjMikpKQogCSAgICAgIHx8IHJlZ19vdmVybGFwX21lbnRpb25lZF9wIChYRVhQIChsaW5r LCAwKSwgUEFUVEVSTiAoaTMpKSkpCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogCiAgIC8q IElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFuZCB0aGUgY29t YmluYXRpb24gaXMKICAgICAgdG8gYmUgYWxsb3dlZC4gICovCkBAIC0yMDQ2LDcgKzIwNTEsNyBA QCBjYW5fY29tYmluZV9wIChydHhfaW5zbiAqaW5zbiwgcnR4X2luc24gKmkzLCBydHhfaW5zbiAq cHJlZCBBVFRSSUJVVEVfVU5VU0VELAogICAqcGRlc3QgPSBkZXN0OwogICAqcHNyYyA9IHNyYzsK IAotICByZXR1cm4gMTsKKyAgcmV0dXJuIHRydWU7CiB9CiAMCiAvKiBMT0MgaXMgdGhlIGxvY2F0 aW9uIHdpdGhpbiBJMyB0aGF0IGNvbnRhaW5zIGl0cyBwYXR0ZXJuIG9yIHRoZSBjb21wb25lbnQK QEAgLTIwODUsMTEgKzIwOTAsMTEgQEAgY2FuX2NvbWJpbmVfcCAocnR4X2luc24gKmluc24sIHJ0 eF9pbnNuICppMywgcnR4X2luc24gKnByZWQgQVRUUklCVVRFX1VOVVNFRCwKICAgIHdlIHBsYWNl IGEgcmVnaXN0ZXIgdGhhdCBpcyBib3RoIHNldCBhbmQgdXNlZCB3aXRoaW4gSTMuICBJZiBtb3Jl IHRoYW4gb25lCiAgICBzdWNoIHJlZ2lzdGVyIGlzIGRldGVjdGVkLCB3ZSBmYWlsLgogCi0gICBS ZXR1cm4gMSBpZiB0aGUgY29tYmluYXRpb24gaXMgdmFsaWQsIHplcm8gb3RoZXJ3aXNlLiAgKi8K KyAgIFJldHVybiB0cnVlIGlmIHRoZSBjb21iaW5hdGlvbiBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3 aXNlLiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGNvbWJpbmFibGVfaTNwYXQgKHJ0 eF9pbnNuICppMywgcnR4ICpsb2MsIHJ0eCBpMmRlc3QsIHJ0eCBpMWRlc3QsIHJ0eCBpMGRlc3Qs Ci0JCSAgaW50IGkxX25vdF9pbl9zcmMsIGludCBpMF9ub3RfaW5fc3JjLCBydHggKnBpM2Rlc3Rf a2lsbGVkKQorCQkgIGJvb2wgaTFfbm90X2luX3NyYywgYm9vbCBpMF9ub3RfaW5fc3JjLCBydHgg KnBpM2Rlc3Rfa2lsbGVkKQogewogICBydHggeCA9ICpsb2M7CiAKQEAgLTIxMzUsNyArMjE0MCw3 IEBAIGNvbWJpbmFibGVfaTNwYXQgKHJ0eF9pbnNuICppMywgcnR4ICpsb2MsIHJ0eCBpMmRlc3Qs IHJ0eCBpMWRlc3QsIHJ0eCBpMGRlc3QsCiAJCQkJCSAgICAgIEdFVF9NT0RFIChpbm5lcl9kZXN0 KSkpCiAJICB8fCAoaTFfbm90X2luX3NyYyAmJiByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoaTFk ZXN0LCBzcmMpKQogCSAgfHwgKGkwX25vdF9pbl9zcmMgJiYgcmVnX292ZXJsYXBfbWVudGlvbmVk X3AgKGkwZGVzdCwgc3JjKSkpCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogCiAgICAgICAv KiBJZiBERVNUIGlzIHVzZWQgaW4gSTMsIGl0IGlzIGJlaW5nIGtpbGxlZCBpbiB0aGlzIGluc24s IHNvCiAJIHJlY29yZCB0aGF0IGZvciBsYXRlci4gIFdlIGhhdmUgdG8gY29uc2lkZXIgcGFyYWRv eGljYWwKQEAgLTIxNTksNyArMjE2NCw3IEBAIGNvbWJpbmFibGVfaTNwYXQgKHJ0eF9pbnNuICpp MywgcnR4ICpsb2MsIHJ0eCBpMmRlc3QsIHJ0eCBpMWRlc3QsIHJ0eCBpMGRlc3QsCiAJICAmJiBS RUdOTyAoc3ViZGVzdCkgIT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0pCiAJewogCSAgaWYgKCpwaTNk ZXN0X2tpbGxlZCkKLQkgICAgcmV0dXJuIDA7CisJICAgIHJldHVybiBmYWxzZTsKIAogCSAgKnBp M2Rlc3Rfa2lsbGVkID0gc3ViZGVzdDsKIAl9CkBAIC0yMTcyLDIyICsyMTc3LDIyIEBAIGNvbWJp bmFibGVfaTNwYXQgKHJ0eF9pbnNuICppMywgcnR4ICpsb2MsIHJ0eCBpMmRlc3QsIHJ0eCBpMWRl c3QsIHJ0eCBpMGRlc3QsCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgWFZFQ0xFTiAoeCwgMCk7IGkr KykKIAlpZiAoISBjb21iaW5hYmxlX2kzcGF0IChpMywgJlhWRUNFWFAgKHgsIDAsIGkpLCBpMmRl c3QsIGkxZGVzdCwgaTBkZXN0LAogCQkJCWkxX25vdF9pbl9zcmMsIGkwX25vdF9pbl9zcmMsIHBp M2Rlc3Rfa2lsbGVkKSkKLQkgIHJldHVybiAwOworCSAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot ICByZXR1cm4gMTsKKyAgcmV0dXJuIHRydWU7CiB9CiAMCi0vKiBSZXR1cm4gMSBpZiBYIGlzIGFu IGFyaXRobWV0aWMgZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zIGEgbXVsdGlwbGljYXRpb24KKy8q IFJldHVybiB0cnVlIGlmIFggaXMgYW4gYXJpdGhtZXRpYyBleHByZXNzaW9uIHRoYXQgY29udGFp bnMgYSBtdWx0aXBsaWNhdGlvbgogICAgYW5kIGRpdmlzaW9uLiAgV2UgZG9uJ3QgY291bnQgbXVs dGlwbGljYXRpb25zIGJ5IHBvd2VycyBvZiB0d28gaGVyZS4gICovCiAKLXN0YXRpYyBpbnQKK3N0 YXRpYyBib29sCiBjb250YWluc19tdWxkaXYgKHJ0eCB4KQogewogICBzd2l0Y2ggKEdFVF9DT0RF ICh4KSkKICAgICB7CiAgICAgY2FzZSBNT0Q6ICBjYXNlIERJVjogIGNhc2UgVU1PRDogIGNhc2Ug VURJVjoKLSAgICAgIHJldHVybiAxOworICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE1V TFQ6CiAgICAgICByZXR1cm4gISAoQ09OU1RfSU5UX1AgKFhFWFAgKHgsIDEpKQpAQCAtMjIwMCwx NSArMjIwNSwxNSBAQCBjb250YWluc19tdWxkaXYgKHJ0eCB4KQogICAgICAgaWYgKFVOQVJZX1Ag KHgpKQogCXJldHVybiBjb250YWluc19tdWxkaXYgKFhFWFAgKHgsIDApKTsKIAotICAgICAgcmV0 dXJuIDA7CisgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogDAotLyogRGV0ZXJtaW5lIHdo ZXRoZXIgSU5TTiBjYW4gYmUgdXNlZCBpbiBhIGNvbWJpbmF0aW9uLiAgUmV0dXJuIG5vbnplcm8g aWYKKy8qIERldGVybWluZSB3aGV0aGVyIElOU04gY2FuIGJlIHVzZWQgaW4gYSBjb21iaW5hdGlv bi4gIFJldHVybiB0cnVlIGlmCiAgICBub3QuICBUaGlzIGlzIHVzZWQgaW4gdHJ5X2NvbWJpbmUg dG8gZGV0ZWN0IGVhcmx5IHNvbWUgY2FzZXMgd2hlcmUgd2UKICAgIGNhbid0IHBlcmZvcm0gY29t YmluYXRpb25zLiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGNhbnRfY29tYmluZV9p bnNuX3AgKHJ0eF9pbnNuICppbnNuKQogewogICBydHggc2V0OwpAQCAtMjIxOCw3ICsyMjIzLDcg QEAgY2FudF9jb21iaW5lX2luc25fcCAocnR4X2luc24gKmluc24pCiAgICAgIFRoaXMgY2FuIG9j Y3VyIHdoZW4gZmxvdyBkZWxldGVzIGFuIGluc24gdGhhdCBpdCBoYXMgbWVyZ2VkIGludG8gYW4K ICAgICAgYXV0by1pbmNyZW1lbnQgYWRkcmVzcy4gICovCiAgIGlmICghTk9OREVCVUdfSU5TTl9Q IChpbnNuKSkKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gdHJ1ZTsKIAogICAvKiBOZXZlciBj b21iaW5lIGxvYWRzIGFuZCBzdG9yZXMgaW52b2x2aW5nIGhhcmQgcmVncyB0aGF0IGFyZSBsaWtl bHkKICAgICAgdG8gYmUgc3BpbGxlZC4gIFRoZSByZWdpc3RlciBhbGxvY2F0b3IgY2FuIHVzdWFs bHkgaGFuZGxlIHN1Y2gKQEAgLTIyMjksNyArMjIzNCw3IEBAIGNhbnRfY29tYmluZV9pbnNuX3Ag KHJ0eF9pbnNuICppbnNuKQogCiAgIHNldCA9IHNpbmdsZV9zZXQgKGluc24pOwogICBpZiAoISBz ZXQpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogICBzcmMgPSBTRVRfU1JDIChz ZXQpOwogICBkZXN0ID0gU0VUX0RFU1QgKHNldCk7CiAgIGlmIChHRVRfQ09ERSAoc3JjKSA9PSBT VUJSRUcpCkBAIC0yMjQ3LDkgKzIyNTIsOSBAQCBjYW50X2NvbWJpbmVfaW5zbl9wIChydHhfaW5z biAqaW5zbikKIAkgIHx8IChIQVJEX1JFR0lTVEVSX1AgKGRlc3QpCiAJICAgICAgJiYgISBURVNU X0hBUkRfUkVHX0JJVCAoZml4ZWRfcmVnX3NldCwgUkVHTk8gKGRlc3QpKQogCSAgICAgICYmIHRh cmdldG0uY2xhc3NfbGlrZWx5X3NwaWxsZWRfcCAoUkVHTk9fUkVHX0NMQVNTIChSRUdOTyAoZGVz dCkpKSkpKQotICAgIHJldHVybiAxOworICAgIHJldHVybiB0cnVlOwogCi0gIHJldHVybiAwOwor ICByZXR1cm4gZmFsc2U7CiB9CiAKIHN0cnVjdCBsaWtlbHlfc3BpbGxlZF9yZXR2YWxfaW5mbwpA QCAtMjI4NCwxMiArMjI4OSwxMiBAQCBsaWtlbHlfc3BpbGxlZF9yZXR2YWxfMSAocnR4IHgsIGNv bnN0X3J0eCBzZXQsIHZvaWQgKmRhdGEpCiAgIGluZm8tPm1hc2sgJj0gfm5ld19tYXNrOwogfQog Ci0vKiBSZXR1cm4gbm9uemVybyBpZmYgcGFydCBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGxpdmUg ZHVyaW5nIElOU04sIGFuZAorLyogUmV0dXJuIHRydWUgaWZmIHBhcnQgb2YgdGhlIHJldHVybiB2 YWx1ZSBpcyBsaXZlIGR1cmluZyBJTlNOLCBhbmQKICAgIGl0IGlzIGxpa2VseSBzcGlsbGVkLiAg VGhpcyBjYW4gaGFwcGVuIHdoZW4gbW9yZSB0aGFuIG9uZSBpbnNuIGlzIG5lZWRlZAogICAgdG8g Y29weSB0aGUgcmV0dXJuIHZhbHVlLCBlLmcuIHdoZW4gd2UgY29uc2lkZXIgdG8gY29tYmluZSBp bnRvIHRoZQogICAgc2Vjb25kIGNvcHkgaW5zbiBmb3IgYSBjb21wbGV4IHZhbHVlLiAgKi8KIAot c3RhdGljIGludAorc3RhdGljIGJvb2wKIGxpa2VseV9zcGlsbGVkX3JldHZhbF9wIChydHhfaW5z biAqaW5zbikKIHsKICAgcnR4X2luc24gKnVzZSA9IEJCX0VORCAodGhpc19iYXNpY19ibG9jayk7 CkBAIC0yMzAzLDE0ICsyMzA4LDE0IEBAIGxpa2VseV9zcGlsbGVkX3JldHZhbF9wIChydHhfaW5z biAqaW5zbikKICAgc3RydWN0IGxpa2VseV9zcGlsbGVkX3JldHZhbF9pbmZvIGluZm87CiAKICAg aWYgKCFOT05KVU1QX0lOU05fUCAodXNlKSB8fCBHRVRfQ09ERSAoUEFUVEVSTiAodXNlKSkgIT0g VVNFIHx8IGluc24gPT0gdXNlKQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsKICAg cmVnID0gWEVYUCAoUEFUVEVSTiAodXNlKSwgMCk7CiAgIGlmICghUkVHX1AgKHJlZykgfHwgIXRh cmdldG0uY2FsbHMuZnVuY3Rpb25fdmFsdWVfcmVnbm9fcCAoUkVHTk8gKHJlZykpKQotICAgIHJl dHVybiAwOworICAgIHJldHVybiBmYWxzZTsKICAgcmVnbm8gPSBSRUdOTyAocmVnKTsKICAgbnJl Z3MgPSBSRUdfTlJFR1MgKHJlZyk7CiAgIGlmIChucmVncyA9PSAxKQotICAgIHJldHVybiAwOwor ICAgIHJldHVybiBmYWxzZTsKICAgbWFzayA9ICgyVSA8PCAobnJlZ3MgLSAxKSkgLSAxOwogCiAg IC8qIERpc3JlZ2FyZCBwYXJ0cyBvZiB0aGUgcmV0dXJuIHZhbHVlIHRoYXQgYXJlIHNldCBsYXRl ci4gICovCkBAIC0yMzI5LDkgKzIzMzQsOSBAQCBsaWtlbHlfc3BpbGxlZF9yZXR2YWxfcCAocnR4 X2luc24gKmluc24pCiAgICAgewogICAgICAgaWYgKChtYXNrICYgMSA8PCBucmVncykKIAkgICYm IHRhcmdldG0uY2xhc3NfbGlrZWx5X3NwaWxsZWRfcCAoUkVHTk9fUkVHX0NMQVNTIChyZWdubyAr IG5yZWdzKSkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAgICAgfSB3aGlsZSAobnJlZ3Mt LSk7Ci0gIHJldHVybiAwOworICByZXR1cm4gZmFsc2U7CiB9CiAKIC8qIEFkanVzdCBJTlNOIGFm dGVyIHdlIG1hZGUgYSBjaGFuZ2UgdG8gaXRzIGRlc3RpbmF0aW9uLgpAQCAtMjM2Niw5ICsyMzcx LDkgQEAgYWRqdXN0X2Zvcl9uZXdfZGVzdCAocnR4X2luc24gKmluc24pCiB9CiAKIC8qIFJldHVy biBUUlVFIGlmIGNvbWJpbmUgY2FuIHJldXNlIHJlZyBYIGluIG1vZGUgTU9ERS4KLSAgIEFEREVE X1NFVFMgaXMgbm9uemVybyBpZiB0aGUgb3JpZ2luYWwgc2V0IGlzIHN0aWxsIHJlcXVpcmVkLiAg Ki8KKyAgIEFEREVEX1NFVFMgaXMgdHJ1ZWlmIHRoZSBvcmlnaW5hbCBzZXQgaXMgc3RpbGwgcmVx dWlyZWQuICAqLwogc3RhdGljIGJvb2wKLWNhbl9jaGFuZ2VfZGVzdF9tb2RlIChydHggeCwgaW50 IGFkZGVkX3NldHMsIG1hY2hpbmVfbW9kZSBtb2RlKQorY2FuX2NoYW5nZV9kZXN0X21vZGUgKHJ0 eCB4LCBib29sIGFkZGVkX3NldHMsIG1hY2hpbmVfbW9kZSBtb2RlKQogewogICB1bnNpZ25lZCBp bnQgcmVnbm87CiAKQEAgLTI1MDksNyArMjUxNCw3IEBAIGNvdW50X2F1dG9faW5jIChydHgsIHJ0 eCwgcnR4LCBydHgsIHJ0eCwgdm9pZCAqYXJnKQogICAgSWYgd2UgZGlkIHRoZSBjb21iaW5hdGlv biwgcmV0dXJuIHRoZSBpbnNuIGF0IHdoaWNoIGNvbWJpbmUgc2hvdWxkCiAgICByZXN1bWUgc2Nh bm5pbmcuCiAKLSAgIFNldCBORVdfRElSRUNUX0pVTVBfUCB0byBhIG5vbnplcm8gdmFsdWUgaWYg dHJ5X2NvbWJpbmUgY3JlYXRlcyBhCisgICBTZXQgTkVXX0RJUkVDVF9KVU1QX1AgdG8gdHJ1ZSBp ZiB0cnlfY29tYmluZSBjcmVhdGVzIGEKICAgIG5ldyBkaXJlY3QganVtcCBpbnN0cnVjdGlvbi4K IAogICAgTEFTVF9DT01CSU5FRF9JTlNOIGlzIGVpdGhlciBJMywgb3Igc29tZSBpbnNuIGFmdGVy IEkzIHRoYXQgaGFzCkBAIC0yNTE4LDE1ICsyNTIzLDE1IEBAIGNvdW50X2F1dG9faW5jIChydHgs IHJ0eCwgcnR4LCBydHgsIHJ0eCwgdm9pZCAqYXJnKQogCiBzdGF0aWMgcnR4X2luc24gKgogdHJ5 X2NvbWJpbmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9p bnNuICppMCwKLQkgICAgIGludCAqbmV3X2RpcmVjdF9qdW1wX3AsIHJ0eF9pbnNuICpsYXN0X2Nv bWJpbmVkX2luc24pCisJICAgICBib29sICpuZXdfZGlyZWN0X2p1bXBfcCwgcnR4X2luc24gKmxh c3RfY29tYmluZWRfaW5zbikKIHsKICAgLyogTmV3IHBhdHRlcm5zIGZvciBJMyBhbmQgSTIsIHJl c3BlY3RpdmVseS4gICovCiAgIHJ0eCBuZXdwYXQsIG5ld2kycGF0ID0gMDsKICAgcnR2ZWMgbmV3 cGF0X3ZlY193aXRoX2Nsb2JiZXJzID0gMDsKLSAgaW50IHN1YnN0ZWRfaTIgPSAwLCBzdWJzdGVk X2kxID0gMCwgc3Vic3RlZF9pMCA9IDA7CisgIGJvb2wgc3Vic3RlZF9pMiA9IGZhbHNlLCBzdWJz dGVkX2kxID0gZmFsc2UsIHN1YnN0ZWRfaTAgPSBmYWxzZTsKICAgLyogSW5kaWNhdGVzIG5lZWQg dG8gcHJlc2VydmUgU0VUIGluIEkwLCBJMSBvciBJMiBpbiBJMyBpZiBpdCBpcyBub3QKICAgICAg ZGVhZC4gICovCi0gIGludCBhZGRlZF9zZXRzXzAsIGFkZGVkX3NldHNfMSwgYWRkZWRfc2V0c18y OworICBib29sIGFkZGVkX3NldHNfMCwgYWRkZWRfc2V0c18xLCBhZGRlZF9zZXRzXzI7CiAgIC8q IFRvdGFsIG51bWJlciBvZiBTRVRzIHRvIHB1dCBpbnRvIEkzLiAgKi8KICAgaW50IHRvdGFsX3Nl dHM7CiAgIC8qIE5vbnplcm8gaWYgSTIncyBvciBJMSdzIGJvZHkgbm93IGFwcGVhcnMgaW4gSTMu ICAqLwpAQCAtMjU0NiwxOSArMjU1MSwyMCBAQCB0cnlfY29tYmluZSAocnR4X2luc24gKmkzLCBy dHhfaW5zbiAqaTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkwLAogICAvKiBUaGUgUEFUVEVS TnMgb2YgSTAsIEkxLCBhbmQgSTIsIG9yIGEgY29weSBvZiB0aGVtIGluIGNlcnRhaW4gY2FzZXMu ICAqLwogICBydHggaTBwYXQgPSAwLCBpMXBhdCA9IDAsIGkycGF0ID0gMDsKICAgLyogSW5kaWNh dGVzIGlmIEkyREVTVCBvciBJMURFU1QgaXMgaW4gSTJTUkMgb3IgSTFfU1JDLiAgKi8KLSAgaW50 IGkyZGVzdF9pbl9pMnNyYyA9IDAsIGkxZGVzdF9pbl9pMXNyYyA9IDAsIGkyZGVzdF9pbl9pMXNy YyA9IDA7Ci0gIGludCBpMGRlc3RfaW5faTBzcmMgPSAwLCBpMWRlc3RfaW5faTBzcmMgPSAwLCBp MmRlc3RfaW5faTBzcmMgPSAwOwotICBpbnQgaTJkZXN0X2tpbGxlZCA9IDAsIGkxZGVzdF9raWxs ZWQgPSAwLCBpMGRlc3Rfa2lsbGVkID0gMDsKLSAgaW50IGkxX2ZlZWRzX2kyX24gPSAwLCBpMF9m ZWVkc19pMl9uID0gMCwgaTBfZmVlZHNfaTFfbiA9IDA7CisgIGJvb2wgaTJkZXN0X2luX2kyc3Jj ID0gZmFsc2UsIGkxZGVzdF9pbl9pMXNyYyA9IGZhbHNlOworICBib29sIGkyZGVzdF9pbl9pMXNy YyA9IGZhbHNlLCBpMGRlc3RfaW5faTBzcmMgPSBmYWxzZTsKKyAgYm9vbCBpMWRlc3RfaW5faTBz cmMgPSBmYWxzZSwgaTJkZXN0X2luX2kwc3JjID0gZmFsc2U7OworICBib29sIGkyZGVzdF9raWxs ZWQgPSBmYWxzZSwgaTFkZXN0X2tpbGxlZCA9IGZhbHNlLCBpMGRlc3Rfa2lsbGVkID0gZmFsc2U7 CisgIGJvb2wgaTFfZmVlZHNfaTJfbiA9IGZhbHNlLCBpMF9mZWVkc19pMl9uID0gZmFsc2UsIGkw X2ZlZWRzX2kxX24gPSBmYWxzZTsKICAgLyogTm90ZXMgdGhhdCBtdXN0IGJlIGFkZGVkIHRvIFJF R19OT1RFUyBpbiBJMyBhbmQgSTIuICAqLwogICBydHggbmV3X2kzX25vdGVzLCBuZXdfaTJfbm90 ZXM7CiAgIC8qIE5vdGVzIHRoYXQgd2Ugc3Vic3RpdHV0ZWQgSTMgaW50byBJMiBpbnN0ZWFkIG9m IHRoZSBub3JtYWwgY2FzZS4gICovCi0gIGludCBpM19zdWJzdF9pbnRvX2kyID0gMDsKKyAgYm9v bCBpM19zdWJzdF9pbnRvX2kyID0gZmFsc2U7CiAgIC8qIE5vdGVzIHRoYXQgSTEsIEkyIG9yIEkz IGlzIGEgTVVMVCBvcGVyYXRpb24uICAqLwotICBpbnQgaGF2ZV9tdWx0ID0gMDsKLSAgaW50IHN3 YXBfaTJpMyA9IDA7Ci0gIGludCBzcGxpdF9pMmkzID0gMDsKLSAgaW50IGNoYW5nZWRfaTNfZGVz dCA9IDA7CisgIGJvb2wgaGF2ZV9tdWx0ID0gZmFsc2U7CisgIGJvb2wgc3dhcF9pMmkzID0gZmFs c2U7CisgIGJvb2wgc3BsaXRfaTJpMyA9IGZhbHNlOworICBib29sIGNoYW5nZWRfaTNfZGVzdCA9 IGZhbHNlOwogICBib29sIGkyX3dhc19tb3ZlID0gZmFsc2UsIGkzX3dhc19tb3ZlID0gZmFsc2U7 CiAgIGludCBuX2F1dG9faW5jID0gMDsKIApAQCAtMjc2MSw3ICsyNzY3LDcgQEAgdHJ5X2NvbWJp bmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICpp MCwKIAkgICAgICBzdWJzdF9pbnNuID0gaTM7CiAJICAgICAgc3Vic3RfbG93X2x1aWQgPSBERl9J TlNOX0xVSUQgKGkyKTsKIAotCSAgICAgIGFkZGVkX3NldHNfMiA9IGFkZGVkX3NldHNfMSA9IGFk ZGVkX3NldHNfMCA9IDA7CisJICAgICAgYWRkZWRfc2V0c18yID0gYWRkZWRfc2V0c18xID0gYWRk ZWRfc2V0c18wID0gZmFsc2U7CiAJICAgICAgaTJzcmMgPSBTRVRfU1JDIChYVkVDRVhQIChwMiwg MCwgaSkpOwogCSAgICAgIGkyZGVzdCA9IFNFVF9ERVNUIChYVkVDRVhQIChwMiwgMCwgaSkpOwog CSAgICAgIGkyZGVzdF9raWxsZWQgPSBkZWFkX29yX3NldF9wIChpMiwgaTJkZXN0KTsKQEAgLTI3 NzEsNyArMjc3Nyw3IEBAIHRyeV9jb21iaW5lIChydHhfaW5zbiAqaTMsIHJ0eF9pbnNuICppMiwg cnR4X2luc24gKmkxLCBydHhfaW5zbiAqaTAsCiAJCSB0aGUgcGF0dGVybi4gIEV2ZXJ5dGhpbmcg d2FzIHNldCB1cCBhYm92ZS4gICovCiAJICAgICAgU1VCU1QgKFNFVF9ERVNUIChYVkVDRVhQIChw MiwgMCwgaSkpLCBTRVRfREVTVCAoUEFUVEVSTiAoaTMpKSk7CiAJICAgICAgbmV3cGF0ID0gcDI7 Ci0JICAgICAgaTNfc3Vic3RfaW50b19pMiA9IDE7CisJICAgICAgaTNfc3Vic3RfaW50b19pMiA9 IHRydWU7CiAJICAgICAgZ290byB2YWxpZGF0ZV9yZXBsYWNlbWVudDsKIAkgICAgfQogICAgIH0K QEAgLTI4NDMsNyArMjg0OSw3IEBAIHRyeV9jb21iaW5lIChydHhfaW5zbiAqaTMsIHJ0eF9pbnNu ICppMiwgcnR4X2luc24gKmkxLCBydHhfaW5zbiAqaTAsCiAJICBjb21iaW5lX21lcmdlcysrOwog CSAgc3Vic3RfaW5zbiA9IGkzOwogCSAgc3Vic3RfbG93X2x1aWQgPSBERl9JTlNOX0xVSUQgKGky KTsKLQkgIGFkZGVkX3NldHNfMiA9IGFkZGVkX3NldHNfMSA9IGFkZGVkX3NldHNfMCA9IDA7CisJ ICBhZGRlZF9zZXRzXzIgPSBhZGRlZF9zZXRzXzEgPSBhZGRlZF9zZXRzXzAgPSBmYWxzZTsKIAkg IGkyZGVzdCA9IHRlbXBfZGVzdDsKIAkgIGkyZGVzdF9raWxsZWQgPSBkZWFkX29yX3NldF9wIChp MiwgaTJkZXN0KTsKIApAQCAtMjg1Niw3ICsyODYyLDcgQEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNu ICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICppMCwKIAkgIG5ld3Bh dCA9IFBBVFRFUk4gKGkyKTsKIAogICAgICAgICAgIC8qIFRoZSBkZXN0IG9mIEkzIGhhcyBiZWVu IHJlcGxhY2VkIHdpdGggdGhlIGRlc3Qgb2YgSTIuICAqLwotICAgICAgICAgIGNoYW5nZWRfaTNf ZGVzdCA9IDE7CisJICBjaGFuZ2VkX2kzX2Rlc3QgPSB0cnVlOwogCSAgZ290byB2YWxpZGF0ZV9y ZXBsYWNlbWVudDsKIAl9CiAgICAgfQpAQCAtMzAyMiw3ICszMDI4LDcgQEAgdHJ5X2NvbWJpbmUg KHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICppMCwK ICAgICAgIHx8IChpMCAhPSAwICYmIEdFVF9DT0RFIChpMHNyYykgPT0gTVVMVCkKICAgICAgIHx8 IChHRVRfQ09ERSAoUEFUVEVSTiAoaTMpKSA9PSBTRVQKIAkgICYmIEdFVF9DT0RFIChTRVRfU1JD IChQQVRURVJOIChpMykpKSA9PSBNVUxUKSkKLSAgICBoYXZlX211bHQgPSAxOworICAgIGhhdmVf bXVsdCA9IHRydWU7CiAKICAgLyogSWYgSTMgaGFzIGFuIGluYywgdGhlbiBnaXZlIHVwIGlmIEkx IG9yIEkyIHVzZXMgdGhlIHJlZyB0aGF0IGlzIGluYydkLgogICAgICBXZSB1c2VkIHRvIGRvIHRo aXMgRVhDRVBUIGluIG9uZSBjYXNlOiBJMyBoYXMgYSBwb3N0LWluYyBpbiBhbgpAQCAtMzA2OSw3 ICszMDc1LDcgQEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhf aW5zbiAqaTEsIHJ0eF9pbnNuICppMCwKICAgICBhZGRlZF9zZXRzXzEgPSAhKGRlYWRfb3Jfc2V0 X3AgKGkzLCBpMWRlc3QpCiAJCSAgICAgfHwgKGkxX2ZlZWRzX2kyX24gJiYgZGVhZF9vcl9zZXRf cCAoaTIsIGkxZGVzdCkpKTsKICAgZWxzZQotICAgIGFkZGVkX3NldHNfMSA9IDA7CisgICAgYWRk ZWRfc2V0c18xID0gZmFsc2U7CiAKICAgaWYgKGkwKQogICAgIGFkZGVkX3NldHNfMCA9ICAhKGRl YWRfb3Jfc2V0X3AgKGkzLCBpMGRlc3QpCkBAIC0zMDc3LDcgKzMwODMsNyBAQCB0cnlfY29tYmlu ZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAqaTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkw LAogCQkgICAgICB8fCAoKGkwX2ZlZWRzX2kyX24gfHwgKGkwX2ZlZWRzX2kxX24gJiYgaTFfZmVl ZHNfaTJfbikpCiAJCQkgICYmIGRlYWRfb3Jfc2V0X3AgKGkyLCBpMGRlc3QpKSk7CiAgIGVsc2UK LSAgICBhZGRlZF9zZXRzXzAgPSAwOworICAgIGFkZGVkX3NldHNfMCA9IGZhbHNlOwogCiAgIC8q IFdlIGFyZSBhYm91dCB0byBjb3B5IGluc25zIGZvciB0aGUgY2FzZSB3aGVyZSB0aGV5IG5lZWQg dG8gYmUga2VwdAogICAgICBhcm91bmQuICBDaGVjayB0aGF0IHRoZXkgY2FuIGJlIGNvcGllZCBp biB0aGUgbWVyZ2VkIGluc3RydWN0aW9uLiAgKi8KQEAgLTMyODIsMTEgKzMyODgsMTEgQEAgdHJ5 X2NvbWJpbmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9p bnNuICppMCwKIAkgIGlmIChpMSkKIAkgICAgewogCSAgICAgIHN1YnN0X2xvd19sdWlkID0gREZf SU5TTl9MVUlEIChpMSk7Ci0JICAgICAgaTFzcmMgPSBzdWJzdCAoaTFzcmMsIHBjX3J0eCwgcGNf cnR4LCAwLCAwLCAwKTsKKwkgICAgICBpMXNyYyA9IHN1YnN0IChpMXNyYywgcGNfcnR4LCBwY19y dHgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCSAgICB9CiAKIAkgIHN1YnN0X2xvd19sdWlkID0g REZfSU5TTl9MVUlEIChpMik7Ci0JICBpMnNyYyA9IHN1YnN0IChpMnNyYywgcGNfcnR4LCBwY19y dHgsIDAsIDAsIDApOworCSAgaTJzcmMgPSBzdWJzdCAoaTJzcmMsIHBjX3J0eCwgcGNfcnR4LCBm YWxzZSwgZmFsc2UsIGZhbHNlKTsKIAl9CiAKICAgICAgIG5fb2NjdXJyZW5jZXMgPSAwOwkJLyog YHN1YnN0JyBjb3VudHMgaGVyZSAqLwpAQCAtMzI5NywxMSArMzMwMywxMSBAQCB0cnlfY29tYmlu ZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAqaTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkw LAogCSBzZWxmLXJlZmVyZW50aWFsIFJUTCB3aGVuIHdlIHdpbGwgYmUgc3Vic3RpdHV0aW5nIEkx U1JDIGZvciBJMURFU1QKIAkgbGF0ZXIuICBMaWtld2lzZSBpZiBJMCBmZWVkcyBpbnRvIEkyLCBl aXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseQogCSB0aHJvdWdoIEkxLCBhbmQgSTBERVNUIGlz IGluIEkwU1JDLiAgKi8KLSAgICAgIG5ld3BhdCA9IHN1YnN0IChQQVRURVJOIChpMyksIGkyZGVz dCwgaTJzcmMsIDAsIDAsCisgICAgICBuZXdwYXQgPSBzdWJzdCAoUEFUVEVSTiAoaTMpLCBpMmRl c3QsIGkyc3JjLCBmYWxzZSwgZmFsc2UsCiAJCSAgICAgIChpMV9mZWVkc19pMl9uICYmIGkxZGVz dF9pbl9pMXNyYykKIAkJICAgICAgfHwgKChpMF9mZWVkc19pMl9uIHx8IChpMF9mZWVkc19pMV9u ICYmIGkxX2ZlZWRzX2kyX24pKQogCQkJICAmJiBpMGRlc3RfaW5faTBzcmMpKTsKLSAgICAgIHN1 YnN0ZWRfaTIgPSAxOworICAgICAgc3Vic3RlZF9pMiA9IHRydWU7CiAKICAgICAgIC8qIFJlY29y ZCB3aGV0aGVyIEkyJ3MgYm9keSBub3cgYXBwZWFycyB3aXRoaW4gSTMncyBib2R5LiAgKi8KICAg ICAgIGkyX2lzX3VzZWQgPSBuX29jY3VycmVuY2VzOwpAQCAtMzMxNiw3ICszMzIyLDcgQEAgdHJ5 X2NvbWJpbmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9p bnNuICppMCwKIAkgYWJvdmUgKHNlZSBkZXRhaWxlZCBjb21tZW50cyB0aGVyZSkgdGhhdCBlbnN1 cmVzIEkxREVTVCBpc24ndAogCSBtZW50aW9uZWQgaW4gYW55IFNFVHMgaW4gTkVXUEFUIHRoYXQg YXJlIGZpZWxkIGFzc2lnbm1lbnRzLiAgKi8KICAgICAgIGlmICghY29tYmluYWJsZV9pM3BhdCAo TlVMTCwgJm5ld3BhdCwgaTFkZXN0LCBOVUxMX1JUWCwgTlVMTF9SVFgsCi0JCQkgICAgIDAsIDAs IDApKQorCQkJICAgICBmYWxzZSwgZmFsc2UsIDApKQogCXsKIAkgIHVuZG9fYWxsICgpOwogCSAg cmV0dXJuIDA7CkBAIC0zMzM0LDkgKzMzNDAsOSBAQCB0cnlfY29tYmluZSAocnR4X2luc24gKmkz LCBydHhfaW5zbiAqaTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkwLAogCSBjb3B5IG9mIEkx U1JDIGVhY2ggdGltZSB3ZSBzdWJzdGl0dXRlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBjcmVhdGlu ZwogCSBzZWxmLXJlZmVyZW50aWFsIFJUTCB3aGVuIHdlIHdpbGwgYmUgc3Vic3RpdHV0aW5nIEkw U1JDIGZvciBJMERFU1QKIAkgbGF0ZXIuICAqLwotICAgICAgbmV3cGF0ID0gc3Vic3QgKG5ld3Bh dCwgaTFkZXN0LCBpMXNyYywgMCwgMCwKKyAgICAgIG5ld3BhdCA9IHN1YnN0IChuZXdwYXQsIGkx ZGVzdCwgaTFzcmMsIGZhbHNlLCBmYWxzZSwKIAkJICAgICAgaTBfZmVlZHNfaTFfbiAmJiBpMGRl c3RfaW5faTBzcmMpOwotICAgICAgc3Vic3RlZF9pMSA9IDE7CisgICAgICBzdWJzdGVkX2kxID0g dHJ1ZTsKIAogICAgICAgLyogUmVjb3JkIHdoZXRoZXIgSTEncyBib2R5IG5vdyBhcHBlYXJzIHdp dGhpbiBJMydzIGJvZHkuICAqLwogICAgICAgaTFfaXNfdXNlZCA9IG5fb2NjdXJyZW5jZXM7CkBA IC0zMzQ3LDcgKzMzNTMsNyBAQCB0cnlfY29tYmluZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAq aTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkwLAogICBpZiAoaTAgJiYgR0VUX0NPREUgKG5l d3BhdCkgIT0gQ0xPQkJFUikKICAgICB7CiAgICAgICBpZiAoIWNvbWJpbmFibGVfaTNwYXQgKE5V TEwsICZuZXdwYXQsIGkwZGVzdCwgTlVMTF9SVFgsIE5VTExfUlRYLAotCQkJICAgICAwLCAwLCAw KSkKKwkJCSAgICAgZmFsc2UsIGZhbHNlLCAwKSkKIAl7CiAJICB1bmRvX2FsbCAoKTsKIAkgIHJl dHVybiAwOwpAQCAtMzM2NCw4ICszMzcwLDggQEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNuICppMywg cnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICppMCwKIAogICAgICAgbl9vY2N1 cnJlbmNlcyA9IDA7CiAgICAgICBzdWJzdF9sb3dfbHVpZCA9IERGX0lOU05fTFVJRCAoaTApOwot ICAgICAgbmV3cGF0ID0gc3Vic3QgKG5ld3BhdCwgaTBkZXN0LCBpMHNyYywgMCwgMCwgMCk7Ci0g ICAgICBzdWJzdGVkX2kwID0gMTsKKyAgICAgIG5ld3BhdCA9IHN1YnN0IChuZXdwYXQsIGkwZGVz dCwgaTBzcmMsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgICAgc3Vic3RlZF9pMCA9IHRydWU7 CiAgICAgfQogCiAgIGlmIChuX2F1dG9faW5jKQpAQCAtMzM4NywxMyArMzM5MywxMSBAQCB0cnlf Y29tYmluZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAqaTIsIHJ0eF9pbnNuICppMSwgcnR4X2lu c24gKmkwLAogICBpZiAoKEZJTkRfUkVHX0lOQ19OT1RFIChpMiwgTlVMTF9SVFgpICE9IDAKICAg ICAgICAmJiBpMl9pc191c2VkICsgYWRkZWRfc2V0c18yID4gMSkKICAgICAgIHx8IChpMSAhPSAw ICYmIEZJTkRfUkVHX0lOQ19OT1RFIChpMSwgTlVMTF9SVFgpICE9IDAKLQkgICYmIChpMV9pc191 c2VkICsgYWRkZWRfc2V0c18xICsgKGFkZGVkX3NldHNfMiAmJiBpMV9mZWVkc19pMl9uKQotCSAg ICAgID4gMSkpCisJICAmJiAoaTFfaXNfdXNlZCArIGFkZGVkX3NldHNfMSArIChhZGRlZF9zZXRz XzIgJiYgaTFfZmVlZHNfaTJfbikgPiAxKSkKICAgICAgIHx8IChpMCAhPSAwICYmIEZJTkRfUkVH X0lOQ19OT1RFIChpMCwgTlVMTF9SVFgpICE9IDAKIAkgICYmIChuX29jY3VycmVuY2VzICsgYWRk ZWRfc2V0c18wCiAJICAgICAgKyAoYWRkZWRfc2V0c18xICYmIGkwX2ZlZWRzX2kxX24pCi0JICAg ICAgKyAoYWRkZWRfc2V0c18yICYmIGkwX2ZlZWRzX2kyX24pCi0JICAgICAgPiAxKSkKKwkgICAg ICArIChhZGRlZF9zZXRzXzIgJiYgaTBfZmVlZHNfaTJfbikgPiAxKSkKICAgICAgIC8qIEZhaWwg aWYgd2UgdHJpZWQgdG8gbWFrZSBhIG5ldyByZWdpc3Rlci4gICovCiAgICAgICB8fCBtYXhfcmVn X251bSAoKSAhPSBtYXhyZWcKICAgICAgIC8qIEZhaWwgaWYgd2UgY291bGRuJ3QgZG8gc29tZXRo aW5nIGFuZCBoYXZlIGEgQ0xPQkJFUi4gICovCkBAIC0zNDQwLDcgKzM0NDQsOCBAQCB0cnlfY29t YmluZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAqaTIsIHJ0eF9pbnNuICppMSwgcnR4X2luc24g KmkwLAogCXsKIAkgIHJ0eCB0ID0gaTFwYXQ7CiAJICBpZiAoaTBfZmVlZHNfaTFfbikKLQkgICAg dCA9IHN1YnN0ICh0LCBpMGRlc3QsIGkwc3JjX2NvcHkgPyBpMHNyY19jb3B5IDogaTBzcmMsIDAs IDAsIDApOworCSAgICB0ID0gc3Vic3QgKHQsIGkwZGVzdCwgaTBzcmNfY29weSA/IGkwc3JjX2Nv cHkgOiBpMHNyYywKKwkJICAgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAJICBYVkVDRVhQ IChuZXdwYXQsIDAsIC0tdG90YWxfc2V0cykgPSB0OwogCX0KQEAgLTM0NDgsMTAgKzM0NTMsMTEg QEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNuICppMywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEs IHJ0eF9pbnNuICppMCwKIAl7CiAJICBydHggdCA9IGkycGF0OwogCSAgaWYgKGkxX2ZlZWRzX2ky X24pCi0JICAgIHQgPSBzdWJzdCAodCwgaTFkZXN0LCBpMXNyY19jb3B5ID8gaTFzcmNfY29weSA6 IGkxc3JjLCAwLCAwLAorCSAgICB0ID0gc3Vic3QgKHQsIGkxZGVzdCwgaTFzcmNfY29weSA/IGkx c3JjX2NvcHkgOiBpMXNyYywgZmFsc2UsIGZhbHNlLAogCQkgICAgICAgaTBfZmVlZHNfaTFfbiAm JiBpMGRlc3RfaW5faTBzcmMpOwogCSAgaWYgKChpMF9mZWVkc19pMV9uICYmIGkxX2ZlZWRzX2ky X24pIHx8IGkwX2ZlZWRzX2kyX24pCi0JICAgIHQgPSBzdWJzdCAodCwgaTBkZXN0LCBpMHNyY19j b3B5MiA/IGkwc3JjX2NvcHkyIDogaTBzcmMsIDAsIDAsIDApOworCSAgICB0ID0gc3Vic3QgKHQs IGkwZGVzdCwgaTBzcmNfY29weTIgPyBpMHNyY19jb3B5MiA6IGkwc3JjLAorCQkgICAgICAgZmFs c2UsIGZhbHNlLCBmYWxzZSk7CiAKIAkgIFhWRUNFWFAgKG5ld3BhdCwgMCwgLS10b3RhbF9zZXRz KSA9IHQ7CiAJfQpAQCAtMzUzMSw3ICszNTM3LDcgQEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNuICpp MywgcnR4X2luc24gKmkyLCBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICppMCwKIAkgICAgICBpbnNu X2NvZGVfbnVtYmVyID0gcmVjb2dfZm9yX2NvbWJpbmUgKCZuZXdwYXQsIGkzLCAmbmV3X2kzX25v dGVzKTsKIAogCSAgICAgIGlmIChpbnNuX2NvZGVfbnVtYmVyID49IDApCi0JCWNoYW5nZWRfaTNf ZGVzdCA9IDE7CisJCWNoYW5nZWRfaTNfZGVzdCA9IHRydWU7CiAJICAgIH0KIAl9CiAKQEAgLTQw NzAsNyArNDA3Niw3IEBAIHRyeV9jb21iaW5lIChydHhfaW5zbiAqaTMsIHJ0eF9pbnNuICppMiwg cnR4X2luc24gKmkxLCBydHhfaW5zbiAqaTAsCiAJICAgIH0KIAogCSAgaWYgKGluc25fY29kZV9u dW1iZXIgPj0gMCkKLQkgICAgc3BsaXRfaTJpMyA9IDE7CisJICAgIHNwbGl0X2kyaTMgPSB0cnVl OwogCX0KICAgICB9CiAKQEAgLTQ4NDUsNyArNDg1MSw3IEBAIGZpbmRfc3BsaXRfcG9pbnQgKHJ0 eCAqbG9jLCBydHhfaW5zbiAqaW5zbiwgYm9vbCBzZXRfc3JjKQogICBydHggKnNwbGl0OwogICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIGxlbiA9IDA7CiAgIEhPU1RfV0lERV9JTlQgcG9zID0gMDsK LSAgaW50IHVuc2lnbmVkcCA9IDA7CisgIGJvb2wgdW5zaWduZWRwID0gZmFsc2U7CiAgIHJ0eCBp bm5lciA9IE5VTExfUlRYOwogICBzY2FsYXJfaW50X21vZGUgbW9kZSwgaW5uZXJfbW9kZTsKIApA QCAtNTA3NSw3ICs1MDgxLDggQEAgZmluZF9zcGxpdF9wb2ludCAocnR4ICpsb2MsIHJ0eF9pbnNu ICppbnNuLCBib29sIHNldF9zcmMpCiAJICAgIHsKIAkgICAgICBydHggZXh0cmFjdGlvbiA9IG1h a2VfZXh0cmFjdGlvbiAoR0VUX01PREUgKFNFVF9ERVNUICh4KSksCiAJCQkJCQlYRVhQIChTRVRf U1JDICh4KSwgMCksCi0JCQkJCQlwb3MsIE5VTExfUlRYLCAxLCAxLCAwLCAwKTsKKwkJCQkJCXBv cywgTlVMTF9SVFgsIDEsCisJCQkJCQl0cnVlLCBmYWxzZSwgZmFsc2UpOwogCSAgICAgIGlmIChl eHRyYWN0aW9uICE9IDApCiAJCXsKIAkJICBTVUJTVCAoU0VUX1NSQyAoeCksIGV4dHJhY3Rpb24p OwpAQCAtNTExOSw3ICs1MTI2LDcgQEAgZmluZF9zcGxpdF9wb2ludCAocnR4ICpsb2MsIHJ0eF9p bnNuICppbnNuLCBib29sIHNldF9zcmMpCiAKIAkgIHBvcyA9IDA7CiAJICBsZW4gPSBHRVRfTU9E RV9QUkVDSVNJT04gKGlubmVyX21vZGUpOwotCSAgdW5zaWduZWRwID0gMDsKKwkgIHVuc2lnbmVk cCA9IGZhbHNlOwogCSAgYnJlYWs7CiAKIAljYXNlIFNJR05fRVhUUkFDVDoKQEAgLTUzMTcsMTUg KzUzMjQsMTUgQEAgZmluZF9zcGxpdF9wb2ludCAocnR4ICpsb2MsIHJ0eF9pbnNuICppbnNuLCBi b29sIHNldF9zcmMpCiAKICAgIGBuX29jY3VycmVuY2VzJyBpcyBpbmNyZW1lbnRlZCBlYWNoIHRp bWUgRlJPTSBpcyByZXBsYWNlZC4KIAotICAgSU5fREVTVCBpcyBub256ZXJvIGlmIHdlIGFyZSBw cm9jZXNzaW5nIHRoZSBTRVRfREVTVCBvZiBhIFNFVC4KKyAgIElOX0RFU1QgaXMgdHJ1ZSBpZiB3 ZSBhcmUgcHJvY2Vzc2luZyB0aGUgU0VUX0RFU1Qgb2YgYSBTRVQuCiAKLSAgIElOX0NPTkQgaXMg bm9uemVybyBpZiB3ZSBhcmUgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIGNvbmRpdGlvbi4KKyAgIElO X0NPTkQgaXMgdHJ1ZSBpZiB3ZSBhcmUgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIGNvbmRpdGlvbi4K IAotICAgVU5JUVVFX0NPUFkgaXMgbm9uemVybyBpZiBlYWNoIHN1YnN0aXR1dGlvbiBtdXN0IGJl IHVuaXF1ZS4gIFdlIGRvIHRoaXMKKyAgIFVOSVFVRV9DT1BZIGlzIHRydWUgaWYgZWFjaCBzdWJz dGl0dXRpb24gbXVzdCBiZSB1bmlxdWUuICBXZSBkbyB0aGlzCiAgICBieSBjb3B5aW5nIGlmIGBu X29jY3VycmVuY2VzJyBpcyBub256ZXJvLiAgKi8KIAogc3RhdGljIHJ0eAotc3Vic3QgKHJ0eCB4 LCBydHggZnJvbSwgcnR4IHRvLCBpbnQgaW5fZGVzdCwgaW50IGluX2NvbmQsIGludCB1bmlxdWVf Y29weSkKK3N1YnN0IChydHggeCwgcnR4IGZyb20sIHJ0eCB0bywgYm9vbCBpbl9kZXN0LCBib29s IGluX2NvbmQsIGJvb2wgdW5pcXVlX2NvcHkpCiB7CiAgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdF VF9DT0RFICh4KTsKICAgbWFjaGluZV9tb2RlIG9wMF9tb2RlID0gVk9JRG1vZGU7CkBAIC01Mzkx LDcgKzUzOTgsNyBAQCBzdWJzdCAocnR4IHgsIHJ0eCBmcm9tLCBydHggdG8sIGludCBpbl9kZXN0 LCBpbnQgaW5fY29uZCwgaW50IHVuaXF1ZV9jb3B5KQogICAgICAgJiYgR0VUX0NPREUgKFhWRUNF WFAgKHgsIDAsIDApKSA9PSBTRVQKICAgICAgICYmIEdFVF9DT0RFIChTRVRfU1JDIChYVkVDRVhQ ICh4LCAwLCAwKSkpID09IEFTTV9PUEVSQU5EUykKICAgICB7Ci0gICAgICBuZXdfcnR4ID0gc3Vi c3QgKFhWRUNFWFAgKHgsIDAsIDApLCBmcm9tLCB0bywgMCwgMCwgdW5pcXVlX2NvcHkpOworICAg ICAgbmV3X3J0eCA9IHN1YnN0IChYVkVDRVhQICh4LCAwLCAwKSwgZnJvbSwgdG8sIGZhbHNlLCBm YWxzZSwgdW5pcXVlX2NvcHkpOwogCiAgICAgICAvKiBJZiB0aGlzIHN1YnN0aXR1dGlvbiBmYWls ZWQsIHRoaXMgd2hvbGUgdGhpbmcgZmFpbHMuICAqLwogICAgICAgaWYgKEdFVF9DT0RFIChuZXdf cnR4KSA9PSBDTE9CQkVSCkBAIC01NDA2LDcgKzU0MTMsNyBAQCBzdWJzdCAocnR4IHgsIHJ0eCBm cm9tLCBydHggdG8sIGludCBpbl9kZXN0LCBpbnQgaW5fY29uZCwgaW50IHVuaXF1ZV9jb3B5KQog CiAJICBpZiAoIVJFR19QIChkZXN0KSAmJiBHRVRfQ09ERSAoZGVzdCkgIT0gUEMpCiAJICAgIHsK LQkgICAgICBuZXdfcnR4ID0gc3Vic3QgKGRlc3QsIGZyb20sIHRvLCAwLCAwLCB1bmlxdWVfY29w eSk7CisJICAgICAgbmV3X3J0eCA9IHN1YnN0IChkZXN0LCBmcm9tLCB0bywgZmFsc2UsIGZhbHNl LCB1bmlxdWVfY29weSk7CiAKIAkgICAgICAvKiBJZiB0aGlzIHN1YnN0aXR1dGlvbiBmYWlsZWQs IHRoaXMgd2hvbGUgdGhpbmcgZmFpbHMuICAqLwogCSAgICAgIGlmIChHRVRfQ09ERSAobmV3X3J0 eCkgPT0gQ0xPQkJFUgpAQCAtNTQ2NCw4ICs1NDcxLDggQEAgc3Vic3QgKHJ0eCB4LCBydHggZnJv bSwgcnR4IHRvLCBpbnQgaW5fZGVzdCwgaW50IGluX2NvbmQsIGludCB1bmlxdWVfY29weSkKIAkJ ICAgIH0KIAkJICBlbHNlCiAJCSAgICB7Ci0JCSAgICAgIG5ld19ydHggPSBzdWJzdCAoWFZFQ0VY UCAoeCwgaSwgaiksIGZyb20sIHRvLCAwLCAwLAotCQkJCSAgICAgICB1bmlxdWVfY29weSk7CisJ CSAgICAgIG5ld19ydHggPSBzdWJzdCAoWFZFQ0VYUCAoeCwgaSwgaiksIGZyb20sIHRvLAorCQkJ CSAgICAgICBmYWxzZSwgZmFsc2UsIHVuaXF1ZV9jb3B5KTsKIAogCQkgICAgICAvKiBJZiB0aGlz IHN1YnN0aXR1dGlvbiBmYWlsZWQsIHRoaXMgd2hvbGUgdGhpbmcKIAkJCSBmYWlscy4gICovCkBA IC01NjU5LDEzICs1NjY2LDEyIEBAIG1heWJlX3N3YXBfY29tbXV0YXRpdmVfb3BlcmFuZHMgKHJ0 eCB4KQogICAgb3V0ZXIgbGV2ZWw7IGNhbGwgYHN1YnN0JyB0byBzaW1wbGlmeSByZWN1cnNpdmVs eS4gIFJldHVybiB0aGUgbmV3CiAgICBleHByZXNzaW9uLgogCi0gICBPUDBfTU9ERSBpcyB0aGUg b3JpZ2luYWwgbW9kZSBvZiBYRVhQICh4LCAwKS4gIElOX0RFU1QgaXMgbm9uemVybwotICAgaWYg d2UgYXJlIGluc2lkZSBhIFNFVF9ERVNULiAgSU5fQ09ORCBpcyBub256ZXJvIGlmIHdlIGFyZSBh dCB0aGUgdG9wIGxldmVsCisgICBPUDBfTU9ERSBpcyB0aGUgb3JpZ2luYWwgbW9kZSBvZiBYRVhQ ICh4LCAwKS4gIElOX0RFU1QgaXMgdHJ1ZQorICAgaWYgd2UgYXJlIGluc2lkZSBhIFNFVF9ERVNU LiAgSU5fQ09ORCBpcyB0cnVlIGlmIHdlIGFyZSBhdCB0aGUgdG9wIGxldmVsCiAgICBvZiBhIGNv bmRpdGlvbi4gICovCiAKIHN0YXRpYyBydHgKLWNvbWJpbmVfc2ltcGxpZnlfcnR4IChydHggeCwg bWFjaGluZV9tb2RlIG9wMF9tb2RlLCBpbnQgaW5fZGVzdCwKLQkJICAgICAgaW50IGluX2NvbmQp Citjb21iaW5lX3NpbXBsaWZ5X3J0eCAocnR4IHgsIG1hY2hpbmVfbW9kZSBvcDBfbW9kZSwgYm9v bCBpbl9kZXN0LCBib29sIGluX2NvbmQpCiB7CiAgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9D T0RFICh4KTsKICAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoeCk7CkBAIC01NzY0LDgg KzU3NzAsMTAgQEAgY29tYmluZV9zaW1wbGlmeV9ydHggKHJ0eCB4LCBtYWNoaW5lX21vZGUgb3Aw X21vZGUsIGludCBpbl9kZXN0LAogCSAgICAgZmFsc2UgYXJtcyB0byBzdG9yZS1mbGFnIHZhbHVl cy4gIEJlIGNhcmVmdWwgdG8gdXNlIGNvcHlfcnR4CiAJICAgICBoZXJlIHNpbmNlIHRydWVfcnR4 IG9yIGZhbHNlX3J0eCBtaWdodCBzaGFyZSBSVEwgd2l0aCB4IGFzIGEKIAkgICAgIHJlc3VsdCBv ZiB0aGUgaWZfdGhlbl9lbHNlX2NvbmQgY2FsbCBhYm92ZS4gICovCi0JICB0cnVlX3J0eCA9IHN1 YnN0IChjb3B5X3J0eCAodHJ1ZV9ydHgpLCBwY19ydHgsIHBjX3J0eCwgMCwgMCwgMCk7Ci0JICBm YWxzZV9ydHggPSBzdWJzdCAoY29weV9ydHggKGZhbHNlX3J0eCksIHBjX3J0eCwgcGNfcnR4LCAw LCAwLCAwKTsKKwkgIHRydWVfcnR4ID0gc3Vic3QgKGNvcHlfcnR4ICh0cnVlX3J0eCksIHBjX3J0 eCwgcGNfcnR4LAorCQkJICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCSAgZmFsc2VfcnR4ID0g c3Vic3QgKGNvcHlfcnR4IChmYWxzZV9ydHgpLCBwY19ydHgsIHBjX3J0eCwKKwkJCSAgICAgZmFs c2UsIGZhbHNlLCBmYWxzZSk7CiAKIAkgIC8qIElmIHRydWVfcnR4IGFuZCBmYWxzZV9ydHggYXJl IG5vdCBnZW5lcmFsX29wZXJhbmRzLCBhbiBpZl90aGVuX2Vsc2UKIAkgICAgIGlzIHVubGlrZWx5 IHRvIGJlIHNpbXBsZXIuICAqLwpAQCAtNTk4MSw3ICs1OTg5LDcgQEAgY29tYmluZV9zaW1wbGlm eV9ydHggKHJ0eCB4LCBtYWNoaW5lX21vZGUgb3AwX21vZGUsIGludCBpbl9kZXN0LAogICAgICAg aWYgKEhXSV9DT01QVVRBQkxFX01PREVfUCAobW9kZSkpCiAJU1VCU1QgKFhFWFAgKHgsIDApLAog CSAgICAgICBmb3JjZV90b19tb2RlIChYRVhQICh4LCAwKSwgR0VUX01PREUgKFhFWFAgKHgsIDAp KSwKLQkJCSAgICAgIEdFVF9NT0RFX01BU0sgKG1vZGUpLCAwKSk7CisJCQkgICAgICBHRVRfTU9E RV9NQVNLIChtb2RlKSwgZmFsc2UpKTsKIAogICAgICAgLyogV2UgY2FuIHRydW5jYXRlIGEgY29u c3RhbnQgdmFsdWUgYW5kIHJldHVybiBpdC4gICovCiAgICAgICB7CkBAIC02MDc2LDcgKzYwODQs NyBAQCBjb21iaW5lX3NpbXBsaWZ5X3J0eCAocnR4IHgsIG1hY2hpbmVfbW9kZSBvcDBfbW9kZSwg aW50IGluX2Rlc3QsCiAJewogCSAgLyogVHJ5IHRvIHNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIGZ1 cnRoZXIuICAqLwogCSAgcnR4IHRvciA9IHNpbXBsaWZ5X2dlbl9iaW5hcnkgKElPUiwgbW9kZSwg WEVYUCAoeCwgMCksIFhFWFAgKHgsIDEpKTsKLQkgIHRlbXAgPSBjb21iaW5lX3NpbXBsaWZ5X3J0 eCAodG9yLCBWT0lEbW9kZSwgaW5fZGVzdCwgMCk7CisJICB0ZW1wID0gY29tYmluZV9zaW1wbGlm eV9ydHggKHRvciwgVk9JRG1vZGUsIGluX2Rlc3QsIGZhbHNlKTsKIAogCSAgLyogSWYgd2UgY291 bGQsIGdyZWF0LiAgSWYgbm90LCBkbyBub3QgZ28gYWhlYWQgd2l0aCB0aGUgSU9SCiAJICAgICBy ZXBsYWNlbWVudCwgc2luY2UgUExVUyBhcHBlYXJzIGluIG1hbnkgc3BlY2lhbCBwdXJwb3NlCkBA IC02MzY3LDkgKzYzNzUsNyBAQCBjb21iaW5lX3NpbXBsaWZ5X3J0eCAocnR4IHgsIG1hY2hpbmVf bW9kZSBvcDBfbW9kZSwgaW50IGluX2Rlc3QsCiAJICAgICAgIGZvcmNlX3RvX21vZGUgKFhFWFAg KHgsIDEpLCBHRVRfTU9ERSAoWEVYUCAoeCwgMSkpLAogCQkJICAgICAgKEhPU1RfV0lERV9JTlRf MVUKIAkJCSAgICAgICA8PCBleGFjdF9sb2cyIChHRVRfTU9ERV9VTklUX0JJVFNJWkUKLQkJCQkJ ICAgICAgKEdFVF9NT0RFICh4KSkpKQotCQkJICAgICAgLSAxLAotCQkJICAgICAgMCkpOworCQkJ CQkgICAgICAoR0VUX01PREUgKHgpKSkpIC0gMSwgZmFsc2UpKTsKICAgICAgIGJyZWFrOwogICAg IGNhc2UgVkVDX1NFTEVDVDoKICAgICAgIHsKQEAgLTY0MDIsNyArNjQwOCw3IEBAIHNpbXBsaWZ5 X2lmX3RoZW5fZWxzZSAocnR4IHgpCiAgIHJ0eCB0cnVlX3J0eCA9IFhFWFAgKHgsIDEpOwogICBy dHggZmFsc2VfcnR4ID0gWEVYUCAoeCwgMik7CiAgIGVudW0gcnR4X2NvZGUgdHJ1ZV9jb2RlID0g R0VUX0NPREUgKGNvbmQpOwotICBpbnQgY29tcGFyaXNvbl9wID0gQ09NUEFSSVNPTl9QIChjb25k KTsKKyAgYm9vbCBjb21wYXJpc29uX3AgPSBDT01QQVJJU09OX1AgKGNvbmQpOwogICBydHggdGVt cDsKICAgaW50IGk7CiAgIGVudW0gcnR4X2NvZGUgZmFsc2VfY29kZTsKQEAgLTY0MzMsMTMgKzY0 MzksMTMgQEAgc2ltcGxpZnlfaWZfdGhlbl9lbHNlIChydHggeCkKICAgICAgIHJ0eCBmcm9tID0g WEVYUCAoY29uZCwgMCk7CiAgICAgICBydHggdHJ1ZV92YWwgPSBYRVhQIChjb25kLCAxKTsKICAg ICAgIHJ0eCBmYWxzZV92YWwgPSB0cnVlX3ZhbDsKLSAgICAgIGludCBzd2FwcGVkID0gMDsKKyAg ICAgIGJvb2wgc3dhcHBlZCA9IGZhbHNlOwogCiAgICAgICAvKiBJZiBGQUxTRV9DT0RFIGlzIEVR LCBzd2FwIHRoZSBjb2RlcyBhbmQgYXJtcy4gICovCiAKICAgICAgIGlmIChmYWxzZV9jb2RlID09 IEVRKQogCXsKLQkgIHN3YXBwZWQgPSAxLCB0cnVlX2NvZGUgPSBFUSwgZmFsc2VfY29kZSA9IE5F OworCSAgc3dhcHBlZCA9IHRydWUsIHRydWVfY29kZSA9IEVRLCBmYWxzZV9jb2RlID0gTkU7CiAJ ICBzdGQ6OnN3YXAgKHRydWVfcnR4LCBmYWxzZV9ydHgpOwogCX0KIApAQCAtNjQ3NCwxMSArNjQ4 MCwxMSBAQCBzaW1wbGlmeV9pZl90aGVuX2Vsc2UgKHJ0eCB4KQogICAgICAgaWYgKHJlZ19tZW50 aW9uZWRfcCAoZnJvbSwgdHJ1ZV9ydHgpKQogCXRydWVfcnR4ID0gc3Vic3QgKGtub3duX2NvbmQg KGNvcHlfcnR4ICh0cnVlX3J0eCksIHRydWVfY29kZSwKIAkJCQkgICAgICBmcm9tLCB0cnVlX3Zh bCksCi0JCQkgIHBjX3J0eCwgcGNfcnR4LCAwLCAwLCAwKTsKKwkJCSAgcGNfcnR4LCBwY19ydHgs IGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogICAgICAgaWYgKHJlZ19tZW50aW9uZWRfcCAoZnJvbSwg ZmFsc2VfcnR4KSkKIAlmYWxzZV9ydHggPSBzdWJzdCAoa25vd25fY29uZCAoY29weV9ydHggKGZh bHNlX3J0eCksIGZhbHNlX2NvZGUsCiAJCQkJICAgICAgIGZyb20sIGZhbHNlX3ZhbCksCi0JCQkg ICBwY19ydHgsIHBjX3J0eCwgMCwgMCwgMCk7CisJCQkgICBwY19ydHgsIHBjX3J0eCwgZmFsc2Us IGZhbHNlLCBmYWxzZSk7CiAKICAgICAgIFNVQlNUIChYRVhQICh4LCAxKSwgc3dhcHBlZCA/IGZh bHNlX3J0eCA6IHRydWVfcnR4KTsKICAgICAgIFNVQlNUIChYRVhQICh4LCAyKSwgc3dhcHBlZCA/ IHRydWVfcnR4IDogZmFsc2VfcnR4KTsKQEAgLTY3MDUsMTEgKzY3MTEsMTEgQEAgc2ltcGxpZnlf aWZfdGhlbl9lbHNlIChydHggeCkKIAkgICAgY20gPSBHRVRfTU9ERSAoYzEpOwogCSAgdGVtcCA9 IHN1YnN0IChzaW1wbGlmeV9nZW5fcmVsYXRpb25hbCAodHJ1ZV9jb2RlLCBjbSwgVk9JRG1vZGUs CiAJCQkJCQkgY29uZF9vcDAsIGNvbmRfb3AxKSwKLQkJCXBjX3J0eCwgcGNfcnR4LCAwLCAwLCAw KTsKKwkJCXBjX3J0eCwgcGNfcnR4LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAkgIHRlbXAgPSBz aW1wbGlmeV9nZW5fYmluYXJ5IChNVUxULCBjbSwgdGVtcCwKIAkJCQkgICAgICBzaW1wbGlmeV9n ZW5fYmluYXJ5IChNVUxULCBjbSwgYzEsCiAJCQkJCQkJICAgY29uc3RfdHJ1ZV9ydHgpKTsKLQkg IHRlbXAgPSBzdWJzdCAodGVtcCwgcGNfcnR4LCBwY19ydHgsIDAsIDAsIDApOworCSAgdGVtcCA9 IHN1YnN0ICh0ZW1wLCBwY19ydHgsIHBjX3J0eCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAJICB0 ZW1wID0gc2ltcGxpZnlfZ2VuX2JpbmFyeSAob3AsIG0sIGdlbl9sb3dwYXJ0IChtLCB6KSwgdGVt cCk7CiAKIAkgIGlmIChleHRlbmRfb3AgIT0gVU5LTk9XTikKQEAgLTY3ODEsNyArNjc4Nyw3IEBA IHNpbXBsaWZ5X3NldCAocnR4IHgpCiAKICAgaWYgKEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBN T0RFX0lOVCAmJiBIV0lfQ09NUFVUQUJMRV9NT0RFX1AgKG1vZGUpKQogICAgIHsKLSAgICAgIHNy YyA9IGZvcmNlX3RvX21vZGUgKHNyYywgbW9kZSwgSE9TVF9XSURFX0lOVF9NMVUsIDApOworICAg ICAgc3JjID0gZm9yY2VfdG9fbW9kZSAoc3JjLCBtb2RlLCBIT1NUX1dJREVfSU5UX00xVSwgZmFs c2UpOwogICAgICAgU1VCU1QgKFNFVF9TUkMgKHgpLCBzcmMpOwogICAgIH0KIApAQCAtNjc5Niw3 ICs2ODAyLDcgQEAgc2ltcGxpZnlfc2V0IChydHggeCkKICAgICAgIGVudW0gcnR4X2NvZGUgb2xk X2NvZGUgPSBHRVRfQ09ERSAoKmNjX3VzZSk7CiAgICAgICBlbnVtIHJ0eF9jb2RlIG5ld19jb2Rl OwogICAgICAgcnR4IG9wMCwgb3AxLCB0bXA7Ci0gICAgICBpbnQgb3RoZXJfY2hhbmdlZCA9IDA7 CisgICAgICBib29sIG90aGVyX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgIHJ0eCBpbm5lcl9jb21w YXJlID0gTlVMTF9SVFg7CiAgICAgICBtYWNoaW5lX21vZGUgY29tcGFyZV9tb2RlID0gR0VUX01P REUgKGRlc3QpOwogCkBAIC02ODgxLDcgKzY4ODcsNyBAQCBzaW1wbGlmeV9zZXQgKHJ0eCB4KQog CiAJICAgICAgU1VCU1QgKFNFVF9ERVNUICh4KSwgbmV3X2Rlc3QpOwogCSAgICAgIFNVQlNUIChY RVhQICgqY2NfdXNlLCAwKSwgbmV3X2Rlc3QpOwotCSAgICAgIG90aGVyX2NoYW5nZWQgPSAxOwor CSAgICAgIG90aGVyX2NoYW5nZWQgPSB0cnVlOwogCiAJICAgICAgZGVzdCA9IG5ld19kZXN0Owog CSAgICB9CkBAIC02ODkyLDEzICs2ODk4LDEzIEBAIHNpbXBsaWZ5X3NldCAocnR4IHgpCiAJIHVu ZG9idWYub3RoZXJfaW5zbi4gICovCiAgICAgICBpZiAobmV3X2NvZGUgIT0gb2xkX2NvZGUpCiAJ ewotCSAgaW50IG90aGVyX2NoYW5nZWRfcHJldmlvdXNseSA9IG90aGVyX2NoYW5nZWQ7CisJICBi b29sIG90aGVyX2NoYW5nZWRfcHJldmlvdXNseSA9IG90aGVyX2NoYW5nZWQ7CiAJICB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UIG1hc2s7CiAJICBydHggb2xkX2NjX3VzZSA9ICpjY191c2U7CiAKIAkg IFNVQlNUICgqY2NfdXNlLCBnZW5fcnR4X2ZtdF9lZSAobmV3X2NvZGUsIEdFVF9NT0RFICgqY2Nf dXNlKSwKIAkJCQkJICBkZXN0LCBjb25zdDBfcnR4KSk7Ci0JICBvdGhlcl9jaGFuZ2VkID0gMTsK KwkgIG90aGVyX2NoYW5nZWQgPSB0cnVlOwogCiAJICAvKiBJZiB0aGUgb25seSBjaGFuZ2Ugd2Ug bWFkZSB3YXMgdG8gY2hhbmdlIGFuIEVRIGludG8gYW4gTkUgb3IKIAkgICAgIHZpY2UgdmVyc2Es IE9QMCBoYXMgb25seSBvbmUgYml0IHRoYXQgbWlnaHQgYmUgbm9uemVybywgYW5kIE9QMQpAQCAt NjkxOCw3ICs2OTI0LDcgQEAgc2ltcGxpZnlfc2V0IChydHggeCkKIAkJICAgJiYgISBjaGVja19h c21fb3BlcmFuZHMgKHBhdCkpKQogCQl7CiAJCSAgKmNjX3VzZSA9IG9sZF9jY191c2U7Ci0JCSAg b3RoZXJfY2hhbmdlZCA9IDA7CisJCSAgb3RoZXJfY2hhbmdlZCA9IGZhbHNlOwogCiAJCSAgb3Aw ID0gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoWE9SLCBHRVRfTU9ERSAob3AwKSwgb3AwLAogCQkJCQkg ICAgIGdlbl9pbnRfbW9kZSAobWFzaywKQEAgLTcxNjAsNyArNzE2Niw3IEBAIHN0YXRpYyBydHgK IGV4cGFuZF9jb21wb3VuZF9vcGVyYXRpb24gKHJ0eCB4KQogewogICB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIHBvcyA9IDAsIGxlbjsKLSAgaW50IHVuc2lnbmVkcCA9IDA7CisgIGJvb2wgdW5zaWdu ZWRwID0gZmFsc2U7CiAgIHVuc2lnbmVkIGludCBtb2Rld2lkdGg7CiAgIHJ0eCB0ZW07CiAgIHNj YWxhcl9pbnRfbW9kZSBpbm5lcl9tb2RlOwpAQCAtNzE2OCw3ICs3MTc0LDcgQEAgZXhwYW5kX2Nv bXBvdW5kX29wZXJhdGlvbiAocnR4IHgpCiAgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQogICAgIHsK ICAgICBjYXNlIFpFUk9fRVhURU5EOgotICAgICAgdW5zaWduZWRwID0gMTsKKyAgICAgIHVuc2ln bmVkcCA9IHRydWU7CiAgICAgICAvKiBGQUxMVEhSVSAqLwogICAgIGNhc2UgU0lHTl9FWFRFTkQ6 CiAgICAgICAvKiBXZSBjYW4ndCBuZWNlc3NhcmlseSB1c2UgYSBjb25zdF9pbnQgZm9yIGEgbXVs dGl3b3JkIG1vZGU7CkBAIC03MjA5LDcgKzcyMTUsNyBAQCBleHBhbmRfY29tcG91bmRfb3BlcmF0 aW9uIChydHggeCkKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBaRVJPX0VYVFJBQ1Q6Ci0gICAg ICB1bnNpZ25lZHAgPSAxOworICAgICAgdW5zaWduZWRwID0gdHJ1ZTsKIAogICAgICAgLyogZmFs bCB0aHJvdWdoICovCiAKQEAgLTc0OTUsMTQgKzc1MDEsMTQgQEAgZXhwYW5kX2ZpZWxkX2Fzc2ln bm1lbnQgKGNvbnN0X3J0eCB4KQogICAgaXQgaXMgYW4gUlRYIHRoYXQgcmVwcmVzZW50cyB0aGUg KHZhcmlhYmxlKSBzdGFydGluZyBwb3NpdGlvbjsgb3RoZXJ3aXNlLAogICAgUE9TIGlzIHRoZSAo Y29uc3RhbnQpIHN0YXJ0aW5nIGJpdCBwb3NpdGlvbi4gIEJvdGggYXJlIGNvdW50ZWQgZnJvbSB0 aGUgTFNCLgogCi0gICBVTlNJR05FRFAgaXMgbm9uemVybyBmb3IgYW4gdW5zaWduZWQgcmVmZXJl bmNlIGFuZCB6ZXJvIGZvciBhIHNpZ25lZCBvbmUuCisgICBVTlNJR05FRFAgaXMgdHJ1ZSBmb3Ig YW4gdW5zaWduZWQgcmVmZXJlbmNlIGFuZCB6ZXJvIGZvciBhIHNpZ25lZCBvbmUuCiAKLSAgIElO X0RFU1QgaXMgbm9uemVybyBpZiB0aGlzIGlzIGEgcmVmZXJlbmNlIGluIHRoZSBkZXN0aW5hdGlv biBvZiBhIFNFVC4KKyAgIElOX0RFU1QgaXMgdHJ1ZSBpZiB0aGlzIGlzIGEgcmVmZXJlbmNlIGlu IHRoZSBkZXN0aW5hdGlvbiBvZiBhIFNFVC4KICAgIFRoaXMgaXMgdXNlZCB3aGVuIGEgWkVST18g b3IgU0lHTl9FWFRSQUNUIGlzbid0IG5lZWRlZC4gIElmIG5vbnplcm8sCiAgICBhIFNUUklDVF9M T1dfUEFSVCB3aWxsIGJlIHVzZWQsIGlmIHplcm8sIFpFUk9fRVhURU5EIG9yIFNJR05fRVhURU5E IHdpbGwKICAgIGJlIHVzZWQuCiAKLSAgIElOX0NPTVBBUkUgaXMgbm9uemVybyBpZiB3ZSBhcmUg aW4gYSBDT01QQVJFLiAgVGhpcyBtZWFucyB0aGF0IGEKKyAgIElOX0NPTVBBUkUgaXMgdHJ1ZSBp ZiB3ZSBhcmUgaW4gYSBDT01QQVJFLiAgVGhpcyBtZWFucyB0aGF0IGEKICAgIFpFUk9fRVhUUkFD VCBzaG91bGQgYmUgYnVpbHQgZXZlbiBmb3IgYml0cyBzdGFydGluZyBhdCBiaXQgMC4KIAogICAg TU9ERSBpcyB0aGUgZGVzaXJlZCBtb2RlIG9mIHRoZSByZXN1bHQgKGlmIElOX0RFU1QgPT0gMCku CkBAIC03NTEyLDggKzc1MTgsOCBAQCBleHBhbmRfZmllbGRfYXNzaWdubWVudCAoY29uc3RfcnR4 IHgpCiAKIHN0YXRpYyBydHgKIG1ha2VfZXh0cmFjdGlvbiAobWFjaGluZV9tb2RlIG1vZGUsIHJ0 eCBpbm5lciwgSE9TVF9XSURFX0lOVCBwb3MsCi0JCSBydHggcG9zX3J0eCwgdW5zaWduZWQgSE9T VF9XSURFX0lOVCBsZW4sIGludCB1bnNpZ25lZHAsCi0JCSBpbnQgaW5fZGVzdCwgaW50IGluX2Nv bXBhcmUpCisJCSBydHggcG9zX3J0eCwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBsZW4sIGJvb2wg dW5zaWduZWRwLAorCQkgYm9vbCBpbl9kZXN0LCBib29sIGluX2NvbXBhcmUpCiB7CiAgIC8qIFRo aXMgbW9kZSBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIHN0b3JhZ2UgYXJlYQogICAgICB0byBm ZXRjaCB0aGUgb3ZlcmFsbCB2YWx1ZSBmcm9tLiAgV2l0aGluIHRoYXQsIHdlCkBAIC03Njc1LDcg Kzc2ODEsNyBAQCBtYWtlX2V4dHJhY3Rpb24gKG1hY2hpbmVfbW9kZSBtb2RlLCBydHggaW5uZXIs IEhPU1RfV0lERV9JTlQgcG9zLAogCW5ld19ydHggPSBmb3JjZV90b19tb2RlIChpbm5lciwgdG1v ZGUsCiAJCQkJIGxlbiA+PSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UCiAJCQkJID8gSE9TVF9XSURF X0lOVF9NMVUKLQkJCQkgOiAoSE9TVF9XSURFX0lOVF8xVSA8PCBsZW4pIC0gMSwgMCk7CisJCQkJ IDogKEhPU1RfV0lERV9JTlRfMVUgPDwgbGVuKSAtIDEsIGZhbHNlKTsKIAogICAgICAgLyogSWYg dGhpcyBleHRyYWN0aW9uIGlzIGdvaW5nIGludG8gdGhlIGRlc3RpbmF0aW9uIG9mIGEgU0VULAog CSBtYWtlIGEgU1RSSUNUX0xPV19QQVJUIHVubGVzcyB3ZSBtYWRlIGEgTUVNLiAgKi8KQEAgLTc4 NjgsOCArNzg3NCw3IEBAIG1ha2VfZXh0cmFjdGlvbiAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBp bm5lciwgSE9TVF9XSURFX0lOVCBwb3MsCiAJCQkgICAgIHx8IGxlbiArIG9yaWdfcG9zID49IEhP U1RfQklUU19QRVJfV0lERV9JTlQKIAkJCSAgICAgPyBIT1NUX1dJREVfSU5UX00xVQogCQkJICAg ICA6ICgoKEhPU1RfV0lERV9JTlRfMVUgPDwgbGVuKSAtIDEpCi0JCQkJPDwgb3JpZ19wb3MpLAot CQkJICAgICAwKTsKKwkJCQk8PCBvcmlnX3BvcyksIGZhbHNlKTsKICAgICB9CiAKICAgLyogQWRq dXN0IG1vZGUgb2YgUE9TX1JUWCwgaWYgbmVlZGVkLiAgSWYgd2Ugd2FudCBhIHdpZGVyIG1vZGUs IHdlCkBAIC04MTAzLDcgKzgxMDgsNyBAQCBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbl9pbnQgKHNj YWxhcl9pbnRfbW9kZSBtb2RlLCBydHggKnhfcHRyLAogCXsKIAkgIG5ld19ydHggPSBtYWtlX2Nv bXBvdW5kX29wZXJhdGlvbiAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCBuZXh0X2NvZGUpOwogCSAg bmV3X3J0eCA9IG1ha2VfZXh0cmFjdGlvbiAobW9kZSwgbmV3X3J0eCwgMCwgWEVYUCAoWEVYUCAo eCwgMCksIDEpLAotCQkJCSAgICAgaSwgMSwgMCwgaW5fY29kZSA9PSBDT01QQVJFKTsKKwkJCQkg ICAgIGksIHRydWUsIGZhbHNlLCBpbl9jb2RlID09IENPTVBBUkUpOwogCX0KIAogICAgICAgLyog U2FtZSBhcyBwcmV2aW91cywgYnV0IGZvciAoc3VicmVnIChsc2hpZnRydCAuLi4pKSBpbiBmaXJz dCBvcC4gICovCkBAIC04MTE4LDcgKzgxMjMsNyBAQCBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbl9p bnQgKHNjYWxhcl9pbnRfbW9kZSBtb2RlLCBydHggKnhfcHRyLAogCSAgbmV3X3J0eCA9IG1ha2Vf Y29tcG91bmRfb3BlcmF0aW9uIChYRVhQIChpbm5lcl94MCwgMCksIG5leHRfY29kZSk7CiAJICBu ZXdfcnR4ID0gbWFrZV9leHRyYWN0aW9uIChpbm5lcl9tb2RlLCBuZXdfcnR4LCAwLAogCQkJCSAg ICAgWEVYUCAoaW5uZXJfeDAsIDEpLAotCQkJCSAgICAgaSwgMSwgMCwgaW5fY29kZSA9PSBDT01Q QVJFKTsKKwkJCQkgICAgIGksIHRydWUsIGZhbHNlLCBpbl9jb2RlID09IENPTVBBUkUpOwogCiAJ ICAvKiBJZiB3ZSBuYXJyb3dlZCB0aGUgbW9kZSB3aGVuIGRyb3BwaW5nIHRoZSBzdWJyZWcsIHRo ZW4gd2UgbG9zZS4gICovCiAJICBpZiAoR0VUX01PREVfU0laRSAoaW5uZXJfbW9kZSkgPCBHRVRf TU9ERV9TSVpFIChtb2RlKSkKQEAgLTgxMjksOCArODEzNCw4IEBAIG1ha2VfY29tcG91bmRfb3Bl cmF0aW9uX2ludCAoc2NhbGFyX2ludF9tb2RlIG1vZGUsIHJ0eCAqeF9wdHIsCiAJICBpZiAoIW5l d19ydHggJiYgaSA+PSAwKQogCSAgICB7CiAJICAgICAgbmV3X3J0eCA9IG1ha2VfY29tcG91bmRf b3BlcmF0aW9uIChYRVhQICh4LCAwKSwgbmV4dF9jb2RlKTsKLQkgICAgICBuZXdfcnR4ID0gbWFr ZV9leHRyYWN0aW9uIChtb2RlLCBuZXdfcnR4LCAwLCBOVUxMX1JUWCwgaSwgMSwKLQkJCQkJIDAs IGluX2NvZGUgPT0gQ09NUEFSRSk7CisJICAgICAgbmV3X3J0eCA9IG1ha2VfZXh0cmFjdGlvbiAo bW9kZSwgbmV3X3J0eCwgMCwgTlVMTF9SVFgsIGksCisJCQkJCSB0cnVlLCBmYWxzZSwgaW5fY29k ZSA9PSBDT01QQVJFKTsKIAkgICAgfQogCX0KICAgICAgIC8qIFNhbWUgYXMgcHJldmlvdXMsIGJ1 dCBmb3IgKHhvci9pb3IgKGxzaGlmdHJ0Li4uKSAobHNoaWZ0cnQuLi4pKS4gICovCkBAIC04MTYx LDcgKzgxNjYsOCBAQCBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbl9pbnQgKHNjYWxhcl9pbnRfbW9k ZSBtb2RlLCBydHggKnhfcHRyLAogCSAgbmV3X3J0eCA9IG1ha2VfZXh0cmFjdGlvbiAobW9kZSwg bmV3X3J0eCwKIAkJCQkgICAgIChHRVRfTU9ERV9QUkVDSVNJT04gKG1vZGUpCiAJCQkJICAgICAg LSBJTlRWQUwgKFhFWFAgKFhFWFAgKHgsIDApLCAxKSkpLAotCQkJCSAgICAgTlVMTF9SVFgsIGks IDEsIDAsIGluX2NvZGUgPT0gQ09NUEFSRSk7CisJCQkJICAgICBOVUxMX1JUWCwgaSwgdHJ1ZSwg ZmFsc2UsCisJCQkJICAgICBpbl9jb2RlID09IENPTVBBUkUpOwogCX0KIAogICAgICAgLyogT24g bWFjaGluZXMgd2l0aG91dCBsb2dpY2FsIHNoaWZ0cywgaWYgdGhlIG9wZXJhbmQgb2YgdGhlIEFO RCBpcwpAQCAtODE5Niw3ICs4MjAyLDggQEAgbWFrZV9jb21wb3VuZF9vcGVyYXRpb25faW50IChz Y2FsYXJfaW50X21vZGUgbW9kZSwgcnR4ICp4X3B0ciwKIAluZXdfcnR4ID0gbWFrZV9leHRyYWN0 aW9uIChtb2RlLAogCQkJCSAgIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uIChYRVhQICh4LCAwKSwK IAkJCQkJCQkgICAgbmV4dF9jb2RlKSwKLQkJCQkgICAwLCBOVUxMX1JUWCwgaSwgMSwgMCwgaW5f Y29kZSA9PSBDT01QQVJFKTsKKwkJCQkgICAwLCBOVUxMX1JUWCwgaSwKKwkJCQkgICB0cnVlLCBm YWxzZSwgaW5fY29kZSA9PSBDT01QQVJFKTsKIAogICAgICAgLyogSWYgd2UgYXJlIGluIGEgY29t cGFyaXNvbiBhbmQgdGhpcyBpcyBhbiBBTkQgd2l0aCBhIHBvd2VyIG9mIHR3bywKIAkgY29udmVy dCB0aGlzIGludG8gdGhlIGFwcHJvcHJpYXRlIGJpdCBleHRyYWN0LiAgKi8KQEAgLTgyMDYsNyAr ODIxMyw3IEBAIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uX2ludCAoc2NhbGFyX2ludF9tb2RlIG1v ZGUsIHJ0eCAqeF9wdHIsCiAJbmV3X3J0eCA9IG1ha2VfZXh0cmFjdGlvbiAobW9kZSwKIAkJCQkg ICBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiAoWEVYUCAoeCwgMCksCiAJCQkJCQkJICAgIG5leHRf Y29kZSksCi0JCQkJICAgaSwgTlVMTF9SVFgsIDEsIDEsIDAsIDEpOworCQkJCSAgIGksIE5VTExf UlRYLCAxLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAKICAgICAgIC8qIElmIHRoZSBvbmUgb3BlcmFu ZCBpcyBhIHBhcmFkb3hpY2FsIHN1YnJlZyBvZiBhIHJlZ2lzdGVyIG9yIG1lbW9yeSBhbmQKIAkg dGhlIGNvbnN0YW50IChsaW1pdGVkIHRvIHRoZSBzbWFsbGVyIG1vZGUpIGhhcyBvbmx5IHplcm8g Yml0cyB3aGVyZQpAQCAtODIzMiw3ICs4MjM5LDcgQEAgbWFrZV9jb21wb3VuZF9vcGVyYXRpb25f aW50IChzY2FsYXJfaW50X21vZGUgbW9kZSwgcnR4ICp4X3B0ciwKIAkJewogCQkgIG5ld19ydHgg PSBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiAoc3ViLCBuZXh0X2NvZGUpOwogCQkgIG5ld19ydHgg PSBtYWtlX2V4dHJhY3Rpb24gKG1vZGUsIG5ld19ydHgsIDAsIDAsIHN1Yl93aWR0aCwKLQkJCQkJ ICAgICAxLCAwLCBpbl9jb2RlID09IENPTVBBUkUpOworCQkJCQkgICAgIHRydWUsIGZhbHNlLCBp bl9jb2RlID09IENPTVBBUkUpOwogCQl9CiAJICAgIH0KIAl9CkBAIC04MjczLDcgKzgyODAsOCBA QCBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbl9pbnQgKHNjYWxhcl9pbnRfbW9kZSBtb2RlLCBydHgg KnhfcHRyLAogCSAgbmV3X3J0eCA9IG1ha2VfZXh0cmFjdGlvbiAobW9kZSwgbmV3X3J0eCwKIAkJ CQkgICAgIElOVFZBTCAocmhzKSAtIElOVFZBTCAoWEVYUCAobGhzLCAxKSksCiAJCQkJICAgICBO VUxMX1JUWCwgbW9kZV93aWR0aCAtIElOVFZBTCAocmhzKSwKLQkJCQkgICAgIGNvZGUgPT0gTFNI SUZUUlQsIDAsIGluX2NvZGUgPT0gQ09NUEFSRSk7CisJCQkJICAgICBjb2RlID09IExTSElGVFJU LCBmYWxzZSwKKwkJCQkgICAgIGluX2NvZGUgPT0gQ09NUEFSRSk7CiAJICBicmVhazsKIAl9CiAK QEAgLTgyOTMsNyArODMwMSw3IEBAIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uX2ludCAoc2NhbGFy X2ludF9tb2RlIG1vZGUsIHJ0eCAqeF9wdHIsCiAJbmV3X3J0eCA9IG1ha2VfZXh0cmFjdGlvbiAo bW9kZSwgbWFrZV9jb21wb3VuZF9vcGVyYXRpb24gKG5ld19ydHgsCiAJCQkJCQkJCSAgbmV4dF9j b2RlKSwKIAkJCQkgICAwLCBOVUxMX1JUWCwgbW9kZV93aWR0aCAtIElOVFZBTCAocmhzKSwKLQkJ CQkgICBjb2RlID09IExTSElGVFJULCAwLCBpbl9jb2RlID09IENPTVBBUkUpOworCQkJCSAgIGNv ZGUgPT0gTFNISUZUUlQsIGZhbHNlLCBpbl9jb2RlID09IENPTVBBUkUpOwogCiAgICAgICBicmVh azsKIApAQCAtODMyMCw3ICs4MzI4LDcgQEAgbWFrZV9jb21wb3VuZF9vcGVyYXRpb25faW50IChz Y2FsYXJfaW50X21vZGUgbW9kZSwgcnR4ICp4X3B0ciwKIAkgICAgaWYgKHdpZHRoID4gbW9kZV93 aWR0aCkKIAkgICAgICB3aWR0aCA9IG1vZGVfd2lkdGg7CiAJICAgIG5ld19ydHggPSBtYWtlX2V4 dHJhY3Rpb24gKG1vZGUsIG5ld19ydHgsIDAsIFhFWFAgKGlubmVyLCAxKSwKLQkJCQkgICAgICAg d2lkdGgsIDEsIDAsIGluX2NvZGUgPT0gQ09NUEFSRSk7CisJCQkJICAgICAgIHdpZHRoLCB0cnVl LCBmYWxzZSwgaW5fY29kZSA9PSBDT01QQVJFKTsKIAkgICAgYnJlYWs7CiAJICB9CiAKQEAgLTgz NTQsNyArODM2Miw3IEBAIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uX2ludCAoc2NhbGFyX2ludF9t b2RlIG1vZGUsIHJ0eCAqeF9wdHIsCiAJICAgICYmIHN1YnJlZ19sb3dwYXJ0X3AgKHgpKQogCSAg ewogCSAgICBydHggbmV3ZXIKLQkgICAgICA9IGZvcmNlX3RvX21vZGUgKHRlbSwgbW9kZSwgSE9T VF9XSURFX0lOVF9NMVUsIDApOworCSAgICAgID0gZm9yY2VfdG9fbW9kZSAodGVtLCBtb2RlLCBI T1NUX1dJREVfSU5UX00xVSwgZmFsc2UpOwogCiAJICAgIC8qIElmIHdlIGhhdmUgc29tZXRoaW5n IG90aGVyIHRoYW4gYSBTVUJSRUcsIHdlIG1pZ2h0IGhhdmUKIAkgICAgICAgZG9uZSBhbiBleHBh bnNpb24sIHNvIHJlcnVuIG91cnNlbHZlcy4gICovCkBAIC04NjI4LDE2ICs4NjM2LDE2IEBAIGdl bl9sb3dwYXJ0X29yX3RydW5jYXRlIChtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHgpCiAgICBSZXR1 cm4gYSBwb3NzaWJseSBzaW1wbGlmaWVkIGV4cHJlc3Npb24sIGJ1dCBhbHdheXMgY29udmVydCBY IHRvCiAgICBNT0RFLiAgSWYgWCBpcyBhIENPTlNUX0lOVCwgQU5EIHRoZSBDT05TVF9JTlQgd2l0 aCBNQVNLLgogCi0gICBJZiBKVVNUX1NFTEVDVCBpcyBub256ZXJvLCBkb24ndCBvcHRpbWl6ZSBi eSBub3RpY2luZyB0aGF0IGJpdHMgaW4gTUFTSworICAgSWYgSlVTVF9TRUxFQ1QgaXMgdHJ1ZSwg ZG9uJ3Qgb3B0aW1pemUgYnkgbm90aWNpbmcgdGhhdCBiaXRzIGluIE1BU0sKICAgIGFyZSBhbGwg b2ZmIGluIFguICBUaGlzIGlzIHVzZWQgd2hlbiBYIHdpbGwgYmUgY29tcGxlbWVudGVkLCBieSBl aXRoZXIKICAgIE5PVCwgTkVHLCBvciBYT1IuICAqLwogCiBzdGF0aWMgcnR4CiBmb3JjZV90b19t b2RlIChydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbWFz aywKLQkgICAgICAgaW50IGp1c3Rfc2VsZWN0KQorCSAgICAgICBib29sIGp1c3Rfc2VsZWN0KQog ewogICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAoeCk7Ci0gIGludCBuZXh0X3NlbGVj dCA9IGp1c3Rfc2VsZWN0IHx8IGNvZGUgPT0gWE9SIHx8IGNvZGUgPT0gTk9UIHx8IGNvZGUgPT0g TkVHOworICBib29sIG5leHRfc2VsZWN0ID0ganVzdF9zZWxlY3QgfHwgY29kZSA9PSBYT1IgfHwg Y29kZSA9PSBOT1QgfHwgY29kZSA9PSBORUc7CiAgIG1hY2hpbmVfbW9kZSBvcF9tb2RlOwogICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIG5vbnplcm87CiAKQEAgLTg3MjQsMTAgKzg3MzIsMTAgQEAg Zm9yY2VfdG9fbW9kZSAocnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLCB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIG1hc2ssCiBzdGF0aWMgcnR4CiBmb3JjZV9pbnRfdG9fbW9kZSAocnR4IHgsIHNjYWxh cl9pbnRfbW9kZSBtb2RlLCBzY2FsYXJfaW50X21vZGUgeG1vZGUsCiAJCSAgIHNjYWxhcl9pbnRf bW9kZSBvcF9tb2RlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1hc2ssCi0JCSAgIGludCBqdXN0 X3NlbGVjdCkKKwkJICAgYm9vbCBqdXN0X3NlbGVjdCkKIHsKICAgZW51bSBydHhfY29kZSBjb2Rl ID0gR0VUX0NPREUgKHgpOwotICBpbnQgbmV4dF9zZWxlY3QgPSBqdXN0X3NlbGVjdCB8fCBjb2Rl ID09IFhPUiB8fCBjb2RlID09IE5PVCB8fCBjb2RlID09IE5FRzsKKyAgYm9vbCBuZXh0X3NlbGVj dCA9IGp1c3Rfc2VsZWN0IHx8IGNvZGUgPT0gWE9SIHx8IGNvZGUgPT0gTk9UIHx8IGNvZGUgPT0g TkVHOwogICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGZ1bGxlcl9tYXNrOwogICBydHggb3AwLCBv cDEsIHRlbXA7CiAgIHBvbHlfaW50NjQgY29uc3Rfb3AwOwpAQCAtODczOCw4ICs4NzQ2LDcgQEAg Zm9yY2VfaW50X3RvX21vZGUgKHJ0eCB4LCBzY2FsYXJfaW50X21vZGUgbW9kZSwgc2NhbGFyX2lu dF9tb2RlIHhtb2RlLAogICBpZiAobWFzayAmIChIT1NUX1dJREVfSU5UXzFVIDw8IChIT1NUX0JJ VFNfUEVSX1dJREVfSU5UIC0gMSkpKQogICAgIGZ1bGxlcl9tYXNrID0gSE9TVF9XSURFX0lOVF9N MVU7CiAgIGVsc2UKLSAgICBmdWxsZXJfbWFzayA9ICgoSE9TVF9XSURFX0lOVF8xVSA8PCAoZmxv b3JfbG9nMiAobWFzaykgKyAxKSkKLQkJICAgLSAxKTsKKyAgICBmdWxsZXJfbWFzayA9ICgoSE9T VF9XSURFX0lOVF8xVSA8PCAoZmxvb3JfbG9nMiAobWFzaykgKyAxKSkgLSAxKTsKIAogICBzd2l0 Y2ggKGNvZGUpCiAgICAgewpAQCAtOTEwMiw4ICs5MTA5LDcgQEAgZm9yY2VfaW50X3RvX21vZGUg KHJ0eCB4LCBzY2FsYXJfaW50X21vZGUgbW9kZSwgc2NhbGFyX2ludF9tb2RlIHhtb2RlLAogCSAg ICAgIDw9IEdFVF9NT0RFX1BSRUNJU0lPTiAoeG1vZGUpIC0gKGZsb29yX2xvZzIgKG1hc2spICsg MSkpCiAJICAmJiBHRVRfQ09ERSAoWEVYUCAoeCwgMCkpID09IEFTSElGVAogCSAgJiYgWEVYUCAo WEVYUCAoeCwgMCksIDEpID09IFhFWFAgKHgsIDEpKQotCXJldHVybiBmb3JjZV90b19tb2RlIChY RVhQIChYRVhQICh4LCAwKSwgMCksIG1vZGUsIG1hc2ssCi0JCQkgICAgICBuZXh0X3NlbGVjdCk7 CisJcmV0dXJuIGZvcmNlX3RvX21vZGUgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSwgbW9kZSwgbWFz aywgbmV4dF9zZWxlY3QpOwogCiAgICAgICBicmVhazsKIApAQCAtOTYwNiwyNSArOTYxMiwyNSBA QCBrbm93bl9jb25kIChydHggeCwgZW51bSBydHhfY29kZSBjb25kLCBydHggcmVnLCBydHggdmFs KQogLyogU2VlIGlmIFggYW5kIFkgYXJlIGVxdWFsIGZvciB0aGUgcHVycG9zZXMgb2Ygc2VlaW5n IGlmIHdlIGNhbiByZXdyaXRlIGFuCiAgICBhc3NpZ25tZW50IGFzIGEgZmllbGQgYXNzaWdubWVu dC4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBydHhfZXF1YWxfZm9yX2ZpZWxkX2Fz c2lnbm1lbnRfcCAocnR4IHgsIHJ0eCB5LCBib29sIHdpZGVuX3gpCiB7CiAgIGlmICh3aWRlbl94 ICYmIEdFVF9NT0RFICh4KSAhPSBHRVRfTU9ERSAoeSkpCiAgICAgewogICAgICAgaWYgKHBhcmFk b3hpY2FsX3N1YnJlZ19wIChHRVRfTU9ERSAoeCksIEdFVF9NT0RFICh5KSkpCi0JcmV0dXJuIDA7 CisJcmV0dXJuIGZhbHNlOwogICAgICAgaWYgKEJZVEVTX0JJR19FTkRJQU4gIT0gV09SRFNfQklH X0VORElBTikKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiAgICAgICB4ID0gYWRqdXN0X2Fk ZHJlc3NfbnYgKHgsIEdFVF9NT0RFICh5KSwKIAkJCSAgICAgYnl0ZV9sb3dwYXJ0X29mZnNldCAo R0VUX01PREUgKHkpLAogCQkJCQkJICBHRVRfTU9ERSAoeCkpKTsKICAgICB9CiAKICAgaWYgKHgg PT0geSB8fCBydHhfZXF1YWxfcCAoeCwgeSkpCi0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHRy dWU7CiAKICAgaWYgKHggPT0gMCB8fCB5ID09IDAgfHwgR0VUX01PREUgKHgpICE9IEdFVF9NT0RF ICh5KSkKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgLyogQ2hlY2sgZm9y IGEgcGFyYWRveGljYWwgU1VCUkVHIG9mIGEgTUVNIGNvbXBhcmVkIHdpdGggdGhlIE1FTS4KICAg ICAgTm90ZSB0aGF0IGFsbCBTVUJSRUdzIG9mIE1FTSBhcmUgcGFyYWRveGljYWw7IG90aGVyd2lz ZSB0aGV5CkBAIC05NjMzLDIwICs5NjM5LDIwIEBAIHJ0eF9lcXVhbF9mb3JfZmllbGRfYXNzaWdu bWVudF9wIChydHggeCwgcnR4IHksIGJvb2wgd2lkZW5feCkKICAgICAgICYmIE1FTV9QIChTVUJS RUdfUkVHICh5KSkKICAgICAgICYmIHJ0eF9lcXVhbF9wIChTVUJSRUdfUkVHICh5KSwKIAkJICAg ICAgZ2VuX2xvd3BhcnQgKEdFVF9NT0RFIChTVUJSRUdfUkVHICh5KSksIHgpKSkKLSAgICByZXR1 cm4gMTsKKyAgICByZXR1cm4gdHJ1ZTsKIAogICBpZiAoTUVNX1AgKHkpICYmIEdFVF9DT0RFICh4 KSA9PSBTVUJSRUcKICAgICAgICYmIE1FTV9QIChTVUJSRUdfUkVHICh4KSkKICAgICAgICYmIHJ0 eF9lcXVhbF9wIChTVUJSRUdfUkVHICh4KSwKIAkJICAgICAgZ2VuX2xvd3BhcnQgKEdFVF9NT0RF IChTVUJSRUdfUkVHICh4KSksIHkpKSkKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gdHJ1ZTsK IAogICAvKiBXZSB1c2VkIHRvIHNlZSBpZiBnZXRfbGFzdF92YWx1ZSBvZiBYIGFuZCBZIHdlcmUg dGhlIHNhbWUgYnV0IHRoYXQncwogICAgICBub3QgY29ycmVjdC4gIEluIG9uZSBkaXJlY3Rpb24s IHdlJ2xsIGNhdXNlIHRoZSBhc3NpZ25tZW50IHRvIGhhdmUKICAgICAgdGhlIHdyb25nIGRlc3Rp bmF0aW9uIGFuZCBpbiB0aGUgY2FzZSwgd2UnbGwgaW1wb3J0IGEgcmVnaXN0ZXIgaW50byB0aGlz CiAgICAgIGluc24gdGhhdCBtaWdodCBoYXZlIGFscmVhZHkgaGF2ZSBiZWVuIGRlYWQuICAgU28g ZmFpbCBpZiBub25lIG9mIHRoZQogICAgICBhYm92ZSBjYXNlcyBhcmUgdHJ1ZS4gICovCi0gIHJl dHVybiAwOworICByZXR1cm4gZmFsc2U7CiB9CiAMCiAvKiBTZWUgaWYgWCwgYSBTRVQgb3BlcmF0 aW9uLCBjYW4gYmUgcmV3cml0dGVuIGFzIGEgYml0LWZpZWxkIGFzc2lnbm1lbnQuCkBAIC05Njgy LDcgKzk2ODgsNyBAQCBtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQgKHJ0eCB4KQogICAgICAgJiYgcnR4 X2VxdWFsX2Zvcl9maWVsZF9hc3NpZ25tZW50X3AgKGRlc3QsIFhFWFAgKHNyYywgMSkpKQogICAg IHsKICAgICAgIGFzc2lnbiA9IG1ha2VfZXh0cmFjdGlvbiAoVk9JRG1vZGUsIGRlc3QsIDAsIFhF WFAgKFhFWFAgKHNyYywgMCksIDEpLAotCQkJCTEsIDEsIDEsIDApOworCQkJCTEsIHRydWUsIHRy dWUsIGZhbHNlKTsKICAgICAgIGlmIChhc3NpZ24gIT0gMCkKIAlyZXR1cm4gZ2VuX3J0eF9TRVQg KGFzc2lnbiwgY29uc3QwX3J0eCk7CiAgICAgICByZXR1cm4geDsKQEAgLTk2OTgsNyArOTcwNCw3 IEBAIG1ha2VfZmllbGRfYXNzaWdubWVudCAocnR4IHgpCiAgICAgewogICAgICAgYXNzaWduID0g bWFrZV9leHRyYWN0aW9uIChWT0lEbW9kZSwgZGVzdCwgMCwKIAkJCQlYRVhQIChTVUJSRUdfUkVH IChYRVhQIChzcmMsIDApKSwgMSksCi0JCQkJMSwgMSwgMSwgMCk7CisJCQkJMSwgdHJ1ZSwgdHJ1 ZSwgZmFsc2UpOwogICAgICAgaWYgKGFzc2lnbiAhPSAwKQogCXJldHVybiBnZW5fcnR4X1NFVCAo YXNzaWduLCBjb25zdDBfcnR4KTsKICAgICAgIHJldHVybiB4OwpAQCAtOTcxMSw3ICs5NzE3LDcg QEAgbWFrZV9maWVsZF9hc3NpZ25tZW50IChydHggeCkKICAgICAgICYmIHJ0eF9lcXVhbF9mb3Jf ZmllbGRfYXNzaWdubWVudF9wIChkZXN0LCBYRVhQIChzcmMsIDEpKSkKICAgICB7CiAgICAgICBh c3NpZ24gPSBtYWtlX2V4dHJhY3Rpb24gKFZPSURtb2RlLCBkZXN0LCAwLCBYRVhQIChYRVhQIChz cmMsIDApLCAxKSwKLQkJCQkxLCAxLCAxLCAwKTsKKwkJCQkxLCB0cnVlLCB0cnVlLCBmYWxzZSk7 CiAgICAgICBpZiAoYXNzaWduICE9IDApCiAJcmV0dXJuIGdlbl9ydHhfU0VUIChhc3NpZ24sIGNv bnN0MV9ydHgpOwogICAgICAgcmV0dXJuIHg7CkBAIC05ODE1LDcgKzk4MjEsOCBAQCBtYWtlX2Zp ZWxkX2Fzc2lnbm1lbnQgKHJ0eCB4KQogICAgICAgfHwgKGMxICYgbm9uemVyb19iaXRzIChvdGhl ciwgbW9kZSkpICE9IDApCiAgICAgcmV0dXJuIHg7CiAKLSAgYXNzaWduID0gbWFrZV9leHRyYWN0 aW9uIChWT0lEbW9kZSwgZGVzdCwgcG9zLCBOVUxMX1JUWCwgbGVuLCAxLCAxLCAwKTsKKyAgYXNz aWduID0gbWFrZV9leHRyYWN0aW9uIChWT0lEbW9kZSwgZGVzdCwgcG9zLCBOVUxMX1JUWCwgbGVu LAorCQkJICAgIHRydWUsIHRydWUsIGZhbHNlKTsKICAgaWYgKGFzc2lnbiA9PSAwKQogICAgIHJl dHVybiB4OwogCkBAIC05ODMzLDggKzk4NDAsNyBAQCBtYWtlX2ZpZWxkX2Fzc2lnbm1lbnQgKHJ0 eCB4KQogICBzcmMgPSBmb3JjZV90b19tb2RlIChzcmMsIG5ld19tb2RlLAogCQkgICAgICAgbGVu ID49IEhPU1RfQklUU19QRVJfV0lERV9JTlQKIAkJICAgICAgID8gSE9TVF9XSURFX0lOVF9NMVUK LQkJICAgICAgIDogKEhPU1RfV0lERV9JTlRfMVUgPDwgbGVuKSAtIDEsCi0JCSAgICAgICAwKTsK KwkJICAgICAgIDogKEhPU1RfV0lERV9JTlRfMVUgPDwgbGVuKSAtIDEsIGZhbHNlKTsKIAogICAv KiBJZiBTUkMgaXMgbWFza2VkIGJ5IGFuIEFORCB0aGF0IGRvZXMgbm90IG1ha2UgYSBkaWZmZXJl bmNlIGluCiAgICAgIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQsIHN0cmlwIGl0LiAgKi8KQEAgLTEw MDY0LDcgKzEwMDcwLDcgQEAgc2ltcGxpZnlfYW5kX2NvbnN0X2ludF8xIChzY2FsYXJfaW50X21v ZGUgbW9kZSwgcnR4IHZhcm9wLAogICAgICBDT05TVE9QIGFyZSBub3Qgc2lnbmlmaWNhbnQgYW5k IHdpbGwgbmV2ZXIgYmUgZXhhbWluZWQuICBXZSBtdXN0CiAgICAgIGVuc3VyZSB0aGF0IGlzIHRo ZSBjYXNlIGJ5IGV4cGxpY2l0bHkgbWFza2luZyBvdXQgdGhvc2UgYml0cwogICAgICBiZWZvcmUg cmV0dXJuaW5nLiAgKi8KLSAgdmFyb3AgPSBmb3JjZV90b19tb2RlICh2YXJvcCwgbW9kZSwgY29u c3RvcCwgMCk7CisgIHZhcm9wID0gZm9yY2VfdG9fbW9kZSAodmFyb3AsIG1vZGUsIGNvbnN0b3As IGZhbHNlKTsKIAogICAvKiBJZiBWQVJPUCBpcyBhIENMT0JCRVIsIHdlIHdpbGwgZmFpbCBzbyBy ZXR1cm4gaXQuICAqLwogICBpZiAoR0VUX0NPREUgKHZhcm9wKSA9PSBDTE9CQkVSKQpAQCAtMTAz MDIsNyArMTAzMDgsNyBAQCByZWdfbnVtX3NpZ25fYml0X2NvcGllc19mb3JfY29tYmluZSAoY29u c3RfcnR4IHgsIHNjYWxhcl9pbnRfbW9kZSB4bW9kZSwKICAgIGltcGxpZXMgdGhhdCBpdCBtdXN0 IGJlIGNhbGxlZCBmcm9tIGEgZGVmaW5lX3NwbGl0LiAgKi8KIAogdW5zaWduZWQgaW50Ci1leHRl bmRlZF9jb3VudCAoY29uc3RfcnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgdW5zaWduZWRw KQorZXh0ZW5kZWRfY291bnQgKGNvbnN0X3J0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwgYm9vbCB1 bnNpZ25lZHApCiB7CiAgIGlmIChub256ZXJvX3NpZ25fdmFsaWQgPT0gMCkKICAgICByZXR1cm4g MDsKQEAgLTEwMzIzLDggKzEwMzI5LDggQEAgZXh0ZW5kZWRfY291bnQgKGNvbnN0X3J0eCB4LCBt YWNoaW5lX21vZGUgbW9kZSwgaW50IHVuc2lnbmVkcCkKICAgIHBvc2l0aW9uLiAgV2Ugd291bGQg bm93IGxpa2UgdG8gYWxzbyBwZXJmb3JtIE9QMSB3aXRoIGNvbnN0YW50IENPTlNUMQogICAgKHdp dGggKlBPUDAgYmVpbmcgZG9uZSBsYXN0KS4KIAotICAgUmV0dXJuIDEgaWYgd2UgY2FuIGRvIHRo ZSBvcGVyYXRpb24gYW5kIHVwZGF0ZSAqUE9QMCBhbmQgKlBDT05TVDAgd2l0aAotICAgdGhlIHJl c3VsdGluZyBvcGVyYXRpb24uICAqUENPTVBfUCBpcyBzZXQgdG8gMSBpZiB3ZSB3b3VsZCBuZWVk IHRvCisgICBSZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gZG8gdGhlIG9wZXJhdGlvbiBhbmQgdXBkYXRl ICpQT1AwIGFuZCAqUENPTlNUMCB3aXRoCisgICB0aGUgcmVzdWx0aW5nIG9wZXJhdGlvbi4gICpQ Q09NUF9QIGlzIHNldCB0byB0cnVlIGlmIHdlIHdvdWxkIG5lZWQgdG8KICAgIGNvbXBsZW1lbnQg dGhlIGlubmVybW9zdCBvcGVyYW5kLCBvdGhlcndpc2UgaXQgaXMgdW5jaGFuZ2VkLgogCiAgICBN T0RFIGlzIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBkb25lLiAgTm8g Yml0cyBvdXRzaWRlCkBAIC0xMDMzNiwxMCArMTAzNDIsMTIgQEAgZXh0ZW5kZWRfY291bnQgKGNv bnN0X3J0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwgaW50IHVuc2lnbmVkcCkKICAgIHJlc3VsdCBp cyBzaW1wbHkgKlBDT05TVDAuCiAKICAgIElmIHRoZSByZXN1bHRpbmcgb3BlcmF0aW9uIGNhbm5v dCBiZSBleHByZXNzZWQgYXMgb25lIG9wZXJhdGlvbiwgd2UKLSAgIHJldHVybiAwIGFuZCBkbyBu b3QgY2hhbmdlICpQT1AwLCAqUENPTlNUMCwgYW5kICpQQ09NUF9QLiAgKi8KKyAgIHJldHVybiBm YWxzZSBhbmQgZG8gbm90IGNoYW5nZSAqUE9QMCwgKlBDT05TVDAsIGFuZCAqUENPTVBfUC4gICov CiAKLXN0YXRpYyBpbnQKLW1lcmdlX291dGVyX29wcyAoZW51bSBydHhfY29kZSAqcG9wMCwgSE9T VF9XSURFX0lOVCAqcGNvbnN0MCwgZW51bSBydHhfY29kZSBvcDEsIEhPU1RfV0lERV9JTlQgY29u c3QxLCBtYWNoaW5lX21vZGUgbW9kZSwgaW50ICpwY29tcF9wKQorc3RhdGljIGJvb2wKK21lcmdl X291dGVyX29wcyAoZW51bSBydHhfY29kZSAqcG9wMCwgSE9TVF9XSURFX0lOVCAqcGNvbnN0MCwK KwkJIGVudW0gcnR4X2NvZGUgb3AxLCBIT1NUX1dJREVfSU5UIGNvbnN0MSwKKwkJIG1hY2hpbmVf bW9kZSBtb2RlLCBib29sICpwY29tcF9wKQogewogICBlbnVtIHJ0eF9jb2RlIG9wMCA9ICpwb3Aw OwogICBIT1NUX1dJREVfSU5UIGNvbnN0MCA9ICpwY29uc3QwOwpAQCAtMTAzNTUsNyArMTAzNjMs NyBAQCBtZXJnZV9vdXRlcl9vcHMgKGVudW0gcnR4X2NvZGUgKnBvcDAsIEhPU1RfV0lERV9JTlQg KnBjb25zdDAsIGVudW0gcnR4X2NvZGUgb3AxLAogICAgICBpZiBPUDAgaXMgU0VULiAgKi8KIAog ICBpZiAob3AxID09IFVOS05PV04gfHwgb3AwID09IFNFVCkKLSAgICByZXR1cm4gMTsKKyAgICBy ZXR1cm4gdHJ1ZTsKIAogICBlbHNlIGlmIChvcDAgPT0gVU5LTk9XTikKICAgICBvcDAgPSBvcDEs IGNvbnN0MCA9IGNvbnN0MTsKQEAgLTEwMzg2LDEyICsxMDM5NCwxMiBAQCBtZXJnZV9vdXRlcl9v cHMgKGVudW0gcnR4X2NvZGUgKnBvcDAsIEhPU1RfV0lERV9JTlQgKnBjb25zdDAsIGVudW0gcnR4 X2NvZGUgb3AxLAogCiAgIC8qIE90aGVyd2lzZSwgaWYgZWl0aGVyIGlzIGEgUExVUyBvciBORUcs IHdlIGNhbid0IGRvIGFueXRoaW5nLiAgKi8KICAgZWxzZSBpZiAob3AwID09IFBMVVMgfHwgb3Ax ID09IFBMVVMgfHwgb3AwID09IE5FRyB8fCBvcDEgPT0gTkVHKQotICAgIHJldHVybiAwOworICAg IHJldHVybiBmYWxzZTsKIAogICAvKiBJZiB0aGUgdHdvIGNvbnN0YW50cyBhcmVuJ3QgdGhlIHNh bWUsIHdlIGNhbid0IGRvIGFueXRoaW5nLiAgVGhlCiAgICAgIHJlbWFpbmluZyBzaXggY2FzZXMg Y2FuIGFsbCBiZSBkb25lLiAgKi8KICAgZWxzZSBpZiAoY29uc3QwICE9IGNvbnN0MSkKLSAgICBy ZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgZWxzZQogICAgIHN3aXRjaCAob3AwKQpA QCAtMTA0MDgsNyArMTA0MTYsNyBAQCBtZXJnZV9vdXRlcl9vcHMgKGVudW0gcnR4X2NvZGUgKnBv cDAsIEhPU1RfV0lERV9JTlQgKnBjb25zdDAsIGVudW0gcnR4X2NvZGUgb3AxLAogICAgICAgY2Fz ZSBYT1I6CiAJaWYgKG9wMSA9PSBBTkQpCiAJICAvKiAoYSAmIGIpIF4gYiA9PSAofmEpICYgYiAq LwotCSAgb3AwID0gQU5ELCAqcGNvbXBfcCA9IDE7CisJICBvcDAgPSBBTkQsICpwY29tcF9wID0g dHJ1ZTsKIAllbHNlIC8qIG9wMSA9PSBJT1IgKi8KIAkgIC8qIChhIHwgYikgXiBiID09IGEgJiB+ YiAqLwogCSAgb3AwID0gQU5ELCBjb25zdDAgPSB+Y29uc3QwOwpAQCAtMTA0MjAsNyArMTA0Mjgs NyBAQCBtZXJnZV9vdXRlcl9vcHMgKGVudW0gcnR4X2NvZGUgKnBvcDAsIEhPU1RfV0lERV9JTlQg KnBjb25zdDAsIGVudW0gcnR4X2NvZGUgb3AxLAogCW9wMCA9IFNFVDsKIAllbHNlIC8qIG9wMSA9 PSBYT1IgKi8KIAkgIC8qIChhIF4gYikgJiBiKSA9PSAofmEpICYgYiAqLwotCSAgKnBjb21wX3Ag PSAxOworCSAgKnBjb21wX3AgPSB0cnVlOwogCWJyZWFrOwogICAgICAgZGVmYXVsdDoKIAlicmVh azsKQEAgLTEwNDQ1LDcgKzEwNDUzLDcgQEAgbWVyZ2Vfb3V0ZXJfb3BzIChlbnVtIHJ0eF9jb2Rl ICpwb3AwLCBIT1NUX1dJREVfSU5UICpwY29uc3QwLCBlbnVtIHJ0eF9jb2RlIG9wMSwKICAgaWYg KG9wMCAhPSBVTktOT1dOICYmIG9wMCAhPSBORUcpCiAgICAgKnBjb25zdDAgPSB0cnVuY19pbnRf Zm9yX21vZGUgKGNvbnN0MCwgbW9kZSk7CiAKLSAgcmV0dXJuIDE7CisgIHJldHVybiB0cnVlOwog fQogDAogLyogQSBoZWxwZXIgdG8gc2ltcGxpZnlfc2hpZnRfY29uc3RfMSB0byBkZXRlcm1pbmUg dGhlIG1vZGUgd2UgY2FuIHBlcmZvcm0KQEAgLTEwNTI0LDcgKzEwNTMyLDcgQEAgc2ltcGxpZnlf c2hpZnRfY29uc3RfMSAoZW51bSBydHhfY29kZSBjb2RlLCBtYWNoaW5lX21vZGUgcmVzdWx0X21v ZGUsCiAgIC8qIFdlIGZvcm0gKG91dGVyX29wIChjb2RlIHZhcm9wIGNvdW50KSAob3V0ZXJfY29u c3QpKS4gICovCiAgIGVudW0gcnR4X2NvZGUgb3V0ZXJfb3AgPSBVTktOT1dOOwogICBIT1NUX1dJ REVfSU5UIG91dGVyX2NvbnN0ID0gMDsKLSAgaW50IGNvbXBsZW1lbnRfcCA9IDA7CisgIGJvb2wg Y29tcGxlbWVudF9wID0gZmFsc2U7CiAgIHJ0eCBuZXdfcnR4LCB4OwogCiAgIC8qIE1ha2Ugc3Vy ZSBhbmQgdHJ1bmNhdGUgdGhlICJuYXR1cmFsIiBzaGlmdCBvbiB0aGUgd2F5IGluLiAgV2UgZG9u J3QKQEAgLTEyMDk0LDcgKzEyMTAyLDcgQEAgc2ltcGxpZnlfY29tcGFyaXNvbiAoZW51bSBydHhf Y29kZSBjb2RlLCBydHggKnBvcDAsIHJ0eCAqcG9wMSkKIAkgIHJ0eCBpbm5lcl9vcDEgPSBYRVhQ IChvcDEsIDApOwogCSAgSE9TVF9XSURFX0lOVCBjMCA9IElOVFZBTCAoWEVYUCAob3AwLCAxKSk7 CiAJICBIT1NUX1dJREVfSU5UIGMxID0gSU5UVkFMIChYRVhQIChvcDEsIDEpKTsKLQkgIGludCBj aGFuZ2VkID0gMDsKKwkgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCiAJICBpZiAocGFyYWRveGlj YWxfc3VicmVnX3AgKGlubmVyX29wMCkKIAkgICAgICAmJiBHRVRfQ09ERSAoaW5uZXJfb3AxKSA9 PSBTVUJSRUcKQEAgLTEyMTEzLDcgKzEyMTIxLDcgQEAgc2ltcGxpZnlfY29tcGFyaXNvbiAoZW51 bSBydHhfY29kZSBjb2RlLCBydHggKnBvcDAsIHJ0eCAqcG9wMSkKIAkJIG9mZiB0aGUgb3JpZ2lu YWwgc2lnbiBiaXQuICAqLwogCSAgICAgIGNvZGUgPSB1bnNpZ25lZF9jb25kaXRpb24gKGNvZGUp OwogCi0JICAgICAgY2hhbmdlZCA9IDE7CisJICAgICAgY2hhbmdlZCA9IHRydWU7CiAJICAgIH0K IAogCSAgZWxzZSBpZiAoYzAgPT0gYzEpCkBAIC0xMjEyNCw3ICsxMjEzMiw3IEBAIHNpbXBsaWZ5 X2NvbXBhcmlzb24gKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4ICpwb3AwLCBydHggKnBvcDEpCiAJ CSAgb3AwID0gZ2VuX2xvd3BhcnRfb3JfdHJ1bmNhdGUgKHRtb2RlLCBpbm5lcl9vcDApOwogCQkg IG9wMSA9IGdlbl9sb3dwYXJ0X29yX3RydW5jYXRlICh0bW9kZSwgaW5uZXJfb3AxKTsKIAkJICBj b2RlID0gdW5zaWduZWRfY29uZGl0aW9uIChjb2RlKTsKLQkJICBjaGFuZ2VkID0gMTsKKwkJICBj aGFuZ2VkID0gdHJ1ZTsKIAkJICBicmVhazsKIAkJfQogCkBAIC0xMjE5Niw4ICsxMjIwNCw3IEBA IHNpbXBsaWZ5X2NvbXBhcmlzb24gKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4ICpwb3AwLCBydHgg KnBvcDEpCiAJICAmJiBIV0lfQ09NUFVUQUJMRV9NT0RFX1AgKGludF9tb2RlKSkKIAlvcDAgPSBm b3JjZV90b19tb2RlIChvcDAsIGludF9tb2RlLAogCQkJICAgICBIT1NUX1dJREVfSU5UXzFVCi0J CQkgICAgIDw8IChHRVRfTU9ERV9QUkVDSVNJT04gKGludF9tb2RlKSAtIDEpLAotCQkJICAgICAw KTsKKwkJCSAgICAgPDwgKEdFVF9NT0RFX1BSRUNJU0lPTiAoaW50X21vZGUpIC0gMSksIGZhbHNl KTsKIAogICAgICAgaWYgKENPTVBBUklTT05fUCAob3AwKSkKIAl7CkBAIC0xMzI3OCwxOSArMTMy ODUsMTkgQEAgcmVjb3JkX3ZhbHVlX2Zvcl9yZWcgKHJ0eCByZWcsIHJ0eF9pbnNuICppbnNuLCBy dHggdmFsdWUpCiAgICAgICByc3AtPmxhc3Rfc2V0X2xhYmVsID0gbGFiZWxfdGljazsKICAgICAg IGlmICghaW5zbgogCSAgfHwgKHZhbHVlICYmIHJzcC0+bGFzdF9zZXRfdGFibGVfdGljayA+PSBs YWJlbF90aWNrX2ViYl9zdGFydCkpCi0JcnNwLT5sYXN0X3NldF9pbnZhbGlkID0gMTsKKwlyc3At Pmxhc3Rfc2V0X2ludmFsaWQgPSB0cnVlOwogICAgICAgZWxzZQotCXJzcC0+bGFzdF9zZXRfaW52 YWxpZCA9IDA7CisJcnNwLT5sYXN0X3NldF9pbnZhbGlkID0gZmFsc2U7CiAgICAgfQogCiAgIC8q IFRoZSB2YWx1ZSBiZWluZyBhc3NpZ25lZCBtaWdodCByZWZlciB0byBYIChsaWtlIGluICJ4Kys7 IikuICBJbiB0aGF0CiAgICAgIGNhc2UsIHdlIG11c3QgcmVwbGFjZSBpdCB3aXRoIChjbG9iYmVy IChjb25zdF9pbnQgMCkpIHRvIHByZXZlbnQKICAgICAgaW5maW5pdGUgbG9vcHMuICAqLwogICBy c3AgPSAmcmVnX3N0YXRbcmVnbm9dOwotICBpZiAodmFsdWUgJiYgIWdldF9sYXN0X3ZhbHVlX3Zh bGlkYXRlICgmdmFsdWUsIGluc24sIGxhYmVsX3RpY2ssIDApKQorICBpZiAodmFsdWUgJiYgIWdl dF9sYXN0X3ZhbHVlX3ZhbGlkYXRlICgmdmFsdWUsIGluc24sIGxhYmVsX3RpY2ssIGZhbHNlKSkK ICAgICB7CiAgICAgICB2YWx1ZSA9IGNvcHlfcnR4ICh2YWx1ZSk7Ci0gICAgICBpZiAoIWdldF9s YXN0X3ZhbHVlX3ZhbGlkYXRlICgmdmFsdWUsIGluc24sIGxhYmVsX3RpY2ssIDEpKQorICAgICAg aWYgKCFnZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSAoJnZhbHVlLCBpbnNuLCBsYWJlbF90aWNrLCB0 cnVlKSkKIAl2YWx1ZSA9IDA7CiAgICAgfQogCkBAIC0xMzQxOCw3ICsxMzQyNSw3IEBAIHJlY29y ZF9kZWFkX2FuZF9zZXRfcmVncyAocnR4X2luc24gKmluc24pCiAJICAgICBJdCB3b3VsZG4ndCBo ZWxwIG11Y2ggYW55d2F5LCBzaW5jZSB3ZSByYXJlbHkgc2VlIHRoaXMKIAkgICAgIHNpdHVhdGlv biBiZWZvcmUgUkEuICAqLwogCSAgcnNwID0gJnJlZ19zdGF0W2ldOwotCSAgcnNwLT5sYXN0X3Nl dF9pbnZhbGlkID0gMTsKKwkgIHJzcC0+bGFzdF9zZXRfaW52YWxpZCA9IHRydWU7CiAJICByc3At Pmxhc3Rfc2V0ID0gaW5zbjsKIAkgIHJzcC0+bGFzdF9zZXRfdmFsdWUgPSAwOwogCSAgcnNwLT5s YXN0X3NldF9tb2RlID0gVk9JRG1vZGU7CkBAIC0xMzYwMywxNSArMTM2MTAsMTUgQEAgY2hlY2tf cHJvbW90ZWRfc3VicmVnIChydHhfaW5zbiAqaW5zbiwgcnR4IHgpCiAMCiAvKiBWZXJpZnkgdGhh dCBhbGwgdGhlIHJlZ2lzdGVycyBhbmQgbWVtb3J5IHJlZmVyZW5jZXMgbWVudGlvbmVkIGluICpM T0MgYXJlCiAgICBzdGlsbCB2YWxpZC4gICpMT0Mgd2FzIHBhcnQgb2YgYSB2YWx1ZSBzZXQgaW4g SU5TTiB3aGVuIGxhYmVsX3RpY2sgd2FzCi0gICBlcXVhbCB0byBUSUNLLiAgUmV0dXJuIDAgaWYg c29tZSBhcmUgbm90LiAgSWYgUkVQTEFDRSBpcyBub256ZXJvLCByZXBsYWNlCi0gICB0aGUgaW52 YWxpZCByZWZlcmVuY2VzIHdpdGggKGNsb2JiZXIgKGNvbnN0X2ludCAwKSkgYW5kIHJldHVybiAx LiAgVGhpcworICAgZXF1YWwgdG8gVElDSy4gIFJldHVybiBmYWxzZSBpZiBzb21lIGFyZSBub3Qu ICBJZiBSRVBMQUNFIGlzIHRydWUsIHJlcGxhY2UKKyAgIHRoZSBpbnZhbGlkIHJlZmVyZW5jZXMg d2l0aCAoY2xvYmJlciAoY29uc3RfaW50IDApKSBhbmQgcmV0dXJuIHRydWUuICBUaGlzCiAgICBy ZXBsYWNlbWVudCBpcyB1c2VmdWwgYmVjYXVzZSB3ZSBvZnRlbiBjYW4gZ2V0IHVzZWZ1bCBpbmZv cm1hdGlvbiBhYm91dAogICAgdGhlIGZvcm0gb2YgYSB2YWx1ZSAoZS5nLiwgaWYgaXQgd2FzIHBy b2R1Y2VkIGJ5IGEgc2hpZnQgdGhhdCBhbHdheXMKICAgIHByb2R1Y2VzIC0xIG9yIDApIGV2ZW4g dGhvdWdoIHdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IHJlZ2lzdGVycyBpdAogICAgd2FzIHBy b2R1Y2VkIGZyb20uICAqLwogCi1zdGF0aWMgaW50Ci1nZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSAo cnR4ICpsb2MsIHJ0eF9pbnNuICppbnNuLCBpbnQgdGljaywgaW50IHJlcGxhY2UpCitzdGF0aWMg Ym9vbAorZ2V0X2xhc3RfdmFsdWVfdmFsaWRhdGUgKHJ0eCAqbG9jLCBydHhfaW5zbiAqaW5zbiwg aW50IHRpY2ssIGJvb2wgcmVwbGFjZSkKIHsKICAgcnR4IHggPSAqbG9jOwogICBjb25zdCBjaGFy ICpmbXQgPSBHRVRfUlRYX0ZPUk1BVCAoR0VUX0NPREUgKHgpKTsKQEAgLTEzNjQ0LDcgKzEzNjUx LDcgQEAgZ2V0X2xhc3RfdmFsdWVfdmFsaWRhdGUgKHJ0eCAqbG9jLCBydHhfaW5zbiAqaW5zbiwg aW50IHRpY2ssIGludCByZXBsYWNlKQogCSAgfQogCX0KIAotICAgICAgcmV0dXJuIDE7CisgICAg ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIC8qIElmIHRoaXMgaXMgYSBtZW1vcnkgcmVmZXJlbmNl LCBtYWtlIHN1cmUgdGhhdCB0aGVyZSB3ZXJlIG5vIHN0b3JlcyBhZnRlcgogICAgICBpdCB0aGF0 IG1pZ2h0IGhhdmUgY2xvYmJlcmVkIHRoZSB2YWx1ZS4gIFdlIGRvbid0IGhhdmUgYWxpYXMgaW5m bywgc28gd2UKQEAgLTEzNjc0LDE0ICsxMzY4MSwxNCBAQCBnZXRfbGFzdF92YWx1ZV92YWxpZGF0 ZSAocnR4ICpsb2MsIHJ0eF9pbnNuICppbnNuLCBpbnQgdGljaywgaW50IHJlcGxhY2UpCiAKIAkg ICAgICAvKiBJZiB4MCBhbmQgeDEgYXJlIGlkZW50aWNhbCB0aGVuIHggaXMgYWxzbyB2YWxpZC4g ICovCiAJICAgICAgaWYgKHgwID09IHgxKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAK IAkgICAgICAvKiBJZiB4MSBpcyBpZGVudGljYWwgdG8gYSBzdWJleHByZXNzaW9uIG9mIHgwIHRo ZW4KIAkJIHdoaWxlIGNoZWNraW5nIHgwLCB4MSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuICBU aHVzCiAJCSBpdCBpcyB2YWxpZCBhbmQgc28gYXMgeC4gICovCiAJICAgICAgaWYgKEFSSVRITUVU SUNfUCAoeDApCiAJCSAgJiYgKHgxID09IFhFWFAgKHgwLCAwKSB8fCB4MSA9PSBYRVhQICh4MCwg MSkpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkgICAgICAvKiBJZiB4MCBpcyBp ZGVudGljYWwgdG8gYSBzdWJleHByZXNzaW9uIG9mIHgxIHRoZW4geCBpcwogCQkgdmFsaWQgaWZm IHRoZSByZXN0IG9mIHgxIGlzIHZhbGlkLiAgKi8KQEAgLTEzNjkzLDE5ICsxMzcwMCwxOCBAQCBn ZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSAocnR4ICpsb2MsIHJ0eF9pbnNuICppbnNuLCBpbnQgdGlj aywgaW50IHJlcGxhY2UpCiAJCQkJCSAgIGluc24sIHRpY2ssIHJlcGxhY2UpOwogCSAgICB9CiAK LQkgIGlmIChnZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSAoJlhFWFAgKHgsIGkpLCBpbnNuLCB0aWNr LAotCQkJCSAgICAgICByZXBsYWNlKSA9PSAwKQotCSAgICByZXR1cm4gMDsKKwkgIGlmICghZ2V0 X2xhc3RfdmFsdWVfdmFsaWRhdGUgKCZYRVhQICh4LCBpKSwgaW5zbiwgdGljaywgcmVwbGFjZSkp CisJICAgIHJldHVybiBmYWxzZTsKIAl9CiAgICAgICBlbHNlIGlmIChmbXRbaV0gPT0gJ0UnKQog CWZvciAoaiA9IDA7IGogPCBYVkVDTEVOICh4LCBpKTsgaisrKQotCSAgaWYgKGdldF9sYXN0X3Zh bHVlX3ZhbGlkYXRlICgmWFZFQ0VYUCAoeCwgaSwgaiksCi0JCQkJICAgICAgIGluc24sIHRpY2ss IHJlcGxhY2UpID09IDApCi0JICAgIHJldHVybiAwOworCSAgaWYgKCFnZXRfbGFzdF92YWx1ZV92 YWxpZGF0ZSAoJlhWRUNFWFAgKHgsIGksIGopLAorCQkJCQlpbnNuLCB0aWNrLCByZXBsYWNlKSkK KwkgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAvKiBJZiB3ZSBoYXZlbid0IGZvdW5kIGEg cmVhc29uIGZvciBpdCB0byBiZSBpbnZhbGlkLCBpdCBpcyB2YWxpZC4gICovCi0gIHJldHVybiAx OworICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogR2V0IHRoZSBsYXN0IHZhbHVlIGFzc2lnbmVkIHRv IFgsIGlmIGtub3duLiAgU29tZSByZWdpc3RlcnMKQEAgLTEzNzY3LDE0ICsxMzc3MywxNiBAQCBn ZXRfbGFzdF92YWx1ZSAoY29uc3RfcnR4IHgpCiAgICAgcmV0dXJuIDA7CiAKICAgLyogSWYgdGhl IHZhbHVlIGhhcyBhbGwgaXRzIHJlZ2lzdGVycyB2YWxpZCwgcmV0dXJuIGl0LiAgKi8KLSAgaWYg KGdldF9sYXN0X3ZhbHVlX3ZhbGlkYXRlICgmdmFsdWUsIHJzcC0+bGFzdF9zZXQsIHJzcC0+bGFz dF9zZXRfbGFiZWwsIDApKQorICBpZiAoZ2V0X2xhc3RfdmFsdWVfdmFsaWRhdGUgKCZ2YWx1ZSwg cnNwLT5sYXN0X3NldCwKKwkJCSAgICAgICByc3AtPmxhc3Rfc2V0X2xhYmVsLCBmYWxzZSkpCiAg ICAgcmV0dXJuIHZhbHVlOwogCiAgIC8qIE90aGVyd2lzZSwgbWFrZSBhIGNvcHkgYW5kIHJlcGxh Y2UgYW55IGludmFsaWQgcmVnaXN0ZXIgd2l0aAogICAgICAoY2xvYmJlciAoY29uc3RfaW50IDAp KS4gIElmIHRoYXQgZmFpbHMgZm9yIHNvbWUgcmVhc29uLCByZXR1cm4gMC4gICovCiAKICAgdmFs dWUgPSBjb3B5X3J0eCAodmFsdWUpOwotICBpZiAoZ2V0X2xhc3RfdmFsdWVfdmFsaWRhdGUgKCZ2 YWx1ZSwgcnNwLT5sYXN0X3NldCwgcnNwLT5sYXN0X3NldF9sYWJlbCwgMSkpCisgIGlmIChnZXRf bGFzdF92YWx1ZV92YWxpZGF0ZSAoJnZhbHVlLCByc3AtPmxhc3Rfc2V0LAorCQkJICAgICAgIHJz cC0+bGFzdF9zZXRfbGFiZWwsIHRydWUpKQogICAgIHJldHVybiB2YWx1ZTsKIAogICByZXR1cm4g MDsKQEAgLTEzODA2LDcgKzEzODE0LDcgQEAgcmVnX2RlYWRfYXRfcF8xIChydHggZGVzdCwgY29u c3RfcnR4IHgsIHZvaWQgKmRhdGEgQVRUUklCVVRFX1VOVVNFRCkKICAgICByZWdfZGVhZF9mbGFn ID0gKEdFVF9DT0RFICh4KSA9PSBDTE9CQkVSKSA/IDEgOiAtMTsKIH0KIAotLyogUmV0dXJuIG5v bnplcm8gaWYgUkVHIGlzIGtub3duIHRvIGJlIGRlYWQgYXQgSU5TTi4KKy8qIFJldHVybiB0cnVl IGlmIFJFRyBpcyBrbm93biB0byBiZSBkZWFkIGF0IElOU04uCiAKICAgIFdlIHNjYW4gYmFja3dh cmRzIGZyb20gSU5TTi4gIElmIHdlIGhpdCBhIFJFR19ERUFEIG5vdGUgb3IgYSBDTE9CQkVSCiAg ICByZWZlcmVuY2luZyBSRUcsIGl0IGlzIGRlYWQuICBJZiB3ZSBoaXQgYSBTRVQgcmVmZXJlbmNp bmcgUkVHLCBpdCBpcwpAQCAtMTM4MTQsNyArMTM4MjIsNyBAQCByZWdfZGVhZF9hdF9wXzEgKHJ0 eCBkZXN0LCBjb25zdF9ydHggeCwgdm9pZCAqZGF0YSBBVFRSSUJVVEVfVU5VU0VEKQogICAgYmxv Y2sgd2UgYXJlIGluLiAgSGFyZCByZWdzIG1hcmtlZCBhcyBiZWluZyBsaXZlIGluIE5FV1BBVF9V U0VEX1JFR1MKICAgIG11c3QgYmUgYXNzdW1lZCB0byBiZSBhbHdheXMgbGl2ZS4gICovCiAKLXN0 YXRpYyBpbnQKK3N0YXRpYyBib29sCiByZWdfZGVhZF9hdF9wIChydHggcmVnLCBydHhfaW5zbiAq aW5zbikKIHsKICAgYmFzaWNfYmxvY2sgYmxvY2s7CkBAIC0xMzgzNCw3ICsxMzg0Miw3IEBAIHJl Z19kZWFkX2F0X3AgKHJ0eCByZWcsIHJ0eF9pbnNuICppbnNuKQogICAgIHsKICAgICAgIGZvciAo aSA9IHJlZ19kZWFkX3JlZ25vOyBpIDwgcmVnX2RlYWRfZW5kcmVnbm87IGkrKykKIAlpZiAoIWZp eGVkX3JlZ3NbaV0gJiYgVEVTVF9IQVJEX1JFR19CSVQgKG5ld3BhdF91c2VkX3JlZ3MsIGkpKQot CSAgcmV0dXJuIDA7CisJICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgIC8qIFNjYW4gYmFja3dh cmRzIHVudGlsIHdlIGZpbmQgYSBSRUdfREVBRCBub3RlLCBTRVQsIENMT0JCRVIsIG9yCkBAIC0x Mzg0NSwxNCArMTM4NTMsMTQgQEAgcmVnX2RlYWRfYXRfcCAocnR4IHJlZywgcnR4X2luc24gKmlu c24pCiAgICAgICBpZiAoSU5TTl9QIChpbnNuKSkKICAgICAgICAgewogCSAgaWYgKGZpbmRfcmVn bm9fbm90ZSAoaW5zbiwgUkVHX1VOVVNFRCwgcmVnX2RlYWRfcmVnbm8pKQotCSAgICByZXR1cm4g MTsKKwkgICAgcmV0dXJuIHRydWU7CiAKIAkgIG5vdGVfc3RvcmVzIChpbnNuLCByZWdfZGVhZF9h dF9wXzEsIE5VTEwpOwogCSAgaWYgKHJlZ19kZWFkX2ZsYWcpCiAJICAgIHJldHVybiByZWdfZGVh ZF9mbGFnID09IDEgPyAxIDogMDsKIAogCSAgaWYgKGZpbmRfcmVnbm9fbm90ZSAoaW5zbiwgUkVH X0RFQUQsIHJlZ19kZWFkX3JlZ25vKSkKLQkgICAgcmV0dXJuIDE7CisJICAgIHJldHVybiB0cnVl OwogICAgICAgICB9CiAKICAgICAgIGlmIChpbnNuID09IEJCX0hFQUQgKGJsb2NrKSkKQEAgLTEz ODY0LDkgKzEzODcyLDkgQEAgcmVnX2RlYWRfYXRfcCAocnR4IHJlZywgcnR4X2luc24gKmluc24p CiAgIC8qIExvb2sgYXQgbGl2ZS1pbiBzZXRzIGZvciB0aGUgYmFzaWMgYmxvY2sgdGhhdCB3ZSB3 ZXJlIGluLiAgKi8KICAgZm9yIChpID0gcmVnX2RlYWRfcmVnbm87IGkgPCByZWdfZGVhZF9lbmRy ZWdubzsgaSsrKQogICAgIGlmIChSRUdOT19SRUdfU0VUX1AgKGRmX2dldF9saXZlX2luIChibG9j ayksIGkpKQotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgcmV0dXJu IDE7CisgIHJldHVybiB0cnVlOwogfQogDAogLyogTm90ZSBoYXJkIHJlZ2lzdGVycyBpbiBYIHRo YXQgYXJlIHVzZWQuICAqLwpAQCAtMTQxNDQsMTAgKzE0MTUyLDEwIEBAIG1vdmVfZGVhdGhzIChy dHggeCwgcnR4IG1heWJlX2tpbGxfaW5zbiwgaW50IGZyb21fbHVpZCwgcnR4X2luc24gKnRvX2lu c24sCiAgICAgfQogfQogDAotLyogUmV0dXJuIDEgaWYgWCBpcyB0aGUgdGFyZ2V0IG9mIGEgYml0 LWZpZWxkIGFzc2lnbm1lbnQgaW4gQk9EWSwgdGhlCisvKiBSZXR1cm4gdHJ1ZSBpZiBYIGlzIHRo ZSB0YXJnZXQgb2YgYSBiaXQtZmllbGQgYXNzaWdubWVudCBpbiBCT0RZLCB0aGUKICAgIHBhdHRl cm4gb2YgYW4gaW5zbi4gIFggbXVzdCBiZSBhIFJFRy4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRp YyBib29sCiByZWdfYml0ZmllbGRfdGFyZ2V0X3AgKHJ0eCB4LCBydHggYm9keSkKIHsKICAgaW50 IGk7CkBAIC0xNDE2MywxMyArMTQxNzEsMTMgQEAgcmVnX2JpdGZpZWxkX3RhcmdldF9wIChydHgg eCwgcnR4IGJvZHkpCiAgICAgICBlbHNlIGlmIChHRVRfQ09ERSAoZGVzdCkgPT0gU1RSSUNUX0xP V19QQVJUKQogCXRhcmdldCA9IFNVQlJFR19SRUcgKFhFWFAgKGRlc3QsIDApKTsKICAgICAgIGVs c2UKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAgIGlmIChHRVRfQ09ERSAodGFy Z2V0KSA9PSBTVUJSRUcpCiAJdGFyZ2V0ID0gU1VCUkVHX1JFRyAodGFyZ2V0KTsKIAogICAgICAg aWYgKCFSRUdfUCAodGFyZ2V0KSkKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAg IHRyZWdubyA9IFJFR05PICh0YXJnZXQpLCByZWdubyA9IFJFR05PICh4KTsKICAgICAgIGlmICh0 cmVnbm8gPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSIHx8IHJlZ25vID49IEZJUlNUX1BTRVVET19S RUdJU1RFUikKQEAgLTE0MTg0LDkgKzE0MTkyLDkgQEAgcmVnX2JpdGZpZWxkX3RhcmdldF9wIChy dHggeCwgcnR4IGJvZHkpCiAgIGVsc2UgaWYgKEdFVF9DT0RFIChib2R5KSA9PSBQQVJBTExFTCkK ICAgICBmb3IgKGkgPSBYVkVDTEVOIChib2R5LCAwKSAtIDE7IGkgPj0gMDsgaS0tKQogICAgICAg aWYgKHJlZ19iaXRmaWVsZF90YXJnZXRfcCAoeCwgWFZFQ0VYUCAoYm9keSwgMCwgaSkpKQotCXJl dHVybiAxOworCXJldHVybiB0cnVlOwogCi0gIHJldHVybiAwOworICByZXR1cm4gZmFsc2U7CiB9 CiAMCiAvKiBHaXZlbiBhIGNoYWluIG9mIFJFR19OT1RFUyBvcmlnaW5hbGx5IGZyb20gRlJPTV9J TlNOLCB0cnkgdG8gcGxhY2UgdGhlbQpAQCAtMTQ5ODgsNyArMTQ5OTYsNyBAQCBtYWtlX21vcmVf Y29waWVzICh2b2lkKQogfQogCiAvKiBUcnkgY29tYmluaW5nIGluc25zIHRocm91Z2ggc3Vic3Rp dHV0aW9uLiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKK3N0YXRpYyB2b2lkCiByZXN0X29mX2hh bmRsZV9jb21iaW5lICh2b2lkKQogewogICBtYWtlX21vcmVfY29waWVzICgpOwpAQCAtMTUwMDAs NyArMTUwMDgsNyBAQCByZXN0X29mX2hhbmRsZV9jb21iaW5lICh2b2lkKQogICByZWdzdGF0X2lu aXRfbl9zZXRzX2FuZF9yZWZzICgpOwogICByZWdfbl9zZXRzX21heCA9IG1heF9yZWdfbnVtICgp OwogCi0gIGludCByZWJ1aWxkX2p1bXBfbGFiZWxzX2FmdGVyX2NvbWJpbmUKKyAgYm9vbCByZWJ1 aWxkX2p1bXBfbGFiZWxzX2FmdGVyX2NvbWJpbmUKICAgICA9IGNvbWJpbmVfaW5zdHJ1Y3Rpb25z IChnZXRfaW5zbnMgKCksIG1heF9yZWdfbnVtICgpKTsKIAogICAvKiBDb21iaW5pbmcgaW5zbnMg bWF5IGhhdmUgdHVybmVkIGFuIGluZGlyZWN0IGp1bXAgaW50byBhCkBAIC0xNTAxNyw3ICsxNTAy NSw2IEBAIHJlc3Rfb2ZfaGFuZGxlX2NvbWJpbmUgKHZvaWQpCiAgICAgfQogCiAgIHJlZ3N0YXRf ZnJlZV9uX3NldHNfYW5kX3JlZnMgKCk7Ci0gIHJldHVybiAwOwogfQogCiBuYW1lc3BhY2UgewpA QCAtMTUwNDYsNyArMTUwNTMsOCBAQCBwdWJsaWM6CiAgIGJvb2wgZ2F0ZSAoZnVuY3Rpb24gKikg ZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gKG9wdGltaXplID4gMCk7IH0KICAgdW5zaWduZWQgaW50 IGV4ZWN1dGUgKGZ1bmN0aW9uICopIGZpbmFsIG92ZXJyaWRlCiAgICAgewotICAgICAgcmV0dXJu IHJlc3Rfb2ZfaGFuZGxlX2NvbWJpbmUgKCk7CisgICAgICByZXN0X29mX2hhbmRsZV9jb21iaW5l ICgpOworICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiB9OyAvLyBjbGFzcyBwYXNzX2NvbWJpbmUK --000000000000d49b2a0600b479b1--