From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) by sourceware.org (Postfix) with ESMTPS id 61EEE3858D32 for ; Mon, 29 May 2023 14:38:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 61EEE3858D32 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-qv1-xf2d.google.com with SMTP id 6a1803df08f44-6261d4ea5f0so4982776d6.0 for ; Mon, 29 May 2023 07:38:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685371135; x=1687963135; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=1ba4msOOG1wfHXJKtJ7pdB030RJyahtyRpjKYcV4pnk=; b=O5Na71NcXPS+kFtNkt8O2NoSMVLL6Kc8OEYr2b9hctXJpHSULLAu77ScUtEXqwM4lU PwjK8YIYljTCp5tIsZsZa4aTI9r9C2p6nZmTyu+NwT5ojrJ0NgP/HOu57fJs8Gq10PV3 cKhbTXpzf2F+sxkYa6fSryXnfrj/r6ea2ZPpuvHK7meFI9+7HYhcJfAnHptGZvUmr0Zh PJk1rmiyfhbyHn8fZv9l3qTMb7r0AerH2IdbKcTaCiqE6Z6RQUzNMgLf2wL0fpj914MF ThnwosZL8Nf1vWPeQRmk8CWDY65bQpq3rn+1RsXXq7k4YVB2WbYISAyIwHTmTVrIqbc0 wTFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685371135; x=1687963135; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=1ba4msOOG1wfHXJKtJ7pdB030RJyahtyRpjKYcV4pnk=; b=RadPbwks+mtK/HsJfI6az8DqpLqGIPIMizrSsyOGr8T0g2pLNdTvL+ELaSNOrCV63z Wz96b1+1NEv7+714F1qn8s/ZVL3sxHjCl+wOnqs6guFRIaY/CAe/jSOpBnfur6LeXw0Y kl6fMa/IhqwP0+8cieDPM9ydQnz7v2K4rKep+lVcT9vUiAduxEBJQKMOPBOkLh/1JPwh pMUEO24hwweQSmUGBDvFXgqf+kXNhjiL31bpfQXUo6DL8Dsq/GpDDlJj/UsWVaAENAmP DBxbwl1yPIpw1+tcUxuV3PQybjg6wb0wvR4oZHwzfCHqf2P778a4crZN8M12/L1+Bppd Lnkg== X-Gm-Message-State: AC+VfDy+QGi/xSfA9h392MAWzGoCCAA76e16nTLTYbmFN1ugIEE65Q34 uJo+tpwJBLnDRUumKBHj6Ix2Gl0f0BMA7qAN/cdSkbWuB+nwJA== X-Google-Smtp-Source: ACHHUZ5mo8+GYBZD4EVN9xdNE59GVlg0dHs2XpZI4ZPcLye35/IItD6Jv18vPcyURcy9GBR4G0ZR93AXCGvccaUae6Q= X-Received: by 2002:a05:6214:1ccd:b0:5ef:422c:be7f with SMTP id g13-20020a0562141ccd00b005ef422cbe7fmr8409240qvd.12.1685371135479; Mon, 29 May 2023 07:38:55 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Mon, 29 May 2023 16:38:44 +0200 Message-ID: Subject: [PATCH] rtlanal: Change return type of predicate functions from int to bool To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000d8919a05fcd60b2c" X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_STOCKGEN,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: --000000000000d8919a05fcd60b2c Content-Type: text/plain; charset="UTF-8" gcc/ChangeLog: * rtl.h (rtx_addr_can_trap_p): Change return type from int to bool. (rtx_unstable_p): Ditto. (reg_mentioned_p): Ditto. (reg_referenced_p): Ditto. (reg_used_between_p): Ditto. (reg_set_between_p): Ditto. (modified_between_p): Ditto. (no_labels_between_p): Ditto. (modified_in_p): Ditto. (reg_set_p): Ditto. (multiple_sets): Ditto. (set_noop_p): Ditto. (noop_move_p): Ditto. (reg_overlap_mentioned_p): Ditto. (dead_or_set_p): Ditto. (dead_or_set_regno_p): Ditto. (find_reg_fusage): Ditto. (find_regno_fusage): Ditto. (side_effects_p): Ditto. (volatile_refs_p): Ditto. (volatile_insn_p): Ditto. (may_trap_p_1): Ditto. (may_trap_p): Ditto. (may_trap_or_fault_p): Ditto. (computed_jump_p): Ditto. (auto_inc_p): Ditto. (loc_mentioned_in_p): Ditto. * rtlanal.cc (computed_jump_p_1): Adjust forward declaration. (rtx_unstable_p): Change return type from int to bool and adjust function body accordingly. (rtx_addr_can_trap_p): Ditto. (reg_mentioned_p): Ditto. (no_labels_between_p): Ditto. (reg_used_between_p): Ditto. (reg_referenced_p): Ditto. (reg_set_between_p): Ditto. (reg_set_p): Ditto. (modified_between_p): Ditto. (modified_in_p): Ditto. (multiple_sets): Ditto. (set_noop_p): Ditto. (noop_move_p): Ditto. (reg_overlap_mentioned_p): Ditto. (dead_or_set_p): Ditto. (dead_or_set_regno_p): Ditto. (find_reg_fusage): Ditto. (find_regno_fusage): Ditto. (remove_node_from_insn_list): Ditto. (volatile_insn_p): Ditto. (volatile_refs_p): Ditto. (side_effects_p): Ditto. (may_trap_p_1): Ditto. (may_trap_p): Ditto. (may_trap_or_fault_p): Ditto. (computed_jump_p): Ditto. (auto_inc_p): Ditto. (loc_mentioned_in_p): Ditto. * combine.cc (can_combine_p): Update indirect function. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. OK for master? Uros. --000000000000d8919a05fcd60b2c Content-Type: text/plain; charset="US-ASCII"; name="rtlanal.diff.txt" Content-Disposition: attachment; filename="rtlanal.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_li8yg1ts0 ZGlmZiAtLWdpdCBhL2djYy9jb21iaW5lLmNjIGIvZ2NjL2NvbWJpbmUuY2MKaW5kZXggYTIzY2Fl ZWQ5NmYuLjMwNGMwMjBlYzc5IDEwMDY0NAotLS0gYS9nY2MvY29tYmluZS5jYworKysgYi9nY2Mv Y29tYmluZS5jYwpAQCAtMTczNSw3ICsxNzM1LDcgQEAgY2FuX2NvbWJpbmVfcCAocnR4X2luc24g Kmluc24sIHJ0eF9pbnNuICppMywgcnR4X2luc24gKnByZWQgQVRUUklCVVRFX1VOVVNFRCwKICAg cnR4X2luc24gKnA7CiAgIHJ0eCBsaW5rOwogICBib29sIGFsbF9hZGphY2VudCA9IHRydWU7Ci0g IGludCAoKmlzX3ZvbGF0aWxlX3ApIChjb25zdF9ydHgpOworICBib29sICgqaXNfdm9sYXRpbGVf cCkgKGNvbnN0X3J0eCk7CiAKICAgaWYgKHN1Y2MpCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL3J0 bC5oIGIvZ2NjL3J0bC5oCmluZGV4IDM2NDc4MmI2MDYwLi40MDQxMjA3ZWZkOSAxMDA2NDQKLS0t IGEvZ2NjL3J0bC5oCisrKyBiL2djYy9ydGwuaApAQCAtMzYxMiw5ICszNjEyLDkgQEAgaW5saW5l IHJ0eCBzaW5nbGVfc2V0IChjb25zdCBydHhfaW5zbiAqaW5zbikKIH0KIAogZXh0ZXJuIHNjYWxh cl9pbnRfbW9kZSBnZXRfYWRkcmVzc19tb2RlIChydHggbWVtKTsKLWV4dGVybiBpbnQgcnR4X2Fk ZHJfY2FuX3RyYXBfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIHJ0eF9hZGRyX2Nhbl90cmFw X3AgKGNvbnN0X3J0eCk7CiBleHRlcm4gYm9vbCBub256ZXJvX2FkZHJlc3NfcCAoY29uc3RfcnR4 KTsKLWV4dGVybiBpbnQgcnR4X3Vuc3RhYmxlX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCBy dHhfdW5zdGFibGVfcCAoY29uc3RfcnR4KTsKIGV4dGVybiBib29sIHJ0eF92YXJpZXNfcCAoY29u c3RfcnR4LCBib29sKTsKIGV4dGVybiBib29sIHJ0eF9hZGRyX3Zhcmllc19wIChjb25zdF9ydHgs IGJvb2wpOwogZXh0ZXJuIHJ0eCBnZXRfY2FsbF9ydHhfZnJvbSAoY29uc3QgcnR4X2luc24gKik7 CkBAIC0zNjI2LDIyICszNjI2LDIyIEBAIGV4dGVybiB2b2lkIHNwbGl0X2NvbnN0IChydHgsIHJ0 eCAqLCBydHggKik7CiBleHRlcm4gcnR4IHN0cmlwX29mZnNldCAocnR4LCBwb2x5X2ludDY0X3Bv ZCAqKTsKIGV4dGVybiBwb2x5X2ludDY0IGdldF9hcmdzX3NpemUgKGNvbnN0X3J0eCk7CiBleHRl cm4gYm9vbCB1bnNpZ25lZF9yZWdfcCAocnR4KTsKLWV4dGVybiBpbnQgcmVnX21lbnRpb25lZF9w IChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCByZWdfbWVudGlvbmVkX3AgKGNv bnN0X3J0eCwgY29uc3RfcnR4KTsKIGV4dGVybiBpbnQgY291bnRfb2NjdXJyZW5jZXMgKGNvbnN0 X3J0eCwgY29uc3RfcnR4LCBpbnQpOwotZXh0ZXJuIGludCByZWdfcmVmZXJlbmNlZF9wIChjb25z dF9ydHgsIGNvbnN0X3J0eCk7Ci1leHRlcm4gaW50IHJlZ191c2VkX2JldHdlZW5fcCAoY29uc3Rf cnR4LCBjb25zdCBydHhfaW5zbiAqLCBjb25zdCBydHhfaW5zbiAqKTsKLWV4dGVybiBpbnQgcmVn X3NldF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCwgY29uc3QgcnR4X2luc24gKiwgY29uc3QgcnR4X2lu c24gKik7CitleHRlcm4gYm9vbCByZWdfcmVmZXJlbmNlZF9wIChjb25zdF9ydHgsIGNvbnN0X3J0 eCk7CitleHRlcm4gYm9vbCByZWdfdXNlZF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCwgY29uc3QgcnR4 X2luc24gKiwgY29uc3QgcnR4X2luc24gKik7CitleHRlcm4gYm9vbCByZWdfc2V0X2JldHdlZW5f cCAoY29uc3RfcnR4LCBjb25zdCBydHhfaW5zbiAqLCBjb25zdCBydHhfaW5zbiAqKTsKIGV4dGVy biBpbnQgY29tbXV0YXRpdmVfb3BlcmFuZF9wcmVjZWRlbmNlIChydHgpOwogZXh0ZXJuIGJvb2wg c3dhcF9jb21tdXRhdGl2ZV9vcGVyYW5kc19wIChydHgsIHJ0eCk7Ci1leHRlcm4gaW50IG1vZGlm aWVkX2JldHdlZW5fcCAoY29uc3RfcnR4LCBjb25zdCBydHhfaW5zbiAqLCBjb25zdCBydHhfaW5z biAqKTsKLWV4dGVybiBpbnQgbm9fbGFiZWxzX2JldHdlZW5fcCAoY29uc3QgcnR4X2luc24gKiwg Y29uc3QgcnR4X2luc24gKik7Ci1leHRlcm4gaW50IG1vZGlmaWVkX2luX3AgKGNvbnN0X3J0eCwg Y29uc3RfcnR4KTsKLWV4dGVybiBpbnQgcmVnX3NldF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7 Ci1leHRlcm4gaW50IG11bHRpcGxlX3NldHMgKGNvbnN0X3J0eCk7Ci1leHRlcm4gaW50IHNldF9u b29wX3AgKGNvbnN0X3J0eCk7Ci1leHRlcm4gaW50IG5vb3BfbW92ZV9wIChjb25zdCBydHhfaW5z biAqKTsKK2V4dGVybiBib29sIG1vZGlmaWVkX2JldHdlZW5fcCAoY29uc3RfcnR4LCBjb25zdCBy dHhfaW5zbiAqLCBjb25zdCBydHhfaW5zbiAqKTsKK2V4dGVybiBib29sIG5vX2xhYmVsc19iZXR3 ZWVuX3AgKGNvbnN0IHJ0eF9pbnNuICosIGNvbnN0IHJ0eF9pbnNuICopOworZXh0ZXJuIGJvb2wg bW9kaWZpZWRfaW5fcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgcmVnX3Nl dF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCBtdWx0aXBsZV9zZXRzIChj b25zdF9ydHgpOworZXh0ZXJuIGJvb2wgc2V0X25vb3BfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBi b29sIG5vb3BfbW92ZV9wIChjb25zdCBydHhfaW5zbiAqKTsKIGV4dGVybiBib29sIHJlZmVyc190 b19yZWdub19wICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgY29uc3RfcnR4LCBydHggKik7 Ci1leHRlcm4gaW50IHJlZ19vdmVybGFwX21lbnRpb25lZF9wIChjb25zdF9ydHgsIGNvbnN0X3J0 eCk7CitleHRlcm4gYm9vbCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoY29uc3RfcnR4LCBjb25z dF9ydHgpOwogZXh0ZXJuIGNvbnN0X3J0eCBzZXRfb2YgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsK IGV4dGVybiB2b2lkIHJlY29yZF9oYXJkX3JlZ19zZXRzIChydHgsIGNvbnN0X3J0eCwgdm9pZCAq KTsKIGV4dGVybiB2b2lkIHJlY29yZF9oYXJkX3JlZ191c2VzIChydHggKiwgdm9pZCAqKTsKQEAg LTM2NTIsMTQgKzM2NTIsMTQgQEAgZXh0ZXJuIHZvaWQgbm90ZV9wYXR0ZXJuX3N0b3JlcyAoY29u c3RfcnR4LAogZXh0ZXJuIHZvaWQgbm90ZV9zdG9yZXMgKGNvbnN0IHJ0eF9pbnNuICosCiAJCQkg dm9pZCAoKikgKHJ0eCwgY29uc3RfcnR4LCB2b2lkICopLCB2b2lkICopOwogZXh0ZXJuIHZvaWQg bm90ZV91c2VzIChydHggKiwgdm9pZCAoKikgKHJ0eCAqLCB2b2lkICopLCB2b2lkICopOwotZXh0 ZXJuIGludCBkZWFkX29yX3NldF9wIChjb25zdCBydHhfaW5zbiAqLCBjb25zdF9ydHgpOwotZXh0 ZXJuIGludCBkZWFkX29yX3NldF9yZWdub19wIChjb25zdCBydHhfaW5zbiAqLCB1bnNpZ25lZCBp bnQpOworZXh0ZXJuIGJvb2wgZGVhZF9vcl9zZXRfcCAoY29uc3QgcnR4X2luc24gKiwgY29uc3Rf cnR4KTsKK2V4dGVybiBib29sIGRlYWRfb3Jfc2V0X3JlZ25vX3AgKGNvbnN0IHJ0eF9pbnNuICos IHVuc2lnbmVkIGludCk7CiBleHRlcm4gcnR4IGZpbmRfcmVnX25vdGUgKGNvbnN0X3J0eCwgZW51 bSByZWdfbm90ZSwgY29uc3RfcnR4KTsKIGV4dGVybiBydHggZmluZF9yZWdub19ub3RlIChjb25z dF9ydHgsIGVudW0gcmVnX25vdGUsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gcnR4IGZpbmRfcmVn X2VxdWFsX2VxdWl2X25vdGUgKGNvbnN0X3J0eCk7CiBleHRlcm4gcnR4IGZpbmRfY29uc3RhbnRf c3JjIChjb25zdCBydHhfaW5zbiAqKTsKLWV4dGVybiBpbnQgZmluZF9yZWdfZnVzYWdlIChjb25z dF9ydHgsIGVudW0gcnR4X2NvZGUsIGNvbnN0X3J0eCk7Ci1leHRlcm4gaW50IGZpbmRfcmVnbm9f ZnVzYWdlIChjb25zdF9ydHgsIGVudW0gcnR4X2NvZGUsIHVuc2lnbmVkIGludCk7CitleHRlcm4g Ym9vbCBmaW5kX3JlZ19mdXNhZ2UgKGNvbnN0X3J0eCwgZW51bSBydHhfY29kZSwgY29uc3RfcnR4 KTsKK2V4dGVybiBib29sIGZpbmRfcmVnbm9fZnVzYWdlIChjb25zdF9ydHgsIGVudW0gcnR4X2Nv ZGUsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gcnR4IGFsbG9jX3JlZ19ub3RlIChlbnVtIHJlZ19u b3RlLCBydHgsIHJ0eCk7CiBleHRlcm4gdm9pZCBhZGRfcmVnX25vdGUgKHJ0eCwgZW51bSByZWdf bm90ZSwgcnR4KTsKIGV4dGVybiB2b2lkIGFkZF9pbnRfcmVnX25vdGUgKHJ0eF9pbnNuICosIGVu dW0gcmVnX25vdGUsIGludCk7CkBAIC0zNjY5LDEyICszNjY5LDEyIEBAIGV4dGVybiBydHggZHVw bGljYXRlX3JlZ19ub3RlIChydHgpOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX25vdGUgKHJ0eF9pbnNu ICosIGNvbnN0X3J0eCk7CiBleHRlcm4gYm9vbCByZW1vdmVfcmVnX2VxdWFsX2VxdWl2X25vdGVz IChydHhfaW5zbiAqLCBib29sID0gZmFsc2UpOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX3JlZ19lcXVh bF9lcXVpdl9ub3Rlc19mb3JfcmVnbm8gKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IHNpZGVf ZWZmZWN0c19wIChjb25zdF9ydHgpOwotZXh0ZXJuIGludCB2b2xhdGlsZV9yZWZzX3AgKGNvbnN0 X3J0eCk7Ci1leHRlcm4gaW50IHZvbGF0aWxlX2luc25fcCAoY29uc3RfcnR4KTsKLWV4dGVybiBp bnQgbWF5X3RyYXBfcF8xIChjb25zdF9ydHgsIHVuc2lnbmVkKTsKLWV4dGVybiBpbnQgbWF5X3Ry YXBfcCAoY29uc3RfcnR4KTsKLWV4dGVybiBpbnQgbWF5X3RyYXBfb3JfZmF1bHRfcCAoY29uc3Rf cnR4KTsKK2V4dGVybiBib29sIHNpZGVfZWZmZWN0c19wIChjb25zdF9ydHgpOworZXh0ZXJuIGJv b2wgdm9sYXRpbGVfcmVmc19wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgdm9sYXRpbGVfaW5z bl9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgbWF5X3RyYXBfcF8xIChjb25zdF9ydHgsIHVu c2lnbmVkKTsKK2V4dGVybiBib29sIG1heV90cmFwX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gYm9v bCBtYXlfdHJhcF9vcl9mYXVsdF9wIChjb25zdF9ydHgpOwogZXh0ZXJuIGJvb2wgY2FuX3Rocm93 X2ludGVybmFsIChjb25zdF9ydHgpOwogZXh0ZXJuIGJvb2wgY2FuX3Rocm93X2V4dGVybmFsIChj b25zdF9ydHgpOwogZXh0ZXJuIGJvb2wgaW5zbl9jb3VsZF90aHJvd19wIChjb25zdF9ydHgpOwpA QCAtMzY4OCw3ICszNjg4LDcgQEAgZXh0ZXJuIHZvaWQgcmVwbGFjZV9sYWJlbF9pbl9pbnNuIChy dHhfaW5zbiAqLCBydHhfaW5zbiAqLCBydHhfaW5zbiAqLCBib29sKTsKIGV4dGVybiBib29sIHJ0 eF9yZWZlcmVuY2VkX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKIGV4dGVybiBib29sIHRhYmxl anVtcF9wIChjb25zdCBydHhfaW5zbiAqLCBydHhfaW5zbiAqKiwgcnR4X2p1bXBfdGFibGVfZGF0 YSAqKik7CiBleHRlcm4gcnR4IHRhYmxlanVtcF9jYXNlc2lfcGF0dGVybiAoY29uc3QgcnR4X2lu c24gKmluc24pOwotZXh0ZXJuIGludCBjb21wdXRlZF9qdW1wX3AgKGNvbnN0IHJ0eF9pbnNuICop OworZXh0ZXJuIGJvb2wgY29tcHV0ZWRfanVtcF9wIChjb25zdCBydHhfaW5zbiAqKTsKIGV4dGVy biBib29sIHRsc19yZWZlcmVuY2VkX3AgKGNvbnN0X3J0eCk7CiBleHRlcm4gYm9vbCBjb250YWlu c19tZW1fcnR4X3AgKHJ0eCB4KTsKIGV4dGVybiBib29sIHJlZ2lzdGVyX2FzbV9wIChjb25zdF9y dHgpOwpAQCAtMzcyMSwxMCArMzcyMSwxMCBAQCBleHRlcm4gdW5zaWduZWQgaGFzaF9ydHhfY2Ig KGNvbnN0X3J0eCwgbWFjaGluZV9tb2RlLCBpbnQgKiwgaW50ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wsIGhhc2hfcnR4X2NhbGxiYWNrX2Z1bmN0aW9uKTsKIAogZXh0ZXJu IHJ0eCByZWdub191c2VfaW4gKHVuc2lnbmVkIGludCwgcnR4KTsKLWV4dGVybiBpbnQgYXV0b19p bmNfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGF1dG9faW5jX3AgKGNvbnN0X3J0eCk7CiBl eHRlcm4gYm9vbCBpbl9pbnNuX2xpc3RfcCAoY29uc3QgcnR4X2luc25fbGlzdCAqLCBjb25zdCBy dHhfaW5zbiAqKTsKIGV4dGVybiB2b2lkIHJlbW92ZV9ub2RlX2Zyb21faW5zbl9saXN0IChjb25z dCBydHhfaW5zbiAqLCBydHhfaW5zbl9saXN0ICoqKTsKLWV4dGVybiBpbnQgbG9jX21lbnRpb25l ZF9pbl9wIChydHggKiwgY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGxvY19tZW50aW9uZWRfaW5f cCAocnR4ICosIGNvbnN0X3J0eCk7CiBleHRlcm4gcnR4X2luc24gKmZpbmRfZmlyc3RfcGFyYW1l dGVyX2xvYWQgKHJ0eF9pbnNuICosIHJ0eF9pbnNuICopOwogZXh0ZXJuIGJvb2wga2VlcF93aXRo X2NhbGxfcCAoY29uc3QgcnR4X2luc24gKik7CiBleHRlcm4gYm9vbCBsYWJlbF9pc19qdW1wX3Rh cmdldF9wIChjb25zdF9ydHgsIGNvbnN0IHJ0eF9pbnNuICopOwpkaWZmIC0tZ2l0IGEvZ2NjL3J0 bGFuYWwuY2MgYi9nY2MvcnRsYW5hbC5jYwppbmRleCBiNzk0OGVjZmFkMS4uMzE3MDdmM2I5MGEg MTAwNjQ0Ci0tLSBhL2djYy9ydGxhbmFsLmNjCisrKyBiL2djYy9ydGxhbmFsLmNjCkBAIC00Myw3 ICs0Myw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiBzdGF0aWMgdm9pZCBzZXRfb2ZfMSAocnR4LCBjb25zdF9ydHgsIHZvaWQgKik7CiBzdGF0 aWMgYm9vbCBjb3ZlcnNfcmVnbm9fcCAoY29uc3RfcnR4LCB1bnNpZ25lZCBpbnQpOwogc3RhdGlj IGJvb2wgY292ZXJzX3JlZ25vX25vX3BhcmFsbGVsX3AgKGNvbnN0X3J0eCwgdW5zaWduZWQgaW50 KTsKLXN0YXRpYyBpbnQgY29tcHV0ZWRfanVtcF9wXzEgKGNvbnN0X3J0eCk7CitzdGF0aWMgYm9v bCBjb21wdXRlZF9qdW1wX3BfMSAoY29uc3RfcnR4KTsKIHN0YXRpYyB2b2lkIHBhcm1zX3NldCAo cnR4LCBjb25zdF9ydHgsIHZvaWQgKik7CiAKIHN0YXRpYyB1bnNpZ25lZCBIT1NUX1dJREVfSU5U IGNhY2hlZF9ub256ZXJvX2JpdHMgKGNvbnN0X3J0eCwgc2NhbGFyX2ludF9tb2RlLApAQCAtMTk3 LDEyICsxOTcsMTIgQEAgdGVtcGxhdGUgY2xhc3MgZ2VuZXJpY19zdWJydHhfaXRlcmF0b3IgPGNv bnN0X3J0eF9hY2Nlc3Nvcj47CiB0ZW1wbGF0ZSBjbGFzcyBnZW5lcmljX3N1YnJ0eF9pdGVyYXRv ciA8cnR4X3Zhcl9hY2Nlc3Nvcj47CiB0ZW1wbGF0ZSBjbGFzcyBnZW5lcmljX3N1YnJ0eF9pdGVy YXRvciA8cnR4X3B0cl9hY2Nlc3Nvcj47CiAKLS8qIFJldHVybiAxIGlmIHRoZSB2YWx1ZSBvZiBY IGlzIHVuc3RhYmxlCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgWCBpcyB1bnN0YWJs ZQogICAgKHdvdWxkIGJlIGRpZmZlcmVudCBhdCBhIGRpZmZlcmVudCBwb2ludCBpbiB0aGUgcHJv Z3JhbSkuCiAgICBUaGUgZnJhbWUgcG9pbnRlciwgYXJnIHBvaW50ZXIsIGV0Yy4gYXJlIGNvbnNp ZGVyZWQgc3RhYmxlCiAgICAod2l0aGluIG9uZSBmdW5jdGlvbikgYW5kIHNvIGlzIGFueXRoaW5n IG1hcmtlZCBgdW5jaGFuZ2luZycuICAqLwogCi1pbnQKK2Jvb2wKIHJ0eF91bnN0YWJsZV9wIChj b25zdF9ydHggeCkKIHsKICAgY29uc3QgUlRYX0NPREUgY29kZSA9IEdFVF9DT0RFICh4KTsKQEAg LTIxOCwyNCArMjE4LDI0IEBAIHJ0eF91bnN0YWJsZV9wIChjb25zdF9ydHggeCkKICAgICBDQVNF X0NPTlNUX0FOWToKICAgICBjYXNlIFNZTUJPTF9SRUY6CiAgICAgY2FzZSBMQUJFTF9SRUY6Ci0g ICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgUkVHOgogICAg ICAgLyogQXMgaW4gcnR4X3Zhcmllc19wLCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFsIHJ0eCwg bm90IHJlZyBudW1iZXIuICAqLwogICAgICAgaWYgKHggPT0gZnJhbWVfcG9pbnRlcl9ydHggfHwg eCA9PSBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4CiAJICAvKiBUaGUgYXJnIHBvaW50ZXIgdmFyaWVz IGlmIGl0IGlzIG5vdCBhIGZpeGVkIHJlZ2lzdGVyLiAgKi8KIAkgIHx8ICh4ID09IGFyZ19wb2lu dGVyX3J0eCAmJiBmaXhlZF9yZWdzW0FSR19QT0lOVEVSX1JFR05VTV0pKQotCXJldHVybiAwOwor CXJldHVybiBmYWxzZTsKICAgICAgIC8qID8/PyBXaGVuIGNhbGwtY2xvYmJlcmVkLCB0aGUgdmFs dWUgaXMgc3RhYmxlIG1vZHVsbyB0aGUgcmVzdG9yZQogCSB0aGF0IG11c3QgaGFwcGVuIGFmdGVy IGEgY2FsbC4gIFRoaXMgY3VycmVudGx5IHNjcmV3cyB1cCBsb2NhbC1hbGxvYwogCSBpbnRvIGJl bGlldmluZyB0aGF0IHRoZSByZXN0b3JlIGlzIG5vdCBuZWVkZWQuICAqLwogICAgICAgaWYgKCFQ SUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxMX0NMT0JCRVJFRCAmJiB4ID09IHBpY19vZmZzZXRfdGFi bGVfcnR4KQotCXJldHVybiAwOwotICAgICAgcmV0dXJuIDE7CisJcmV0dXJuIGZhbHNlOworICAg ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEFTTV9PUEVSQU5EUzoKICAgICAgIGlmIChNRU1f Vk9MQVRJTEVfUCAoeCkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAKICAgICAgIC8qIEZh bGwgdGhyb3VnaC4gICovCiAKQEAgLTI0OCwyMSArMjQ4LDIxIEBAIHJ0eF91bnN0YWJsZV9wIChj b25zdF9ydHggeCkKICAgICBpZiAoZm10W2ldID09ICdlJykKICAgICAgIHsKIAlpZiAocnR4X3Vu c3RhYmxlX3AgKFhFWFAgKHgsIGkpKSkKLQkgIHJldHVybiAxOworCSAgcmV0dXJuIHRydWU7CiAg ICAgICB9CiAgICAgZWxzZSBpZiAoZm10W2ldID09ICdFJykKICAgICAgIHsKIAlpbnQgajsKIAlm b3IgKGogPSAwOyBqIDwgWFZFQ0xFTiAoeCwgaSk7IGorKykKIAkgIGlmIChydHhfdW5zdGFibGVf cCAoWFZFQ0VYUCAoeCwgaSwgaikpKQotCSAgICByZXR1cm4gMTsKKwkgICAgcmV0dXJuIHRydWU7 CiAgICAgICB9CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAotLyogUmV0dXJu IDEgaWYgWCBoYXMgYSB2YWx1ZSB0aGF0IGNhbiB2YXJ5IGV2ZW4gYmV0d2VlbiB0d28KLSAgIGV4 ZWN1dGlvbnMgb2YgdGhlIHByb2dyYW0uICAwIG1lYW5zIFggY2FuIGJlIGNvbXBhcmVkIHJlbGlh Ymx5CisvKiBSZXR1cm4gdHJ1ZSBpZiBYIGhhcyBhIHZhbHVlIHRoYXQgY2FuIHZhcnkgZXZlbiBi ZXR3ZWVuIHR3bworICAgZXhlY3V0aW9ucyBvZiB0aGUgcHJvZ3JhbS4gIGZhbHNlIG1lYW5zIFgg Y2FuIGJlIGNvbXBhcmVkIHJlbGlhYmx5CiAgICBhZ2FpbnN0IGNlcnRhaW4gY29uc3RhbnRzIG9y IG5lYXItY29uc3RhbnRzLgogICAgRk9SX0FMSUFTIGlzIG5vbnplcm8gaWYgd2UgYXJlIGNhbGxl ZCBmcm9tIGFsaWFzIGFuYWx5c2lzOyBpZiBpdCBpcwogICAgemVybywgd2UgYXJlIHNsaWdodGx5 IG1vcmUgY29uc2VydmF0aXZlLgpAQCAtMjc2LDcgKzI3Niw3IEBAIHJ0eF92YXJpZXNfcCAoY29u c3RfcnR4IHgsIGJvb2wgZm9yX2FsaWFzKQogICBjb25zdCBjaGFyICpmbXQ7CiAKICAgaWYgKCF4 KQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsKIAogICBjb2RlID0gR0VUX0NPREUg KHgpOwogICBzd2l0Y2ggKGNvZGUpCkBAIC0yODgsNyArMjg4LDcgQEAgcnR4X3Zhcmllc19wIChj b25zdF9ydHggeCwgYm9vbCBmb3JfYWxpYXMpCiAgICAgQ0FTRV9DT05TVF9BTlk6CiAgICAgY2Fz ZSBTWU1CT0xfUkVGOgogICAgIGNhc2UgTEFCRUxfUkVGOgotICAgICAgcmV0dXJuIDA7CisgICAg ICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIFJFRzoKICAgICAgIC8qIE5vdGUgdGhhdCB3ZSBo YXZlIHRvIHRlc3QgZm9yIHRoZSBhY3R1YWwgcnR4IHVzZWQgZm9yIHRoZSBmcmFtZQpAQCAtMjk4 LDE1ICsyOTgsMTUgQEAgcnR4X3Zhcmllc19wIChjb25zdF9ydHggeCwgYm9vbCBmb3JfYWxpYXMp CiAgICAgICBpZiAoeCA9PSBmcmFtZV9wb2ludGVyX3J0eCB8fCB4ID09IGhhcmRfZnJhbWVfcG9p bnRlcl9ydHgKIAkgIC8qIFRoZSBhcmcgcG9pbnRlciB2YXJpZXMgaWYgaXQgaXMgbm90IGEgZml4 ZWQgcmVnaXN0ZXIuICAqLwogCSAgfHwgKHggPT0gYXJnX3BvaW50ZXJfcnR4ICYmIGZpeGVkX3Jl Z3NbQVJHX1BPSU5URVJfUkVHTlVNXSkpCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogICAg ICAgaWYgKHggPT0gcGljX29mZnNldF90YWJsZV9ydHgKIAkgIC8qID8/PyBXaGVuIGNhbGwtY2xv YmJlcmVkLCB0aGUgdmFsdWUgaXMgc3RhYmxlIG1vZHVsbyB0aGUgcmVzdG9yZQogCSAgICAgdGhh dCBtdXN0IGhhcHBlbiBhZnRlciBhIGNhbGwuICBUaGlzIGN1cnJlbnRseSBzY3Jld3MgdXAKIAkg ICAgIGxvY2FsLWFsbG9jIGludG8gYmVsaWV2aW5nIHRoYXQgdGhlIHJlc3RvcmUgaXMgbm90IG5l ZWRlZCwgc28gd2UKIAkgICAgIG11c3QgcmV0dXJuIDAgb25seSBpZiB3ZSBhcmUgY2FsbGVkIGZy b20gYWxpYXMgYW5hbHlzaXMuICAqLwogCSAgJiYgKCFQSUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxM X0NMT0JCRVJFRCB8fCBmb3JfYWxpYXMpKQotCXJldHVybiAwOwotICAgICAgcmV0dXJuIDE7CisJ cmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIExPX1NVTToKICAg ICAgIC8qIFRoZSBvcGVyYW5kIDAgb2YgYSBMT19TVU0gaXMgY29uc2lkZXJlZCBjb25zdGFudApA QCAtMzE3LDcgKzMxNyw3IEBAIHJ0eF92YXJpZXNfcCAoY29uc3RfcnR4IHgsIGJvb2wgZm9yX2Fs aWFzKQogCiAgICAgY2FzZSBBU01fT1BFUkFORFM6CiAgICAgICBpZiAoTUVNX1ZPTEFUSUxFX1Ag KHgpKQotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogCiAgICAgICAvKiBGYWxsIHRocm91Z2gu ICAqLwogCkBAIC0zMzAsMTcgKzMzMCwxNyBAQCBydHhfdmFyaWVzX3AgKGNvbnN0X3J0eCB4LCBi b29sIGZvcl9hbGlhcykKICAgICBpZiAoZm10W2ldID09ICdlJykKICAgICAgIHsKIAlpZiAocnR4 X3Zhcmllc19wIChYRVhQICh4LCBpKSwgZm9yX2FsaWFzKSkKLQkgIHJldHVybiAxOworCSAgcmV0 dXJuIHRydWU7CiAgICAgICB9CiAgICAgZWxzZSBpZiAoZm10W2ldID09ICdFJykKICAgICAgIHsK IAlpbnQgajsKIAlmb3IgKGogPSAwOyBqIDwgWFZFQ0xFTiAoeCwgaSk7IGorKykKIAkgIGlmIChy dHhfdmFyaWVzX3AgKFhWRUNFWFAgKHgsIGksIGopLCBmb3JfYWxpYXMpKQotCSAgICByZXR1cm4g MTsKKwkgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBm YWxzZTsKIH0KIAogLyogQ29tcHV0ZSBhbiBhcHByb3hpbWF0aW9uIGZvciB0aGUgb2Zmc2V0IGJl dHdlZW4gdGhlIHJlZ2lzdGVyCkBAIC00NTQsMTIgKzQ1NCwxMiBAQCBnZXRfaW5pdGlhbF9yZWdp c3Rlcl9vZmZzZXQgKGludCBmcm9tLCBpbnQgdG8pCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIFJl dHVybiBub256ZXJvIGlmIHRoZSB1c2Ugb2YgWCtPRkZTRVQgYXMgYW4gYWRkcmVzcyBpbiBhIE1F TSB3aXRoIFNJWkUKKy8qIFJldHVybiB0cnVlIGlmIHRoZSB1c2Ugb2YgWCtPRkZTRVQgYXMgYW4g YWRkcmVzcyBpbiBhIE1FTSB3aXRoIFNJWkUKICAgIGJ5dGVzIGNhbiBjYXVzZSBhIHRyYXAuICBN T0RFIGlzIHRoZSBtb2RlIG9mIHRoZSBNRU0gKG5vdCB0aGF0IG9mIFgpIGFuZAotICAgVU5BTElH TkVEX01FTVMgY29udHJvbHMgd2hldGhlciBub256ZXJvIGlzIHJldHVybmVkIGZvciB1bmFsaWdu ZWQgbWVtb3J5CisgICBVTkFMSUdORURfTUVNUyBjb250cm9scyB3aGV0aGVyIHRydWUgaXMgcmV0 dXJuZWQgZm9yIHVuYWxpZ25lZCBtZW1vcnkKICAgIHJlZmVyZW5jZXMgb24gc3RyaWN0IGFsaWdu bWVudCBtYWNoaW5lcy4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBydHhfYWRkcl9j YW5fdHJhcF9wXzEgKGNvbnN0X3J0eCB4LCBwb2x5X2ludDY0IG9mZnNldCwgcG9seV9pbnQ2NCBz aXplLAogCQkgICAgICAgbWFjaGluZV9tb2RlIG1vZGUsIGJvb2wgdW5hbGlnbmVkX21lbXMpCiB7 CkBAIC00ODgsMjEgKzQ4OCwyMSBAQCBydHhfYWRkcl9jYW5fdHJhcF9wXzEgKGNvbnN0X3J0eCB4 LCBwb2x5X2ludDY0IG9mZnNldCwgcG9seV9pbnQ2NCBzaXplLAogI2VuZGlmCiAKICAgICAgIGlm ICghbXVsdGlwbGVfcCAoYWN0dWFsX29mZnNldCwgR0VUX01PREVfU0laRSAobW9kZSkpKQotCXJl dHVybiAxOworCXJldHVybiB0cnVlOwogICAgIH0KIAogICBzd2l0Y2ggKGNvZGUpCiAgICAgewog ICAgIGNhc2UgU1lNQk9MX1JFRjoKICAgICAgIGlmIChTWU1CT0xfUkVGX1dFQUsgKHgpKQotCXJl dHVybiAxOworCXJldHVybiB0cnVlOwogICAgICAgaWYgKCFDT05TVEFOVF9QT09MX0FERFJFU1Nf UCAoeCkgJiYgIVNZTUJPTF9SRUZfRlVOQ1RJT05fUCAoeCkpCiAJewogCSAgdHJlZSBkZWNsOwog CSAgcG9seV9pbnQ2NCBkZWNsX3NpemU7CiAKIAkgIGlmIChtYXliZV9sdCAob2Zmc2V0LCAwKSkK LQkgICAgcmV0dXJuIDE7CisJICAgIHJldHVybiB0cnVlOwogCSAgaWYgKCFrbm93bl9zaXplX3Ag KHNpemUpKQogCSAgICByZXR1cm4gbWF5YmVfbmUgKG9mZnNldCwgMCk7CiAKQEAgLTUzMSwxMCAr NTMxLDEwIEBAIHJ0eF9hZGRyX2Nhbl90cmFwX3BfMSAoY29uc3RfcnR4IHgsIHBvbHlfaW50NjQg b2Zmc2V0LCBwb2x5X2ludDY0IHNpemUsCiAJCSAgOiAha25vd25fc3VicmFuZ2VfcCAob2Zmc2V0 LCBzaXplLCAwLCBkZWNsX3NpemUpKTsKICAgICAgICAgfQogCi0gICAgICByZXR1cm4gMDsKKyAg ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgTEFCRUxfUkVGOgotICAgICAgcmV0dXJuIDA7 CisgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIFJFRzoKICAgICAgIC8qIFN0YWNrIHJl ZmVyZW5jZXMgYXJlIGFzc3VtZWQgbm90IHRvIHRyYXAsIGJ1dCB3ZSBuZWVkIHRvIGRlYWwgd2l0 aApAQCAtNTUzLDcgKzU1Myw3IEBAIHJ0eF9hZGRyX2Nhbl90cmFwX3BfMSAoY29uc3RfcnR4IHgs IHBvbHlfaW50NjQgb2Zmc2V0LCBwb2x5X2ludDY0IHNpemUsCiAJICBwb2x5X2ludDY0IGxvd19i b3VuZCwgaGlnaF9ib3VuZDsKIAogCSAgaWYgKCFrbm93bl9zaXplX3AgKHNpemUpKQotCSAgICBy ZXR1cm4gMTsKKwkgICAgcmV0dXJuIHRydWU7CiAKIAkgIGlmICh4ID09IGZyYW1lX3BvaW50ZXJf cnR4KQogCSAgICB7CkBAIC02MzksMTMgKzYzOSwxMyBAQCBydHhfYWRkcl9jYW5fdHJhcF9wXzEg KGNvbnN0X3J0eCB4LCBwb2x5X2ludDY0IG9mZnNldCwgcG9seV9pbnQ2NCBzaXplLAogCiAJICBp ZiAoa25vd25fZ2UgKG9mZnNldCwgbG93X2JvdW5kKQogCSAgICAgICYmIGtub3duX2xlIChvZmZz ZXQsIGhpZ2hfYm91bmQgLSBzaXplKSkKLQkgICAgcmV0dXJuIDA7Ci0JICByZXR1cm4gMTsKKwkg ICAgcmV0dXJuIGZhbHNlOworCSAgcmV0dXJuIHRydWU7CiAJfQogICAgICAgLyogQWxsIG9mIHRo ZSB2aXJ0dWFsIGZyYW1lIHJlZ2lzdGVycyBhcmUgc3RhY2sgcmVmZXJlbmNlcy4gICovCiAgICAg ICBpZiAoVklSVFVBTF9SRUdJU1RFUl9QICh4KSkKLQlyZXR1cm4gMDsKLSAgICAgIHJldHVybiAx OworCXJldHVybiBmYWxzZTsKKyAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBDT05TVDoK ICAgICAgIHJldHVybiBydHhfYWRkcl9jYW5fdHJhcF9wXzEgKFhFWFAgKHgsIDApLCBvZmZzZXQs IHNpemUsCkBAIC02NTgsMTUgKzY1OCwxNSBAQCBydHhfYWRkcl9jYW5fdHJhcF9wXzEgKGNvbnN0 X3J0eCB4LCBwb2x5X2ludDY0IG9mZnNldCwgcG9seV9pbnQ2NCBzaXplLAogCSAgJiYgR0VUX0NP REUgKFhFWFAgKHgsIDEpKSA9PSBDT05TVAogCSAgJiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKHgs IDEpLCAwKSkgPT0gVU5TUEVDCiAJICAmJiBrbm93bl9lcSAob2Zmc2V0LCAwKSkKLQlyZXR1cm4g MDsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAgIC8qIC0gb3IgaXQgaXMgYW4gYWRkcmVzcyB0aGF0 IGNhbid0IHRyYXAgcGx1cyBhIGNvbnN0YW50IGludGVnZXIuICAqLwogICAgICAgaWYgKHBvbHlf aW50X3J0eF9wIChYRVhQICh4LCAxKSwgJmNvbnN0X3gxKQogCSAgJiYgIXJ0eF9hZGRyX2Nhbl90 cmFwX3BfMSAoWEVYUCAoeCwgMCksIG9mZnNldCArIGNvbnN0X3gxLAogCQkJCSAgICAgc2l6ZSwg bW9kZSwgdW5hbGlnbmVkX21lbXMpKQotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsKIAotICAg ICAgcmV0dXJuIDE7CisgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTE9fU1VNOgogICAg IGNhc2UgUFJFX01PRElGWToKQEAgLTY4NiwxMiArNjg2LDEyIEBAIHJ0eF9hZGRyX2Nhbl90cmFw X3BfMSAoY29uc3RfcnR4IHgsIHBvbHlfaW50NjQgb2Zmc2V0LCBwb2x5X2ludDY0IHNpemUsCiAg ICAgfQogCiAgIC8qIElmIGl0IGlzbid0IG9uZSBvZiB0aGUgY2FzZSBhYm92ZSwgaXQgY2FuIGNh dXNlIGEgdHJhcC4gICovCi0gIHJldHVybiAxOworICByZXR1cm4gdHJ1ZTsKIH0KIAotLyogUmV0 dXJuIG5vbnplcm8gaWYgdGhlIHVzZSBvZiBYIGFzIGFuIGFkZHJlc3MgaW4gYSBNRU0gY2FuIGNh dXNlIGEgdHJhcC4gICovCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdXNlIG9mIFggYXMgYW4gYWRk cmVzcyBpbiBhIE1FTSBjYW4gY2F1c2UgYSB0cmFwLiAgKi8KIAotaW50Citib29sCiBydHhfYWRk cl9jYW5fdHJhcF9wIChjb25zdF9ydHggeCkKIHsKICAgcmV0dXJuIHJ0eF9hZGRyX2Nhbl90cmFw X3BfMSAoeCwgMCwgLTEsIEJMS21vZGUsIGZhbHNlKTsKQEAgLTc3Niw3ICs3NzYsNyBAQCBub256 ZXJvX2FkZHJlc3NfcCAoY29uc3RfcnR4IHgpCiAgIHJldHVybiBmYWxzZTsKIH0KIAotLyogUmV0 dXJuIDEgaWYgWCByZWZlcnMgdG8gYSBtZW1vcnkgbG9jYXRpb24gd2hvc2UgYWRkcmVzcworLyog UmV0dXJuIHRydWUgaWYgWCByZWZlcnMgdG8gYSBtZW1vcnkgbG9jYXRpb24gd2hvc2UgYWRkcmVz cwogICAgY2Fubm90IGJlIGNvbXBhcmVkIHJlbGlhYmx5IHdpdGggY29uc3RhbnQgYWRkcmVzc2Vz LAogICAgb3IgaWYgWCByZWZlcnMgdG8gYSBCTEttb2RlIG1lbW9yeSBvYmplY3QuCiAgICBGT1Jf QUxJQVMgaXMgbm9uemVybyBpZiB3ZSBhcmUgY2FsbGVkIGZyb20gYWxpYXMgYW5hbHlzaXM7IGlm IGl0IGlzCkBAIC03OTAsNyArNzkwLDcgQEAgcnR4X2FkZHJfdmFyaWVzX3AgKGNvbnN0X3J0eCB4 LCBib29sIGZvcl9hbGlhcykKICAgY29uc3QgY2hhciAqZm10OwogCiAgIGlmICh4ID09IDApCi0g ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIGNvZGUgPSBHRVRfQ09ERSAoeCk7 CiAgIGlmIChjb2RlID09IE1FTSkKQEAgLTgwMSwxNiArODAxLDE2IEBAIHJ0eF9hZGRyX3Zhcmll c19wIChjb25zdF9ydHggeCwgYm9vbCBmb3JfYWxpYXMpCiAgICAgaWYgKGZtdFtpXSA9PSAnZScp CiAgICAgICB7CiAJaWYgKHJ0eF9hZGRyX3Zhcmllc19wIChYRVhQICh4LCBpKSwgZm9yX2FsaWFz KSkKLQkgIHJldHVybiAxOworCSAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgZWxzZSBpZiAo Zm10W2ldID09ICdFJykKICAgICAgIHsKIAlpbnQgajsKIAlmb3IgKGogPSAwOyBqIDwgWFZFQ0xF TiAoeCwgaSk7IGorKykKIAkgIGlmIChydHhfYWRkcl92YXJpZXNfcCAoWFZFQ0VYUCAoeCwgaSwg aiksIGZvcl9hbGlhcykpCi0JICAgIHJldHVybiAxOworCSAgICByZXR1cm4gdHJ1ZTsKICAgICAg IH0KLSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAwKIC8qIFJldHVybiB0aGUgQ0FM TCBpbiBYIGlmIHRoZXJlIGlzIG9uZS4gICovCkBAIC0xMDU2LDExICsxMDU2LDExIEBAIHVuc2ln bmVkX3JlZ19wIChydHggb3ApCiB9CiAKIAwKLS8qIE5vbnplcm8gaWYgcmVnaXN0ZXIgUkVHIGFw cGVhcnMgc29tZXdoZXJlIHdpdGhpbiBJTi4KKy8qIFJldHVybiB0cnVlIGlmIHJlZ2lzdGVyIFJF RyBhcHBlYXJzIHNvbWV3aGVyZSB3aXRoaW4gSU4uCiAgICBBbHNvIHdvcmtzIGlmIFJFRyBpcyBu b3QgYSByZWdpc3RlcjsgaW4gdGhpcyBjYXNlIGl0IGNoZWNrcwogICAgZm9yIGEgc3ViZXhwcmVz c2lvbiBvZiBJTiB0aGF0IGlzIExpc3AgImVxdWFsIiB0byBSRUcuICAqLwogCi1pbnQKK2Jvb2wK IHJlZ19tZW50aW9uZWRfcCAoY29uc3RfcnR4IHJlZywgY29uc3RfcnR4IGluKQogewogICBjb25z dCBjaGFyICpmbXQ7CkBAIC0xMDY4LDEwICsxMDY4LDEwIEBAIHJlZ19tZW50aW9uZWRfcCAoY29u c3RfcnR4IHJlZywgY29uc3RfcnR4IGluKQogICBlbnVtIHJ0eF9jb2RlIGNvZGU7CiAKICAgaWYg KGluID09IDApCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIGlmIChyZWcg PT0gaW4pCi0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHRydWU7CiAKICAgaWYgKEdFVF9DT0RF IChpbikgPT0gTEFCRUxfUkVGKQogICAgIHJldHVybiByZWcgPT0gbGFiZWxfcmVmX2xhYmVsIChp bik7CkBAIC0xMDg4LDE4ICsxMDg4LDE4IEBAIHJlZ19tZW50aW9uZWRfcCAoY29uc3RfcnR4IHJl ZywgY29uc3RfcnR4IGluKQogCSBhbmQgYXJlIHVuaXF1ZS4gICovCiAgICAgY2FzZSBTQ1JBVENI OgogICAgIGNhc2UgUEM6Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKIAog ICAgIENBU0VfQ09OU1RfQU5ZOgogICAgICAgLyogVGhlc2UgYXJlIGtlcHQgdW5pcXVlIGZvciBh IGdpdmVuIHZhbHVlLiAgKi8KLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIGZhbHNlOwog CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwogICAgIH0KIAogICBpZiAoR0VUX0NPREUgKHJl ZykgPT0gY29kZSAmJiBydHhfZXF1YWxfcCAocmVnLCBpbikpCi0gICAgcmV0dXJuIDE7CisgICAg cmV0dXJuIHRydWU7CiAKICAgZm10ID0gR0VUX1JUWF9GT1JNQVQgKGNvZGUpOwogCkBAIC0xMTEw LDU1ICsxMTEwLDU1IEBAIHJlZ19tZW50aW9uZWRfcCAoY29uc3RfcnR4IHJlZywgY29uc3RfcnR4 IGluKQogCSAgaW50IGo7CiAJICBmb3IgKGogPSBYVkVDTEVOIChpbiwgaSkgLSAxOyBqID49IDA7 IGotLSkKIAkgICAgaWYgKHJlZ19tZW50aW9uZWRfcCAocmVnLCBYVkVDRVhQIChpbiwgaSwgaikp KQotCSAgICAgIHJldHVybiAxOworCSAgICAgIHJldHVybiB0cnVlOwogCX0KICAgICAgIGVsc2Ug aWYgKGZtdFtpXSA9PSAnZScKIAkgICAgICAgJiYgcmVnX21lbnRpb25lZF9wIChyZWcsIFhFWFAg KGluLCBpKSkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAgICAgfQotICByZXR1cm4gMDsK KyAgcmV0dXJuIGZhbHNlOwogfQogDAotLyogUmV0dXJuIDEgaWYgaW4gYmV0d2VlbiBCRUcgYW5k IEVORCwgZXhjbHVzaXZlIG9mIEJFRyBhbmQgRU5ELCB0aGVyZSBpcworLyogUmV0dXJuIHRydWUg aWYgaW4gYmV0d2VlbiBCRUcgYW5kIEVORCwgZXhjbHVzaXZlIG9mIEJFRyBhbmQgRU5ELCB0aGVy ZSBpcwogICAgbm8gQ09ERV9MQUJFTCBpbnNuLiAgKi8KIAotaW50Citib29sCiBub19sYWJlbHNf YmV0d2Vlbl9wIChjb25zdCBydHhfaW5zbiAqYmVnLCBjb25zdCBydHhfaW5zbiAqZW5kKQogewog ICBydHhfaW5zbiAqcDsKICAgaWYgKGJlZyA9PSBlbmQpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0 dXJuIGZhbHNlOwogICBmb3IgKHAgPSBORVhUX0lOU04gKGJlZyk7IHAgIT0gZW5kOyBwID0gTkVY VF9JTlNOIChwKSkKICAgICBpZiAoTEFCRUxfUCAocCkpCi0gICAgICByZXR1cm4gMDsKLSAgcmV0 dXJuIDE7CisgICAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOwogfQogCi0vKiBOb256 ZXJvIGlmIHJlZ2lzdGVyIFJFRyBpcyB1c2VkIGluIGFuIGluc24gYmV0d2VlbgorLyogUmV0dXJu IHRydWUgaWYgcmVnaXN0ZXIgUkVHIGlzIHVzZWQgaW4gYW4gaW5zbiBiZXR3ZWVuCiAgICBGUk9N X0lOU04gYW5kIFRPX0lOU04gKGV4Y2x1c2l2ZSBvZiB0aG9zZSB0d28pLiAgKi8KIAotaW50Citi b29sCiByZWdfdXNlZF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCByZWcsIGNvbnN0IHJ0eF9pbnNuICpm cm9tX2luc24sCiAJCSAgICBjb25zdCBydHhfaW5zbiAqdG9faW5zbikKIHsKICAgcnR4X2luc24g Kmluc247CiAKICAgaWYgKGZyb21faW5zbiA9PSB0b19pbnNuKQotICAgIHJldHVybiAwOworICAg IHJldHVybiBmYWxzZTsKIAogICBmb3IgKGluc24gPSBORVhUX0lOU04gKGZyb21faW5zbik7IGlu c24gIT0gdG9faW5zbjsgaW5zbiA9IE5FWFRfSU5TTiAoaW5zbikpCiAgICAgaWYgKE5PTkRFQlVH X0lOU05fUCAoaW5zbikKIAkmJiAocmVnX292ZXJsYXBfbWVudGlvbmVkX3AgKHJlZywgUEFUVEVS TiAoaW5zbikpCiAJICAgfHwgKENBTExfUCAoaW5zbikgJiYgZmluZF9yZWdfZnVzYWdlIChpbnNu LCBVU0UsIHJlZykpKSkKLSAgICAgIHJldHVybiAxOwotICByZXR1cm4gMDsKKyAgICAgIHJldHVy biB0cnVlOworICByZXR1cm4gZmFsc2U7CiB9CiAMCi0vKiBOb256ZXJvIGlmIHRoZSBvbGQgdmFs dWUgb2YgWCwgYSByZWdpc3RlciwgaXMgcmVmZXJlbmNlZCBpbiBCT0RZLiAgSWYgWAorLyogUmV0 dXJuIHRydWUgaWYgdGhlIG9sZCB2YWx1ZSBvZiBYLCBhIHJlZ2lzdGVyLCBpcyByZWZlcmVuY2Vk IGluIEJPRFkuICBJZiBYCiAgICBpcyBlbnRpcmVseSByZXBsYWNlZCBieSBhIG5ldyB2YWx1ZSBh bmQgdGhlIG9ubHkgdXNlIGlzIGFzIGEgU0VUX0RFU1QsCiAgICB3ZSBkbyBub3QgY29uc2lkZXIg aXQgYSByZWZlcmVuY2UuICAqLwogCi1pbnQKK2Jvb2wKIHJlZ19yZWZlcmVuY2VkX3AgKGNvbnN0 X3J0eCB4LCBjb25zdF9ydHggYm9keSkKIHsKICAgaW50IGk7CkBAIC0xMTY3LDcgKzExNjcsNyBA QCByZWdfcmVmZXJlbmNlZF9wIChjb25zdF9ydHggeCwgY29uc3RfcnR4IGJvZHkpCiAgICAgewog ICAgIGNhc2UgU0VUOgogICAgICAgaWYgKHJlZ19vdmVybGFwX21lbnRpb25lZF9wICh4LCBTRVRf U1JDIChib2R5KSkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAKICAgICAgIC8qIElmIHRo ZSBkZXN0aW5hdGlvbiBpcyBhbnl0aGluZyBvdGhlciB0aGFuIFBDLCBhIFJFRyBvciBhIFNVQlJF RwogCSBvZiBhIFJFRyB0aGF0IG9jY3VwaWVzIGFsbCBvZiB0aGUgUkVHLCB0aGUgaW5zbiByZWZl cmVuY2VzIFggaWYKQEAgLTExNzgsMTQgKzExNzgsMTQgQEAgcmVnX3JlZmVyZW5jZWRfcCAoY29u c3RfcnR4IHgsIGNvbnN0X3J0eCBib2R5KQogCQkmJiBSRUdfUCAoU1VCUkVHX1JFRyAoU0VUX0RF U1QgKGJvZHkpKSkKIAkJJiYgIXJlYWRfbW9kaWZ5X3N1YnJlZ19wIChTRVRfREVTVCAoYm9keSkp KQogCSAgJiYgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgKHgsIFNFVF9ERVNUIChib2R5KSkpCi0J cmV0dXJuIDE7Ci0gICAgICByZXR1cm4gMDsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBm YWxzZTsKIAogICAgIGNhc2UgQVNNX09QRVJBTkRTOgogICAgICAgZm9yIChpID0gQVNNX09QRVJB TkRTX0lOUFVUX0xFTkdUSCAoYm9keSkgLSAxOyBpID49IDA7IGktLSkKIAlpZiAocmVnX292ZXJs YXBfbWVudGlvbmVkX3AgKHgsIEFTTV9PUEVSQU5EU19JTlBVVCAoYm9keSwgaSkpKQotCSAgcmV0 dXJuIDE7Ci0gICAgICByZXR1cm4gMDsKKwkgIHJldHVybiB0cnVlOworICAgICAgcmV0dXJuIGZh bHNlOwogCiAgICAgY2FzZSBDQUxMOgogICAgIGNhc2UgVVNFOgpAQCAtMTIwMiw1MiArMTIwMiw1 MiBAQCByZWdfcmVmZXJlbmNlZF9wIChjb25zdF9ydHggeCwgY29uc3RfcnR4IGJvZHkpCiAgICAg Y2FzZSBVTlNQRUNfVk9MQVRJTEU6CiAgICAgICBmb3IgKGkgPSBYVkVDTEVOIChib2R5LCAwKSAt IDE7IGkgPj0gMDsgaS0tKQogCWlmIChyZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoeCwgWFZFQ0VY UCAoYm9keSwgMCwgaSkpKQotCSAgcmV0dXJuIDE7Ci0gICAgICByZXR1cm4gMDsKKwkgIHJldHVy biB0cnVlOworICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBQQVJBTExFTDoKICAgICAg IGZvciAoaSA9IFhWRUNMRU4gKGJvZHksIDApIC0gMTsgaSA+PSAwOyBpLS0pCiAJaWYgKHJlZ19y ZWZlcmVuY2VkX3AgKHgsIFhWRUNFWFAgKGJvZHksIDAsIGkpKSkKLQkgIHJldHVybiAxOwotICAg ICAgcmV0dXJuIDA7CisJICByZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAg IGNhc2UgQ0xPQkJFUjoKICAgICAgIGlmIChNRU1fUCAoWEVYUCAoYm9keSwgMCkpKQogCWlmIChy ZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoeCwgWEVYUCAoWEVYUCAoYm9keSwgMCksIDApKSkKLQkg IHJldHVybiAxOwotICAgICAgcmV0dXJuIDA7CisJICByZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVy biBmYWxzZTsKIAogICAgIGNhc2UgQ09ORF9FWEVDOgogICAgICAgaWYgKHJlZ19vdmVybGFwX21l bnRpb25lZF9wICh4LCBDT05EX0VYRUNfVEVTVCAoYm9keSkpKQotCXJldHVybiAxOworCXJldHVy biB0cnVlOwogICAgICAgcmV0dXJuIHJlZ19yZWZlcmVuY2VkX3AgKHgsIENPTkRfRVhFQ19DT0RF IChib2R5KSk7CiAKICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgfQogfQogDAotLyogTm9uemVybyBpZiByZWdpc3RlciBSRUcgaXMgc2V0IG9y IGNsb2JiZXJlZCBpbiBhbiBpbnNuIGJldHdlZW4KKy8qIFJldHVybiB0cnVlIGlmIHJlZ2lzdGVy IFJFRyBpcyBzZXQgb3IgY2xvYmJlcmVkIGluIGFuIGluc24gYmV0d2VlbgogICAgRlJPTV9JTlNO IGFuZCBUT19JTlNOIChleGNsdXNpdmUgb2YgdGhvc2UgdHdvKS4gICovCiAKLWludAorYm9vbAog cmVnX3NldF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCByZWcsIGNvbnN0IHJ0eF9pbnNuICpmcm9tX2lu c24sCiAJCSAgIGNvbnN0IHJ0eF9pbnNuICp0b19pbnNuKQogewogICBjb25zdCBydHhfaW5zbiAq aW5zbjsKIAogICBpZiAoZnJvbV9pbnNuID09IHRvX2luc24pCi0gICAgcmV0dXJuIDA7CisgICAg cmV0dXJuIGZhbHNlOwogCiAgIGZvciAoaW5zbiA9IE5FWFRfSU5TTiAoZnJvbV9pbnNuKTsgaW5z biAhPSB0b19pbnNuOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKICAgICBpZiAoSU5TTl9QIChp bnNuKSAmJiByZWdfc2V0X3AgKHJlZywgaW5zbikpCi0gICAgICByZXR1cm4gMTsKLSAgcmV0dXJu IDA7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIGZhbHNlOwogfQogCiAvKiBSZXR1cm4g dHJ1ZSBpZiBSRUcgaXMgc2V0IG9yIGNsb2JiZXJlZCBpbnNpZGUgSU5TTi4gICovCiAKLWludAor Ym9vbAogcmVnX3NldF9wIChjb25zdF9ydHggcmVnLCBjb25zdF9ydHggaW5zbikKIHsKICAgLyog QWZ0ZXIgZGVsYXkgc2xvdCBoYW5kbGluZywgY2FsbCBhbmQgYnJhbmNoIGluc25zIG1pZ2h0IGJl IGluIGEKQEAgLTEyOTUsMTEgKzEyOTUsMTEgQEAgcmVnX3NldF9wIChjb25zdF9ydHggcmVnLCBj b25zdF9ydHggaW5zbikKICAgcmV0dXJuIHNldF9vZiAocmVnLCBpbnNuKSAhPSBOVUxMX1JUWDsK IH0KIAotLyogU2ltaWxhciB0byByZWdfc2V0X2JldHdlZW5fcCwgYnV0IGNoZWNrIGFsbCByZWdp c3RlcnMgaW4gWC4gIFJldHVybiAwCi0gICBvbmx5IGlmIG5vbmUgb2YgdGhlbSBhcmUgbW9kaWZp ZWQgYmV0d2VlbiBTVEFSVCBhbmQgRU5ELiAgUmV0dXJuIDEgaWYKKy8qIFNpbWlsYXIgdG8gcmVn X3NldF9iZXR3ZWVuX3AsIGJ1dCBjaGVjayBhbGwgcmVnaXN0ZXJzIGluIFguICBSZXR1cm4gZmFs c2UKKyAgIG9ubHkgaWYgbm9uZSBvZiB0aGVtIGFyZSBtb2RpZmllZCBiZXR3ZWVuIFNUQVJUIGFu ZCBFTkQuICBSZXR1cm4gdHJ1ZSBpZgogICAgWCBjb250YWlucyBhIE1FTTsgdGhpcyByb3V0aW5l IGRvZXMgdXNlIG1lbW9yeSBhbGlhc2luZy4gICovCiAKLWludAorYm9vbAogbW9kaWZpZWRfYmV0 d2Vlbl9wIChjb25zdF9ydHggeCwgY29uc3QgcnR4X2luc24gKnN0YXJ0LCBjb25zdCBydHhfaW5z biAqZW5kKQogewogICBjb25zdCBlbnVtIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAoeCk7CkBA IC0xMzA4LDcgKzEzMDgsNyBAQCBtb2RpZmllZF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCB4LCBjb25z dCBydHhfaW5zbiAqc3RhcnQsIGNvbnN0IHJ0eF9pbnNuICplbmQpCiAgIHJ0eF9pbnNuICppbnNu OwogCiAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNl OwogCiAgIHN3aXRjaCAoY29kZSkKICAgICB7CkBAIC0xMzE2LDIwICsxMzE2LDIwIEBAIG1vZGlm aWVkX2JldHdlZW5fcCAoY29uc3RfcnR4IHgsIGNvbnN0IHJ0eF9pbnNuICpzdGFydCwgY29uc3Qg cnR4X2luc24gKmVuZCkKICAgICBjYXNlIENPTlNUOgogICAgIGNhc2UgU1lNQk9MX1JFRjoKICAg ICBjYXNlIExBQkVMX1JFRjoKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIGZhbHNlOwog CiAgICAgY2FzZSBQQzoKLSAgICAgIHJldHVybiAxOworICAgICAgcmV0dXJuIHRydWU7CiAKICAg ICBjYXNlIE1FTToKICAgICAgIGlmIChtb2RpZmllZF9iZXR3ZWVuX3AgKFhFWFAgKHgsIDApLCBz dGFydCwgZW5kKSkKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKICAgICAgIGlmIChNRU1fUkVB RE9OTFlfUCAoeCkpCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogICAgICAgZm9yIChpbnNu ID0gTkVYVF9JTlNOIChzdGFydCk7IGluc24gIT0gZW5kOyBpbnNuID0gTkVYVF9JTlNOIChpbnNu KSkKIAlpZiAobWVtb3J5X21vZGlmaWVkX2luX2luc25fcCAoeCwgaW5zbikpCi0JICByZXR1cm4g MTsKLSAgICAgIHJldHVybiAwOworCSAgcmV0dXJuIHRydWU7CisgICAgICByZXR1cm4gZmFsc2U7 CiAKICAgICBjYXNlIFJFRzoKICAgICAgIHJldHVybiByZWdfc2V0X2JldHdlZW5fcCAoeCwgc3Rh cnQsIGVuZCk7CkBAIC0xMzQyLDIyICsxMzQyLDIyIEBAIG1vZGlmaWVkX2JldHdlZW5fcCAoY29u c3RfcnR4IHgsIGNvbnN0IHJ0eF9pbnNuICpzdGFydCwgY29uc3QgcnR4X2luc24gKmVuZCkKICAg Zm9yIChpID0gR0VUX1JUWF9MRU5HVEggKGNvZGUpIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgewog ICAgICAgaWYgKGZtdFtpXSA9PSAnZScgJiYgbW9kaWZpZWRfYmV0d2Vlbl9wIChYRVhQICh4LCBp KSwgc3RhcnQsIGVuZCkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAKICAgICAgIGVsc2Ug aWYgKGZtdFtpXSA9PSAnRScpCiAJZm9yIChqID0gWFZFQ0xFTiAoeCwgaSkgLSAxOyBqID49IDA7 IGotLSkKIAkgIGlmIChtb2RpZmllZF9iZXR3ZWVuX3AgKFhWRUNFWFAgKHgsIGksIGopLCBzdGFy dCwgZW5kKSkKLQkgICAgcmV0dXJuIDE7CisJICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICBy ZXR1cm4gMDsKKyAgcmV0dXJuIGZhbHNlOwogfQogCi0vKiBTaW1pbGFyIHRvIHJlZ19zZXRfcCwg YnV0IGNoZWNrIGFsbCByZWdpc3RlcnMgaW4gWC4gIFJldHVybiAwIG9ubHkgaWYgbm9uZQotICAg b2YgdGhlbSBhcmUgbW9kaWZpZWQgaW4gSU5TTi4gIFJldHVybiAxIGlmIFggY29udGFpbnMgYSBN RU07IHRoaXMgcm91dGluZQotICAgZG9lcyB1c2UgbWVtb3J5IGFsaWFzaW5nLiAgKi8KKy8qIFNp bWlsYXIgdG8gcmVnX3NldF9wLCBidXQgY2hlY2sgYWxsIHJlZ2lzdGVycyBpbiBYLiAgUmV0dXJu IGZhbHNlIG9ubHkgaWYKKyAgIG5vbmUgb2YgdGhlbSBhcmUgbW9kaWZpZWQgaW4gSU5TTi4gIFJl dHVybiB0cnVlIGlmIFggY29udGFpbnMgYSBNRU07IHRoaXMKKyAgIHJvdXRpbmUgZG9lcyB1c2Ug bWVtb3J5IGFsaWFzaW5nLiAgKi8KIAotaW50Citib29sCiBtb2RpZmllZF9pbl9wIChjb25zdF9y dHggeCwgY29uc3RfcnR4IGluc24pCiB7CiAgIGNvbnN0IGVudW0gcnR4X2NvZGUgY29kZSA9IEdF VF9DT0RFICh4KTsKQEAgLTEzNzAsMTkgKzEzNzAsMTkgQEAgbW9kaWZpZWRfaW5fcCAoY29uc3Rf cnR4IHgsIGNvbnN0X3J0eCBpbnNuKQogICAgIGNhc2UgQ09OU1Q6CiAgICAgY2FzZSBTWU1CT0xf UkVGOgogICAgIGNhc2UgTEFCRUxfUkVGOgotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4g ZmFsc2U7CiAKICAgICBjYXNlIFBDOgotICAgICAgcmV0dXJuIDE7CisgICAgICByZXR1cm4gdHJ1 ZTsKIAogICAgIGNhc2UgTUVNOgogICAgICAgaWYgKG1vZGlmaWVkX2luX3AgKFhFWFAgKHgsIDAp LCBpbnNuKSkKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKICAgICAgIGlmIChNRU1fUkVBRE9O TFlfUCAoeCkpCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogICAgICAgaWYgKG1lbW9yeV9t b2RpZmllZF9pbl9pbnNuX3AgKHgsIGluc24pKQotCXJldHVybiAxOwotICAgICAgcmV0dXJuIDA7 CisJcmV0dXJuIHRydWU7CisgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIFJFRzoKICAg ICAgIHJldHVybiByZWdfc2V0X3AgKHgsIGluc24pOwpAQCAtMTM5NSwxNSArMTM5NSwxNSBAQCBt b2RpZmllZF9pbl9wIChjb25zdF9ydHggeCwgY29uc3RfcnR4IGluc24pCiAgIGZvciAoaSA9IEdF VF9SVFhfTEVOR1RIIChjb2RlKSAtIDE7IGkgPj0gMDsgaS0tKQogICAgIHsKICAgICAgIGlmIChm bXRbaV0gPT0gJ2UnICYmIG1vZGlmaWVkX2luX3AgKFhFWFAgKHgsIGkpLCBpbnNuKSkKLQlyZXR1 cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIAogICAgICAgZWxzZSBpZiAoZm10W2ldID09ICdFJykKIAlm b3IgKGogPSBYVkVDTEVOICh4LCBpKSAtIDE7IGogPj0gMDsgai0tKQogCSAgaWYgKG1vZGlmaWVk X2luX3AgKFhWRUNFWFAgKHgsIGksIGopLCBpbnNuKSkKLQkgICAgcmV0dXJuIDE7CisJICAgIHJl dHVybiB0cnVlOwogICAgIH0KIAotICByZXR1cm4gMDsKKyAgcmV0dXJuIGZhbHNlOwogfQogCiAv KiBSZXR1cm4gdHJ1ZSBpZiBYIGlzIGEgU1VCUkVHIGFuZCBpZiBzdG9yaW5nIGEgdmFsdWUgdG8g WCB3b3VsZApAQCAtMTU5Myw0OCArMTU5Myw0OCBAQCBzaW5nbGVfc2V0XzIgKGNvbnN0IHJ0eF9p bnNuICppbnNuLCBjb25zdF9ydHggcGF0KQogICByZXR1cm4gc2V0OwogfQogCi0vKiBHaXZlbiBh biBJTlNOLCByZXR1cm4gbm9uemVybyBpZiBpdCBoYXMgbW9yZSB0aGFuIG9uZSBTRVQsIGVsc2Ug cmV0dXJuCi0gICB6ZXJvLiAgKi8KKy8qIEdpdmVuIGFuIElOU04sIHJldHVybiB0cnVlIGlmIGl0 IGhhcyBtb3JlIHRoYW4gb25lIFNFVCwgZWxzZSByZXR1cm4KKyAgIGZhbHNlLiAgKi8KIAotaW50 Citib29sCiBtdWx0aXBsZV9zZXRzIChjb25zdF9ydHggaW5zbikKIHsKLSAgaW50IGZvdW5kOwor ICBib29sIGZvdW5kOwogICBpbnQgaTsKIAogICAvKiBJTlNOIG11c3QgYmUgYW4gaW5zbi4gICov CiAgIGlmICghIElOU05fUCAoaW5zbikpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNl OwogCiAgIC8qIE9ubHkgYSBQQVJBTExFTCBjYW4gaGF2ZSBtdWx0aXBsZSBTRVRzLiAgKi8KICAg aWYgKEdFVF9DT0RFIChQQVRURVJOIChpbnNuKSkgPT0gUEFSQUxMRUwpCiAgICAgewotICAgICAg Zm9yIChpID0gMCwgZm91bmQgPSAwOyBpIDwgWFZFQ0xFTiAoUEFUVEVSTiAoaW5zbiksIDApOyBp KyspCisgICAgICBmb3IgKGkgPSAwLCBmb3VuZCA9IGZhbHNlOyBpIDwgWFZFQ0xFTiAoUEFUVEVS TiAoaW5zbiksIDApOyBpKyspCiAJaWYgKEdFVF9DT0RFIChYVkVDRVhQIChQQVRURVJOIChpbnNu KSwgMCwgaSkpID09IFNFVCkKIAkgIHsKIAkgICAgLyogSWYgd2UgaGF2ZSBhbHJlYWR5IGZvdW5k IGEgU0VULCB0aGVuIHJldHVybiBub3cuICAqLwogCSAgICBpZiAoZm91bmQpCi0JICAgICAgcmV0 dXJuIDE7CisJICAgICAgcmV0dXJuIHRydWU7CiAJICAgIGVsc2UKLQkgICAgICBmb3VuZCA9IDE7 CisJICAgICAgZm91bmQgPSB0cnVlOwogCSAgfQogICAgIH0KIAogICAvKiBFaXRoZXIgemVybyBv ciBvbmUgU0VULiAgKi8KLSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAwKLS8qIFJl dHVybiBub256ZXJvIGlmIHRoZSBkZXN0aW5hdGlvbiBvZiBTRVQgZXF1YWxzIHRoZSBzb3VyY2UK Ky8qIFJldHVybiB0cnVlIGlmIHRoZSBkZXN0aW5hdGlvbiBvZiBTRVQgZXF1YWxzIHRoZSBzb3Vy Y2UKICAgIGFuZCB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzLiAgKi8KIAotaW50Citib29sCiBz ZXRfbm9vcF9wIChjb25zdF9ydHggc2V0KQogewogICBydHggc3JjID0gU0VUX1NSQyAoc2V0KTsK ICAgcnR4IGRzdCA9IFNFVF9ERVNUIChzZXQpOwogCiAgIGlmIChkc3QgPT0gcGNfcnR4ICYmIHNy YyA9PSBwY19ydHgpCi0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHRydWU7CiAKICAgaWYgKE1F TV9QIChkc3QpICYmIE1FTV9QIChzcmMpKQogICAgIHJldHVybiBydHhfZXF1YWxfcCAoZHN0LCBz cmMpICYmICFzaWRlX2VmZmVjdHNfcCAoZHN0KTsKQEAgLTE2NTAsMTMgKzE2NTAsMTMgQEAgc2V0 X25vb3BfcCAoY29uc3RfcnR4IHNldCkKICAgaWYgKEdFVF9DT0RFIChzcmMpID09IFNVQlJFRyAm JiBHRVRfQ09ERSAoZHN0KSA9PSBTVUJSRUcpCiAgICAgewogICAgICAgaWYgKG1heWJlX25lIChT VUJSRUdfQllURSAoc3JjKSwgU1VCUkVHX0JZVEUgKGRzdCkpKQotCXJldHVybiAwOworCXJldHVy biBmYWxzZTsKICAgICAgIHNyYyA9IFNVQlJFR19SRUcgKHNyYyk7CiAgICAgICBkc3QgPSBTVUJS RUdfUkVHIChkc3QpOwogICAgICAgaWYgKEdFVF9NT0RFIChzcmMpICE9IEdFVF9NT0RFIChkc3Qp KQogCS8qIEl0IGlzIGhhcmQgdG8gdGVsbCB3aGV0aGVyIHN1YnJlZ3MgcmVmZXIgdG8gdGhlIHNh bWUgYml0cywgc28gYWN0Ci0JICAgY29uc2VydmF0aXZlbHkgYW5kIHJldHVybiAwLiAgKi8KLQly ZXR1cm4gMDsKKwkgICBjb25zZXJ2YXRpdmVseSBhbmQgcmV0dXJuIGZhbHNlLiAgKi8KKwlyZXR1 cm4gZmFsc2U7CiAgICAgfQogCiAgIC8qIEl0IGlzIGEgTk9PUCBpZiBkZXN0aW5hdGlvbiBvdmVy bGFwcyB3aXRoIHNlbGVjdGVkIHNyYyB2ZWN0b3IKQEAgLTE2NzEsNyArMTY3MSw3IEBAIHNldF9u b29wX3AgKGNvbnN0X3J0eCBzZXQpCiAgICAgICBydHggc3JjMCA9IFhFWFAgKHNyYywgMCk7CiAg ICAgICBwb2x5X2ludDY0IGMwOwogICAgICAgaWYgKCFwb2x5X2ludF9ydHhfcCAoWFZFQ0VYUCAo cGFyLCAwLCAwKSwgJmMwKSkKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiAgICAgICBwb2x5 X2ludDY0IG9mZnNldCA9IEdFVF9NT0RFX1VOSVRfU0laRSAoR0VUX01PREUgKHNyYzApKSAqIGMw OwogCiAgICAgICBmb3IgKGkgPSAxOyBpIDwgWFZFQ0xFTiAocGFyLCAwKTsgaSsrKQpAQCAtMTY3 OSw3ICsxNjc5LDcgQEAgc2V0X25vb3BfcCAoY29uc3RfcnR4IHNldCkKIAkgIHBvbHlfaW50NjQg YzBpOwogCSAgaWYgKCFwb2x5X2ludF9ydHhfcCAoWFZFQ0VYUCAocGFyLCAwLCBpKSwgJmMwaSkK IAkgICAgICB8fCBtYXliZV9uZSAoYzBpLCBjMCArIGkpKQotCSAgICByZXR1cm4gMDsKKwkgICAg cmV0dXJuIGZhbHNlOwogCX0KICAgICAgIHJldHVybgogCVJFR19DQU5fQ0hBTkdFX01PREVfUCAo UkVHTk8gKGRzdCksIEdFVF9NT0RFIChzcmMwKSwgR0VUX01PREUgKGRzdCkpCkBAIC0xNjkxLDIz ICsxNjkxLDIzIEBAIHNldF9ub29wX3AgKGNvbnN0X3J0eCBzZXQpCiAJICAmJiBSRUdOTyAoc3Jj KSA9PSBSRUdOTyAoZHN0KSk7CiB9CiAMCi0vKiBSZXR1cm4gbm9uemVybyBpZiBhbiBpbnNuIGNv bnNpc3RzIG9ubHkgb2YgU0VUcywgZWFjaCBvZiB3aGljaCBvbmx5IHNldHMgYQorLyogUmV0dXJu IHRydWUgaWYgYW4gaW5zbiBjb25zaXN0cyBvbmx5IG9mIFNFVHMsIGVhY2ggb2Ygd2hpY2ggb25s eSBzZXRzIGEKICAgIHZhbHVlIHRvIGl0c2VsZi4gICovCiAKLWludAorYm9vbAogbm9vcF9tb3Zl X3AgKGNvbnN0IHJ0eF9pbnNuICppbnNuKQogewogICBydHggcGF0ID0gUEFUVEVSTiAoaW5zbik7 CiAKICAgaWYgKElOU05fQ09ERSAoaW5zbikgPT0gTk9PUF9NT1ZFX0lOU05fQ09ERSkKLSAgICBy ZXR1cm4gMTsKKyAgICByZXR1cm4gdHJ1ZTsKIAogICAvKiBDaGVjayB0aGUgY29kZSB0byBiZSBl eGVjdXRlZCBmb3IgQ09ORF9FWEVDLiAgKi8KICAgaWYgKEdFVF9DT0RFIChwYXQpID09IENPTkRf RVhFQykKICAgICBwYXQgPSBDT05EX0VYRUNfQ09ERSAocGF0KTsKIAogICBpZiAoR0VUX0NPREUg KHBhdCkgPT0gU0VUICYmIHNldF9ub29wX3AgKHBhdCkpCi0gICAgcmV0dXJuIDE7CisgICAgcmV0 dXJuIHRydWU7CiAKICAgaWYgKEdFVF9DT0RFIChwYXQpID09IFBBUkFMTEVMKQogICAgIHsKQEAg LTE3MjIsMTYgKzE3MjIsMTYgQEAgbm9vcF9tb3ZlX3AgKGNvbnN0IHJ0eF9pbnNuICppbnNuKQog CSAgICBjb250aW51ZTsKIAogCSAgaWYgKEdFVF9DT0RFICh0ZW0pICE9IFNFVCB8fCAhIHNldF9u b29wX3AgKHRlbSkpCi0JICAgIHJldHVybiAwOworCSAgICByZXR1cm4gZmFsc2U7CiAJfQogCi0g ICAgICByZXR1cm4gMTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgcmV0dXJuIDA7Cisg IHJldHVybiBmYWxzZTsKIH0KIAwKIAotLyogUmV0dXJuIG5vbnplcm8gaWYgcmVnaXN0ZXIgaW4g cmFuZ2UgW1JFR05PLCBFTkRSRUdOTykKKy8qIFJldHVybiB0cnVlIGlmIHJlZ2lzdGVyIGluIHJh bmdlIFtSRUdOTywgRU5EUkVHTk8pCiAgICBhcHBlYXJzIGVpdGhlciBleHBsaWNpdGx5IG9yIGlt cGxpY2l0bHkgaW4gWAogICAgb3RoZXIgdGhhbiBiZWluZyBzdG9yZWQgaW50by4KIApAQCAtMTg0 MCwxMyArMTg0MCwxMyBAQCByZWZlcnNfdG9fcmVnbm9fcCAodW5zaWduZWQgaW50IHJlZ25vLCB1 bnNpZ25lZCBpbnQgZW5kcmVnbm8sIGNvbnN0X3J0eCB4LAogICByZXR1cm4gZmFsc2U7CiB9CiAK LS8qIE5vbnplcm8gaWYgbW9kaWZ5aW5nIFggd2lsbCBhZmZlY3QgSU4uICBJZiBYIGlzIGEgcmVn aXN0ZXIgb3IgYSBTVUJSRUcsCisvKiBScmV0dXJuIHRydWUgaWYgbW9kaWZ5aW5nIFggd2lsbCBh ZmZlY3QgSU4uICBJZiBYIGlzIGEgcmVnaXN0ZXIgb3IgYSBTVUJSRUcsCiAgICB3ZSBjaGVjayBp ZiBhbnkgcmVnaXN0ZXIgbnVtYmVyIGluIFggY29uZmxpY3RzIHdpdGggdGhlIHJlbGV2YW50IHJl Z2lzdGVyCi0gICBudW1iZXJzLiAgSWYgWCBpcyBhIGNvbnN0YW50LCByZXR1cm4gMC4gIElmIFgg aXMgYSBNRU0sIHJldHVybiAxIGlmZiBJTgotICAgY29udGFpbnMgYSBNRU0gKHdlIGRvbid0IGJv dGhlciBjaGVja2luZyBmb3IgbWVtb3J5IGFkZHJlc3NlcyB0aGF0IGNhbid0CisgICBudW1iZXJz LiAgSWYgWCBpcyBhIGNvbnN0YW50LCByZXR1cm4gZmFsc2UuICBJZiBYIGlzIGEgTUVNLCByZXR1 cm4gdHJ1ZSBpZmYKKyAgIElOIGNvbnRhaW5zIGEgTUVNICh3ZSBkb24ndCBib3RoZXIgY2hlY2tp bmcgZm9yIG1lbW9yeSBhZGRyZXNzZXMgdGhhdCBjYW4ndAogICAgY29uZmxpY3QgYmVjYXVzZSB3 ZSBleHBlY3QgdGhpcyB0byBiZSBhIHJhcmUgY2FzZS4gICovCiAKLWludAorYm9vbAogcmVnX292 ZXJsYXBfbWVudGlvbmVkX3AgKGNvbnN0X3J0eCB4LCBjb25zdF9ydHggaW4pCiB7CiAgIHVuc2ln bmVkIGludCByZWdubywgZW5kcmVnbm87CkBAIC0xODU1LDcgKzE4NTUsNyBAQCByZWdfb3Zlcmxh cF9tZW50aW9uZWRfcCAoY29uc3RfcnR4IHgsIGNvbnN0X3J0eCBpbikKICAgICAgYWZmZWN0IElO LiAgSGVyZSB3ZSBsb29rIGF0IElOLCB3ZSBjYW4gcHJvZml0YWJseSBjb21iaW5lCiAgICAgIENP TlNUQU5UX1AgKHgpIHdpdGggdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVsb3cuICAqLwogICBpZiAo Q09OU1RBTlRfUCAoaW4pKQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsKIAogIHJl Y3Vyc2U6CiAgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQpAQCAtMTg4OCwyNCArMTg4OCwyNCBAQCBy ZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoY29uc3RfcnR4IHgsIGNvbnN0X3J0eCBpbikKIAlpbnQg aTsKIAogCWlmIChNRU1fUCAoaW4pKQotCSAgcmV0dXJuIDE7CisJICByZXR1cm4gdHJ1ZTsKIAog CWZtdCA9IEdFVF9SVFhfRk9STUFUIChHRVRfQ09ERSAoaW4pKTsKIAlmb3IgKGkgPSBHRVRfUlRY X0xFTkdUSCAoR0VUX0NPREUgKGluKSkgLSAxOyBpID49IDA7IGktLSkKIAkgIGlmIChmbXRbaV0g PT0gJ2UnKQogCSAgICB7CiAJICAgICAgaWYgKHJlZ19vdmVybGFwX21lbnRpb25lZF9wICh4LCBY RVhQIChpbiwgaSkpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAJICAgIH0KIAkgIGVs c2UgaWYgKGZtdFtpXSA9PSAnRScpCiAJICAgIHsKIAkgICAgICBpbnQgajsKIAkgICAgICBmb3Ig KGogPSBYVkVDTEVOIChpbiwgaSkgLSAxOyBqID49IDA7IC0taikKIAkJaWYgKHJlZ19vdmVybGFw X21lbnRpb25lZF9wICh4LCBYVkVDRVhQIChpbiwgaSwgaikpKQotCQkgIHJldHVybiAxOworCQkg IHJldHVybiB0cnVlOwogCSAgICB9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiAgICAg ICB9CiAKICAgICBjYXNlIFNDUkFUQ0g6CkBAIC0xOTIwLDEzICsxOTIwLDEzIEBAIHJlZ19vdmVy bGFwX21lbnRpb25lZF9wIChjb25zdF9ydHggeCwgY29uc3RfcnR4IGluKQogCWZvciAoaSA9IFhW RUNMRU4gKHgsIDApIC0gMTsgaSA+PSAwOyBpLS0pCiAJICBpZiAoWEVYUCAoWFZFQ0VYUCAoeCwg MCwgaSksIDApICE9IDAKIAkgICAgICAmJiByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoWEVYUCAo WFZFQ0VYUCAoeCwgMCwgaSksIDApLCBpbikpCi0JICAgIHJldHVybiAxOwotCXJldHVybiAwOwor CSAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgICB9CiAKICAgICBkZWZhdWx0 OgogICAgICAgZ2NjX2Fzc2VydCAoQ09OU1RBTlRfUCAoeCkpOwotICAgICAgcmV0dXJuIDA7Cisg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogDApAQCAtMjM4Myw3ICsyMzgzLDcgQEAgdmVj X3J0eF9wcm9wZXJ0aWVzX2Jhc2U6Omdyb3cgKHB0cmRpZmZfdCBzdGFydCkKICAgcmVmX2VuZCA9 IHJlZl9iZWdpbiArIG5ld19lbGVtczsKIH0KIAwKLS8qIFJldHVybiBub256ZXJvIGlmIFgncyBv bGQgY29udGVudHMgZG9uJ3Qgc3Vydml2ZSBhZnRlciBJTlNOLgorLyogUmV0dXJuIHRydWUgaWYg WCdzIG9sZCBjb250ZW50cyBkb24ndCBzdXJ2aXZlIGFmdGVyIElOU04uCiAgICBUaGlzIHdpbGwg YmUgdHJ1ZSBpZiBYIGlzIGEgcmVnaXN0ZXIgYW5kIFggZGllcyBpbiBJTlNOIG9yIGJlY2F1c2UK ICAgIElOU04gZW50aXJlbHkgc2V0cyBYLgogCkBAIC0yMzk3LDEwICsyMzk3LDEwIEBAIHZlY19y dHhfcHJvcGVydGllc19iYXNlOjpncm93IChwdHJkaWZmX3Qgc3RhcnQpCiAgICBhdCBhbnkgdGlt ZSBhZnRlciBkZWF0aHMgaGF2ZSBiZWVuIGNvbXB1dGVkLgogCiAgICBJZiBSRUcgaXMgYSBoYXJk IHJlZyB0aGF0IG9jY3VwaWVzIG11bHRpcGxlIG1hY2hpbmUgcmVnaXN0ZXJzLCB0aGlzCi0gICBm dW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIDEgaWYgZWFjaCBvZiB0aG9zZSByZWdpc3RlcnMgd2ls bCBiZSByZXBsYWNlZAorICAgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0cnVlIGlmIGVhY2gg b2YgdGhvc2UgcmVnaXN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQKICAgIGJ5IElOU04uICAqLwogCi1p bnQKK2Jvb2wKIGRlYWRfb3Jfc2V0X3AgKGNvbnN0IHJ0eF9pbnNuICppbnNuLCBjb25zdF9ydHgg eCkKIHsKICAgdW5zaWduZWQgaW50IHJlZ25vLCBlbmRfcmVnbm87CkBAIC0yNDEyLDkgKzI0MTIs OSBAQCBkZWFkX29yX3NldF9wIChjb25zdCBydHhfaW5zbiAqaW5zbiwgY29uc3RfcnR4IHgpCiAg IGVuZF9yZWdubyA9IEVORF9SRUdOTyAoeCk7CiAgIGZvciAoaSA9IHJlZ25vOyBpIDwgZW5kX3Jl Z25vOyBpKyspCiAgICAgaWYgKCEgZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5zbiwgaSkpCi0gICAg ICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKIAotICByZXR1cm4gMTsKKyAgcmV0dXJu IHRydWU7CiB9CiAKIC8qIFJldHVybiBUUlVFIGlmZiBERVNUIGlzIGEgcmVnaXN0ZXIgb3Igc3Vi cmVnIG9mIGEgcmVnaXN0ZXIsIGlzIGEKQEAgLTI0NjYsMjQgKzI0NjYsMjQgQEAgY292ZXJzX3Jl Z25vX3AgKGNvbnN0X3J0eCBkZXN0LCB1bnNpZ25lZCBpbnQgdGVzdF9yZWdubykKIAogLyogVXRp bGl0eSBmdW5jdGlvbiBmb3IgZGVhZF9vcl9zZXRfcCB0byBjaGVjayBhbiBpbmRpdmlkdWFsIHJl Z2lzdGVyLiAqLwogCi1pbnQKK2Jvb2wKIGRlYWRfb3Jfc2V0X3JlZ25vX3AgKGNvbnN0IHJ0eF9p bnNuICppbnNuLCB1bnNpZ25lZCBpbnQgdGVzdF9yZWdubykKIHsKICAgY29uc3RfcnR4IHBhdHRl cm47CiAKICAgLyogU2VlIGlmIHRoZXJlIGlzIGEgZGVhdGggbm90ZSBmb3Igc29tZXRoaW5nIHRo YXQgaW5jbHVkZXMgVEVTVF9SRUdOTy4gICovCiAgIGlmIChmaW5kX3JlZ25vX25vdGUgKGluc24s IFJFR19ERUFELCB0ZXN0X3JlZ25vKSkKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gdHJ1ZTsK IAogICBpZiAoQ0FMTF9QIChpbnNuKQogICAgICAgJiYgZmluZF9yZWdub19mdXNhZ2UgKGluc24s IENMT0JCRVIsIHRlc3RfcmVnbm8pKQotICAgIHJldHVybiAxOworICAgIHJldHVybiB0cnVlOwog CiAgIHBhdHRlcm4gPSBQQVRURVJOIChpbnNuKTsKIAogICAvKiBJZiBhIENPTkRfRVhFQyBpcyBu b3QgZXhlY3V0ZWQsIHRoZSB2YWx1ZSBzdXJ2aXZlcy4gICovCiAgIGlmIChHRVRfQ09ERSAocGF0 dGVybikgPT0gQ09ORF9FWEVDKQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsKIAog ICBpZiAoR0VUX0NPREUgKHBhdHRlcm4pID09IFNFVCB8fCBHRVRfQ09ERSAocGF0dGVybikgPT0g Q0xPQkJFUikKICAgICByZXR1cm4gY292ZXJzX3JlZ25vX3AgKFNFVF9ERVNUIChwYXR0ZXJuKSwg dGVzdF9yZWdubyk7CkBAIC0yNTAwLDExICsyNTAwLDExIEBAIGRlYWRfb3Jfc2V0X3JlZ25vX3Ag KGNvbnN0IHJ0eF9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgdGVzdF9yZWdubykKIAogCSAgaWYg KChHRVRfQ09ERSAoYm9keSkgPT0gU0VUIHx8IEdFVF9DT0RFIChib2R5KSA9PSBDTE9CQkVSKQog CSAgICAgICYmIGNvdmVyc19yZWdub19wIChTRVRfREVTVCAoYm9keSksIHRlc3RfcmVnbm8pKQot CSAgICByZXR1cm4gMTsKKwkgICAgcmV0dXJuIHRydWU7CiAJfQogICAgIH0KIAotICByZXR1cm4g MDsKKyAgcmV0dXJuIGZhbHNlOwogfQogCiAvKiBSZXR1cm4gdGhlIHJlZy1ub3RlIG9mIGtpbmQg S0lORCBpbiBpbnNuIElOU04sIGlmIHRoZXJlIGlzIG9uZS4KQEAgLTI2MTQsMTMgKzI2MTQsMTMg QEAgZmluZF9jb25zdGFudF9zcmMgKGNvbnN0IHJ0eF9pbnNuICppbnNuKQogLyogUmV0dXJuIHRy dWUgaWYgREFUVU0sIG9yIGFueSBvdmVybGFwIG9mIERBVFVNLCBvZiBraW5kIENPREUgaXMgZm91 bmQKICAgIGluIHRoZSBDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UgaW5mb3JtYXRpb24gb2YgSU5T Ti4gICovCiAKLWludAorYm9vbAogZmluZF9yZWdfZnVzYWdlIChjb25zdF9ydHggaW5zbiwgZW51 bSBydHhfY29kZSBjb2RlLCBjb25zdF9ydHggZGF0dW0pCiB7CiAgIC8qIElmIGl0J3Mgbm90IGEg Q0FMTF9JTlNOLCBpdCBjYW4ndCBwb3NzaWJseSBoYXZlIGEKICAgICAgQ0FMTF9JTlNOX0ZVTkNU SU9OX1VTQUdFIGZpZWxkLCBzbyBkb24ndCBib3RoZXIgY2hlY2tpbmcuICAqLwogICBpZiAoIUNB TExfUCAoaW5zbikpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIGdjY19h c3NlcnQgKGRhdHVtKTsKIApAQCAtMjYzMyw3ICsyNjMzLDcgQEAgZmluZF9yZWdfZnVzYWdlIChj b25zdF9ydHggaW5zbiwgZW51bSBydHhfY29kZSBjb2RlLCBjb25zdF9ydHggZGF0dW0pCiAJICAg bGluayA9IFhFWFAgKGxpbmssIDEpKQogCWlmIChHRVRfQ09ERSAoWEVYUCAobGluaywgMCkpID09 IGNvZGUKIAkgICAgJiYgcnR4X2VxdWFsX3AgKGRhdHVtLCBYRVhQIChYRVhQIChsaW5rLCAwKSwg MCkpKQotCSAgcmV0dXJuIDE7CisJICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIGVsc2UKICAgICB7 CkBAIC0yNjQ5LDE3ICsyNjQ5LDE3IEBAIGZpbmRfcmVnX2Z1c2FnZSAoY29uc3RfcnR4IGluc24s IGVudW0gcnR4X2NvZGUgY29kZSwgY29uc3RfcnR4IGRhdHVtKQogCiAJICBmb3IgKGkgPSByZWdu bzsgaSA8IGVuZF9yZWdubzsgaSsrKQogCSAgICBpZiAoZmluZF9yZWdub19mdXNhZ2UgKGluc24s IGNvZGUsIGkpKQotCSAgICAgIHJldHVybiAxOworCSAgICAgIHJldHVybiB0cnVlOwogCX0KICAg ICB9CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAogLyogUmV0dXJuIHRydWUg aWYgUkVHTk8sIG9yIGFueSBvdmVybGFwIG9mIFJFR05PLCBvZiBraW5kIENPREUgaXMgZm91bmQK ICAgIGluIHRoZSBDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UgaW5mb3JtYXRpb24gb2YgSU5TTi4g ICovCiAKLWludAorYm9vbAogZmluZF9yZWdub19mdXNhZ2UgKGNvbnN0X3J0eCBpbnNuLCBlbnVt IHJ0eF9jb2RlIGNvZGUsIHVuc2lnbmVkIGludCByZWdubykKIHsKICAgcnR4IGxpbms7CkBAIC0y NjY5LDcgKzI2NjksNyBAQCBmaW5kX3JlZ25vX2Z1c2FnZSAoY29uc3RfcnR4IGluc24sIGVudW0g cnR4X2NvZGUgY29kZSwgdW5zaWduZWQgaW50IHJlZ25vKQogCiAgIGlmIChyZWdubyA+PSBGSVJT VF9QU0VVRE9fUkVHSVNURVIKICAgICAgIHx8ICFDQUxMX1AgKGluc24pICkKLSAgICByZXR1cm4g MDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgZm9yIChsaW5rID0gQ0FMTF9JTlNOX0ZVTkNUSU9O X1VTQUdFIChpbnNuKTsgbGluazsgbGluayA9IFhFWFAgKGxpbmssIDEpKQogICAgIHsKQEAgLTI2 NzksMTAgKzI2NzksMTAgQEAgZmluZF9yZWdub19mdXNhZ2UgKGNvbnN0X3J0eCBpbnNuLCBlbnVt IHJ0eF9jb2RlIGNvZGUsIHVuc2lnbmVkIGludCByZWdubykKIAkgICYmIFJFR19QIChyZWcgPSBY RVhQIChvcCwgMCkpCiAJICAmJiBSRUdOTyAocmVnKSA8PSByZWdubwogCSAgJiYgRU5EX1JFR05P IChyZWcpID4gcmVnbm8pCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAgICAgfQogCi0gIHJl dHVybiAwOworICByZXR1cm4gZmFsc2U7CiB9CiAKIAwKQEAgLTI5MDYsMTIgKzI5MDYsMTIgQEAg cmVtb3ZlX25vZGVfZnJvbV9pbnNuX2xpc3QgKGNvbnN0IHJ0eF9pbnNuICpub2RlLCBydHhfaW5z bl9saXN0ICoqbGlzdHApCiAgICAgfQogfQogDAotLyogTm9uemVybyBpZiBYIGNvbnRhaW5zIGFu eSB2b2xhdGlsZSBpbnN0cnVjdGlvbnMuICBUaGVzZSBhcmUgaW5zdHJ1Y3Rpb25zCisvKiBSZXR1 cm4gdHJ1ZSBpZiBYIGNvbnRhaW5zIGFueSB2b2xhdGlsZSBpbnN0cnVjdGlvbnMuICBUaGVzZSBh cmUgaW5zdHJ1Y3Rpb25zCiAgICB3aGljaCBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZSBtYWNoaW5l IHN0YXRlIGluc3RydWN0aW9ucywgYW5kIHRodXMgbm8KICAgIGluc3RydWN0aW9ucyBvciByZWdp c3RlciB1c2VzIHNob3VsZCBiZSBtb3ZlZCBvciBjb21iaW5lZCBhY3Jvc3MgdGhlbS4KICAgIFRo aXMgaW5jbHVkZXMgb25seSB2b2xhdGlsZSBhc21zIGFuZCBVTlNQRUNfVk9MQVRJTEUgaW5zdHJ1 Y3Rpb25zLiAgKi8KIAotaW50Citib29sCiB2b2xhdGlsZV9pbnNuX3AgKGNvbnN0X3J0eCB4KQog ewogICBjb25zdCBSVFhfQ09ERSBjb2RlID0gR0VUX0NPREUgKHgpOwpAQCAtMjkyOSwxNSArMjky OSwxNSBAQCB2b2xhdGlsZV9pbnNuX3AgKGNvbnN0X3J0eCB4KQogICAgIGNhc2UgQUREUl9ESUZG X1ZFQzoKICAgICBjYXNlIENBTEw6CiAgICAgY2FzZSBNRU06Ci0gICAgICByZXR1cm4gMDsKKyAg ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgVU5TUEVDX1ZPTEFUSUxFOgotICAgICAgcmV0 dXJuIDE7CisgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQVNNX0lOUFVUOgogICAgIGNh c2UgQVNNX09QRVJBTkRTOgogICAgICAgaWYgKE1FTV9WT0xBVElMRV9QICh4KSkKLQlyZXR1cm4g MTsKKwlyZXR1cm4gdHJ1ZTsKIAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKQEAgLTI5NTQs MjQgKzI5NTQsMjQgQEAgdm9sYXRpbGVfaW5zbl9wIChjb25zdF9ydHggeCkKIAlpZiAoZm10W2ld ID09ICdlJykKIAkgIHsKIAkgICAgaWYgKHZvbGF0aWxlX2luc25fcCAoWEVYUCAoeCwgaSkpKQot CSAgICAgIHJldHVybiAxOworCSAgICAgIHJldHVybiB0cnVlOwogCSAgfQogCWVsc2UgaWYgKGZt dFtpXSA9PSAnRScpCiAJICB7CiAJICAgIGludCBqOwogCSAgICBmb3IgKGogPSAwOyBqIDwgWFZF Q0xFTiAoeCwgaSk7IGorKykKIAkgICAgICBpZiAodm9sYXRpbGVfaW5zbl9wIChYVkVDRVhQICh4 LCBpLCBqKSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAkgIH0KICAgICAgIH0KICAg fQotICByZXR1cm4gMDsKKyAgcmV0dXJuIGZhbHNlOwogfQogCi0vKiBOb256ZXJvIGlmIFggY29u dGFpbnMgYW55IHZvbGF0aWxlIG1lbW9yeSByZWZlcmVuY2VzCisvKiBSZXR1cm4gdHJ1ZSBpZiBY IGNvbnRhaW5zIGFueSB2b2xhdGlsZSBtZW1vcnkgcmVmZXJlbmNlcwogICAgVU5TUEVDX1ZPTEFU SUxFIG9wZXJhdGlvbnMgb3Igdm9sYXRpbGUgQVNNX09QRVJBTkRTIGV4cHJlc3Npb25zLiAgKi8K IAotaW50Citib29sCiB2b2xhdGlsZV9yZWZzX3AgKGNvbnN0X3J0eCB4KQogewogICBjb25zdCBS VFhfQ09ERSBjb2RlID0gR0VUX0NPREUgKHgpOwpAQCAtMjk4NywxNiArMjk4NywxNiBAQCB2b2xh dGlsZV9yZWZzX3AgKGNvbnN0X3J0eCB4KQogICAgIGNhc2UgQ0xPQkJFUjoKICAgICBjYXNlIEFE RFJfVkVDOgogICAgIGNhc2UgQUREUl9ESUZGX1ZFQzoKLSAgICAgIHJldHVybiAwOworICAgICAg cmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBVTlNQRUNfVk9MQVRJTEU6Ci0gICAgICByZXR1cm4g MTsKKyAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBNRU06CiAgICAgY2FzZSBBU01fSU5Q VVQ6CiAgICAgY2FzZSBBU01fT1BFUkFORFM6CiAgICAgICBpZiAoTUVNX1ZPTEFUSUxFX1AgKHgp KQotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogCiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFr OwpAQCAtMzAxMywyNCArMzAxMywyNCBAQCB2b2xhdGlsZV9yZWZzX3AgKGNvbnN0X3J0eCB4KQog CWlmIChmbXRbaV0gPT0gJ2UnKQogCSAgewogCSAgICBpZiAodm9sYXRpbGVfcmVmc19wIChYRVhQ ICh4LCBpKSkpCi0JICAgICAgcmV0dXJuIDE7CisJICAgICAgcmV0dXJuIHRydWU7CiAJICB9CiAJ ZWxzZSBpZiAoZm10W2ldID09ICdFJykKIAkgIHsKIAkgICAgaW50IGo7CiAJICAgIGZvciAoaiA9 IDA7IGogPCBYVkVDTEVOICh4LCBpKTsgaisrKQogCSAgICAgIGlmICh2b2xhdGlsZV9yZWZzX3Ag KFhWRUNFWFAgKHgsIGksIGopKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCSAgfQog ICAgICAgfQogICB9Ci0gIHJldHVybiAwOworICByZXR1cm4gZmFsc2U7CiB9CiAKIC8qIFNpbWls YXIgdG8gYWJvdmUsIGV4Y2VwdCB0aGF0IGl0IGFsc28gcmVqZWN0cyByZWdpc3RlciBwcmUtIGFu ZCBwb3N0LQogICAgaW5jcmVtZW50aW5nLiAgKi8KIAotaW50Citib29sCiBzaWRlX2VmZmVjdHNf cCAoY29uc3RfcnR4IHgpCiB7CiAgIGNvbnN0IFJUWF9DT0RFIGNvZGUgPSBHRVRfQ09ERSAoeCk7 CkBAIC0zMDQ2LDcgKzMwNDYsNyBAQCBzaWRlX2VmZmVjdHNfcCAoY29uc3RfcnR4IHgpCiAgICAg Y2FzZSBBRERSX1ZFQzoKICAgICBjYXNlIEFERFJfRElGRl9WRUM6CiAgICAgY2FzZSBWQVJfTE9D QVRJT046Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2Ug Q0xPQkJFUjoKICAgICAgIC8qIFJlamVjdCBDTE9CQkVSIHdpdGggYSBub24tVk9JRCBtb2RlLiAg VGhlc2UgYXJlIG1hZGUgYnkgY29tYmluZS5jYwpAQCAtMzA2MiwxMyArMzA2MiwxMyBAQCBzaWRl X2VmZmVjdHNfcCAoY29uc3RfcnR4IHgpCiAgICAgY2FzZSBQT1NUX01PRElGWToKICAgICBjYXNl IENBTEw6CiAgICAgY2FzZSBVTlNQRUNfVk9MQVRJTEU6Ci0gICAgICByZXR1cm4gMTsKKyAgICAg IHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBNRU06CiAgICAgY2FzZSBBU01fSU5QVVQ6CiAgICAg Y2FzZSBBU01fT1BFUkFORFM6CiAgICAgICBpZiAoTUVNX1ZPTEFUSUxFX1AgKHgpKQotCXJldHVy biAxOworCXJldHVybiB0cnVlOwogCiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwpAQCAtMzA4 NSwyNiArMzA4NSwyNiBAQCBzaWRlX2VmZmVjdHNfcCAoY29uc3RfcnR4IHgpCiAJaWYgKGZtdFtp XSA9PSAnZScpCiAJICB7CiAJICAgIGlmIChzaWRlX2VmZmVjdHNfcCAoWEVYUCAoeCwgaSkpKQot CSAgICAgIHJldHVybiAxOworCSAgICAgIHJldHVybiB0cnVlOwogCSAgfQogCWVsc2UgaWYgKGZt dFtpXSA9PSAnRScpCiAJICB7CiAJICAgIGludCBqOwogCSAgICBmb3IgKGogPSAwOyBqIDwgWFZF Q0xFTiAoeCwgaSk7IGorKykKIAkgICAgICBpZiAoc2lkZV9lZmZlY3RzX3AgKFhWRUNFWFAgKHgs IGksIGopKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCSAgfQogICAgICAgfQogICB9 Ci0gIHJldHVybiAwOworICByZXR1cm4gZmFsc2U7CiB9CiAMCi0vKiBSZXR1cm4gbm9uemVybyBp ZiBldmFsdWF0aW5nIHJ0eCBYIG1pZ2h0IGNhdXNlIGEgdHJhcC4KLSAgIEZMQUdTIGNvbnRyb2xz IGhvdyB0byBjb25zaWRlciBNRU1zLiAgQSBub256ZXJvIG1lYW5zIHRoZSBjb250ZXh0CisvKiBS ZXR1cm4gdHJ1ZSBpZiBldmFsdWF0aW5nIHJ0eCBYIG1pZ2h0IGNhdXNlIGEgdHJhcC4KKyAgIEZM QUdTIGNvbnRyb2xzIGhvdyB0byBjb25zaWRlciBNRU1zLiAgQSB0cnVlIG1lYW5zIHRoZSBjb250 ZXh0CiAgICBvZiB0aGUgYWNjZXNzIG1heSBoYXZlIGNoYW5nZWQgZnJvbSB0aGUgb3JpZ2luYWws IHN1Y2ggdGhhdCB0aGUKICAgIGFkZHJlc3MgbWF5IGhhdmUgYmVjb21lIGludmFsaWQuICAqLwog Ci1pbnQKK2Jvb2wKIG1heV90cmFwX3BfMSAoY29uc3RfcnR4IHgsIHVuc2lnbmVkIGZsYWdzKQog ewogICBpbnQgaTsKQEAgLTMxMTcsNyArMzExNyw3IEBAIG1heV90cmFwX3BfMSAoY29uc3RfcnR4 IHgsIHVuc2lnbmVkIGZsYWdzKQogICBib29sIGNvZGVfY2hhbmdlZCA9IGZsYWdzICE9IDA7CiAK ICAgaWYgKHggPT0gMCkKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAgIGNvZGUg PSBHRVRfQ09ERSAoeCk7CiAgIHN3aXRjaCAoY29kZSkKICAgICB7CkBAIC0zMTI5LDcgKzMxMjks NyBAQCBtYXlfdHJhcF9wXzEgKGNvbnN0X3J0eCB4LCB1bnNpZ25lZCBmbGFncykKICAgICBjYXNl IFBDOgogICAgIGNhc2UgUkVHOgogICAgIGNhc2UgU0NSQVRDSDoKLSAgICAgIHJldHVybiAwOwor ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBVTlNQRUM6CiAgICAgICByZXR1cm4gdGFy Z2V0bS51bnNwZWNfbWF5X3RyYXBfcCAoeCwgZmxhZ3MpOwpAQCAtMzEzNyw3ICszMTM3LDcgQEAg bWF5X3RyYXBfcF8xIChjb25zdF9ydHggeCwgdW5zaWduZWQgZmxhZ3MpCiAgICAgY2FzZSBVTlNQ RUNfVk9MQVRJTEU6CiAgICAgY2FzZSBBU01fSU5QVVQ6CiAgICAgY2FzZSBUUkFQX0lGOgotICAg ICAgcmV0dXJuIDE7CisgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQVNNX09QRVJBTkRT OgogICAgICAgcmV0dXJuIE1FTV9WT0xBVElMRV9QICh4KTsKQEAgLTMxNDgsNyArMzE0OCw3IEBA IG1heV90cmFwX3BfMSAoY29uc3RfcnR4IHgsIHVuc2lnbmVkIGZsYWdzKQogICAgICAgaWYgKGZs YWdfc3RhY2tfY2hlY2sKIAkgICYmIE1FTV9WT0xBVElMRV9QICh4KQogCSAgJiYgWEVYUCAoeCwg MCkgPT0gc3RhY2tfcG9pbnRlcl9ydHgpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAgICAg ICBpZiAoLyogTUVNX05PVFJBUF9QIG9ubHkgcmVsYXRlcyB0byB0aGUgYWN0dWFsIHBvc2l0aW9u IG9mIHRoZSBtZW1vcnkKIAkgICAgIHJlZmVyZW5jZTsgbW92aW5nIGl0IG91dCBvZiBjb250ZXh0 IHN1Y2ggYXMgd2hlbiBtb3ZpbmcgY29kZQogCSAgICAgd2hlbiBvcHRpbWl6aW5nLCBtaWdodCBj YXVzZSBpdHMgYWRkcmVzcyB0byBiZWNvbWUgaW52YWxpZC4gICovCkBAIC0zMTYwLDcgKzMxNjAs NyBAQCBtYXlfdHJhcF9wXzEgKGNvbnN0X3J0eCB4LCB1bnNpZ25lZCBmbGFncykKIAkJCQkJR0VU X01PREUgKHgpLCBjb2RlX2NoYW5nZWQpOwogCX0KIAotICAgICAgcmV0dXJuIDA7CisgICAgICBy ZXR1cm4gZmFsc2U7CiAKICAgICAgIC8qIERpdmlzaW9uIGJ5IGEgbm9uLWNvbnN0YW50IG1pZ2h0 IHRyYXAuICAqLwogICAgIGNhc2UgRElWOgpAQCAtMzE2OCwxMSArMzE2OCwxMSBAQCBtYXlfdHJh cF9wXzEgKGNvbnN0X3J0eCB4LCB1bnNpZ25lZCBmbGFncykKICAgICBjYXNlIFVESVY6CiAgICAg Y2FzZSBVTU9EOgogICAgICAgaWYgKEhPTk9SX1NOQU5TICh4KSkKLQlyZXR1cm4gMTsKKwlyZXR1 cm4gdHJ1ZTsKICAgICAgIGlmIChGTE9BVF9NT0RFX1AgKEdFVF9NT0RFICh4KSkpCiAJcmV0dXJu IGZsYWdfdHJhcHBpbmdfbWF0aDsKICAgICAgIGlmICghQ09OU1RBTlRfUCAoWEVYUCAoeCwgMSkp IHx8IChYRVhQICh4LCAxKSA9PSBjb25zdDBfcnR4KSkKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1 ZTsKICAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IENPTlNUX1ZFQ1RPUikKIAl7 CiAJICAvKiBGb3IgQ09OU1RfVkVDVE9SLCByZXR1cm4gMSBpZiBhbnkgZWxlbWVudCBpcyBvciBt aWdodCBiZSB6ZXJvLiAgKi8KQEAgLTMxODEsMjIgKzMxODEsMjIgQEAgbWF5X3RyYXBfcF8xIChj b25zdF9ydHggeCwgdW5zaWduZWQgZmxhZ3MpCiAJICBpZiAoIUdFVF9NT0RFX05VTklUUyAoR0VU X01PREUgKG9wKSkuaXNfY29uc3RhbnQgKCZuX2VsdHMpKQogCSAgICB7CiAJICAgICAgaWYgKCFD T05TVF9WRUNUT1JfRFVQTElDQVRFX1AgKG9wKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVl OwogCSAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAodW5zaWduZWQgaW50KSBYVkVDTEVO IChvcCwgMCk7IGkrKykKIAkJaWYgKENPTlNUX1ZFQ1RPUl9FTkNPREVEX0VMVCAob3AsIGkpID09 IGNvbnN0MF9ydHgpCi0JCSAgcmV0dXJuIDE7CisJCSAgcmV0dXJuIHRydWU7CiAJICAgIH0KIAkg IGVsc2UKIAkgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fZWx0czsgaSsrKQogCSAgICAg IGlmIChDT05TVF9WRUNUT1JfRUxUIChvcCwgaSkgPT0gY29uc3QwX3J0eCkKLQkJcmV0dXJuIDE7 CisJCXJldHVybiB0cnVlOwogCX0KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWFBSX0xJU1Q6 CiAgICAgICAvKiBBbiBFWFBSX0xJU1QgaXMgdXNlZCB0byByZXByZXNlbnQgYSBmdW5jdGlvbiBj YWxsLiAgVGhpcwogCSBjZXJ0YWlubHkgbWF5IHRyYXAuICAqLwotICAgICAgcmV0dXJuIDE7Cisg ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgR0U6CiAgICAgY2FzZSBHVDoKQEAgLTMyMTUs MjkgKzMyMTUsMjkgQEAgbWF5X3RyYXBfcF8xIChjb25zdF9ydHggeCwgdW5zaWduZWQgZmxhZ3Mp CiAJIEZvciBpbnN0YW5jZSwgc3BhcmMgdXNlcyBDQ0ZQRSBmb3IgY29tcGFyZXMgd2hpY2ggZ2Vu ZXJhdGUgZXhjZXB0aW9ucwogCSBhbmQgQ0NGUCBmb3IgY29tcGFyZXMgd2hpY2ggZG8gbm90IGdl bmVyYXRlIGV4Y2VwdGlvbnMuICAqLwogICAgICAgaWYgKEhPTk9SX05BTlMgKHgpKQotCXJldHVy biAxOworCXJldHVybiB0cnVlOwogICAgICAgLyogQnV0IG9mdGVuIHRoZSBjb21wYXJlIGhhcyBz b21lIENDIG1vZGUsIHNvIGNoZWNrIG9wZXJhbmQKIAkgbW9kZXMgYXMgd2VsbC4gICovCiAgICAg ICBpZiAoSE9OT1JfTkFOUyAoWEVYUCAoeCwgMCkpCiAJICB8fCBIT05PUl9OQU5TIChYRVhQICh4 LCAxKSkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAgICAgICBicmVhazsKIAogICAgIGNh c2UgRVE6CiAgICAgY2FzZSBORToKICAgICAgIGlmIChIT05PUl9TTkFOUyAoeCkpCi0JcmV0dXJu IDE7CisJcmV0dXJuIHRydWU7CiAgICAgICAvKiBPZnRlbiBjb21wYXJpc29uIGlzIENDIG1vZGUs IHNvIGNoZWNrIG9wZXJhbmQgbW9kZXMuICAqLwogICAgICAgaWYgKEhPTk9SX1NOQU5TIChYRVhQ ICh4LCAwKSkKIAkgIHx8IEhPTk9SX1NOQU5TIChYRVhQICh4LCAxKSkpCi0JcmV0dXJuIDE7CisJ cmV0dXJuIHRydWU7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgRklYOgogICAgIGNhc2UgVU5T SUdORURfRklYOgogICAgICAgLyogQ29udmVyc2lvbiBvZiBmbG9hdGluZyBwb2ludCBtaWdodCB0 cmFwLiAgKi8KICAgICAgIGlmIChmbGFnX3RyYXBwaW5nX21hdGggJiYgSE9OT1JfTkFOUyAoWEVY UCAoeCwgMCkpKQotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogICAgICAgYnJlYWs7CiAKICAg ICBjYXNlIE5FRzoKQEAgLTMyNTMsNyArMzI1Myw3IEBAIG1heV90cmFwX3BfMSAoY29uc3RfcnR4 IHgsIHVuc2lnbmVkIGZsYWdzKQogICAgIGRlZmF1bHQ6CiAgICAgICAvKiBBbnkgZmxvYXRpbmcg YXJpdGhtZXRpYyBtYXkgdHJhcC4gICovCiAgICAgICBpZiAoRkxPQVRfTU9ERV9QIChHRVRfTU9E RSAoeCkpICYmIGZsYWdfdHJhcHBpbmdfbWF0aCkKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsK ICAgICB9CiAKICAgZm10ID0gR0VUX1JUWF9GT1JNQVQgKGNvZGUpOwpAQCAtMzI2MiwyOCArMzI2 MiwyOCBAQCBtYXlfdHJhcF9wXzEgKGNvbnN0X3J0eCB4LCB1bnNpZ25lZCBmbGFncykKICAgICAg IGlmIChmbXRbaV0gPT0gJ2UnKQogCXsKIAkgIGlmIChtYXlfdHJhcF9wXzEgKFhFWFAgKHgsIGkp LCBmbGFncykpCi0JICAgIHJldHVybiAxOworCSAgICByZXR1cm4gdHJ1ZTsKIAl9CiAgICAgICBl bHNlIGlmIChmbXRbaV0gPT0gJ0UnKQogCXsKIAkgIGludCBqOwogCSAgZm9yIChqID0gMDsgaiA8 IFhWRUNMRU4gKHgsIGkpOyBqKyspCiAJICAgIGlmIChtYXlfdHJhcF9wXzEgKFhWRUNFWFAgKHgs IGksIGopLCBmbGFncykpCi0JICAgICAgcmV0dXJuIDE7CisJICAgICAgcmV0dXJuIHRydWU7CiAJ fQogICAgIH0KLSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAotLyogUmV0dXJuIG5v bnplcm8gaWYgZXZhbHVhdGluZyBydHggWCBtaWdodCBjYXVzZSBhIHRyYXAuICAqLworLyogUmV0 dXJuIHRydWUgaWYgZXZhbHVhdGluZyBydHggWCBtaWdodCBjYXVzZSBhIHRyYXAuICAqLwogCi1p bnQKK2Jvb2wKIG1heV90cmFwX3AgKGNvbnN0X3J0eCB4KQogewogICByZXR1cm4gbWF5X3RyYXBf cF8xICh4LCAwKTsKIH0KIAotLyogU2FtZSBhcyBhYm92ZSwgYnV0IGFkZGl0aW9uYWxseSByZXR1 cm4gbm9uemVybyBpZiBldmFsdWF0aW5nIHJ0eCBYIG1pZ2h0CisvKiBTYW1lIGFzIGFib3ZlLCBi dXQgYWRkaXRpb25hbGx5IHJldHVybiB0cnVlIGlmIGV2YWx1YXRpbmcgcnR4IFggbWlnaHQKICAg IGNhdXNlIGEgZmF1bHQuICBXZSBkZWZpbmUgYSBmYXVsdCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhp cyBmdW5jdGlvbiBhcyBhCiAgICBlcnJvbmVvdXMgZXhlY3V0aW9uIGNvbmRpdGlvbiB0aGF0IGNh bm5vdCBiZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG5vcm1hbAogICAgZXhlY3V0aW9uIG9mIGEg dmFsaWQgcHJvZ3JhbTsgdGhlIHR5cGljYWwgZXhhbXBsZSBpcyBhbiB1bmFsaWduZWQgbWVtb3J5 CkBAIC0zMzIzLDcgKzMzMjMsNyBAQCBtYXlfdHJhcF9wIChjb25zdF9ydHggeCkKICAgIG1lbW9y eSByZWZlcmVuY2UgdG8gYSBzdGFjayBzbG90LCBidXQgaXQgd2lsbCBjZXJ0YWlubHkgY2F1c2Ug YSBmYXVsdAogICAgb24gYSBzdHJpY3QgYWxpZ25tZW50IG1hY2hpbmUuICAqLwogCi1pbnQKK2Jv b2wKIG1heV90cmFwX29yX2ZhdWx0X3AgKGNvbnN0X3J0eCB4KQogewogICByZXR1cm4gbWF5X3Ry YXBfcF8xICh4LCAxKTsKQEAgLTM1NTgsMTEgKzM1NTgsMTEgQEAgdGFibGVqdW1wX2Nhc2VzaV9w YXR0ZXJuIChjb25zdCBydHhfaW5zbiAqaW5zbikKICAgcmV0dXJuIE5VTExfUlRYOwogfQogCi0v KiBBIHN1YnJvdXRpbmUgb2YgY29tcHV0ZWRfanVtcF9wLCByZXR1cm4gMSBpZiBYIGNvbnRhaW5z IGEgUkVHIG9yIE1FTSBvcgorLyogQSBzdWJyb3V0aW5lIG9mIGNvbXB1dGVkX2p1bXBfcCwgcmV0 dXJuIHRydWUgaWYgWCBjb250YWlucyBhIFJFRyBvciBNRU0gb3IKICAgIGNvbnN0YW50IHRoYXQg aXMgbm90IGluIHRoZSBjb25zdGFudCBwb29sIGFuZCBub3QgaW4gdGhlIGNvbmRpdGlvbgogICAg b2YgYW4gSUZfVEhFTl9FTFNFLiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGNvbXB1 dGVkX2p1bXBfcF8xIChjb25zdF9ydHggeCkKIHsKICAgY29uc3QgZW51bSBydHhfY29kZSBjb2Rl ID0gR0VUX0NPREUgKHgpOwpAQCAtMzU3MywxMyArMzU3MywxMyBAQCBjb21wdXRlZF9qdW1wX3Bf MSAoY29uc3RfcnR4IHgpCiAgICAgewogICAgIGNhc2UgTEFCRUxfUkVGOgogICAgIGNhc2UgUEM6 Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ09OU1Q6 CiAgICAgQ0FTRV9DT05TVF9BTlk6CiAgICAgY2FzZSBTWU1CT0xfUkVGOgogICAgIGNhc2UgUkVH OgotICAgICAgcmV0dXJuIDE7CisgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTUVNOgog ICAgICAgcmV0dXJuICEgKEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gU1lNQk9MX1JFRgpAQCAt MzU5OCwyMyArMzU5OCwyMyBAQCBjb21wdXRlZF9qdW1wX3BfMSAoY29uc3RfcnR4IHgpCiAgICAg ewogICAgICAgaWYgKGZtdFtpXSA9PSAnZScKIAkgICYmIGNvbXB1dGVkX2p1bXBfcF8xIChYRVhQ ICh4LCBpKSkpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAKICAgICAgIGVsc2UgaWYgKGZt dFtpXSA9PSAnRScpCiAJZm9yIChqID0gMDsgaiA8IFhWRUNMRU4gKHgsIGkpOyBqKyspCiAJICBp ZiAoY29tcHV0ZWRfanVtcF9wXzEgKFhWRUNFWFAgKHgsIGksIGopKSkKLQkgICAgcmV0dXJuIDE7 CisJICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICByZXR1cm4gMDsKKyAgcmV0dXJuIGZhbHNl OwogfQogCi0vKiBSZXR1cm4gbm9uemVybyBpZiBJTlNOIGlzIGFuIGluZGlyZWN0IGp1bXAgKGFr YSBjb21wdXRlZCBqdW1wKS4KKy8qIFJldHVybiB0cnVlIGlmIElOU04gaXMgYW4gaW5kaXJlY3Qg anVtcCAoYWthIGNvbXB1dGVkIGp1bXApLgogCiAgICBUYWJsZWp1bXBzIGFuZCBjYXNlc2kgaW5z bnMgYXJlIG5vdCBjb25zaWRlcmVkIGluZGlyZWN0IGp1bXBzOwogICAgd2UgY2FuIHJlY29nbml6 ZSB0aGVtIGJ5IGEgKHVzZSAobGFiZWxfcmVmKSkuICAqLwogCi1pbnQKK2Jvb2wKIGNvbXB1dGVk X2p1bXBfcCAoY29uc3QgcnR4X2luc24gKmluc24pCiB7CiAgIGludCBpOwpAQCAtMzYyNCwyMCAr MzYyNCwyMCBAQCBjb21wdXRlZF9qdW1wX3AgKGNvbnN0IHJ0eF9pbnNuICppbnNuKQogCiAgICAg ICAvKiBJZiB3ZSBoYXZlIGEgSlVNUF9MQUJFTCBzZXQsIHdlJ3JlIG5vdCBhIGNvbXB1dGVkIGp1 bXAuICAqLwogICAgICAgaWYgKEpVTVBfTEFCRUwgKGluc24pICE9IE5VTEwpCi0JcmV0dXJuIDA7 CisJcmV0dXJuIGZhbHNlOwogCiAgICAgICBpZiAoR0VUX0NPREUgKHBhdCkgPT0gUEFSQUxMRUwp CiAJewogCSAgaW50IGxlbiA9IFhWRUNMRU4gKHBhdCwgMCk7Ci0JICBpbnQgaGFzX3VzZV9sYWJl bHJlZiA9IDA7CisJICBib29sIGhhc191c2VfbGFiZWxyZWYgPSBmYWxzZTsKIAogCSAgZm9yIChp ID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pCiAJICAgIGlmIChHRVRfQ09ERSAoWFZFQ0VYUCAocGF0 LCAwLCBpKSkgPT0gVVNFCiAJCSYmIChHRVRfQ09ERSAoWEVYUCAoWFZFQ0VYUCAocGF0LCAwLCBp KSwgMCkpCiAJCSAgICA9PSBMQUJFTF9SRUYpKQogCSAgICAgIHsKLQkgICAgICAgIGhhc191c2Vf bGFiZWxyZWYgPSAxOwotCSAgICAgICAgYnJlYWs7CisJCWhhc191c2VfbGFiZWxyZWYgPSB0cnVl OworCQlicmVhazsKIAkgICAgICB9CiAKIAkgIGlmICghIGhhc191c2VfbGFiZWxyZWYpCkBAIC0z NjQ1LDE0ICszNjQ1LDE0IEBAIGNvbXB1dGVkX2p1bXBfcCAoY29uc3QgcnR4X2luc24gKmluc24p CiAJICAgICAgaWYgKEdFVF9DT0RFIChYVkVDRVhQIChwYXQsIDAsIGkpKSA9PSBTRVQKIAkJICAm JiBTRVRfREVTVCAoWFZFQ0VYUCAocGF0LCAwLCBpKSkgPT0gcGNfcnR4CiAJCSAgJiYgY29tcHV0 ZWRfanVtcF9wXzEgKFNFVF9TUkMgKFhWRUNFWFAgKHBhdCwgMCwgaSkpKSkKLQkJcmV0dXJuIDE7 CisJCXJldHVybiB0cnVlOwogCX0KICAgICAgIGVsc2UgaWYgKEdFVF9DT0RFIChwYXQpID09IFNF VAogCSAgICAgICAmJiBTRVRfREVTVCAocGF0KSA9PSBwY19ydHgKIAkgICAgICAgJiYgY29tcHV0 ZWRfanVtcF9wXzEgKFNFVF9TUkMgKHBhdCkpKQotCXJldHVybiAxOworCXJldHVybiB0cnVlOwog ICAgIH0KLSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAogDApAQCAtMzgzNiw3ICsz ODM2LDcgQEAgY29tbXV0YXRpdmVfb3BlcmFuZF9wcmVjZWRlbmNlIChydHggb3ApCiAgICAgfQog fQogCi0vKiBSZXR1cm4gMSBpZmYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3YXAgb3BlcmFuZHMgb2Yg Y29tbXV0YXRpdmUgb3BlcmF0aW9uCisvKiBSZXR1cm4gdHJ1ZSBpZmYgaXQgaXMgbmVjZXNzYXJ5 IHRvIHN3YXAgb3BlcmFuZHMgb2YgY29tbXV0YXRpdmUgb3BlcmF0aW9uCiAgICBpbiBvcmRlciB0 byBjYW5vbmljYWxpemUgZXhwcmVzc2lvbi4gICovCiAKIGJvb2wKQEAgLTM4NDYsOSArMzg0Niw5 IEBAIHN3YXBfY29tbXV0YXRpdmVfb3BlcmFuZHNfcCAocnR4IHgsIHJ0eCB5KQogCSAgPCBjb21t dXRhdGl2ZV9vcGVyYW5kX3ByZWNlZGVuY2UgKHkpKTsKIH0KIAotLyogUmV0dXJuIDEgaWYgWCBp cyBhbiBhdXRvaW5jcmVtZW50IHNpZGUgZWZmZWN0IGFuZCB0aGUgcmVnaXN0ZXIgaXMKKy8qIFJl dHVybiB0cnVlIGlmIFggaXMgYW4gYXV0b2luY3JlbWVudCBzaWRlIGVmZmVjdCBhbmQgdGhlIHJl Z2lzdGVyIGlzCiAgICBub3QgdGhlIHN0YWNrIHBvaW50ZXIuICAqLwotaW50Citib29sCiBhdXRv X2luY19wIChjb25zdF9ydHggeCkKIHsKICAgc3dpdGNoIChHRVRfQ09ERSAoeCkpCkBAIC0zODYx LDE1ICszODYxLDE1IEBAIGF1dG9faW5jX3AgKGNvbnN0X3J0eCB4KQogICAgIGNhc2UgUE9TVF9N T0RJRlk6CiAgICAgICAvKiBUaGVyZSBhcmUgbm8gUkVHX0lOQyBub3RlcyBmb3IgU1AuICAqLwog ICAgICAgaWYgKFhFWFAgKHgsIDApICE9IHN0YWNrX3BvaW50ZXJfcnR4KQotCXJldHVybiAxOwor CXJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgICB9Ci0gIHJldHVy biAwOworICByZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFJldHVybiBub256ZXJvIGlmIElOIGNvbnRh aW5zIGEgcGllY2Ugb2YgcnRsIHRoYXQgaGFzIHRoZSBhZGRyZXNzIExPQy4gICovCi1pbnQKKy8q IFJldHVybiB0cnVlIGlmIElOIGNvbnRhaW5zIGEgcGllY2Ugb2YgcnRsIHRoYXQgaGFzIHRoZSBh ZGRyZXNzIExPQy4gICovCitib29sCiBsb2NfbWVudGlvbmVkX2luX3AgKHJ0eCAqbG9jLCBjb25z dF9ydHggaW4pCiB7CiAgIGVudW0gcnR4X2NvZGUgY29kZTsKQEAgLTM4NzcsNyArMzg3Nyw3IEBA IGxvY19tZW50aW9uZWRfaW5fcCAocnR4ICpsb2MsIGNvbnN0X3J0eCBpbikKICAgaW50IGksIGo7 CiAKICAgaWYgKCFpbikKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgY29k ZSA9IEdFVF9DT0RFIChpbik7CiAgIGZtdCA9IEdFVF9SVFhfRk9STUFUIChjb2RlKTsKQEAgLTM4 ODYsMTUgKzM4ODYsMTUgQEAgbG9jX21lbnRpb25lZF9pbl9wIChydHggKmxvYywgY29uc3RfcnR4 IGluKQogICAgICAgaWYgKGZtdFtpXSA9PSAnZScpCiAJewogCSAgaWYgKGxvYyA9PSAmWEVYUCAo aW4sIGkpIHx8IGxvY19tZW50aW9uZWRfaW5fcCAobG9jLCBYRVhQIChpbiwgaSkpKQotCSAgICBy ZXR1cm4gMTsKKwkgICAgcmV0dXJuIHRydWU7CiAJfQogICAgICAgZWxzZSBpZiAoZm10W2ldID09 ICdFJykKIAlmb3IgKGogPSBYVkVDTEVOIChpbiwgaSkgLSAxOyBqID49IDA7IGotLSkKIAkgIGlm IChsb2MgPT0gJlhWRUNFWFAgKGluLCBpLCBqKQogCSAgICAgIHx8IGxvY19tZW50aW9uZWRfaW5f cCAobG9jLCBYVkVDRVhQIChpbiwgaSwgaikpKQotCSAgICByZXR1cm4gMTsKKwkgICAgcmV0dXJu IHRydWU7CiAgICAgfQotICByZXR1cm4gMDsKKyAgcmV0dXJuIGZhbHNlOwogfQogCiAvKiBSZWlu dGVycHJldCBhIHN1YnJlZyBhcyBhIGJpdCBleHRyYWN0aW9uIGZyb20gYW4gaW50ZWdlciBhbmQg cmV0dXJuCg== --000000000000d8919a05fcd60b2c--