From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: [RFC] some reworking of struct window Date: Thu, 21 Mar 2013 13:39:27 +0400 Message-ID: <514AD54F.8050309@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080102020802020500060203" X-Trace: ger.gmane.org 1363858799 16212 80.91.229.3 (21 Mar 2013 09:39:59 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 21 Mar 2013 09:39:59 +0000 (UTC) To: Emacs development discussions Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Mar 21 10:40:22 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UIbyv-0008N1-BM for ged-emacs-devel@m.gmane.org; Thu, 21 Mar 2013 10:40:21 +0100 Original-Received: from localhost ([::1]:44114 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIbyY-0006OR-1y for ged-emacs-devel@m.gmane.org; Thu, 21 Mar 2013 05:39:58 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:40119) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIbyK-0006BK-K2 for emacs-devel@gnu.org; Thu, 21 Mar 2013 05:39:53 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UIbyB-0008DZ-2M for emacs-devel@gnu.org; Thu, 21 Mar 2013 05:39:44 -0400 Original-Received: from forward13.mail.yandex.net ([95.108.130.120]:54531) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIby9-0008DA-B3 for emacs-devel@gnu.org; Thu, 21 Mar 2013 05:39:34 -0400 Original-Received: from smtp12.mail.yandex.net (smtp12.mail.yandex.net [95.108.131.191]) by forward13.mail.yandex.net (Yandex) with ESMTP id 34681140521 for ; Thu, 21 Mar 2013 13:39:29 +0400 (MSK) Original-Received: from smtp12.mail.yandex.net (localhost [127.0.0.1]) by smtp12.mail.yandex.net (Yandex) with ESMTP id 1AE7D16A0783 for ; Thu, 21 Mar 2013 13:39:29 +0400 (MSK) Original-Received: from unknown (unknown [37.139.80.10]) by smtp12.mail.yandex.net (nwsmtp/Yandex) with ESMTP id dRBCxq2j-dSBmP3L2; Thu, 21 Mar 2013 13:39:28 +0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1363858769; bh=dsh5MKl22jV92Uphc7JEH+NBPCjtaphD2oY6JVx/vPs=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: Content-Type; b=HD793d+EIeWeDvHvwnB0+b4Xvshq6Z2B6l3cboBlClIiQqWSjEnOQcoK8CPMP3ruW UtmGnWlt7bqMbd3PXfHZvRDkXGABuhc3dnoByYGyB67WTifFvsoXJYsNTiGPMAVCPI 13XuLrmutZu2979AsdmAhFgSTZGn98JPRiOWN+DQ= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130307 Thunderbird/17.0.4 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 95.108.130.120 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:158023 Archived-At: This is a multi-part message in MIME format. --------------080102020802020500060203 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch implements the further generalization of an idea suggested by Stefan at http://lists.gnu.org/archive/html/emacs-devel/2013-02/msg00088.html. The main motivations are 1) make 'struct window' even bit smaller and 2) simplify the code like: if (!NILP (w->hchild)) foo (w->hchild); else if (!NILP (w->vchild)) foo (w->vchild); else /* assume leaf window with w->buffer */ bar (w->buffer); to: if (WINDOWP (w->object)) foo (w->object); else /* assume leaf window with buffer at w->object */ bar (w->object); As usual, reviews and comments are highly appreciated, especially for the 'struct window' member which replaces hchild/vchild/buffer (I don't like too generic 'object', but couldn't think up the better name). Dmitry --------------080102020802020500060203 Content-Type: text/plain; charset=UTF-8; name="window_object.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="window_object.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9hbGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMy0w My0xOSAwNDo0MTo1MyArMDAwMAorKysgc3JjL2FsbG9jLmMJMjAxMy0wMy0yMSAwNToxNzox MiArMDAwMApAQCAtNTgzNywxNCArNTgzNywxMyBAQAogCSAgY2FzZSBQVkVDX1dJTkRPVzoK IAkgICAgewogCSAgICAgIHN0cnVjdCB3aW5kb3cgKncgPSAoc3RydWN0IHdpbmRvdyAqKSBw dHI7Ci0JICAgICAgYm9vbCBsZWFmID0gTklMUCAody0+aGNoaWxkKSAmJiBOSUxQICh3LT52 Y2hpbGQpOwogCiAJICAgICAgbWFya192ZWN0b3JsaWtlIChwdHIpOwogCiAJICAgICAgLyog TWFyayBnbHlwaHMgZm9yIGxlYWYgd2luZG93cy4gIE1hcmtpbmcgd2luZG93CiAJCSBtYXRy aWNlcyBpcyBzdWZmaWNpZW50IGJlY2F1c2UgZnJhbWUgbWF0cmljZXMKIAkJIHVzZSB0aGUg c2FtZSBnbHlwaCBtZW1vcnkuICAqLwotCSAgICAgIGlmIChsZWFmICYmIHctPmN1cnJlbnRf bWF0cml4KQorCSAgICAgIGlmICh3LT50eXBlID09IFdJTkRPV19MRUFGICYmIHctPmN1cnJl bnRfbWF0cml4KQogCQl7CiAJCSAgbWFya19nbHlwaF9tYXRyaXggKHctPmN1cnJlbnRfbWF0 cml4KTsKIAkJICBtYXJrX2dseXBoX21hdHJpeCAody0+ZGVzaXJlZF9tYXRyaXgpOwoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy9idWZmZXIuYycKLS0tIHNyYy9idWZmZXIuYwkyMDEzLTAx LTE5IDIwOjA0OjMzICswMDAwCisrKyBzcmMvYnVmZmVyLmMJMjAxMy0wMy0yMSAwODo1Njow MSArMDAwMApAQCAtMTc2OSw3ICsxNzY5LDcgQEAKICAgICAgc2luY2UgYW55dGhpbmcgY2Fu IGhhcHBlbiB3aXRoaW4gZG9feWVzX29yX25vX3AuICAqLwogCiAgIC8qIERvbid0IGtpbGwg dGhlIG1pbmlidWZmZXIgbm93IGN1cnJlbnQuICAqLwotICBpZiAoRVEgKGJ1ZmZlciwgWFdJ TkRPVyAobWluaWJ1Zl93aW5kb3cpLT5idWZmZXIpKQorICBpZiAoRVEgKGJ1ZmZlciwgWFdJ TkRPVyAobWluaWJ1Zl93aW5kb3cpLT5vYmplY3QpKQogICAgIHJldHVybiBRbmlsOwogCiAg IC8qIFdoZW4gd2Uga2lsbCBhbiBvcmRpbmFyeSBidWZmZXIgd2hpY2ggc2hhcmVzIGl0J3Mg YnVmZmVyIHRleHQKQEAgLTE4MjAsNyArMTgyMCw3IEBACiAgIC8qIElmIHRoZSBidWZmZXIg bm93IGN1cnJlbnQgaXMgc2hvd24gaW4gdGhlIG1pbmlidWZmZXIgYW5kIG91ciBidWZmZXIK ICAgICAgaXMgdGhlIHNvbGUgb3RoZXIgYnVmZmVyIGdpdmUgdXAuICAqLwogICBYU0VUQlVG RkVSICh0ZW0sIGN1cnJlbnRfYnVmZmVyKTsKLSAgaWYgKEVRICh0ZW0sIFhXSU5ET1cgKG1p bmlidWZfd2luZG93KS0+YnVmZmVyKQorICBpZiAoRVEgKHRlbSwgWFdJTkRPVyAobWluaWJ1 Zl93aW5kb3cpLT5vYmplY3QpCiAgICAgICAmJiBFUSAoYnVmZmVyLCBGb3RoZXJfYnVmZmVy IChidWZmZXIsIFFuaWwsIFFuaWwpKSkKICAgICByZXR1cm4gUW5pbDsKIApAQCAtMjM5NCw3 ICsyMzk0LDcgQEAKIAkgICBCVUZfTUFSS0VSUyhidWYpIHNob3VsZCBlaXRoZXIgYmUgZm9y IGBidWYnIG9yIGRlYWQuICAqLwogCWVhc3NlcnQgKCFtLT5idWZmZXIpOwogICB9Ci0gIHsg LyogU29tZSBvZiB0aGUgQyBjb2RlIGV4cGVjdHMgdGhhdCB3LT5idWZmZXIgPT0gdy0+cG9p bnRtLT5idWZmZXIuCisgIHsgLyogU29tZSBvZiB0aGUgQyBjb2RlIGV4cGVjdHMgdGhhdCB3 LT5vYmplY3QgPT0gdy0+cG9pbnRtLT5idWZmZXIuCiAgICAgICAgU28gc2luY2Ugd2UganVz dCBzd2FwcGVkIHRoZSBtYXJrZXJzIGJldHdlZW4gdGhlIHR3byBidWZmZXJzLCB3ZSBuZWVk CiAgICAgICAgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHRoaXMgc3dhcCBmb3Igd2luZG93IG1h cmtlcnMuICAqLwogICAgIExpc3BfT2JqZWN0IHcgPSBGc2VsZWN0ZWRfd2luZG93ICgpLCB3 cyA9IFFuaWw7CkBAIC0yNDA1LDEyICsyNDA1LDEyIEBACiAgICAgICB7CiAJd3MgPSBGY29u cyAodywgd3MpOwogCWlmIChNQVJLRVJQIChYV0lORE9XICh3KS0+cG9pbnRtKQotCSAgICAm JiAoRVEgKFhXSU5ET1cgKHcpLT5idWZmZXIsIGJ1ZjEpCi0JCXx8IEVRIChYV0lORE9XICh3 KS0+YnVmZmVyLCBidWYyKSkpCisJICAgICYmIChFUSAoWFdJTkRPVyAodyktPm9iamVjdCwg YnVmMSkKKwkJfHwgRVEgKFhXSU5ET1cgKHcpLT5vYmplY3QsIGJ1ZjIpKSkKIAkgIEZzZXRf bWFya2VyIChYV0lORE9XICh3KS0+cG9pbnRtLAogCQkgICAgICAgbWFrZV9udW1iZXIKLQkJ ICAgICAgIChCVUZfQkVHViAoWEJVRkZFUiAoWFdJTkRPVyAodyktPmJ1ZmZlcikpKSwKLQkJ ICAgICAgIFhXSU5ET1cgKHcpLT5idWZmZXIpOworCQkgICAgICAgKEJVRl9CRUdWIChYQlVG RkVSIChYV0lORE9XICh3KS0+b2JqZWN0KSkpLAorCQkgICAgICAgWFdJTkRPVyAodyktPm9i amVjdCk7CiAJdyA9IEZuZXh0X3dpbmRvdyAodywgUXQsIFF0KTsKICAgICAgIH0KICAgfQpA QCAtMzg5Myw3ICszODkzLDcgQEAKICAgaWYgKGJ1ZmZlcl93aW5kb3dfY291bnQgKGJ1Zikg PiAwKQogICAgIHsKICAgICAgIC8qIC4uLiBpdCdzIHZpc2libGUgaW4gb3RoZXIgd2luZG93 IHRoYW4gc2VsZWN0ZWQsICAqLwotICAgICAgaWYgKGJ1ZiAhPSBYQlVGRkVSIChYV0lORE9X IChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpKQorICAgICAgaWYgKGJ1ZiAhPSBYQlVGRkVS IChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5vYmplY3QpKQogCXdpbmRvd3Nfb3JfYnVm ZmVyc19jaGFuZ2VkID0gMTsKICAgICAgIC8qIC4uLiBvciBpZiB3ZSBtb2RpZnkgYW4gb3Zl cmxheSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIKIAkgYW5kIHNvIHdlIGNhbm5vdCBiZSBz dXJlIHRoYXQgd2luZG93IGVuZCBpcyBzdGlsbCB2YWxpZC4gICovCgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL2Rpc3BleHRlcm4uaCcKLS0tIHNyYy9kaXNwZXh0ZXJuLmgJMjAxMy0wMy0x OSAwNDo0MTo1MyArMDAwMAorKysgc3JjL2Rpc3BleHRlcm4uaAkyMDEzLTAzLTIxIDA1OjA1 OjIzICswMDAwCkBAIC0xNDEyLDI0ICsxNDEyLDI0IEBACiAKIC8qIFZhbHVlIGlzIG5vbi16 ZXJvIGlmIHdpbmRvdyBXIHdhbnRzIGEgbW9kZSBsaW5lLiAgKi8KIAotI2RlZmluZSBXSU5E T1dfV0FOVFNfTU9ERUxJTkVfUChXKQkJCQkJXAotICAgICAoIU1JTklfV0lORE9XX1AgKChX KSkJCQkJCQlcCi0gICAgICAmJiAhKFcpLT5wc2V1ZG9fd2luZG93X3AJCQkJCQlcCi0gICAg ICAmJiBGUkFNRV9XQU5UU19NT0RFTElORV9QIChYRlJBTUUgKFdJTkRPV19GUkFNRSAoKFcp KSkpCQlcCi0gICAgICAmJiBCVUZGRVJQIChXLT5idWZmZXIpCQkJCQlcCi0gICAgICAmJiAh TklMUCAoQlZBUiAoWEJVRkZFUiAoVy0+YnVmZmVyKSwgbW9kZV9saW5lX2Zvcm1hdCkpCVwK KyNkZWZpbmUgV0lORE9XX1dBTlRTX01PREVMSU5FX1AoVykJCQkJXAorICAgICAoIU1JTklf V0lORE9XX1AgKChXKSkJCQkJCVwKKyAgICAgICYmICEoVyktPnBzZXVkb193aW5kb3dfcAkJ CQkJXAorICAgICAgJiYgRlJBTUVfV0FOVFNfTU9ERUxJTkVfUCAoWEZSQU1FIChXSU5ET1df RlJBTUUgKChXKSkpKQlcCisgICAgICAmJiBCVUZGRVJQIChXLT5vYmplY3QpCQkJCQlcCisg ICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAoVy0+b2JqZWN0KSwgbW9kZV9saW5lX2Zv cm1hdCkpCVwKICAgICAgICYmIFdJTkRPV19UT1RBTF9MSU5FUyAoVykgPiAxKQogCiAvKiBW YWx1ZSBpcyB0cnVlIGlmIHdpbmRvdyBXIHdhbnRzIGEgaGVhZGVyIGxpbmUuICAqLwogCi0j ZGVmaW5lIFdJTkRPV19XQU5UU19IRUFERVJfTElORV9QKFcpCQkJCQlcCi0gICAgICghTUlO SV9XSU5ET1dfUCAoKFcpKQkJCQkJCVwKLSAgICAgICYmICEoVyktPnBzZXVkb193aW5kb3df cAkJCQkJCVwKLSAgICAgICYmIEZSQU1FX1dBTlRTX01PREVMSU5FX1AgKFhGUkFNRSAoV0lO RE9XX0ZSQU1FICgoVykpKSkJCVwKLSAgICAgICYmIEJVRkZFUlAgKFctPmJ1ZmZlcikJCQkJ CVwKLSAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSIChXLT5idWZmZXIpLCBoZWFkZXJf bGluZV9mb3JtYXQpKQlcCi0gICAgICAmJiBXSU5ET1dfVE9UQUxfTElORVMgKFcpID4gMQkJ CQkJXAotICAgICAgKyAhTklMUCAoQlZBUiAoWEJVRkZFUiAoVy0+YnVmZmVyKSwgbW9kZV9s aW5lX2Zvcm1hdCkpKQorI2RlZmluZSBXSU5ET1dfV0FOVFNfSEVBREVSX0xJTkVfUChXKQkJ CQlcCisgICAgICghTUlOSV9XSU5ET1dfUCAoKFcpKQkJCQkJXAorICAgICAgJiYgIShXKS0+ cHNldWRvX3dpbmRvd19wCQkJCQlcCisgICAgICAmJiBGUkFNRV9XQU5UU19NT0RFTElORV9Q IChYRlJBTUUgKFdJTkRPV19GUkFNRSAoKFcpKSkpCVwKKyAgICAgICYmIEJVRkZFUlAgKFct Pm9iamVjdCkJCQkJCVwKKyAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSIChXLT5vYmpl Y3QpLCBoZWFkZXJfbGluZV9mb3JtYXQpKQlcCisgICAgICAmJiBXSU5ET1dfVE9UQUxfTElO RVMgKFcpID4gMQkJCQlcCisgICAgICArICFOSUxQIChCVkFSIChYQlVGRkVSIChXLT5vYmpl Y3QpLCBtb2RlX2xpbmVfZm9ybWF0KSkpCiAKIAogLyogUmV0dXJuIHByb3BlciB2YWx1ZSB0 byBiZSB1c2VkIGFzIGJhc2VsaW5lIG9mZnNldCBvZiBmb250IHRoYXQgaGFzCgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL2Rpc3BuZXcuYycKLS0tIHNyYy9kaXNwbmV3LmMJMjAxMy0wMy0y MCAxMToyOTozNyArMDAwMAorKysgc3JjL2Rpc3BuZXcuYwkyMDEzLTAzLTIxIDA4OjU3OjU1 ICswMDAwCkBAIC0yMjMsOSArMjIzLDkgQEAKIAkgICAgIiUicE11Ijogd2luZG93ICVwIChg JXMnKSVzXG4lcyIsCiAJICAgIGhpc3RvcnlfdGljaysrLAogCSAgICB3LAotCSAgICAoKEJV RkZFUlAgKHctPmJ1ZmZlcikKLQkgICAgICAmJiBTVFJJTkdQIChCVkFSIChYQlVGRkVSICh3 LT5idWZmZXIpLCBuYW1lKSkpCi0JICAgICA/IFNTREFUQSAoQlZBUiAoWEJVRkZFUiAody0+ YnVmZmVyKSwgbmFtZSkpCisJICAgICgoQlVGRkVSUCAody0+b2JqZWN0KQorCSAgICAgICYm IFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPm9iamVjdCksIG5hbWUpKSkKKwkgICAgID8g U1NEQVRBIChCVkFSIChYQlVGRkVSICh3LT5vYmplY3QpLCBuYW1lKSkKIAkgICAgIDogIj8/ PyIpLAogCSAgICBwYXVzZWRfcCA/ICIgKioqcGF1c2VkKioqIiA6ICIiLAogCSAgICBtc2cp OwpAQCAtODM4LDE2ICs4MzgsOCBAQAogewogICB3aGlsZSAodykKICAgICB7Ci0gICAgICBp ZiAoIU5JTFAgKHctPmhjaGlsZCkpCi0JewotCSAgZWFzc2VydCAoV0lORE9XUCAody0+aGNo aWxkKSk7Ci0JICBjbGVhcl93aW5kb3dfbWF0cmljZXMgKFhXSU5ET1cgKHctPmhjaGlsZCks IGRlc2lyZWRfcCk7Ci0JfQotICAgICAgZWxzZSBpZiAoIU5JTFAgKHctPnZjaGlsZCkpCi0J ewotCSAgZWFzc2VydCAoV0lORE9XUCAody0+dmNoaWxkKSk7Ci0JICBjbGVhcl93aW5kb3df bWF0cmljZXMgKFhXSU5ET1cgKHctPnZjaGlsZCksIGRlc2lyZWRfcCk7Ci0JfQorICAgICAg aWYgKFdJTkRPV1AgKHctPm9iamVjdCkpCisJY2xlYXJfd2luZG93X21hdHJpY2VzIChYV0lO RE9XICh3LT5vYmplY3QpLCBkZXNpcmVkX3ApOwogICAgICAgZWxzZQogCXsKIAkgIGlmIChk ZXNpcmVkX3ApCkBAIC0xNDY4LDcgKzE0NjAsNyBAQAogICBzdHJ1Y3QgZ2x5cGhfcm93ICpy b3cgPSBtYXRyaXgtPnJvd3M7CiAgIHN0cnVjdCBnbHlwaF9yb3cgKmxhc3RfdGV4dF9yb3cg PSBOVUxMOwogICBzdHJ1Y3QgYnVmZmVyICpzYXZlZCA9IGN1cnJlbnRfYnVmZmVyOwotICBz dHJ1Y3QgYnVmZmVyICpidWZmZXIgPSBYQlVGRkVSICh3LT5idWZmZXIpOworICBzdHJ1Y3Qg YnVmZmVyICpidWZmZXIgPSBYQlVGRkVSICh3LT5vYmplY3QpOwogICBpbnQgYzsKIAogICAv KiBUaGlzIGNhbiBzb21ldGltZXMgaGFwcGVuIGZvciBhIGZyZXNoIHdpbmRvdy4gICovCkBA IC0xNjMyLDcgKzE2MjQsOCBAQAogICAgICB2ZXJ0aWNhbGx5IGJlbG93IG90aGVyIHdpbmRv d3MuICAqLwogICBpbl9ob3J6X2NvbWJpbmF0aW9uX3AKICAgICA9ICghTklMUCAoWFdJTkRP VyAod2luZG93KS0+cGFyZW50KQotICAgICAgICYmICFOSUxQIChYV0lORE9XIChYV0lORE9X ICh3aW5kb3cpLT5wYXJlbnQpLT5oY2hpbGQpKTsKKyAgICAgICAmJiAoWFdJTkRPVyAoWFdJ TkRPVyAod2luZG93KS0+cGFyZW50KS0+dHlwZQorCSAgID09IFdJTkRPV19IT1JJWk9OVEFM X0NPTUJJTkFUSU9OKSk7CiAKICAgLyogRm9yIFdJTkRPVyBhbmQgYWxsIHdpbmRvd3Mgb24g dGhlIHNhbWUgbGV2ZWwuICAqLwogICBkbwpAQCAtMTY0MSwxMiArMTYzNCw4IEBACiAKICAg ICAgIC8qIEdldCB0aGUgZGltZW5zaW9uIG9mIHRoZSB3aW5kb3cgc3ViLW1hdHJpeCBmb3Ig VywgZGVwZW5kaW5nCiAJIG9uIHdoZXRoZXIgdGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9yIGEg bGVhZiB3aW5kb3cuICAqLwotICAgICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotCWRpbSA9 IGFsbG9jYXRlX21hdHJpY2VzX2Zvcl9mcmFtZV9yZWRpc3BsYXkgKHctPmhjaGlsZCwgeCwg eSwKLQkJCQkJCSAgICAgZGltX29ubHlfcCwKLQkJCQkJCSAgICAgd2luZG93X2NoYW5nZV9m bGFncyk7Ci0gICAgICBlbHNlIGlmICghTklMUCAody0+dmNoaWxkKSkKLQlkaW0gPSBhbGxv Y2F0ZV9tYXRyaWNlc19mb3JfZnJhbWVfcmVkaXNwbGF5ICh3LT52Y2hpbGQsIHgsIHksCisg ICAgICBpZiAoV0lORE9XUCAody0+b2JqZWN0KSkKKwlkaW0gPSBhbGxvY2F0ZV9tYXRyaWNl c19mb3JfZnJhbWVfcmVkaXNwbGF5ICh3LT5vYmplY3QsIHgsIHksCiAJCQkJCQkgICAgIGRp bV9vbmx5X3AsCiAJCQkJCQkgICAgIHdpbmRvd19jaGFuZ2VfZmxhZ3MpOwogICAgICAgZWxz ZQpAQCAtMTc4OCwxMCArMTc3Nyw4IEBACiB7CiAgIHdoaWxlICh3KQogICAgIHsKLSAgICAg IGlmICghTklMUCAody0+dmNoaWxkKSkKLQlhbGxvY2F0ZV9tYXRyaWNlc19mb3Jfd2luZG93 X3JlZGlzcGxheSAoWFdJTkRPVyAody0+dmNoaWxkKSk7Ci0gICAgICBlbHNlIGlmICghTklM UCAody0+aGNoaWxkKSkKLQlhbGxvY2F0ZV9tYXRyaWNlc19mb3Jfd2luZG93X3JlZGlzcGxh eSAoWFdJTkRPVyAody0+aGNoaWxkKSk7CisgICAgICBpZiAoV0lORE9XUCAody0+b2JqZWN0 KSkKKwlhbGxvY2F0ZV9tYXRyaWNlc19mb3Jfd2luZG93X3JlZGlzcGxheSAoWFdJTkRPVyAo dy0+b2JqZWN0KSk7CiAgICAgICBlbHNlCiAJewogCSAgLyogVyBpcyBhIGxlYWYgd2luZG93 LiAgKi8KQEAgLTE4NjMsMTggKzE4NTAsMTIgQEAKIHsKICAgd2hpbGUgKHcpCiAgICAgewot ICAgICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotCXsKLQkgIGlmIChzaG93aW5nX3dpbmRv d19tYXJnaW5zX3AgKFhXSU5ET1cgKHctPmhjaGlsZCkpKQotCSAgICByZXR1cm4gMTsKLQl9 Ci0gICAgICBlbHNlIGlmICghTklMUCAody0+dmNoaWxkKSkKLQl7Ci0JICBpZiAoc2hvd2lu Z193aW5kb3dfbWFyZ2luc19wIChYV0lORE9XICh3LT52Y2hpbGQpKSkKLQkgICAgcmV0dXJu IDE7Ci0JfQotICAgICAgZWxzZSBpZiAoIU5JTFAgKHctPmxlZnRfbWFyZ2luX2NvbHMpCi0J ICAgICAgIHx8ICFOSUxQICh3LT5yaWdodF9tYXJnaW5fY29scykpCisgICAgICBpZiAoV0lO RE9XUCAody0+b2JqZWN0KSkKKwl7CisJICBpZiAoc2hvd2luZ193aW5kb3dfbWFyZ2luc19w IChYV0lORE9XICh3LT5vYmplY3QpKSkKKwkgICAgcmV0dXJuIDE7CisJfQorICAgICAgZWxz ZSBpZiAoIU5JTFAgKHctPmxlZnRfbWFyZ2luX2NvbHMpIHx8ICFOSUxQICh3LT5yaWdodF9t YXJnaW5fY29scykpCiAJcmV0dXJuIDE7CiAKICAgICAgIHcgPSBOSUxQICh3LT5uZXh0KSA/ IDAgOiBYV0lORE9XICh3LT5uZXh0KTsKQEAgLTE4OTUsMTAgKzE4NzYsOCBAQAogICAgIHsK ICAgICAgIHcgPSBYV0lORE9XICh3aW5kb3cpOwogCi0gICAgICBpZiAoIU5JTFAgKHctPmhj aGlsZCkpCi0JZmFrZV9jdXJyZW50X21hdHJpY2VzICh3LT5oY2hpbGQpOwotICAgICAgZWxz ZSBpZiAoIU5JTFAgKHctPnZjaGlsZCkpCi0JZmFrZV9jdXJyZW50X21hdHJpY2VzICh3LT52 Y2hpbGQpOworICAgICAgaWYgKFdJTkRPV1AgKHctPm9iamVjdCkpCisJZmFrZV9jdXJyZW50 X21hdHJpY2VzICh3LT5vYmplY3QpOwogICAgICAgZWxzZQogCXsKIAkgIGludCBpOwpAQCAt MjIzNiwxMCArMjIxNSw4IEBACiB7CiAgIHdoaWxlICh3KQogICAgIHsKLSAgICAgIGlmICgh TklMUCAody0+aGNoaWxkKSkKLQlmcmVlX3dpbmRvd19tYXRyaWNlcyAoWFdJTkRPVyAody0+ aGNoaWxkKSk7Ci0gICAgICBlbHNlIGlmICghTklMUCAody0+dmNoaWxkKSkKLQlmcmVlX3dp bmRvd19tYXRyaWNlcyAoWFdJTkRPVyAody0+dmNoaWxkKSk7CisgICAgICBpZiAoV0lORE9X UCAody0+b2JqZWN0KSkKKwlmcmVlX3dpbmRvd19tYXRyaWNlcyAoWFdJTkRPVyAody0+b2Jq ZWN0KSk7CiAgICAgICBlbHNlCiAJewogCSAgLyogVGhpcyBpcyBhIGxlYWYgd2luZG93LiAg RnJlZSBpdHMgbWVtb3J5IGFuZCByZXNldCBmaWVsZHMKQEAgLTIzNzIsMTAgKzIzNDksOCBA QAogewogICB3aGlsZSAodykKICAgICB7Ci0gICAgICBpZiAoIU5JTFAgKHctPmhjaGlsZCkp Ci0JYnVpbGRfZnJhbWVfbWF0cml4X2Zyb21fd2luZG93X3RyZWUgKG1hdHJpeCwgWFdJTkRP VyAody0+aGNoaWxkKSk7Ci0gICAgICBlbHNlIGlmICghTklMUCAody0+dmNoaWxkKSkKLQli dWlsZF9mcmFtZV9tYXRyaXhfZnJvbV93aW5kb3dfdHJlZSAobWF0cml4LCBYV0lORE9XICh3 LT52Y2hpbGQpKTsKKyAgICAgIGlmIChXSU5ET1dQICh3LT5vYmplY3QpKQorCWJ1aWxkX2Zy YW1lX21hdHJpeF9mcm9tX3dpbmRvd190cmVlIChtYXRyaXgsIFhXSU5ET1cgKHctPm9iamVj dCkpOwogICAgICAgZWxzZQogCWJ1aWxkX2ZyYW1lX21hdHJpeF9mcm9tX2xlYWZfd2luZG93 IChtYXRyaXgsIHcpOwogCkBAIC0yNjM5LDEwICsyNjE0LDggQEAKIHsKICAgd2hpbGUgKHcp CiAgICAgewotICAgICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotIAltaXJyb3JfbWFrZV9j dXJyZW50IChYV0lORE9XICh3LT5oY2hpbGQpLCBmcmFtZV9yb3cpOwotICAgICAgZWxzZSBp ZiAoIU5JTFAgKHctPnZjaGlsZCkpCi0JbWlycm9yX21ha2VfY3VycmVudCAoWFdJTkRPVyAo dy0+dmNoaWxkKSwgZnJhbWVfcm93KTsKKyAgICAgIGlmIChXSU5ET1dQICh3LT5vYmplY3Qp KQorIAltaXJyb3JfbWFrZV9jdXJyZW50IChYV0lORE9XICh3LT5vYmplY3QpLCBmcmFtZV9y b3cpOwogICAgICAgZWxzZQogCXsKIAkgIC8qIFJvdyByZWxhdGl2ZSB0byB3aW5kb3cgVy4g IERvbid0IHVzZSBGUkFNRV9UT19XSU5ET1dfVlBPUwpAQCAtMjczOSw3ICsyNzEyLDcgQEAK ICAgaW50IGxlZnQsIHJpZ2h0LCB4LCB3aWR0aDsKIAogICAvKiBQcmVjb25kaXRpb25zOiBX IG11c3QgYmUgYSBsZWFmIHdpbmRvdyBvbiBhIHR0eSBmcmFtZS4gICovCi0gIGVhc3NlcnQg KE5JTFAgKHctPmhjaGlsZCkgJiYgTklMUCAody0+dmNoaWxkKSk7CisgIGVhc3NlcnQgKHct PnR5cGUgPT0gV0lORE9XX0xFQUYpOwogICBlYXNzZXJ0ICghRlJBTUVfV0lORE9XX1AgKGYp KTsKIAogICBsZWZ0ID0gbWFyZ2luX2dseXBoc190b19yZXNlcnZlICh3LCAxLCB3LT5sZWZ0 X21hcmdpbl9jb2xzKTsKQEAgLTI3NzUsMTAgKzI3NDgsOCBAQAogCiAgIHdoaWxlICh3ICYm ICFmb3VuZCkKICAgICB7Ci0gICAgICBpZiAoIU5JTFAgKHctPmhjaGlsZCkpCi0gCWZvdW5k ID0gZnJhbWVfcm93X3RvX3dpbmRvdyAoWFdJTkRPVyAody0+aGNoaWxkKSwgcm93KTsKLSAg ICAgIGVsc2UgaWYgKCFOSUxQICh3LT52Y2hpbGQpKQotCWZvdW5kID0gZnJhbWVfcm93X3Rv X3dpbmRvdyAoWFdJTkRPVyAody0+dmNoaWxkKSwgcm93KTsKKyAgICAgIGlmIChXSU5ET1dQ ICh3LT5vYmplY3QpKQorIAlmb3VuZCA9IGZyYW1lX3Jvd190b193aW5kb3cgKFhXSU5ET1cg KHctPm9iamVjdCksIHJvdyk7CiAgICAgICBlbHNlIGlmIChyb3cgPj0gV0lORE9XX1RPUF9F REdFX0xJTkUgKHcpCiAJICAgICAgICYmIHJvdyA8IFdJTkRPV19CT1RUT01fRURHRV9MSU5F ICh3KSkKIAlmb3VuZCA9IHc7CkBAIC0yODA2LDExICsyNzc3LDggQEAKIHsKICAgd2hpbGUg KHcpCiAgICAgewotICAgICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotCW1pcnJvcl9saW5l X2RhbmNlIChYV0lORE9XICh3LT5oY2hpbGQpLCB1bmNoYW5nZWRfYXRfdG9wLAotCQkJICAg bmxpbmVzLCBjb3B5X2Zyb20sIHJldGFpbmVkX3ApOwotICAgICAgZWxzZSBpZiAoIU5JTFAg KHctPnZjaGlsZCkpCi0JbWlycm9yX2xpbmVfZGFuY2UgKFhXSU5ET1cgKHctPnZjaGlsZCks IHVuY2hhbmdlZF9hdF90b3AsCisgICAgICBpZiAoV0lORE9XUCAody0+b2JqZWN0KSkKKwlt aXJyb3JfbGluZV9kYW5jZSAoWFdJTkRPVyAody0+b2JqZWN0KSwgdW5jaGFuZ2VkX2F0X3Rv cCwKIAkJCSAgIG5saW5lcywgY29weV9mcm9tLCByZXRhaW5lZF9wKTsKICAgICAgIGVsc2UK IAl7CkBAIC0zMTg2LDEwICszMTU0LDggQEAKIAogICB3aGlsZSAodyAmJiAhcGF1c2VkX3Ap CiAgICAgewotICAgICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotCXBhdXNlZF9wIHw9IHVw ZGF0ZV93aW5kb3dfdHJlZSAoWFdJTkRPVyAody0+aGNoaWxkKSwgZm9yY2VfcCk7Ci0gICAg ICBlbHNlIGlmICghTklMUCAody0+dmNoaWxkKSkKLQlwYXVzZWRfcCB8PSB1cGRhdGVfd2lu ZG93X3RyZWUgKFhXSU5ET1cgKHctPnZjaGlsZCksIGZvcmNlX3ApOworICAgICAgaWYgKFdJ TkRPV1AgKHctPm9iamVjdCkpCisJcGF1c2VkX3AgfD0gdXBkYXRlX3dpbmRvd190cmVlIChY V0lORE9XICh3LT5vYmplY3QpLCBmb3JjZV9wKTsKICAgICAgIGVsc2UgaWYgKHctPm11c3Rf YmVfdXBkYXRlZF9wKQogCXBhdXNlZF9wIHw9IHVwZGF0ZV93aW5kb3cgKHcsIGZvcmNlX3Ap OwogCkBAIC0zOTY3LDEwICszOTMzLDggQEAKIHsKICAgd2hpbGUgKHcpCiAgICAgewotICAg ICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotCXNldF93aW5kb3dfdXBkYXRlX2ZsYWdzIChY V0lORE9XICh3LT5oY2hpbGQpLCBvbl9wKTsKLSAgICAgIGVsc2UgaWYgKCFOSUxQICh3LT52 Y2hpbGQpKQotCXNldF93aW5kb3dfdXBkYXRlX2ZsYWdzIChYV0lORE9XICh3LT52Y2hpbGQp LCBvbl9wKTsKKyAgICAgIGlmIChXSU5ET1dQICh3LT5vYmplY3QpKQorCXNldF93aW5kb3df dXBkYXRlX2ZsYWdzIChYV0lORE9XICh3LT5vYmplY3QpLCBvbl9wKTsKICAgICAgIGVsc2UK IAl3LT5tdXN0X2JlX3VwZGF0ZWRfcCA9IG9uX3A7CiAKQEAgLTUxMTcsNyArNTA4MSw3IEBA CiAKICAgLyogV2UgdXNlZCB0byBzZXQgY3VycmVudF9idWZmZXIgZGlyZWN0bHkgaGVyZSwg YnV0IHRoYXQgZG9lcyB0aGUKICAgICAgd3JvbmcgdGhpbmcgd2l0aCBgZmFjZS1yZW1hcHBp bmctYWxpc3QnIChidWcjMjA0NCkuICAqLwotICBGc2V0X2J1ZmZlciAody0+YnVmZmVyKTsK KyAgRnNldF9idWZmZXIgKHctPm9iamVjdCk7CiAgIGl0ZGF0YSA9IGJpZGlfc2hlbHZlX2Nh Y2hlICgpOwogICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIgKHN0YXJ0cCwgdy0+c3RhcnQp OwogICBDSEFSUE9TIChzdGFydHApID0gbWluIChaViwgbWF4IChCRUdWLCBDSEFSUE9TIChz dGFydHApKSk7CkBAIC01MTYzLDcgKzUxMjcsNyBAQAogICAqZHggPSB4MCArIGl0LmZpcnN0 X3Zpc2libGVfeCAtIGl0LmN1cnJlbnRfeDsKICAgKmR5ID0gKnkgLSBpdC5jdXJyZW50X3k7 CiAKLSAgc3RyaW5nID0gIHctPmJ1ZmZlcjsKKyAgc3RyaW5nID0gdy0+b2JqZWN0OwogICBp ZiAoU1RSSU5HUCAoaXQuc3RyaW5nKSkKICAgICBzdHJpbmcgPSBpdC5zdHJpbmc7CiAgICpw b3MgPSBpdC5jdXJyZW50OwpAQCAtNTE4MSw3ICs1MTQ1LDcgQEAKICAgICAgIGlmIChTVFJJ TkdQIChpdC5zdHJpbmcpKQogCUJZVEVQT1MgKHBvcy0+cG9zKSA9IHN0cmluZ19jaGFyX3Rv X2J5dGUgKHN0cmluZywgQ0hBUlBPUyAocG9zLT5wb3MpKTsKICAgICAgIGVsc2UKLQlCWVRF UE9TIChwb3MtPnBvcykgPSBidWZfY2hhcnBvc190b19ieXRlcG9zIChYQlVGRkVSICh3LT5i dWZmZXIpLAorCUJZVEVQT1MgKHBvcy0+cG9zKSA9IGJ1Zl9jaGFycG9zX3RvX2J5dGVwb3Mg KFhCVUZGRVIgKHctPm9iamVjdCksCiAJCQkJCQkgICAgIENIQVJQT1MgKHBvcy0+cG9zKSk7 CiAgICAgfQogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2VkaXRmbnMuYycKLS0tIHNyYy9l ZGl0Zm5zLmMJMjAxMy0wMy0wOCAwOTozNDozNSArMDAwMAorKysgc3JjL2VkaXRmbnMuYwky MDEzLTAzLTIxIDA1OjA1OjIzICswMDAwCkBAIC0zNzMsNyArMzczLDcgQEAKICAgaWYgKE5J TFAgKG9iamVjdCkpCiAgICAgWFNFVEJVRkZFUiAob2JqZWN0LCBjdXJyZW50X2J1ZmZlcik7 CiAgIGVsc2UgaWYgKFdJTkRPV1AgKG9iamVjdCkpCi0gICAgb2JqZWN0ID0gWFdJTkRPVyAo b2JqZWN0KS0+YnVmZmVyOworICAgIG9iamVjdCA9IFhXSU5ET1cgKG9iamVjdCktPm9iamVj dDsKIAogICBpZiAoIUJVRkZFUlAgKG9iamVjdCkpCiAgICAgLyogcG9zLXByb3BlcnR5IG9u bHkgbWFrZXMgc2Vuc2UgaW4gYnVmZmVycyByaWdodCBub3csIHNpbmNlIHN0cmluZ3MKQEAg LTg0Niw3ICs4NDYsNyBAQAogICAgICAgPyBGY29weV9tYXJrZXIgKEJWQVIgKGN1cnJlbnRf YnVmZmVyLCBtYXJrKSwgUW5pbCkKICAgICAgIDogUW5pbCksCiAgICAgIC8qIFNlbGVjdGVk IHdpbmRvdyBpZiBjdXJyZW50IGJ1ZmZlciBpcyBzaG93biBpbiBpdCwgbmlsIG90aGVyd2lz ZS4gICovCi0gICAgICgoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVm ZmVyKSA9PSBjdXJyZW50X2J1ZmZlcikKKyAgICAgKChYQlVGRkVSIChYV0lORE9XIChzZWxl Y3RlZF93aW5kb3cpLT5vYmplY3QpID09IGN1cnJlbnRfYnVmZmVyKQogICAgICAgPyBzZWxl Y3RlZF93aW5kb3cgOiBRbmlsKSwKICAgICAgQlZBUiAoY3VycmVudF9idWZmZXIsIG1hcmtf YWN0aXZlKSk7CiB9CkBAIC05MTUsNyArOTE1LDcgQEAKICAgdGVtID0gWFNBVkVfT0JKRUNU IChpbmZvLCAyKTsKICAgaWYgKFdJTkRPV1AgKHRlbSkKICAgICAgICYmICFFUSAodGVtLCBz ZWxlY3RlZF93aW5kb3cpCi0gICAgICAmJiAodGVtMSA9IFhXSU5ET1cgKHRlbSktPmJ1ZmZl ciwKKyAgICAgICYmICh0ZW0xID0gWFdJTkRPVyAodGVtKS0+b2JqZWN0LAogCSAgKC8qIFdp bmRvdyBpcyBsaXZlLi4uICAqLwogCSAgIEJVRkZFUlAgKHRlbTEpCiAJICAgLyogLi4uYW5k IGl0IHNob3dzIHRoZSBjdXJyZW50IGJ1ZmZlci4gICovCgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL2ZpbGVpby5jJwotLS0gc3JjL2ZpbGVpby5jCTIwMTMtMDMtMTMgMTg6NDI6MjIgKzAw MDAKKysrIHNyYy9maWxlaW8uYwkyMDEzLTAzLTIxIDA1OjA1OjIzICswMDAwCkBAIC0zOTU4 LDcgKzM5NTgsNyBAQAogCiAJICAvKiBJZiBkaXNwbGF5IGN1cnJlbnRseSBzdGFydHMgYXQg YmVnaW5uaW5nIG9mIGxpbmUsCiAJICAgICBrZWVwIGl0IHRoYXQgd2F5LiAgKi8KLQkgIGlm IChYQlVGRkVSIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpID09IGN1cnJl bnRfYnVmZmVyKQorCSAgaWYgKFhCVUZGRVIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdykt Pm9iamVjdCkgPT0gY3VycmVudF9idWZmZXIpCiAJICAgIFhXSU5ET1cgKHNlbGVjdGVkX3dp bmRvdyktPnN0YXJ0X2F0X2xpbmVfYmVnID0gIU5JTFAgKEZib2xwICgpKTsKIAogCSAgcmVw bGFjZV9oYW5kbGVkID0gMTsKQEAgLTQxMDgsNyArNDEwOCw3IEBACiAKICAgICAgIC8qIElm IGRpc3BsYXkgY3VycmVudGx5IHN0YXJ0cyBhdCBiZWdpbm5pbmcgb2YgbGluZSwKIAkga2Vl cCBpdCB0aGF0IHdheS4gICovCi0gICAgICBpZiAoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0 ZWRfd2luZG93KS0+YnVmZmVyKSA9PSBjdXJyZW50X2J1ZmZlcikKKyAgICAgIGlmIChYQlVG RkVSIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5vYmplY3QpID09IGN1cnJlbnRfYnVm ZmVyKQogCVhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPnN0YXJ0X2F0X2xpbmVfYmVnID0g IU5JTFAgKEZib2xwICgpKTsKIAogICAgICAgLyogUmVwbGFjZSB0aGUgY2hhcnMgdGhhdCB3 ZSBuZWVkIHRvIHJlcGxhY2UsCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZvbnQuYycKLS0t IHNyYy9mb250LmMJMjAxMy0wMy0yMCAwOTo1NjoxOSArMDAwMAorKysgc3JjL2ZvbnQuYwky MDEzLTAzLTIxIDA1OjA1OjIzICswMDAwCkBAIC00NzYxLDcgKzQ3NjEsNyBAQAogCiAgIGlm IChOSUxQIChzdHJpbmcpKQogICAgIHsKLSAgICAgIGlmIChYQlVGRkVSICh3LT5idWZmZXIp ICE9IGN1cnJlbnRfYnVmZmVyKQorICAgICAgaWYgKFhCVUZGRVIgKHctPm9iamVjdCkgIT0g Y3VycmVudF9idWZmZXIpCiAJZXJyb3IgKCJTcGVjaWZpZWQgd2luZG93IGlzIG5vdCBkaXNw bGF5aW5nIHRoZSBjdXJyZW50IGJ1ZmZlci4iKTsKICAgICAgIENIRUNLX05VTUJFUl9DT0VS Q0VfTUFSS0VSIChwb3NpdGlvbik7CiAgICAgICBpZiAoISAoQkVHViA8PSBYSU5UIChwb3Np dGlvbikgJiYgWElOVCAocG9zaXRpb24pIDwgWlYpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3Ny Yy9mcmFtZS5jJwotLS0gc3JjL2ZyYW1lLmMJMjAxMy0wMy0yMCAxMToyOTozNyArMDAwMAor Kysgc3JjL2ZyYW1lLmMJMjAxMy0wMy0yMSAwNTozOTozNyArMDAwMApAQCAtMTU5LDE1ICsx NTksMTUgQEAKICAgdy0+dG90YWxfbGluZXMgLT0gbjsKIAogICAvKiBIYW5kbGUganVzdCB0 aGUgdG9wIGNoaWxkIGluIGEgdmVydGljYWwgc3BsaXQuICAqLwotICBpZiAoIU5JTFAgKHct PnZjaGlsZCkpCi0gICAgc2V0X21lbnVfYmFyX2xpbmVzXzEgKHctPnZjaGlsZCwgbik7Ci0K LSAgLyogQWRqdXN0IGFsbCBjaGlsZHJlbiBpbiBhIGhvcml6b250YWwgc3BsaXQuICAqLwot ICBmb3IgKHdpbmRvdyA9IHctPmhjaGlsZDsgIU5JTFAgKHdpbmRvdyk7IHdpbmRvdyA9IHct Pm5leHQpCi0gICAgewotICAgICAgdyA9IFhXSU5ET1cgKHdpbmRvdyk7Ci0gICAgICBzZXRf bWVudV9iYXJfbGluZXNfMSAod2luZG93LCBuKTsKLSAgICB9CisgIGlmICh3LT50eXBlID09 IFdJTkRPV19WRVJUSUNBTF9DT01CSU5BVElPTikKKyAgICBzZXRfbWVudV9iYXJfbGluZXNf MSAody0+b2JqZWN0LCBuKTsKKyAgZWxzZSBpZiAody0+dHlwZSA9PSBXSU5ET1dfSE9SSVpP TlRBTF9DT01CSU5BVElPTikKKyAgICAvKiBBZGp1c3QgYWxsIGNoaWxkcmVuIGluIGEgaG9y aXpvbnRhbCBzcGxpdC4gICovCisgICAgZm9yICh3aW5kb3cgPSB3LT5vYmplY3Q7ICFOSUxQ ICh3aW5kb3cpOyB3aW5kb3cgPSB3LT5uZXh0KQorICAgICAgeworCXcgPSBYV0lORE9XICh3 aW5kb3cpOworCXNldF9tZW51X2Jhcl9saW5lc18xICh3aW5kb3csIG4pOworICAgICAgfQog fQogCiB2b2lkCkBAIC00MjEsNyArNDIxLDcgQEAKIAogICAvKiBNYWtlIHRoZSBjaG9zZW4g bWluaWJ1ZmZlciB3aW5kb3cgZGlzcGxheSB0aGUgcHJvcGVyIG1pbmlidWZmZXIsCiAgICAg IHVubGVzcyBpdCBpcyBhbHJlYWR5IHNob3dpbmcgYSBtaW5pYnVmZmVyLiAgKi8KLSAgaWYg KE5JTFAgKEZtZW1xIChYV0lORE9XIChtaW5pX3dpbmRvdyktPmJ1ZmZlciwgVm1pbmlidWZm ZXJfbGlzdCkpKQorICBpZiAoTklMUCAoRm1lbXEgKFhXSU5ET1cgKG1pbmlfd2luZG93KS0+ b2JqZWN0LCBWbWluaWJ1ZmZlcl9saXN0KSkpCiAgICAgLyogVXNlIHNldF93aW5kb3dfYnVm ZmVyIGluc3RlYWQgb2YgRnNldF93aW5kb3dfYnVmZmVyIChzZWUKICAgICAgICBkaXNjdXNz aW9uIG9mIGJ1ZyMxMTk4NCwgYnVnIzEyMDI1LCBidWcjMTIwMjYpLiAgKi8KICAgICBzZXRf d2luZG93X2J1ZmZlciAobWluaV93aW5kb3csCkBAIC0xMTg5LDcgKzExODksNyBAQAogICAg ICAgLyogVXNlIHNldF93aW5kb3dfYnVmZmVyIGluc3RlYWQgb2YgRnNldF93aW5kb3dfYnVm ZmVyIChzZWUKIAkgZGlzY3Vzc2lvbiBvZiBidWcjMTE5ODQsIGJ1ZyMxMjAyNSwgYnVnIzEy MDI2KS4gICovCiAgICAgICBzZXRfd2luZG93X2J1ZmZlciAoc2YtPm1pbmlidWZmZXJfd2lu ZG93LAotCQkJIFhXSU5ET1cgKG1pbmlidWZfd2luZG93KS0+YnVmZmVyLCAwLCAwKTsKKwkJ CSBYV0lORE9XIChtaW5pYnVmX3dpbmRvdyktPm9iamVjdCwgMCwgMCk7CiAgICAgICBtaW5p YnVmX3dpbmRvdyA9IHNmLT5taW5pYnVmZmVyX3dpbmRvdzsKIAogICAgICAgLyogSWYgdGhl IGR5aW5nIG1pbmlidWZmZXIgd2luZG93IHdhcyBzZWxlY3RlZCwKQEAgLTE1OTMsMTcgKzE1 OTMsMTMgQEAKIHsKICAgc3RydWN0IHdpbmRvdyAqdzsKIAotICBmb3IgKDshTklMUCAod2lu ZG93KTsgd2luZG93ID0gdy0+bmV4dCkKKyAgZm9yICg7ICFOSUxQICh3aW5kb3cpOyB3aW5k b3cgPSB3LT5uZXh0KQogICAgIHsKICAgICAgIHcgPSBYV0lORE9XICh3aW5kb3cpOwotCi0g ICAgICBpZiAoIU5JTFAgKHctPmJ1ZmZlcikpCi0JYnNldF9kaXNwbGF5X3RpbWUgKFhCVUZG RVIgKHctPmJ1ZmZlciksIEZjdXJyZW50X3RpbWUgKCkpOwotCi0gICAgICBpZiAoIU5JTFAg KHctPnZjaGlsZCkpCi0JbWFrZV9mcmFtZV92aXNpYmxlXzEgKHctPnZjaGlsZCk7Ci0gICAg ICBpZiAoIU5JTFAgKHctPmhjaGlsZCkpCi0JbWFrZV9mcmFtZV92aXNpYmxlXzEgKHctPmhj aGlsZCk7CisgICAgICBpZiAoV0lORE9XUCAody0+b2JqZWN0KSkKKwltYWtlX2ZyYW1lX3Zp c2libGVfMSAody0+b2JqZWN0KTsKKyAgICAgIGVsc2UKKwlic2V0X2Rpc3BsYXlfdGltZSAo WEJVRkZFUiAody0+b2JqZWN0KSwgRmN1cnJlbnRfdGltZSAoKSk7CiAgICAgfQogfQogCkBA IC0xNjM0LDcgKzE2MzAsNyBAQAogICAgICAgLyogVXNlIHNldF93aW5kb3dfYnVmZmVyIGlu c3RlYWQgb2YgRnNldF93aW5kb3dfYnVmZmVyIChzZWUKIAkgZGlzY3Vzc2lvbiBvZiBidWcj MTE5ODQsIGJ1ZyMxMjAyNSwgYnVnIzEyMDI2KS4gICovCiAgICAgICBzZXRfd2luZG93X2J1 ZmZlciAoc2YtPm1pbmlidWZmZXJfd2luZG93LAotCQkJIFhXSU5ET1cgKG1pbmlidWZfd2lu ZG93KS0+YnVmZmVyLCAwLCAwKTsKKwkJCSBYV0lORE9XIChtaW5pYnVmX3dpbmRvdyktPm9i amVjdCwgMCwgMCk7CiAgICAgICBtaW5pYnVmX3dpbmRvdyA9IHNmLT5taW5pYnVmZmVyX3dp bmRvdzsKICAgICB9CiAKQEAgLTE2NjUsNyArMTY2MSw3IEBACiAgICAgICAvKiBVc2Ugc2V0 X3dpbmRvd19idWZmZXIgaW5zdGVhZCBvZiBGc2V0X3dpbmRvd19idWZmZXIgKHNlZQogCSBk aXNjdXNzaW9uIG9mIGJ1ZyMxMTk4NCwgYnVnIzEyMDI1LCBidWcjMTIwMjYpLiAgKi8KICAg ICAgIHNldF93aW5kb3dfYnVmZmVyIChzZi0+bWluaWJ1ZmZlcl93aW5kb3csCi0JCQkgWFdJ TkRPVyAobWluaWJ1Zl93aW5kb3cpLT5idWZmZXIsIDAsIDApOworCQkJIFhXSU5ET1cgKG1p bmlidWZfd2luZG93KS0+b2JqZWN0LCAwLCAwKTsKICAgICAgIG1pbmlidWZfd2luZG93ID0g c2YtPm1pbmlidWZmZXJfd2luZG93OwogICAgIH0KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3Ny Yy9mcmluZ2UuYycKLS0tIHNyYy9mcmluZ2UuYwkyMDEzLTAxLTAyIDE2OjEzOjA0ICswMDAw CisrKyBzcmMvZnJpbmdlLmMJMjAxMy0wMy0yMSAwNTowNToyMyArMDAwMApAQCAtNjk5LDcg KzY5OSw3IEBACiB7CiAgIExpc3BfT2JqZWN0IGNtYXAsIGJtID0gUW5pbDsKIAotICBpZiAo KGNtYXAgPSBCVkFSIChYQlVGRkVSICh3LT5idWZmZXIpLCBmcmluZ2VfY3Vyc29yX2FsaXN0 KSksICFOSUxQIChjbWFwKSkKKyAgaWYgKChjbWFwID0gQlZBUiAoWEJVRkZFUiAody0+b2Jq ZWN0KSwgZnJpbmdlX2N1cnNvcl9hbGlzdCkpLCAhTklMUCAoY21hcCkpCiAgICAgewogICAg ICAgYm0gPSBGYXNzcSAoY3Vyc29yLCBjbWFwKTsKICAgICAgIGlmIChDT05TUCAoYm0pKQpA QCAtNzM2LDcgKzczNiw3IEBACiAgICAgIElmIHBhcnRpYWwsIGxvb2t1cCBwYXJ0aWFsIGJp dG1hcCBpbiBkZWZhdWx0IHZhbHVlIGlmIG5vdCBmb3VuZCBoZXJlLgogICAgICBJZiBub3Qg cGFydGlhbCwgb3Igbm8gcGFydGlhbCBzcGVjIGlzIHByZXNlbnQsIHVzZSBub24tcGFydGlh bCBiaXRtYXAuICAqLwogCi0gIGlmICgoY21hcCA9IEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZl ciksIGZyaW5nZV9pbmRpY2F0b3JfYWxpc3QpKSwgIU5JTFAgKGNtYXApKQorICBpZiAoKGNt YXAgPSBCVkFSIChYQlVGRkVSICh3LT5vYmplY3QpLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0 KSksICFOSUxQIChjbWFwKSkKICAgICB7CiAgICAgICBibTEgPSBGYXNzcSAoYml0bWFwLCBj bWFwKTsKICAgICAgIGlmIChDT05TUCAoYm0xKSkKQEAgLTk2Myw3ICs5NjMsNyBAQAogICAg IHJldHVybiAwOwogCiAgIGlmICghTUlOSV9XSU5ET1dfUCAodykKLSAgICAgICYmIChpbmQg PSBCVkFSIChYQlVGRkVSICh3LT5idWZmZXIpLCBpbmRpY2F0ZV9idWZmZXJfYm91bmRhcmll cyksICFOSUxQIChpbmQpKSkKKyAgICAgICYmIChpbmQgPSBCVkFSIChYQlVGRkVSICh3LT5v YmplY3QpLCBpbmRpY2F0ZV9idWZmZXJfYm91bmRhcmllcyksICFOSUxQIChpbmQpKSkKICAg ICB7CiAgICAgICBpZiAoRVEgKGluZCwgUWxlZnQpIHx8IEVRIChpbmQsIFFyaWdodCkpCiAJ Ym91bmRhcnlfdG9wID0gYm91bmRhcnlfYm90ID0gYXJyb3dfdG9wID0gYXJyb3dfYm90ID0g aW5kOwpAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAkgICAgewogCSAgICAgIGlmICh0b3BfaW5k X3JuIDwgMCAmJiByb3ctPnZpc2libGVfaGVpZ2h0ID4gMCkKIAkJewotCQkgIGlmIChNQVRS SVhfUk9XX1NUQVJUX0NIQVJQT1MgKHJvdykgPD0gQlVGX0JFR1YgKFhCVUZGRVIgKHctPmJ1 ZmZlcikpCisJCSAgaWYgKE1BVFJJWF9ST1dfU1RBUlRfQ0hBUlBPUyAocm93KSA8PSBCVUZf QkVHViAoWEJVRkZFUiAody0+b2JqZWN0KSkKIAkJICAgICAgJiYgIU1BVFJJWF9ST1dfUEFS VElBTExZX1ZJU0lCTEVfQVRfVE9QX1AgKHcsIHJvdykpCiAJCSAgICByb3ctPmluZGljYXRl X2JvYl9wID0gIU5JTFAgKGJvdW5kYXJ5X3RvcCk7CiAJCSAgZWxzZQpAQCAtMTAxNCw3ICsx MDE0LDcgQEAKIAogCSAgICAgIGlmIChib3RfaW5kX3JuIDwgMCkKIAkJewotCQkgIGlmIChN QVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpID49IEJVRl9aViAoWEJVRkZFUiAody0+YnVm ZmVyKSkKKwkJICBpZiAoTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSA+PSBCVUZfWlYg KFhCVUZGRVIgKHctPm9iamVjdCkpCiAJCSAgICAgICYmICFNQVRSSVhfUk9XX1BBUlRJQUxM WV9WSVNJQkxFX0FUX0JPVFRPTV9QICh3LCByb3cpKQogCQkgICAgcm93LT5pbmRpY2F0ZV9l b2JfcCA9ICFOSUxQIChib3VuZGFyeV9ib3QpLCBib3RfaW5kX3JuID0gcm47CiAJCSAgZWxz ZSBpZiAoeSArIHJvdy0+aGVpZ2h0ID49IHliKQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAl9 CiAgICAgfQogCi0gIGVtcHR5X3BvcyA9IEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZlciksIGlu ZGljYXRlX2VtcHR5X2xpbmVzKTsKKyAgZW1wdHlfcG9zID0gQlZBUiAoWEJVRkZFUiAody0+ b2JqZWN0KSwgaW5kaWNhdGVfZW1wdHlfbGluZXMpOwogICBpZiAoIU5JTFAgKGVtcHR5X3Bv cykgJiYgIUVRIChlbXB0eV9wb3MsIFFyaWdodCkpCiAgICAgZW1wdHlfcG9zID0gV0lORE9X X0xFRlRfRlJJTkdFX1dJRFRIICh3KSA9PSAwID8gUXJpZ2h0IDogUWxlZnQ7CiAKCj09PSBt b2RpZmllZCBmaWxlICdzcmMvaW5kZW50LmMnCi0tLSBzcmMvaW5kZW50LmMJMjAxMy0wMy0w OCAwOTozNDozNSArMDAwMAorKysgc3JjL2luZGVudC5jCTIwMTMtMDMtMjEgMDU6MDU6MjMg KzAwMDAKQEAgLTI1NCw3ICsyNTQsNyBAQAogICAgICB0aGUgbmV4dCBwcm9wZXJ0eSBjaGFu Z2UgKi8KICAgcHJvcCA9IEZnZXRfY2hhcl9wcm9wZXJ0eSAocG9zaXRpb24sIFFpbnZpc2li bGUsCiAJCQkgICAgICghTklMUCAod2luZG93KQotCQkJICAgICAgJiYgRVEgKFhXSU5ET1cg KHdpbmRvdyktPmJ1ZmZlciwgYnVmZmVyKSkKKwkJCSAgICAgICYmIEVRIChYV0lORE9XICh3 aW5kb3cpLT5vYmplY3QsIGJ1ZmZlcikpCiAJCQkgICAgID8gd2luZG93IDogYnVmZmVyKTsK ICAgaW52X3AgPSBURVhUX1BST1BfTUVBTlNfSU5WSVNJQkxFIChwcm9wKTsKICAgLyogV2hl biBjb3VudGluZyBjb2x1bW5zICh3aW5kb3cgPT0gbmlsKSwgZG9uJ3Qgc2tpcCBvdmVyIGVs bGlwc2lzIHRleHQuICAqLwpAQCAtMTgyNiw3ICsxODI2LDcgQEAKIAogICAvKiBJZiB0aGUg d2luZG93IGNvbnRhaW5zIHRoaXMgYnVmZmVyLCB1c2UgaXQgZm9yIGdldHRpbmcgdGV4dCBw cm9wZXJ0aWVzLgogICAgICBPdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGJ1ZmZlciBhcyBh cmcgZm9yIGRvaW5nIHRoYXQuICAqLwotICBpZiAoRVEgKHctPmJ1ZmZlciwgRmN1cnJlbnRf YnVmZmVyICgpKSkKKyAgaWYgKEVRICh3LT5vYmplY3QsIEZjdXJyZW50X2J1ZmZlciAoKSkp CiAgICAgdGV4dF9wcm9wX29iamVjdCA9IHdpbmRvdzsKICAgZWxzZQogICAgIHRleHRfcHJv cF9vYmplY3QgPSBGY3VycmVudF9idWZmZXIgKCk7CkBAIC0xOTc5LDE0ICsxOTc5LDE0IEBA CiAKICAgb2xkX2J1ZmZlciA9IFFuaWw7CiAgIEdDUFJPMSAob2xkX2J1ZmZlcik7Ci0gIGlm IChYQlVGRkVSICh3LT5idWZmZXIpICE9IGN1cnJlbnRfYnVmZmVyKQorICBpZiAoWEJVRkZF UiAody0+b2JqZWN0KSAhPSBjdXJyZW50X2J1ZmZlcikKICAgICB7CiAgICAgICAvKiBTZXQg dGhlIHdpbmRvdydzIGJ1ZmZlciB0ZW1wb3JhcmlseSB0byB0aGUgY3VycmVudCBidWZmZXIu ICAqLwotICAgICAgb2xkX2J1ZmZlciA9IHctPmJ1ZmZlcjsKKyAgICAgIG9sZF9idWZmZXIg PSB3LT5vYmplY3Q7CiAgICAgICBvbGRfY2hhcnBvcyA9IG1hcmtlcl9wb3NpdGlvbiAody0+ cG9pbnRtKTsKICAgICAgIG9sZF9ieXRlcG9zID0gbWFya2VyX2J5dGVfcG9zaXRpb24gKHct PnBvaW50bSk7CiAgICAgICB3c2V0X2J1ZmZlciAodywgRmN1cnJlbnRfYnVmZmVyICgpKTsK LSAgICAgIHNldF9tYXJrZXJfYm90aCAody0+cG9pbnRtLCB3LT5idWZmZXIsCisgICAgICBz ZXRfbWFya2VyX2JvdGggKHctPnBvaW50bSwgdy0+b2JqZWN0LAogCQkgICAgICAgQlVGX1BU IChjdXJyZW50X2J1ZmZlciksIEJVRl9QVF9CWVRFIChjdXJyZW50X2J1ZmZlcikpOwogICAg IH0KIApAQCAtMjEzOSw3ICsyMTM5LDcgQEAKICAgaWYgKEJVRkZFUlAgKG9sZF9idWZmZXIp KQogICAgIHsKICAgICAgIHdzZXRfYnVmZmVyICh3LCBvbGRfYnVmZmVyKTsKLSAgICAgIHNl dF9tYXJrZXJfYm90aCAody0+cG9pbnRtLCB3LT5idWZmZXIsCisgICAgICBzZXRfbWFya2Vy X2JvdGggKHctPnBvaW50bSwgdy0+b2JqZWN0LAogCQkgICAgICAgb2xkX2NoYXJwb3MsIG9s ZF9ieXRlcG9zKTsKICAgICB9CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvaW5zZGVsLmMn Ci0tLSBzcmMvaW5zZGVsLmMJMjAxMy0wMy0xNSAxNjowMzo1NCArMDAwMAorKysgc3JjL2lu c2RlbC5jCTIwMTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAgLTE3OTgsNyArMTc5OCw3IEBA CiAKICAgLyogSWYgd2UncmUgbW9kaWZ5aW5nIHRoZSBidWZmZXIgb3RoZXIgdGhhbiBzaG93 biBpbiBhIHNlbGVjdGVkIHdpbmRvdywKICAgICAgbGV0IHJlZGlzcGxheSBjb25zaWRlciBv dGhlciB3aW5kb3dzIGlmIHRoaXMgYnVmZmVyIGlzIHZpc2libGUuICAqLwotICBpZiAoWEJV RkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVmZmVyKSAhPSBjdXJyZW50X2J1 ZmZlcgorICBpZiAoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+b2JqZWN0 KSAhPSBjdXJyZW50X2J1ZmZlcgogICAgICAgJiYgYnVmZmVyX3dpbmRvd19jb3VudCAoY3Vy cmVudF9idWZmZXIpKQogICAgICsrd2luZG93c19vcl9idWZmZXJzX2NoYW5nZWQ7CiAKCj09 PSBtb2RpZmllZCBmaWxlICdzcmMva2V5Ym9hcmQuYycKLS0tIHNyYy9rZXlib2FyZC5jCTIw MTMtMDMtMTMgMDc6Mjc6MzQgKzAwMDAKKysrIHNyYy9rZXlib2FyZC5jCTIwMTMtMDMtMjEg MDU6MDU6MjMgKzAwMDAKQEAgLTgzMyw3ICs4MzMsNyBAQAogICB1cGRhdGVfbW9kZV9saW5l cyA9IDE7CiAKICAgaWYgKGNvbW1hbmRfbG9vcF9sZXZlbAotICAgICAgJiYgY3VycmVudF9i dWZmZXIgIT0gWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVmZmVyKSkK KyAgICAgICYmIGN1cnJlbnRfYnVmZmVyICE9IFhCVUZGRVIgKFhXSU5ET1cgKHNlbGVjdGVk X3dpbmRvdyktPm9iamVjdCkpCiAgICAgYnVmZmVyID0gRmN1cnJlbnRfYnVmZmVyICgpOwog ICBlbHNlCiAgICAgYnVmZmVyID0gUW5pbDsKQEAgLTEzOTUsNyArMTM5NSw3IEBACiAJRmtp bGxfZW1hY3MgKFFuaWwpOwogCiAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgd2lu ZG93J3MgYnVmZmVyIGlzIHNlbGVjdGVkLiAgKi8KLSAgICAgIHNldF9idWZmZXJfaW50ZXJu YWwgKFhCVUZGRVIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPmJ1ZmZlcikpOworICAg ICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2lu ZG93KS0+b2JqZWN0KSk7CiAKICAgICAgIC8qIERpc3BsYXkgYW55IG1hbGxvYyB3YXJuaW5n IHRoYXQganVzdCBjYW1lIG91dC4gIFVzZSB3aGlsZSBiZWNhdXNlCiAJIGRpc3BsYXlpbmcg b25lIHdhcm5pbmcgY2FuIGNhdXNlIGFub3RoZXIuICAqLwpAQCAtMTQ2MSw3ICsxNDYxLDcg QEAKICAgICAgIC8qIEEgZmlsdGVyIG1heSBoYXZlIHJ1biB3aGlsZSB3ZSB3ZXJlIHJlYWRp bmcgdGhlIGlucHV0LiAgKi8KICAgICAgIGlmICghIEZSQU1FX0xJVkVfUCAoWEZSQU1FIChz ZWxlY3RlZF9mcmFtZSkpKQogCUZraWxsX2VtYWNzIChRbmlsKTsKLSAgICAgIHNldF9idWZm ZXJfaW50ZXJuYWwgKFhCVUZGRVIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPmJ1ZmZl cikpOworICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoWEJVRkZFUiAoWFdJTkRPVyAoc2Vs ZWN0ZWRfd2luZG93KS0+b2JqZWN0KSk7CiAKICAgICAgICsrbnVtX2lucHV0X2tleXM7CiAK QEAgLTE0OTIsNyArMTQ5Miw3IEBACiAJewogCSAgc3RydWN0IGJ1ZmZlciAqYjsKIAkgIFhX SU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPmZvcmNlX3N0YXJ0ID0gMDsKLQkgIGIgPSBYQlVG RkVSIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpOworCSAgYiA9IFhCVUZG RVIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPm9iamVjdCk7CiAJICBCVUZfQkVHX1VO Q0hBTkdFRCAoYikgPSBCVUZfRU5EX1VOQ0hBTkdFRCAoYikgPSAwOwogCX0KIApAQCAtNTE0 Miw3ICs1MTQyLDcgQEAKIAkgIGlmIChTVFJJTkdQIChzdHJpbmcpKQogCSAgICBzdHJpbmdf aW5mbyA9IEZjb25zIChzdHJpbmcsIG1ha2VfbnVtYmVyIChjaGFycG9zKSk7CiAJICB0ZXh0 cG9zID0gKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQotCQkgICAgICYmIGN1cnJl bnRfYnVmZmVyID09IFhCVUZGRVIgKHctPmJ1ZmZlcikpCisJCSAgICAgJiYgY3VycmVudF9i dWZmZXIgPT0gWEJVRkZFUiAody0+b2JqZWN0KSkKIAkgICAgPyBQVCA6IG1hcmtlcl9wb3Np dGlvbiAody0+cG9pbnRtKTsKIAogCSAgeHJldCA9IHd4OwpAQCAtOTE0Niw5ICs5MTQ2LDkg QEAKIAkJewogCQkgIGlmICghIEZSQU1FX0xJVkVfUCAoWEZSQU1FIChzZWxlY3RlZF9mcmFt ZSkpKQogCQkgICAgRmtpbGxfZW1hY3MgKFFuaWwpOwotCQkgIGlmIChYQlVGRkVSIChYV0lO RE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpCisJCSAgaWYgKFhCVUZGRVIgKFhXSU5E T1cgKHNlbGVjdGVkX3dpbmRvdyktPm9iamVjdCkKIAkJICAgICAgIT0gY3VycmVudF9idWZm ZXIpCi0JCSAgICBGc2V0X2J1ZmZlciAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVm ZmVyKTsKKwkJICAgIEZzZXRfYnVmZmVyIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5v YmplY3QpOwogCQl9CiAKIAkgICAgICBnb3RvIHJlcGxheV9zZXF1ZW5jZTsKQEAgLTkxOTYs OSArOTE5Niw5IEBACiAJCSBzcGVjaWFsLWV2ZW50LW1hcCwgLi4uKSBtaWdodCBoYXZlIHN3 aXRjaGVkIHRoZSBjdXJyZW50IGJ1ZmZlcgogCQkgb3IgdGhlIHNlbGVjdGVkIHdpbmRvdyBm cm9tIHVuZGVyIHVzIGluIHRoZSBtZWFuIHRpbWUuICAqLwogCSAgICAgIGlmIChmaXhfY3Vy cmVudF9idWZmZXIKLQkJICAmJiAoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93 KS0+YnVmZmVyKQorCQkgICYmIChYQlVGRkVSIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cp LT5vYmplY3QpCiAJCSAgICAgICE9IGN1cnJlbnRfYnVmZmVyKSkKLQkJRnNldF9idWZmZXIg KFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPmJ1ZmZlcik7CisJCUZzZXRfYnVmZmVyIChY V0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5vYmplY3QpOwogCSAgICAgIGN1cnJlbnRfYmlu ZGluZyA9IGFjdGl2ZV9tYXBzIChmaXJzdF9ldmVudCk7CiAJICAgIH0KIApAQCAtOTI0Nyw4 ICs5MjQ3LDggQEAKIAkJICAgICBub3QgdGhlIGN1cnJlbnQgYnVmZmVyLiAgSWYgd2UncmUg YXQgdGhlCiAJCSAgICAgYmVnaW5uaW5nIG9mIGEga2V5IHNlcXVlbmNlLCBzd2l0Y2ggYnVm ZmVycy4gICovCiAJCSAgaWYgKFdJTkRPV1AgKHdpbmRvdykKLQkJICAgICAgJiYgQlVGRkVS UCAoWFdJTkRPVyAod2luZG93KS0+YnVmZmVyKQotCQkgICAgICAmJiBYQlVGRkVSIChYV0lO RE9XICh3aW5kb3cpLT5idWZmZXIpICE9IGN1cnJlbnRfYnVmZmVyKQorCQkgICAgICAmJiBC VUZGRVJQIChYV0lORE9XICh3aW5kb3cpLT5vYmplY3QpCisJCSAgICAgICYmIFhCVUZGRVIg KFhXSU5ET1cgKHdpbmRvdyktPm9iamVjdCkgIT0gY3VycmVudF9idWZmZXIpCiAJCSAgICB7 CiAJCSAgICAgIEFTRVQgKHJhd19rZXlidWYsIHJhd19rZXlidWZfY291bnQsIGtleSk7CiAJ CSAgICAgIHJhd19rZXlidWZfY291bnQrKzsKQEAgLTkyNjksNyArOTI2OSw3IEBACiAKIAkJ ICAgICAgaWYgKCEgRlJBTUVfTElWRV9QIChYRlJBTUUgKHNlbGVjdGVkX2ZyYW1lKSkpCiAJ CQlGa2lsbF9lbWFjcyAoUW5pbCk7Ci0JCSAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKFhC VUZGRVIgKFhXSU5ET1cgKHdpbmRvdyktPmJ1ZmZlcikpOworCQkgICAgICBzZXRfYnVmZmVy X2ludGVybmFsIChYQlVGRkVSIChYV0lORE9XICh3aW5kb3cpLT5vYmplY3QpKTsKIAkJICAg ICAgZ290byByZXBsYXlfc2VxdWVuY2U7CiAJCSAgICB9CiAJCX0KCj09PSBtb2RpZmllZCBm aWxlICdzcmMva2V5bWFwLmMnCi0tLSBzcmMva2V5bWFwLmMJMjAxMy0wMy0xMyAwNzoyNzoz NCArMDAwMAorKysgc3JjL2tleW1hcC5jCTIwMTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAg LTE1NTUsOCArMTU1NSw4IEBACiAgICAgICB3aW5kb3cgPSBQT1NOX1dJTkRPVyAocG9zaXRp b24pOwogCiAgICAgICBpZiAoV0lORE9XUCAod2luZG93KQotCSAgJiYgQlVGRkVSUCAoWFdJ TkRPVyAod2luZG93KS0+YnVmZmVyKQotCSAgJiYgWEJVRkZFUiAoWFdJTkRPVyAod2luZG93 KS0+YnVmZmVyKSAhPSBjdXJyZW50X2J1ZmZlcikKKwkgICYmIEJVRkZFUlAgKFhXSU5ET1cg KHdpbmRvdyktPm9iamVjdCkKKwkgICYmIFhCVUZGRVIgKFhXSU5ET1cgKHdpbmRvdyktPm9i amVjdCkgIT0gY3VycmVudF9idWZmZXIpCiAJewogCSAgLyogQXJyYW5nZSB0byBnbyBiYWNr IHRvIHRoZSBvcmlnaW5hbCBidWZmZXIgb25jZSB3ZSdyZSBkb25lCiAJICAgICBwcm9jZXNz aW5nIHRoZSBrZXkgc2VxdWVuY2UuICBXZSBkb24ndCB1c2UKQEAgLTE1NjYsNyArMTU2Niw3 IEBACiAJICAgICB0aGluZ3MgdGhlIHNhbWUuCiAJICAqLwogCSAgcmVjb3JkX3Vud2luZF9j dXJyZW50X2J1ZmZlciAoKTsKLQkgIHNldF9idWZmZXJfaW50ZXJuYWwgKFhCVUZGRVIgKFhX SU5ET1cgKHdpbmRvdyktPmJ1ZmZlcikpOworCSAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoWEJV RkZFUiAoWFdJTkRPVyAod2luZG93KS0+b2JqZWN0KSk7CiAJfQogICAgIH0KIAoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9taW5pYnVmLmMnCi0tLSBzcmMvbWluaWJ1Zi5jCTIwMTMtMDEt MDIgMTY6MTM6MDQgKzAwMDAKKysrIHNyYy9taW5pYnVmLmMJMjAxMy0wMy0yMSAwNTowNToy MyArMDAwMApAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAvKiBVbmRlciBYLCB3ZSBjb21l IGhlcmUgd2l0aCBtaW5pYnVmX3dpbmRvdyBiZWluZyB0aGUKIAkgbWluaWJ1ZmZlciB3aW5k b3cgb2YgdGhlIHVudXNlZCB0ZXJtY2FwIHdpbmRvdyBjcmVhdGVkIGluCiAJIGluaXRfd2lu ZG93X29uY2UuICBUaGF0IHdpbmRvdyBkb2Vzbid0IGhhdmUgYSBidWZmZXIuICAqLwotICAg ICAgYnVmZmVyID0gWFdJTkRPVyAobWluaWJ1Zl93aW5kb3cpLT5idWZmZXI7CisgICAgICBi dWZmZXIgPSBYV0lORE9XIChtaW5pYnVmX3dpbmRvdyktPm9iamVjdDsKICAgICAgIGlmIChC VUZGRVJQIChidWZmZXIpKQogCS8qIFVzZSBzZXRfd2luZG93X2J1ZmZlciBpbnN0ZWFkIG9m IEZzZXRfd2luZG93X2J1ZmZlciAoc2VlCiAJICAgZGlzY3Vzc2lvbiBvZiBidWcjMTE5ODQs IGJ1ZyMxMjAyNSwgYnVnIzEyMDI2KS4gICovCkBAIC04NDQsNyArODQ0LDcgQEAKICAgd2lu ZG93ID0gbWluaWJ1Zl93aW5kb3c7CiAgIC8qIFRvIGtlZXAgdGhpbmdzIHByZWRpY3RhYmxl LCBpbiBjYXNlIGl0IG1hdHRlcnMsIGxldCdzIGJlIGluIHRoZQogICAgICBtaW5pYnVmZmVy IHdoZW4gd2UgcmVzZXQgdGhlIHJlbGV2YW50IHZhcmlhYmxlcy4gICovCi0gIEZzZXRfYnVm ZmVyIChYV0lORE9XICh3aW5kb3cpLT5idWZmZXIpOworICBGc2V0X2J1ZmZlciAoWFdJTkRP VyAod2luZG93KS0+b2JqZWN0KTsKIAogICAvKiBSZXN0b3JlIHByb21wdCwgZXRjLCBmcm9t IG91dGVyIG1pbmlidWZmZXIgbGV2ZWwuICAqLwogICBtaW5pYnVmX3Byb21wdCA9IEZjYXIg KG1pbmlidWZfc2F2ZV9saXN0KTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbXNkb3MuYycK LS0tIHNyYy9tc2Rvcy5jCTIwMTMtMDMtMDYgMTY6MjE6MjYgKzAwMDAKKysrIHNyYy9tc2Rv cy5jCTIwMTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAgLTEyNjEsNyArMTI2MSw3IEBACiAJ ICAvKiBJZiB0aGUgbW91c2UgaGlnaGxpZ2h0IGlzIGluIHRoZSB3aW5kb3cgdGhhdCB3YXMg ZGVsZXRlZAogCSAgICAgKGUuZy4sIGlmIGl0IHdhcyBwb3BwZWQgYnkgY29tcGxldGlvbiks IGNsZWFyIGhpZ2hsaWdodAogCSAgICAgdW5jb25kaXRpb25hbGx5LiAgKi8KLQkgIGlmIChO SUxQICh3LT5idWZmZXIpKQorCSAgaWYgKE5JTFAgKHctPm9iamVjdCkpCiAJICAgIGhsaW5m by0+bW91c2VfZmFjZV93aW5kb3cgPSBRbmlsOwogCSAgZWxzZQogCSAgICB7CkBAIC0xMjcx LDcgKzEyNzEsNyBAQAogCQkgIGJyZWFrOwogCSAgICB9CiAKLQkgIGlmIChOSUxQICh3LT5i dWZmZXIpIHx8IGkgPCB3LT5kZXNpcmVkX21hdHJpeC0+bnJvd3MpCisJICBpZiAoTklMUCAo dy0+b2JqZWN0KSB8fCBpIDwgdy0+ZGVzaXJlZF9tYXRyaXgtPm5yb3dzKQogCSAgICBjbGVh cl9tb3VzZV9mYWNlIChobGluZm8pOwogCX0KICAgICB9CkBAIC0xMzIxLDcgKzEzMjEsNyBA QAogICAgIG5ld19jdXJzb3IgPSBmcmFtZV9kZXNpcmVkX2N1cnNvcjsKICAgZWxzZQogICAg IHsKLSAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChzdy0+YnVmZmVyKTsKKyAg ICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChzdy0+b2JqZWN0KTsKIAogICAgICAg aWYgKEVRIChCVkFSIChiLGN1cnNvcl90eXBlKSwgUXQpKQogCW5ld19jdXJzb3IgPSBmcmFt ZV9kZXNpcmVkX2N1cnNvcjsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbnNmbnMubScKLS0t IHNyYy9uc2Zucy5tCTIwMTMtMDMtMjAgMDk6NTY6MTkgKzAwMDAKKysrIHNyYy9uc2Zucy5t CTIwMTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAgLTYxOSw3ICs2MTksNyBAQAogewogICBO U1ZpZXcgKnZpZXc7CiAgIExpc3BfT2JqZWN0IG5hbWUsIGZpbGVuYW1lOwotICBMaXNwX09i amVjdCBidWYgPSBYV0lORE9XIChmLT5zZWxlY3RlZF93aW5kb3cpLT5idWZmZXI7CisgIExp c3BfT2JqZWN0IGJ1ZiA9IFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdyktPm9iamVjdDsK ICAgY29uc3QgY2hhciAqdGl0bGU7CiAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sOwogICBz dHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9uc21lbnUubScK LS0tIHNyYy9uc21lbnUubQkyMDEzLTAyLTA1IDEyOjE2OjM1ICswMDAwCisrKyBzcmMvbnNt ZW51Lm0JMjAxMy0wMy0yMSAwNTowNToyMyArMDAwMApAQCAtMTkxLDcgKzE5MSw3IEBACiAJ PSBhbGxvY2EgKHByZXZpb3VzX21lbnVfaXRlbXNfdXNlZCAqIHNpemVvZiAqcHJldmlvdXNf aXRlbXMpOwogCiAgICAgICAvKiBsaXNwIHByZWxpbWluYXJpZXMgKi8KLSAgICAgIGJ1ZmZl ciA9IFhXSU5ET1cgKEZSQU1FX1NFTEVDVEVEX1dJTkRPVyAoZikpLT5idWZmZXI7CisgICAg ICBidWZmZXIgPSBYV0lORE9XIChGUkFNRV9TRUxFQ1RFRF9XSU5ET1cgKGYpKS0+b2JqZWN0 OwogICAgICAgc3BlY2JpbmQgKFFpbmhpYml0X3F1aXQsIFF0KTsKICAgICAgIHNwZWNiaW5k IChRZGVidWdfb25fbmV4dF9jYWxsLCBRbmlsKTsKICAgICAgIHJlY29yZF91bndpbmRfc2F2 ZV9tYXRjaF9kYXRhICgpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9uc3Rlcm0ubScKLS0t IHNyYy9uc3Rlcm0ubQkyMDEzLTAzLTE2IDE0OjIyOjM3ICswMDAwCisrKyBzcmMvbnN0ZXJt Lm0JMjAxMy0wMy0yMSAwNTowNToyMyArMDAwMApAQCAtNjUzMiw3ICs2NTMyLDcgQEAKIHsK ICAgTGlzcF9PYmplY3Qgc3RyID0gUW5pbDsKICAgc3RydWN0IGZyYW1lICpmID0gU0VMRUNU RURfRlJBTUUgKCk7Ci0gIHN0cnVjdCBidWZmZXIgKmN1cmJ1ZiA9IFhCVUZGRVIgKFhXSU5E T1cgKGYtPnNlbGVjdGVkX3dpbmRvdyktPmJ1ZmZlcik7CisgIHN0cnVjdCBidWZmZXIgKmN1 cmJ1ZiA9IFhCVUZGRVIgKFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdyktPm9iamVjdCk7 CiAKICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJv bGVBdHRyaWJ1dGVdKQogICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRSb2xl OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9wcmludC5jJwotLS0gc3JjL3ByaW50LmMJMjAx My0wMy0xOSAxNDowOTowNSArMDAwMAorKysgc3JjL3ByaW50LmMJMjAxMy0wMy0yMSAwNTow NToyMyArMDAwMApAQCAtMTc2OSwxMCArMTc2OSwxMCBAQAogCSAgc3Ryb3V0ICgiIzx3aW5k b3cgIiwgLTEsIC0xLCBwcmludGNoYXJmdW4pOwogCSAgbGVuID0gc3ByaW50ZiAoYnVmLCAi JXAiLCBYV0lORE9XIChvYmopKTsKIAkgIHN0cm91dCAoYnVmLCBsZW4sIGxlbiwgcHJpbnRj aGFyZnVuKTsKLQkgIGlmICghTklMUCAoWFdJTkRPVyAob2JqKS0+YnVmZmVyKSkKKwkgIGlm ICghTklMUCAoWFdJTkRPVyAob2JqKS0+b2JqZWN0KSkKIAkgICAgewogCSAgICAgIHN0cm91 dCAoIiBvbiAiLCAtMSwgLTEsIHByaW50Y2hhcmZ1bik7Ci0JICAgICAgcHJpbnRfc3RyaW5n IChCVkFSIChYQlVGRkVSIChYV0lORE9XIChvYmopLT5idWZmZXIpLCBuYW1lKSwKKwkgICAg ICBwcmludF9zdHJpbmcgKEJWQVIgKFhCVUZGRVIgKFhXSU5ET1cgKG9iaiktPm9iamVjdCks IG5hbWUpLAogCQkJICAgIHByaW50Y2hhcmZ1bik7CiAJICAgIH0KIAkgIFBSSU5UQ0hBUiAo Jz4nKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdGV4dHByb3AuYycKLS0tIHNyYy90ZXh0 cHJvcC5jCTIwMTMtMDMtMTEgMDE6MTc6NDAgKzAwMDAKKysrIHNyYy90ZXh0cHJvcC5jCTIw MTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAgLTU5OCw3ICs1OTgsNyBAQAogICBpZiAoV0lO RE9XUCAob2JqZWN0KSkKICAgICB7CiAgICAgICB3ID0gWFdJTkRPVyAob2JqZWN0KTsKLSAg ICAgIG9iamVjdCA9IHctPmJ1ZmZlcjsKKyAgICAgIG9iamVjdCA9IHctPm9iamVjdDsKICAg ICB9CiAgIGlmIChCVUZGRVJQIChvYmplY3QpKQogICAgIHsKCj09PSBtb2RpZmllZCBmaWxl ICdzcmMvdzMyZm5zLmMnCi0tLSBzcmMvdzMyZm5zLmMJMjAxMy0wMy0yMCAxMToyOTozNyAr MDAwMAorKysgc3JjL3czMmZucy5jCTIwMTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAgLTU3 OTgsNyArNTc5OCw3IEBACiAKICAgLyogRGlzcGxheSB0aGUgdG9vbHRpcCB0ZXh0IGluIGEg dGVtcG9yYXJ5IGJ1ZmZlci4gICovCiAgIG9sZF9idWZmZXIgPSBjdXJyZW50X2J1ZmZlcjsK LSAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSIChYV0lORE9XIChGUkFNRV9ST09U X1dJTkRPVyAoZikpLT5idWZmZXIpKTsKKyAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVG RkVSIChYV0lORE9XIChGUkFNRV9ST09UX1dJTkRPVyAoZikpLT5vYmplY3QpKTsKICAgYnNl dF90cnVuY2F0ZV9saW5lcyAoY3VycmVudF9idWZmZXIsIFFuaWwpOwogICBjbGVhcl9nbHlw aF9tYXRyaXggKHctPmRlc2lyZWRfbWF0cml4KTsKICAgY2xlYXJfZ2x5cGhfbWF0cml4ICh3 LT5jdXJyZW50X21hdHJpeCk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3czMm1lbnUuYycK LS0tIHNyYy93MzJtZW51LmMJMjAxMy0wMS0wMiAxNjoxMzowNCArMDAwMAorKysgc3JjL3cz Mm1lbnUuYwkyMDEzLTAzLTIxIDA1OjA1OjIzICswMDAwCkBAIC0zOTYsNyArMzk2LDcgQEAK ICAgICAgIGlmICghIG1lbnViYXJfd2lkZ2V0KQogCXByZXZpb3VzX21lbnVfaXRlbXNfdXNl ZCA9IDA7CiAKLSAgICAgIGJ1ZmZlciA9IFhXSU5ET1cgKEZSQU1FX1NFTEVDVEVEX1dJTkRP VyAoZikpLT5idWZmZXI7CisgICAgICBidWZmZXIgPSBYV0lORE9XIChGUkFNRV9TRUxFQ1RF RF9XSU5ET1cgKGYpKS0+b2JqZWN0OwogICAgICAgc3BlY2JpbmQgKFFpbmhpYml0X3F1aXQs IFF0KTsKICAgICAgIC8qIERvbid0IGxldCB0aGUgZGVidWdnZXIgc3RlcCBpbnRvIHRoaXMg Y29kZQogCSBiZWNhdXNlIGl0IGlzIG5vdCByZWVudHJhbnQuICAqLwoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy93aW5kb3cuYycKLS0tIHNyYy93aW5kb3cuYwkyMDEzLTAzLTIwIDExOjI5 OjM3ICswMDAwCisrKyBzcmMvd2luZG93LmMJMjAxMy0wMy0yMSAwODo1Mjo0NSArMDAwMApA QCAtMTQ3LDExICsxNDcsNiBAQAogICB3LT5kaXNwbGF5X3RhYmxlID0gdmFsOwogfQogc3Rh dGljIHZvaWQKLXdzZXRfaGNoaWxkIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2 YWwpCi17Ci0gIHctPmhjaGlsZCA9IHZhbDsKLX0KLXN0YXRpYyB2b2lkCiB3c2V0X2xlZnRf ZnJpbmdlX3dpZHRoIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCiB7CiAg IHctPmxlZnRfZnJpbmdlX3dpZHRoID0gdmFsOwpAQCAtMjE3LDExICsyMTIsNiBAQAogICB3 LT50ZW1zbG90ID0gdmFsOwogfQogc3RhdGljIHZvaWQKLXdzZXRfdmNoaWxkIChzdHJ1Y3Qg d2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCi17Ci0gIHctPnZjaGlsZCA9IHZhbDsKLX0K LXN0YXRpYyB2b2lkCiB3c2V0X3ZlcnRpY2FsX3Njcm9sbF9iYXJfdHlwZSAoc3RydWN0IHdp bmRvdyAqdywgTGlzcF9PYmplY3QgdmFsKQogewogICB3LT52ZXJ0aWNhbF9zY3JvbGxfYmFy X3R5cGUgPSB2YWw7CkBAIC0yMzEsNiArMjIxLDE0IEBACiB7CiAgIHctPndpbmRvd19wYXJh bWV0ZXJzID0gdmFsOwogfQorc3RhdGljIHZvaWQKK3dzZXRfY29tYmluYXRpb24gKHN0cnVj dCB3aW5kb3cgKncsIGJvb2wgaG9yZmxhZywgTGlzcF9PYmplY3QgdmFsKQoreworICB3LT50 eXBlID0gKGhvcmZsYWcgCisJICAgICA/IFdJTkRPV19IT1JJWk9OVEFMX0NPTUJJTkFUSU9O CisJICAgICA6IFdJTkRPV19WRVJUSUNBTF9DT01CSU5BVElPTik7CisgIHctPm9iamVjdCA9 IHZhbDsKK30KIAogc3RydWN0IHdpbmRvdyAqCiBkZWNvZGVfbGl2ZV93aW5kb3cgKHJlZ2lz dGVyIExpc3BfT2JqZWN0IHdpbmRvdykKQEAgLTI3NSw5ICsyNzMsOSBAQAogYWRqdXN0X3dp bmRvd19jb3VudCAoc3RydWN0IHdpbmRvdyAqdywgaW50IGFyZykKIHsKICAgZWFzc2VydCAo ZWFicyAoYXJnKSA9PSAxKTsKLSAgaWYgKEJVRkZFUlAgKHctPmJ1ZmZlcikpCisgIGlmIChC VUZGRVJQICh3LT5vYmplY3QpKQogICAgIHsKLSAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBY QlVGRkVSICh3LT5idWZmZXIpOworICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIg KHctPm9iamVjdCk7CiAKICAgICAgIGlmIChiLT5iYXNlX2J1ZmZlcikKIAliID0gYi0+YmFz ZV9idWZmZXI7CkBAIC0yOTYsNyArMjk0LDcgQEAKIHdzZXRfYnVmZmVyIChzdHJ1Y3Qgd2lu ZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCiB7CiAgIGFkanVzdF93aW5kb3dfY291bnQgKHcs IC0xKTsKLSAgdy0+YnVmZmVyID0gdmFsOworICB3LT5vYmplY3QgPSB2YWw7CiAgIGFkanVz dF93aW5kb3dfY291bnQgKHcsIDEpOwogfQogCkBAIC0zOTQsMTUgKzM5Miw4IEBACiAgICAg ICB3aW5kb3cgPSBYRlJBTUUgKGZyYW1lX29yX3dpbmRvdyktPnJvb3Rfd2luZG93OwogICAg IH0KIAotICB3aGlsZSAoTklMUCAoWFdJTkRPVyAod2luZG93KS0+YnVmZmVyKSkKLSAgICB7 Ci0gICAgICBpZiAoISBOSUxQIChYV0lORE9XICh3aW5kb3cpLT5oY2hpbGQpKQotCXdpbmRv dyA9IFhXSU5ET1cgKHdpbmRvdyktPmhjaGlsZDsKLSAgICAgIGVsc2UgaWYgKCEgTklMUCAo WFdJTkRPVyAod2luZG93KS0+dmNoaWxkKSkKLQl3aW5kb3cgPSBYV0lORE9XICh3aW5kb3cp LT52Y2hpbGQ7Ci0gICAgICBlbHNlCi0JZW1hY3NfYWJvcnQgKCk7Ci0gICAgfQorICB3aGls ZSAoV0lORE9XUCAoWFdJTkRPVyAod2luZG93KS0+b2JqZWN0KSkKKyAgICB3aW5kb3cgPSBY V0lORE9XICh3aW5kb3cpLT5vYmplY3Q7CiAKICAgcmV0dXJuIHdpbmRvdzsKIH0KQEAgLTQ4 OSwxMSArNDgwLDExIEBACiAgIGlmIChOSUxQIChub3JlY29yZCkpCiAgICAgewogICAgICAg dy0+dXNlX3RpbWUgPSArK3dpbmRvd19zZWxlY3RfY291bnQ7Ci0gICAgICByZWNvcmRfYnVm ZmVyICh3LT5idWZmZXIpOworICAgICAgcmVjb3JkX2J1ZmZlciAody0+b2JqZWN0KTsKICAg ICB9CiAKICAgLyogTWFrZSB0aGUgc2VsZWN0ZWQgd2luZG93J3MgYnVmZmVyIGN1cnJlbnQu ICAqLwotICBGc2V0X2J1ZmZlciAody0+YnVmZmVyKTsKKyAgRnNldF9idWZmZXIgKHctPm9i amVjdCk7CiAKICAgaWYgKEVRICh3aW5kb3csIHNlbGVjdGVkX3dpbmRvdykgJiYgIWluaGli aXRfcG9pbnRfc3dhcCkKICAgICByZXR1cm4gd2luZG93OwpAQCAtNTE2LDcgKzUwNyw3IEBA CiAKICAgc2VsZWN0X3dpbmRvd18xICh3aW5kb3csIGluaGliaXRfcG9pbnRfc3dhcCk7CiAK LSAgYnNldF9sYXN0X3NlbGVjdGVkX3dpbmRvdyAoWEJVRkZFUiAody0+YnVmZmVyKSwgd2lu ZG93KTsKKyAgYnNldF9sYXN0X3NlbGVjdGVkX3dpbmRvdyAoWEJVRkZFUiAody0+b2JqZWN0 KSwgd2luZG93KTsKICAgd2luZG93c19vcl9idWZmZXJzX2NoYW5nZWQrKzsKICAgcmV0dXJu IHdpbmRvdzsKIH0KQEAgLTUzMywxMCArNTI0LDEwIEBACiAgIGlmICghaW5oaWJpdF9wb2lu dF9zd2FwKQogICAgIHsKICAgICAgIHN0cnVjdCB3aW5kb3cgKm93ID0gWFdJTkRPVyAoc2Vs ZWN0ZWRfd2luZG93KTsKLSAgICAgIGlmICghIE5JTFAgKG93LT5idWZmZXIpKQotCXNldF9t YXJrZXJfYm90aCAob3ctPnBvaW50bSwgb3ctPmJ1ZmZlciwKLQkJCSBCVUZfUFQgKFhCVUZG RVIgKG93LT5idWZmZXIpKSwKLQkJCSBCVUZfUFRfQllURSAoWEJVRkZFUiAob3ctPmJ1ZmZl cikpKTsKKyAgICAgIGlmIChCVUZGRVJQIChvdy0+b2JqZWN0KSkKKwlzZXRfbWFya2VyX2Jv dGggKG93LT5wb2ludG0sIG93LT5vYmplY3QsCisJCQkgQlVGX1BUIChYQlVGRkVSIChvdy0+ b2JqZWN0KSksCisJCQkgQlVGX1BUX0JZVEUgKFhCVUZGRVIgKG93LT5vYmplY3QpKSk7CiAg ICAgfQogCiAgIHNlbGVjdGVkX3dpbmRvdyA9IHdpbmRvdzsKQEAgLTU4MSw3ICs1NzIsNyBA QAogUmV0dXJuIG5pbCBmb3IgYW4gaW50ZXJuYWwgd2luZG93IG9yIGEgZGVsZXRlZCB3aW5k b3cuICAqLykKICAgKExpc3BfT2JqZWN0IHdpbmRvdykKIHsKLSAgcmV0dXJuIGRlY29kZV9h bnlfd2luZG93ICh3aW5kb3cpLT5idWZmZXI7CisgIHJldHVybiBkZWNvZGVfYW55X3dpbmRv dyAod2luZG93KS0+b2JqZWN0OwogfQogCiBERUZVTiAoIndpbmRvdy1wYXJlbnQiLCBGd2lu ZG93X3BhcmVudCwgU3dpbmRvd19wYXJlbnQsIDAsIDEsIDAsCkBAIC02MDEsNyArNTkyLDgg QEAKIGhvcml6b250YWwgY29tYmluYXRpb24uICAqLykKICAgKExpc3BfT2JqZWN0IHdpbmRv dykKIHsKLSAgcmV0dXJuIGRlY29kZV92YWxpZF93aW5kb3cgKHdpbmRvdyktPnZjaGlsZDsK KyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV92YWxpZF93aW5kb3cgKHdpbmRvdyk7Cisg IHJldHVybiB3LT50eXBlID09IFdJTkRPV19WRVJUSUNBTF9DT01CSU5BVElPTiA/IHctPm9i amVjdCA6IFFuaWw7CiB9CiAKIERFRlVOICgid2luZG93LWxlZnQtY2hpbGQiLCBGd2luZG93 X2xlZnRfY2hpbGQsIFN3aW5kb3dfbGVmdF9jaGlsZCwgMCwgMSwgMCwKQEAgLTYxMiw3ICs2 MDQsOCBAQAogdmVydGljYWwgY29tYmluYXRpb24uICAqLykKICAgKExpc3BfT2JqZWN0IHdp bmRvdykKIHsKLSAgcmV0dXJuIGRlY29kZV92YWxpZF93aW5kb3cgKHdpbmRvdyktPmhjaGls ZDsKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV92YWxpZF93aW5kb3cgKHdpbmRvdyk7 CisgIHJldHVybiB3LT50eXBlID09IFdJTkRPV19IT1JJWk9OVEFMX0NPTUJJTkFUSU9OID8g dy0+b2JqZWN0IDogUW5pbDsKIH0KIAogREVGVU4gKCJ3aW5kb3ctbmV4dC1zaWJsaW5nIiwg RndpbmRvd19uZXh0X3NpYmxpbmcsIFN3aW5kb3dfbmV4dF9zaWJsaW5nLCAwLCAxLCAwLApA QCAtNjQ1LDcgKzYzOCw3IEBACiAKICAgQ0hFQ0tfVkFMSURfV0lORE9XICh3aW5kb3cpOwog ICB3ID0gWFdJTkRPVyAod2luZG93KTsKLSAgaWYgKCFOSUxQICh3LT5idWZmZXIpKQorICBp ZiAody0+dHlwZSA9PSBXSU5ET1dfTEVBRikKICAgICBlcnJvciAoIkNvbWJpbmF0aW9uIGxp bWl0IGlzIG1lYW5pbmdmdWwgZm9yIGludGVybmFsIHdpbmRvd3Mgb25seSIpOwogICByZXR1 cm4gWFdJTkRPVyAod2luZG93KS0+Y29tYmluYXRpb25fbGltaXQ7CiB9CkBAIC02NjMsNyAr NjU2LDcgQEAKIAogICBDSEVDS19WQUxJRF9XSU5ET1cgKHdpbmRvdyk7CiAgIHcgPSBYV0lO RE9XICh3aW5kb3cpOwotICBpZiAoIU5JTFAgKHctPmJ1ZmZlcikpCisgIGlmICh3LT50eXBl ID09IFdJTkRPV19MRUFGKQogICAgIGVycm9yICgiQ29tYmluYXRpb24gbGltaXQgaXMgbWVh bmluZ2Z1bCBmb3IgaW50ZXJuYWwgd2luZG93cyBvbmx5Iik7CiAgIHdzZXRfY29tYmluYXRp b25fbGltaXQgKHcsIGxpbWl0KTsKICAgcmV0dXJuIGxpbWl0OwpAQCAtODYwLDcgKzg1Myw3 IEBACiAKICAgLyogUHJldmVudCByZWRpc3BsYXkgc2hvcnRjdXRzIHdoZW4gY2hhbmdpbmcg dGhlIGhzY3JvbGwuICAqLwogICBpZiAody0+aHNjcm9sbCAhPSBuZXdfaHNjcm9sbCkKLSAg ICBYQlVGRkVSICh3LT5idWZmZXIpLT5wcmV2ZW50X3JlZGlzcGxheV9vcHRpbWl6YXRpb25z X3AgPSAxOworICAgIFhCVUZGRVIgKHctPm9iamVjdCktPnByZXZlbnRfcmVkaXNwbGF5X29w dGltaXphdGlvbnNfcCA9IDE7CiAKICAgdy0+aHNjcm9sbCA9IG5ld19oc2Nyb2xsOwogICBy ZXR1cm4gbWFrZV9udW1iZXIgKG5ld19oc2Nyb2xsKTsKQEAgLTE0NDEsNyArMTQzNCw3IEBA CiAgIHJlZ2lzdGVyIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHdp bmRvdyk7CiAKICAgaWYgKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KSkKLSAgICBy ZXR1cm4gbWFrZV9udW1iZXIgKEJVRl9QVCAoWEJVRkZFUiAody0+YnVmZmVyKSkpOworICAg IHJldHVybiBtYWtlX251bWJlciAoQlVGX1BUIChYQlVGRkVSICh3LT5vYmplY3QpKSk7CiAg IGVsc2UKICAgICByZXR1cm4gRm1hcmtlcl9wb3NpdGlvbiAody0+cG9pbnRtKTsKIH0KQEAg LTE0ODMsNyArMTQ3Niw3IEBACiAgIExpc3BfT2JqZWN0IGJ1ZjsKICAgc3RydWN0IGJ1ZmZl ciAqYjsKIAotICBidWYgPSB3LT5idWZmZXI7CisgIGJ1ZiA9IHctPm9iamVjdDsKICAgQ0hF Q0tfQlVGRkVSIChidWYpOwogICBiID0gWEJVRkZFUiAoYnVmKTsKIApAQCAtMTU0Niw3ICsx NTM5LDcgQEAKIAogICBpZiAodyA9PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpKQogICAg IHsKLSAgICAgIGlmIChYQlVGRkVSICh3LT5idWZmZXIpID09IGN1cnJlbnRfYnVmZmVyKQor ICAgICAgaWYgKFhCVUZGRVIgKHctPm9iamVjdCkgPT0gY3VycmVudF9idWZmZXIpCiAJRmdv dG9fY2hhciAocG9zKTsKICAgICAgIGVsc2UKIAl7CkBAIC0xNTU0LDE0ICsxNTQ3LDE0IEBA CiAKIAkgIC8qIC4uLiBidXQgaGVyZSB3ZSB3YW50IHRvIGNhdGNoIHR5cGUgZXJyb3IgYmVm b3JlIGJ1ZmZlciBjaGFuZ2UuICAqLwogCSAgQ0hFQ0tfTlVNQkVSX0NPRVJDRV9NQVJLRVIg KHBvcyk7Ci0JICBzZXRfYnVmZmVyX2ludGVybmFsIChYQlVGRkVSICh3LT5idWZmZXIpKTsK KwkgIHNldF9idWZmZXJfaW50ZXJuYWwgKFhCVUZGRVIgKHctPm9iamVjdCkpOwogCSAgRmdv dG9fY2hhciAocG9zKTsKIAkgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOwog CX0KICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBzZXRfbWFya2VyX3Jlc3RyaWN0ZWQg KHctPnBvaW50bSwgcG9zLCB3LT5idWZmZXIpOworICAgICAgc2V0X21hcmtlcl9yZXN0cmlj dGVkICh3LT5wb2ludG0sIHBvcywgdy0+b2JqZWN0KTsKICAgICAgIC8qIFdlIGhhdmUgdG8g bWFrZSBzdXJlIHRoYXQgcmVkaXNwbGF5IHVwZGF0ZXMgdGhlIHdpbmRvdyB0byBzaG93CiAJ IHRoZSBuZXcgdmFsdWUgb2YgcG9pbnQuICAqLwogICAgICAgKyt3aW5kb3dzX29yX2J1ZmZl cnNfY2hhbmdlZDsKQEAgLTE1NzksNyArMTU3Miw3IEBACiB7CiAgIHJlZ2lzdGVyIHN0cnVj dCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHdpbmRvdyk7CiAKLSAgc2V0X21h cmtlcl9yZXN0cmljdGVkICh3LT5zdGFydCwgcG9zLCB3LT5idWZmZXIpOworICBzZXRfbWFy a2VyX3Jlc3RyaWN0ZWQgKHctPnN0YXJ0LCBwb3MsIHctPm9iamVjdCk7CiAgIC8qIFRoaXMg aXMgbm90IHJpZ2h0LCBidXQgbXVjaCBlYXNpZXIgdGhhbiBkb2luZyB3aGF0IGlzIHJpZ2h0 LiAgKi8KICAgdy0+c3RhcnRfYXRfbGluZV9iZWcgPSAwOwogICBpZiAoTklMUCAobm9mb3Jj ZSkpCkBAIC0xNjIzLDcgKzE2MTYsNyBAQAogICBpbnQgeCwgeTsKIAogICB3ID0gZGVjb2Rl X2xpdmVfd2luZG93ICh3aW5kb3cpOwotICBidWYgPSBYQlVGRkVSICh3LT5idWZmZXIpOwor ICBidWYgPSBYQlVGRkVSICh3LT5vYmplY3QpOwogICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJL RVIgKHRvcCwgdy0+c3RhcnQpOwogCiAgIGlmIChFUSAocG9zLCBRdCkpCkBAIC0xNjkyLDgg KzE2ODUsOCBAQAogICBpZiAobm9uaW50ZXJhY3RpdmUgfHwgdy0+cHNldWRvX3dpbmRvd19w KQogICAgIHJldHVybiBRbmlsOwogCi0gIENIRUNLX0JVRkZFUiAody0+YnVmZmVyKTsKLSAg YiA9IFhCVUZGRVIgKHctPmJ1ZmZlcik7CisgIENIRUNLX0JVRkZFUiAody0+b2JqZWN0KTsK KyAgYiA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAKICAgLyogRmFpbCBpZiBjdXJyZW50IG1h dHJpeCBpcyBub3QgdXAtdG8tZGF0ZS4gICovCiAgIGlmICghdy0+d2luZG93X2VuZF92YWxp ZApAQCAtMTkxOSw5ICsxOTEyLDkgQEAKIAogICBpZiAoRElTUF9UQUJMRV9QICh3LT5kaXNw bGF5X3RhYmxlKSkKICAgICBkcCA9IFhDSEFSX1RBQkxFICh3LT5kaXNwbGF5X3RhYmxlKTsK LSAgZWxzZSBpZiAoQlVGRkVSUCAody0+YnVmZmVyKSkKKyAgZWxzZSBpZiAoQlVGRkVSUCAo dy0+b2JqZWN0KSkKICAgICB7Ci0gICAgICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAo dy0+YnVmZmVyKTsKKyAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSICh3LT5vYmpl Y3QpOwogCiAgICAgICBpZiAoRElTUF9UQUJMRV9QIChCVkFSIChiLCBkaXNwbGF5X3RhYmxl KSkpCiAJZHAgPSBYQ0hBUl9UQUJMRSAoQlZBUiAoYiwgZGlzcGxheV90YWJsZSkpOwpAQCAt MTk0OSwxNCArMTk0MiwxNCBAQAogICBMaXNwX09iamVjdCBidWY7CiAgIHN0cnVjdCBidWZm ZXIgKmI7CiAKLSAgYnVmID0gdy0+YnVmZmVyOworICBidWYgPSB3LT5vYmplY3Q7CiAgIGIg PSBYQlVGRkVSIChidWYpOwogICBpZiAoYiAhPSBYTUFSS0VSICh3LT5wb2ludG0pLT5idWZm ZXIpCiAgICAgZW1hY3NfYWJvcnQgKCk7CiAKICNpZiAwCiAgIGlmICh3ID09IFhXSU5ET1cg KHNlbGVjdGVkX3dpbmRvdykKLSAgICAgIHx8ICEgRVEgKGJ1ZiwgWFdJTkRPVyAoc2VsZWN0 ZWRfd2luZG93KS0+YnVmZmVyKSkKKyAgICAgIHx8ICEgRVEgKGJ1ZiwgWFdJTkRPVyAoc2Vs ZWN0ZWRfd2luZG93KS0+b2JqZWN0KSkKICAgICAvKiBEbyB0aGlzIGV4Y2VwdCB3aGVuIHRo ZSBzZWxlY3RlZCB3aW5kb3cncyBidWZmZXIKICAgICAgICBpcyBiZWluZyByZW1vdmVkIGZy b20gc29tZSBvdGhlciB3aW5kb3cuICAqLwogI2VuZGlmCkBAIC0xOTcyLDE0ICsxOTY1LDE0 IEBACiAgIC8qIFBvaW50IGluIHRoZSBzZWxlY3RlZCB3aW5kb3cncyBidWZmZXIKICAgICAg aXMgYWN0dWFsbHkgc3RvcmVkIGluIHRoYXQgYnVmZmVyLCBhbmQgdGhlIHdpbmRvdydzIHBv aW50bSBpc24ndCB1c2VkLgogICAgICBTbyBkb24ndCBjbG9iYmVyIHBvaW50IGluIHRoYXQg YnVmZmVyLiAgKi8KLSAgaWYgKCEgRVEgKGJ1ZiwgWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93 KS0+YnVmZmVyKQorICBpZiAoISBFUSAoYnVmLCBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cp LT5vYmplY3QpCiAgICAgICAvKiBEb24ndCBjbG9iYmVyIHBvaW50IGluIGN1cnJlbnQgYnVm ZmVyIGVpdGhlciAodGhpcyBjb3VsZCBiZQogCSB1c2VmdWwgaW4gY29ubmVjdGlvbiB3aXRo IGJ1ZyMxMjIwOCkuCiAgICAgICAmJiBYQlVGRkVSIChidWYpICE9IGN1cnJlbnRfYnVmZmVy ICAqLwogICAgICAgLyogVGhpcyBsaW5lIGhlbHBzIHRvIGZpeCBIb3JzbGV5J3MgdGVzdGJ1 Zy5lbCBidWcuICAqLwogICAgICAgJiYgIShXSU5ET1dQIChCVkFSIChiLCBsYXN0X3NlbGVj dGVkX3dpbmRvdykpCiAJICAgJiYgdyAhPSBYV0lORE9XIChCVkFSIChiLCBsYXN0X3NlbGVj dGVkX3dpbmRvdykpCi0JICAgJiYgRVEgKGJ1ZiwgWFdJTkRPVyAoQlZBUiAoYiwgbGFzdF9z ZWxlY3RlZF93aW5kb3cpKS0+YnVmZmVyKSkpCisJICAgJiYgRVEgKGJ1ZiwgWFdJTkRPVyAo QlZBUiAoYiwgbGFzdF9zZWxlY3RlZF93aW5kb3cpKS0+b2JqZWN0KSkpCiAgICAgdGVtcF9z ZXRfcG9pbnRfYm90aCAoYiwKIAkJCSBjbGlwX3RvX2JvdW5kcyAoQlVGX0JFR1YgKGIpLAog CQkJCQkgbWFya2VyX3Bvc2l0aW9uICh3LT5wb2ludG0pLApAQCAtMjA0NiwxMCArMjAzOSw4 IEBACiAgIHdzZXRfcGFyZW50IChuLCB0ZW0pOwogICBpZiAoIU5JTFAgKHRlbSkpCiAgICAg ewotICAgICAgaWYgKEVRIChYV0lORE9XICh0ZW0pLT52Y2hpbGQsIG9sZCkpCi0Jd3NldF92 Y2hpbGQgKFhXSU5ET1cgKHRlbSksIG5ldyk7Ci0gICAgICBpZiAoRVEgKFhXSU5ET1cgKHRl bSktPmhjaGlsZCwgb2xkKSkKLQl3c2V0X2hjaGlsZCAoWFdJTkRPVyAodGVtKSwgbmV3KTsK KyAgICAgIGlmIChFUSAoWFdJTkRPVyAodGVtKS0+b2JqZWN0LCBvbGQpKQorCVhXSU5ET1cg KHRlbSktPm9iamVjdCA9IG5ldzsKICAgICB9CiB9CiAKQEAgLTIwNjksMjIgKzIwNjAsMTgg QEAKICAgaWYgKCFOSUxQIChwYXJlbnQpICYmIE5JTFAgKHctPmNvbWJpbmF0aW9uX2xpbWl0 KSkKICAgICB7CiAgICAgICBwID0gWFdJTkRPVyAocGFyZW50KTsKLSAgICAgIGlmICgoKCFO SUxQIChwLT52Y2hpbGQpICYmICFOSUxQICh3LT52Y2hpbGQpKQotCSAgIHx8ICghTklMUCAo cC0+aGNoaWxkKSAmJiAhTklMUCAody0+aGNoaWxkKSkpKQorICAgICAgaWYgKHAtPnR5cGUg PT0gdy0+dHlwZSAmJiBwLT50eXBlID4gV0lORE9XX0xFQUYpCiAJLyogV0lORE9XIGFuZCBQ QVJFTlQgYXJlIGJvdGggZWl0aGVyIGEgdmVydGljYWwgb3IgYSBob3Jpem9udGFsCiAJICAg Y29tYmluYXRpb24uICAqLwogCXsKLQkgIGhvcmZsYWcgPSBOSUxQICh3LT52Y2hpbGQpOwot CSAgY2hpbGQgPSBob3JmbGFnID8gdy0+aGNoaWxkIDogdy0+dmNoaWxkOworCSAgaG9yZmxh ZyA9IHctPnR5cGUgPT0gV0lORE9XX0hPUklaT05UQUxfQ09NQklOQVRJT047CisJICBjaGls ZCA9IHctPm9iamVjdDsKIAkgIGMgPSBYV0lORE9XIChjaGlsZCk7CiAKIAkgIC8qIFNwbGlj ZSBXSU5ET1cncyBjaGlsZHJlbiBpbnRvIGl0cyBwYXJlbnQncyBjaGlsZHJlbiBhbmQKIAkg ICAgIGFzc2lnbiBuZXcgbm9ybWFsIHNpemVzLiAgKi8KIAkgIGlmIChOSUxQICh3LT5wcmV2 KSkKLQkgICAgaWYgKGhvcmZsYWcpCi0JICAgICAgd3NldF9oY2hpbGQgKHAsIGNoaWxkKTsK LQkgICAgZWxzZQotCSAgICAgIHdzZXRfdmNoaWxkIChwLCBjaGlsZCk7CisJICAgIHdzZXRf Y29tYmluYXRpb24gKHAsIGhvcmZsYWcsIGNoaWxkKTsKIAkgIGVsc2UKIAkgICAgewogCSAg ICAgIHdzZXRfcHJldiAoYywgdy0+cHJldik7CkBAIC0yMTIyLDggKzIxMDksOCBAQAogCSAg ICB9CiAKIAkgIC8qIFdJTkRPVyBjYW4gYmUgZGVsZXRlZCBub3cuICAqLwotCSAgd3NldF92 Y2hpbGQgKHcsIFFuaWwpOwotCSAgd3NldF9oY2hpbGQgKHcsIFFuaWwpOworCSAgZWFzc2Vy dCAody0+dHlwZSAhPSBXSU5ET1dfTEVBRik7CisJICB3LT5vYmplY3QgPSBRbmlsOwogCX0K ICAgICB9CiB9CkBAIC0yMjA5LDcgKzIxOTYsNyBAQAogICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKHctPmZyYW1lKTsKICAgaW50IGNhbmRpZGF0ZV9wID0gMTsKIAotICBpZiAoIUJV RkZFUlAgKHctPmJ1ZmZlcikpCisgIGlmICghQlVGRkVSUCAody0+b2JqZWN0KSkKICAgICBj YW5kaWRhdGVfcCA9IDA7CiAgIGVsc2UgaWYgKE1JTklfV0lORE9XX1AgKHcpCiAgICAgICAg ICAgICYmIChFUSAobWluaWJ1ZiwgUWxhbWJkYSkKQEAgLTI2MTMsNyArMjYwMCw3IEBACiAJ c3dpdGNoICh0eXBlKQogCSAgewogCSAgY2FzZSBHRVRfQlVGRkVSX1dJTkRPVzoKLQkgICAg aWYgKEVRICh3LT5idWZmZXIsIG9iaikKKwkgICAgaWYgKEVRICh3LT5vYmplY3QsIG9iaikK IAkJLyogRG9uJ3QgZmluZCBhbnkgbWluaWJ1ZmZlciB3aW5kb3cgZXhjZXB0IHRoZSBvbmUg dGhhdAogCQkgICBpcyBjdXJyZW50bHkgaW4gdXNlLiAgKi8KIAkJJiYgKE1JTklfV0lORE9X X1AgKHcpID8gRVEgKHdpbmRvdywgbWluaWJ1Zl93aW5kb3cpIDogMSkpCkBAIC0yNjM3LDI1 ICsyNjI0LDI1IEBACiAJICBjYXNlIFJFUExBQ0VfQlVGRkVSX0lOX1dJTkRPV1NfU0FGRUxZ OgogCSAgICAvKiBXZSBjb3VsZCBzaW1wbHkgY2hlY2sgd2hldGhlciB0aGUgYnVmZmVyIHNo b3duIGJ5IHdpbmRvdwogCSAgICAgICBpcyBsaXZlLCBhbmQgc2hvdyBhbm90aGVyIGJ1ZmZl ciBpbiBjYXNlIGl0IGlzbid0LiAgKi8KLQkgICAgaWYgKEVRICh3LT5idWZmZXIsIG9iaikp CisJICAgIGlmIChFUSAody0+b2JqZWN0LCBvYmopKQogCSAgICAgIHsKIAkJLyogVW5kZWRp Y2F0ZSBXSU5ET1cuICAqLwogCQl3c2V0X2RlZGljYXRlZCAodywgUW5pbCk7CiAJCS8qIE1h a2UgV0lORE9XIHNob3cgdGhlIGJ1ZmZlciByZXR1cm5lZCBieQogCQkgICBvdGhlcl9idWZm ZXJfc2FmZWx5LCBkb24ndCBydW4gYW55IGhvb2tzLiAgKi8KIAkJc2V0X3dpbmRvd19idWZm ZXIKLQkJICAod2luZG93LCBvdGhlcl9idWZmZXJfc2FmZWx5ICh3LT5idWZmZXIpLCAwLCAw KTsKKwkJICAod2luZG93LCBvdGhlcl9idWZmZXJfc2FmZWx5ICh3LT5vYmplY3QpLCAwLCAw KTsKIAkJLyogSWYgV0lORE9XIGlzIHRoZSBzZWxlY3RlZCB3aW5kb3csIG1ha2UgaXRzIGJ1 ZmZlcgogCQkgICBjdXJyZW50LiAgQnV0IGRvIHNvIG9ubHkgaWYgdGhlIHdpbmRvdyBzaG93 cyB0aGUKIAkJICAgY3VycmVudCBidWZmZXIgKEJ1ZyM2NDU0KS4gICovCiAJCWlmIChFUSAo d2luZG93LCBzZWxlY3RlZF93aW5kb3cpCi0JCSAgICAmJiBYQlVGRkVSICh3LT5idWZmZXIp ID09IGN1cnJlbnRfYnVmZmVyKQotCQkgIEZzZXRfYnVmZmVyICh3LT5idWZmZXIpOworCQkg ICAgJiYgWEJVRkZFUiAody0+b2JqZWN0KSA9PSBjdXJyZW50X2J1ZmZlcikKKwkJICBGc2V0 X2J1ZmZlciAody0+b2JqZWN0KTsKIAkgICAgICB9CiAJICAgIGJyZWFrOwogCiAJICBjYXNl IFJFRElTUExBWV9CVUZGRVJfV0lORE9XUzoKLQkgICAgaWYgKEVRICh3LT5idWZmZXIsIG9i aikpCisJICAgIGlmIChFUSAody0+b2JqZWN0LCBvYmopKQogCSAgICAgIHsKIAkJbWFya193 aW5kb3dfZGlzcGxheV9hY2N1cmF0ZSAod2luZG93LCAwKTsKIAkJdy0+dXBkYXRlX21vZGVf bGluZSA9IDE7CkBAIC0yNjY3LDggKzI2NTQsNyBAQAogCiAJICAgIC8qIENoZWNrIGZvciBh IHdpbmRvdyB0aGF0IGhhcyBhIGtpbGxlZCBidWZmZXIuICAqLwogCSAgY2FzZSBDSEVDS19B TExfV0lORE9XUzoKLQkgICAgaWYgKCEgTklMUCAody0+YnVmZmVyKQotCQkmJiAhQlVGRkVS X0xJVkVfUCAoWEJVRkZFUiAody0+YnVmZmVyKSkpCisJICAgIGlmIChCVUZGRVJQICh3LT5v YmplY3QpICYmICFCVUZGRVJfTElWRV9QIChYQlVGRkVSICh3LT5vYmplY3QpKSkKIAkgICAg ICBlbWFjc19hYm9ydCAoKTsKIAkgICAgYnJlYWs7CiAKQEAgLTI3ODYsNyArMjc3Miw3IEBA CiAgIGVsc2UgaWYgKE1JTklfV0lORE9XX1AgKHcpKSAvKiAmJiB0b3AgPiAwKSAqLwogICAg IGVycm9yICgiQ2FuJ3QgZXhwYW5kIG1pbmlidWZmZXIgdG8gZnVsbCBmcmFtZSIpOwogCi0g IGlmICghTklMUCAody0+YnVmZmVyKSkKKyAgaWYgKEJVRkZFUlAgKHctPm9iamVjdCkpCiAg ICAgewogICAgICAgc3RhcnRwb3MgPSBtYXJrZXJfcG9zaXRpb24gKHctPnN0YXJ0KTsKICAg ICAgIHN0YXJ0Ynl0ZSA9IG1hcmtlcl9ieXRlX3Bvc2l0aW9uICh3LT5zdGFydCk7CkBAIC0y ODU4LDcgKzI4NDQsNyBAQAogICBGUkFNRV9XSU5ET1dfU0laRVNfQ0hBTkdFRCAoZikgPSAx OwogICByZXNpemVfZmFpbGVkID0gMDsKIAotICBpZiAoTklMUCAody0+YnVmZmVyKSkKKyAg aWYgKHctPnR5cGUgIT0gV0lORE9XX0xFQUYpCiAgICAgewogICAgICAgLyogUmVzaXplIGNo aWxkIHdpbmRvd3MgdmVydGljYWxseS4gICovCiAgICAgICBYU0VUSU5UIChkZWx0YSwgci0+ dG90YWxfbGluZXMgLSB3LT50b3RhbF9saW5lcyk7CkBAIC0yOTE3LDI4ICsyOTAzLDIwIEBA CiAgICAgICBzaWJsaW5nID0gdy0+bmV4dDsKICAgICAgIHMgPSBYV0lORE9XIChzaWJsaW5n KTsKICAgICAgIHdzZXRfcHJldiAocywgUW5pbCk7Ci0gICAgICBpZiAoIU5JTFAgKFhXSU5E T1cgKHctPnBhcmVudCktPnZjaGlsZCkpCi0Jd3NldF92Y2hpbGQgKFhXSU5ET1cgKHctPnBh cmVudCksIHNpYmxpbmcpOwotICAgICAgZWxzZQotCXdzZXRfaGNoaWxkIChYV0lORE9XICh3 LT5wYXJlbnQpLCBzaWJsaW5nKTsKKyAgICAgIFhXSU5ET1cgKHctPnBhcmVudCktPm9iamVj dCA9IHNpYmxpbmc7CiAgICAgfQogCiAgIC8qIERlbGV0ZSBST09UIGFuZCBhbGwgY2hpbGQg d2luZG93cyBvZiBST09ULiAgKi8KLSAgaWYgKCFOSUxQIChyLT52Y2hpbGQpKQotICAgIHsK LSAgICAgIGRlbGV0ZV9hbGxfY2hpbGRfd2luZG93cyAoci0+dmNoaWxkKTsKLSAgICAgIHdz ZXRfdmNoaWxkIChyLCBRbmlsKTsKLSAgICB9Ci0gIGVsc2UgaWYgKCFOSUxQIChyLT5oY2hp bGQpKQotICAgIHsKLSAgICAgIGRlbGV0ZV9hbGxfY2hpbGRfd2luZG93cyAoci0+aGNoaWxk KTsKLSAgICAgIHdzZXRfaGNoaWxkIChyLCBRbmlsKTsKKyAgaWYgKFdJTkRPV1AgKHItPm9i amVjdCkpCisgICAgeworICAgICAgZGVsZXRlX2FsbF9jaGlsZF93aW5kb3dzIChyLT5vYmpl Y3QpOworICAgICAgci0+b2JqZWN0ID0gUW5pbDsKICAgICB9CiAKICAgcmVwbGFjZV93aW5k b3cgKHJvb3QsIHdpbmRvdywgMSk7CiAKICAgLyogVGhpcyBtdXN0IGJlY29tZSBTV0lORE9X IGFueXdheSAuLi4uLi4uICovCi0gIGlmICghTklMUCAody0+YnVmZmVyKSAmJiAhcmVzaXpl X2ZhaWxlZCkKKyAgaWYgKEJVRkZFUlAgKHctPm9iamVjdCkgJiYgIXJlc2l6ZV9mYWlsZWQp CiAgICAgewogICAgICAgLyogVHJ5IHRvIG1pbmltaXplIHNjcm9sbGluZywgYnkgc2V0dGlu ZyB0aGUgd2luZG93IHN0YXJ0IHRvIHRoZQogCSBwb2ludCB3aWxsIGNhdXNlIHRoZSB0ZXh0 IGF0IHRoZSBvbGQgd2luZG93IHN0YXJ0IHRvIGJlIGF0IHRoZQpAQCAtMjk0NywxOCArMjky NSwxOCBAQAogCSB3aGVuIHRoZSBkaXNwbGF5IGlzIG5vdCBjdXJyZW50LCBkdWUgdG8gdHlw ZWFoZWFkKS4gICovCiAgICAgICBuZXdfdG9wID0gV0lORE9XX1RPUF9FREdFX0xJTkUgKHcp IC0gRlJBTUVfVE9QX01BUkdJTiAoWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKSk7CiAgICAg ICBpZiAobmV3X3RvcCAhPSB0b3AKLQkgICYmIHN0YXJ0cG9zID49IEJVRl9CRUdWIChYQlVG RkVSICh3LT5idWZmZXIpKQotCSAgJiYgc3RhcnRwb3MgPD0gQlVGX1pWIChYQlVGRkVSICh3 LT5idWZmZXIpKSkKKwkgICYmIHN0YXJ0cG9zID49IEJVRl9CRUdWIChYQlVGRkVSICh3LT5v YmplY3QpKQorCSAgJiYgc3RhcnRwb3MgPD0gQlVGX1pWIChYQlVGRkVSICh3LT5vYmplY3Qp KSkKIAl7CiAJICBzdHJ1Y3QgcG9zaXRpb24gcG9zOwogCSAgc3RydWN0IGJ1ZmZlciAqb2J1 ZiA9IGN1cnJlbnRfYnVmZmVyOwogCi0JICBGc2V0X2J1ZmZlciAody0+YnVmZmVyKTsKKwkg IEZzZXRfYnVmZmVyICh3LT5vYmplY3QpOwogCSAgLyogVGhpcyBjb21wdXRhdGlvbiB1c2Vk IHRvIHRlbXBvcmFyaWx5IG1vdmUgcG9pbnQsIGJ1dCB0aGF0CiAJICAgICBjYW4gaGF2ZSB1 bndhbnRlZCBzaWRlIGVmZmVjdHMgZHVlIHRvIHRleHQgcHJvcGVydGllcy4gICovCiAJICBw b3MgPSAqdm1vdGlvbiAoc3RhcnRwb3MsIHN0YXJ0Ynl0ZSwgLXRvcCwgdyk7CiAKLQkgIHNl dF9tYXJrZXJfYm90aCAody0+c3RhcnQsIHctPmJ1ZmZlciwgcG9zLmJ1ZnBvcywgcG9zLmJ5 dGVwb3MpOworCSAgc2V0X21hcmtlcl9ib3RoICh3LT5zdGFydCwgdy0+b2JqZWN0LCBwb3Mu YnVmcG9zLCBwb3MuYnl0ZXBvcyk7CiAJICB3LT53aW5kb3dfZW5kX3ZhbGlkID0gMDsKIAkg IHctPnN0YXJ0X2F0X2xpbmVfYmVnID0gKHBvcy5ieXRlcG9zID09IEJFR1ZfQllURQogCQkJ CSAgICB8fCBGRVRDSF9CWVRFIChwb3MuYnl0ZXBvcyAtIDEpID09ICdcbicpOwpAQCAtMzE1 OCw3ICszMTM2LDcgQEAKICAgc3RydWN0IHdpbmRvdyAqdyA9IFhXSU5ET1cgKHdpbmRvdyk7 CiAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWZmZXIpOwogICBwdHJkaWZmX3Qg Y291bnQgPSBTUEVDUERMX0lOREVYICgpOwotICBpbnQgc2FtZWJ1ZiA9IEVRIChidWZmZXIs IHctPmJ1ZmZlcik7CisgIGludCBzYW1lYnVmID0gRVEgKGJ1ZmZlciwgdy0+b2JqZWN0KTsK IAogICB3c2V0X2J1ZmZlciAodywgYnVmZmVyKTsKIApAQCAtMzI3Nyw3ICszMjU1LDcgQEAK ICAgaWYgKCFCVUZGRVJfTElWRV9QIChYQlVGRkVSIChidWZmZXIpKSkKICAgICBlcnJvciAo IkF0dGVtcHQgdG8gZGlzcGxheSBkZWxldGVkIGJ1ZmZlciIpOwogCi0gIHRlbSA9IHctPmJ1 ZmZlcjsKKyAgdGVtID0gdy0+b2JqZWN0OwogICBpZiAoTklMUCAodGVtKSkKICAgICBlcnJv ciAoIldpbmRvdyBpcyBkZWxldGVkIik7CiAgIGVsc2UKQEAgLTMzMzAsOCArMzMwOCw4IEBA CiAgICAgICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAob2JqZWN0KTsKICAgICAgIG1h cmtfd2luZG93X2Rpc3BsYXlfYWNjdXJhdGUgKG9iamVjdCwgMCk7CiAgICAgICB3LT51cGRh dGVfbW9kZV9saW5lID0gMTsKLSAgICAgIGlmIChCVUZGRVJQICh3LT5idWZmZXIpKQotCVhC VUZGRVIgKHctPmJ1ZmZlciktPnByZXZlbnRfcmVkaXNwbGF5X29wdGltaXphdGlvbnNfcCA9 IDE7CisgICAgICBpZiAoQlVGRkVSUCAody0+b2JqZWN0KSkKKwlYQlVGRkVSICh3LT5vYmpl Y3QpLT5wcmV2ZW50X3JlZGlzcGxheV9vcHRpbWl6YXRpb25zX3AgPSAxOwogICAgICAgKyt1 cGRhdGVfbW9kZV9saW5lczsKICAgICAgIHJldHVybiBRdDsKICAgICB9CkBAIC0zNDAwLDcg KzMzNzgsNyBAQAogICAgICAgICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKEZzZXRfYnVmZmVy LCBwcmV2X2J1ZmZlcik7CiAgICAgICAgIHJlY29yZF91bndpbmRfcHJvdGVjdCAoc2VsZWN0 X3dpbmRvd19ub3JlY29yZCwgcHJldl93aW5kb3cpOwogICAgICAgICBGc2VsZWN0X3dpbmRv dyAod2luZG93LCBRdCk7Ci0gICAgICAgIEZzZXRfYnVmZmVyICh3LT5idWZmZXIpOworICAg ICAgICBGc2V0X2J1ZmZlciAody0+b2JqZWN0KTsKICAgICAgICAgRnJ1bl9ob29rcyAoMSwg JlF0ZW1wX2J1ZmZlcl9zaG93X2hvb2spOwogICAgICAgICB1bmJpbmRfdG8gKGNvdW50LCBR bmlsKTsKICAgICAgIH0KQEAgLTM0MjEsOCArMzM5OSw2IEBACiAgIG1lbWNweSAoKGNoYXIg KikgcCArIHNpemVvZiAoc3RydWN0IHZlY3Rvcmxpa2VfaGVhZGVyKSwKIAkgIChjaGFyICop IG8gKyBzaXplb2YgKHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciksCiAJICB3b3JkX3NpemUg KiBWRUNTSVpFIChzdHJ1Y3Qgd2luZG93KSk7Ci0gIC8qIFAncyBidWZmZXIgc2xvdCBtYXkg Y2hhbmdlIGZyb20gbmlsIHRvIGEgYnVmZmVyLiAgKi8KLSAgYWRqdXN0X3dpbmRvd19jb3Vu dCAocCwgMSk7CiAgIFhTRVRXSU5ET1cgKHBhcmVudCwgcCk7CiAKICAgcmVwbGFjZV93aW5k b3cgKHdpbmRvdywgcGFyZW50LCAxKTsKQEAgLTM0MzAsMTIgKzM0MDYsOSBAQAogICB3c2V0 X25leHQgKG8sIFFuaWwpOwogICB3c2V0X3ByZXYgKG8sIFFuaWwpOwogICB3c2V0X3BhcmVu dCAobywgcGFyZW50KTsKLQotICB3c2V0X2hjaGlsZCAocCwgaG9yZmxhZyA/IHdpbmRvdyA6 IFFuaWwpOwotICB3c2V0X3ZjaGlsZCAocCwgaG9yZmxhZyA/IFFuaWwgOiB3aW5kb3cpOwor ICB3c2V0X2NvbWJpbmF0aW9uIChwLCBob3JmbGFnLCB3aW5kb3cpOwogICB3c2V0X3N0YXJ0 IChwLCBRbmlsKTsKICAgd3NldF9wb2ludG0gKHAsIFFuaWwpOwotICB3c2V0X2J1ZmZlciAo cCwgUW5pbCk7CiAgIHdzZXRfY29tYmluYXRpb25fbGltaXQgKHAsIFFuaWwpOwogICB3c2V0 X3dpbmRvd19wYXJhbWV0ZXJzIChwLCBRbmlsKTsKIH0KQEAgLTM1MjQsMTAgKzM0OTcsMTAg QEAKIHsKICAgc3RydWN0IHdpbmRvdyAqYzsKIAotICBpZiAoIU5JTFAgKHctPnZjaGlsZCkp CisgIGlmICh3LT50eXBlID09IFdJTkRPV19WRVJUSUNBTF9DT01CSU5BVElPTikKICAgICAv KiBXIGlzIGEgdmVydGljYWwgY29tYmluYXRpb24uICAqLwogICAgIHsKLSAgICAgIGMgPSBY V0lORE9XICh3LT52Y2hpbGQpOworICAgICAgYyA9IFhXSU5ET1cgKHctPm9iamVjdCk7CiAg ICAgICBpZiAoaG9yZmxhZykKIAkvKiBBbGwgY2hpbGQgd2luZG93cyBvZiBXIG11c3QgaGF2 ZSB0aGUgc2FtZSB3aWR0aCBhcyBXLiAgKi8KIAl7CkBAIC0zNTU1LDEwICszNTI4LDEwIEBA CiAJICByZXR1cm4gKHN1bV9vZl9zaXplcyA9PSBYSU5UICh3LT5uZXdfdG90YWwpKTsKIAl9 CiAgICAgfQotICBlbHNlIGlmICghTklMUCAody0+aGNoaWxkKSkKKyAgZWxzZSBpZiAody0+ dHlwZSA9PSBXSU5ET1dfSE9SSVpPTlRBTF9DT01CSU5BVElPTikKICAgICAvKiBXIGlzIGEg aG9yaXpvbnRhbCBjb21iaW5hdGlvbi4gICovCiAgICAgewotICAgICAgYyA9IFhXSU5ET1cg KHctPmhjaGlsZCk7CisgICAgICBjID0gWFdJTkRPVyAody0+b2JqZWN0KTsKICAgICAgIGlm IChob3JmbGFnKQogCS8qIFRoZSBzdW0gb2YgdGhlIHdpZHRocyBvZiB0aGUgY2hpbGQgd2lu ZG93cyBvZiBXIG11c3QgZXF1YWwgVydzCiAJICAgd2lkdGguICAqLwpAQCAtMzYyNSwxMCAr MzU5OCwxMCBAQAogICAgICAgcG9zID0gdy0+dG9wX2xpbmU7CiAgICAgfQogCi0gIGlmICgh TklMUCAody0+dmNoaWxkKSkKKyAgaWYgKHctPnR5cGUgPT0gV0lORE9XX1ZFUlRJQ0FMX0NP TUJJTkFUSU9OKQogICAgIC8qIFcgaXMgYSB2ZXJ0aWNhbCBjb21iaW5hdGlvbi4gICovCiAg ICAgewotICAgICAgYyA9IFhXSU5ET1cgKHctPnZjaGlsZCk7CisgICAgICBjID0gWFdJTkRP VyAody0+b2JqZWN0KTsKICAgICAgIHdoaWxlIChjKQogCXsKIAkgIGlmIChob3JmbGFnKQpA QCAtMzY0MSwxMCArMzYxNCwxMCBAQAogCSAgYyA9IE5JTFAgKGMtPm5leHQpID8gMCA6IFhX SU5ET1cgKGMtPm5leHQpOwogCX0KICAgICB9Ci0gIGVsc2UgaWYgKCFOSUxQICh3LT5oY2hp bGQpKQorICBlbHNlIGlmICh3LT50eXBlID09IFdJTkRPV19IT1JJWk9OVEFMX0NPTUJJTkFU SU9OKQogICAgIC8qIFcgaXMgYSBob3Jpem9udGFsIGNvbWJpbmF0aW9uLiAgKi8KICAgICB7 Ci0gICAgICBjID0gWFdJTkRPVyAody0+aGNoaWxkKTsKKyAgICAgIGMgPSBYV0lORE9XICh3 LT5vYmplY3QpOwogICAgICAgd2hpbGUgKGMpCiAJewogCSAgaWYgKGhvcmZsYWcpCkBAIC0z NzI3LDcgKzM3MDAsNyBAQAogCQkJPyAxIDogMCkpKTsKIAogICByLT50b3BfbGluZSA9IEZS QU1FX1RPUF9NQVJHSU4gKGYpOwotICBpZiAoTklMUCAoci0+dmNoaWxkKSAmJiBOSUxQIChy LT5oY2hpbGQpKQorICBpZiAoci0+dHlwZSA9PSBXSU5ET1dfTEVBRikKICAgICAvKiBGb3Ig YSBsZWFmIHJvb3Qgd2luZG93IGp1c3Qgc2V0IHRoZSBzaXplLiAgKi8KICAgICBpZiAoaG9y ZmxhZykKICAgICAgIHItPnRvdGFsX2NvbHMgPSBuZXdfc2l6ZTsKQEAgLTM4NDIsOSArMzgx NSw5IEBACiAgIGNvbWJpbmF0aW9uX2xpbWl0ID0KICAgICBFUSAoVndpbmRvd19jb21iaW5h dGlvbl9saW1pdCwgUXQpCiAgICAgfHwgTklMUCAoby0+cGFyZW50KQotICAgIHx8IE5JTFAg KGhvcmZsYWcKLQkgICAgID8gKFhXSU5ET1cgKG8tPnBhcmVudCktPmhjaGlsZCkKLQkgICAg IDogKFhXSU5ET1cgKG8tPnBhcmVudCktPnZjaGlsZCkpOworICAgIHx8IChob3JmbGFnCisJ PyAoWFdJTkRPVyAoby0+cGFyZW50KS0+dHlwZSA9PSBXSU5ET1dfVkVSVElDQUxfQ09NQklO QVRJT04pCisJOiAoWFdJTkRPVyAoby0+cGFyZW50KS0+dHlwZSA9PSBXSU5ET1dfSE9SSVpP TlRBTF9DT01CSU5BVElPTikpOwogCiAgIC8qIFdlIG5lZWQgYSBsaXZlIHJlZmVyZW5jZSB3 aW5kb3cgdG8gaW5pdGlhbGl6ZSBzb21lIHBhcmFtZXRlcnMuICAqLwogICBpZiAoV0lORE9X X0xJVkVfUCAob2xkKSkKQEAgLTM5MTQsMTcgKzM4ODcsMTIgQEAKICAgbiA9IFhXSU5ET1cg KG5ldyk7CiAgIHdzZXRfZnJhbWUgKG4sIGZyYW1lKTsKICAgd3NldF9wYXJlbnQgKG4sIG8t PnBhcmVudCk7Ci0gIHdzZXRfdmNoaWxkIChuLCBRbmlsKTsKLSAgd3NldF9oY2hpbGQgKG4s IFFuaWwpOwogCiAgIGlmIChFUSAoc2lkZSwgUWFib3ZlKSB8fCBFUSAoc2lkZSwgUWxlZnQp KQogICAgIHsKICAgICAgIHdzZXRfcHJldiAobiwgby0+cHJldik7CiAgICAgICBpZiAoTklM UCAobi0+cHJldikpCi0JaWYgKGhvcmZsYWcpCi0JICB3c2V0X2hjaGlsZCAocCwgbmV3KTsK LQllbHNlCi0JICB3c2V0X3ZjaGlsZCAocCwgbmV3KTsKKwl3c2V0X2NvbWJpbmF0aW9uIChw LCBob3JmbGFnLCBuZXcpOwogICAgICAgZWxzZQogCXdzZXRfbmV4dCAoWFdJTkRPVyAobi0+ cHJldiksIG5ldyk7CiAgICAgICB3c2V0X25leHQgKG4sIG9sZCk7CkBAIC0zOTczLDcgKzM5 NDEsNyBAQAogICBhZGp1c3RfZ2x5cGhzIChmKTsKICAgLyogU2V0IGJ1ZmZlciBvZiBORVcg dG8gYnVmZmVyIG9mIHJlZmVyZW5jZSB3aW5kb3cuICBEb24ndCBydW4KICAgICAgYW55IGhv b2tzLiAgKi8KLSAgc2V0X3dpbmRvd19idWZmZXIgKG5ldywgci0+YnVmZmVyLCAwLCAxKTsK KyAgc2V0X3dpbmRvd19idWZmZXIgKG5ldywgci0+b2JqZWN0LCAwLCAxKTsKICAgdW5ibG9j a19pbnB1dCAoKTsKIAogICAvKiBNYXliZSB3ZSBzaG91bGQgcnVuIHRoZSBzY3JvbGwgZnVu Y3Rpb25zIGluIEVsaXNwICh3aGljaCBhbHJlYWR5CkBAIC00MDAwLDggKzM5NjgsNyBAQAog CiAgIHcgPSBkZWNvZGVfYW55X3dpbmRvdyAod2luZG93KTsKICAgWFNFVFdJTkRPVyAod2lu ZG93LCB3KTsKLSAgaWYgKE5JTFAgKHctPmJ1ZmZlcikKLSAgICAgICYmIE5JTFAgKHctPmhj aGlsZCkgJiYgTklMUCAody0+dmNoaWxkKSkKKyAgaWYgKE5JTFAgKHctPm9iamVjdCkpCiAg ICAgLyogSXQncyBhIG5vLW9wIHRvIGRlbGV0ZSBhbiBhbHJlYWR5IGRlbGV0ZWQgd2luZG93 LiAgKi8KICAgICByZXR1cm4gUW5pbDsKIApAQCAtNDAxNSw3ICszOTgyLDcgQEAKICAgICBl cnJvciAoIkF0dGVtcHQgdG8gZGVsZXRlIHNvbGUgd2luZG93IG9mIHBhcmVudCIpOwogCiAg IHAgPSBYV0lORE9XIChwYXJlbnQpOwotICBob3JmbGFnID0gTklMUCAocC0+dmNoaWxkKTsK KyAgaG9yZmxhZyA9IHAtPnR5cGUgPT0gV0lORE9XX0hPUklaT05UQUxfQ09NQklOQVRJT047 CiAKICAgZnJhbWUgPSBXSU5ET1dfRlJBTUUgKHcpOwogICBmID0gWEZSQU1FIChmcmFtZSk7 CkBAIC00MDMzLDEwICs0MDAwLDcgQEAKICAgICAgIHNpYmxpbmcgPSB3LT5uZXh0OwogICAg ICAgcyA9IFhXSU5ET1cgKHNpYmxpbmcpOwogICAgICAgd3NldF9wcmV2IChzLCBRbmlsKTsK LSAgICAgIGlmIChob3JmbGFnKQotCXdzZXRfaGNoaWxkIChwLCBzaWJsaW5nKTsKLSAgICAg IGVsc2UKLQl3c2V0X3ZjaGlsZCAocCwgc2libGluZyk7CisgICAgICB3c2V0X2NvbWJpbmF0 aW9uIChwLCBob3JmbGFnLCBzaWJsaW5nKTsKICAgICB9CiAgIGVsc2UKICAgICAvKiBHZXQg U0lCTElORyBhYm92ZSAob24gdGhlIGxlZnQgb2YpIFdJTkRPVy4gICovCkBAIC00MDc1LDE3 ICs0MDM5LDEyIEBACiAgICAgICB3c2V0X25leHQgKHcsIFFuaWwpOyAgLyogRG9uJ3QgZGVs ZXRlIHctPm5leHQgdG9vLiAgKi8KICAgICAgIGZyZWVfd2luZG93X21hdHJpY2VzICh3KTsK IAotICAgICAgaWYgKCFOSUxQICh3LT52Y2hpbGQpKQotCXsKLQkgIGRlbGV0ZV9hbGxfY2hp bGRfd2luZG93cyAody0+dmNoaWxkKTsKLQkgIHdzZXRfdmNoaWxkICh3LCBRbmlsKTsKLQl9 Ci0gICAgICBlbHNlIGlmICghTklMUCAody0+aGNoaWxkKSkKLQl7Ci0JICBkZWxldGVfYWxs X2NoaWxkX3dpbmRvd3MgKHctPmhjaGlsZCk7Ci0JICB3c2V0X2hjaGlsZCAodywgUW5pbCk7 Ci0JfQotICAgICAgZWxzZSBpZiAoIU5JTFAgKHctPmJ1ZmZlcikpCisgICAgICBpZiAoV0lO RE9XUCAody0+b2JqZWN0KSkKKwl7CisJICBkZWxldGVfYWxsX2NoaWxkX3dpbmRvd3MgKHct Pm9iamVjdCk7CisJICB3LT5vYmplY3QgPSBRbmlsOworCX0KKyAgICAgIGVsc2UKIAl7CiAJ ICB1bnNob3dfYnVmZmVyICh3KTsKIAkgIHVuY2hhaW5fbWFya2VyIChYTUFSS0VSICh3LT5w b2ludG0pKTsKQEAgLTQxMDQsOCArNDA2Myw4IEBACiAJICB3c2V0X25vcm1hbF9jb2xzIChz LCBwLT5ub3JtYWxfY29scyk7CiAJICB3c2V0X25vcm1hbF9saW5lcyAocywgcC0+bm9ybWFs X2xpbmVzKTsKIAkgIC8qIE1hcmsgUEFSRU5UIGFzIGRlbGV0ZWQuICAqLwotCSAgd3NldF92 Y2hpbGQgKHAsIFFuaWwpOwotCSAgd3NldF9oY2hpbGQgKHAsIFFuaWwpOworCSAgZWFzc2Vy dCAocC0+dHlwZSAhPSBXSU5ET1dfTEVBRik7CisJICBwLT5vYmplY3QgPSBRbmlsOwogCSAg LyogVHJ5IHRvIG1lcmdlIFNJQkxJTkcgaW50byBpdHMgbmV3IHBhcmVudC4gICovCiAJICBy ZWNvbWJpbmVfd2luZG93cyAoc2libGluZyk7CiAJfQpAQCAtNDE1MywxMCArNDExMiw3IEBA CiAgICAgICBpZiAoYmVmb3JlX3NpYmxpbmcpCiAJewogCSAgd3NldF9wcmV2IChzLCB3aW5k b3cpOwotCSAgaWYgKGhvcmZsYWcpCi0JICAgIHdzZXRfaGNoaWxkIChwLCB3aW5kb3cpOwot CSAgZWxzZQotCSAgICB3c2V0X3ZjaGlsZCAocCwgd2luZG93KTsKKwkgIHdzZXRfY29tYmlu YXRpb24gKHAsIGhvcmZsYWcsIHdpbmRvdyk7CiAJfQogICAgICAgZWxzZQogCXsKQEAgLTQy OTksMTAgKzQyNTUsOCBAQAogewogICB3aGlsZSAodykKICAgICB7Ci0gICAgICBpZiAoIU5J TFAgKHctPmhjaGlsZCkpCi0JbWFya193aW5kb3dfY3Vyc29yc19vZmYgKFhXSU5ET1cgKHct PmhjaGlsZCkpOwotICAgICAgZWxzZSBpZiAoIU5JTFAgKHctPnZjaGlsZCkpCi0JbWFya193 aW5kb3dfY3Vyc29yc19vZmYgKFhXSU5ET1cgKHctPnZjaGlsZCkpOworICAgICAgaWYgKFdJ TkRPV1AgKHctPm9iamVjdCkpCisJbWFya193aW5kb3dfY3Vyc29yc19vZmYgKFhXSU5ET1cg KHctPm9iamVjdCkpOwogICAgICAgZWxzZQogCXctPnBoeXNfY3Vyc29yX29uX3AgPSAwOwog CkBAIC00MzIxLDggKzQyNzUsOCBAQAogICBpZiAoIU1JTklfV0lORE9XX1AgKHcpKQogICAg IHsKICAgICAgIGlmICghTklMUCAody0+cGFyZW50KQotCSAgfHwgIU5JTFAgKHctPnZjaGls ZCkKLQkgIHx8ICFOSUxQICh3LT5oY2hpbGQpCisJICB8fCAody0+dHlwZSA9PSBXSU5ET1df VkVSVElDQUxfQ09NQklOQVRJT04pCisJICB8fCAody0+dHlwZSA9PSBXSU5ET1dfSE9SSVpP TlRBTF9DT01CSU5BVElPTikKIAkgIHx8ICFOSUxQICh3LT5uZXh0KQogCSAgfHwgIU5JTFAg KHctPnByZXYpCiAJICB8fCBXSU5ET1dfV0FOVFNfTU9ERUxJTkVfUCAodykpCkBAIC00NDYx LDcgKzQ0MTUsNyBAQAogCQkgIGVsc2UKIAkJICAgIHNwb3MgPSBtaW4gKFhJTlQgKEZsaW5l X2VuZF9wb3NpdGlvbiAoUW5pbCkpICsgMSwgWlYpOwogCQkgIHNldF9tYXJrZXJfcmVzdHJp Y3RlZCAody0+c3RhcnQsIG1ha2VfbnVtYmVyIChzcG9zKSwKLQkJCQkJIHctPmJ1ZmZlcik7 CisJCQkJCSB3LT5vYmplY3QpOwogCQkgIHctPnN0YXJ0X2F0X2xpbmVfYmVnID0gMTsKIAkJ ICB3LT51cGRhdGVfbW9kZV9saW5lID0gMTsKIAkJICB3LT5sYXN0X21vZGlmaWVkID0gMDsK QEAgLTQ1ODUsNyArNDUzOSw3IEBACiAKICAgICAgIC8qIElmIGNvbnRyb2wgZ2V0cyBoZXJl LCB0aGVuIHdlIHZzY3JvbGxlZC4gICovCiAKLSAgICAgIFhCVUZGRVIgKHctPmJ1ZmZlcikt PnByZXZlbnRfcmVkaXNwbGF5X29wdGltaXphdGlvbnNfcCA9IDE7CisgICAgICBYQlVGRkVS ICh3LT5vYmplY3QpLT5wcmV2ZW50X3JlZGlzcGxheV9vcHRpbWl6YXRpb25zX3AgPSAxOwog CiAgICAgICAvKiBEb24ndCB0cnkgdG8gY2hhbmdlIHRoZSB3aW5kb3cgc3RhcnQgYmVsb3cu ICAqLwogICAgICAgdnNjcm9sbGVkID0gMTsKQEAgLTQ2MDUsNyArNDU1OSw3IEBACiAJfQog CiAgICAgICAvKiBTZXQgdGhlIHdpbmRvdyBzdGFydCwgYW5kIHNldCB1cCB0aGUgd2luZG93 IGZvciByZWRpc3BsYXkuICAqLwotICAgICAgc2V0X21hcmtlcl9yZXN0cmljdGVkX2JvdGgg KHctPnN0YXJ0LCB3LT5idWZmZXIsIElUX0NIQVJQT1MgKGl0KSwKKyAgICAgIHNldF9tYXJr ZXJfcmVzdHJpY3RlZF9ib3RoICh3LT5zdGFydCwgdy0+b2JqZWN0LCBJVF9DSEFSUE9TIChp dCksCiAJCQkJICBJVF9CWVRFUE9TIChpdCkpOwogICAgICAgYnl0ZXBvcyA9IG1hcmtlcl9i eXRlX3Bvc2l0aW9uICh3LT5zdGFydCk7CiAgICAgICB3LT5zdGFydF9hdF9saW5lX2JlZyA9 IChwb3MgPT0gQkVHViB8fCBGRVRDSF9CWVRFIChieXRlcG9zIC0gMSkgPT0gJ1xuJyk7CkBA IC00ODA1LDcgKzQ3NTksNyBAQAogICAgICAgaW50IHRoaXNfc2Nyb2xsX21hcmdpbiA9CiAJ bWF4ICgwLCBtaW4gKHNjcm9sbF9tYXJnaW4sIHctPnRvdGFsX2xpbmVzIC8gNCkpOwogCi0g ICAgICBzZXRfbWFya2VyX3Jlc3RyaWN0ZWRfYm90aCAody0+c3RhcnQsIHctPmJ1ZmZlciwg cG9zLCBwb3NfYnl0ZSk7CisgICAgICBzZXRfbWFya2VyX3Jlc3RyaWN0ZWRfYm90aCAody0+ c3RhcnQsIHctPm9iamVjdCwgcG9zLCBwb3NfYnl0ZSk7CiAgICAgICB3LT5zdGFydF9hdF9s aW5lX2JlZyA9ICFOSUxQIChib2xwKTsKICAgICAgIHctPnVwZGF0ZV9tb2RlX2xpbmUgPSAx OwogICAgICAgdy0+bGFzdF9tb2RpZmllZCA9IDA7CkBAIC00ODk5LDEwICs0ODUzLDEwIEBA CiAKICAgLyogSWYgc2VsZWN0ZWQgd2luZG93J3MgYnVmZmVyIGlzbid0IGN1cnJlbnQsIG1h a2UgaXQgY3VycmVudCBmb3IKICAgICAgdGhlIG1vbWVudC4gIEJ1dCBkb24ndCBzY3JldyB1 cCBpZiB3aW5kb3dfc2Nyb2xsIGdldHMgYW4gZXJyb3IuICAqLwotICBpZiAoWEJVRkZFUiAo WFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVmZmVyKSAhPSBjdXJyZW50X2J1ZmZlcikK KyAgaWYgKFhCVUZGRVIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPm9iamVjdCkgIT0g Y3VycmVudF9idWZmZXIpCiAgICAgewogICAgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChz YXZlX2V4Y3Vyc2lvbl9yZXN0b3JlLCBzYXZlX2V4Y3Vyc2lvbl9zYXZlICgpKTsKLSAgICAg IEZzZXRfYnVmZmVyIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpOworICAg ICAgRnNldF9idWZmZXIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPm9iamVjdCk7CiAK ICAgICAgIC8qIE1ha2UgcmVkaXNwbGF5IGNvbnNpZGVyIG90aGVyIHdpbmRvd3MgdGhhbiBq dXN0IHNlbGVjdGVkX3dpbmRvdy4gICovCiAgICAgICArK3dpbmRvd3Nfb3JfYnVmZmVyc19j aGFuZ2VkOwpAQCAtNTAxNyw3ICs0OTcxLDcgQEAKICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0 IChzYXZlX2V4Y3Vyc2lvbl9yZXN0b3JlLCBzYXZlX2V4Y3Vyc2lvbl9zYXZlICgpKTsKICAg Kyt3aW5kb3dzX29yX2J1ZmZlcnNfY2hhbmdlZDsKIAotICBGc2V0X2J1ZmZlciAody0+YnVm ZmVyKTsKKyAgRnNldF9idWZmZXIgKHctPm9iamVjdCk7CiAgIFNFVF9QVF9CT1RIIChtYXJr ZXJfcG9zaXRpb24gKHctPnBvaW50bSksIG1hcmtlcl9ieXRlX3Bvc2l0aW9uICh3LT5wb2lu dG0pKTsKIAogICBpZiAoTklMUCAoYXJnKSkKQEAgLTUxMTEsMTAgKzUwNjUsMTAgQEAKICAg aW50IGJvdHRvbV95OwogICB2b2lkICppdGRhdGEgPSBOVUxMOwogCi0gIGlmIChYQlVGRkVS ICh3LT5idWZmZXIpICE9IGN1cnJlbnRfYnVmZmVyKQorICBpZiAoWEJVRkZFUiAody0+b2Jq ZWN0KSAhPSBjdXJyZW50X2J1ZmZlcikKICAgICB7CiAgICAgICBvbGRfYnVmZmVyID0gY3Vy cmVudF9idWZmZXI7Ci0gICAgICBzZXRfYnVmZmVyX2ludGVybmFsIChYQlVGRkVSICh3LT5i dWZmZXIpKTsKKyAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKFhCVUZGRVIgKHctPm9iamVj dCkpOwogICAgIH0KICAgZWxzZQogICAgIG9sZF9idWZmZXIgPSBOVUxMOwpAQCAtNTE3Niw3 ICs1MTMwLDcgQEAKICAgKHJlZ2lzdGVyIExpc3BfT2JqZWN0IGFyZykKIHsKICAgc3RydWN0 IHdpbmRvdyAqdyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyk7Ci0gIHN0cnVjdCBidWZm ZXIgKmJ1ZiA9IFhCVUZGRVIgKHctPmJ1ZmZlcik7CisgIHN0cnVjdCBidWZmZXIgKmJ1ZiA9 IFhCVUZGRVIgKHctPm9iamVjdCk7CiAgIHN0cnVjdCBidWZmZXIgKm9idWYgPSBjdXJyZW50 X2J1ZmZlcjsKICAgaW50IGNlbnRlcl9wID0gMDsKICAgcHRyZGlmZl90IGNoYXJwb3MsIGJ5 dGVwb3M7CkBAIC01MzQyLDcgKzUyOTYsNyBAQAogICAgIH0KIAogICAvKiBTZXQgdGhlIG5l dyB3aW5kb3cgc3RhcnQuICAqLwotICBzZXRfbWFya2VyX2JvdGggKHctPnN0YXJ0LCB3LT5i dWZmZXIsIGNoYXJwb3MsIGJ5dGVwb3MpOworICBzZXRfbWFya2VyX2JvdGggKHctPnN0YXJ0 LCB3LT5vYmplY3QsIGNoYXJwb3MsIGJ5dGVwb3MpOwogICB3LT53aW5kb3dfZW5kX3ZhbGlk ID0gMDsKIAogICB3LT5vcHRpb25hbF9uZXdfc3RhcnQgPSAxOwpAQCAtNTM4Niw5ICs1MzQw LDkgQEAKICAgaW50IHRoaXNfc2Nyb2xsX21hcmdpbjsKICNlbmRpZgogCi0gIGlmICghKEJV RkZFUlAgKHctPmJ1ZmZlcikKLQkmJiBYQlVGRkVSICh3LT5idWZmZXIpID09IGN1cnJlbnRf YnVmZmVyKSkKLSAgICAvKiBUaGlzIHRlc3QgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSBQVC9Q VF9CWVRFIG1ha2Ugc2Vuc2UgaW4gdy0+YnVmZmVyCisgIGlmICghKEJVRkZFUlAgKHctPm9i amVjdCkKKwkmJiBYQlVGRkVSICh3LT5vYmplY3QpID09IGN1cnJlbnRfYnVmZmVyKSkKKyAg ICAvKiBUaGlzIHRlc3QgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSBQVC9QVF9CWVRFIG1ha2Ug c2Vuc2UgaW4gdy0+b2JqZWN0CiAgICAgICAgd2hlbiBwYXNzZWQgYmVsb3cgdG8gc2V0X21h cmtlcl9ib3RoLiAgKi8KICAgICBlcnJvciAoIm1vdmUtdG8td2luZG93LWxpbmUgY2FsbGVk IGZyb20gdW5yZWxhdGVkIGJ1ZmZlciIpOwogCkBAIC01Mzk4LDcgKzUzNTIsNyBAQAogICAg IHsKICAgICAgIGludCBoZWlnaHQgPSB3aW5kb3dfaW50ZXJuYWxfaGVpZ2h0ICh3KTsKICAg ICAgIEZ2ZXJ0aWNhbF9tb3Rpb24gKG1ha2VfbnVtYmVyICgtIChoZWlnaHQgLyAyKSksIHdp bmRvdyk7Ci0gICAgICBzZXRfbWFya2VyX2JvdGggKHctPnN0YXJ0LCB3LT5idWZmZXIsIFBU LCBQVF9CWVRFKTsKKyAgICAgIHNldF9tYXJrZXJfYm90aCAody0+c3RhcnQsIHctPm9iamVj dCwgUFQsIFBUX0JZVEUpOwogICAgICAgdy0+c3RhcnRfYXRfbGluZV9iZWcgPSAhTklMUCAo RmJvbHAgKCkpOwogICAgICAgdy0+Zm9yY2Vfc3RhcnQgPSAxOwogICAgIH0KQEAgLTU1NDgs OSArNTUwMiw5IEBACiAJICAgd2luZG93LXBvaW50IG9mIHRoZSBmaW5hbC1zZWxlY3RlZC13 aW5kb3cgdG8gdGhlIHdpbmRvdy1wb2ludCBvZgogCSAgIHRoZSBjdXJyZW50LXNlbGVjdGVk LXdpbmRvdy4gIFNvIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGljaAogCSAgIHBvaW50IG9m IHRoZSBjdXJyZW50LWJ1ZmZlciB3ZSBjb3B5IGludG8gb2xkX3BvaW50LiAgKi8KLQlpZiAo RVEgKFhXSU5ET1cgKGRhdGEtPmN1cnJlbnRfd2luZG93KS0+YnVmZmVyLCBuZXdfY3VycmVu dF9idWZmZXIpCisJaWYgKEVRIChYV0lORE9XIChkYXRhLT5jdXJyZW50X3dpbmRvdyktPm9i amVjdCwgbmV3X2N1cnJlbnRfYnVmZmVyKQogCSAgICAmJiBXSU5ET1dQIChzZWxlY3RlZF93 aW5kb3cpCi0JICAgICYmIEVRIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIs IG5ld19jdXJyZW50X2J1ZmZlcikKKwkgICAgJiYgRVEgKFhXSU5ET1cgKHNlbGVjdGVkX3dp bmRvdyktPm9iamVjdCwgbmV3X2N1cnJlbnRfYnVmZmVyKQogCSAgICAmJiAhRVEgKHNlbGVj dGVkX3dpbmRvdywgZGF0YS0+Y3VycmVudF93aW5kb3cpKQogCSAgb2xkX3BvaW50ID0gbWFy a2VyX3Bvc2l0aW9uIChYV0lORE9XIChkYXRhLT5jdXJyZW50X3dpbmRvdyktPnBvaW50bSk7 CiAJZWxzZQpAQCAtNTU2NCw3ICs1NTE4LDcgQEAKIAkgICBTbyBpZiBwb3NzaWJsZSB3ZSB3 YW50IHRoaXMgYXJiaXRyYXJ5IGNob2ljZSBvZiAid2hpY2ggcG9pbnQiIHRvCiAJICAgYmUg dGhlIG9uZSBmcm9tIHRoZSB0by1iZS1zZWxlY3RlZC13aW5kb3cgc28gYXMgdG8gcHJldmVu dCB0aGlzCiAJICAgd2luZG93J3MgY3Vyc29yIGZyb20gYmVpbmcgY29waWVkIGZyb20gYW5v dGhlciB3aW5kb3cuICAqLwotCWlmIChFUSAoWFdJTkRPVyAoZGF0YS0+Y3VycmVudF93aW5k b3cpLT5idWZmZXIsIG5ld19jdXJyZW50X2J1ZmZlcikKKwlpZiAoRVEgKFhXSU5ET1cgKGRh dGEtPmN1cnJlbnRfd2luZG93KS0+b2JqZWN0LCBuZXdfY3VycmVudF9idWZmZXIpCiAJICAg IC8qIElmIGN1cnJlbnRfd2luZG93ID0gc2VsZWN0ZWRfd2luZG93LCBpdHMgcG9pbnQgaXMg aW4gQlVGX1BULiAgKi8KIAkgICAgJiYgIUVRIChzZWxlY3RlZF93aW5kb3csIGRhdGEtPmN1 cnJlbnRfd2luZG93KSkKIAkgIG9sZF9wb2ludCA9IG1hcmtlcl9wb3NpdGlvbiAoWFdJTkRP VyAoZGF0YS0+Y3VycmVudF93aW5kb3cpLT5wb2ludG0pOwpAQCAtNTYwNiw4ICs1NTYwLDgg QEAKIAkgIHAgPSBTQVZFRF9XSU5ET1dfTiAoc2F2ZWRfd2luZG93cywgayk7CiAJICB3aW5k b3cgPSBwLT53aW5kb3c7CiAJICB3ID0gWFdJTkRPVyAod2luZG93KTsKLQkgIGlmICghTklM UCAody0+YnVmZmVyKQotCSAgICAgICYmICFFUSAody0+YnVmZmVyLCBwLT5idWZmZXIpCisJ ICBpZiAoQlVGRkVSUCAody0+b2JqZWN0KQorCSAgICAgICYmICFFUSAody0+b2JqZWN0LCBw LT5idWZmZXIpCiAJICAgICAgJiYgQlVGRkVSX0xJVkVfUCAoWEJVRkZFUiAocC0+YnVmZmVy KSkpCiAJICAgIC8qIElmIGEgd2luZG93IHdlIHJlc3RvcmUgZ2V0cyBhbm90aGVyIGJ1ZmZl ciwgcmVjb3JkIHRoZQogCSAgICAgICB3aW5kb3cncyBvbGQgYnVmZmVyLiAgKi8KQEAgLTU2 NDAsMTMgKzU1OTQsMTMgQEAKIAkgd2luZG93IGhvbGRzIGdhcmJhZ2UuKSAgV2UgZG8gdGhp cyBub3csIGJlZm9yZQogCSByZXN0b3JpbmcgdGhlIHdpbmRvdyBjb250ZW50cywgYW5kIHBy ZXZlbnQgaXQgZnJvbQogCSBiZWluZyBkb25lIGxhdGVyIG9uIHdoZW4gd2Ugc2VsZWN0IGEg bmV3IHdpbmRvdy4gICovCi0gICAgICBpZiAoISBOSUxQIChYV0lORE9XIChzZWxlY3RlZF93 aW5kb3cpLT5idWZmZXIpKQorICAgICAgaWYgKCEgTklMUCAoWFdJTkRPVyAoc2VsZWN0ZWRf d2luZG93KS0+b2JqZWN0KSkKIAl7CiAJICB3ID0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93 KTsKIAkgIHNldF9tYXJrZXJfYm90aCAody0+cG9pbnRtLAotCQkJICAgdy0+YnVmZmVyLAot CQkJICAgQlVGX1BUIChYQlVGRkVSICh3LT5idWZmZXIpKSwKLQkJCSAgIEJVRl9QVF9CWVRF IChYQlVGRkVSICh3LT5idWZmZXIpKSk7CisJCQkgICB3LT5vYmplY3QsCisJCQkgICBCVUZf UFQgKFhCVUZGRVIgKHctPm9iamVjdCkpLAorCQkJICAgQlVGX1BUX0JZVEUgKFhCVUZGRVIg KHctPm9iamVjdCkpKTsKIAl9CiAKICAgICAgIHdpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2Vk Kys7CkBAIC01NjkzLDE4ICs1NjQ3LDEwIEBACiAJICAgIHsKIAkgICAgICB3c2V0X3ByZXYg KHcsIFFuaWwpOwogCSAgICAgIGlmICghTklMUCAody0+cGFyZW50KSkKLQkJewotCQkgIGlm IChYSU5UIChwLT50b3RhbF9jb2xzKSA9PSBYV0lORE9XICh3LT5wYXJlbnQpLT50b3RhbF9j b2xzKQotCQkgICAgewotCQkgICAgICB3c2V0X3ZjaGlsZCAoWFdJTkRPVyAody0+cGFyZW50 KSwgcC0+d2luZG93KTsKLQkJICAgICAgd3NldF9oY2hpbGQgKFhXSU5ET1cgKHctPnBhcmVu dCksIFFuaWwpOwotCQkgICAgfQotCQkgIGVsc2UKLQkJICAgIHsKLQkJICAgICAgd3NldF9o Y2hpbGQgKFhXSU5ET1cgKHctPnBhcmVudCksIHAtPndpbmRvdyk7Ci0JCSAgICAgIHdzZXRf dmNoaWxkIChYV0lORE9XICh3LT5wYXJlbnQpLCBRbmlsKTsKLQkJICAgIH0KLQkJfQorCQl3 c2V0X2NvbWJpbmF0aW9uIChYV0lORE9XICh3LT5wYXJlbnQpLAorCQkJCSAgKFhJTlQgKHAt PnRvdGFsX2NvbHMpCisJCQkJICAgIT0gWFdJTkRPVyAody0+cGFyZW50KS0+dG90YWxfY29s cyksCisJCQkJICBwLT53aW5kb3cpOwogCSAgICB9CiAKIAkgIC8qIElmIHdlIHNxdWlycmVs ZWQgYXdheSB0aGUgYnVmZmVyLCByZXN0b3JlIGl0IG5vdy4gICovCkBAIC01NzUzLDIwICs1 Njk5LDE2IEBACiAJICB3LT5sYXN0X21vZGlmaWVkID0gMDsKIAkgIHctPmxhc3Rfb3Zlcmxh eV9tb2RpZmllZCA9IDA7CiAKLQkgIC8qIFJlaW5zdGFsbCB0aGUgc2F2ZWQgYnVmZmVyIGFu ZCBwb2ludGVycyBpbnRvIGl0LiAgKi8KLQkgIGlmIChOSUxQIChwLT5idWZmZXIpKQotCSAg ICAvKiBBbiBpbnRlcm5hbCB3aW5kb3cuICAqLwotCSAgICB3c2V0X2J1ZmZlciAodywgcC0+ YnVmZmVyKTsKLQkgIGVsc2UgaWYgKEJVRkZFUl9MSVZFX1AgKFhCVUZGRVIgKHAtPmJ1ZmZl cikpKQorCSAgaWYgKEJVRkZFUlAgKHAtPmJ1ZmZlcikgJiYgQlVGRkVSX0xJVkVfUCAoWEJV RkZFUiAocC0+YnVmZmVyKSkpCiAJICAgIC8qIElmIHNhdmVkIGJ1ZmZlciBpcyBhbGl2ZSwg aW5zdGFsbCBpdC4gICovCiAJICAgIHsKIAkgICAgICB3c2V0X2J1ZmZlciAodywgcC0+YnVm ZmVyKTsKIAkgICAgICB3LT5zdGFydF9hdF9saW5lX2JlZyA9ICFOSUxQIChwLT5zdGFydF9h dF9saW5lX2JlZyk7Ci0JICAgICAgc2V0X21hcmtlcl9yZXN0cmljdGVkICh3LT5zdGFydCwg cC0+c3RhcnQsIHctPmJ1ZmZlcik7CisJICAgICAgc2V0X21hcmtlcl9yZXN0cmljdGVkICh3 LT5zdGFydCwgcC0+c3RhcnQsIHctPm9iamVjdCk7CiAJICAgICAgc2V0X21hcmtlcl9yZXN0 cmljdGVkICh3LT5wb2ludG0sIHAtPnBvaW50bSwKLQkJCQkgICAgIHctPmJ1ZmZlcik7Ci0J ICAgICAgRnNldF9tYXJrZXIgKEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZlciksIG1hcmspLAot CQkJICAgcC0+bWFyaywgdy0+YnVmZmVyKTsKKwkJCQkgICAgIHctPm9iamVjdCk7CisJICAg ICAgRnNldF9tYXJrZXIgKEJWQVIgKFhCVUZGRVIgKHctPm9iamVjdCksIG1hcmspLAorCQkJ ICAgcC0+bWFyaywgdy0+b2JqZWN0KTsKIAogCSAgICAgIC8qIEFzIGRvY3VtZW50ZWQgaW4g RmN1cnJlbnRfd2luZG93X2NvbmZpZ3VyYXRpb24sIGRvbid0CiAJCSByZXN0b3JlIHRoZSBs b2NhdGlvbiBvZiBwb2ludCBpbiB0aGUgYnVmZmVyIHdoaWNoIHdhcwpAQCAtNTc3NSwyMyAr NTcxNywyMSBAQAogCQkgICYmIFhCVUZGRVIgKHAtPmJ1ZmZlcikgPT0gY3VycmVudF9idWZm ZXIpCiAJCUZnb3RvX2NoYXIgKHctPnBvaW50bSk7CiAJICAgICB9Ci0JICAgZWxzZSBpZiAo IU5JTFAgKHctPmJ1ZmZlcikKLQkJICAgICYmIEJVRkZFUl9MSVZFX1AgKFhCVUZGRVIgKHct PmJ1ZmZlcikpKQotCSAgICAgLyogS2VlcCB3aW5kb3cncyBvbGQgYnVmZmVyOyBtYWtlIHN1 cmUgdGhlIG1hcmtlcnMgYXJlCi0JCXJlYWwuICAqLwotCSAgICAgewotCSAgICAgICAvKiBT ZXQgd2luZG93IG1hcmtlcnMgYXQgc3RhcnQgb2YgdmlzaWJsZSByYW5nZS4gICovCi0JICAg ICAgIGlmIChYTUFSS0VSICh3LT5zdGFydCktPmJ1ZmZlciA9PSAwKQotCQkgc2V0X21hcmtl cl9yZXN0cmljdGVkX2JvdGggKHctPnN0YXJ0LCB3LT5idWZmZXIsIDAsIDApOwotCSAgICAg ICBpZiAoWE1BUktFUiAody0+cG9pbnRtKS0+YnVmZmVyID09IDApCi0JCSBzZXRfbWFya2Vy X3Jlc3RyaWN0ZWRfYm90aAotCQkgICAody0+cG9pbnRtLCB3LT5idWZmZXIsCi0JCSAgICBC VUZfUFQgKFhCVUZGRVIgKHctPmJ1ZmZlcikpLAotCQkgICAgQlVGX1BUX0JZVEUgKFhCVUZG RVIgKHctPmJ1ZmZlcikpKTsKLQkgICAgICAgdy0+c3RhcnRfYXRfbGluZV9iZWcgPSAxOwot CSAgICAgfQotCSAgZWxzZQotCSAgICAvKiBXaW5kb3cgaGFzIG5vIGxpdmUgYnVmZmVyLCBn ZXQgb25lLiAgKi8KKwkgIGVsc2UgaWYgKEJVRkZFUlAgKHctPm9iamVjdCkgJiYgQlVGRkVS X0xJVkVfUCAoWEJVRkZFUiAody0+b2JqZWN0KSkpCisJICAgIC8qIEtlZXAgd2luZG93J3Mg b2xkIGJ1ZmZlcjsgbWFrZSBzdXJlIHRoZSBtYXJrZXJzIGFyZSByZWFsLiAgKi8KKwkgICAg eworCSAgICAgIC8qIFNldCB3aW5kb3cgbWFya2VycyBhdCBzdGFydCBvZiB2aXNpYmxlIHJh bmdlLiAgKi8KKwkgICAgICBpZiAoWE1BUktFUiAody0+c3RhcnQpLT5idWZmZXIgPT0gMCkK KwkJc2V0X21hcmtlcl9yZXN0cmljdGVkX2JvdGggKHctPnN0YXJ0LCB3LT5vYmplY3QsIDAs IDApOworCSAgICAgIGlmIChYTUFSS0VSICh3LT5wb2ludG0pLT5idWZmZXIgPT0gMCkKKwkJ c2V0X21hcmtlcl9yZXN0cmljdGVkX2JvdGgKKwkJICAody0+cG9pbnRtLCB3LT5vYmplY3Qs CisJCSAgIEJVRl9QVCAoWEJVRkZFUiAody0+b2JqZWN0KSksCisJCSAgIEJVRl9QVF9CWVRF IChYQlVGRkVSICh3LT5vYmplY3QpKSk7CisJICAgICAgdy0+c3RhcnRfYXRfbGluZV9iZWcg PSAxOworCSAgICB9CisJICBlbHNlIGlmICh3LT50eXBlID09IFdJTkRPV19MRUFGKQorCSAg ICAvKiBMZWFmIHdpbmRvdyBoYXMgbm8gbGl2ZSBidWZmZXIsIGdldCBvbmUuICAqLwogCSAg ICB7CiAJICAgICAgLyogR2V0IHRoZSBidWZmZXIgdmlhIG90aGVyX2J1ZmZlcl9zYWZlbHkg aW4gb3JkZXIgdG8KIAkgICAgICBhdm9pZCBzaG93aW5nIGFuIHVuaW1wb3J0YW50IGJ1ZmZl ciBhbmQsIGlmIG5lY2Vzc2FyeSwgdG8KQEAgLTU4MDAsOCArNTc0MCw4IEBACiAJICAgICAg d3NldF9idWZmZXIgKHcsIG90aGVyX2J1ZmZlcl9zYWZlbHkgKEZjdXJyZW50X2J1ZmZlciAo KSkpOwogCSAgICAgIC8qIFRoaXMgd2lsbCBzZXQgdGhlIG1hcmtlcnMgdG8gYmVnaW5uaW5n IG9mIHZpc2libGUKIAkJIHJhbmdlLiAgKi8KLQkgICAgICBzZXRfbWFya2VyX3Jlc3RyaWN0 ZWRfYm90aCAody0+c3RhcnQsIHctPmJ1ZmZlciwgMCwgMCk7Ci0JICAgICAgc2V0X21hcmtl cl9yZXN0cmljdGVkX2JvdGggKHctPnBvaW50bSwgdy0+YnVmZmVyLCAwLCAwKTsKKwkgICAg ICBzZXRfbWFya2VyX3Jlc3RyaWN0ZWRfYm90aCAody0+c3RhcnQsIHctPm9iamVjdCwgMCwg MCk7CisJICAgICAgc2V0X21hcmtlcl9yZXN0cmljdGVkX2JvdGggKHctPnBvaW50bSwgdy0+ b2JqZWN0LCAwLCAwKTsKIAkgICAgICB3LT5zdGFydF9hdF9saW5lX2JlZyA9IDE7CiAJICAg ICAgaWYgKCFOSUxQICh3LT5kZWRpY2F0ZWQpKQogCQkvKiBSZWNvcmQgdGhpcyB3aW5kb3cg YXMgZGVhZC4gICovCkBAIC01ODE0LDE3ICs1NzU0LDE3IEBACiAgICAgICBmc2V0X3Jvb3Rf d2luZG93IChmLCBkYXRhLT5yb290X3dpbmRvdyk7CiAgICAgICAvKiBBcnJhbmdlICpub3Qq IHRvIHJlc3RvcmUgcG9pbnQgaW4gdGhlIGJ1ZmZlciB0aGF0IHdhcwogCSBjdXJyZW50IHdo ZW4gdGhlIHdpbmRvdyBjb25maWd1cmF0aW9uIHdhcyBzYXZlZC4gICovCi0gICAgICBpZiAo RVEgKFhXSU5ET1cgKGRhdGEtPmN1cnJlbnRfd2luZG93KS0+YnVmZmVyLCBuZXdfY3VycmVu dF9idWZmZXIpKQorICAgICAgaWYgKEVRIChYV0lORE9XIChkYXRhLT5jdXJyZW50X3dpbmRv dyktPm9iamVjdCwgbmV3X2N1cnJlbnRfYnVmZmVyKSkKIAlzZXRfbWFya2VyX3Jlc3RyaWN0 ZWQgKFhXSU5ET1cgKGRhdGEtPmN1cnJlbnRfd2luZG93KS0+cG9pbnRtLAogCQkJICAgICAg IG1ha2VfbnVtYmVyIChvbGRfcG9pbnQpLAotCQkJICAgICAgIFhXSU5ET1cgKGRhdGEtPmN1 cnJlbnRfd2luZG93KS0+YnVmZmVyKTsKKwkJCSAgICAgICBYV0lORE9XIChkYXRhLT5jdXJy ZW50X3dpbmRvdyktPm9iamVjdCk7CiAKICAgICAgIC8qIEluIHRoZSBmb2xsb3dpbmcgY2Fs bCB0byBgc2VsZWN0LXdpbmRvdycsIHByZXZlbnQgInN3YXBwaW5nIG91dAogCSBwb2ludCIg aW4gdGhlIG9sZCBzZWxlY3RlZCB3aW5kb3cgdXNpbmcgdGhlIGJ1ZmZlciB0aGF0IGhhcwog CSBiZWVuIHJlc3RvcmVkIGludG8gaXQuICBXZSBhbHJlYWR5IHN3YXBwZWQgb3V0IHRoYXQg cG9pbnQgZnJvbQogCSB0aGF0IHdpbmRvdydzIG9sZCBidWZmZXIuICAqLwogICAgICAgc2Vs ZWN0X3dpbmRvdyAoZGF0YS0+Y3VycmVudF93aW5kb3csIFFuaWwsIDEpOwotICAgICAgQlZB UiAoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVmZmVyKSwgbGFzdF9z ZWxlY3RlZF93aW5kb3cpCisgICAgICBCVkFSIChYQlVGRkVSIChYV0lORE9XIChzZWxlY3Rl ZF93aW5kb3cpLT5vYmplY3QpLCBsYXN0X3NlbGVjdGVkX3dpbmRvdykKIAk9IHNlbGVjdGVk X3dpbmRvdzsKIAogICAgICAgaWYgKE5JTFAgKGRhdGEtPmZvY3VzX2ZyYW1lKQpAQCAtNTg1 MSwxNCArNTc5MSwxMyBAQAogICAgICAgLyogTm93LCBmcmVlIGdseXBoIG1hdHJpY2VzIGlu IHdpbmRvd3MgdGhhdCB3ZXJlIG5vdCByZXVzZWQuICAqLwogICAgICAgZm9yIChpID0gbiA9 IDA7IGkgPCBuX2xlYWZfd2luZG93czsgKytpKQogCXsKLQkgIGlmIChOSUxQIChsZWFmX3dp bmRvd3NbaV0tPmJ1ZmZlcikpCisJICBpZiAoTklMUCAobGVhZl93aW5kb3dzW2ldLT5vYmpl Y3QpKQogCSAgICB7CiAJICAgICAgLyogQXNzZXJ0IGl0J3Mgbm90IHJldXNlZCBhcyBhIGNv bWJpbmF0aW9uLiAgKi8KLQkgICAgICBlYXNzZXJ0IChOSUxQIChsZWFmX3dpbmRvd3NbaV0t PmhjaGlsZCkKLQkJICAgICAgICYmIE5JTFAgKGxlYWZfd2luZG93c1tpXS0+dmNoaWxkKSk7 CisJICAgICAgZWFzc2VydCAobGVhZl93aW5kb3dzW2ldLT50eXBlID09IFdJTkRPV19MRUFG KTsKIAkgICAgICBmcmVlX3dpbmRvd19tYXRyaWNlcyAobGVhZl93aW5kb3dzW2ldKTsKIAkg ICAgfQotCSAgZWxzZSBpZiAoRVEgKGxlYWZfd2luZG93c1tpXS0+YnVmZmVyLCBuZXdfY3Vy cmVudF9idWZmZXIpKQorCSAgZWxzZSBpZiAoRVEgKGxlYWZfd2luZG93c1tpXS0+b2JqZWN0 LCBuZXdfY3VycmVudF9idWZmZXIpKQogCSAgICArK247CiAJfQogCkBAIC01ODg5LDcgKzU4 MjgsNyBAQAogICAgICAgRnNldF9idWZmZXIgKG5ld19jdXJyZW50X2J1ZmZlcik7CiAgICAg ICAvKiBJZiB0aGUgbmV3IGN1cnJlbnQgYnVmZmVyIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSBz ZWxlY3RlZAogCSB3aW5kb3csIGdvIHRvIGl0cyBvbGQgcG9pbnQgKHNlZSBidWcjMTIyMDgp LiAgKi8KLSAgICAgIGlmICghRVEgKFhXSU5ET1cgKGRhdGEtPmN1cnJlbnRfd2luZG93KS0+ YnVmZmVyLCBuZXdfY3VycmVudF9idWZmZXIpKQorICAgICAgaWYgKCFFUSAoWFdJTkRPVyAo ZGF0YS0+Y3VycmVudF93aW5kb3cpLT5vYmplY3QsIG5ld19jdXJyZW50X2J1ZmZlcikpCiAJ RmdvdG9fY2hhciAobWFrZV9udW1iZXIgKG9sZF9wb2ludCkpOwogICAgIH0KIApAQCAtNTkx MywxNyArNTg1MiwxMiBAQAogICAgIC8qIERlbGV0ZSBXSU5ET1cncyBzaWJsaW5ncyAod2Ug dHJhdmVyc2UgcG9zdG9yZGVybHkpLiAgKi8KICAgICBkZWxldGVfYWxsX2NoaWxkX3dpbmRv d3MgKHctPm5leHQpOwogCi0gIGlmICghTklMUCAody0+dmNoaWxkKSkKLSAgICB7Ci0gICAg ICBkZWxldGVfYWxsX2NoaWxkX3dpbmRvd3MgKHctPnZjaGlsZCk7Ci0gICAgICB3c2V0X3Zj aGlsZCAodywgUW5pbCk7Ci0gICAgfQotICBlbHNlIGlmICghTklMUCAody0+aGNoaWxkKSkK LSAgICB7Ci0gICAgICBkZWxldGVfYWxsX2NoaWxkX3dpbmRvd3MgKHctPmhjaGlsZCk7Ci0g ICAgICB3c2V0X2hjaGlsZCAodywgUW5pbCk7Ci0gICAgfQotICBlbHNlIGlmICghTklMUCAo dy0+YnVmZmVyKSkKKyAgaWYgKFdJTkRPV1AgKHctPm9iamVjdCkpCisgICAgeworICAgICAg ZGVsZXRlX2FsbF9jaGlsZF93aW5kb3dzICh3LT5vYmplY3QpOworICAgICAgdy0+b2JqZWN0 ID0gUW5pbDsKKyAgICB9CisgIGVsc2UgaWYgKEJVRkZFUlAgKHctPm9iamVjdCkpCiAgICAg ewogICAgICAgdW5zaG93X2J1ZmZlciAodyk7CiAgICAgICB1bmNoYWluX21hcmtlciAoWE1B UktFUiAody0+cG9pbnRtKSk7CkBAIC01OTMxLDcgKzU4NjUsNyBAQAogICAgICAgLyogU2lu Y2UgY29tYmluYXRpb24gbGltaXQgbWFrZXMgc2Vuc2UgZm9yIGFuIGludGVybmFsIHdpbmRv d3MKIAkgb25seSwgd2UgdXNlIHRoaXMgc2xvdCB0byBzYXZlIHRoZSBidWZmZXIgZm9yIHRo ZSBzYWtlIG9mCiAJIHBvc3NpYmxlIHJlc3VycmVjdGlvbiBpbiBGc2V0X3dpbmRvd19jb25m aWd1cmF0aW9uLiAgKi8KLSAgICAgIHdzZXRfY29tYmluYXRpb25fbGltaXQgKHcsIHctPmJ1 ZmZlcik7CisgICAgICB3c2V0X2NvbWJpbmF0aW9uX2xpbWl0ICh3LCB3LT5vYmplY3QpOwog ICAgICAgd3NldF9idWZmZXIgKHcsIFFuaWwpOwogICAgIH0KIApAQCAtNTk0NCwxMCArNTg3 OCw4IEBACiAgIHJlZ2lzdGVyIGludCBjb3VudCA9IDE7CiAgIGlmICghTklMUCAod2luZG93 LT5uZXh0KSkKICAgICBjb3VudCArPSBjb3VudF93aW5kb3dzIChYV0lORE9XICh3aW5kb3ct Pm5leHQpKTsKLSAgaWYgKCFOSUxQICh3aW5kb3ctPnZjaGlsZCkpCi0gICAgY291bnQgKz0g Y291bnRfd2luZG93cyAoWFdJTkRPVyAod2luZG93LT52Y2hpbGQpKTsKLSAgaWYgKCFOSUxQ ICh3aW5kb3ctPmhjaGlsZCkpCi0gICAgY291bnQgKz0gY291bnRfd2luZG93cyAoWFdJTkRP VyAod2luZG93LT5oY2hpbGQpKTsKKyAgaWYgKFdJTkRPV1AgKHdpbmRvdy0+b2JqZWN0KSkK KyAgICBjb3VudCArPSBjb3VudF93aW5kb3dzIChYV0lORE9XICh3aW5kb3ctPm9iamVjdCkp OwogICByZXR1cm4gY291bnQ7CiB9CiAKQEAgLTU5NTksMTAgKzU4OTEsOCBAQAogewogICB3 aGlsZSAodykKICAgICB7Ci0gICAgICBpZiAoIU5JTFAgKHctPmhjaGlsZCkpCi0JaSA9IGdl dF9sZWFmX3dpbmRvd3MgKFhXSU5ET1cgKHctPmhjaGlsZCksIGZsYXQsIGkpOwotICAgICAg ZWxzZSBpZiAoIU5JTFAgKHctPnZjaGlsZCkpCi0JaSA9IGdldF9sZWFmX3dpbmRvd3MgKFhX SU5ET1cgKHctPnZjaGlsZCksIGZsYXQsIGkpOworICAgICAgaWYgKFdJTkRPV1AgKHctPm9i amVjdCkpCisJaSA9IGdldF9sZWFmX3dpbmRvd3MgKFhXSU5ET1cgKHctPm9iamVjdCksIGZs YXQsIGkpOwogICAgICAgZWxzZQogCWZsYXRbaSsrXSA9IHc7CiAKQEAgLTYwMjYsNyArNTk1 Niw3IEBACiAKICAgICAgIHdzZXRfdGVtc2xvdCAodywgbWFrZV9udW1iZXIgKGkpKTsgaSsr OwogICAgICAgcC0+d2luZG93ID0gd2luZG93OwotICAgICAgcC0+YnVmZmVyID0gdy0+YnVm ZmVyOworICAgICAgcC0+YnVmZmVyID0gKHctPnR5cGUgPT0gV0lORE9XX0xFQUYgPyB3LT5v YmplY3QgOiBRbmlsKTsKICAgICAgIHAtPmxlZnRfY29sID0gbWFrZV9udW1iZXIgKHctPmxl ZnRfY29sKTsKICAgICAgIHAtPnRvcF9saW5lID0gbWFrZV9udW1iZXIgKHctPnRvcF9saW5l KTsKICAgICAgIHAtPnRvdGFsX2NvbHMgPSBtYWtlX251bWJlciAody0+dG90YWxfY29scyk7 CkBAIC02MDkzLDE1ICs2MDIzLDE1IEBACiAJICAgIH0KIAl9CiAKLSAgICAgIGlmICghTklM UCAody0+YnVmZmVyKSkKKyAgICAgIGlmIChCVUZGRVJQICh3LT5vYmplY3QpKQogCXsKIAkg IC8qIFNhdmUgdydzIHZhbHVlIG9mIHBvaW50IGluIHRoZSB3aW5kb3cgY29uZmlndXJhdGlv bi4gIElmIHcKIAkgICAgIGlzIHRoZSBzZWxlY3RlZCB3aW5kb3csIHRoZW4gZ2V0IHRoZSB2 YWx1ZSBvZiBwb2ludCBmcm9tCiAJICAgICB0aGUgYnVmZmVyOyBwb2ludG0gaXMgZ2FyYmFn ZSBpbiB0aGUgc2VsZWN0ZWQgd2luZG93LiAgKi8KIAkgIGlmIChFUSAod2luZG93LCBzZWxl Y3RlZF93aW5kb3cpKQotCSAgICBwLT5wb2ludG0gPSBidWlsZF9tYXJrZXIgKFhCVUZGRVIg KHctPmJ1ZmZlciksCi0JCQkJICAgICAgQlVGX1BUIChYQlVGRkVSICh3LT5idWZmZXIpKSwK LQkJCQkgICAgICBCVUZfUFRfQllURSAoWEJVRkZFUiAody0+YnVmZmVyKSkpOworCSAgICBw LT5wb2ludG0gPSBidWlsZF9tYXJrZXIgKFhCVUZGRVIgKHctPm9iamVjdCksCisJCQkJICAg ICAgQlVGX1BUIChYQlVGRkVSICh3LT5vYmplY3QpKSwKKwkJCQkgICAgICBCVUZfUFRfQllU RSAoWEJVRkZFUiAody0+b2JqZWN0KSkpOwogCSAgZWxzZQogCSAgICBwLT5wb2ludG0gPSBG Y29weV9tYXJrZXIgKHctPnBvaW50bSwgUW5pbCk7CiAJICBYTUFSS0VSIChwLT5wb2ludG0p LT5pbnNlcnRpb25fdHlwZQpAQCAtNjExMCw3ICs2MDQwLDcgQEAKIAkgIHAtPnN0YXJ0ID0g RmNvcHlfbWFya2VyICh3LT5zdGFydCwgUW5pbCk7CiAJICBwLT5zdGFydF9hdF9saW5lX2Jl ZyA9IHctPnN0YXJ0X2F0X2xpbmVfYmVnID8gUXQgOiBRbmlsOwogCi0JICB0ZW0gPSBCVkFS IChYQlVGRkVSICh3LT5idWZmZXIpLCBtYXJrKTsKKwkgIHRlbSA9IEJWQVIgKFhCVUZGRVIg KHctPm9iamVjdCksIG1hcmspOwogCSAgcC0+bWFyayA9IEZjb3B5X21hcmtlciAodGVtLCBR bmlsKTsKIAl9CiAgICAgICBlbHNlCkBAIC02MTMxLDEwICs2MDYxLDggQEAKICAgICAgIGVs c2UKIAlwLT5wcmV2ID0gWFdJTkRPVyAody0+cHJldiktPnRlbXNsb3Q7CiAKLSAgICAgIGlm ICghTklMUCAody0+dmNoaWxkKSkKLQlpID0gc2F2ZV93aW5kb3dfc2F2ZSAody0+dmNoaWxk LCB2ZWN0b3IsIGkpOwotICAgICAgaWYgKCFOSUxQICh3LT5oY2hpbGQpKQotCWkgPSBzYXZl X3dpbmRvd19zYXZlICh3LT5oY2hpbGQsIHZlY3RvciwgaSk7CisgICAgICBpZiAoV0lORE9X UCAody0+b2JqZWN0KSkKKwlpID0gc2F2ZV93aW5kb3dfc2F2ZSAody0+b2JqZWN0LCB2ZWN0 b3IsIGkpOwogICAgIH0KIAogICByZXR1cm4gaTsKQEAgLTY0NTEsNyArNjM3OSw3IEBACiAJ ICAgIGFkanVzdF9nbHlwaHMgKGYpOwogCiAJICAvKiBQcmV2ZW50IHJlZGlzcGxheSBzaG9y dGN1dHMuICAqLwotCSAgWEJVRkZFUiAody0+YnVmZmVyKS0+cHJldmVudF9yZWRpc3BsYXlf b3B0aW1pemF0aW9uc19wID0gMTsKKwkgIFhCVUZGRVIgKHctPm9iamVjdCktPnByZXZlbnRf cmVkaXNwbGF5X29wdGltaXphdGlvbnNfcCA9IDE7CiAJfQogICAgIH0KIApAQCAtNjQ4NSwx MCArNjQxMyw4IEBACiAKICAgZm9yIChjb250ID0gMTsgdyAmJiBjb250OykKICAgICB7Ci0g ICAgICBpZiAoIU5JTFAgKHctPmhjaGlsZCkpCi0gCWNvbnQgPSBmb3JlYWNoX3dpbmRvd18x IChYV0lORE9XICh3LT5oY2hpbGQpLCBmbiwgdXNlcl9kYXRhKTsKLSAgICAgIGVsc2UgaWYg KCFOSUxQICh3LT52Y2hpbGQpKQotIAljb250ID0gZm9yZWFjaF93aW5kb3dfMSAoWFdJTkRP VyAody0+dmNoaWxkKSwgZm4sIHVzZXJfZGF0YSk7CisgICAgICBpZiAoV0lORE9XUCAody0+ b2JqZWN0KSkKKyAJY29udCA9IGZvcmVhY2hfd2luZG93XzEgKFhXSU5ET1cgKHctPm9iamVj dCksIGZuLCB1c2VyX2RhdGEpOwogICAgICAgZWxzZQogCWNvbnQgPSBmbiAodywgdXNlcl9k YXRhKTsKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93aW5kb3cuaCcKLS0tIHNyYy93aW5k b3cuaAkyMDEzLTAzLTIwIDExOjI5OjM3ICswMDAwCisrKyBzcmMvd2luZG93LmgJMjAxMy0w My0yMSAwODozNjoxOSArMDAwMApAQCAtNDEsMTQgKzQxLDEzIEBACiB0aGlzIGNhbiBiZSBk b25lIGltcGxpY2l0bHkpLiAgQ29tYmluYXRpb24gd2luZG93cyBjYW4gYmUgY3JlYXRlZAog YW5kIGRlbGV0ZWQgYXQgYW55IHRpbWUuCiAKLUEgbGVhZiB3aW5kb3cgaGFzIGEgbm9uLW5p bCBidWZmZXIgZmllbGQsIGFuZCBhbHNvCi0gaGFzIG1hcmtlcnMgaW4gaXRzIHN0YXJ0IGFu ZCBwb2ludG0gZmllbGRzLiAgTm9uLWxlYWYgd2luZG93cwotIGhhdmUgbmlsIGluIHRoZXNl IGZpZWxkcy4KK0EgbGVhZiB3aW5kb3cgaGFzIGEgYnVmZmVyIHN0b3JlZCBpbiBvYmplY3Qg ZmllbGQgYW5kIG1hcmtlcnMgaW4gaXRzIHN0YXJ0CithbmQgcG9pbnRtIGZpZWxkcy4gIE5v bi1sZWFmIHdpbmRvd3MgaGF2ZSBuaWwgaW4gdGhlIGxhdHRlciB0d28gZmllbGRzLgogCiBO b24tbGVhZiB3aW5kb3dzIGFyZSBlaXRoZXIgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBjb21i aW5hdGlvbnMuCiAKIEEgdmVydGljYWwgY29tYmluYXRpb24gd2luZG93IGhhcyBjaGlsZHJl biB0aGF0IGFyZSBhcnJhbmdlZCBvbiB0aGUgZnJhbWUKLW9uZSBhYm92ZSB0aGUgbmV4dC4g IEl0cyB2Y2hpbGQgZmllbGQgcG9pbnRzIHRvIHRoZSB1cHBlcm1vc3QgY2hpbGQuCitvbmUg YWJvdmUgdGhlIG5leHQuICBJdHMgb2JqZWN0IGZpZWxkIHBvaW50cyB0byB0aGUgdXBwZXJt b3N0IGNoaWxkLgogVGhlIHBhcmVudCBmaWVsZCBvZiBlYWNoIG9mIHRoZSBjaGlsZHJlbiBw b2ludHMgdG8gdGhlIHZlcnRpY2FsCiBjb21iaW5hdGlvbiB3aW5kb3cuICBUaGUgbmV4dCBm aWVsZCBvZiBlYWNoIGNoaWxkIHBvaW50cyB0byB0aGUKIGNoaWxkIGJlbG93IGl0LCBvciBp cyBuaWwgZm9yIHRoZSBsb3dlc3QgY2hpbGQuICBUaGUgcHJldiBmaWVsZApAQCAtNTYsNyAr NTUsNyBAQAogaGlnaGVzdCBjaGlsZC4KIAogQSBob3Jpem9udGFsIGNvbWJpbmF0aW9uIHdp bmRvdyBoYXMgY2hpbGRyZW4gdGhhdCBhcmUgc2lkZSBieSBzaWRlLgotSXRzIGhjaGlsZCBm aWVsZCBwb2ludHMgdG8gdGhlIGxlZnRtb3N0IGNoaWxkLiAgSW4gZWFjaCBjaGlsZAorSXRz IG9iamVjdCBmaWVsZCBwb2ludHMgdG8gdGhlIGxlZnRtb3N0IGNoaWxkLiAgSW4gZWFjaCBj aGlsZAogdGhlIG5leHQgZmllbGQgcG9pbnRzIHRvIHRoZSBjaGlsZCB0byB0aGUgcmlnaHQg YW5kIHRoZSBwcmV2IGZpZWxkCiBwb2ludHMgdG8gdGhlIGNoaWxkIHRvIHRoZSBsZWZ0Lgog CkBAIC03OCw3ICs3Nyw3IEBACiBtaW5pYnVmZmVyLW9ubHkgc2NyZWVucywgdGhlIHJvb3Qg d2luZG93IGFuZCB0aGUgbWluaWJ1ZmZlciB3aW5kb3cgYXJlCiBvbmUgYW5kIHRoZSBzYW1l LCBzbyBpdHMgcHJldiBhbmQgbmV4dCBtZW1iZXJzIGFyZSBuaWwuCiAKLUEgZGVhZCB3aW5k b3cgaGFzIGl0cyBidWZmZXIsIGhjaGlsZCwgYW5kIHZjaGlsZCB3aW5kb3dzIGFsbCBuaWwu ICAqLworQSBkZWFkIHdpbmRvdyBoYXMgaXRzIG9iamVjdCBmaWVsZCBzZXQgdG8gbmlsLiAg Ki8KIAogc3RydWN0IGN1cnNvcl9wb3MKIHsKQEAgLTg5LDYgKzg4LDE1IEBACiAgIGludCBo cG9zLCB2cG9zOwogfTsKIAorLyogV2luZG93IHR5cGVzLCBzZWUgdGhlIGNvbW1lbnQgYWJv dmUuICAqLworCitlbnVtIHdpbmRvd190eXBlCisgIHsKKyAgICBXSU5ET1dfTEVBRiwKKyAg ICBXSU5ET1dfSE9SSVpPTlRBTF9DT01CSU5BVElPTiwKKyAgICBXSU5ET1dfVkVSVElDQUxf Q09NQklOQVRJT04sCisgIH07CisKIHN0cnVjdCB3aW5kb3cKICAgewogICAgIC8qIFRoaXMg aXMgZm9yIExpc3A7IHRoZSB0ZXJtaW5hbCBjb2RlIGRvZXMgbm90IHJlZmVyIHRvIGl0LiAg Ki8KQEAgLTEwMiwxMyArMTEwLDYgQEAKICAgICBMaXNwX09iamVjdCBuZXh0OwogICAgIExp c3BfT2JqZWN0IHByZXY7CiAKLSAgICAvKiBGaXJzdCBjaGlsZCBvZiB0aGlzIHdpbmRvdzog dmNoaWxkIGlzIHVzZWQgaWYgdGhpcyBpcyBhIHZlcnRpY2FsCi0gICAgICAgY29tYmluYXRp b24sIGhjaGlsZCBpZiB0aGlzIGlzIGEgaG9yaXpvbnRhbCBjb21iaW5hdGlvbi4gIE9mIHRo ZQotICAgICAgIGZpZWxkcyB2Y2hpbGQsIGhjaGlsZCBhbmQgYnVmZmVyLCBvbmUgYW5kIG9u bHkgb25lIGlzIG5vbi1uaWwKLSAgICAgICB1bmxlc3MgdGhlIHdpbmRvdyBpcyBkZWFkLiAg Ki8KLSAgICBMaXNwX09iamVjdCBoY2hpbGQ7Ci0gICAgTGlzcF9PYmplY3QgdmNoaWxkOwot CiAgICAgLyogVGhlIHdpbmRvdyB0aGlzIG9uZSBpcyBhIGNoaWxkIG9mLiAgKi8KICAgICBM aXNwX09iamVjdCBwYXJlbnQ7CiAKQEAgLTEyMywxMCArMTI0LDggQEAKICAgICBMaXNwX09i amVjdCBuZXdfdG90YWw7CiAgICAgTGlzcF9PYmplY3QgbmV3X25vcm1hbDsKIAotICAgIC8q IFRoZSBidWZmZXIgZGlzcGxheWVkIGluIHRoaXMgd2luZG93LiAgT2YgdGhlIGZpZWxkcyB2 Y2hpbGQsCi0gICAgICAgaGNoaWxkIGFuZCBidWZmZXIsIG9uZSBhbmQgb25seSBvbmUgaXMg bm9uLW5pbCB1bmxlc3MgdGhlIHdpbmRvdwotICAgICAgIGlzIGRlYWQuICAqLwotICAgIExp c3BfT2JqZWN0IGJ1ZmZlcjsKKyAgICAvKiBNYXkgYmUgYnVmZmVyIG9yIHdpbmRvdywgc2Vl IGNvbW1lbnQgYWJvdmUuICAqLworICAgIExpc3BfT2JqZWN0IG9iamVjdDsKIAogICAgIC8q IEEgbWFya2VyIHBvaW50aW5nIHRvIHdoZXJlIGluIHRoZSB0ZXh0IHRvIHN0YXJ0IGRpc3Bs YXlpbmcuCiAgICAgICAgQklESSBOb3RlOiBUaGlzIGlzIHRoZSBfbG9naWNhbC1vcmRlcl8g c3RhcnQsIGkuZS4gdGhlIHNtYWxsZXN0CkBAIC0yODIsNiArMjgxLDkgQEAKICAgICAvKiBO b24temVybyBpZiB0aGlzIHdpbmRvdyBpcyBhIG1pbmlidWZmZXIgd2luZG93LiAgKi8KICAg ICB1bnNpZ25lZCBtaW5pIDogMTsKIAorICAgIC8qIFdpbmRvdyB0eXBlLCBzZWUgYWJvdmUu ICAqLworICAgIEVOVU1fQkYgKHdpbmRvd190eXBlKSB0eXBlIDogMjsKKwogICAgIC8qIE5v bi16ZXJvIG1lYW5zIG11c3QgcmVnZW5lcmF0ZSBtb2RlIGxpbmUgb2YgdGhpcyB3aW5kb3cu ICAqLwogICAgIHVuc2lnbmVkIHVwZGF0ZV9tb2RlX2xpbmUgOiAxOwogCkBAIC05MjYsMjAg KzkyOCwxNyBAQAogc3RydWN0IGdseXBoICpnZXRfcGh5c19jdXJzb3JfZ2x5cGggKHN0cnVj dCB3aW5kb3cgKncpOwogCiAvKiBWYWx1ZSBpcyBub24temVybyBpZiBXSU5ET1cgaXMgYSB2 YWxpZCB3aW5kb3cuICAqLwotI2RlZmluZSBXSU5ET1dfVkFMSURfUChXSU5ET1cpCQkJCVwK LSAgKFdJTkRPV1AgKFdJTkRPVykJCQkJCVwKLSAgICYmICghTklMUCAoWFdJTkRPVyAoV0lO RE9XKS0+YnVmZmVyKQkJCVwKLSAgICAgICB8fCAhTklMUCAoWFdJTkRPVyAoV0lORE9XKS0+ dmNoaWxkKQkJXAotICAgICAgIHx8ICFOSUxQIChYV0lORE9XIChXSU5ET1cpLT5oY2hpbGQp KSkKKyNkZWZpbmUgV0lORE9XX1ZBTElEX1AoV0lORE9XKQkJCQkJXAorICAoV0lORE9XUCAo V0lORE9XKSAmJiAhTklMUCAoWFdJTkRPVyAoV0lORE9XKS0+b2JqZWN0KSkJXAogCi0vKiBB IHdpbmRvdyBvZiBhbnkgc29ydCwgbGVhZiBvciBpbnRlcmlvciwgaXMgInZhbGlkIiBpZiBv bmUKLSAgIG9mIGl0cyBidWZmZXIsIHZjaGlsZCwgb3IgaGNoaWxkIG1lbWJlcnMgaXMgbm9u LW5pbC4gICovCisvKiBBIHdpbmRvdyBvZiBhbnkgc29ydCwgbGVhZiBvciBpbnRlcmlvciwg aXMgInZhbGlkIiBpZiBpdHMgb2JqZWN0CisgICBzbG90IGlzIG5vbi1uaWwuICAqLwogI2Rl ZmluZSBDSEVDS19WQUxJRF9XSU5ET1coV0lORE9XKQkJCQlcCiAgIENIRUNLX1RZUEUgKFdJ TkRPV19WQUxJRF9QIChXSU5ET1cpLCBRd2luZG93X3ZhbGlkX3AsIFdJTkRPVykKIAogLyog VmFsdWUgaXMgbm9uLXplcm8gaWYgV0lORE9XIGlzIGEgbGl2ZSB3aW5kb3cuICAqLwogI2Rl ZmluZSBXSU5ET1dfTElWRV9QKFdJTkRPVykJCQkJCVwKLSAgKFdJTkRPV1AgKFdJTkRPVykg JiYgIU5JTFAgKFhXSU5ET1cgKFdJTkRPVyktPmJ1ZmZlcikpCisgIChXSU5ET1dQIChXSU5E T1cpICYmIEJVRkZFUlAgKFhXSU5ET1cgKFdJTkRPVyktPm9iamVjdCkpCiAKIC8qIEEgd2lu ZG93IGlzICJsaXZlIiBpZiBhbmQgb25seSBpZiBpdCBzaG93cyBhIGJ1ZmZlci4gICovCiAj ZGVmaW5lIENIRUNLX0xJVkVfV0lORE9XKFdJTkRPVykJCQkJXAoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy94ZGlzcC5jJwotLS0gc3JjL3hkaXNwLmMJMjAxMy0wMy0yMCAxMToyOTozNyAr MDAwMAorKysgc3JjL3hkaXNwLmMJMjAxMy0wMy0yMSAwNToxNTo1MSArMDAwMApAQCAtMTI4 MywxMCArMTI4MywxMCBAQAogICBpZiAoRlJBTUVfSU5JVElBTF9QIChYRlJBTUUgKFdJTkRP V19GUkFNRSAodykpKSkKICAgICByZXR1cm4gdmlzaWJsZV9wOwogCi0gIGlmIChYQlVGRkVS ICh3LT5idWZmZXIpICE9IGN1cnJlbnRfYnVmZmVyKQorICBpZiAoWEJVRkZFUiAody0+b2Jq ZWN0KSAhPSBjdXJyZW50X2J1ZmZlcikKICAgICB7CiAgICAgICBvbGRfYnVmZmVyID0gY3Vy cmVudF9idWZmZXI7Ci0gICAgICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKFhCVUZGRVIgKHct PmJ1ZmZlcikpOworICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSICh3LT5v YmplY3QpKTsKICAgICB9CiAKICAgU0VUX1RFWFRfUE9TX0ZST01fTUFSS0VSICh0b3AsIHct PnN0YXJ0KTsKQEAgLTQ0NTgsNyArNDQ1OCw3IEBACiAgICAgIGlmIGl0IHdhcyBhIHRleHQg cHJvcGVydHkuICAqLwogCiAgIGlmICghU1RSSU5HUCAoaXQtPnN0cmluZykpCi0gICAgb2Jq ZWN0ID0gaXQtPnctPmJ1ZmZlcjsKKyAgICBvYmplY3QgPSBpdC0+dy0+b2JqZWN0OwogCiAg IGRpc3BsYXlfcmVwbGFjZWRfcCA9IGhhbmRsZV9kaXNwbGF5X3NwZWMgKGl0LCBwcm9wdmFs LCBvYmplY3QsIG92ZXJsYXksCiAJCQkJCSAgICBwb3NpdGlvbiwgYnVmcG9zLApAQCAtNDg2 Niw3ICs0ODY2LDcgQEAKIAkgIGl0LT53aGF0ID0gSVRfSU1BR0U7CiAJICBpdC0+aW1hZ2Vf aWQgPSAtMTsgLyogbm8gaW1hZ2UgKi8KIAkgIGl0LT5wb3NpdGlvbiA9IHN0YXJ0X3BvczsK LQkgIGl0LT5vYmplY3QgPSBOSUxQIChvYmplY3QpID8gaXQtPnctPmJ1ZmZlciA6IG9iamVj dDsKKwkgIGl0LT5vYmplY3QgPSBOSUxQIChvYmplY3QpID8gaXQtPnctPm9iamVjdCA6IG9i amVjdDsKIAkgIGl0LT5tZXRob2QgPSBHRVRfRlJPTV9JTUFHRTsKIAkgIGl0LT5mcm9tX292 ZXJsYXkgPSBRbmlsOwogCSAgaXQtPmZhY2VfaWQgPSBmYWNlX2lkOwpAQCAtNTAxMiw3ICs1 MDEyLDcgQEAKIAkgIGl0LT53aGF0ID0gSVRfSU1BR0U7CiAJICBpdC0+aW1hZ2VfaWQgPSBs b29rdXBfaW1hZ2UgKGl0LT5mLCB2YWx1ZSk7CiAJICBpdC0+cG9zaXRpb24gPSBzdGFydF9w b3M7Ci0JICBpdC0+b2JqZWN0ID0gTklMUCAob2JqZWN0KSA/IGl0LT53LT5idWZmZXIgOiBv YmplY3Q7CisJICBpdC0+b2JqZWN0ID0gTklMUCAob2JqZWN0KSA/IGl0LT53LT5vYmplY3Qg OiBvYmplY3Q7CiAJICBpdC0+bWV0aG9kID0gR0VUX0ZST01fSU1BR0U7CiAKIAkgIC8qIFNh eSB0aGF0IHdlIGhhdmVuJ3QgY29uc3VtZWQgdGhlIGNoYXJhY3RlcnMgd2l0aApAQCAtNTgz Niw3ICs1ODM2LDcgQEAKICAgICAgIGl0LT5vYmplY3QgPSBwLT51LnN0cmV0Y2gub2JqZWN0 OwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBHRVRfRlJPTV9CVUZGRVI6Ci0gICAgICBpdC0+ b2JqZWN0ID0gaXQtPnctPmJ1ZmZlcjsKKyAgICAgIGl0LT5vYmplY3QgPSBpdC0+dy0+b2Jq ZWN0OwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBHRVRfRlJPTV9TVFJJTkc6CiAgICAgICBp dC0+b2JqZWN0ID0gaXQtPnN0cmluZzsKQEAgLTU4NDksNyArNTg0OSw3IEBACiAgICAgICBl bHNlCiAJewogCSAgaXQtPm1ldGhvZCA9IEdFVF9GUk9NX0JVRkZFUjsKLQkgIGl0LT5vYmpl Y3QgPSBpdC0+dy0+YnVmZmVyOworCSAgaXQtPm9iamVjdCA9IGl0LT53LT5vYmplY3Q7CiAJ fQogICAgIH0KICAgaXQtPmVuZF9jaGFycG9zID0gcC0+ZW5kX2NoYXJwb3M7CkBAIC02Mjkw LDcgKzYyOTAsNyBAQAogICBJVF9TVFJJTkdfQllURVBPUyAoKml0KSA9IC0xOwogICBpdC0+ c3RyaW5nID0gUW5pbDsKICAgaXQtPm1ldGhvZCA9IEdFVF9GUk9NX0JVRkZFUjsKLSAgaXQt Pm9iamVjdCA9IGl0LT53LT5idWZmZXI7CisgIGl0LT5vYmplY3QgPSBpdC0+dy0+b2JqZWN0 OwogICBpdC0+YXJlYSA9IFRFWFRfQVJFQTsKICAgaXQtPm11bHRpYnl0ZV9wID0gIU5JTFAg KEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKTsK ICAgaXQtPnNwID0gMDsKQEAgLTcxNDEsNyArNzE0MSw3IEBACiAJICBlbHNlCiAJICAgIHsK IAkgICAgICBpdC0+bWV0aG9kID0gR0VUX0ZST01fQlVGRkVSOwotCSAgICAgIGl0LT5vYmpl Y3QgPSBpdC0+dy0+YnVmZmVyOworCSAgICAgIGl0LT5vYmplY3QgPSBpdC0+dy0+b2JqZWN0 OwogCSAgICB9CiAKIAkgIGl0LT5kcHZlYyA9IE5VTEw7CkBAIC03NzE0LDcgKzc3MTQsNyBA QAogCSBzZXR0aW5nIGZhY2VfYmVmb3JlX3NlbGVjdGl2ZV9wLiAgKi8KICAgICAgIGl0LT5z YXZlZF9mYWNlX2lkID0gaXQtPmZhY2VfaWQ7CiAgICAgICBpdC0+bWV0aG9kID0gR0VUX0ZS T01fQlVGRkVSOwotICAgICAgaXQtPm9iamVjdCA9IGl0LT53LT5idWZmZXI7CisgICAgICBp dC0+b2JqZWN0ID0gaXQtPnctPm9iamVjdDsKICAgICAgIHJlc2VhdF9hdF9uZXh0X3Zpc2li bGVfbGluZV9zdGFydCAoaXQsIDEpOwogICAgICAgaXQtPmZhY2VfYmVmb3JlX3NlbGVjdGl2 ZV9wID0gMTsKICAgICB9CkBAIC03OTc4LDcgKzc5NzgsNyBAQAogCiAgICAgICAvKiBSZWNv cmQgd2hhdCB3ZSBoYXZlIGFuZCB3aGVyZSBpdCBjYW1lIGZyb20uICAqLwogICAgICAgaXQt PndoYXQgPSBJVF9DSEFSQUNURVI7Ci0gICAgICBpdC0+b2JqZWN0ID0gaXQtPnctPmJ1ZmZl cjsKKyAgICAgIGl0LT5vYmplY3QgPSBpdC0+dy0+b2JqZWN0OwogICAgICAgaXQtPnBvc2l0 aW9uID0gaXQtPmN1cnJlbnQucG9zOwogCiAgICAgICAvKiBOb3JtYWxseSB3ZSByZXR1cm4g dGhlIGNoYXJhY3RlciBmb3VuZCBhYm92ZSwgZXhjZXB0IHdoZW4gd2UKQEAgLTgwODQsNyAr ODA4NCw3IEBACiAJICByZXR1cm4gMDsKIAl9CiAgICAgICBpdC0+cG9zaXRpb24gPSBpdC0+ Y3VycmVudC5wb3M7Ci0gICAgICBpdC0+b2JqZWN0ID0gaXQtPnctPmJ1ZmZlcjsKKyAgICAg IGl0LT5vYmplY3QgPSBpdC0+dy0+b2JqZWN0OwogICAgICAgaXQtPmMgPSBjb21wb3NpdGlv bl91cGRhdGVfaXQgKCZpdC0+Y21wX2l0LCBJVF9DSEFSUE9TICgqaXQpLAogCQkJCSAgICAg SVRfQllURVBPUyAoKml0KSwgUW5pbCk7CiAgICAgfQpAQCAtMTAwMDMsNyArMTAwMDMsNyBA QAogICBpZiAodykKICAgICB7CiAgICAgICBYU0VUV0lORE9XICh0bXAsIHcpOyBBU0VUICh2 ZWN0b3IsIGksIHRtcCk7ICsraTsKLSAgICAgIEFTRVQgKHZlY3RvciwgaSwgdy0+YnVmZmVy KTsgKytpOworICAgICAgQVNFVCAodmVjdG9yLCBpLCB3LT5vYmplY3QpOyArK2k7CiAgICAg ICBBU0VUICh2ZWN0b3IsIGksIG1ha2VfbnVtYmVyIChtYXJrZXJfcG9zaXRpb24gKHctPnBv aW50bSkpKTsgKytpOwogICAgICAgQVNFVCAodmVjdG9yLCBpLCBtYWtlX251bWJlciAobWFy a2VyX2J5dGVfcG9zaXRpb24gKHctPnBvaW50bSkpKTsgKytpOwogICAgIH0KQEAgLTEwMjU1 LDkgKzEwMjU1LDkgQEAKICAgZWFzc2VydCAoTUlOSV9XSU5ET1dfUCAodykpOwogCiAgIC8q IEJ5IGRlZmF1bHQsIHN0YXJ0IGRpc3BsYXkgYXQgdGhlIGJlZ2lubmluZy4gICovCi0gIHNl dF9tYXJrZXJfYm90aCAody0+c3RhcnQsIHctPmJ1ZmZlciwKLQkJICAgQlVGX0JFR1YgKFhC VUZGRVIgKHctPmJ1ZmZlcikpLAotCQkgICBCVUZfQkVHVl9CWVRFIChYQlVGRkVSICh3LT5i dWZmZXIpKSk7CisgIHNldF9tYXJrZXJfYm90aCAody0+c3RhcnQsIHctPm9iamVjdCwKKwkJ ICAgQlVGX0JFR1YgKFhCVUZGRVIgKHctPm9iamVjdCkpLAorCQkgICBCVUZfQkVHVl9CWVRF IChYQlVGRkVSICh3LT5vYmplY3QpKSk7CiAKICAgLyogRG9uJ3QgcmVzaXplIHdpbmRvd3Mg d2hpbGUgcmVkaXNwbGF5aW5nIGEgd2luZG93OyBpdCB3b3VsZAogICAgICBjb25mdXNlIHJl ZGlzcGxheSBmdW5jdGlvbnMgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgd2luZG93IHRoZXkgYXJl CkBAIC0xMDI4NCwxMCArMTAyODQsMTAgQEAKICAgICAgIHN0cnVjdCB0ZXh0X3BvcyBzdGFy dDsKICAgICAgIHN0cnVjdCBidWZmZXIgKm9sZF9jdXJyZW50X2J1ZmZlciA9IE5VTEw7CiAK LSAgICAgIGlmIChjdXJyZW50X2J1ZmZlciAhPSBYQlVGRkVSICh3LT5idWZmZXIpKQorICAg ICAgaWYgKGN1cnJlbnRfYnVmZmVyICE9IFhCVUZGRVIgKHctPm9iamVjdCkpCiAJewogCSAg b2xkX2N1cnJlbnRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7Ci0JICBzZXRfYnVmZmVyX2lu dGVybmFsIChYQlVGRkVSICh3LT5idWZmZXIpKTsKKwkgIHNldF9idWZmZXJfaW50ZXJuYWwg KFhCVUZGRVIgKHctPm9iamVjdCkpOwogCX0KIAogICAgICAgaW5pdF9pdGVyYXRvciAoJml0 LCB3LCBCRUdWLCBCRUdWX0JZVEUsIE5VTEwsIERFRkFVTFRfRkFDRV9JRCk7CkBAIC0xMDcz Niw3ICsxMDczNiw3IEBACiAKIC8qIE5vbnplcm8gaWYgVyBkb2Vzbid0IHJlZmxlY3QgdGhl IGFjdHVhbCBzdGF0ZSBvZiBjdXJyZW50IGJ1ZmZlciBkdWUKICAgIHRvIGl0cyB0ZXh0IG9y IG92ZXJsYXlzIGNoYW5nZS4gIEZJWE1FOiB0aGlzIG1heSBiZSBjYWxsZWQgd2hlbgotICAg WEJVRkZFUiAody0+YnVmZmVyKSAhPSBjdXJyZW50X2J1ZmZlciwgd2hpY2ggbG9va3Mgc3Vz cGljaW91cy4gICovCisgICBYQlVGRkVSICh3LT5vYmplY3QpICE9IGN1cnJlbnRfYnVmZmVy LCB3aGljaCBsb29rcyBzdXNwaWNpb3VzLiAgKi8KIAogc3RhdGljIGludAogd2luZG93X291 dGRhdGVkIChzdHJ1Y3Qgd2luZG93ICp3KQpAQCAtMTA3NTEsNyArMTA3NTEsNyBAQAogc3Rh dGljIGludAogd2luZG93X2J1ZmZlcl9jaGFuZ2VkIChzdHJ1Y3Qgd2luZG93ICp3KQogewot ICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAody0+YnVmZmVyKTsKKyAgc3RydWN0IGJ1 ZmZlciAqYiA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAKICAgZWFzc2VydCAoQlVGRkVSX0xJ VkVfUCAoYikpOwogCkBAIC0xMTAwNSw3ICsxMTAwNSw3IEBACiAKICAgICAgIEZzZWxlY3Rf d2luZG93IChmLT5zZWxlY3RlZF93aW5kb3csIFF0KTsKICAgICAgIHNldF9idWZmZXJfaW50 ZXJuYWxfMQotCShYQlVGRkVSIChYV0lORE9XIChmLT5zZWxlY3RlZF93aW5kb3cpLT5idWZm ZXIpKTsKKwkoWEJVRkZFUiAoWFdJTkRPVyAoZi0+c2VsZWN0ZWRfd2luZG93KS0+b2JqZWN0 KSk7CiAgICAgICBmbXQgPSBGUkFNRV9JQ09OSUZJRURfUCAoZikgPyBWaWNvbl90aXRsZV9m b3JtYXQgOiBWZnJhbWVfdGl0bGVfZm9ybWF0OwogCiAgICAgICBtb2RlX2xpbmVfdGFyZ2V0 ID0gTU9ERV9MSU5FX1RJVExFOwpAQCAtMTExMjQsNyArMTExMjQsNyBAQAogICAgICAgICAg IGlmICh3aW5kb3dzX29yX2J1ZmZlcnNfY2hhbmdlZAogCSAgICAgICYmIEZSQU1FX05TX1Ag KGYpKQogICAgICAgICAgICAgbnNfc2V0X2RvY19lZGl0ZWQKLQkgICAgICAoZiwgRmJ1ZmZl cl9tb2RpZmllZF9wIChYV0lORE9XIChmLT5zZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpKTsK KwkgICAgICAoZiwgRmJ1ZmZlcl9tb2RpZmllZF9wIChYV0lORE9XIChmLT5zZWxlY3RlZF93 aW5kb3cpLT5vYmplY3QpKTsKICNlbmRpZgogCSAgVU5HQ1BSTzsKIAl9CkBAIC0xMTE5Niw3 ICsxMTE5Niw3IEBACiAKIAkgIHNwZWNiaW5kIChRaW5oaWJpdF9tZW51YmFyX3VwZGF0ZSwg UXQpOwogCi0JICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKFhCVUZGRVIgKHctPmJ1ZmZlcikp OworCSAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSICh3LT5vYmplY3QpKTsKIAkg IGlmIChzYXZlX21hdGNoX2RhdGEpCiAJICAgIHJlY29yZF91bndpbmRfc2F2ZV9tYXRjaF9k YXRhICgpOwogCSAgaWYgKE5JTFAgKFZvdmVycmlkaW5nX2xvY2FsX21hcF9tZW51X2ZsYWcp KQpAQCAtMTE0MDAsNyArMTE0MDAsNyBAQAogCSAgLyogU2V0IGN1cnJlbnRfYnVmZmVyIHRv IHRoZSBidWZmZXIgb2YgdGhlIHNlbGVjdGVkCiAJICAgICB3aW5kb3cgb2YgdGhlIGZyYW1l LCBzbyB0aGF0IHdlIGdldCB0aGUgcmlnaHQgbG9jYWwKIAkgICAgIGtleW1hcHMuICAqLwot CSAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSICh3LT5idWZmZXIpKTsKKwkgIHNl dF9idWZmZXJfaW50ZXJuYWxfMSAoWEJVRkZFUiAody0+b2JqZWN0KSk7CiAKIAkgIC8qIFNh dmUgbWF0Y2ggZGF0YSwgaWYgd2UgbXVzdC4gICovCiAJICBpZiAoc2F2ZV9tYXRjaF9kYXRh KQpAQCAtMTIyNjcsMTAgKzEyMjY3LDggQEAKICAgICB7CiAgICAgICBzdHJ1Y3Qgd2luZG93 ICp3ID0gWFdJTkRPVyAod2luZG93KTsKIAotICAgICAgaWYgKFdJTkRPV1AgKHctPmhjaGls ZCkpCi0JaHNjcm9sbGVkX3AgfD0gaHNjcm9sbF93aW5kb3dfdHJlZSAody0+aGNoaWxkKTsK LSAgICAgIGVsc2UgaWYgKFdJTkRPV1AgKHctPnZjaGlsZCkpCi0JaHNjcm9sbGVkX3AgfD0g aHNjcm9sbF93aW5kb3dfdHJlZSAody0+dmNoaWxkKTsKKyAgICAgIGlmIChXSU5ET1dQICh3 LT5vYmplY3QpKQorCWhzY3JvbGxlZF9wIHw9IGhzY3JvbGxfd2luZG93X3RyZWUgKHctPm9i amVjdCk7CiAgICAgICBlbHNlIGlmICh3LT5jdXJzb3IudnBvcyA+PSAwKQogCXsKIAkgIGlu dCBoX21hcmdpbjsKQEAgLTEyMjkwLDcgKzEyMjg4LDcgQEAKIAkgIC8qIFNjcm9sbCB3aGVu IGN1cnNvciBpcyBpbnNpZGUgdGhpcyBzY3JvbGwgbWFyZ2luLiAgKi8KIAkgIGhfbWFyZ2lu ID0gaHNjcm9sbF9tYXJnaW4gKiBXSU5ET1dfRlJBTUVfQ09MVU1OX1dJRFRIICh3KTsKIAot CSAgaWYgKCFOSUxQIChGYnVmZmVyX2xvY2FsX3ZhbHVlIChRYXV0b19oc2Nyb2xsX21vZGUs IHctPmJ1ZmZlcikpCisJICBpZiAoIU5JTFAgKEZidWZmZXJfbG9jYWxfdmFsdWUgKFFhdXRv X2hzY3JvbGxfbW9kZSwgdy0+b2JqZWN0KSkKIAkgICAgICAvKiBGb3IgbGVmdC10by1yaWdo dCByb3dzLCBoc2Nyb2xsIHdoZW4gY3Vyc29yIGlzIGVpdGhlcgogCQkgKGkpIGluc2lkZSB0 aGUgcmlnaHQgaHNjcm9sbCBtYXJnaW4sIG9yIChpaSkgaWYgaXQgaXMKIAkJIGluc2lkZSB0 aGUgbGVmdCBtYXJnaW4gYW5kIHRoZSB3aW5kb3cgaXMgYWxyZWFkeQpAQCAtMTIzMjUsNyAr MTIzMjMsNyBAQAogCiAJICAgICAgLyogRmluZCBwb2ludCBpbiBhIGRpc3BsYXkgb2YgaW5m aW5pdGUgd2lkdGguICAqLwogCSAgICAgIHNhdmVkX2N1cnJlbnRfYnVmZmVyID0gY3VycmVu dF9idWZmZXI7Ci0JICAgICAgY3VycmVudF9idWZmZXIgPSBYQlVGRkVSICh3LT5idWZmZXIp OworCSAgICAgIGN1cnJlbnRfYnVmZmVyID0gWEJVRkZFUiAody0+b2JqZWN0KTsKIAogCSAg ICAgIGlmICh3ID09IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdykpCiAJCXB0ID0gUFQ7CkBA IC0xMjM3OCw3ICsxMjM3Niw3IEBACiAJCSByZWRpc3BsYXkuICAqLwogCSAgICAgIGlmICh3 LT5oc2Nyb2xsICE9IGhzY3JvbGwpCiAJCXsKLQkJICBYQlVGRkVSICh3LT5idWZmZXIpLT5w cmV2ZW50X3JlZGlzcGxheV9vcHRpbWl6YXRpb25zX3AgPSAxOworCQkgIFhCVUZGRVIgKHct Pm9iamVjdCktPnByZXZlbnRfcmVkaXNwbGF5X29wdGltaXphdGlvbnNfcCA9IDE7CiAJCSAg dy0+aHNjcm9sbCA9IGhzY3JvbGw7CiAJCSAgaHNjcm9sbGVkX3AgPSAxOwogCQl9CkBAIC0x MjQ2Nyw5ICsxMjQ2NSw5IEBACiAgIGlmICh0cmFjZV9yZWRpc3BsYXlfcCkKICAgICBmcHJp bnRmIChzdGRlcnIsICIlcCAoJXMpOiAlc1xuIiwKIAkgICAgIHcsCi0JICAgICAoKEJVRkZF UlAgKHctPmJ1ZmZlcikKLQkgICAgICAgJiYgU1RSSU5HUCAoQlZBUiAoWEJVRkZFUiAody0+ YnVmZmVyKSwgbmFtZSkpKQotCSAgICAgID8gU1NEQVRBIChCVkFSIChYQlVGRkVSICh3LT5i dWZmZXIpLCBuYW1lKSkKKwkgICAgICgoQlVGRkVSUCAody0+b2JqZWN0KQorCSAgICAgICAm JiBTVFJJTkdQIChCVkFSIChYQlVGRkVSICh3LT5vYmplY3QpLCBuYW1lKSkpCisJICAgICAg PyBTU0RBVEEgKEJWQVIgKFhCVUZGRVIgKHctPm9iamVjdCksIG5hbWUpKQogCSAgICAgIDog Im5vIGJ1ZmZlciIpLAogCSAgICAgbWV0aG9kICsgbGVuKTsKIH0KQEAgLTEyNTMzLDggKzEy NTMxLDggQEAKIAkgcmVxdWlyZSB0byByZWRpc3BsYXkgdGhlIHdob2xlIHBhcmFncmFwaC4g IEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUKIAkgdG8gZmluZCB0aGUgcGFyYWdyYXBoIGxpbWl0 cyBhbmQgd2lkZW4gdGhlIHJhbmdlIG9mIHJlZGlzcGxheWVkCiAJIGxpbmVzIHRvIHRoYXQs IGJ1dCBmb3Igbm93IGp1c3QgZ2l2ZSB1cCB0aGlzIG9wdGltaXphdGlvbi4gICovCi0gICAg ICBpZiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZlciksIGJpZGlfZGlzcGxheV9y ZW9yZGVyaW5nKSkKLQkgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZlciksIGJp ZGlfcGFyYWdyYXBoX2RpcmVjdGlvbikpKQorICAgICAgaWYgKCFOSUxQIChCVkFSIChYQlVG RkVSICh3LT5vYmplY3QpLCBiaWRpX2Rpc3BsYXlfcmVvcmRlcmluZykpCisJICAmJiBOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5vYmplY3QpLCBiaWRpX3BhcmFncmFwaF9kaXJlY3Rpb24p KSkKIAl1bmNoYW5nZWRfcCA9IDA7CiAgICAgfQogCkBAIC0xMjc1Nyw3ICsxMjc1NSw3IEBA CiAgICAgIHdlIHNldCBiLT5jbGlwX2NoYW5nZWQgdG8gMSB0byBmb3JjZSB1cGRhdGluZyB0 aGUgc2NyZWVuLiAgSWYKICAgICAgYi0+Y2xpcF9jaGFuZ2VkIGhhcyBhbHJlYWR5IGJlZW4g c2V0IHRvIDEsIHdlIGNhbiBza2lwIHRoaXMKICAgICAgY2hlY2suICAqLwotICBpZiAoIWIt PmNsaXBfY2hhbmdlZCAmJiBCVUZGRVJQICh3LT5idWZmZXIpICYmIHctPndpbmRvd19lbmRf dmFsaWQpCisgIGlmICghYi0+Y2xpcF9jaGFuZ2VkICYmIEJVRkZFUlAgKHctPm9iamVjdCkg JiYgdy0+d2luZG93X2VuZF92YWxpZCkKICAgICB7CiAgICAgICBwdHJkaWZmX3QgcHQ7CiAK QEAgLTEyNzY2LDExICsxMjc2NCwxMSBAQAogICAgICAgZWxzZQogCXB0ID0gbWFya2VyX3Bv c2l0aW9uICh3LT5wb2ludG0pOwogCi0gICAgICBpZiAoKHctPmN1cnJlbnRfbWF0cml4LT5i dWZmZXIgIT0gWEJVRkZFUiAody0+YnVmZmVyKQorICAgICAgaWYgKCh3LT5jdXJyZW50X21h dHJpeC0+YnVmZmVyICE9IFhCVUZGRVIgKHctPm9iamVjdCkKIAkgICB8fCBwdCAhPSB3LT5s YXN0X3BvaW50KQogCSAgJiYgY2hlY2tfcG9pbnRfaW5fY29tcG9zaXRpb24gKHctPmN1cnJl bnRfbWF0cml4LT5idWZmZXIsCiAJCQkJCSB3LT5sYXN0X3BvaW50LAotCQkJCQkgWEJVRkZF UiAody0+YnVmZmVyKSwgcHQpKQorCQkJCQkgWEJVRkZFUiAody0+b2JqZWN0KSwgcHQpKQog CWItPmNsaXBfY2hhbmdlZCA9IDE7CiAgICAgfQogfQpAQCAtMTMwMjUsMTEgKzEzMDIzLDEx IEBACiAgICAgIHRoZSB3aG9sZSB3aW5kb3cuICBUaGUgYXNzaWdubWVudCB0byB0aGlzX2xp bmVfc3RhcnRfcG9zIHByZXZlbnRzCiAgICAgIHRoZSBvcHRpbWl6YXRpb24gZGlyZWN0bHkg YmVsb3cgdGhpcyBpZi1zdGF0ZW1lbnQuICAqLwogICBpZiAoKCghTklMUCAoVnRyYW5zaWVu dF9tYXJrX21vZGUpCi0JJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZlciksIG1h cmtfYWN0aXZlKSkpCisJJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPm9iamVjdCksIG1h cmtfYWN0aXZlKSkpCiAgICAgICAgIT0gKHctPnJlZ2lvbl9zaG93aW5nID4gMCkpCiAgICAg ICB8fCAody0+cmVnaW9uX3Nob3dpbmcKIAkgICYmIHctPnJlZ2lvbl9zaG93aW5nCi0JICAh PSBYSU5UIChGbWFya2VyX3Bvc2l0aW9uIChCVkFSIChYQlVGRkVSICh3LT5idWZmZXIpLCBt YXJrKSkpKSkKKwkgICE9IFhJTlQgKEZtYXJrZXJfcG9zaXRpb24gKEJWQVIgKFhCVUZGRVIg KHctPm9iamVjdCksIG1hcmspKSkpKQogICAgIENIQVJQT1MgKHRoaXNfbGluZV9zdGFydF9w b3MpID0gMDsKIAogICAvKiBPcHRpbWl6ZSB0aGUgY2FzZSB0aGF0IG9ubHkgdGhlIGxpbmUg Y29udGFpbmluZyB0aGUgY3Vyc29yIGluIHRoZQpAQCAtMTMwNDcsNyArMTMwNDUsNyBAQAog ICAgICAgJiYgIUZSQU1FX09CU0NVUkVEX1AgKFhGUkFNRSAody0+ZnJhbWUpKQogICAgICAg LyogTWFrZSBzdXJlIHJlY29yZGVkIGRhdGEgYXBwbGllcyB0byBjdXJyZW50IGJ1ZmZlciwg ZXRjLiAgKi8KICAgICAgICYmIHRoaXNfbGluZV9idWZmZXIgPT0gY3VycmVudF9idWZmZXIK LSAgICAgICYmIGN1cnJlbnRfYnVmZmVyID09IFhCVUZGRVIgKHctPmJ1ZmZlcikKKyAgICAg ICYmIGN1cnJlbnRfYnVmZmVyID09IFhCVUZGRVIgKHctPm9iamVjdCkKICAgICAgICYmICF3 LT5mb3JjZV9zdGFydAogICAgICAgJiYgIXctPm9wdGlvbmFsX25ld19zdGFydAogICAgICAg LyogUG9pbnQgbXVzdCBiZSBvbiB0aGUgbGluZSB0aGF0IHdlIGhhdmUgaW5mbyByZWNvcmRl ZCBhYm91dC4gICovCkBAIC0xMzMzOCw3ICsxMzMzNiw3IEBACiAgICAgICBMaXNwX09iamVj dCBtaW5pX3dpbmRvdyA9IEZSQU1FX01JTklCVUZfV0lORE9XIChzZik7CiAgICAgICBzdHJ1 Y3QgZnJhbWUgKm1pbmlfZnJhbWU7CiAKLSAgICAgIGRpc3BsYXllZF9idWZmZXIgPSBYQlVG RkVSIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIpOworICAgICAgZGlzcGxh eWVkX2J1ZmZlciA9IFhCVUZGRVIgKFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPm9iamVj dCk7CiAgICAgICAvKiBVc2UgbGlzdF9vZl9lcnJvciwgbm90IFFlcnJvciwgc28gdGhhdAog CSB3ZSBjYXRjaCBvbmx5IGVycm9ycyBhbmQgZG9uJ3QgcnVuIHRoZSBkZWJ1Z2dlci4gICov CiAgICAgICBpbnRlcm5hbF9jb25kaXRpb25fY2FzZV8xIChyZWRpc3BsYXlfd2luZG93XzEs IHNlbGVjdGVkX3dpbmRvdywKQEAgLTEzNTQ4LDcgKzEzNTQ2LDcgQEAKIHN0YXRpYyB2b2lk CiBtYXJrX3dpbmRvd19kaXNwbGF5X2FjY3VyYXRlXzEgKHN0cnVjdCB3aW5kb3cgKncsIGlu dCBhY2N1cmF0ZV9wKQogewotICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAody0+YnVm ZmVyKTsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAKICAg dy0+bGFzdF9tb2RpZmllZCA9IGFjY3VyYXRlX3AgPyBCVUZfTU9ESUZGIChiKSA6IDA7CiAg IHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IGFjY3VyYXRlX3AgPyBCVUZfT1ZFUkxBWV9N T0RJRkYgKGIpIDogMDsKQEAgLTEzNTk1LDExICsxMzU5Myw5IEBACiAgIGZvciAoOyAhTklM UCAod2luZG93KTsgd2luZG93ID0gdy0+bmV4dCkKICAgICB7CiAgICAgICB3ID0gWFdJTkRP VyAod2luZG93KTsKLSAgICAgIGlmICghTklMUCAody0+dmNoaWxkKSkKLQltYXJrX3dpbmRv d19kaXNwbGF5X2FjY3VyYXRlICh3LT52Y2hpbGQsIGFjY3VyYXRlX3ApOwotICAgICAgZWxz ZSBpZiAoIU5JTFAgKHctPmhjaGlsZCkpCi0JbWFya193aW5kb3dfZGlzcGxheV9hY2N1cmF0 ZSAody0+aGNoaWxkLCBhY2N1cmF0ZV9wKTsKLSAgICAgIGVsc2UgaWYgKEJVRkZFUlAgKHct PmJ1ZmZlcikpCisgICAgICBpZiAoV0lORE9XUCAody0+b2JqZWN0KSkKKwltYXJrX3dpbmRv d19kaXNwbGF5X2FjY3VyYXRlICh3LT5vYmplY3QsIGFjY3VyYXRlX3ApOworICAgICAgZWxz ZQogCW1hcmtfd2luZG93X2Rpc3BsYXlfYWNjdXJhdGVfMSAodywgYWNjdXJhdGVfcCk7CiAg ICAgfQogCkBAIC0xMzY1NiwxMyArMTM2NTIsMTEgQEAKICAgICB7CiAgICAgICBzdHJ1Y3Qg d2luZG93ICp3ID0gWFdJTkRPVyAod2luZG93KTsKIAotICAgICAgaWYgKCFOSUxQICh3LT5o Y2hpbGQpKQotCXJlZGlzcGxheV93aW5kb3dzICh3LT5oY2hpbGQpOwotICAgICAgZWxzZSBp ZiAoIU5JTFAgKHctPnZjaGlsZCkpCi0JcmVkaXNwbGF5X3dpbmRvd3MgKHctPnZjaGlsZCk7 Ci0gICAgICBlbHNlIGlmICghTklMUCAody0+YnVmZmVyKSkKKyAgICAgIGlmIChXSU5ET1dQ ICh3LT5vYmplY3QpKQorCXJlZGlzcGxheV93aW5kb3dzICh3LT5vYmplY3QpOworICAgICAg ZWxzZQogCXsKLQkgIGRpc3BsYXllZF9idWZmZXIgPSBYQlVGRkVSICh3LT5idWZmZXIpOwor CSAgZGlzcGxheWVkX2J1ZmZlciA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAJICAvKiBVc2Ug bGlzdF9vZl9lcnJvciwgbm90IFFlcnJvciwgc28gdGhhdAogCSAgICAgd2UgY2F0Y2ggb25s eSBlcnJvcnMgYW5kIGRvbid0IHJ1biB0aGUgZGVidWdnZXIuICAqLwogCSAgaW50ZXJuYWxf Y29uZGl0aW9uX2Nhc2VfMSAocmVkaXNwbGF5X3dpbmRvd18wLCB3aW5kb3csCkBAIC0xNDMw OSw3ICsxNDMwMyw3IEBACiAJICAmJiAhTUFUUklYX1JPV19DT05USU5VQVRJT05fTElORV9Q IChyb3cpCiAJICAmJiByb3ctPnggPT0gMCkKIAl7Ci0JICB0aGlzX2xpbmVfYnVmZmVyID0g WEJVRkZFUiAody0+YnVmZmVyKTsKKwkgIHRoaXNfbGluZV9idWZmZXIgPSBYQlVGRkVSICh3 LT5vYmplY3QpOwogCiAJICBDSEFSUE9TICh0aGlzX2xpbmVfc3RhcnRfcG9zKQogCSAgICA9 IE1BVFJJWF9ST1dfU1RBUlRfQ0hBUlBPUyAocm93KSArIGRlbHRhOwpAQCAtMTQzNDUsNyAr MTQzMzksNyBAQAogICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAod2luZG93KTsKICAg U0VUX01BUktFUl9GUk9NX1RFWFRfUE9TICh3LT5zdGFydCwgc3RhcnRwKTsKIAotICBpZiAo Y3VycmVudF9idWZmZXIgIT0gWEJVRkZFUiAody0+YnVmZmVyKSkKKyAgaWYgKGN1cnJlbnRf YnVmZmVyICE9IFhCVUZGRVIgKHctPm9iamVjdCkpCiAgICAgZW1hY3NfYWJvcnQgKCk7CiAK ICAgaWYgKCFOSUxQIChWd2luZG93X3Njcm9sbF9mdW5jdGlvbnMpKQpAQCAtMTQzNTQsNyAr MTQzNDgsNyBAQAogCQkJICAgIG1ha2VfbnVtYmVyIChDSEFSUE9TIChzdGFydHApKSk7CiAg ICAgICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIgKHN0YXJ0cCwgdy0+c3RhcnQpOwogICAg ICAgLyogSW4gY2FzZSB0aGUgaG9vayBmdW5jdGlvbnMgc3dpdGNoIGJ1ZmZlcnMuICAqLwot ICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoWEJVRkZFUiAody0+YnVmZmVyKSk7CisgICAg ICBzZXRfYnVmZmVyX2ludGVybmFsIChYQlVGRkVSICh3LT5vYmplY3QpKTsKICAgICB9CiAK ICAgcmV0dXJuIHN0YXJ0cDsKQEAgLTE1MDA1LDcgKzE0OTk5LDcgQEAKIAkgICAgICBtdXN0 X3Njcm9sbCA9IDE7CiAJICAgIH0KIAkgIGVsc2UgaWYgKHJjICE9IENVUlNPUl9NT1ZFTUVO VF9TVUNDRVNTCi0JCSAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5idWZmZXIpLCBi aWRpX2Rpc3BsYXlfcmVvcmRlcmluZykpKQorCQkgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF UiAody0+b2JqZWN0KSwgYmlkaV9kaXNwbGF5X3Jlb3JkZXJpbmcpKSkKIAkgICAgewogCSAg ICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzE7CiAKQEAgLTE1MDY4LDcgKzE1MDYyLDcgQEAK IAkgIGVsc2UgaWYgKHNjcm9sbF9wKQogCSAgICByYyA9IENVUlNPUl9NT1ZFTUVOVF9NVVNU X1NDUk9MTDsKIAkgIGVsc2UgaWYgKHJjICE9IENVUlNPUl9NT1ZFTUVOVF9TVUNDRVNTCi0J CSAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5idWZmZXIpLCBiaWRpX2Rpc3BsYXlf cmVvcmRlcmluZykpKQorCQkgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+b2JqZWN0 KSwgYmlkaV9kaXNwbGF5X3Jlb3JkZXJpbmcpKSkKIAkgICAgewogCSAgICAgIC8qIFdpdGgg YmlkaS1yZW9yZGVyZWQgcm93cywgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuCiAJCSBvbmUg Y2FuZGlkYXRlIHJvdyB3aG9zZSBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucwpAQCAtMTUxNzUs NyArMTUxNjksNyBAQAogICAgICAgfHwgKHcgPT0gWFdJTkRPVyAobWluaWJ1Zl93aW5kb3cp CiAJICAmJiBOSUxQIChlY2hvX2FyZWFfYnVmZmVyWzBdKSkpCiAgICAgewotICAgICAgc3Ry dWN0IGJ1ZmZlciAqYnVmID0gWEJVRkZFUiAody0+YnVmZmVyKTsKKyAgICAgIHN0cnVjdCBi dWZmZXIgKmJ1ZiA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAgICAgICB3aG9sZSA9IEJVRl9a ViAoYnVmKSAtIEJVRl9CRUdWIChidWYpOwogICAgICAgc3RhcnQgPSBtYXJrZXJfcG9zaXRp b24gKHctPnN0YXJ0KSAtIEJVRl9CRUdWIChidWYpOwogICAgICAgLyogSSBkb24ndCB0aGlu ayB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgcmlnaHQuICBGb3IgdGhlCkBAIC0xNTIwOSw3 ICsxNTIwMyw3IEBACiB7CiAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XICh3aW5kb3cp OwogICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKLSAgc3RydWN0IGJ1 ZmZlciAqYnVmZmVyID0gWEJVRkZFUiAody0+YnVmZmVyKTsKKyAgc3RydWN0IGJ1ZmZlciAq YnVmZmVyID0gWEJVRkZFUiAody0+b2JqZWN0KTsKICAgc3RydWN0IGJ1ZmZlciAqb2xkID0g Y3VycmVudF9idWZmZXI7CiAgIHN0cnVjdCB0ZXh0X3BvcyBscG9pbnQsIG9wb2ludCwgc3Rh cnRwOwogICBpbnQgdXBkYXRlX21vZGVfbGluZTsKQEAgLTE1MjMyLDcgKzE1MjI2LDcgQEAK ICAgb3BvaW50ID0gbHBvaW50OwogCiAgIC8qIFcgbXVzdCBiZSBhIGxlYWYgd2luZG93IGhl cmUuICAqLwotICBlYXNzZXJ0ICghTklMUCAody0+YnVmZmVyKSk7CisgIGVhc3NlcnQgKCFO SUxQICh3LT5vYmplY3QpKTsKICNpZmRlZiBHTFlQSF9ERUJVRwogICAqdy0+ZGVzaXJlZF9t YXRyaXgtPm1ldGhvZCA9IDA7CiAjZW5kaWYKQEAgLTE1MjYyLDEwICsxNTI1NiwxMCBAQAog ICAgICAgZWxzZSBpZiAoKHcgIT0gWFdJTkRPVyAobWluaWJ1Zl93aW5kb3cpCiAJCXx8IG1p bmlidWZfbGV2ZWwgPT0gMCkKIAkgICAgICAgLyogV2hlbiBidWZmZXIgaXMgbm9uZW1wdHks IHJlZGlzcGxheSB3aW5kb3cgbm9ybWFsbHkuICovCi0JICAgICAgICYmIEJVRl9aIChYQlVG RkVSICh3LT5idWZmZXIpKSA9PSBCVUZfQkVHIChYQlVGRkVSICh3LT5idWZmZXIpKQorCSAg ICAgICAmJiBCVUZfWiAoWEJVRkZFUiAody0+b2JqZWN0KSkgPT0gQlVGX0JFRyAoWEJVRkZF UiAody0+b2JqZWN0KSkKIAkgICAgICAgLyogUXVhaWwgZGlzcGxheXMgbm9uLW1pbmkgYnVm ZmVycyBpbiBtaW5pYnVmZmVyIHdpbmRvdy4KIAkJICBJbiB0aGF0IGNhc2UsIHJlZGlzcGxh eSB0aGUgd2luZG93IG5vcm1hbGx5LiAgKi8KLQkgICAgICAgJiYgIU5JTFAgKEZtZW1xICh3 LT5idWZmZXIsIFZtaW5pYnVmZmVyX2xpc3QpKSkKKwkgICAgICAgJiYgIU5JTFAgKEZtZW1x ICh3LT5vYmplY3QsIFZtaW5pYnVmZmVyX2xpc3QpKSkKIAl7CiAJICAvKiBXIGlzIGEgbWlu aS1idWZmZXIgd2luZG93LCBidXQgaXQncyBub3QgYWN0aXZlLCBzbyBjbGVhcgogCSAgICAg aXQuICAqLwpAQCAtMTUyODcsNyArMTUyODEsNyBAQAogICAgICB2YWx1ZS4gICovCiAgIC8q IFJlYWxseSBzZWxlY3QgdGhlIGJ1ZmZlciwgZm9yIHRoZSBzYWtlIG9mIGJ1ZmZlci1sb2Nh bAogICAgICB2YXJpYWJsZXMuICAqLwotICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKFhCVUZG RVIgKHctPmJ1ZmZlcikpOworICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKFhCVUZGRVIgKHct Pm9iamVjdCkpOwogCiAgIGN1cnJlbnRfbWF0cml4X3VwX3RvX2RhdGVfcAogICAgID0gKHct PndpbmRvd19lbmRfdmFsaWQKQEAgLTE2NTc4LDcgKzE2NTcyLDcgQEAKIAkJIGJpZGktcmVv cmRlcmVkIGdseXBoIHJvd3MuICBMZXQgc2V0X2N1cnNvcl9mcm9tX3JvdwogCQkgZmlndXJl IG91dCB3aGVyZSB0byBwdXQgdGhlIGN1cnNvciwgYW5kIGlmIGl0IGZhaWxzLAogCQkgZ2l2 ZSB1cC4gICovCi0JICAgICAgaWYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5idWZmZXIp LCBiaWRpX2Rpc3BsYXlfcmVvcmRlcmluZykpKQorCSAgICAgIGlmICghTklMUCAoQlZBUiAo WEJVRkZFUiAody0+b2JqZWN0KSwgYmlkaV9kaXNwbGF5X3Jlb3JkZXJpbmcpKSkKIAkJewog CQkgIGlmICghc2V0X2N1cnNvcl9mcm9tX3JvdyAodywgcm93LCB3LT5jdXJyZW50X21hdHJp eCwKIAkJCQkJICAgIDAsIDAsIDAsIDApKQpAQCAtMTY4MjksNyArMTY4MjMsNyBAQAogCiAg IC8qIFByZWNvbmRpdGlvbnM6IFcgbXVzdCBiZSBhIGxlYWYgd2luZG93IGFuZCBmdWxsLXdp ZHRoLiAgSXRzIGZyYW1lCiAgICAgIG11c3QgaGF2ZSBhIGZyYW1lIG1hdHJpeC4gICovCi0g IGVhc3NlcnQgKE5JTFAgKHctPmhjaGlsZCkgJiYgTklMUCAody0+dmNoaWxkKSk7CisgIGVh c3NlcnQgKHctPnR5cGUgPT0gV0lORE9XX0xFQUYpOwogICBlYXNzZXJ0IChXSU5ET1dfRlVM TF9XSURUSF9QICh3KSk7CiAgIGVhc3NlcnQgKCFGUkFNRV9XSU5ET1dfUCAoZikpOwogCkBA IC0xNjg3MSw3ICsxNjg2NSw3IEBACiB7CiAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IHN0 YXJ0OwogICBzdHJ1Y3QgZ2x5cGhfcm93ICpiZXN0X3JvdyA9IE5VTEw7Ci0gIHB0cmRpZmZf dCBtaW5kaWYgPSBCVUZfWlYgKFhCVUZGRVIgKHctPmJ1ZmZlcikpICsgMTsKKyAgcHRyZGlm Zl90IG1pbmRpZiA9IEJVRl9aViAoWEJVRkZFUiAody0+b2JqZWN0KSkgKyAxOwogICBpbnQg bGFzdF95OwogCiAgIC8qIElmIHdlIGhhcHBlbiB0byBzdGFydCBvbiBhIGhlYWRlci1saW5l LCBza2lwIHRoYXQuICAqLwpAQCAtMTY5MDcsNyArMTY5MDEsNyBAQAogCXsKIAkgIHN0cnVj dCBnbHlwaCAqZzsKIAotCSAgaWYgKE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmJ1ZmZlciks IGJpZGlfZGlzcGxheV9yZW9yZGVyaW5nKSkKKwkgIGlmIChOSUxQIChCVkFSIChYQlVGRkVS ICh3LT5vYmplY3QpLCBiaWRpX2Rpc3BsYXlfcmVvcmRlcmluZykpCiAJICAgICAgfHwgKCFi ZXN0X3JvdyAmJiAhcm93LT5jb250aW51ZWRfcCkpCiAJICAgIHJldHVybiByb3c7CiAJICAv KiBJbiBiaWRpLXJlb3JkZXJlZCByb3dzLCB0aGVyZSBjb3VsZCBiZSBzZXZlcmFsIHJvd3MK QEAgLTE3MDczLDcgKzE3MDY3LDcgQEAKICAgICAgd3JhcHBlZCBsaW5lIGNhbiBjaGFuZ2Ug dGhlIHdyYXAgcG9zaXRpb24sIGFsdGVyaW5nIHRoZSBsaW5lCiAgICAgIGFib3ZlIGl0LiAg SXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byBoYW5kbGUgdGhpcyBtb3JlCiAgICAgIGludGVs bGlnZW50bHksIGJ1dCBmb3Igbm93IGp1c3QgcmVkaXNwbGF5IGZyb20gc2NyYXRjaC4gICov Ci0gIGlmICghTklMUCAoQlZBUiAoWEJVRkZFUiAody0+YnVmZmVyKSwgd29yZF93cmFwKSkp CisgIGlmICghTklMUCAoQlZBUiAoWEJVRkZFUiAody0+b2JqZWN0KSwgd29yZF93cmFwKSkp CiAgICAgR0lWRV9VUCAoMjEpOwogCiAgIC8qIFVuZGVyIGJpZGkgcmVvcmRlcmluZywgYWRk aW5nIG9yIGRlbGV0aW5nIGEgY2hhcmFjdGVyIGluIHRoZQpAQCAtMTcwODQsOCArMTcwNzgs OCBAQAogICAgICB0byBmaW5kIHRoZSBwYXJhZ3JhcGggbGltaXRzIGFuZCB3aWRlbiB0aGUg cmFuZ2Ugb2YgcmVkaXNwbGF5ZWQKICAgICAgbGluZXMgdG8gdGhhdCwgYnV0IGZvciBub3cg anVzdCBnaXZlIHVwIHRoaXMgb3B0aW1pemF0aW9uIGFuZAogICAgICByZWRpc3BsYXkgZnJv bSBzY3JhdGNoLiAgKi8KLSAgaWYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5idWZmZXIp LCBiaWRpX2Rpc3BsYXlfcmVvcmRlcmluZykpCi0gICAgICAmJiBOSUxQIChCVkFSIChYQlVG RkVSICh3LT5idWZmZXIpLCBiaWRpX3BhcmFncmFwaF9kaXJlY3Rpb24pKSkKKyAgaWYgKCFO SUxQIChCVkFSIChYQlVGRkVSICh3LT5vYmplY3QpLCBiaWRpX2Rpc3BsYXlfcmVvcmRlcmlu ZykpCisgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5vYmplY3QpLCBiaWRpX3Bh cmFncmFwaF9kaXJlY3Rpb24pKSkKICAgICBHSVZFX1VQICgyMik7CiAKICAgLyogTWFrZSBz dXJlIGJlZ191bmNoYW5nZWQgYW5kIGVuZF91bmNoYW5nZWQgYXJlIHVwIHRvIGRhdGUuICBE byBpdApAQCAtMTc5NTAsNyArMTc5NDQsNyBAQAogICAoTGlzcF9PYmplY3QgZ2x5cGhzKQog ewogICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KTsKLSAg c3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gWEJVRkZFUiAody0+YnVmZmVyKTsKKyAgc3RydWN0 IGJ1ZmZlciAqYnVmZmVyID0gWEJVRkZFUiAody0+b2JqZWN0KTsKIAogICBmcHJpbnRmIChz dGRlcnIsICJQVCA9ICUicEkiZCwgQkVHViA9ICUicEkiZC4gWlYgPSAlInBJImRcbiIsCiAJ ICAgQlVGX1BUIChidWZmZXIpLCBCVUZfQkVHViAoYnVmZmVyKSwgQlVGX1pWIChidWZmZXIp KTsKQEAgLTE4MDU2LDcgKzE4MDUwLDcgQEAKIGdldF9vdmVybGF5X2Fycm93X2dseXBoX3Jv dyAoc3RydWN0IHdpbmRvdyAqdywgTGlzcF9PYmplY3Qgb3ZlcmxheV9hcnJvd19zdHJpbmcp CiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7Ci0g IHN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IFhCVUZGRVIgKHctPmJ1ZmZlcik7CisgIHN0cnVj dCBidWZmZXIgKmJ1ZmZlciA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAgIHN0cnVjdCBidWZm ZXIgKm9sZCA9IGN1cnJlbnRfYnVmZmVyOwogICBjb25zdCB1bnNpZ25lZCBjaGFyICphcnJv d19zdHJpbmcgPSBTREFUQSAob3ZlcmxheV9hcnJvd19zdHJpbmcpOwogICBpbnQgYXJyb3df bGVuID0gU0NIQVJTIChvdmVybGF5X2Fycm93X3N0cmluZyk7CkBAIC0xOTI2Myw3ICsxOTI1 Nyw3IEBACiAJICAgICAgcm93LT5nbHlwaHNbVEVYVF9BUkVBXS0+Y2hhcnBvcyA9IC0xOwog CSAgICAgIHJvdy0+ZGlzcGxheXNfdGV4dF9wID0gMDsKIAotCSAgICAgIGlmICghTklMUCAo QlZBUiAoWEJVRkZFUiAoaXQtPnctPmJ1ZmZlciksIGluZGljYXRlX2VtcHR5X2xpbmVzKSkK KwkgICAgICBpZiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKGl0LT53LT5vYmplY3QpLCBpbmRp Y2F0ZV9lbXB0eV9saW5lcykpCiAJCSAgJiYgKCFNSU5JX1dJTkRPV19QIChpdC0+dykKIAkJ ICAgICAgfHwgKG1pbmlidWZfbGV2ZWwgJiYgRVEgKGl0LT53aW5kb3csIG1pbmlidWZfd2lu ZG93KSkpKQogCQlyb3ctPmluZGljYXRlX2VtcHR5X2xpbmVfcCA9IDE7CkBAIC0yMDA3OSwx MCArMjAwNzMsOCBAQAogICAgIHsKICAgICAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9X ICh3aW5kb3cpOwogCi0gICAgICBpZiAoV0lORE9XUCAody0+aGNoaWxkKSkKLQlud2luZG93 cyArPSByZWRpc3BsYXlfbW9kZV9saW5lcyAody0+aGNoaWxkLCBmb3JjZSk7Ci0gICAgICBl bHNlIGlmIChXSU5ET1dQICh3LT52Y2hpbGQpKQotCW53aW5kb3dzICs9IHJlZGlzcGxheV9t b2RlX2xpbmVzICh3LT52Y2hpbGQsIGZvcmNlKTsKKyAgICAgIGlmIChXSU5ET1dQICh3LT5v YmplY3QpKQorCW53aW5kb3dzICs9IHJlZGlzcGxheV9tb2RlX2xpbmVzICh3LT5vYmplY3Qs IGZvcmNlKTsKICAgICAgIGVsc2UgaWYgKGZvcmNlCiAJICAgICAgIHx8IEZSQU1FX0dBUkJB R0VEX1AgKFhGUkFNRSAody0+ZnJhbWUpKQogCSAgICAgICB8fCAhTUFUUklYX01PREVfTElO RV9ST1cgKHctPmN1cnJlbnRfbWF0cml4KS0+ZW5hYmxlZF9wKQpAQCAtMjAwOTIsNyArMjAw ODQsNyBAQAogCiAJICAvKiBTZXQgdGhlIHdpbmRvdydzIGJ1ZmZlciBmb3IgdGhlIG1vZGUg bGluZSBkaXNwbGF5LiAgKi8KIAkgIFNFVF9URVhUX1BPUyAobHBvaW50LCBQVCwgUFRfQllU RSk7Ci0JICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKFhCVUZGRVIgKHctPmJ1ZmZlcikpOwor CSAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSICh3LT5vYmplY3QpKTsKIAogCSAg LyogUG9pbnQgcmVmZXJzIG5vcm1hbGx5IHRvIHRoZSBzZWxlY3RlZCB3aW5kb3cuICBGb3Ig YW55CiAJICAgICBvdGhlciB3aW5kb3csIHNldCB1cCBhcHByb3ByaWF0ZSB2YWx1ZS4gICov CkBAIC0yMDg3NCw3ICsyMDg2Niw3IEBACiAgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CiAK ICAgaWYgKE5JTFAgKGJ1ZmZlcikpCi0gICAgYnVmZmVyID0gdy0+YnVmZmVyOworICAgIGJ1 ZmZlciA9IHctPm9iamVjdDsKICAgQ0hFQ0tfQlVGRkVSIChidWZmZXIpOwogCiAgIC8qIE1h a2UgZm9ybWF0dGluZyB0aGUgbW9kZWxpbmUgYSBub24tb3Agd2hlbiBub25pbnRlcmFjdGl2 ZSwgb3RoZXJ3aXNlCkBAIC0yMjE4MCw3ICsyMjE3Miw3IEBACiAJICAgIHJldHVybiBPS19Q SVhFTFMgKFdJTkRPV19TQ1JPTExfQkFSX0FSRUFfV0lEVEggKGl0LT53KSk7CiAJfQogCi0g ICAgICBwcm9wID0gYnVmZmVyX2xvY2FsX3ZhbHVlXzEgKHByb3AsIGl0LT53LT5idWZmZXIp OworICAgICAgcHJvcCA9IGJ1ZmZlcl9sb2NhbF92YWx1ZV8xIChwcm9wLCBpdC0+dy0+b2Jq ZWN0KTsKICAgICAgIGlmIChFUSAocHJvcCwgUXVuYm91bmQpKQogCXByb3AgPSBRbmlsOwog ICAgIH0KQEAgLTIyMjMyLDcgKzIyMjI0LDcgQEAKIAkgICAgICByZXR1cm4gT0tfUElYRUxT IChwaXhlbHMpOwogCSAgICB9CiAKLQkgIGNhciA9IGJ1ZmZlcl9sb2NhbF92YWx1ZV8xIChj YXIsIGl0LT53LT5idWZmZXIpOworCSAgY2FyID0gYnVmZmVyX2xvY2FsX3ZhbHVlXzEgKGNh ciwgaXQtPnctPm9iamVjdCk7CiAJICBpZiAoRVEgKGNhciwgUXVuYm91bmQpKQogCSAgICBj YXIgPSBRbmlsOwogCX0KQEAgLTI0MDgyLDcgKzI0MDc0LDcgQEAKICAgICAgIGludCBuID0g d2lkdGg7CiAKICAgICAgIGlmICghU1RSSU5HUCAob2JqZWN0KSkKLQlvYmplY3QgPSBpdC0+ dy0+YnVmZmVyOworCW9iamVjdCA9IGl0LT53LT5vYmplY3Q7CiAjaWZkZWYgSEFWRV9XSU5E T1dfU1lTVEVNCiAgICAgICBpZiAoRlJBTUVfV0lORE9XX1AgKGl0LT5mKSkKIAlhcHBlbmRf c3RyZXRjaF9nbHlwaCAoaXQsIG9iamVjdCwgd2lkdGgsIGhlaWdodCwgYXNjZW50KTsKQEAg LTI1NDc4LDcgKzI1NDcwLDcgQEAKIAkJCWludCAqYWN0aXZlX2N1cnNvcikKIHsKICAgc3Ry dWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7Ci0gIHN0cnVjdCBidWZmZXIgKmIg PSBYQlVGRkVSICh3LT5idWZmZXIpOworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAo dy0+b2JqZWN0KTsKICAgaW50IGN1cnNvcl90eXBlID0gREVGQVVMVF9DVVJTT1I7CiAgIExp c3BfT2JqZWN0IGFsdF9jdXJzb3I7CiAgIGludCBub25fc2VsZWN0ZWQgPSAwOwpAQCAtMjYw MjksMTAgKzI2MDIxLDggQEAKIHsKICAgd2hpbGUgKHcpCiAgICAgewotICAgICAgaWYgKCFO SUxQICh3LT5oY2hpbGQpKQotCXVwZGF0ZV9jdXJzb3JfaW5fd2luZG93X3RyZWUgKFhXSU5E T1cgKHctPmhjaGlsZCksIG9uX3ApOwotICAgICAgZWxzZSBpZiAoIU5JTFAgKHctPnZjaGls ZCkpCi0JdXBkYXRlX2N1cnNvcl9pbl93aW5kb3dfdHJlZSAoWFdJTkRPVyAody0+dmNoaWxk KSwgb25fcCk7CisgICAgICBpZiAoV0lORE9XUCAody0+b2JqZWN0KSkKKwl1cGRhdGVfY3Vy c29yX2luX3dpbmRvd190cmVlIChYV0lORE9XICh3LT5vYmplY3QpLCBvbl9wKTsKICAgICAg IGVsc2UKIAl1cGRhdGVfd2luZG93X2N1cnNvciAodywgb25fcCk7CiAKQEAgLTI3Mjc4LDcg KzI3MjY4LDcgQEAKIAkJewogCQkgIGhlbHBfZWNob19zdHJpbmcgPSBoZWxwOwogCQkgIFhT RVRXSU5ET1cgKGhlbHBfZWNob193aW5kb3csIHcpOwotCQkgIGhlbHBfZWNob19vYmplY3Qg PSB3LT5idWZmZXI7CisJCSAgaGVscF9lY2hvX29iamVjdCA9IHctPm9iamVjdDsKIAkJICBo ZWxwX2VjaG9fcG9zID0gY2hhcnBvczsKIAkJfQogCSAgICB9CkBAIC0yNzMxNCw3ICsyNzMw NCw3IEBACiAJICAgIHsKIAkgICAgICBMaXNwX09iamVjdCBkZWZhdWx0X2hlbHAKIAkJPSBi dWZmZXJfbG9jYWxfdmFsdWVfMSAoUW1vZGVfbGluZV9kZWZhdWx0X2hlbHBfZWNobywKLQkJ CQkJdy0+YnVmZmVyKTsKKwkJCQkJdy0+b2JqZWN0KTsKIAogCSAgICAgIGlmIChTVFJJTkdQ IChkZWZhdWx0X2hlbHApKQogCQl7CkBAIC0yNzU4OSw3ICsyNzU3OSw3IEBACiAKICAgLyog QXJlIHdlIGluIGEgd2luZG93IHdob3NlIGRpc3BsYXkgaXMgdXAgdG8gZGF0ZT8KICAgICAg QW5kIHZlcmlmeSB0aGUgYnVmZmVyJ3MgdGV4dCBoYXMgbm90IGNoYW5nZWQuICAqLwotICBi ID0gWEJVRkZFUiAody0+YnVmZmVyKTsKKyAgYiA9IFhCVUZGRVIgKHctPm9iamVjdCk7CiAg IGlmIChwYXJ0ID09IE9OX1RFWFQKICAgICAgICYmIHctPndpbmRvd19lbmRfdmFsaWQKICAg ICAgICYmIHctPmxhc3RfbW9kaWZpZWQgPT0gQlVGX01PRElGRiAoYikKQEAgLTI3Nzk4LDgg KzI3Nzg4LDggQEAKIAkJICBpZiAocG9zID4gMCkKIAkJICAgIHsKIAkJICAgICAgbW91c2Vf ZmFjZSA9IGdldF9jaGFyX3Byb3BlcnR5X2FuZF9vdmVybGF5Ci0JCQkobWFrZV9udW1iZXIg KHBvcyksIFFtb3VzZV9mYWNlLCB3LT5idWZmZXIsICZvdmVybGF5KTsKLQkJICAgICAgYnVm ZmVyID0gdy0+YnVmZmVyOworCQkJKG1ha2VfbnVtYmVyIChwb3MpLCBRbW91c2VfZmFjZSwg dy0+b2JqZWN0LCAmb3ZlcmxheSk7CisJCSAgICAgIGJ1ZmZlciA9IHctPm9iamVjdDsKIAkJ ICAgICAgZGlzcF9zdHJpbmcgPSBvYmplY3Q7CiAJCSAgICB9CiAJCX0KQEAgLTI3OTEyLDEx ICsyNzkwMiwxMSBAQAogCQkgICAgaWYgKHAgPiAwKQogCQkgICAgICB7CiAJCQloZWxwID0g RmdldF9jaGFyX3Byb3BlcnR5IChtYWtlX251bWJlciAocCksCi0JCQkJCQkgICBRaGVscF9l Y2hvLCB3LT5idWZmZXIpOworCQkJCQkJICAgUWhlbHBfZWNobywgdy0+b2JqZWN0KTsKIAkJ CWlmICghTklMUCAoaGVscCkpCiAJCQkgIHsKIAkJCSAgICBjaGFycG9zID0gcDsKLQkJCSAg ICBvYmogPSB3LT5idWZmZXI7CisJCQkgICAgb2JqID0gdy0+b2JqZWN0OwogCQkJICB9CiAJ CSAgICAgIH0KIAkJICB9CkBAIC0yNzk2Nyw3ICsyNzk1Nyw3IEBACiAJCSAgICAgIHB0cmRp ZmZfdCBwID0gc3RyaW5nX2J1ZmZlcl9wb3NpdGlvbiAob2JqLCBzdGFydCk7CiAJCSAgICAg IGlmIChwID4gMCkKIAkJCXBvaW50ZXIgPSBGZ2V0X2NoYXJfcHJvcGVydHkgKG1ha2VfbnVt YmVyIChwKSwKLQkJCQkJCSAgICAgIFFwb2ludGVyLCB3LT5idWZmZXIpOworCQkJCQkJICAg ICAgUXBvaW50ZXIsIHctPm9iamVjdCk7CiAJCSAgICB9CiAJCX0KIAkgICAgICBlbHNlIGlm IChCVUZGRVJQIChvYmopCkBAIC0yODQxMCwxMiArMjg0MDAsOSBAQAogCiAgIHdoaWxlICh3 ICYmICFGUkFNRV9HQVJCQUdFRF9QIChmKSkKICAgICB7Ci0gICAgICBpZiAoIU5JTFAgKHct PmhjaGlsZCkpCi0JbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wCi0JICB8PSBleHBvc2Vfd2lu ZG93X3RyZWUgKFhXSU5ET1cgKHctPmhjaGlsZCksIHIpOwotICAgICAgZWxzZSBpZiAoIU5J TFAgKHctPnZjaGlsZCkpCi0JbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wCi0JICB8PSBleHBv c2Vfd2luZG93X3RyZWUgKFhXSU5ET1cgKHctPnZjaGlsZCksIHIpOworICAgICAgaWYgKFdJ TkRPV1AgKHctPm9iamVjdCkpCisJbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wCisJICB8PSBl eHBvc2Vfd2luZG93X3RyZWUgKFhXSU5ET1cgKHctPm9iamVjdCksIHIpOwogICAgICAgZWxz ZQogCW1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5fcCB8PSBleHBvc2Vfd2luZG93ICh3LCByKTsK IAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94ZmFjZXMuYycKLS0tIHNyYy94ZmFjZXMuYwky MDEzLTAzLTIwIDA5OjU2OjE5ICswMDAwCisrKyBzcmMveGZhY2VzLmMJMjAxMy0wMy0yMSAw NTowNToyMyArMDAwMApAQCAtNTk2Myw3ICs1OTYzLDcgQEAKIAogICAvKiBXIG11c3QgZGlz cGxheSB0aGUgY3VycmVudCBidWZmZXIuICBXZSBjb3VsZCB3cml0ZSB0aGlzIGZ1bmN0aW9u CiAgICAgIHRvIHVzZSB0aGUgZnJhbWUgYW5kIGJ1ZmZlciBvZiBXLCBidXQgcmlnaHQgbm93 IGl0IGRvZXNuJ3QuICAqLwotICAvKiBlYXNzZXJ0IChYQlVGRkVSICh3LT5idWZmZXIpID09 IGN1cnJlbnRfYnVmZmVyKTsgKi8KKyAgLyogZWFzc2VydCAoWEJVRkZFUiAody0+b2JqZWN0 KSA9PSBjdXJyZW50X2J1ZmZlcik7ICovCiAKICAgWFNFVEZBU1RJTlQgKHBvc2l0aW9uLCBw b3MpOwogCkBAIC01OTczLDkgKzU5NzMsOSBAQAogCiAgIC8qIEdldCB0aGUgYGZhY2UnIG9y IGBtb3VzZV9mYWNlJyB0ZXh0IHByb3BlcnR5IGF0IFBPUywgYW5kCiAgICAgIGRldGVybWlu ZSB0aGUgbmV4dCBwb3NpdGlvbiBhdCB3aGljaCB0aGUgcHJvcGVydHkgY2hhbmdlcy4gICov Ci0gIHByb3AgPSBGZ2V0X3RleHRfcHJvcGVydHkgKHBvc2l0aW9uLCBwcm9wbmFtZSwgdy0+ YnVmZmVyKTsKKyAgcHJvcCA9IEZnZXRfdGV4dF9wcm9wZXJ0eSAocG9zaXRpb24sIHByb3Bu YW1lLCB3LT5vYmplY3QpOwogICBYU0VURkFTVElOVCAobGltaXQxLCAobGltaXQgPCBlbmRw b3MgPyBsaW1pdCA6IGVuZHBvcykpOwotICBlbmQgPSBGbmV4dF9zaW5nbGVfcHJvcGVydHlf Y2hhbmdlIChwb3NpdGlvbiwgcHJvcG5hbWUsIHctPmJ1ZmZlciwgbGltaXQxKTsKKyAgZW5k ID0gRm5leHRfc2luZ2xlX3Byb3BlcnR5X2NoYW5nZSAocG9zaXRpb24sIHByb3BuYW1lLCB3 LT5vYmplY3QsIGxpbWl0MSk7CiAgIGlmIChJTlRFR0VSUCAoZW5kKSkKICAgICBlbmRwb3Mg PSBYSU5UIChlbmQpOwogCkBAIC02MDcxLDcgKzYwNzEsNyBAQAogCiAgIC8qIFcgbXVzdCBk aXNwbGF5IHRoZSBjdXJyZW50IGJ1ZmZlci4gIFdlIGNvdWxkIHdyaXRlIHRoaXMgZnVuY3Rp b24KICAgICAgdG8gdXNlIHRoZSBmcmFtZSBhbmQgYnVmZmVyIG9mIFcsIGJ1dCByaWdodCBu b3cgaXQgZG9lc24ndC4gICovCi0gIC8qIGVhc3NlcnQgKFhCVUZGRVIgKHctPmJ1ZmZlcikg PT0gY3VycmVudF9idWZmZXIpOyAqLworICAvKiBlYXNzZXJ0IChYQlVGRkVSICh3LT5vYmpl Y3QpID09IGN1cnJlbnRfYnVmZmVyKTsgKi8KIAogICBYU0VURkFTVElOVCAocG9zaXRpb24s IHBvcyk7CiAKQEAgLTYwODEsOSArNjA4MSw5IEBACiAKICAgLyogR2V0IHRoZSBgZmFjZScg b3IgYG1vdXNlX2ZhY2UnIHRleHQgcHJvcGVydHkgYXQgUE9TLCBhbmQKICAgICAgZGV0ZXJt aW5lIHRoZSBuZXh0IHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLiAg Ki8KLSAgcHJvcCA9IEZnZXRfdGV4dF9wcm9wZXJ0eSAocG9zaXRpb24sIHByb3BuYW1lLCB3 LT5idWZmZXIpOworICBwcm9wID0gRmdldF90ZXh0X3Byb3BlcnR5IChwb3NpdGlvbiwgcHJv cG5hbWUsIHctPm9iamVjdCk7CiAgIFhTRVRGQVNUSU5UIChsaW1pdDEsIChsaW1pdCA8IGVu ZHBvcyA/IGxpbWl0IDogZW5kcG9zKSk7Ci0gIGVuZCA9IEZuZXh0X3NpbmdsZV9wcm9wZXJ0 eV9jaGFuZ2UgKHBvc2l0aW9uLCBwcm9wbmFtZSwgdy0+YnVmZmVyLCBsaW1pdDEpOworICBl bmQgPSBGbmV4dF9zaW5nbGVfcHJvcGVydHlfY2hhbmdlIChwb3NpdGlvbiwgcHJvcG5hbWUs IHctPm9iamVjdCwgbGltaXQxKTsKICAgaWYgKElOVEVHRVJQIChlbmQpKQogICAgIGVuZHBv cyA9IFhJTlQgKGVuZCk7CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMveGZucy5jJwotLS0g c3JjL3hmbnMuYwkyMDEzLTAzLTIwIDExOjI5OjM3ICswMDAwCisrKyBzcmMveGZucy5jCTIw MTMtMDMtMjEgMDU6MDU6MjMgKzAwMDAKQEAgLTUwNDMsNyArNTA0Myw3IEBACiAKICAgLyog RGlzcGxheSB0aGUgdG9vbHRpcCB0ZXh0IGluIGEgdGVtcG9yYXJ5IGJ1ZmZlci4gICovCiAg IG9sZF9idWZmZXIgPSBjdXJyZW50X2J1ZmZlcjsKLSAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8x IChYQlVGRkVSIChYV0lORE9XIChGUkFNRV9ST09UX1dJTkRPVyAoZikpLT5idWZmZXIpKTsK KyAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSIChYV0lORE9XIChGUkFNRV9ST09U X1dJTkRPVyAoZikpLT5vYmplY3QpKTsKICAgYnNldF90cnVuY2F0ZV9saW5lcyAoY3VycmVu dF9idWZmZXIsIFFuaWwpOwogICBjbGVhcl9nbHlwaF9tYXRyaXggKHctPmRlc2lyZWRfbWF0 cml4KTsKICAgY2xlYXJfZ2x5cGhfbWF0cml4ICh3LT5jdXJyZW50X21hdHJpeCk7Cgo9PT0g bW9kaWZpZWQgZmlsZSAnc3JjL3htZW51LmMnCi0tLSBzcmMveG1lbnUuYwkyMDEzLTAxLTE3 IDA2OjI5OjQwICswMDAwCisrKyBzcmMveG1lbnUuYwkyMDEzLTAzLTIxIDA1OjA1OjIzICsw MDAwCkBAIC05NzYsNyArOTc2LDcgQEAKICAgICAgIGlmICghIG1lbnViYXJfd2lkZ2V0KQog CXByZXZpb3VzX21lbnVfaXRlbXNfdXNlZCA9IDA7CiAKLSAgICAgIGJ1ZmZlciA9IFhXSU5E T1cgKEZSQU1FX1NFTEVDVEVEX1dJTkRPVyAoZikpLT5idWZmZXI7CisgICAgICBidWZmZXIg PSBYV0lORE9XIChGUkFNRV9TRUxFQ1RFRF9XSU5ET1cgKGYpKS0+b2JqZWN0OwogICAgICAg c3BlY2JpbmQgKFFpbmhpYml0X3F1aXQsIFF0KTsKICAgICAgIC8qIERvbid0IGxldCB0aGUg ZGVidWdnZXIgc3RlcCBpbnRvIHRoaXMgY29kZQogCSBiZWNhdXNlIGl0IGlzIG5vdCByZWVu dHJhbnQuICAqLwoK --------------080102020802020500060203--