From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.bugs Subject: bug#22873: #22873 (multiple fake cursors); and, #17684 (crosshairs). Date: Tue, 17 Jul 2018 12:09:18 -0700 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Tue_Jul_17_12:09:17_2018-1" X-Trace: blaine.gmane.org 1531854629 1589 195.159.176.226 (17 Jul 2018 19:10:29 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 17 Jul 2018 19:10:29 +0000 (UTC) Cc: 17684@debbugs.gnu.org, 22873@debbugs.gnu.org To: Eli Zaretskii , Marcin Borkowski , Richard Stallman , John Wiegley Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jul 17 21:10:24 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ffVMX-0000CG-SN for geb-bug-gnu-emacs@m.gmane.org; Tue, 17 Jul 2018 21:10:19 +0200 Original-Received: from localhost ([::1]:60983 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffVOe-00040D-In for geb-bug-gnu-emacs@m.gmane.org; Tue, 17 Jul 2018 15:12:28 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59391) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffVOK-0003vW-Co for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2018 15:12:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ffVOF-00068E-SV for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2018 15:12:08 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:40694) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ffVOE-00066R-Ty for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2018 15:12:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ffVOE-0004Tj-OZ for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2018 15:12:02 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: Resent-From: Keith David Bershatsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 17 Jul 2018 19:12:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 22873 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 22873-submit@debbugs.gnu.org id=B22873.153185468217138 (code B ref 22873); Tue, 17 Jul 2018 19:12:02 +0000 Original-Received: (at 22873) by debbugs.gnu.org; 17 Jul 2018 19:11:22 +0000 Original-Received: from localhost ([127.0.0.1]:45706 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ffVNZ-0004SG-Qr for submit@debbugs.gnu.org; Tue, 17 Jul 2018 15:11:21 -0400 Original-Received: from gateway20.websitewelcome.com ([192.185.69.18]:26459) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ffVNX-0004Rz-PW for 22873@debbugs.gnu.org; Tue, 17 Jul 2018 15:11:20 -0400 Original-Received: from cm15.websitewelcome.com (cm15.websitewelcome.com [100.42.49.9]) by gateway20.websitewelcome.com (Postfix) with ESMTP id 114E1400F06CA for <22873@debbugs.gnu.org>; Tue, 17 Jul 2018 14:11:19 -0500 (CDT) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id fVLdfDKu4bXuJfVLwfLCE9; Tue, 17 Jul 2018 14:11:18 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lawlist.com ; s=default; h=Content-Type:MIME-Version:Subject:Cc:To:From:Message-ID:Date: Sender:Reply-To:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=jH79HZVb/AXIcDwjcz+t5f7Jw7e9WhD3/iwDCuf4Bz0=; b=g/A+19iP0s+3V52+BnwFCAjphP SBT51E5cjX1dXRQJ4ZHbeuFq7ucstSorwhHNjDk62xOiepjfww3NYnhGmebOD2d/v+EuIzTN2bX5k PCy4qsvzX5udRcbqE32svyu0LT/Ytcs1GCYi8jYgXILSEX2aQz/RX3CQQSTh19RTnaQ6/BquEJEI/ 5Q8aocCkLq3jOLa9PwhUV2d2l0OB8mgNN6vNz2pJl/T0hSJ+qfUtQMDgzmYrEc31D84yYAj3tha9L 3o8LUsekXrs63xI1UVJrJAKWNKi0aQObsutQv0njVtX+8O1DBLpx5K6te1Qygv9+mNY7sTPr3YgYZ s9nbtyeg==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:51669 helo=server.local) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.91) (envelope-from ) id 1ffVLb-004GC8-EH; Tue, 17 Jul 2018 14:09:20 -0500 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lawlist.com X-BWhitelist: no X-Source-IP: 45.48.239.195 X-Source-L: No X-Exim-ID: 1ffVLb-004GC8-EH X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.local) [45.48.239.195]:51669 X-Source-Auth: lawlist X-Email-Count: 2 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:148618 Archived-At: --Multipart_Tue_Jul_17_12:09:17_2018-1 Content-Type: text/plain; charset=US-ASCII Proof concept patch version 013. Changes include, but are not limited to: - The previous problem with the speed of drawing multiple fake cursors on Emacs for Windows (which occurred with patch version 012) was caused by a plethora of useful debugging messages being sent to STDERR, which caused a tremendous slow down even when launching runemacs.exe (i.e., not the terminal). [Solution: turn off STDERR debugging messages when not needed.] - Debugging messages to STDERR is now controlled by the variable mc-stderr (non-nil for ON, and nil for OFF). - Miscellaneous cleanup of unused variables in various functions. - Minor bug fixes. - Reorganized/grouped sections within mc_move_it [MULTIPLE_CURSORS, HORIZONTAL_RULER, VERTICAL_RULER] and added more debugging details to STDERR. INSTALLATION: 1. Download a current version of Emacs master branch. 2. Reset the repository to 07/07/2018: git reset --hard 98463bed07ecc9057094928ffdc2321eaaf3ab52 3. Apply the attached patch from the root repository directory. 4. Build a GUI version of Emacs: X11, NS, or Windows. 5. To try out built-in fake cursors with Magnar Sveen's library (multiple-cursors), install that package first. 6. Load or evaluate the contents of crosshairs.el (attached), which includes code modifying a couple of functions used by Magnar Sveen's library. 7. To try out the crosshairs feature, open a simple buffer (nothing fancy, just code or text) and type: M-x +-mode 8. To see an example of crosshairs playing nicely with tab stretches, open up something like simple.el and type: M-x +-mode. 9. To see an example of a variety of built-in cursor styles and widths, type: M-x mc-test This is still a work in progress ... --Multipart_Tue_Jul_17_12:09:17_2018-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="patch_013.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvZmFjZXMuZWwgYi9saXNwL2ZhY2VzLmVsCmluZGV4IDE4YjgyMWEu LjYxNDIwNWIgMTAwNjQ0Ci0tLSBhL2xpc3AvZmFjZXMuZWwKKysrIGIvbGlzcC9mYWNlcy5lbApA QCAtMjUwMiw2ICsyNTAyLDMzIEBAIHVud2FudGVkIGVmZmVjdHMuIgogICA6Z3JvdXAgJ2Jhc2lj LWZhY2VzCiAgIDpncm91cCAnZGlzcGxheS1saW5lLW51bWJlcnMpCiAKKworOzs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Cis7OzsgTXVsdGlwbGUgQ3Vyc29ycworCisoZGVmZmFjZSArLXZlcnRpY2Fs LWJhci1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQorICAiRmFjZSBmb3IgYCst dmVydGljYWwtYmFyLWZhY2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuIgorICA6Z3JvdXAgJystbW9k ZSkKKworKGRlZmZhY2UgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1mYWNlCisgICcoKHQgKDpmb3Jl Z3JvdW5kICJ5ZWxsb3ciKSkpCisgICJGYWNlIGZvciBgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1m YWNlJy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNl ICstb2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJyZWQiKSkp CisgICJGYWNlIGZvciBgKy1vZGQtbnVtYmVyZWQtY29sdW1uLWZhY2UnLiAgVXNlZCBpbiBgeGRp c3AuYycuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1iZXlvbmQtZmlsbC1jb2x1 bW4tZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1i ZXlvbmQtZmlsbC1jb2x1bW4tZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAn Ky1tb2RlKQorCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKworCiAoZGVmZmFjZSBlc2NhcGUt Z2x5cGgKICAgJygoKChiYWNrZ3JvdW5kIGRhcmspKSA6Zm9yZWdyb3VuZCAiY3lhbiIpCiAgICAg OzsgU2VlIHRoZSBjb21tZW50IGluIG1pbmlidWZmZXItcHJvbXB0IGZvcgpkaWZmIC0tZ2l0IGEv c3JjL2J1ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IDI0NGMxODUuLjE3Y2ZjYjAgMTAwNjQ0 Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTUxMTksNiArNTExOSwy MCBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lkKQogICBic2V0X2xhc3Rfc2VsZWN0ZWRfd2luZG93 ICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtYWtlX251bWJlciAoMCkpOwogCiAgIGlkeCA9IDE7CisK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAg WFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1jX2dseXBoX2xpc3QpLCBp ZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNy b3NzaGFpcnMpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9j YWxfZmxhZ3MsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIGlkeCk7ICsraWR4OworICBY U0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWlyc192ZXJ0aWNh bF9ydWxlciksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2Nh bF9mbGFncywgbWNfc3RkZXJyKSwgaWR4KTsgKytpZHg7CisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworCisKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1vZGVf bGluZV9mb3JtYXQpLCBpZHgpOyArK2lkeDsKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJf bG9jYWxfZmxhZ3MsIGFiYnJldl9tb2RlKSwgaWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChC VkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBvdmVyd3JpdGVfbW9kZSksIGlkeCk7ICsraWR4OwpA QCAtNTIwMCw2ICs1MjE0LDIwIEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpCiAgIC8qIE11c3Qg ZG8gdGhlc2UgYmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgYnVmZmVyISAqLwogCiAgIC8qIHJlYWwg c2V0dXAgaXMgZG9uZSBpbiBiaW5kaW5ncy5lbCAqLworCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgIGJzZXRfYmx2X21jX2dseXBoX2xpc3Qg KCZidWZmZXJfZGVmYXVsdHMsIFFuaWwpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzICgmYnVmZmVy X2RlZmF1bHRzLCBRbmlsKTsKKyAgYnNldF9ibHZfY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVy ICgmYnVmZmVyX2RlZmF1bHRzLCBRdCk7CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnNfdmVydGljYWxf cnVsZXIgKCZidWZmZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9ibHZfbWNfc3RkZXJyICgmYnVm ZmVyX2RlZmF1bHRzLCBRbmlsKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBi c2V0X21vZGVfbGluZV9mb3JtYXQgKCZidWZmZXJfZGVmYXVsdHMsIGJ1aWxkX3B1cmVfY19zdHJp bmcgKCIlLSIpKTsKICAgYnNldF9oZWFkZXJfbGluZV9mb3JtYXQgKCZidWZmZXJfZGVmYXVsdHMs IFFuaWwpOwogICBic2V0X2FiYnJldl9tb2RlICgmYnVmZmVyX2RlZmF1bHRzLCBRbmlsKTsKQEAg LTU0NDgsNiArNTQ3NiwxOSBAQCBzeW1zX29mX2J1ZmZlciAodm9pZCkKICAgc3RhdGljcHJvICgm UVNGdW5kYW1lbnRhbCk7CiAgIHN0YXRpY3BybyAoJlZidWZmZXJfYWxpc3QpOwogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgIERFRlNZTSAo UW1jX2dseXBoX2xpc3QsICJtYy1nbHlwaC1saXN0Iik7CisgIERFRlNZTSAoUWNyb3NzaGFpcnMs ICJjcm9zc2hhaXJzIik7CisgIERFRlNZTSAoUWNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciwg ImNyb3NzaGFpcnMtaG9yaXpvbnRhbC1ydWxlciIpOworICBERUZTWU0gKFFjcm9zc2hhaXJzX3Zl cnRpY2FsX3J1bGVyLCAiY3Jvc3NoYWlycy12ZXJ0aWNhbC1ydWxlciIpOworICBERUZTWU0gKFFt Y19zdGRlcnIsICJtYy1zdGRlcnIiKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog ICBERUZTWU0gKFFjaG9pY2UsICJjaG9pY2UiKTsKICAgREVGU1lNIChRbGVmdCwgImxlZnQiKTsK ICAgREVGU1lNIChRcmlnaHQsICJyaWdodCIpOwpAQCAtNTQ4NSw2ICs1NTI2LDI5IEBAIHN5bXNf b2ZfYnVmZmVyICh2b2lkKQogICBGcHV0IChRcHJvdGVjdGVkX2ZpZWxkLCBRZXJyb3JfbWVzc2Fn ZSwKIAlidWlsZF9wdXJlX2Nfc3RyaW5nICgiQXR0ZW1wdCB0byBtb2RpZnkgYSBwcm90ZWN0ZWQg ZmllbGQiKSk7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJT T1JTICovCisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJtYy1nbHlwaC1saXN0IiwgJkJWQVIgKGN1 cnJlbnRfYnVmZmVyLCBtY19nbHlwaF9saXN0KSwgUW5pbCwKKyAgICBkb2M6IC8qIEEgYnVmZXIt bG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBtdWx0aXBsZSBjdXJzb3Jz IHRvIGJlIGRpc3BsYXllZAorZHVyaW5nIHRoZSBuZXh0IHJlZGlzcGxheS4gKi8pOworCisgIERF RlZBUl9QRVJfQlVGRkVSICgiY3Jvc3NoYWlycyIsICZCVkFSIChjdXJyZW50X2J1ZmZlciwgY3Jv c3NoYWlycyksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFj dGl2YXRlL2RlYWN0aXZhdGUgY3Jvc3NoYWlycy4gKi8pOworCisgIERFRlZBUl9QRVJfQlVGRkVS ICgiY3Jvc3NoYWlycy1ob3Jpem9udGFsLXJ1bGVyIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBj cm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1s b2NhbCB2YXJpYWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHRoZSBjcm9zc2hhaXJzIGhvcml6 b250YWwgcnVsZXIuICovKTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNyb3NzaGFpcnMtdmVy dGljYWwtcnVsZXIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNyb3NzaGFpcnNfdmVydGljYWxf cnVsZXIpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJpYWJsZSB0byBhY3Rp dmF0ZS9kZWFjdGl2YXRlIHRoZSBjcm9zc2hhaXJzIHZlcnRpY2FsIHJ1bGVyLiAqLyk7CisKKyAg REVGVkFSX1BFUl9CVUZGRVIgKCJtYy1zdGRlcnIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1j X3N0ZGVyciksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFj dGl2YXRlL2RlYWN0aXZhdGUgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyci4gKi8pOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIERFRlZBUl9QRVJfQlVGRkVSICgiaGVhZGVy LWxpbmUtZm9ybWF0IiwKIAkJICAgICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGhlYWRlcl9saW5l X2Zvcm1hdCksCiAJCSAgICAgUW5pbCwKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9i dWZmZXIuaAppbmRleCA4NWI1NjMxLi43ZTAzYmU0IDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmgK KysrIGIvc3JjL2J1ZmZlci5oCkBAIC02NTgsNiArNjU4LDI4IEBAIHN0cnVjdCBidWZmZXIKICAg ICAgY2FjaGUgYXJlIGVuYWJsZWQuICBTZWUgc2VhcmNoLmMsIGluZGVudC5jIGFuZCBiaWRpLmMg Zm9yIGRldGFpbHMuICAqLwogICBMaXNwX09iamVjdCBjYWNoZV9sb25nX3NjYW5zXzsKIAorCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAvKiBU aGUgbmFtZSBvZiBsaXN0IHVzZWQgYnkgbXVsdGlwbGUgY3Vyc29ycyBmb3IgbmV4dCByZWRpc3Bs YXkuICovCisgIExpc3BfT2JqZWN0IG1jX2dseXBoX2xpc3RfOworCisgIC8qIFRoZSBuYW1lIG9m IGxpc3QuICovCisgIExpc3BfT2JqZWN0IGNyb3NzaGFpcnNfOworCisgIC8qIFRoZSBuYW1lIG9m IHRoZSBjcm9zc2hhaXJzIGhvcml6b250YWwgcnVsZXIuICovCisgIExpc3BfT2JqZWN0IGNyb3Nz aGFpcnNfaG9yaXpvbnRhbF9ydWxlcl87CisKKyAgLyogVGhlIG5hbWUgb2YgdGhlIGNyb3NzaGFp cnMgdmVydGljYWwgcnVsZXIuICovCisgIExpc3BfT2JqZWN0IGNyb3NzaGFpcnNfdmVydGljYWxf cnVsZXJfOworCisgIC8qIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBnZW5lcmF0aW5nIHN0ZGVy ciBkZWJ1Z2dpbmcgbWVzc2FnZS4gKi8KKyAgTGlzcF9PYmplY3QgbWNfc3RkZXJyXzsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBJZiB0aGUgd2lkdGggcnVuIGNhY2hlIGlz IGVuYWJsZWQsIHRoaXMgdGFibGUgY29udGFpbnMgdGhlCiAgICAgIGNoYXJhY3RlciB3aWR0aHMg d2lkdGhfcnVuX2NhY2hlIChzZWUgYWJvdmUpIGFzc3VtZXMuICBXaGVuIHdlCiAgICAgIGRvIGEg dGhvcm91Z2ggcmVkaXNwbGF5LCB3ZSBjb21wYXJlIHRoaXMgYWdhaW5zdCB0aGUgYnVmZmVyJ3MK QEAgLTkxOCw2ICs5NDAsNDQgQEAgWEJVRkZFUiAoTGlzcF9PYmplY3QgYSkKIC8qIE1vc3QgY29k ZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzZXQgTGlzcCBmaWVsZHMgaW4gc3RydWN0 CiAgICBidWZmZXIuICAoU29tZSBzZXR0ZXJzIHRoYXQgYXJlIHByaXZhdGUgdG8gYSBzaW5nbGUg LmMgZmlsZSBhcmUKICAgIGRlZmluZWQgYXMgc3RhdGljIGluIHRob3NlIGZpbGVzLikgICovCisK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKK0lO TElORSB2b2lkCitic2V0X2Jsdl9tY19nbHlwaF9saXN0IChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNw X09iamVjdCB2YWwpCit7CisgIGItPm1jX2dseXBoX2xpc3RfID0gdmFsOworfQorCitJTkxJTkUg dm9pZAorYnNldF9ibHZfY3Jvc3NoYWlycyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3Qg dmFsKQoreworICBiLT5jcm9zc2hhaXJzXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRf Ymx2X2Nyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9P YmplY3QgdmFsKQoreworICBiLT5jcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXJfID0gdmFsOwor fQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlciAoc3Ry dWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5jcm9zc2hhaXJzX3ZlcnRp Y2FsX3J1bGVyXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X21jX3N0ZGVyciAo c3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5tY19zdGRlcnJfID0g dmFsOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiBJTkxJTkUgdm9pZAogYnNl dF9iaWRpX3BhcmFncmFwaF9kaXJlY3Rpb24gKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0 IHZhbCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5o CmluZGV4IDIxODBjOWEuLmVmMjY4MmMgMTAwNjQ0Ci0tLSBhL3NyYy9kaXNwZXh0ZXJuLmgKKysr IGIvc3JjL2Rpc3BleHRlcm4uaApAQCAtMjg5OSw3ICsyODk5LDE2IEBAIHN0cnVjdCByZWRpc3Bs YXlfaW50ZXJmYWNlCiAJCQkgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csCiAJCQkg ICAgICBpbnQgeCwgaW50IHksCiAJCQkgICAgICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNv cl90eXBlLAotCQkJICAgICAgaW50IGN1cnNvcl93aWR0aCwgYm9vbCBvbl9wLCBib29sIGFjdGl2 ZV9wKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMg Ki8KKworICAgICAgICAgaW50IGN1cnNvcl93aWR0aCwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9w LAorICAgICAgICAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVjdCBmbGF2b3Ip OworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCiAgIC8qIERyYXcgdmVydGljYWwgYm9y ZGVyIGZvciB3aW5kb3cgVyBmcm9tIChYLFlfMCkgdG8gKFgsWV8xKS4gICovCiAgIHZvaWQgKCpk cmF3X3ZlcnRpY2FsX3dpbmRvd19ib3JkZXIpIChzdHJ1Y3Qgd2luZG93ICp3LApAQCAtMzI4NCw2 ICszMjkzLDE1IEBAIGV4dGVybiB2b2lkIGdldF9mb250X2FzY2VudF9kZXNjZW50IChzdHJ1Y3Qg Zm9udCAqLCBpbnQgKiwgaW50ICopOwogCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKK3ZvaWQg bWNfcG9ydGFsIChzdHJ1Y3Qgd2luZG93ICosIGJvb2wpOworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCiAjaWZkZWYgR0xZUEhfREVCVUcKIGV4dGVybiB2b2lkIGR1bXBfZ2x5cGhfc3Ry aW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopIEVYVEVSTkFMTFlfVklTSUJMRTsKICNlbmRpZgpk aWZmIC0tZ2l0IGEvc3JjL2ZyaW5nZS5jIGIvc3JjL2ZyaW5nZS5jCmluZGV4IDYwNjkxODQuLmUw ZDFlZTAgMTAwNjQ0Ci0tLSBhL3NyYy9mcmluZ2UuYworKysgYi9zcmMvZnJpbmdlLmMKQEAgLTQz Myw2ICs0MzMsMjI2IEBAIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlbXB0eV9saW5lX2JpdHNbXSA9 IHsKICAgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgzYywgMHgw MH07CiAKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzCisK Ky8qICA7OyBBVVRIT1I6ICBOaWtvbGFqIFNjaHVtYWNoZXIgLS0gaHR0cHM6Ly9naXRodWIuY29t L25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCisgICAgKGRlZnVuICstZnJpbmdlLWhlbHBlci1oZXhh ZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKKyAgICAiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0 b3IgdXNhYmxlIGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAnLgorICAgIEVhY2ggc3RyaW5nIGlu IFNUUklOR1MgcmVwcmVzZW50cyBhIGxpbmUgb2YgdGhlIGZyaW5nZSBiaXRtYXAuCisgICAgUGVy aW9kcyAoLikgYXJlIGJhY2tncm91bmQtY29sb3JlZCBwaXhlbDsgWHMgYXJlIGZvcmVncm91bmQt Y29sb3JlZC4gVGhlCisgICAgZnJpbmdlIGJpdG1hcCBhbHdheXMgaXMgYWxpZ25lZCB0byB0aGUg cmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYKKyAgICB3aWR0aCwgb25seSB0aGUgbGVmdCA0 IHBpeGVscyBvZiBhbiA4IHBpeGVsIGJpdG1hcCB3aWxsIGJlIHNob3duLgorICAgIEZvciBleGFt cGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgZGVmaW5lcyBhIGRpYWdvbmFsIGxpbmUuCisgICAgXCgr LWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICBcIlhYLi4uLi4uXCIKKyAgICBcIi4uWFgu Li4uXCIKKyAgICBcIi4uLi5YWC4uXCIKKyAgICBcIi4uLi4uLlhYXCJcKSIKKyAgICAgICh1bmxl c3MgKGNkciBzdHJpbmdzKQorICAgICAgICAoc2V0cSBzdHJpbmdzIChzcGxpdC1zdHJpbmcgKGNh ciBzdHJpbmdzKSAiXG4iKSkpCisgICAgICAoYXBwbHkgJ3ZlY3RvcgorICAgICAgICAobWFwY2Fy CisgICAgICAgICAgKGxhbWJkYSAoc3RyKQorICAgICAgICAgICAgKGxldCAoKG51bSAwKSkKKyAg ICAgICAgICAgICAgKGRvbGlzdCAoYyAoc3RyaW5nLXRvLWxpc3Qgc3RyKSkKKyAgICAgICAgICAg ICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEgYyA/LikgMCAxKSkpKQorICAgICAg ICAgICAgICAoZm9ybWF0ICIlIy14IiBudW0pKSkKKyAgICAgICAgICBzdHJpbmdzKSkpCisqLwor CisvKiAyNAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4Li4uLi4u LiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li54eC4uLiIK KyAgICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li4uLnh4LiIKKyAgICAgICJ4Lnh4eHh4eCIKKyAg ICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Li4uLnh4LiIKKyAgICAgICJ4Li4ueHguLiIKKyAgICAg ICJ4Li54eC4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4 Li4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3ZlcnRpY2FsX2Jhcl9yaWdo dF9hbmdsZV9iaXRzW10gPXsKKyAgMHg4MCwgMHg4MCwgMHg4MCwgMHg5OCwgMHg4YywgMHg4Niwg MHhiZiwKKyAgMHhiZiwgMHg4NiwgMHg4YywgMHg5OCwgMHg4MCwgMHg4MCwgMHg4MH07CisKKy8q IDI1CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4eHh4eHh4Igor ICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLnh4Li54IgorICAg ICAgInguLi54eC54IgorICAgICAgInguLi4ueHh4IgorICAgICAgIngueHh4eHh4IgorICAgICAg IngueHh4eHh4IgorICAgICAgInguLi4ueHh4IgorICAgICAgInguLi54eC54IgorICAgICAgIngu Lnh4Li54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInh4eHh4 eHh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdo dF9hbmdsZV9iaXRzW10gPXsKKyAgMHhmZiwgMHg4MSwgMHg4MSwgMHg5OSwgMHg4ZCwgMHg4Nywg MHhiZiwKKyAgMHhiZiwgMHg4NywgMHg4ZCwgMHg5OSwgMHg4MSwgMHg4MSwgMHhmZn07CisKKy8q IDI2CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4eHh4eHh4Igor ICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAg ICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAg InguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgIngu Li4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInh4eHh4 eHh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfaG9sbG93X3JlY3RhbmdsZV9iaXRz W10gPXsKKyAgMHhmZiwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwKKyAgMHg4 MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHhmZn07CisKKy8qIDI3CisgICAgKCst ZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4u Li4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4u IgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgor ICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAg ICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIikKKyovCitz dGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdmVydGljYWxfYmFyX2JpdHNbXSA9eworICAweDgwLCAw eDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLAorICAweDgwLCAweDgwLCAweDgwLCAw eDgwLCAweDgwLCAweDgwLCAweDgwfTsKKworLyogMjgKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhl eGFkZWNpbWFsCisgICAgICAieHguLi4uLi4iCisgICAgICAiLnh4Li4uLi4iCisgICAgICAiLi54 eC4uLi4iCisgICAgICAiLi4ueHguLi4iCisgICAgICAiLi4uLnh4Li4iCisgICAgICAiLi4uLi54 eC4iCisgICAgICAiLi4uLi4ueHgiCisgICAgICAiLi4uLi54eC4iCisgICAgICAiLi4uLnh4Li4i CisgICAgICAiLi4ueHguLi4iCisgICAgICAiLi54eC4uLi4iCisgICAgICAiLnh4Li4uLi4iCisg ICAgICAieHguLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19yaWdodF9hbmds ZV9iaXRzW10gPXsKKyAgMHhjMCwgMHg2MCwgMHgzMCwgMHgxOCwgMHhjLCAweDYsIDB4MywgMHg2 LCAweGMsIDB4MTgsIDB4MzAsIDB4NjAsIDB4YzB9OworCisvKiAyOQorICAgICgrLWZyaW5nZS1o ZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eC4uLi4uLiIKKyAgICAgICJ4eC4uLi4uLiIKKyAg ICAgICIgeHguLi4uLiIKKyAgICAgICIueHguLi4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAgICAg ICIuLnh4Li4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIu Li4ueHguLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi4uLnh4LiIKKyAgICAgICIuLi4u Lnh4LiIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIpCisqLworc3RhdGljIHVu c2lnbmVkIHNob3J0IG1jX2JhY2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwgMHhlMCwg MHg2MCwgMHgzMCwgMHgzMCwgMHgxOCwgMHgxOCwgMHhjLCAweGMsIDB4NiwgMHg2LCAweDMsIDB4 M307CisKKy8qIDMwCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4 Li4uLi4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4eC4uLi4uIgorICAgICAgInh4eC4u Li4uIgorICAgICAgIngueHguLi4uIgorICAgICAgIngueHguLi4uIgorICAgICAgInguLnh4Li4u IgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4uIgorICAgICAgInguLi54eC4uIgor ICAgICAgInguLi4ueHguIgorICAgICAgInguLi4ueHguIgorICAgICAgInguLi4uLnh4IgorICAg ICAgInguLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdmVydGljYWxfYmFy X2JhY2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwgMHhlMCwgMHhlMCwgMHhiMCwgMHhi MCwgMHg5OCwKKyAgMHg5OCwgMHg4YywgMHg4YywgMHg4NiwgMHg4NiwgMHg4MywgMHg4M307CisK Ky8qIDMxCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi54eHh4eHgu IgorICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4uIgor ICAgICAgIi54eHgueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAg ICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAg Ii4uLngueC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfcGlsY3Jvd19iaXRzW10g PXsKKyAgMHg3ZSwgMHhmNCwgMHhmNCwgMHhmNCwgMHg3NCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgx NCwgMHgxNCwgMHgxNH07CisKKy8qIDMyCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgInh4Lnh4Li4uIgorICAgICAgIi54eC54eC4uIgorICAgICAgIi4ueHgueHguIgor ICAgICAgIi4uLnh4Lnh4IgorICAgICAgIi4ueHgueHguIgorICAgICAgIi54eC54eC4uIgorICAg ICAgInh4Lnh4Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfcmlnaHRfZG91Ymxl X2FuZ2xlX2JpdHNbXSA9eworICAweGQ4LCAweDZjLCAweDM2LCAweDFiLCAweDM2LCAweDZjLCAw eGQ4fTsKKworLyogMzMKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAi Li54eHh4Li4iCisgICAgICAiLnh4eHh4eC4iCisgICAgICAieC4ueHguLngiCisgICAgICAieC4u eHguLngiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieHguLi4ueHgiCisgICAgICAieHh4Li54 eHgiCisgICAgICAiLnh4eHh4eC4iCisgICAgICAiLi54eHh4Li4iKQorKi8KK3N0YXRpYyB1bnNp Z25lZCBzaG9ydCBtY19zbWlsZXlfZmFjZV9iaXRzW10gPXsKKyAgMHgzYywgMHg3ZSwgMHg5OSwg MHg5OSwgMHhmZiwgMHhjMywgMHhlNywgMHg3ZSwgMHgzY307CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKICNkZWZpbmUgQllURVNfUEVSX0JJVE1BUF9ST1cgIChzaXplb2YgKHVuc2ln bmVkIHNob3J0KSkKICNkZWZpbmUgU1RBTkRBUkRfQklUTUFQX0hFSUdIVChiaXRzKSAoc2l6ZW9m IChiaXRzKS9CWVRFU19QRVJfQklUTUFQX1JPVykKICNkZWZpbmUgRlJCSVRTKGJpdHMpICBiaXRz LCBTVEFOREFSRF9CSVRNQVBfSEVJR0hUIChiaXRzKQpAQCAtNDY2LDYgKzY4NiwzNSBAQCBzdGF0 aWMgc3RydWN0IGZyaW5nZV9iaXRtYXAgc3RhbmRhcmRfYml0bWFwc1tdID0KICAgeyBGUkJJVFMg KHZlcnRpY2FsX2Jhcl9iaXRzKSwgICAgICAgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9 LAogICB7IEZSQklUUyAoaG9yaXpvbnRhbF9iYXJfYml0cyksICAgICA4LCAwLCBBTElHTl9CSVRN QVBfQk9UVE9NLCAwIH0sCiAgIHsgRlJCSVRTIChlbXB0eV9saW5lX2JpdHMpLCAgICAgICAgIDgs IDMsIEFMSUdOX0JJVE1BUF9UT1AsICAgIDAgfSwKKworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAvKiAyNCAqLworICB7IEZSQklUUyAobWNf dmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlX2JpdHMpLCAgICAgOCwgMCwgQUxJR05fQklUTUFQX0NF TlRFUiwgMCB9LAorICAvKiAyNSAqLworICB7IEZSQklUUyAobWNfaG9sbG93X3JlY3RhbmdsZV9y aWdodF9hbmdsZV9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9LAorICAvKiAy NiAqLworICB7IEZSQklUUyAobWNfaG9sbG93X3JlY3RhbmdsZV9iaXRzKSwgICAgICAgICAgICAg OCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9LAorICAvKiAyNyAqLworICB7IEZSQklUUyAo bWNfdmVydGljYWxfYmFyX2JpdHMpLCAgICAgICAgICAgICAgICAgOCwgMCwgQUxJR05fQklUTUFQ X0NFTlRFUiwgMCB9LAorICAvKiAyOCAqLworICB7IEZSQklUUyAobWNfcmlnaHRfYW5nbGVfYml0 cyksICAgICAgICAgICAgICAgICAgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9LAorICAv KiAyOSAqLworICB7IEZSQklUUyAobWNfYmFja3NsYXNoX2JpdHMpLCAgICAgICAgICAgICAgICAg ICAgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9LAorICAvKiAzMCAqLworICB7IEZSQklU UyAobWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaF9iaXRzKSwgICAgICAgOCwgMCwgQUxJR05fQklU TUFQX0NFTlRFUiwgMCB9LAorICAvKiAzMSAqLworICB7IEZSQklUUyAobWNfcGlsY3Jvd19iaXRz KSwgICAgICAgICAgICAgICAgICAgICAgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9LAor ICAvKiAzMiAqLworICB7IEZSQklUUyAobWNfcmlnaHRfZG91YmxlX2FuZ2xlX2JpdHMpLCAgICAg ICAgICAgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMCB9LAorICAvKiAzMyAqLworICB7IEZS QklUUyAobWNfc21pbGV5X2ZhY2VfYml0cyksICAgICAgICAgICAgICAgICAgOCwgMCwgQUxJR05f QklUTUFQX0NFTlRFUiwgMCB9LAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiB9Owog CiAjZGVmaW5lIE5PX0ZSSU5HRV9CSVRNQVAgMApAQCAtMTcxNSw2ICsxOTY0LDc3IEBAIElmIG5p bCwgYWxzbyBjb250aW51ZSBsaW5lcyB3aGljaCBhcmUgZXhhY3RseSBhcyB3aWRlIGFzIHRoZSB3 aW5kb3cuICAqLyk7CiAgIERFRlZBUl9MSVNQICgiZnJpbmdlLWJpdG1hcHMiLCBWZnJpbmdlX2Jp dG1hcHMsCiAgICAgZG9jOiAvKiBMaXN0IG9mIGZyaW5nZSBiaXRtYXAgc3ltYm9scy4gICovKTsK ICAgVmZyaW5nZV9iaXRtYXBzID0gUW5pbDsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAvKiAoZ2V0ICdlbXB0eS1saW5lICdmcmluZ2Up ID0+IDIzID0+IHRoZSBsYXN0IHN0YW5kYXJkLWJpdG1hcCBiZWZvcmUgdGhpcyBvbmUuCisgIFNl ZSBgZnJpbmdlLmVsYC4gKi8KKworICAvKiAyNCAqLworICBERUZTWU0gKFFtY192ZXJ0aWNhbF9i YXJfcmlnaHRfYW5nbGUsICIrLXZlcnRpY2FsLWJhci1yaWdodC1hbmdsZSIpOworICBWZnJpbmdl X2JpdG1hcHMgPSBGY29ucyAoUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZSwgVmZyaW5nZV9i aXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZSwgUWZyaW5nZSwg bWFrZV9udW1iZXIgKDI0KSk7CisgIC8qIChnZXQgJystdmVydGljYWwtYmFyLXJpZ2h0LWFuZ2xl ICdmcmluZ2UpID0+IDI0ICovCisKKyAgLyogMjUgKi8KKyAgREVGU1lNIChRbWNfaG9sbG93X3Jl Y3RhbmdsZV9yaWdodF9hbmdsZSwgIistaG9sbG93LXJlY3RhbmdsZS1yaWdodC1hbmdsZSIpOwor ICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYW5n bGUsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0 X2FuZ2xlLCBRZnJpbmdlLCBtYWtlX251bWJlciAoMjUpKTsKKyAgLyogKGdldCAnKy1ob2xsb3ct cmVjdGFuZ2xlLXJpZ2h0LWFuZ2xlICdmcmluZ2UpID0+IDI1ICovCisKKyAgLyogMjYgKi8KKyAg REVGU1lNIChRbWNfaG9sbG93X3JlY3RhbmdsZSwgIistaG9sbG93LXJlY3RhbmdsZSIpOworICBW ZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX2hvbGxvd19yZWN0YW5nbGUsIFZmcmluZ2VfYml0 bWFwcyk7CisgIEZwdXQgKFFtY19ob2xsb3dfcmVjdGFuZ2xlLCBRZnJpbmdlLCBtYWtlX251bWJl ciAoMjYpKTsKKyAgLyogKGdldCAnKy1ob2xsb3ctcmVjdGFuZ2xlICdmcmluZ2UpID0+IDI2ICov CisKKyAgLyogMjcgKi8KKyAgREVGU1lNIChRbWNfdmVydGljYWxfYmFyLCAiKy12ZXJ0aWNhbC1i YXIiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXIsIFZmcmlu Z2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0aWNhbF9iYXIsIFFmcmluZ2UsIG1ha2VfbnVt YmVyICgyNykpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJhciAnZnJpbmdlKSA9PiAyNyAqLwor CisgIC8qIDI4ICovCisgIERFRlNZTSAoUW1jX3JpZ2h0X2FuZ2xlLCAiKy1yaWdodC1hbmdsZSIp OworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3JpZ2h0X2FuZ2xlLCBWZnJpbmdlX2Jp dG1hcHMpOworICBGcHV0IChRbWNfcmlnaHRfYW5nbGUsIFFmcmluZ2UsIG1ha2VfbnVtYmVyICgy OCkpOworICAvKiAoZ2V0ICcrLXJpZ2h0LWFuZ2xlICdmcmluZ2UpID0+IDI4ICovCisKKyAgLyog MjkgKi8KKyAgREVGU1lNIChRbWNfYmFja3NsYXNoLCAiKy1iYWNrc2xhc2giKTsKKyAgVmZyaW5n ZV9iaXRtYXBzID0gRmNvbnMgKFFtY19iYWNrc2xhc2gsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZw dXQgKFFtY19iYWNrc2xhc2gsIFFmcmluZ2UsIG1ha2VfbnVtYmVyICgyOSkpOworICAvKiAoZ2V0 ICcrLWJhY2tzbGFzaCAnZnJpbmdlKSA9PiAyOSAqLworCisgIC8qIDMwICovCisgIERFRlNZTSAo UW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gsICIrLXZlcnRpY2FsLWJhci1iYWNrc2xhc2giKTsK KyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCBW ZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaCwgUWZy aW5nZSwgbWFrZV9udW1iZXIgKDMwKSk7CisgIC8qIChnZXQgJystdmVydGljYWwtYmFyLWJhY2tz bGFzaCAnZnJpbmdlKSA9PiAzMCAqLworCisgIC8qIDMxICovCisgIERFRlNZTSAoUW1jX3BpbGNy b3csICIrLXBpbGNyb3ciKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19waWxjcm93 LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfcGlsY3JvdywgUWZyaW5nZSwgbWFrZV9u dW1iZXIgKDMxKSk7CisgIC8qIChnZXQgJystcGlsY3JvdyAnZnJpbmdlKSA9PiAzMSAqLworCisg IC8qIDMyICovCisgIERFRlNZTSAoUW1jX3JpZ2h0X2RvdWJsZV9hbmdsZSwgIistcmlnaHQtZG91 YmxlLWFuZ2xlIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfcmlnaHRfZG91Ymxl X2FuZ2xlLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfcmlnaHRfZG91YmxlX2FuZ2xl LCBRZnJpbmdlLCBtYWtlX251bWJlciAoMzIpKTsKKyAgLyogKGdldCAnKy1yaWdodC1kb3VibGUt YW5nbGUgJ2ZyaW5nZSkgPT4gMzIgKi8KKworICAvKiAzMyAqLworICBERUZTWU0gKFFtY19zbWls ZXlfZmFjZSwgIistc21pbGV5LWZhY2UiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFt Y19zbWlsZXlfZmFjZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NtaWxleV9mYWNl LCBRZnJpbmdlLCBtYWtlX251bWJlciAoMzMpKTsKKyAgLyogKGdldCAnKy1zbWlsZXktZmFjZSAn ZnJpbmdlKSA9PiAzMyAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiB9CiAKIC8q IEdhcmJhZ2UgY29sbGVjdGlvbiBob29rICovCmRpZmYgLS1naXQgYS9zcmMva2V5Ym9hcmQuYyBi L3NyYy9rZXlib2FyZC5jCmluZGV4IGFhNThlMjYuLjhmZDNhYzggMTAwNjQ0Ci0tLSBhL3NyYy9r ZXlib2FyZC5jCisrKyBiL3NyYy9rZXlib2FyZC5jCkBAIC0xMjI0LDYgKzEyMjQsMjkgQEAgc3Rh dGljIGludCByZWFkX2tleV9zZXF1ZW5jZSAoTGlzcF9PYmplY3QgKiwgTGlzcF9PYmplY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sLCBib29sLCBib29sLCBib29sKTsKIHN0 YXRpYyB2b2lkIGFkanVzdF9wb2ludF9mb3JfcHJvcGVydHkgKHB0cmRpZmZfdCwgYm9vbCk7CiAK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKK3N0 YXRpYyB2b2lkCitrYmRfbWNfYWN0aXZhdGVfY3Vyc29ycyAodm9pZCkKK3sKKyAgc3RydWN0IHdp bmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRfd2luZG93KTsKKyAgdy0+bWMu ZHJhd19nbHlwaF9jdXJzb3IgPSB0cnVlOworICB3LT5tYy5lcmFzZV9nbHlwaF9jdXJzb3IgPSB0 cnVlOworfQorCitzdGF0aWMgdm9pZAora2JkX21jX2FjdGl2YXRlX2Nyb3NzaGFpcnMgKHZvaWQp Cit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHNlbGVjdGVkX3dp bmRvdyk7CisgIHctPm1jLmRyYXdfY3Jvc3NoYWlycyA9IHRydWU7CisgIHctPm1jLmVyYXNlX2Ny b3NzaGFpcnMgPSB0cnVlOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiBMaXNw X09iamVjdAogY29tbWFuZF9sb29wXzEgKHZvaWQpCiB7CkBAIC0xNDE5LDYgKzE0NDIsMTUgQEAg Y29tbWFuZF9sb29wXzEgKHZvaWQpCiAgICAgICBWcmVhbF90aGlzX2NvbW1hbmQgPSBjbWQ7CiAg ICAgICBzYWZlX3J1bl9ob29rcyAoUXByZV9jb21tYW5kX2hvb2spOwogCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgICBrYmRfbWNfYWN0 aXZhdGVfY3Vyc29ycyAoKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAg YWxyZWFkeV9hZGp1c3RlZCA9IDA7CiAKICAgICAgIGlmIChOSUxQIChWdGhpc19jb21tYW5kKSkK ZGlmZiAtLWdpdCBhL3NyYy9uc3Rlcm0ubSBiL3NyYy9uc3Rlcm0ubQppbmRleCBhMTU2ODRkLi4w ZWU3Y2JmIDEwMDY0NAotLS0gYS9zcmMvbnN0ZXJtLm0KKysrIGIvc3JjL25zdGVybS5tCkBAIC0x MTg4LDEwICsxMTg4LDE0IEBAIHN0YXRpYyBOU1JlY3QgY29uc3RyYWluX2ZyYW1lX3JlY3QoTlNS ZWN0IGZyYW1lUmVjdCwgYm9vbCBpc0Z1bGxzY3JlZW4pCiAgICAgewogICAgICAgYmxvY2tfaW5w dXQgKCk7CiAKLSAgICAgIGlmIChjdXJzb3Jfb25fcCkKLQlkaXNwbGF5X2FuZF9zZXRfY3Vyc29y ICh3LCAxLAotCQkJCXctPm91dHB1dF9jdXJzb3IuaHBvcywgdy0+b3V0cHV0X2N1cnNvci52cG9z LAotCQkJCXctPm91dHB1dF9jdXJzb3IueCwgdy0+b3V0cHV0X2N1cnNvci55KTsKKworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAgIG1jX3Bv cnRhbCAodywgY3Vyc29yX29uX3ApOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCiAg ICAgICBpZiAoZHJhd193aW5kb3dfZnJpbmdlcyAodywgMSkpCiAJewpAQCAtMzE3Miw3ICszMTc2 LDE3IEBAIHNvIHNvbWUga2V5IHByZXNzZXMgKFRBQikgYXJlIHN3YWxsb3dlZCBieSB0aGUgc3lz dGVtLiAgKi8KIHN0YXRpYyB2b2lkCiBuc19kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVjdCB3aW5k b3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdywKIAkJICAgICAgIGludCB4LCBpbnQg eSwgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZSwKLQkJICAgICAgIGludCBjdXJz b3Jfd2lkdGgsIGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKKworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBpbnQgY3Vyc29yX3dpZHRoLCBi b29sIG9uX3AsIGJvb2wgYWN0aXZlX3AsCisgIExpc3BfT2JqZWN0IGNvbG9yX3ZlY3RvciwgTGlz cF9PYmplY3QgZmxhdm9yKQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICAgICBFeHRlcm5hbCBjYWxsIChSSUYpOiBkcmF3IGN1cnNvci4KICAg ICAgTm90ZSB0aGF0IENVUlNPUl9XSURUSCBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIChoKWJhciBj dXJzb3JzLgpAQCAtMzIwNiw4ICszMjIwLDI5IEBAIE5vdGUgdGhhdCBDVVJTT1JfV0lEVEggaXMg bWVhbmluZ2Z1bCBvbmx5IGZvciAoaCliYXIgY3Vyc29ycy4KIAogICBpZiAoKHBoeXNfY3Vyc29y X2dseXBoID0gZ2V0X3BoeXNfY3Vyc29yX2dseXBoICh3KSkgPT0gTlVMTCkKICAgICB7Ci0gICAg ICBpZiAoZ2x5cGhfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCi0gICAgICAgICAgJiYg dy0+cGh5c19jdXJzb3IuaHBvcyA+PSBnbHlwaF9yb3ctPnVzZWRbVEVYVF9BUkVBXSkKKworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAg LyogVGhpcyBtb2RpZmljYXRpb24gZW5hYmxlcyBwbGFjZW1lbnQgb2YgdGhlIGN1cnNvci1pbi1m cmluZ2UgYml0bWFwIHdoZW4KKyAgICAgIHRoZSB3aW5kb3ctd2lkdGggaXMgc2xpZ2h0bHkgbGVz cyB0aGFuIGBnbHlwaF9yb3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3BgLgorICAgICAgVGhp cyBtb2RpZmljYXRpb24gYWxzbyBwcmV2ZW50cyBkcmF3aW5nIHRoZSByZWFsIGN1cnNvciBvbiB0 aGUgZnJpbmdlIChpbnN0ZWFkCisgICAgICBvZiB1c2luZyB0aGUgY3Vyc29yLWluLWZyaW5nZSBi aXRtYXApIGluIHRoZSBhYm92ZS1tZW50aW9uZWQgY2lyY3Vtc3RhbmNlLgorICAgICAgU2VlIHRo ZSBmb2xsb3dpbmcgcmVsYXRlZCBwYXRjaGVzOgorICAgICAgLSAgSnVseSAxOSwgMjAxNjogIGJm NWRkZGVkNzBjMTFlZGFmMzUxNGIyNWRhMjdmYzcxY2ZiOGU5NjUKKyAgICAgIC0gIE1heSAyMSwg MjAxNjogIGU1MDE1YzVkOTYzMmEwYmY2ODVjMDkzMjQ5YWU0YTdkM2U4MjViMTMKKyAgICAgIFNl ZSB0aGUgZm9sbG93aW5nIGJ1ZyByZXBvcnRzOiAgIzE2ODU2IGFuZCAjMjkyMzMuICovCisgICAg ICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURUSCAoZik7CisgICAgICBp bnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAg ICAgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gdy0+cGh5c19jdXJzb3IueCArIGZyYW1lX2No YXJfd2lkdGggPj0gdGV4dF9hcmVhX3dpZHRoOworICAgICAgaWYgKChnbHlwaF9yb3ctPmV4YWN0 X3dpbmRvd193aWR0aF9saW5lX3AKKyAgICAgICAgICAgICYmIHctPnBoeXNfY3Vyc29yLmhwb3Mg Pj0gZ2x5cGhfcm93LT51c2VkW1RFWFRfQVJFQV0pCisgICAgICAgICAgfHwgY3Vyc29yX2luX2Zy aW5nZV9wKQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICAgIHsKICAgICAg ICAgICBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IDE7CiAgICAgICAgICAgZHJhd19m cmluZ2VfYml0bWFwICh3LCBnbHlwaF9yb3csIDApOwpAQCAtMzI1Miw4ICszMjg3LDQ4IEBAIE5v dGUgdGhhdCBDVVJTT1JfV0lEVEggaXMgbWVhbmluZ2Z1bCBvbmx5IGZvciAoaCliYXIgY3Vyc29y cy4KIAogCiAgIGZhY2UgPSBGQUNFX0ZST01fSURfT1JfTlVMTCAoZiwgcGh5c19jdXJzb3JfZ2x5 cGgtPmZhY2VfaWQpOwotICBpZiAoZmFjZSAmJiBOU19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpCi0g ICAgICA9PSBuc19pbmRleF9jb2xvciAoRlJBTUVfQ1VSU09SX0NPTE9SIChmKSwgZikpCisKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKy8qIEVY QU1QTEUgT0YgSE9XIFRPIExPT0stVVAgQSBDT0xPUjoKKyAgZW51bSBmYWNlX2lkIGZhY2VfaWQg PSBsb29rdXBfbmFtZWRfZmFjZSAoZiwgaW50ZXJuICgiKy12ZXJ0aWNhbC1iYXItZmFjZSIpLCB0 cnVlKTsKKyAgc3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOwor ICBOU0NvbG9yICpjb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVH Uk9VTkQgKGZhY2UpLCBmKTsKKyovCisKKyAgaWYgKEVRIChmbGF2b3IsIFFtY19nbHlwaCkKKyAg ICAgIHx8IEVRIChmbGF2b3IsIFFtY19nbHlwaGxlc3MpCisgICAgICB8fCBFUSAoZmxhdm9yLCBR bWNfZ2x5cGhfdGFiKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBidWYgPSB3LT5jb250ZW50 czsKKyAgICAgIENIRUNLX0JVRkZFUiAoYnVmKTsKKyAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBY QlVGRkVSIChidWYpOworICAgICAgYm9vbCByZWdpb25fYWN0aXZlX3AgPSAoIU5JTFAgKFZ0cmFu c2llbnRfbWFya19tb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAg KEJWQVIgKGIsIG1hcmtfYWN0aXZlKSkpOworICAgICAgcHRyZGlmZl90IHJlZ2lvbl9iZWdpbm5p bmcgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IFhJTlQgKEZyZWdpb25fYmVnaW5uaW5nICgpKSA6IC0x OworICAgICAgcHRyZGlmZl90IHJlZ2lvbl9lbmQgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IFhJTlQg KEZyZWdpb25fZW5kICgpKSA6IC0xOworICAgICAgYm9vbCByZWdpb25fcCA9IChyZWdpb25fYWN0 aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgUFQgPj0gcmVnaW9uX2JlZ2lubmluZwor ICAgICAgICAgICAgICAgICAgICAgICAmJiBQVCA8IHJlZ2lvbl9lbmQpOworICAgICAgZG91Ymxl IHJlZCA9IFhGTE9BVF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDApKTsKKyAgICAgIGRvdWJs ZSBncmVlbiA9IFhGTE9BVF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDEpKTsKKyAgICAgIGRv dWJsZSBibHVlID0gWEZMT0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMikpOworICAgICAg W1tOU0NvbG9yIGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6IHJlZCBncmVlbjogZ3JlZW4gYmx1ZTog Ymx1ZSBhbHBoYTogMS4wXSBzZXRdOworICAgICAgaWYgKHJlZ2lvbl9wKQorICAgICAgICBob2xs b3dfY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChm YWNlKSwgZik7CisgICAgICAgIGVsc2UgaWYgKGZhY2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChm YWNlKSA9PSBuc19pbmRleF9jb2xvciAoRlJBTUVfQ1VSU09SX0NPTE9SIChmKSwgZikpCisgICAg ICAgICAgaG9sbG93X2NvbG9yID0gRlJBTUVfQ1VSU09SX0NPTE9SIChmKTsKKyAgICAgIC8qIEZJ WE1FOiAgQWRkIGEgY29uZGl0aW9uIGZvciBgaG9sbG93X2NvbG9yYCBpZiB0aGUgcmVnaW9uIGZv cmVncm91bmQgaXMgdGhlCisgICAgICBzYW1lIGFzIHRoZSBkZWZhdWx0IGJhY2tncm91bmQgYW5k IGNob29zZSBhbiBhcHByb3ByaWF0ZSBjb2xvciBpZiBzby4gKi8KKyAgICB9CisgIGVsc2UgaWYg KGZhY2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKQorICAgICAgICAgICA9PSBuc19pbmRl eF9jb2xvciAoRlJBTUVfQ1VSU09SX0NPTE9SIChmKSwgZikpCisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKICAgICB7CiAgICAgICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZB Q0VfRk9SRUdST1VORCAoZmFjZSksIGYpIHNldF07CiAgICAgICBob2xsb3dfY29sb3IgPSBGUkFN RV9DVVJTT1JfQ09MT1IgKGYpOwpAQCAtMzMwMCw5ICszMzc1LDE4IEBAIE5vdGUgdGhhdCBDVVJT T1JfV0lEVEggaXMgbWVhbmluZ2Z1bCBvbmx5IGZvciAoaCliYXIgY3Vyc29ycy4KICAgICB9CiAg IG5zX3VuZm9jdXMgKGYpOwogCi0gIC8qIGRyYXcgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vy c29yICovCi0gIGlmIChjdXJzb3JfdHlwZSAhPSBOT19DVVJTT1IpCi0gICAgZHJhd19waHlzX2N1 cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAvKiBkcmF3IHRoZSBjaGFy YWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAqLworICBpZiAoY3Vyc29yX3R5cGUgIT0gTk9fQ1VSU09S CisgICAgICAmJiAhRVEgKGZsYXZvciwgUW1jX2dseXBobGVzcykKKyAgICAgICYmICFFUSAoZmxh dm9yLCBRbWNfZ2x5cGhfdGFiKSkKKyAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5 cGhfcm93LCBEUkFXX0NVUlNPUik7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAKICNp ZmRlZiBOU19JTVBMX0NPQ09BCiAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcyAoKTsKZGlmZiAtLWdp dCBhL3NyYy93MzJ0ZXJtLmMgYi9zcmMvdzMydGVybS5jCmluZGV4IGZmMGQyYmYuLjEyOGI4ZDgg MTAwNjQ0Ci0tLSBhL3NyYy93MzJ0ZXJtLmMKKysrIGIvc3JjL3czMnRlcm0uYwpAQCAtNzA1LDEw ICs3MDUsMTQgQEAgeF91cGRhdGVfd2luZG93X2VuZCAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBj dXJzb3Jfb25fcCwKICAgICB7CiAgICAgICBibG9ja19pbnB1dCAoKTsKIAotICAgICAgaWYgKGN1 cnNvcl9vbl9wKQotCWRpc3BsYXlfYW5kX3NldF9jdXJzb3IgKHcsIHRydWUsCi0JCQkJdy0+b3V0 cHV0X2N1cnNvci5ocG9zLCB3LT5vdXRwdXRfY3Vyc29yLnZwb3MsCi0JCQkJdy0+b3V0cHV0X2N1 cnNvci54LCB3LT5vdXRwdXRfY3Vyc29yLnkpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAgbWNfcG9ydGFsICh3LCBjdXJzb3Jfb25f cCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAKICAgICAgIGlmIChkcmF3X3dpbmRv d19mcmluZ2VzICh3LCB0cnVlKSkKIAl7CkBAIC05NzMsNyArOTc3LDEzIEBAIHN0YXRpYyB2b2lk IHczMl9kcmF3X2JveF9yZWN0IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQs IGludCwKIHN0YXRpYyB2b2lkCiB4X3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcg KnMpCiB7Ci0gIGlmIChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCisKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgc3RydWN0IHdpbmRv dyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRfd2luZG93KTsKKyAgaWYgKChzLT5m b250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5iYWNrZ3JvdW5kID09 IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5mb3JlZ3Jv dW5kID09IEZSQU1FX0ZPUkVHUk9VTkRfUElYRUwgKHMtPmYpCiAgICAgICAvKiBTb21ldGltZXMg d2UgYXJlIG5vdCBjYWxsZWQgZm9yIGVhY2ggY2hhbmdlIGluIHRoZSBkZWZhdWx0CkBAIC05ODEs NiArOTkxLDExIEBAIHhfc2V0X2N1cnNvcl9nYyAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKIAkg dGVzdCBpbiB0aGUgbmV4dCBsaW5lIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHJlc3luYy4gICovCiAg ICAgICAmJiBzLT5mLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYy0+Zm9yZWdyb3VuZCA9PSBz LT5mYWNlLT5iYWNrZ3JvdW5kCiAgICAgICAmJiAhcy0+Y21wKQorICAgICAgfHwgdy0+bWMuY3Vy c29yX2djX2RlZmF1bHQpCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICBzLT5n YyA9IHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djOwogICBlbHNlCiAgICAgewpAQCAt NTc1Myw3ICs1NzY4LDE3IEBAIHhfZHJhd19iYXJfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBz dHJ1Y3QgZ2x5cGhfcm93ICpyb3csCiAJIGludmlzaWJsZS4gIFVzZSB0aGUgZ2x5cGgncyBmb3Jl Z3JvdW5kIGNvbG9yIGluc3RlYWQgaW4gdGhpcwogCSBjYXNlLCBvbiB0aGUgYXNzdW1wdGlvbiB0 aGF0IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUgY2hvc2VuIHNvCiAJIHRoYXQgdGhlIGdseXBoIGlz IGxlZ2libGUuICAqLwotICAgICAgaWYgKGZhY2UtPmJhY2tncm91bmQgPT0gY3Vyc29yX2NvbG9y KQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLwor CisgICAgICBpZiAoZmFjZS0+YmFja2dyb3VuZCA9PSBjdXJzb3JfY29sb3IKKyAgICAgICAgICAm JiAhdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5KQorCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCiAJY3Vyc29yX2NvbG9yID0gZmFjZS0+Zm9yZWdyb3VuZDsKIAogICAgICAgeCA9 IFdJTkRPV19URVhUX1RPX0ZSQU1FX1BJWEVMX1ggKHcsIHctPnBoeXNfY3Vyc29yLngpOwpAQCAt NTgzMCw3ICs1ODU1LDE3IEBAIHczMl9jbGVhcl9mcmFtZV9hcmVhIChzdHJ1Y3QgZnJhbWUgKmYs IGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogc3RhdGljIHZvaWQKIHczMl9k cmF3X3dpbmRvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKmds eXBoX3JvdywKIAkJCWludCB4LCBpbnQgeSwgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3Jf dHlwZSwKLQkJCWludCBjdXJzb3Jfd2lkdGgsIGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKKwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBp bnQgY3Vyc29yX3dpZHRoLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3AsCisgIExpc3BfT2JqZWN0 IGNvbG9yX3ZlY3RvciwgTGlzcF9PYmplY3QgZmxhdm9yKQorCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCiB7CiAgIGlmIChvbl9wKQogICAgIHsKQEAgLTU4OTUsMzEgKzU5MzAsMTE4IEBA IHczMl9kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9y b3cgKmdseXBoX3JvdywKIAkgIHJldHVybjsKIAl9CiAKLSAgICAgIHN3aXRjaCAoY3Vyc29yX3R5 cGUpCi0JewotCWNhc2UgSE9MTE9XX0JPWF9DVVJTT1I6Ci0JICB4X2RyYXdfaG9sbG93X2N1cnNv ciAodywgZ2x5cGhfcm93KTsKLQkgIGJyZWFrOwotCi0JY2FzZSBGSUxMRURfQk9YX0NVUlNPUjoK LQkgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOwot CSAgYnJlYWs7CiAKLQljYXNlIEJBUl9DVVJTT1I6Ci0JICB4X2RyYXdfYmFyX2N1cnNvciAodywg Z2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOwotCSAgYnJlYWs7CisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFIENVUlNPUlMgKi8KIAotCWNhc2Ug SEJBUl9DVVJTT1I6Ci0JICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jf d2lkdGgsIEhCQVJfQ1VSU09SKTsKLQkgIGJyZWFrOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJB TUUgKFdJTkRPV19GUkFNRSAodykpOworICBDT0xPUlJFRiBvcmlnaW5hbF9jdXJzb3JfcGl4ZWwg PSBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbDsKKyAgZG91YmxlIHJlZCA9IFhGTE9B VF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDApKTsKKyAgZG91YmxlIGdyZWVuID0gWEZMT0FU X0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMSkpOworICBkb3VibGUgYmx1ZSA9IFhGTE9BVF9E QVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDIpKTsKKyAgLyogU29tZSBvZiB0aGVzZSB2YWx1ZXMg Y29tZSB0aHJvdWdoIGFzIDEuMDAzOTA2LCB3aGljaCBjYXVzZXMgYSBicmVha2FnZQorICBvZiB0 aGUgY29sb3JzIGluIHRoYXQgbXVsdGlwbGljYXRpb24gYnkgdGhlIGJhc2Ugd2lsbCBleGNlZWQg dGhlIGJhc2UuICovCisgIGlmIChyZWQgPiAxLjApCisgICAgcmVkID0gMS4wOworICBpZiAoZ3Jl ZW4gPiAxLjApCisgICAgZ3JlZW4gPSAxLjA7CisgIGlmIChibHVlID4gMS4wKQorICAgIGJsdWUg PSAxLjA7CisgIGRvdWJsZSBiYXNlID0gMjU1LjA7CisgIGRvdWJsZSB0ZXJtX3JlZCA9IGJhc2Ug KiByZWQ7CisgIGRvdWJsZSB0ZXJtX2dyZWVuID0gYmFzZSAqIGdyZWVuOworICBkb3VibGUgdGVy bV9ibHVlID0gYmFzZSAqIGJsdWU7CisgIGludCBpbnRfcmVkID0gWElOVCAoRnRydW5jYXRlICht YWtlX2Zsb2F0ICh0ZXJtX3JlZCksIFFuaWwpKTsKKyAgaW50IGludF9ncmVlbiA9IFhJTlQgKEZ0 cnVuY2F0ZSAobWFrZV9mbG9hdCAodGVybV9ncmVlbiksIFFuaWwpKTs7CisgIGludCBpbnRfYmx1 ZSA9IFhJTlQgKEZ0cnVuY2F0ZSAobWFrZV9mbG9hdCAodGVybV9ibHVlKSwgUW5pbCkpOzsKKyAg Q09MT1JSRUYgY29sb3JfcGl4ZWwgPSBQQUxFVFRFUkdCIChpbnRfcmVkLCBpbnRfZ3JlZW4sIGlu dF9ibHVlKTsKKyAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgeworICAgIGNhc2UgSE9MTE9XX0JP WF9DVVJTT1I6CisgICAgeworICAgICAgaWYgKHJlZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVl biA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5v dXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCcuICAqLworICAgICAgICAgIGYtPm91dHB1dF9k YXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAgeF9kcmF3X2hv bGxvd19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMy LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZQorICAgICAgICAgIHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOwor ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRklMTEVEX0JPWF9DVVJTT1I6CisgICAgewor ICAgICAgaWYgKHJlZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICB7 CisgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1 cnNvcl9nYycgYnkgYm9ycm93aW5nIHRoZQorICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhf bWFrZV9nYycgaW4gdzMyZm5zLmMuICAqLworICAgICAgICAgIGJsb2NrX2lucHV0ICgpOworICAg ICAgICAgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHNlbGVjdGVkX3dp bmRvdyk7CisgICAgICAgICAgWEdDVmFsdWVzIGdjX3ZhbHVlczsKKyAgICAgICAgICB1bnNpZ25l ZCBsb25nIG1hc2sgPSBHQ0ZvbnQgfCBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQ7CisgICAg ICAgICAgQ09MT1JSRUYgZnJhbWVfYmdfcGl4ZWwgPSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChm KTsKKyAgICAgICAgICBnY192YWx1ZXMuZm9udCA9IEZSQU1FX0ZPTlQgKGYpOworICAgICAgICAg IGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gRlJBTUVfQkFDS0dST1VORF9QSVhFTCAoZik7CisgICAg ICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBjb2xvcl9waXhlbDsKKyAgICAgICAgICBmLT5v dXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYworICAgICAgICAgICAgPSBYQ3JlYXRlR0MgKE5VTEws IEZSQU1FX1czMl9XSU5ET1cgKGYpLCBtYXNrLCAmZ2NfdmFsdWVzKTsKKyAgICAgICAgICAvKiBX aGVuIGB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9IHRydWUnLCBmb3JjZSBgeF9zZXRfY3Vyc29y X2djJyB0bworICAgICAgICAgIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2Mn LiAgKi8KKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9IHRydWU7CisgICAgICAg ICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7Cisg ICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgICBnY192 YWx1ZXMuZm9udCA9IEZSQU1FX0ZPTlQgKGYpOworICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3Jv dW5kID0gZnJhbWVfYmdfcGl4ZWw7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBv cmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJz b3JfZ2MKKyAgICAgICAgICAgID0gWENyZWF0ZUdDIChOVUxMLCBGUkFNRV9XMzJfV0lORE9XIChm KSwgbWFzaywgJmdjX3ZhbHVlcyk7CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAg ICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywg Z2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBC QVJfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmIChyZWQgPj0gMCAmJiBibHVlID49IDAgJiYgZ3Jl ZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+ b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRf ZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIHctPm1jLmN1 cnNvcl9nY19pbnZpc2libGVfb2theSA9IHRydWU7CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJz b3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBCQVJfQ1VSU09SKTsKKyAgICAgICAgICB3 LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSBmYWxzZTsKKyAgICAgICAgICBmLT5vdXRw dXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAg ICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBo X3JvdywgY3Vyc29yX3dpZHRoLCBCQVJfQ1VSU09SKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAg ICBjYXNlIEhCQVJfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmIChyZWQgPj0gMCAmJiBibHVlID49 IDAgJiYgZ3JlZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhp amFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgICBm LT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAg IHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IHRydWU7CisgICAgICAgICAgeF9kcmF3 X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBIQkFSX0NVUlNPUik7Cisg ICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5ID0gZmFsc2U7CisgICAgICAg ICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4 ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29y ICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAgYnJlYWs7 CisgICAgfQorICAgIGNhc2UgTk9fQ1VSU09SOgorICAgICAgdy0+cGh5c19jdXJzb3Jfd2lkdGgg PSAwOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwor ICB9CisvKiBlbmQgTVVMVElQTEUgQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CiAKLQljYXNlIE5PX0NVUlNPUjoKLQkgIHctPnBoeXNfY3Vyc29yX3dpZHRoID0gMDsKLQkgIGJy ZWFrOwogCi0JZGVmYXVsdDoKLQkgIGVtYWNzX2Fib3J0ICgpOwotCX0KICAgICB9CiB9CiAKZGlm ZiAtLWdpdCBhL3NyYy93aW5kb3cuYyBiL3NyYy93aW5kb3cuYwppbmRleCA0MjJiMDZhLi42ZjNl NTlkIDEwMDY0NAotLS0gYS9zcmMvd2luZG93LmMKKysrIGIvc3JjL3dpbmRvdy5jCkBAIC02ODEw LDYgKzY4MTAsMjkgQEAgZ2V0X3BoeXNfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2luZG93ICp3KQog ICBzdHJ1Y3QgZ2x5cGggKmdseXBoOwogICBpbnQgaHBvcyA9IHctPnBoeXNfY3Vyc29yLmhwb3M7 CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisK Ky8qIFRoaXMgbW9kaWZpY2F0aW9uIGVuYWJsZXMgcGxhY2VtZW50IG9mIHRoZSBjdXJzb3ItaW4t ZnJpbmdlIGJpdG1hcCB3aGVuCit0aGUgd2luZG93LXdpZHRoIGlzIHNsaWdodGx5IGxlc3MgdGhh biBgZ2x5cGhfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wYC4KK1RoaXMgbW9kaWZpY2F0 aW9uIGFsc28gcHJldmVudHMgZHJhd2luZyB0aGUgcmVhbCBjdXJzb3Igb24gdGhlIGZyaW5nZSAo aW5zdGVhZAorb2YgdXNpbmcgdGhlIGN1cnNvci1pbi1mcmluZ2UgYml0bWFwKSBpbiB0aGUgYWJv dmUtbWVudGlvbmVkIGNpcmN1bXN0YW5jZS4KK1NlZSB0aGUgZm9sbG93aW5nIHJlbGF0ZWQgcGF0 Y2hlczoKKy0gIEp1bHkgMTksIDIwMTY6ICBiZjVkZGRlZDcwYzExZWRhZjM1MTRiMjVkYTI3ZmM3 MWNmYjhlOTY1CistICBNYXkgMjEsIDIwMTY6ICBlNTAxNWM1ZDk2MzJhMGJmNjg1YzA5MzI0OWFl NGE3ZDNlODI1YjEzCitTZWUgdGhlIGZvbGxvd2luZyBidWcgcmVwb3J0czogICMxNjg1NiBhbmQg IzI5MjMzLiAqLworCisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBp bnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURUSCAoZik7CisgIGludCB0ZXh0 X2FyZWFfd2lkdGggPSB3aW5kb3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEpOworICBib29sIGN1 cnNvcl9pbl9mcmluZ2VfcCA9IHctPnBoeXNfY3Vyc29yLnggKyBmcmFtZV9jaGFyX3dpZHRoID49 IHRleHRfYXJlYV93aWR0aDsKKyAgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcCkKKyAgICByZXR1cm4g TlVMTDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBpZiAoISh3LT5waHlzX2N1 cnNvci52cG9zID49IDAKIAkmJiB3LT5waHlzX2N1cnNvci52cG9zIDwgdy0+Y3VycmVudF9tYXRy aXgtPm5yb3dzKSkKICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy93aW5kb3cuaCBi L3NyYy93aW5kb3cuaAppbmRleCAwMTMwODNlLi5iYzI5NmQxIDEwMDY0NAotLS0gYS9zcmMvd2lu ZG93LmgKKysrIGIvc3JjL3dpbmRvdy5oCkBAIC03Niw2ICs3Niw0MSBAQCBvbmUgYW5kIHRoZSBz YW1lLCBzbyBpdHMgcHJldiBhbmQgbmV4dCBtZW1iZXJzIGFyZSBuaWwuCiAKIEEgZGVhZCB3aW5k b3cgaGFzIGl0cyBjb250ZW50cyBmaWVsZCBzZXQgdG8gbmlsLiAgKi8KIAorCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogU3VmZml4 ZXMgZm9yIHRoZSBgbWNgIHdpbmRvdyBwb2ludGVyIHByZWZpeC4gKi8KK3N0cnVjdCBtdWx0aXBs ZV9jdXJzb3JzCit7CisgIC8qIFZhbHVlcyBmb3IgcHJldmlvdXMgYW5kIGN1cnJlbnQgYHdpbmRv dy1zdGFydCcgYW5kIGB3aW5kb3ctZW5kJy4gKi8KKyAgRU1BQ1NfSU5UIGN1cnJlbnRfc3RhcnQs IGN1cnJlbnRfZW5kLCBwcmV2aW91c19zdGFydCwgcHJldmlvdXNfZW5kLCBjdXJyZW50X3gsIHBy ZXZpb3VzX3g7CisKKyAgLyogVHJ1ZSBtZWFucyB0byBmb3JjZSBgeF9zZXRfY3Vyc29yX2djJyB0 byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJworICBpbiB3MzJ0ZXJtLmMg b3IgYHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYycgaW4geHRlcm0uYy4gKi8KKyAgYm9v bF9iZiBjdXJzb3JfZ2NfZGVmYXVsdCA6IDE7CisKKyAgLyogVHJ1ZSBtZWFucyBgeF9zZXRfY3Vy c29yX2djJyBzaG91bGQgcGVybWl0IHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kCisgIGNv bG9ycyB0byBiZSB0aGUgc2FtZS4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGRpc2FsbG93cyBhbiBp bnZpc2libGUgcmVzdWx0LiAqLworICBib29sX2JmIGN1cnNvcl9nY19pbnZpc2libGVfb2theSA6 IDE7CisKKyAgLyogVHJ1ZSBtZWFucyBgbWNfY2FsYycgaGFzIG5vdCBydW4geWV0IGRyYXduIGds eXBoIGZha2UgY3Vyc29ycy4gKi8KKyAgYm9vbF9iZiBkcmF3X2dseXBoX2N1cnNvciA6IDE7CisK KyAgLyogVHJ1ZSBtZWFucyBgbWNfY2FsYycgaGFzIG5vdCBydW4geWV0IGVyYXNlZCBnbHlwaCBm YWtlIGN1cnNvcnMuICovCisgIGJvb2xfYmYgZXJhc2VfZ2x5cGhfY3Vyc29yIDogMTsKKworICAv KiBUcnVlIG1lYW5zIGNyb3NzaGFpcnMgaGF2ZSBub3QgeWV0IGJlZW4gZHJhd24uICovCisgIGJv b2xfYmYgZHJhd19jcm9zc2hhaXJzIDogMTsKKworICAvKiBUcnVlIG1lYW5zIGNyb3NzaGFpcnMg aGF2ZSBub3QgeWV0IGJlZW4gZXJhc2VkLiAqLworICBib29sX2JmIGVyYXNlX2Nyb3NzaGFpcnMg OiAxOworfTsKKworLyogZW5kIE1VTFRJUExFIENVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKIHN0cnVjdCBjdXJzb3JfcG9zCiB7CiAgIC8qIFBpeGVsIHBvc2l0aW9uLiAg VGhlc2UgYXJlIGFsd2F5cyB3aW5kb3cgcmVsYXRpdmUuICAqLwpAQCAtMTgxLDYgKzIxNiwyMiBA QCBzdHJ1Y3Qgd2luZG93CiAgICAgLyogVGhlIGhlbHAgZWNobyB0ZXh0IGZvciB0aGlzIHdpbmRv dy4gIFFuaWwgaWYgdGhlcmUncyBub25lLiAgKi8KICAgICBMaXNwX09iamVjdCBtb2RlX2xpbmVf aGVscF9lY2hvOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VS U09SUyAqLworCisgICAgLyogVGhlIGNhY2hlIGZvciBtdWx0aXBsZSBnbHlwaCBjdXJzb3JzLiAg Rm9yIGFuIGV4YW1wbGUgb2YgdGhlIHN0cnVjdHVyZSBvZgorICAgIHRoZSBsaXN0LCBzZWUgdGhl IGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYG1jX2NhbGMnIGluIHhkaXNwLmMuICAqLwor ICAgIExpc3BfT2JqZWN0IG1jX2dseXBoX2NhY2hlOworCisgICAgLyogVGhlIGNhY2hlIGZvciBt dWx0aXBsZSBnbHlwaC9nbHlwaGxlc3MgY3Vyc29ycyB0aGF0IGZvcm0gY3Jvc3NoYWlycy4gIEZv ciBhbgorICAgIGV4YW1wbGUgb2YgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbGlzdCwgc2VlIHRoZSBj b21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgYG1jX2Nyb3NzaGFpcnMnIGluIHhkaXNw LmMuICAqLworICAgIExpc3BfT2JqZWN0IGNyb3NzaGFpcnNfY2FjaGU7CisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCisKICAgICAvKiBObyBMaXNwIGRhdGEgbWF5IGZvbGxvdyBiZWxvdyB0 aGlzIHBvaW50IHdpdGhvdXQgY2hhbmdpbmcKICAgICAgICBtYXJrX29iamVjdCBpbiBhbGxvYy5j LiAgVGhlIG1lbWJlciBjdXJyZW50X21hdHJpeCBtdXN0IGJlIHRoZQogICAgICAgIGZpcnN0IG5v bi1MaXNwIG1lbWJlci4gICovCkBAIC0yODMsNiArMzM0LDE2IEBAIHN0cnVjdCB3aW5kb3cKIAog I2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgLyogVGhlIHByZWZpeCBmb3Igd2luZG93IHBv aW50ZXJzIHJlbGF0aW5nIHRvIG11bHRpcGxlIGN1cnNvcnMuICAqLworICAgIHN0cnVjdCBtdWx0 aXBsZV9jdXJzb3JzIG1jOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgLyog Q3Vyc29yIHR5cGUgb2YgbGFzdCBjdXJzb3IgZHJhd24gb24gdGhlIHdpbmRvdy4gICovCiAgICAg ZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBwaHlzX2N1cnNvcl90eXBlOwogCkBAIC00MjEsNiArNDgy LDI1IEBAIFhXSU5ET1cgKExpc3BfT2JqZWN0IGEpCiAgIHJldHVybiBYVU5UQUcgKGEsIExpc3Bf VmVjdG9ybGlrZSwgc3RydWN0IHdpbmRvdyk7CiB9CiAKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKK0lOTElORSB2b2lkCit3c2V0X21jX2dseXBo X2NhY2hlIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCit7CisgIHctPm1jX2ds eXBoX2NhY2hlID0gdmFsOworfQorCitJTkxJTkUgdm9pZAord3NldF9jcm9zc2hhaXJzX2NhY2hl IChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCit7CisgIHctPmNyb3NzaGFpcnNf Y2FjaGUgPSB2YWw7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIC8qIE1vc3Qg Y29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzZXQgTGlzcCBmaWVsZHMgaW4gc3Ry dWN0CiAgICB3aW5kb3cuICAqLwogSU5MSU5FIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5j IGIvc3JjL3hkaXNwLmMKaW5kZXggOWI0ZmViZC4uMzExYWFmZiAxMDA2NDQKLS0tIGEvc3JjL3hk aXNwLmMKKysrIGIvc3JjL3hkaXNwLmMKQEAgLTkyMSw2ICs5MjEsMjQyMyBAQCBzdGF0aWMgdm9p ZCBzaG93X21vdXNlX2ZhY2UgKE1vdXNlX0hMSW5mbyAqLCBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2Up Owogc3RhdGljIGJvb2wgY29vcmRzX2luX21vdXNlX2ZhY2VfcCAoc3RydWN0IHdpbmRvdyAqLCBp bnQsIGludCk7CiAKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBM RSBDVVJTT1JTICovCisKKy8qIE1VTFRJUExFIENVUlNPUlM6ICBFbWFjcyBCdWcgIzIyODczIChm ZWF0dXJlIHJlcXVlc3QpCisKKyAgIENST1NTSEFJUlM6ICBFbWFjcyBCdWcgIzE3Njg0IChmZWF0 dXJlIHJlcXVlc3QpCisKK1BBVENIIFZFUlNJT046ICAwMTMKK0FwcGx5IHBhdGNoIHRvIG1hc3Rl ciBicmFuY2g6ICBTYXQgSnVsIDcgMDk6NTk6NTMgMjAxOCAtMDcwMAorZ2l0IHJlc2V0IC0taGFy ZCA5ODQ2M2JlZDA3ZWNjOTA1NzA5NDkyOGZmZGMyMzIxZWFhZjNhYjUyCisKK0xhc3QgQ29tbWl0 IDogU2F0IEp1bCA3IDA5OjU5OjUzIDIwMTggLTA3MDAKKyAgICAgICAgICAgIDogR2xlbm4gTW9y cmlzIDxyZ21AZ251Lm9yZz4KKyAgICAgICAgICAgIDogOTg0NjNiZWQwN2VjYzkwNTcwOTQ5Mjhm ZmRjMjMyMWVhYWYzYWI1MgorICAgICAgICAgICAgOiAqIGxpc3AvaW1lbnUuZWw6IFJlcXVpcmUg Y2wtbGliLCBub3QgaW50ZXJuYWwgY29tcG9uZW50cyBvZiBzYW1lLgorCitFWEFNUExFICMxOiAg KHNldHEgbWMtZ2x5cGgtbGlzdCAnKCgxICJoYmFyIiAibWFnZW50YSIpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgyICJiYXIiICJwdXJwbGUiKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoMyAiYm94IiAiIzAwRkYwMCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICg0ICJob2xsb3ciICIjMDAwMEZGIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUg KCJoYmFyIiAzKSBbMS4wIDAuMCAxLjBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo NiAoImJhciIgMykgWzAuMCAxLjAgMS4wXSkpKQorCitFWEFNUExFICMyOiAgKHNldHEgbWMtZ2x5 cGgtbGlzdCBuaWwpCisKK1RPRE86CisKKy0gIEZvbGxvdyB1cCB3aXRoIHRoZSBFbWFjcyB0ZWFt IHJlIGJ1ZyMzMjE3NzsgaS5lLiwKKyAgIChDdXJyZW50IGxpbmUgbnVtYmVyIHNoaWZ0cyBvbmUg Y29sdW1uIHRvIHRoZSBsZWZ0LikKKworLSAgRm9sbG93IHVwIHdpdGggdGhlIEVtYWNzIHRlYW0g cmUgYnVnIzMyMDYwOyBpLmUuLAorICAgKEhvcml6b250YWwgU2Nyb2xsaW5nIChDdXJyZW50IExp bmUpOiAgV3JvbmcgbGluZSBnZXRzIGgtc2Nyb2xsZWQuKQorCistICBEZXRlcm1pbmUgaWYgYnVn ICMyODkzNiBuZWVkcyB0byBiZSBmaXhlZCBhbmQgaGVscCB0aGUgRW1hY3MgdGVhbSByZSBzYW1l LgorCistICBUaGUgdmVydGljYWwgcnVsZXIgb2YgY3Jvc3NoYWlycyBzdGlsbCBoYXMgc29tZSBp c3N1ZXMgd2l0aCBhbiBpbml0aWFsIHRhYgorICAgc3RyZXRjaCB3aGVuIHBlcm1hbmVudGx5IGhv cml6b250YWwgc2Nyb2xsaW5nOiAgKHNjcm9sbC1sZWZ0IDUgdCkuCisgICBJc3N1ZXMgaW5jbHVk ZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0byBhbiBpbml0aWFsIHRhYiBzdHJldGNoIGZvbGxvd2Vk IGJ5IEVPTC4KKworLSAgRW1hY3Mgb24gV2luZG93cyBYUCBpcyB0b28gc2xvdyB0byBoYW5kbGUg bW92aW5nIElUIG92ZXIgZWFjaCBkaXNwbGF5IGVsZW1lbnQKKyAgIHVudGlsIHRoZSB0YXJnZXQg WCBvciBQT1NJTlQgaXMgcmVhY2hlZDsgaS5lLiwgd2UgY2FuIHNlZSB0aGUgdmVydGljYWwgcnVs ZXIKKyAgIGJlaW5nIGRyYXduIGFuZCB0aGUgdGltZSBpbmNyZWFzZXMgYXMgWC9IUE9TIGFyZSBm YXJ0aGVyIGF3YXkgZnJvbSAwLgorICAgWDExIG9uIE9TWCwgYW5kIG5hdGl2ZSBHVUkgYnVpbGQg b24gT1NYIGFyZSBtdWNoIHF1aWNrZXIgd2hlbiBtb3ZpbmcgSVQuCisKKy0gIFdoZW4gY2hvb3Np bmcgbXVsdGlwbGUgbGluZXMgZnJvbSB0aGUgYnJvd3NlLWtpbGwtcmluZyBzZWxlY3Rpb24sIHRo ZSBwcm9wb3NlZAorICAgaW5zZXJ0aW9uIChpbiB0aGUgZm9ybSBvZiBvdmVybGF5cyBpbiB0aGUg dGFyZ2V0IGJ1ZmZlcikgY3JlYXRlcyBtdWx0aXBsZQorICAgZ3JlZW4gc21pbGV5IGZhY2VzIGlu IHRoZSBmcmluZ2UuCisKKy0gIFNldCB1cCBhIHVzZXIgb3B0aW9uIHNpbWlsYXIgdG8gYGN1cnNv ci1pbi1ub24tc2VsZWN0ZWQtd2luZG93cycuCisKKy0gIEV4cGxvcmUgdGhlIGlkZWEgb2Ygd2hl dGhlciB3ZSBuZWVkIGFkZGl0aW9uYWwgY29kZSB0byBoYW5kbGUgcmVtb3ZpbmcvcmVkcmF3aW5n CisgICBmYWtlIGN1cnNvcnMgd2hlbiB3aW5kb3dzIGNoYW5nZSBzaXplcyAvIGxheW91dHMuCisK Ky0gIEZha2UgY3Vyc29ycyBhcmUgYmVpbmcgcmVkcmF3biB0b28gb2Z0ZW4gd2hlbiBub24tc2Vs ZWN0ZWQgdmlzaWJsZSB3aW5kb3dzCisgICBoYXZlIGFuIG9uZ29pbmcgcHJvY2VzcyB0aGF0IHJl cXVpcmUgZnJlcXVlbnQgcmVkaXNwbGF5IHVwZGF0ZXMgKGUuZy4sCisgICBhbiBlc2hlbGwgYnVm ZmVyLiAgQGxhd2xpc3QgbWF5IGhhdmUgYWxyZWFkeSBjb3JyZWN0ZWQgdGhlIGZyZXF1ZW50IHJl ZGlzcGxheQorICAgaXNzdWUgYXMgdG8gbW91c2Utb3ZlcnMsIGJ1dCB3aWxsIG5lZWQgdG8gY2hl Y2sgdGhpcyBvbmNlIGFnYWluIHRvIGJlIHN1cmUuCisKKy0gIE9wdGltaXplIGRyYXdpbmcvZXJh c2luZyBmYWtlIGN1cnNvcnMuCisKKy0gIEltcGxlbWVudCBhIHdheSB0byBwcm9wZXJseSBjYWxj dWxhdGUgWCwgWSwgSFBPUywgVlBPUyB3aGVuIGRlYWxpbmcgd2l0aCBvdmVybGF5cywKKyAgIHRl eHQgcHJvcGVydGllcywgZm9sZGVkIHRleHQsIGNvbXBvc2l0aW9uIGNoYXJhY3RlcnMsIGV0Yy4K KworLSAgSW1wbGVtZW50IGEgdGVzdCBmb3IgY3Jvc3NoYWlycyB0byBzZWUgaWYgdGhlIGJ1ZmZl ciB1c2VzIG1vbm9zcGFjZSB2ZXJzdXMKKyAgIHByb3BvcnRpb25hbCBmb250cywgYW5kIHN1cHBy ZXNzIGNyb3NzaGFpcnMgd2hlbiB0aGUgbGF0dGVyLgorCistICBEZWFsIHdpdGggY2hhcmFjdGVy cyB0aGF0IGhhdmUgYSBmb250LT5zcGFjZV93aWR0aCBkaWZmZXJlbnQgdGhhbiBhbGwgdGhlIHJl c3QuCisKKy0gIEltcGxlbWVudCBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gdGhlIG11bHRpcGxl IGN1cnNvcnMgbGlicmFyeSBieSBNYWduYXIgU3ZlZW4uCisKKy0gIENyZWF0ZSBhIGNvbXByZWhl bnNpdmUgbGlzdCBvZiBmZWF0dXJlcyB0byBhbHdheXMgdGVzdCwgYW5kIHNldHVwIGEgdGVzdCBm aWxlLgorCitURVNUSU5HOiAgU2l0dWF0aW9ucyB0aGF0IGFsd2F5cyBuZWVkIHRvIGJlIHRlc3Rl ZCB3aGVuIHdvcmtpbmcgb24gdGhlc2UgZmVhdHVyZXMuCisKKy0gIE11bHRpcGxlIEZha2UgQ3Vy c29yczogIExpbmUgZW5kaW5ncy4KKworLSAgQ3Jvc3NoYWlyczogIExpbmUgZW5kaW5ncy4KKwor LSAgaXQtPmxpbmVfd3JhcCA9PSBUUlVOQ0FURQorCistICBpdC0+bGluZV93cmFwID09IFdPUkRf V1JBUAorCistICBpdC0+bGluZV93cmFwID09IFdJTkRPV19XUkFQCisKKy0gIEhvcml6b250YWwg U2Nyb2xsaW5nIC0tIFRlbXBvcmFyeTogIChzY3JvbGwtbGVmdCAxKQorCisgICAoc2V0cS1sb2Nh bCBhdXRvLWhzY3JvbGwtbW9kZSAnY3VycmVudC1saW5lKQorCistICBIb3Jpem9udGFsIFNjcm9s bGluZyAtLSBQZXJtYW5lbnQ6ICAoc2Nyb2xsLWxlZnQgMSB0KQorCisgICAoc2V0cS1sb2NhbCBh dXRvLWhzY3JvbGwtbW9kZSAnY3VycmVudC1saW5lKQorCistICAoZnVuZGFtZW50YWwtbW9kZSkK KyAgIChzZXRxIGRpc3BsYXktbGluZS1udW1iZXJzIHQpCisgICAoc2V0cSBidWZmZXItZGlzcGxh eS10YWJsZSAobWFrZS1kaXNwbGF5LXRhYmxlKSkKKyAgIChhc2V0IGJ1ZmZlci1kaXNwbGF5LXRh YmxlCisgICAgICAgICA/XHQKKyAgICAgICAgICh2ZWN0b3IgKG1ha2UtZ2x5cGgtY29kZSA/XHUw MEJCICdmb250LWxvY2std2FybmluZy1mYWNlKQorICAgICAgICAgICAgICAgICAobWFrZS1nbHlw aC1jb2RlID9cdCAnaGlnaGxpZ2h0KSkpCisgICAoYXNldCBidWZmZXItZGlzcGxheS10YWJsZQor ICAgICAgICAgP1xuCisgICAgICAgICAodmVjdG9yIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCNiAn Zm9udC1sb2NrLWNvbW1lbnQtZmFjZSkKKyAgICAgICAgICAgICAgICAgP1xuKSkKKyAgIChzZXRx IHRhYi13aWR0aCA4KQorICAgKHNldHEtbG9jYWwgYXV0by1oc2Nyb2xsLW1vZGUgJ2N1cnJlbnQt bGluZSkKKworLSAgTm8gTGluZSBOdW1iZXJzCisKK0xFR0VORAorCitmcHJpbnRmIChzdGRlcnIs ICJNeSBsaXNwIG9iamVjdDogICVzXG4iLCBTU0RBVEEgKEZjaGFyX3RvX3N0cmluZyAobWFrZV9u dW1iZXIgKDEwMSkpKSk7CisKK2ZwcmludGYgKHN0ZGVyciwgInN0cmluZzogJXMgfCBpbnQ6ICVk XG4iLCBTU0RBVEEgKGJ1aWxkX3N0cmluZyAoImZvbyIpKSwgNjkpOworCitpZiAoQlVGRkVSUCAo dy0+Y29udGVudHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFt ZSkpKQorICBmcHJpbnRmIChzdGRlcnIsICJuc191cGRhdGVfd2luZG93X2VuZDogICVzXG4iLCBT U0RBVEEgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKTsKKworQVVUT19TVFJJ TkcgKG15X3N0cmluZ19vbmUsICJUaGlzIGlzIHRoZSB2YWx1ZSBvZiBgbXlfb2JqZWN0X29uZSc6 ICAlcyIpOworTGlzcF9PYmplY3QgbXlfb2JqZWN0X29uZSA9IG1ha2VfZmxvYXQgKDAuMSk7CitD QUxMTiAoRm1lc3NhZ2UsIG15X3N0cmluZ19vbmUsIG15X29iamVjdF9vbmUpOworCitBVVRPX1NU UklORyAobXlfc3RyaW5nX3R3bywgIlRoaXMgaXMgdGhlIHZhbHVlIG9mIGBteV9vYmplY3RfdHdv JzogICVzIik7CitMaXNwX09iamVjdCBteV9vYmplY3RfdHdvID0gbWFrZV9udW1iZXIgKDc3Nyk7 CitDQUxMTiAoRm1lc3NhZ2UsIG15X3N0cmluZ190d28sIG15X29iamVjdF90d28pOworCitXSU5E T1c6ICB3LT5jb250ZW50cworCitCVUZGRVI6ICBYQlVGRkVSICh3LT5jb250ZW50cykKKworQlVG RkVSIExPQ0FMIFZBUklBQkxFOiAgQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCB2YXJpYWJs ZV9uYW1lKQorCitOTyBOQVJST1dJTkc6CisKK0JFRyA9PSBCZWdpbm5pbmcgb2YgQnVmZmVyICh3 aW5kb3cgZGlzcGxheXMgY3VycmVudCBidWZmZXIpCisKK1pWID09IEVuZCBvZiBCdWZmZXIgKHdp bmRvdyBkaXNwbGF5cyBjdXJyZW50IGJ1ZmZlcikKKworQkVHX0JZVEUgPT0gQmVnaW5uaW5nIEJ5 dGUgb2YgQnVmZmVyCisKK1pfQllURSA9PSBFbmRpbmcgQnl0ZSBvZiBCdWZmZXIKKworTkFSUk9X RUQgLS0gIlYiOgorCitCRUdWID09IEJlZ2lubmluZyBvZiBOQVJST1dFRCBCdWZmZXIgKHdpbmRv dyBkaXNwbGF5cyBjdXJyZW50IGJ1ZmZlcikKKworWlYgPT0gRW5kIG9mIE5BUlJPV0VEIEJ1ZmZl ciAod2luZG93IGRpc3BsYXlzIGN1cnJlbnQgYnVmZmVyKQorCitCRUdWX0JZVEUgPT0gQmVnaW5u aW5nIEJ5dGUgb2YgTkFSUk9XRUQgQnVmZmVyCisKK1pWX0JZVEUgPT0gRW5kaW5nIEJ5dGUgb2Yg TkFSUk9XRUQgYnVmZmVyCisKK1dJTkRPVyBET0VTIE5PVCBORUNFU1NBUklMWSBESVNQTEFZIEJV RkZFUjoKKworYm9iX2Rpc3JlZ2FyZF9uYXJyb3cgPSBCVUZfQkVHIChidWZmZXIpCitlb2JfZGlz cmVnYXJkX25hcnJvdyA9IEJVRl9aIChidWZmZXIpCisKK2JvYl9yZXNwZWN0X25hcnJvdyA9IEJV Rl9CRUdWIChidWZmZXIpCitlb2JfcmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKGJ1ZmZlcikKKwor d2luZG93X3N0YXJ0ID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCkKK3dpbmRvd19lbmQgPSBl b2JfZGlzcmVnYXJkX25hcnJvdyAtIHctPndpbmRvd19lbmRfcG9zCisKK2J1ZmZlcl9zaXplID0g ZW9iX2Rpc3JlZ2FyZF9uYXJyb3cgLSBib2JfZGlzcmVnYXJkX25hcnJvdworCitidWZmZXJfbmFy cm93ZWRfcCA9IChlb2JfcmVzcGVjdF9uYXJyb3cgLSBib2JfcmVzcGVjdF9uYXJyb3cgIT0gYnVm ZmVyX3NpemUpCisKK3dpbmRvd19jb250ZW50c192aXNpYmxlX3AgPSAoYm9iX3Jlc3BlY3RfbmFy cm93ID09IHdpbmRvd19zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlb2Jf cmVzcGVjdF9uYXJyb3cgPT0gd2luZG93X2VuZCkKKworVGhpcyBpcyB0aGUgQyBbdGVybmFyeSBv cGVyYXRvcl1bMV0gKE9iamVjdGl2ZS1DIGlzIGEgc3VwZXJzZXQgb2YgQyk6CisKKyAgICBsYWJl bC5mcmFtZSA9IChpblBzZXVkb0VkaXRNb2RlKSA/IGtMYWJlbEluZGVudGVkUmVjdCA6IGtMYWJl bFJlY3Q7CisKK2lzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvCisKKyAgICBpZihpblBzZXVk b0VkaXRNb2RlKSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsSW5kZW50ZWRSZWN0OworICAg IH0gZWxzZSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsUmVjdDsKKyAgICB9CisKK1RoZSB0 ZXJuYXJ5IHdpdGggbm8gZmlyc3QgZWxlbWVudCAoZS5nLiBgdmFyaWFibGUgPzogYW5vdGhlclZh cmlhYmxlYCkgbWVhbnMgdGhlIHNhbWUgYXMgYCh2YWxPclZhciAhPSAwKSA/IHZhbE9yVmFyIDog YW5vdGhlclZhbE9yVmFyYAorCitFQVNTRVJUOgorCisgIGVhc3NlcnQgKEJVRl9CRUcgKGIpIDw9 IGNoYXJwb3MgJiYgY2hhcnBvcyA8PSBCVUZfWiAoYikpOworICBib29sIGJhcmZfY3Jhc2ggPSAo QlVGX0JFRyAoYikgPD0gWlYgJiYgWlYgPD0gQlVGX1ogKGIpKSA/IGZhbHNlIDogdHJ1ZTsgKi8K KworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmdG9hc3RyLmg+CisKKyNkZWZpbmUgTk9f RlJJTkdFX0JJVE1BUCAwCisKKy8qIFRleHQgY3Vyc29yIHR5cGVzLiAgKi8KKworZW51bSB0eXBl X29mX2FjdGlvbgoreworICBNVUxUSVBMRV9DVVJTT1JTLAorICBIT1JJWk9OVEFMX1JVTEVSLAor ICBWRVJUSUNBTF9SVUxFUgorfTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcy4gICovCisKK3N0 YXRpYyB2b2lkIGRlYnVnX21ldGhvZF9hZGQgKHN0cnVjdCB3aW5kb3cgKiwgY2hhciBjb25zdCAq LCAuLi4pOworCitzdGF0aWMgaW50IHdpbmRvd19oc2Nyb2xsX2xpbWl0ZWQgKHN0cnVjdCB3aW5k b3cgKncsIHN0cnVjdCBmcmFtZSAqZik7CisKK3ZvaWQgZHVtcF9nbHlwaF9yb3cgKHN0cnVjdCBn bHlwaF9yb3cgKiwgaW50LCBpbnQpIEVYVEVSTkFMTFlfVklTSUJMRTsKKworLyogVGhpcyBpcyBt ZWFudCB0byBiZSB1c2VkIHdoZW4gdGFyZ2V0IGlzIHZpc2libGUgYW5kIHdoZW4gY29kZSBpcyBz YW5kd2ljaGVkOgorICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICBibG9ja19pbnB1dCAoKTsK KyAgICAgbWNfZXJhc2VfZ2x5cGhfY3Vyc29yICh3LCB4LCB5LCBocG9zLCB2cG9zLCBjdXJzb3Jf dHlwZSk7CisgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgIHVwZGF0ZV9lbmQgKGYpOyAqLwor CitzdGF0aWMgdm9pZAorbWNfZXJhc2VfZ2x5cGhfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBw dHJkaWZmX3QgeCwgcHRyZGlmZl90IHksIHB0cmRpZmZfdCBocG9zLAorICAgICAgICAgICAgICAg ICAgICAgICBwdHJkaWZmX3QgdnBvcywgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlw ZSkKK3sKKyAgLyogYG1hdHJpeF9yb3cnIGluIGBkaXNwbmV3LmNgIGNvbnRhaW5zIHRoZSBmb2xs b3dpbmcgdGVzdHMsCisgIGVhc3NlcnQgKG1hdHJpeCAmJiBtYXRyaXgtPnJvd3MpOworICBlYXNz ZXJ0IChyb3cgPj0gMCAmJiByb3cgPCBtYXRyaXgtPm5yb3dzKTsgKi8KKyAgYm9vbCBiYXJmX2Ny YXNoX29uZSA9ICh3LT5jdXJyZW50X21hdHJpeCAmJiB3LT5jdXJyZW50X21hdHJpeC0+cm93cykg PyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX29uZSkKKyAgICByZXR1cm47CisgIGJv b2wgYmFyZl9jcmFzaF90d28gPSAodnBvcyA+PSAwICYmIHZwb3MgPCB3LT5jdXJyZW50X21hdHJp eC0+bnJvd3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF90d28pCisgICAgcmV0 dXJuOworICBpZiAoeCA8IDAKKyAgICAgIHx8IHkgPCAwCisgICAgICB8fCBocG9zIDwgMAorICAg ICAgfHwgdnBvcyA8IDApCisgICAgcmV0dXJuOworICAvKiBSZWNvcmQgdGhlIGN1cnJlbnQgdmFs dWVzIGZvciB3LT5waHlzX2N1cnNvci4gKi8KKyAgcHRyZGlmZl90IG9yaWdpbmFsX3ggPSB3LT5w aHlzX2N1cnNvci54OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfeSA9IHctPnBoeXNfY3Vyc29yLnk7 CisgIHB0cmRpZmZfdCBvcmlnaW5hbF9ocG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKKyAgcHRy ZGlmZl90IG9yaWdpbmFsX3Zwb3MgPSB3LT5waHlzX2N1cnNvci52cG9zOworICBlbnVtIHRleHRf Y3Vyc29yX2tpbmRzIG9yaWdpbmFsX2N1cnNvcl90eXBlID0gdy0+cGh5c19jdXJzb3JfdHlwZTsK KyAgLyogSGlqYWNrIHctPnBoeXNfY3Vyc29yIGJ5IHNldHRpbmcgbmV3IHZhbHVlcy4gKi8KKyAg dy0+cGh5c19jdXJzb3IueCA9IHg7CisgIHctPnBoeXNfY3Vyc29yLnkgPSB5OworICB3LT5waHlz X2N1cnNvci5ocG9zID0gaHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7CisgIHct PnBoeXNfY3Vyc29yX3R5cGUgPSBjdXJzb3JfdHlwZTsKKyAgZXJhc2VfcGh5c19jdXJzb3IgKHcp OworICAvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHctPnBoeXNfY3Vyc29yLiAq LworICB3LT5waHlzX2N1cnNvci54ID0gb3JpZ2luYWxfeDsKKyAgdy0+cGh5c19jdXJzb3IueSA9 IG9yaWdpbmFsX3k7CisgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSBvcmlnaW5hbF9ocG9zOworICB3 LT5waHlzX2N1cnNvci52cG9zID0gb3JpZ2luYWxfdnBvczsKKyAgdy0+cGh5c19jdXJzb3JfdHlw ZSA9IG9yaWdpbmFsX2N1cnNvcl90eXBlOworfQorCisvKiBUaGlzIGlzIG1lYW50IHRvIGJlIHVz ZWQgd2hlbiB0YXJnZXQgaXMgdmlzaWJsZSBhbmQgd2hlbiBjb2RlIGlzIHNhbmR3aWNoZWQ6Cisg ICAgIHVwZGF0ZV9iZWdpbiAoZik7CisgICAgIGJsb2NrX2lucHV0ICgpOworICAgICBtY19kcmF3 X2VyYXNlX2h5YnJpZCAoLi4uKTsKKyAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgdXBkYXRl X2VuZCAoZik7CitXZSBjYWxsIHRoaXMgYSBkcmF3L2VyYXNlIGh5YnJpZCBiZWNhdXNlIGl0IGRv ZXMgYWxsIG9mIHRoZSBmb2xsb3dpbmc6CistICBEcmF3IGFsbCBnbHlwaCBjdXJzb3JzLCBidXQg ZXJhc2Ugd2l0aCBgbWNfZXJhc2VfZ2x5cGhfY3Vyc29yJy4KKy0gIERyYXcvZXJhc2UgYWxsIGZy aW5nZSBiaXRtYXBzIHJlbGF0aW5nIHRvIGNyb3NzaGFpcnMuCistICBEcmF3L2VyYXNlIGFsbCBn bHlwaGxlc3MgY3Vyc29ycy4gKi8KKworc3RhdGljIHZvaWQKK21jX2RyYXdfZXJhc2VfaHlicmlk IChzdHJ1Y3Qgd2luZG93ICp3LCBwdHJkaWZmX3QgeCwgcHRyZGlmZl90IHksIHB0cmRpZmZfdCBo cG9zLCBwdHJkaWZmX3QgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIHRleHRfY3Vy c29yX2tpbmRzIGN1cnNvcl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAg ICAgICAgIExpc3BfT2JqZWN0IGNvbG9yX3ZlY3RvciwgTGlzcF9PYmplY3QgZmxhdm9yKQorewor ICAvKiBgbWF0cml4X3JvdycgaW4gYGRpc3BuZXcuY2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0 ZXN0cywKKyAgZWFzc2VydCAobWF0cml4ICYmIG1hdHJpeC0+cm93cyk7CisgIGVhc3NlcnQgKHJv dyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+bnJvd3MpOyAqLworICBib29sIGJhcmZfY3Jhc2hfb25l ID0gKHctPmN1cnJlbnRfbWF0cml4ICYmIHctPmN1cnJlbnRfbWF0cml4LT5yb3dzKSA/IGZhbHNl IDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfb25lKQorICAgIHJldHVybjsKKyAgYm9vbCBiYXJm X2NyYXNoX3R3byA9ICh2cG9zID49IDAgJiYgdnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93 cykgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICByZXR1cm47Cisg IGlmICh4IDwgMAorICAgICAgfHwgeSA8IDAKKyAgICAgIHx8IGhwb3MgPCAwCisgICAgICB8fCB2 cG9zIDwgMCkKKyAgICByZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJh bWUpOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJy ZW50X21hdHJpeCwgdnBvcyk7CisgIC8qIFJlY29yZCBzb21lIG9mIHRoZSBjdXJyZW50IHZhbHVl cyBmb3IgdGhlIGN1cnNvciBhbmQgZ2x5cGhfcm93LiAqLworICBib29sIG9yaWdpbmFsX2N1cnNv cl9pbl9mcmluZ2VfcCA9IGdseXBoX3Jvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wOworICBib29sIG9y aWdpbmFsX3JldmVyc2VkX3AgPSBnbHlwaF9yb3ctPnJldmVyc2VkX3A7CisgIHB0cmRpZmZfdCBv cmlnaW5hbF94ID0gdy0+cGh5c19jdXJzb3IueDsKKyAgcHRyZGlmZl90IG9yaWdpbmFsX3kgPSB3 LT5waHlzX2N1cnNvci55OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfaHBvcyA9IHctPnBoeXNfY3Vy c29yLmhwb3M7CisgIHB0cmRpZmZfdCBvcmlnaW5hbF92cG9zID0gdy0+cGh5c19jdXJzb3IudnBv czsKKyAgcHRyZGlmZl90IG9yaWdpbmFsX2FzY2VudCA9IHctPnBoeXNfY3Vyc29yX2FzY2VudDsK KyAgcHRyZGlmZl90IG9yaWdpbmFsX2hlaWdodCA9IHctPnBoeXNfY3Vyc29yX2hlaWdodDsKKyAg ZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBvcmlnaW5hbF9jdXJzb3JfdHlwZSA9IHctPnBoeXNfY3Vy c29yX3R5cGU7CisgIC8qIEhpamFjayB3LT5waHlzX2N1cnNvci4gKi8KKyAgdy0+cGh5c19jdXJz b3IueCA9IHg7CisgIHctPnBoeXNfY3Vyc29yLnkgPSBnbHlwaF9yb3ctPnk7CisgIHctPnBoeXNf Y3Vyc29yLmhwb3MgPSBocG9zOworICB3LT5waHlzX2N1cnNvci52cG9zID0gdnBvczsKKyAgdy0+ cGh5c19jdXJzb3JfdHlwZSA9IGN1cnNvcl90eXBlOworICB3LT5waHlzX2N1cnNvcl9hc2NlbnQg PSBnbHlwaF9yb3ctPmFzY2VudDsKKyAgdy0+cGh5c19jdXJzb3JfaGVpZ2h0ID0gZ2x5cGhfcm93 LT5oZWlnaHQ7CisgIC8qIChnZXQgJystbGVmdC1mcmluZ2Utb3ZlcmxheS1wb3NpdGlvbiAnb3Zl cmxheS1hcnJvdy1iaXRtYXApCisgICAgID0+ICcrLW92ZXJsYXktYXJyb3ctYml0bWFwCisgICAg ID0+IFFtY19zbWlsZXlfZmFjZSAqLworICAvKiBMaXNwX09iamVjdCB2YWwgPSBGZ2V0IChpbnRl cm4gKCIrLWxlZnQtZnJpbmdlLW92ZXJsYXktcG9zaXRpb24iKSwgUW92ZXJsYXlfYXJyb3dfYml0 bWFwKTsgKi8KKyAgTGlzcF9PYmplY3QgbWFya2VyID0gZmluZF9zeW1ib2xfdmFsdWUgKGludGVy biAoIm92ZXJsYXktYXJyb3ctcG9zaXRpb24iKSk7CisgIGludCBmcmluZ2VfYml0bWFwID0gTk9f RlJJTkdFX0JJVE1BUDsKKyAgaW50IGZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgIGlmIChF USAoZmxhdm9yLCBRb3ZlcmxheV9hcnJvd19iaXRtYXApKQorICAgIHsKKyAgICAgIExpc3BfT2Jq ZWN0IHZsaXN0OworICAgICAgZm9yICh2bGlzdCA9IFZvdmVybGF5X2Fycm93X3ZhcmlhYmxlX2xp c3Q7CisgICAgICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgICAgIHZsaXN0ID0gWENEUiAo dmxpc3QpKQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmplY3QgdmFyID0gWENBUiAodmxp c3QpOworICAgICAgICAgIExpc3BfT2JqZWN0IHZhbDsKKyAgICAgICAgICBpZiAoIVNZTUJPTFAg KHZhcikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB2YWwgPSBmaW5kX3N5bWJv bF92YWx1ZSAodmFyKTsKKyAgICAgICAgICBpZiAodmFsID0gRmdldCAodmFyLCBRb3ZlcmxheV9h cnJvd19iaXRtYXApLCBTWU1CT0xQICh2YWwpKQorICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9 IGxvb2t1cF9mcmluZ2VfYml0bWFwICh2YWwpOworICAgICAgICB9CisgICAgICBnbHlwaF9yb3ct Pm92ZXJsYXlfYXJyb3dfYml0bWFwID0gKGN1cnNvcl90eXBlICE9IE5PX0NVUlNPUikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZyaW5nZV9iaXRtYXAgLyogbG9v a3VwX2ZyaW5nZV9iaXRtYXAgKGZsYXZvcikgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IE5PX0ZSSU5HRV9CSVRNQVA7CisgICAgICBkcmF3X2ZyaW5nZV9iaXRt YXAgKHcsIGdseXBoX3JvdywgdHJ1ZSk7CisgICAgICAvKiBvcHRpbWl6YXRpb24gMzogIERSQVcg dGhlIGBvdmVybGF5LWFycm93LWJpdG1hcCcgaWYgdGhlcmUgaXMgYSBtYXJrZXIuICovCisgICAg ICBpZiAoTUFSS0VSUCAobWFya2VyKQorICAgICAgICAgICYmIFhNQVJLRVIgKG1hcmtlciktPmJ1 ZmZlcgorICAgICAgICAgICYmIEJVRkZFUl9MSVZFX1AgKFhNQVJLRVIgKG1hcmtlciktPmJ1ZmZl cikpCisgICAgICAgIHsKKyAgICAgICAgICBnbHlwaF9yb3ctPm92ZXJsYXlfYXJyb3dfYml0bWFw ID0gZnJpbmdlX2JpdG1hcDsKKyAgICAgICAgICBkcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIGdseXBo X3JvdywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoRVEgKGZsYXZvciwg UW1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYW5nbGUpCisgICAgICAgICAgICAgfHwgRVEgKGZs YXZvciwgUW1jX2hvbGxvd19yZWN0YW5nbGUpCisgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwg UW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZSkKKyAgICAgICAgICAgICB8fCBFUSAoZmxhdm9y LCBRbWNfdmVydGljYWxfYmFyKQorICAgICAgICAgICAgIHx8IEVRIChmbGF2b3IsIFFtY192ZXJ0 aWNhbF9iYXJfYmFja3NsYXNoKSkKKyAgICAgIHsKKyAgICAgICAgZnJpbmdlX2JpdG1hcCA9IChj dXJzb3JfdHlwZSAhPSBOT19DVVJTT1IpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGxvb2t1 cF9mcmluZ2VfYml0bWFwIChmbGF2b3IpCisgICAgICAgICAgICAgICAgICAgICAgICA6IE5PX0ZS SU5HRV9CSVRNQVA7CisgICAgICAgIGZhY2VfaWQgPSAoY3Vyc29yX3R5cGUgIT0gTk9fQ1VSU09S KQorICAgICAgICAgICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi Ky12ZXJ0aWNhbC1iYXItZmFjZSIpLCB0cnVlKQorICAgICAgICAgICAgICAgICAgOiBERUZBVUxU X0ZBQ0VfSUQ7CisgICAgICAgIGdseXBoX3Jvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wID0gZmFsc2U7 CisgICAgICAgIGdseXBoX3Jvdy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0gMDsKKyAgICAg ICAgZ2x5cGhfcm93LT5yaWdodF9mcmluZ2VfYml0bWFwID0gZnJpbmdlX2JpdG1hcDsKKyAgICAg ICAgZ2x5cGhfcm93LT5yaWdodF9mcmluZ2VfZmFjZV9pZCA9IGZhY2VfaWQ7CisgICAgICAgIGds eXBoX3Jvdy0+cmlnaHRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICAgIGRyYXdfZnJpbmdlX2Jp dG1hcCAodywgZ2x5cGhfcm93LCBmYWxzZSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChFUSAo Zmxhdm9yLCBRbWNfZ2x5cGgpCisgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfZ2x5 cGhsZXNzKQorICAgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX2dseXBoX3RhYikpCisg ICAgICAgIEZSQU1FX1JJRiAoZiktPmRyYXdfd2luZG93X2N1cnNvciAodywgZ2x5cGhfcm93LCB4 LCB5LCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJzb3Jfd2lkdGgsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbG9yX3ZlY3RvciwgZmxhdm9yKTsKKyAgLyogUmVzdG9yZSB0 aGUgcHJldmlvdXMgdmFsdWVzIGZvciB3LT5waHlzX2N1cnNvciBhbmQgZ2x5cGhfcm93LiAqLwor ICB3LT5waHlzX2N1cnNvci54ID0gb3JpZ2luYWxfeDsKKyAgdy0+cGh5c19jdXJzb3IueSA9IG9y aWdpbmFsX3k7CisgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSBvcmlnaW5hbF9ocG9zOworICB3LT5w aHlzX2N1cnNvci52cG9zID0gb3JpZ2luYWxfdnBvczsKKyAgdy0+cGh5c19jdXJzb3JfdHlwZSA9 IG9yaWdpbmFsX2N1cnNvcl90eXBlOworICBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9 IG9yaWdpbmFsX2N1cnNvcl9pbl9mcmluZ2VfcDsKKyAgZ2x5cGhfcm93LT5yZXZlcnNlZF9wID0g b3JpZ2luYWxfcmV2ZXJzZWRfcDsKKyAgdy0+cGh5c19jdXJzb3JfYXNjZW50ID0gb3JpZ2luYWxf YXNjZW50OworICB3LT5waHlzX2N1cnNvcl9oZWlnaHQgPSBvcmlnaW5hbF9oZWlnaHQ7Cit9CisK K3N0YXRpYyBpbnQKK21jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKExpc3BfT2JqZWN0IGFyZykKK3sK KyAgY2hhciAqc3RyOworICBpZiAoWFRZUEUgKGFyZykgPT0gTGlzcF9TdHJpbmcpCisgICAgc3Ry ID0gU1NEQVRBIChhcmcpOworICBlbHNlIGlmIChYVFlQRSAoYXJnKSA9PSBMaXNwX1N5bWJvbCkK KyAgICBzdHIgPSBTU0RBVEEgKFNZTUJPTF9OQU1FIChhcmcpKTsKKyAgZWxzZSByZXR1cm4gLTE7 CisgIGlmICghc3RyY21wIChzdHIsICJib3giKSkKKyAgICByZXR1cm4gRklMTEVEX0JPWF9DVVJT T1I7CisgIGlmICghc3RyY21wIChzdHIsICJob2xsb3ciKSkKKyAgICByZXR1cm4gSE9MTE9XX0JP WF9DVVJTT1I7CisgIGlmICghc3RyY21wIChzdHIsICJoYmFyIikpCisgICAgcmV0dXJuIEhCQVJf Q1VSU09SOworICBpZiAoIXN0cmNtcCAoc3RyLCAiYmFyIikpCisgICAgcmV0dXJuIEJBUl9DVVJT T1I7CisgIGlmICghc3RyY21wIChzdHIsICJubyIpKQorICAgIHJldHVybiBOT19DVVJTT1I7Cisg IHJldHVybiAtMTsKK30KKworc3RhdGljIExpc3BfT2JqZWN0CittY19jdXJzb3JfdHlwZV90b19s aXNwIChpbnQgYXJnKQoreworICBzd2l0Y2ggKGFyZykKKyAgICB7CisgICAgY2FzZSBGSUxMRURf Qk9YX0NVUlNPUjogcmV0dXJuIFFib3g7CisgICAgY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjogcmV0 dXJuIFFob2xsb3c7CisgICAgY2FzZSBIQkFSX0NVUlNPUjogcmV0dXJuIFFoYmFyOworICAgIGNh c2UgQkFSX0NVUlNPUjogcmV0dXJuIFFiYXI7CisgICAgY2FzZSBOT19DVVJTT1I6CisgICAgZGVm YXVsdDogcmV0dXJuIGludGVybiAoIm5vIik7CisgICAgfQorfQorCitzdGF0aWMgTGlzcF9PYmpl Y3QKK21jX2NvbG9yX3ZlY3Rvcl9jYWxjIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCBj b2xvcikKK3sKKyAgQ0hFQ0tfU1RSSU5HIChjb2xvcik7CisgIExpc3BfT2JqZWN0IHRhcmdldF9m cmFtZSA9IHctPmZyYW1lOworICBMaXNwX09iamVjdCBjb2xvcl92YWx1ZXM7CisgIGRvdWJsZSB2 YWxtYXggPSBYSU5UIChYQ0FSIChGeHdfY29sb3JfdmFsdWVzIChidWlsZF9zdHJpbmcgKCIjZmZm ZmZmIiksIHRhcmdldF9mcmFtZSkpKTsKKyAgTGlzcF9PYmplY3Qgdmxpc3Q7CisgIHB0cmRpZmZf dCB4OworICBpbnQgaSA9IDA7CisgIExpc3BfT2JqZWN0IHRlbXAgPSBRbmlsOworICBMaXNwX09i amVjdCB2ZWN0b3IgPSAoRm1ha2VfdmVjdG9yIChtYWtlX251bWJlciAoMyksIFFuaWwpKTsKKyAg aWYgKCFOSUxQIChGbWVtcSAoKEZmcmFtZXAgKHRhcmdldF9mcmFtZSkpLCBsaXN0biAoQ09OU1RZ UEVfSEVBUCwgMywgaW50ZXJuICgieCIpLCBpbnRlcm4gKCJ3MzIiKSwgaW50ZXJuICgibnMiKSkp KSkKKyAgICB7CisgICAgICBjb2xvcl92YWx1ZXMgPSAoRnh3X2NvbG9yX3ZhbHVlcyAoY29sb3Is IHRhcmdldF9mcmFtZSkpOworICAgICAgZm9yICh2bGlzdCA9IGNvbG9yX3ZhbHVlczsKKyAgICAg ICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgdmxpc3QgPSBYQ0RSICh2bGlzdCkpCisg ICAgICAgIHsKKyAgICAgICAgICB4ID0gWElOVCAoWENBUiAodmxpc3QpKTsKKyAgICAgICAgICB0 ZW1wID0gbWFrZV9mbG9hdCAoeCAvIHZhbG1heCk7CisgICAgICAgICAgQVNFVCAodmVjdG9yLCBp LCB0ZW1wKTsKKyAgICAgICAgICBpID0gaSArIDE7CisgICAgICAgIH0KKyAgICB9CisgIHJldHVy biB2ZWN0b3I7Cit9CisKKy8qIFlvdSBvbmx5IG5lZWQgdG8gY2FsbCBsb29rdXBfYmFzaWNfZmFj ZSBpZiBpdC5mYWNlX2lkIGlzIGEgYmFzaWMgZmFjZQorQU5EIGZhY2UtcmVtYXBwaW5nLWFsaXN0 IGlzIG5vbi1uaWwuICBJZiBpdC5mYWNlX2lkIGlzIG5vdCBhIGJhc2ljCitmYWNlLCBsb29rdXBf YmFzaWNfZmFjZSB3aWxsIGFib3J0LCBhbmQgeW91IHNob3VsZCBjYWxsIGxvb2t1cF9mYWNlCitp bnN0ZWFkLiAgRm9yIGEgcmVtYXBwZWQgbm9uLWJhc2ljIGZhY2UgeW91IHdpbGwgaGF2ZSB0byBs b29rIHVwCitmYWNlLXJlbWFwcGluZy1hbGlzdCBtYW51YWxseSBhbmQgdGhlbiB1c2UgbG9va3Vw X25hbWVkX2ZhY2UuICovCisKK3N0YXRpYyBMaXNwX09iamVjdAorbWNfYmdfbHNsIChzdHJ1Y3Qg d2luZG93ICp3LCBlbnVtIGZhY2VfaWQgZmFjZV9pZCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0g WEZSQU1FICh3LT5mcmFtZSk7CisgIHN0cnVjdCBmYWNlICpmYWNlOworICBMaXNwX09iamVjdCBj b2xvciwgY29sb3JfdmVjdG9yOworICBpZiAoIU5JTFAgKFZmYWNlX3JlbWFwcGluZ19hbGlzdCkK KyAgICAgICYmIChmYWNlX2lkID09IERFRkFVTFRfRkFDRV9JRCAvKiBRZGVmYXVsdCAqLworICAg ICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0ZBQ0VfSUQgLyogUW1vZGVfbGluZSAqLwor ICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0lOQUNUSVZFX0ZBQ0VfSUQgLyogUW1v ZGVfbGluZV9pbmFjdGl2ZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gSEVBREVSX0xJTkVf RkFDRV9JRCAvKiBRaGVhZGVyX2xpbmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFRPT0xf QkFSX0ZBQ0VfSUQgLyogUXRvb2xfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBGUklO R0VfRkFDRV9JRCAvKiBRZnJpbmdlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBTQ1JPTExf QkFSX0ZBQ0VfSUQgLyogUXNjcm9sbF9iYXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IEJP UkRFUl9GQUNFX0lEIC8qIFFib3JkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IENVUlNP Ul9GQUNFX0lEIC8qIFFjdXJzb3IgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1PVVNFX0ZB Q0VfSUQgLyogUW1vdXNlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNRU5VX0ZBQ0VfSUQg LyogUW1lbnUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0ZBQ0Vf SUQgLyogUXdpbmRvd19kaXZpZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1df RElWSURFUl9GSVJTVF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9maXJzdF9waXhl bCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfTEFTVF9QSVhFTF9G QUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9sYXN0X3BpeGVsICovCisgICAgICAgICAgfHwgZmFj ZV9pZCA9PSBWRVJUSUNBTF9CT1JERVJfRkFDRV9JRCAvKiBRdmVydGljYWxfYm9yZGVyICovCisg ICAgICAgICAgfHwgZmFjZV9pZCA9PSBJTlRFUk5BTF9CT1JERVJfRkFDRV9JRCkpIC8qIFFpbnRl cm5hbF9ib3JkZXIgKi8KKyAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBsb29rdXBfYmFzaWNf ZmFjZSAodywgZiwgZmFjZV9pZCkpOworICAgIGVsc2UKKyAgICAgIGZhY2UgPSBGQUNFX0ZST01f SUQgKGYsIGZhY2VfaWQpOworICBjb2xvciA9IGZhY2UtPmxmYWNlW0xGQUNFX0JBQ0tHUk9VTkRf SU5ERVhdOworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgY29sb3JfdmVjdG9yID0gbWNfY29s b3JfdmVjdG9yX2NhbGMgKHcsIGNvbG9yKTsKKyAgcmV0dXJuIGNvbG9yX3ZlY3RvcjsKK30KKwor LyogWW91IG9ubHkgbmVlZCB0byBjYWxsIGxvb2t1cF9iYXNpY19mYWNlIGlmIGl0LmZhY2VfaWQg aXMgYSBiYXNpYyBmYWNlCitBTkQgZmFjZS1yZW1hcHBpbmctYWxpc3QgaXMgbm9uLW5pbC4gIElm IGl0LmZhY2VfaWQgaXMgbm90IGEgYmFzaWMKK2ZhY2UsIGxvb2t1cF9iYXNpY19mYWNlIHdpbGwg YWJvcnQsIGFuZCB5b3Ugc2hvdWxkIGNhbGwgbG9va3VwX2ZhY2UKK2luc3RlYWQuICBGb3IgYSBy ZW1hcHBlZCBub24tYmFzaWMgZmFjZSB5b3Ugd2lsbCBoYXZlIHRvIGxvb2sgdXAKK2ZhY2UtcmVt YXBwaW5nLWFsaXN0IG1hbnVhbGx5IGFuZCB0aGVuIHVzZSBsb29rdXBfbmFtZWRfZmFjZS4gKi8K Kworc3RhdGljIExpc3BfT2JqZWN0CittY19iZ19mYWNlIChzdHJ1Y3Qgd2luZG93ICp3LCBlbnVt IGZhY2VfaWQgZmFjZV9pZCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFt ZSk7CisgIHN0cnVjdCBmYWNlICpmYWNlOworICBpZiAoIU5JTFAgKFZmYWNlX3JlbWFwcGluZ19h bGlzdCkKKyAgICAgICYmIChmYWNlX2lkID09IERFRkFVTFRfRkFDRV9JRCAvKiBRZGVmYXVsdCAq LworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0ZBQ0VfSUQgLyogUW1vZGVfbGlu ZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0lOQUNUSVZFX0ZBQ0VfSUQg LyogUW1vZGVfbGluZV9pbmFjdGl2ZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gSEVBREVS X0xJTkVfRkFDRV9JRCAvKiBRaGVhZGVyX2xpbmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IFRPT0xfQkFSX0ZBQ0VfSUQgLyogUXRvb2xfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9 PSBGUklOR0VfRkFDRV9JRCAvKiBRZnJpbmdlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBT Q1JPTExfQkFSX0ZBQ0VfSUQgLyogUXNjcm9sbF9iYXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lk ID09IEJPUkRFUl9GQUNFX0lEIC8qIFFib3JkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IENVUlNPUl9GQUNFX0lEIC8qIFFjdXJzb3IgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1P VVNFX0ZBQ0VfSUQgLyogUW1vdXNlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNRU5VX0ZB Q0VfSUQgLyogUW1lbnUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVS X0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBX SU5ET1dfRElWSURFUl9GSVJTVF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9maXJz dF9waXhlbCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfTEFTVF9Q SVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9sYXN0X3BpeGVsICovCisgICAgICAgICAg fHwgZmFjZV9pZCA9PSBWRVJUSUNBTF9CT1JERVJfRkFDRV9JRCAvKiBRdmVydGljYWxfYm9yZGVy ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBJTlRFUk5BTF9CT1JERVJfRkFDRV9JRCkpIC8q IFFpbnRlcm5hbF9ib3JkZXIgKi8KKyAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBsb29rdXBf YmFzaWNfZmFjZSAodywgZiwgZmFjZV9pZCkpOworICAgIGVsc2UKKyAgICAgIGZhY2UgPSBGQUNF X0ZST01fSUQgKGYsIGZhY2VfaWQpOworICByZXR1cm4gZmFjZS0+bGZhY2VbTEZBQ0VfQkFDS0dS T1VORF9JTkRFWF07Cit9CisKK3N0cnVjdCBmYWNlICoKK21jX2xvb2t1cF9mYWNlIChzdHJ1Y3Qg aXQgKml0KQoreworICBpZiAoIU5JTFAgKFZmYWNlX3JlbWFwcGluZ19hbGlzdCkKKyAgICAgICYm IChpdC0+ZmFjZV9pZCA9PSBERUZBVUxUX0ZBQ0VfSUQgLyogUWRlZmF1bHQgKi8KKyAgICAgICAg ICB8fCBpdC0+ZmFjZV9pZCA9PSBNT0RFX0xJTkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lICovCisg ICAgICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gTU9ERV9MSU5FX0lOQUNUSVZFX0ZBQ0VfSUQgLyog UW1vZGVfbGluZV9pbmFjdGl2ZSAqLworICAgICAgICAgIHx8IGl0LT5mYWNlX2lkID09IEhFQURF Ul9MSU5FX0ZBQ0VfSUQgLyogUWhlYWRlcl9saW5lICovCisgICAgICAgICAgfHwgaXQtPmZhY2Vf aWQgPT0gVE9PTF9CQVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8KKyAgICAgICAgICB8fCBpdC0+ ZmFjZV9pZCA9PSBGUklOR0VfRkFDRV9JRCAvKiBRZnJpbmdlICovCisgICAgICAgICAgfHwgaXQt PmZhY2VfaWQgPT0gU0NST0xMX0JBUl9GQUNFX0lEIC8qIFFzY3JvbGxfYmFyICovCisgICAgICAg ICAgfHwgaXQtPmZhY2VfaWQgPT0gQk9SREVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLworICAgICAg ICAgIHx8IGl0LT5mYWNlX2lkID09IENVUlNPUl9GQUNFX0lEIC8qIFFjdXJzb3IgKi8KKyAgICAg ICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBNT1VTRV9GQUNFX0lEIC8qIFFtb3VzZSAqLworICAgICAg ICAgIHx8IGl0LT5mYWNlX2lkID09IE1FTlVfRkFDRV9JRCAvKiBRbWVudSAqLworICAgICAgICAg IHx8IGl0LT5mYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZp ZGVyICovCisgICAgICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfRklSU1Rf UElYRUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfZmlyc3RfcGl4ZWwgKi8KKyAgICAgICAg ICB8fCBpdC0+ZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9MQVNUX1BJWEVMX0ZBQ0VfSUQgLyog UXdpbmRvd19kaXZpZGVyX2xhc3RfcGl4ZWwgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9 PSBWRVJUSUNBTF9CT1JERVJfRkFDRV9JRCAvKiBRdmVydGljYWxfYm9yZGVyICovCisgICAgICAg ICAgfHwgaXQtPmZhY2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpKSAvKiBRaW50ZXJu YWxfYm9yZGVyICovCisgICAgcmV0dXJuIEZBQ0VfRlJPTV9JRCAoaXQtPmYsIGxvb2t1cF9iYXNp Y19mYWNlIChpdC0+dywgaXQtPmYsIGl0LT5mYWNlX2lkKSk7CisgICAgICBlbHNlCisgICAgICAg IHJldHVybiBGQUNFX0ZST01fSUQgKGl0LT5mLCBpdC0+ZmFjZV9pZCk7Cit9CisKK3N0YXRpYyB2 b2lkCittY19zdGRlcnIgKHN0cnVjdCBpdCAqaXQsIGludCBjb3VudCwgaW50IG5ld194LCBpbnQg cmVsYXRpdmVfeCwKKyAgICAgICAgICAgaW50IHByZXZpb3VzX2NoYXJhY3RlcixpbnQgcHJldmlv dXNfaHBvcywgYm9vbCBpc3N1ZV8zMTcxNl9wLAorICAgICAgICAgICBib29sIGZpbmFsX2xvb3Bf cCwgYm9vbCBscHdfcmVhY2hlZF9wLCBib29sIGdyZWVuX2xpZ2h0X3AsCisgICAgICAgICAgIGJv b2wgYWR2YW5jZV9ocG9zX3AsIGJvb2wgaHNjbF90ZW1wb3JhcnksIGJvb2wgaHNjbF9wZXJtYW5l bnQsCisgICAgICAgICAgIGVudW0gbW92ZV9pdF9yZXN1bHQgcmMsIGVudW0gdHlwZV9vZl9hY3Rp b24gYWN0aW9uX3R5cGUpCit7CisgIGludCB3X2hzY3JvbGwgPSBpdC0+dy0+aHNjcm9sbDsKKyAg aW50IHdfbWluX2hzY3JvbGwgPSBpdC0+dy0+bWluX2hzY3JvbGw7CisgIGludCBpdF9jaGFycG9z ID0gSVRfQ0hBUlBPUyAoKml0KTsKKyAgc3RydWN0IGZhY2UgKmZhY2UgPSBtY19sb29rdXBfZmFj ZSAoaXQpOworICBzdHJ1Y3QgZm9udCAqZm9udCA9IGZhY2UtPmZvbnQ7CisgIExpc3BfT2JqZWN0 IGZvcmVncm91bmRfZmFjZSA9IGZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOwor ICBMaXNwX09iamVjdCBiYWNrZ3JvdW5kX2ZhY2UgPSBmYWNlLT5sZmFjZVtMRkFDRV9CQUNLR1JP VU5EX0lOREVYXTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiXG4lZC4gICVzJXMgLS0gKCVzKVxuXAor ICAgIGl0LT5jICglZClcblwKKyAgICBmZXRjaF9ieXRlICglZClcblwKKyAgICBjaGFyYWN0ZXIg KCVzKVxuXAorICAgIElUX0NIQVJQT1MgKCVkKVxuXAorICAgIHctPmhzY3JvbGwgKCVkKVxuXAor ICAgIHctPm1pbl9oc2Nyb2xsICglZClcblwKKyAgICBoc2NsX3RlbXBvcmFyeSAoJXMpXG5cCisg ICAgaHNjbF9wZXJtYW5lbnQgKCVzKVxuXAorICAgIGl0LT5ocG9zICglZClcblwKKyAgICBpdC0+ dnBvcyAoJWQpXG5cCisgICAgaXQtPmN1cnJlbnRfeCAoJWQpXG5cCisgICAgbmV3X3ggKCVkKVxu XAorICAgIGZvbnQtPnNwYWNlX3dpZHRoICglZClcblwKKyAgICBpdC0+bG51bV9waXhlbF93aWR0 aCAoJWQpXG5cCisgICAgaXQtPmxudW1fd2lkdGggKCVkKVxuXAorICAgIGl0LT5maXJzdF92aXNp YmxlX3ggKCVkKVxuXAorICAgIGl0LT5sYXN0X3Zpc2libGVfeCAoJWQpXG5cCisgICAgcmVsYXRp dmVfeCAoJWQpXG5cCisgICAgaXQtPmZhY2VfaWQgKCVkKVxuXAorICAgIGZvcmVncm91bmRfZmFj ZSAoJXMpXG5cCisgICAgYmFja2dyb3VuZF9mYWNlICglcylcblwKKyAgICBwcmV2aW91cyBjaGFy YWN0ZXIgKCVzKVxuXAorICAgIHByZXZpb3VzX2hwb3MgKCVkKVxuXAorICAgIGlzc3VlXzMxNzE2 X3AgKCVzKVxuXAorICAgIGZpbmFsX2xvb3BfcCAoJXMpXG5cCisgICAgbHB3X3JlYWNoZWRfcCAo JXMpXG5cCisgICAgZ3JlZW5fbGlnaHRfcCAoJXMpXG5cCisgICAgYWR2YW5jZV9ocG9zX3AgKCVz KVxuXAorICAgIHJjICglcylcbiIsCisgICAgICBjb3VudCwKKyAgICAgIChpdC0+YyA9PSAwCisg ICAgICAgID8gIk5PVEhJTkciCisgICAgICAgIDogaXQtPmMgPT0gMTg3CisgICAgICAgICAgPyAi VEFCIENIQVJBQ1RFUiIKKyAgICAgICAgOiBpdC0+YyA9PSAnXHQnCisgICAgICAgICAgPyAiVEFC IFNUUkVUQ0giCisgICAgICAgIDogIlRFWFQiKSwKKyAgICAgIChyZWxhdGl2ZV94ID09IGl0LT5s bnVtX3BpeGVsX3dpZHRoCisgICAgICAgID8gIiAtLSBUSEUgRlVOIFNUQVJUUyBIRVJFIgorICAg ICAgICA6ICIiKSwKKyAgICAgIChhY3Rpb25fdHlwZSA9PSBNVUxUSVBMRV9DVVJTT1JTCisgICAg ICAgPyAiTVVMVElQTEVfQ1VSU09SUyIKKyAgICAgICA6IGFjdGlvbl90eXBlID09IEhPUklaT05U QUxfUlVMRVIKKyAgICAgICAgID8gIkhPUklaT05UQUxfUlVMRVIiCisgICAgICAgOiBhY3Rpb25f dHlwZSA9PSBWRVJUSUNBTF9SVUxFUgorICAgICAgICAgPyAiVkVSVElDQUxfUlVMRVIiCisgICAg ICAgOiAiT09QUyIpLAorICAgICAgaXQtPmMsCisgICAgICBGRVRDSF9CWVRFIChJVF9CWVRFUE9T ICgqaXQpKSwKKyAgICAgICghTklMUCAoRmNoYXJfdG9fc3RyaW5nIChtYWtlX251bWJlciAoaXQt PmMpKSkKKyAgICAgICAgPyBTU0RBVEEgKEZjaGFyX3RvX3N0cmluZyAobWFrZV9udW1iZXIgKGl0 LT5jKSkpCisgICAgICAgIDogIk5JTFAgLS0gaXQtPmMgYXMgYSBzdHJpbmciKSwKKyAgICAgIGl0 X2NoYXJwb3MsCisgICAgICAvKiBXaGVuIGBpdC0+dy0+aHNjcm9sbGAgaXMgc2V0IHRvIGFuIGBp bnRgLCBnZGIgcmVwb3J0cyB0aGUgdmFsdWUKKyAgICAgIGFzIGJlaW5nOiAgPHZhcmlhYmxlIG9w dGltaXplZCBhd2F5IGJ5IGNvbXBpbGVyPiAqLworICAgICAgd19oc2Nyb2xsLAorICAgICAgd19t aW5faHNjcm9sbCwKKyAgICAgIChoc2NsX3RlbXBvcmFyeSA/ICJ0cnVlIiA6ICJmYWxzZSIpLAor ICAgICAgKGhzY2xfcGVybWFuZW50ID8gInRydWUiIDogImZhbHNlIiksCisgICAgICBpdC0+aHBv cywKKyAgICAgIGl0LT52cG9zLAorICAgICAgaXQtPmN1cnJlbnRfeCwKKyAgICAgIG5ld194LAor ICAgICAgLyogQ2Fubm90IGFjY2VzcyBtZW1vcnkgYXQgYWRkcmVzcyAweGEwLiAgVGhpcyBjYW1l IGFib3V0IGJ5IHVzaW5nCisgICAgICBgP1xVMDAwMUQ0RDVgIHRvIGNyZWF0ZSBhIGZhbmN5IGZv cm0gZmVlZCBjaGFyYWN0ZXIgdGhhdCB3YXMgbm90CisgICAgICByZWNvZ25pemVkIGJ5IHRoZSBm b250IGNob3NlbiBvbiBYMTEuICovCisgICAgICAoZm9udCA9PSBOVUxMCisgICAgICAgPyAwCisg ICAgICAgOiBmb250LT5zcGFjZV93aWR0aCksCisgICAgICBpdC0+bG51bV9waXhlbF93aWR0aCwK KyAgICAgIGl0LT5sbnVtX3dpZHRoLAorICAgICAgaXQtPmZpcnN0X3Zpc2libGVfeCwKKyAgICAg IGl0LT5sYXN0X3Zpc2libGVfeCwKKyAgICAgIHJlbGF0aXZlX3gsCisgICAgICBpdC0+ZmFjZV9p ZCwKKyAgICAgICghTklMUCAoZm9yZWdyb3VuZF9mYWNlKQorICAgICAgICA/IFNTREFUQSAoZm9y ZWdyb3VuZF9mYWNlKQorICAgICAgICA6ICJOSUxQIGZvcmVncm91bmRfZmFjZSIpLAorICAgICAg KCFOSUxQIChiYWNrZ3JvdW5kX2ZhY2UpCisgICAgICAgID8gU1NEQVRBIChiYWNrZ3JvdW5kX2Zh Y2UpCisgICAgICAgIDogIk5JTFAgYmFja2dyb3VuZF9mYWNlIiksCisgICAgICAoIU5JTFAgKEZj aGFyX3RvX3N0cmluZyAobWFrZV9udW1iZXIgKHByZXZpb3VzX2NoYXJhY3RlcikpKQorICAgICAg ICA/IFNTREFUQSAoRmNoYXJfdG9fc3RyaW5nIChtYWtlX251bWJlciAocHJldmlvdXNfY2hhcmFj dGVyKSkpCisgICAgICAgIDogIk5JTFAgLS0gcHJldmlvdXNfY2hhcmFjdGVyIGFzIGEgc3RyaW5n IiksCisgICAgICBwcmV2aW91c19ocG9zLAorICAgICAgKGlzc3VlXzMxNzE2X3AgPyAidHJ1ZSIg OiAiZmFsc2UiKSwKKyAgICAgIChmaW5hbF9sb29wX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAg ICAgIChscHdfcmVhY2hlZF9wID8gInRydWUiIDogImZhbHNlIiksCisgICAgICAoZ3JlZW5fbGln aHRfcCA/ICJ0cnVlIiA6ICJmYWxzZSIpLAorICAgICAgKGFkdmFuY2VfaHBvc19wID8gInRydWUi IDogImZhbHNlIiksCisgICAgICAocmMgPT0gTU9WRV9VTkRFRklORUQKKyAgICAgICAgPyAiTU9W RV9VTkRFRklORUQiCisgICAgICAgIDogcmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAg ICAgICA/ICJNT1ZFX1BPU19NQVRDSF9PUl9aViIKKyAgICAgICAgOiByYyA9PSBNT1ZFX1hfUkVB Q0hFRAorICAgICAgICAgID8gIk1PVkVfWF9SRUFDSEVEIgorICAgICAgICA6IHJjID09IE1PVkVf TElORV9DT05USU5VRUQKKyAgICAgICAgICA/ICJNT1ZFX0xJTkVfQ09OVElOVUVEIgorICAgICAg ICA6IHJjID09IE1PVkVfTElORV9UUlVOQ0FURUQKKyAgICAgICAgICA/ICJNT1ZFX0xJTkVfVFJV TkNBVEVEIgorICAgICAgICA6IHJjID09IE1PVkVfTkVXTElORV9PUl9DUgorICAgICAgICAgID8g Ik1PVkVfTkVXTElORV9PUl9DUiIKKyAgICAgICAgOiAiT09QUyIpKTsKK30KKworc3RhdGljIHZv aWQKK21jX2Nyb3NzaGFpcnNfaGVscGVyIChzdHJ1Y3Qgd2luZG93ICp3LCBwdHJkaWZmX3QgeCwg cHRyZGlmZl90IHksIHB0cmRpZmZfdCBocG9zLAorICAgICAgICAgICAgICAgICAgICAgIHB0cmRp ZmZfdCB2cG9zLCBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIHR5cGUsIGludCB3aWR0aCwKKyAgICAg ICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBmb3JlZ3JvdW5kLCBMaXNwX09iamVjdCBiYWNr Z3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGZsYXZvciwgcHRyZGlm Zl90IHBvcywgTGlzcF9PYmplY3QgKnJlc3VsdCkKK3sKKyAgTGlzcF9PYmplY3QgdGVtcDsKKyAg bWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIHgsIHksIGhwb3MsIHZwb3MsIHR5cGUsIHdpZHRoLCBm b3JlZ3JvdW5kLCBmbGF2b3IpOworICB0ZW1wID0gbGlzdG4gKENPTlNUWVBFX0hFQVAsIDEwLAor ICAgICAgICAgICAgICAgIG1ha2VfbnVtYmVyICh4KSwKKyAgICAgICAgICAgICAgICBtYWtlX251 bWJlciAoeSksCisgICAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKGhwb3MpLAorICAgICAgICAg ICAgICAgIG1ha2VfbnVtYmVyICh2cG9zKSwKKyAgICAgICAgICAgICAgICBtY19jdXJzb3JfdHlw ZV90b19saXNwICh0eXBlKSwKKyAgICAgICAgICAgICAgICBtYWtlX251bWJlciAod2lkdGgpLAor ICAgICAgICAgICAgICAgIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwK KyAgICAgICAgICAgICAgICBmbGF2b3IsCisgICAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKHBv cykpOworICAqcmVzdWx0ID0gRmNvbnMgKHRlbXAsICpyZXN1bHQpOworfQorCitzdGF0aWMgdm9p ZAorbWNfY2FsY19oZWxwZXIgKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCB4LCBwdHJkaWZm X3QgeSwgcHRyZGlmZl90IGhwb3MsCisgICAgICAgICAgICAgICAgcHRyZGlmZl90IHZwb3MsIGVu dW0gdGV4dF9jdXJzb3Jfa2luZHMgdHlwZSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgIExp c3BfT2JqZWN0IGZvcmVncm91bmQsIExpc3BfT2JqZWN0IGJhY2tncm91bmQsIExpc3BfT2JqZWN0 IGZsYXZvciwKKyAgICAgICAgICAgICAgICBwdHJkaWZmX3QgcG9zLCBMaXNwX09iamVjdCBzcGVj cywgTGlzcF9PYmplY3QgKnJlc3VsdCkKK3sKKyAgTGlzcF9PYmplY3QgdGVuX2VsZW1lbnRzOwor ICBMaXNwX09iamVjdCB0ZW1wOworICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgeSwgaHBv cywgdnBvcywgdHlwZSwgd2lkdGgsIGZvcmVncm91bmQsIGZsYXZvcik7CisgIHRlbl9lbGVtZW50 cyA9IGxpc3RuIChDT05TVFlQRV9IRUFQLCAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VfbnVtYmVyICh4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfbnVtYmVyICh5KSwK KyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfbnVtYmVyIChocG9zKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIG1ha2VfbnVtYmVyICh2cG9zKSwKKyAgICAgICAgICAgICAgICAgICAgICAg IG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKHR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAg bWFrZV9udW1iZXIgKHdpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQs CisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgICAgICAg ICAgICAgZmxhdm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKHBvcykp OworICB0ZW1wID0gRmNvbnMgKHNwZWNzLCBGY29ucyAodGVuX2VsZW1lbnRzLCBRbmlsKSk7Cisg ICpyZXN1bHQgPSBGY29ucyAodGVtcCwgKnJlc3VsdCk7Cit9CisKKy8qIFJldHVybiB0aGUgc3Rh cnQgb3IgZW5kIHBvc2l0aW9uIG9mIHRoZSByZWdpb24uCisgICBCRUdJTk5JTkdQIG1lYW5zIHJl dHVybiB0aGUgc3RhcnQuCisgICBJZiB0aGVyZSBpcyBubyByZWdpb24gYWN0aXZlLCBzaWduYWwg YW4gZXJyb3IuCisgICBFWEFNUExFIChyZWdpb24tYmVnaW5uaW5nKTogIHJlZ2lvbl9saW1pdCAo MSkKKyAgIEVYQU1QTEUgKHJlZ2lvbi1lbmQpOiAgcmVnaW9uX2xpbWl0ICgwKSAqLworCitzdGF0 aWMgTGlzcF9PYmplY3QKK21jX3JlZ2lvbl9saW1pdCAoYm9vbCBiZWdpbm5pbmdwKQoreworICBM aXNwX09iamVjdCBtOworICBpZiAoIU5JTFAgKFZ0cmFuc2llbnRfbWFya19tb2RlKQorICAgICAg JiYgTklMUCAoVm1hcmtfZXZlbl9pZl9pbmFjdGl2ZSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKGN1 cnJlbnRfYnVmZmVyLCBtYXJrX2FjdGl2ZSkpKQorICAgIHJldHVybiBRbmlsOworICBtID0gRm1h cmtlcl9wb3NpdGlvbiAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1hcmspKTsKKyAgaWYgKE5JTFAg KG0pKQorICAgIHJldHVybiBRbmlsOworICAvKiBTZWUgYHJlZ2lvbi1hY3RpdmUtcCcgYW5kIGBy ZWRpc3BsYXktLXVwZGF0ZS1yZWdpb24taGlnaGxpZ2h0Jy4gKi8KKyAgaWYgKCFOSUxQIChWdHJh bnNpZW50X21hcmtfbW9kZSkKKyAgICAgICYmICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwg bWFya19hY3RpdmUpKQorICAgICAgJiYgIU5JTFAgKG0pKQorICAgIHJldHVybiBtYWtlX251bWJl ciAoKFBUIDwgWEZBU1RJTlQgKG0pKSA9PSBiZWdpbm5pbmdwCisgICAgICAgICAgICAgICAgICAg ICAgICA/IFBUCisgICAgICAgICAgICAgICAgICAgICAgICA6IGNsaXBfdG9fYm91bmRzIChCRUdW LCBYRkFTVElOVCAobSksIFpWKSk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBRbmlsOwor fQorCisvKiBTUEVDUyB3aWxsIGJlIGFuIExTTCBjb2xvciB2ZWN0b3IgaWYgY29taW5nIGZyb20g YG1jX2RyYXdfY3Jvc3NoYWlycycuCitTUEVDUyB3aWxsIGJlIGEgY29uc3AgbGlzdCBpZiBjb21p bmcgZnJvbSBgbWNfY2FsYycuICovCisKK3N0YXRpYyB2b2lkCittY19tb3ZlX2l0IChzdHJ1Y3Qg aXQgKml0LCBlbnVtIHR5cGVfb2ZfYWN0aW9uIGFjdGlvbl90eXBlLCBMaXNwX09iamVjdCBzcGVj cywgTGlzcF9PYmplY3QgKnJlc3VsdCkKK3sKKyAgcHRyZGlmZl90IHBvc2ludCA9IChWRUNUT1JQ IChzcGVjcykpCisgICAgICAgICAgICAgICAgICAgICA/IC0xCisgICAgICAgICAgICAgICAgICAg ICA6IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgwKSwgc3BlY3MpKTsKKyAgTGlzcF9PYmplY3Qg bGlzcF90eXBlID0gKFZFQ1RPUlAgKHNwZWNzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg PyBRbmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogRm50aCAobWFrZV9udW1iZXIgKDEp LCBzcGVjcyk7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUgPSAoVkVDVE9S UCAoc3BlY3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWN0 aW9uX3R5cGUgPT0gSE9SSVpPTlRBTF9SVUxFUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gSEJBUl9DVVJTT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogIChWRUNUT1JQIChzcGVjcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBhY3Rpb25fdHlwZSA9PSBWRVJUSUNBTF9SVUxFUikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBCQVJfQ1VSU09SCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChDT05TUCAobGlzcF90eXBlKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWNfbGlzcF90b19jdXJz b3JfdHlwZSAoWENBUiAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogbWNfbGlzcF90b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsKKyAgaW50IGN1 cnNvcl93aWR0aCA9IChWRUNUT1JQIChzcGVjcykpCisgICAgICAgICAgICAgICAgICAgICA/IDEK KyAgICAgICAgICAgICAgICAgICAgIDogKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAg ICAgICAgICAgICAgPyBYSU5UIChYQ0FSIChYQ0RSIChsaXNwX3R5cGUpKSkKKyAgICAgICAgICAg ICAgICAgICAgIDogMTsKKyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IChWRUNUT1JQIChzcGVj cykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNwZWNzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IEZudGggKG1ha2VfbnVtYmVyICgyKSwgc3BlY3MpOworICBpZiAoU1RSSU5H UCAoZm9yZWdyb3VuZCkpCisgICAgZm9yZWdyb3VuZCA9IG1jX2NvbG9yX3ZlY3Rvcl9jYWxjIChp dC0+dywgZm9yZWdyb3VuZCk7CisgIGludCBvcG9pbnRfeCA9IGl0LT53LT5vdXRwdXRfY3Vyc29y Lng7CisgIGludCBvcG9pbnRfeSA9IGl0LT53LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9p bnRfaHBvcyA9IGl0LT53LT5vdXRwdXRfY3Vyc29yLmhwb3M7CisgIGludCBvcG9pbnRfdnBvcyA9 IGl0LT53LT5vdXRwdXRfY3Vyc29yLnZwb3M7CisgIGludCByZWxhdGl2ZV94ID0gMDsKKyAgaW50 IHByaW9yX3ByZXZpb3VzX2hwb3MgPSAtMTsKKyAgaW50IHByZXZpb3VzX2hwb3MgPSAtMTsKKyAg ZW51bSBtb3ZlX2l0X3Jlc3VsdCByYyA9IE1PVkVfWF9SRUFDSEVEOworICBMaXNwX09iamVjdCBi dWYgPSBpdC0+dy0+Y29udGVudHM7CisgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09M VU1OX1dJRFRIIChpdC0+Zik7CisgIGludCB0ZXh0X2FyZWFfd2lkdGggPSB3aW5kb3dfYm94X3dp ZHRoIChpdC0+dywgVEVYVF9BUkVBKTsKKyAgYm9vbCBjdXJzb3JfaW5fZnJpbmdlX3AgPSBvcG9p bnRfeCArIGZyYW1lX2NoYXJfd2lkdGggPj0gdGV4dF9hcmVhX3dpZHRoOworICBib29sIGhzY2xf dGVtcG9yYXJ5ID0gKCFpdC0+dy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1ZSAoUWF1dG9faHNjcm9sbF9tb2Rl LCBidWYpLCBRY3VycmVudF9saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT53 LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5taW5faHNj cm9sbCA9PSAwKTsKKyAgYm9vbCBoc2NsX3Blcm1hbmVudCA9ICghaXQtPnctPnN1c3BlbmRfYXV0 b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRVEgKEZidWZmZXJfbG9jYWxf dmFsdWUgKFFhdXRvX2hzY3JvbGxfbW9kZSwgYnVmKSwgUWN1cnJlbnRfbGluZSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBpdC0+dy0+bWluX2hzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgaXQtPnctPm1pbl9oc2Nyb2xsICE9IGl0LT53LT5oc2Nyb2xsKTsKKyAgaW50IGhzY2xf Zmlyc3RfaHBvcyA9IHdpbmRvd19oc2Nyb2xsX2xpbWl0ZWQgKGl0LT53LCBpdC0+Zik7CisgIGlu dCBoZWFkZXJfbGluZV9oZWlnaHQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUIChpdC0+dyk7 CisgIGludCBjb3VudCA9IDA7CisgIGludCB2cG9zID0gMDsKKyAgaW50IG5ld194ID0gMDsKKyAg aW50IHNhdmVkX3JlbGF0aXZlX3hfZm9yX3RhYiA9IDA7CisgIGludCBzYXZlZF9jdXJyZW50X3gg PSAwOworICBwdHJkaWZmX3QgcHJldmlvdXNfcHQgPSAwOworICBpbnQgZmV0Y2hfYnl0ZV9wcmV2 aW91c19jaGFyYWN0ZXIgPSAwOworICBpbnQgcHJldmlvdXNfY2hhcmFjdGVyID0gMDsKKyAgaW50 IHByZXZpb3VzX3JlbGF0aXZlX3ggPSAwOworICBlbnVtIGZhY2VfaWQgcHJldmlvdXNfZmFjZV9p ZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgYm9vbCBnaG9zdF9vZl9jaHJpc3RtYXNfZnV0dXJlX3Ag PSBmYWxzZTsKKyAgaW50IGdob3N0X29mX2NocmlzdG1hc19mdXR1cmVfcmVsYXRpdmVfeCA9IDA7 CisgIGludCBnaG9zdF9vZl9jaHJpc3RtYXNfZnV0dXJlX2hwb3MgPSAwOworICBpbnQgZ2hvc3Rf b2ZfY2hyaXN0bWFzX2Z1dHVyZV9mYWNlX2lkID0gMDsKKyAgTGlzcF9PYmplY3QgcmVnaW9uX2xp bWl0X3RydWUgPSBtY19yZWdpb25fbGltaXQgKHRydWUpOworICBwdHJkaWZmX3QgcmVnaW9uX2Jl Z2lubmluZyA9ICghTklMUCAocmVnaW9uX2xpbWl0X3RydWUpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gWElOVCAocmVnaW9uX2xpbWl0X3RydWUpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAwOworICBMaXNwX09iamVjdCByZWdpb25fbGltaXRfZmFsc2UgPSBt Y19yZWdpb25fbGltaXQgKGZhbHNlKTsKKyAgcHRyZGlmZl90IHJlZ2lvbl9lbmQgPSAoIU5JTFAg KHJlZ2lvbl9saW1pdF9mYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBYSU5UIChy ZWdpb25fbGltaXRfZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOworICBzdHJ1 Y3QgZ2x5cGggKnBoeXNfY3Vyc29yX2dseXBoID0gZ2V0X3BoeXNfY3Vyc29yX2dseXBoIChpdC0+ dyk7CisgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKHJlZ2lvbl9iZWdpbm5pbmcgIT0gcmVnaW9u X2VuZCk7CisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGNvdW50ICs9IDE7CisgICAgICBz dHJ1Y3QgZmFjZSAqZmFjZSA9IG1jX2xvb2t1cF9mYWNlIChpdCk7CisgICAgICBzdHJ1Y3QgZm9u dCAqZm9udCA9IGZhY2UtPmZvbnQ7CisgICAgICBpbnQgZm9udF9zcGFjZV93aWR0aCA9IChmb250 ID09IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnJhbWVfY2hhcl93aWR0 aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb250LT5zcGFjZV93aWR0aCk7Cisg ICAgICBpZiAoaGVhZGVyX2xpbmVfaGVpZ2h0ID4gMCkKKyAgICAgICAgdnBvcyA9IGl0LT52cG9z ICsgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHZwb3MgPSBpdC0+dnBvczsKKyAgICAgIGlm IChoc2NsX3Blcm1hbmVudAorICAgICAgICAgICYmIG5ld194ID4gMAorICAgICAgICAgICYmIG9w b2ludF92cG9zID09IHZwb3MpCisgICAgICAgIC8qIHJlbGF0aXZlX3ggPSBuZXdfeCAtIGl0LT5m aXJzdF92aXNpYmxlX3g7ICovCisgICAgICAgIHJlbGF0aXZlX3ggPSBuZXdfeCAtIChoc2NsX2Zp cnN0X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoKTsKKyAgICAgICAgLyogVGVtcG9yYXJ5IGhvcml6 b250YWwgc2Nyb2xsaW5nIG9mIF9vbmx5XyB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICBUaGlz IHdhcyBkaWZmaWN1bHQgdG8gZ2V0IHJpZ2h0LCBzbyBiZSBjYXJlZnVsIGlmIGV2ZXIgY2hhbmdp bmcgaXQuCisgICAgICAgIFRoZSByZWFzb24gaXQgaXMgZGlmZmljdWx0IHRvIGdldCByaWdodCBp cyBiZWNhdXNlIGluIGEgdmVydGljYWwKKyAgICAgICAgcnVsZXIgc2l0dWF0aW9uLCB3ZSBzdG9w IHdoZW4gYHJlbGF0aXZlX3hgIGVxdWFscyBgb3BvaW50X3hgIGFuZCB0aGUKKyAgICAgICAgbGF0 dGVyIGlzIG9mIGNvdXJzZSBhbHdheXMgY29ycmVjdCwgYnV0IHRoZSBIUE9TIHdpbGwgc29tZXRp bWVzIGJlCisgICAgICAgIHdyb25nIGlmIGByZWxhdGl2ZV94YCBhbmQgYG9wb2ludF94YCBhcmUg b3V0IG9mIHN5bmMuICovCisgICAgICAgIGVsc2UgaWYgKGhzY2xfdGVtcG9yYXJ5CisgICAgICAg ICAgICAgICAgICYmIG5ld194ID4gMAorICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9 PSB2cG9zKQorICAgICAgICAgIHJlbGF0aXZlX3ggPSBuZXdfeCAtIChoc2NsX2ZpcnN0X2hwb3Mg KiBmcmFtZV9jaGFyX3dpZHRoKTsKKyAgICAgICAgICBlbHNlIGlmIChuZXdfeCA+IDApCisgICAg ICAgICAgICByZWxhdGl2ZV94ID0gbmV3X3ggLSBpdC0+Zmlyc3RfdmlzaWJsZV94OworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICByZWxhdGl2ZV94ID0gMDsKKyAgICAgIC8qIFNlZSB0 aGUgZXhwbGFuYXRpb24gYnkgRWxpIFouIGFzIHRvIGlzc3VlICMzMTcxNi4gIEhvcml6b250YWwg c2Nyb2xsaW5nCisgICAgICAob2YgYWxsIGxpbmVzKSBpcyBhY3RpdmUuICBUaGUgYmVnaW5uaW5n IG9mIHRoZSBUQUIgU1RSRVRDSCBsaWVzIGJlZm9yZQorICAgICAgaXQtPmZpcnN0X3Zpc2libGVf eCArIGl0LT5sbnVtX3BpeGVsX3dpZHRoOyBhbmQsIHRoZSBuZXh0IGRpc3BsYXkgZWxlbWVudCBp cworICAgICAgc3Vic2VxdWVudCB0aGVyZXRvLgorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICAgICAgNy4gIFRBQiBTVFJFVENICisgICAgICAgICAgaXQtPmMgKDkpCisg ICAgICAgICAgY2hhciAoCSkKKyAgICAgICAgICBpdC0+dy0+aHNjcm9sbCAoNCkKKyAgICAgICAg ICBoc2NsX3RlbXBvcmFyeSAoZmFsc2UpCisgICAgICAgICAgaXQtPmhwb3MgKDApCisgICAgICAg ICAgaXQtPmN1cnJlbnRfeCAoMTEpCisgICAgICAgICAgbmV3X3ggKDc3KQorICAgICAgICAgIGZv bnRfc3BhY2Vfd2lkdGggKDExKQorICAgICAgICAgIGl0LT5sbnVtX3BpeGVsX3dpZHRoICg0NCkK KyAgICAgICAgICByZWxhdGl2ZV94ICgzMykKKyAgICAgICAgICByYyAoTU9WRV9YX1JFQUNIRUQp CisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICA4LiAgVEVYVCAt LSBUSEUgRlVOIFNUQVJUUyBIRVJFCisgICAgICAgICAgaXQtPmMgKDcyKQorICAgICAgICAgIGNo YXIgKEgpCisgICAgICAgICAgaXQtPnctPmhzY3JvbGwgKDQpCisgICAgICAgICAgaHNjbF90ZW1w b3JhcnkgKGZhbHNlKQorICAgICAgICAgIGl0LT5ocG9zICg1KQorICAgICAgICAgIGl0LT5jdXJy ZW50X3ggKDEzMikKKyAgICAgICAgICBuZXdfeCAoODgpCisgICAgICAgICAgZm9udF9zcGFjZV93 aWR0aCAoMTEpCisgICAgICAgICAgaXQtPmxudW1fcGl4ZWxfd2lkdGggKDQ0KQorICAgICAgICAg IHJlbGF0aXZlX3ggKDQ0KQorICAgICAgICAgIHJjIChNT1ZFX1hfUkVBQ0hFRCkKKyAgICAgID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIDcuICBUQUIgU1RSRVRDSAorICAg ICAgICAgIGl0LT5jICg5KQorICAgICAgICAgIGNoYXIgKAkpCisgICAgICAgICAgaXQtPnctPmhz Y3JvbGwgKDIpCisgICAgICAgICAgaHNjbF90ZW1wb3JhcnkgKGZhbHNlKQorICAgICAgICAgIGl0 LT5ocG9zICgwKQorICAgICAgICAgIGl0LT5jdXJyZW50X3ggKDExKQorICAgICAgICAgIG5ld194 ICg3NykKKyAgICAgICAgICBmb250X3NwYWNlX3dpZHRoICgxMSkKKyAgICAgICAgICBpdC0+bG51 bV9waXhlbF93aWR0aCAoNDQpCisgICAgICAgICAgcmVsYXRpdmVfeCAoNTUpCisgICAgICAgICAg cmMgKE1PVkVfWF9SRUFDSEVEKQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICAgICAgOC4gIFRFWFQKKyAgICAgICAgICBpdC0+YyAoNzIpCisgICAgICAgICAgY2hhciAo SCkKKyAgICAgICAgICBpdC0+dy0+aHNjcm9sbCAoMikKKyAgICAgICAgICBoc2NsX3RlbXBvcmFy eSAoZmFsc2UpCisgICAgICAgICAgaXQtPmhwb3MgKDUpCisgICAgICAgICAgaXQtPmN1cnJlbnRf eCAoMTMyKQorICAgICAgICAgIG5ld194ICg4OCkKKyAgICAgICAgICBmb250X3NwYWNlX3dpZHRo ICgxMSkKKyAgICAgICAgICBpdC0+bG51bV9waXhlbF93aWR0aCAoNDQpCisgICAgICAgICAgcmVs YXRpdmVfeCAoNjYpCisgICAgICAgICAgcmMgKE1PVkVfWF9SRUFDSEVEKSAqLworICAgICAgYm9v bCBpc3N1ZV8zMTcxNl9wID0gKCFoc2NsX3RlbXBvcmFyeQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmICFoc2NsX3Blcm1hbmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IGl0LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByaW9y X3ByZXZpb3VzX2hwb3MgPT0gLTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2 aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0 LT5ocG9zID4gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmb250X3NwYWNlX3dpZHRoKTsKKyAgICAg IGludCBoc2NsX3ggPSAoaHNjbF90ZW1wb3JhcnkKKyAgICAgICAgICAgICAgICAgICAgfHwgaHNj bF9wZXJtYW5lbnQpCisgICAgICAgICAgICAgICAgICAgID8gaXQtPmN1cnJlbnRfeCAtIChoc2Ns X2ZpcnN0X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICA6IGl0 LT5jdXJyZW50X3ggLSBpdC0+Zmlyc3RfdmlzaWJsZV94OworICAgICAgYm9vbCBmaW5hbF9sb29w X3AgPSAoKEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpdC0+YyAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogfHwgSVRFUkFUT1JfQVRfRU5EX09GX0xJTkVfUCAoaXQpICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCByYyA9PSBNT1ZFX1BPU19NQVRDSF9PUl9aVgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgfHwgcmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgfHwgaHNjbF94ICsgZnJhbWVfY2hhcl93aWR0aCA+PSB0ZXh0X2FyZWFf d2lkdGgpOworICAgICAgYm9vbCBscHdfcmVhY2hlZF9wID0gKHByZXZpb3VzX3JlbGF0aXZlX3gg Pj0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBp c3N1ZV8zMTcxNl9wKTsKKyAgICAgIGJvb2wgZ3JlZW5fbGlnaHRfcCA9IChpdC0+Y3VycmVudF94 ID4gc2F2ZWRfY3VycmVudF94KSA/IHRydWUgOiBmYWxzZTsKKyAgICAgIGJvb2wgYWR2YW5jZV9o cG9zX3AgPSAoZ3JlZW5fbGlnaHRfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBs cHdfcmVhY2hlZF9wKTsKKyAgICAgIGlmIChhZHZhbmNlX2hwb3NfcCkKKyAgICAgICAgcHJldmlv dXNfaHBvcyArPSAocHJldmlvdXNfaHBvcyA9PSAtMQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmICFFUSAoVmRpc3BsYXlfbGluZV9udW1iZXJzLCBRdmlzdWFsKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgPyAoaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmb250X3NwYWNlX3dp ZHRoKSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVsYXRpdmVfeCA+IDApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAwOworICAgICAgICBlbHNlIGlmIChmaW5hbF9sb29wX3AKKyAgICAgICAgICAgICAgICAg JiYgcHJldmlvdXNfaHBvcyA9PSAtMSkKKyAgICAgICAgICBwcmV2aW91c19ocG9zID0gMDsKKyAg ICAgIC8qIGl0LT5jID09ICdcdCcgd2hlbiBJVCBpcyBhdCBhIHRhYi13aWR0aCBzcGFjZXIgZm9s bG93aW5nIGEKKyAgICAgIGBidWZmZXItZGlzcGxheS10YWJsZScgZ2x5cGggc3VjaCBhcyDCuy4g IEFub3RoZXIgd2F5IHRvIHRlc3QKKyAgICAgIGZvciB0aGlzIGNvbmRpdGlvbiBpcyB3aGVuIGl0 LT5jID09IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpLiAqLworICAgICAgYm9vbCB0YWJf aW52aXNpYmxlX3AgPSBwcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JzsKKyAgICAgIGJvb2wgdGFi X3Zpc2libGVfcCA9IChwcmV2aW91c19jaGFyYWN0ZXIgIT0gJ1x0JworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIGZldGNoX2J5dGVfcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcpOwor ICAgICAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAoYWN0aW9uX3R5cGUgPT0gVkVSVElDQUxf UlVMRVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKG9wb2ludF95ID09IGl0 LT5jdXJyZW50X3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdnBvcyA9 PSBvcG9pbnRfdnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAob3BvaW50 X3ggPT0gcHJldmlvdXNfcmVsYXRpdmVfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBvcG9pbnRfeSA9PSBpdC0+Y3VycmVudF95CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IHByZXZpb3VzX2hwb3MKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0gdnBvcyk7CisgICAgICBp ZiAoIU5JTFAgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtY19zdGRlcnIpKSkKKyAgICAgICAgbWNf c3RkZXJyIChpdCwgY291bnQsIG5ld194LCByZWxhdGl2ZV94LCBwcmV2aW91c19jaGFyYWN0ZXIs CisgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaHBvcywgaXNzdWVfMzE3MTZfcCwgZmluYWxf bG9vcF9wLCBscHdfcmVhY2hlZF9wLAorICAgICAgICAgICAgICAgICAgIGdyZWVuX2xpZ2h0X3As IGFkdmFuY2VfaHBvc19wLCBoc2NsX3RlbXBvcmFyeSwgaHNjbF9wZXJtYW5lbnQsCisgICAgICAg ICAgICAgICAgICAgcmMsIGFjdGlvbl90eXBlKTsKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAg eworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTVVMVElQTEUgQ1VSU09SUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7 CisgICAgICBpZiAocHJldmlvdXNfcHQgPT0gcG9zaW50CisgICAgICAgICAgfHwgRkVUQ0hfQllU RSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJykKKyAgICAgICAgeworICAgICAgICAgIGVudW0g ZmFjZV9pZCB0ZW1wX2ZhY2VfaWQgPSBwcmV2aW91c19mYWNlX2lkOworICAgICAgICAgIGludCB0 ZW1wX3ggPSByZWxhdGl2ZV94OworICAgICAgICAgIGludCB0ZW1wX2hwb3MgPSBwcmV2aW91c19o cG9zOworICAgICAgICAgIC8qIEFzIHRvIGBtY19jYWxjJywgd2UgYXJlIGludGVyZXN0ZWQgaW4g dGhlIGN1cnJlbnQgSFBPUyBhbmQgdGhlIGN1cnJlbnQKKyAgICAgICAgICBgcmVsYXRpdmVfeGAu ICBUaGUgaW5jb21pbmcgYXJndW1lbnQgZm9yIHByZXZpb3VzX2hwb3MgaXMgYWN0dWFsbHkgaHBv cywKKyAgICAgICAgICB3aGljaCBnZXRzIG1vZGlmaWVkIGFjY29yZGluZ2x5IGhlcmUgKGV2ZW4g dGhvdWdoIGEgZGlmZmVyZW50IG5hbWUpLiAqLworICAgICAgICAgIGlmIChwcmV2aW91c19wdCA9 PSBwb3NpbnQpCisgICAgICAgICAgICAvKiBXZSBjb3VsZCwgYnV0IGFyZSBub3QgbW9kaWZ5aW5n IHRoZSBnbG9iYWwgcHJldmlvdXNfcmVsYXRpdmVfeC4gKi8KKyAgICAgICAgICAgIHRlbXBfeCA9 IHByZXZpb3VzX3JlbGF0aXZlX3g7CisgICAgICAgICAgICAvKiBXZSBhcmUgYXQgdGhlIGVuZCBv ZiB0aGUgbGluZS4gKi8KKyAgICAgICAgICAgIGVsc2UgaWYgKChJVEVSQVRPUl9BVF9FTkRfT0Zf TElORV9QIChpdCkKKyAgICAgICAgICAgICAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRF UE9TICgqaXQpKSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgJiYgSVRfQ0hBUlBPUyAo Kml0KSA9PSBwb3NpbnQpCisgICAgICAgICAgICAgIC8qIGByZWxhdGl2ZV94YCBpcyBhbHJlYWR5 IGNvcnJlY3QuICovCisgICAgICAgICAgICAgIHRlbXBfaHBvcyA9IHByZXZpb3VzX2hwb3MgKyAx OworICAgICAgICAgIExpc3BfT2JqZWN0IGZsYXZvciA9IFFuaWw7CisgICAgICAgICAgaWYgKElU X0NIQVJQT1MgKCppdCkgPT0gcG9zaW50CisgICAgICAgICAgICAgICYmIChJVEVSQVRPUl9BVF9F TkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAgICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZ VEVQT1MgKCppdCkpID09ICdcbicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmbGF2 b3IgPSBRbWNfZ2x5cGhsZXNzOworICAgICAgICAgICAgICB0ZW1wX2ZhY2VfaWQgPSBpdC0+ZmFj ZV9pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IGZsYXZvciA9IFFtY19nbHlwaDsKKyAgICAgICAgICBpZiAocmMgPT0gTU9WRV9MSU5FX0NPTlRJ TlVFRCkKKyAgICAgICAgICAgIHRlbXBfaHBvcyA9IHByZXZpb3VzX2hwb3MgKyAxOworICAgICAg ICAgIG1jX2NhbGNfaGVscGVyIChpdC0+dywgdGVtcF94LCBpdC0+Y3VycmVudF95LCB0ZW1wX2hw b3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jf d2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAo aXQtPncsIHRlbXBfZmFjZV9pZCksIGZsYXZvciwgcG9zaW50LAorICAgICAgICAgICAgICAgICAg ICAgICAgICBzcGVjcywgcmVzdWx0KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhPUklaT05UQUwgUlVMRVIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIEhPUklaT05U QUxfUlVMRVI6CisgICAgeworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUW1jX2dseXBoICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgICAgaWYgKChncmVlbl9s aWdodF9wCisgICAgICAgICAgIC8qIFBsYWNlIGFuIFFtY19nbHlwaCBvbiB0aGUgbGFzdCBzcGFj ZSBvZiBhIHdyYXBwZWQgbGluZS4gKi8KKyAgICAgICAgICAgfHwgcmMgPT0gTU9WRV9MSU5FX0NP TlRJTlVFRCkKKyAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAgJiYg bHB3X3JlYWNoZWRfcAorICAgICAgICAgICYmICF0YWJfaW52aXNpYmxlX3ApCisgICAgICAgIHsK KyAgICAgICAgICBlbnVtIGZhY2VfaWQgdGVtcF9mYWNlX2lkID0gKHJjID09IE1PVkVfTElORV9D T05USU5VRUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXQtPmZh Y2VfaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcmV2aW91c19m YWNlX2lkOworICAgICAgICAgIGludCB0ZW1wX2hwb3MgPSAocmMgPT0gTU9WRV9MSU5FX0NPTlRJ TlVFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmV2aW91c19ocG9zICsgMQorICAg ICAgICAgICAgICAgICAgICAgICAgICA6IHByZXZpb3VzX2hwb3M7CisgICAgICAgICAgcHRyZGlm Zl90IGl0X2NoYXJwb3MgPSAocmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IElUX0NIQVJQT1MgKCppdCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IElUX0NIQVJQT1MgKCppdCkgLSAxOworICAgICAgICAgIG1j X2Nyb3NzaGFpcnNfaGVscGVyIChpdC0+dywgcHJldmlvdXNfcmVsYXRpdmVfeCwgaXQtPmN1cnJl bnRfeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9ocG9zLCB2cG9zLCBj dXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3JlZ3JvdW5kLCBtY19iZ19sc2wgKGl0LT53LCB0ZW1wX2ZhY2VfaWQpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRbWNfZ2x5cGgsIGl0X2NoYXJwb3MsIHJlc3VsdCk7Cisg ICAgICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFtY19nbHlwaF90YWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgIC8qIEZJWE1FOiAgRHJhd2luZyBh IFFtY19nbHlwaCBIQkFSX0NVUlNPUiBvbiBjZXJ0YWluIGxldHRlcnMgKEEsIG0sIE0sIHcsIFcp CisgICAgICBsb2NhdGVkIHRvIHRoZSBpbW1lZGlhdGUgcmlnaHQgb2YgYSB0YWIgc3BhY2VyLCBj YXVzZSB0aGUgUW1jX2dseXBobGVzcworICAgICAgSEJBUl9DVVJTT1IgdG8gdGhlIGltbWVkaWF0 ZSBsZWZ0IHRvIGJlIGVyYXNlZC4gIFRoaXMgaXMgcHJvYmFibHkgYW4KKyAgICAgIG92ZXJoYW5n IHNpdHVhdGlvbi4gIEFuIG9idmlvdXMgd29ya2Fyb3VuZCB3b3VsZCBiZSB0byByZWNvcmQgdGhl CisgICAgICBjb29yZGluYXRlcyBmb3IgdGhlIFFtY19nbHlwaGxlc3MgY3Vyc29ycyBhbmQgdGhl biBkcmF3IHRoZW0gYWxsIEFGVEVSIHRoZQorICAgICAgUW1jX2dseXBoIGN1cnNvcnMgaGF2ZSBi ZWVuIGxhaWQuICBIb3cgYWJvdXQgcHVzaGluZyBhbGwgdGhlIGNvb3JkaW5hdGVzCisgICAgICB0 byB0aGUgY2FjaGUsIGFuZCB0aGVuIGV4ZWN1dGluZyBhIHZhcmlhdGlvbiBvZiBgbWNfcmVkcmF3 X2Nyb3NzaGFpcnMnCisgICAgICBbd2l0aCBzYWlkIHZlcnNpb24gYmVpbmcgcmV3cml0dGVuXSB0 byBsb29wIHR3aWNlIG92ZXIgdGhlIGxpc3QsIGZpcnN0CisgICAgICBmb3IgUW1jX2dseXBoLCBh bmQgdGhlbiBmb3IgUW1jX2dseXBobGVzcz8gKi8KKyAgICAgIGlmIChncmVlbl9saWdodF9wCisg ICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJzb3JfcAorICAgICAgICAgICYmIGxwd19yZWFjaGVk X3AKKyAgICAgICAgICAmJiB0YWJfaW52aXNpYmxlX3ApCisgICAgICAgIHsKKyAgICAgICAgICBp bnQgaTsKKyAgICAgICAgICBpbnQgdGVtcF94ID0gKHNhdmVkX3JlbGF0aXZlX3hfZm9yX3RhYiA8 IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBpdC0+bG51 bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgOiBzYXZlZF9yZWxhdGl2ZV94 X2Zvcl90YWI7CisgICAgICAgICAgaW50IGNvdW50ID0gKHJlbGF0aXZlX3ggLSB0ZW1wX3gpIC8g Zm9udF9zcGFjZV93aWR0aDsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWNfY3Jvc3NoYWlyc19oZWxwZXIgKGl0LT53 LCB0ZW1wX3gsIGl0LT5jdXJyZW50X3ksIHByZXZpb3VzX2hwb3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3Jl Z3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfYmdfbHNsIChp dC0+dywgcHJldmlvdXNfZmFjZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRbWNfZ2x5cGhfdGFiLCBJVF9DSEFSUE9TICgqaXQpIC0gMSwgcmVzdWx0KTsKKyAgICAg ICAgICAgICAgdGVtcF94ICs9IGZvbnRfc3BhY2Vfd2lkdGg7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgR2hv c3Qgb2YgQ2hyaXN0bWFzIEZ1dHVyZSAtLSBRbWNfZ2x5cGhfdGFiICAgICAgICAgICAgICAgICov CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgIGlmIChncmVlbl9saWdodF9wCisgICAg ICAgICAgJiYgZ2hvc3Rfb2ZfY2hyaXN0bWFzX2Z1dHVyZV9wCisgICAgICAgICAgJiYgbHB3X3Jl YWNoZWRfcCkKKyAgICAgICAgeworICAgICAgICAgIGludCBpOworICAgICAgICAgIGludCB0ZW1w X3ggPSAoZ2hvc3Rfb2ZfY2hyaXN0bWFzX2Z1dHVyZV9yZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4 ZWxfd2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGl0LT5sbnVtX3BpeGVsX3dpZHRo CisgICAgICAgICAgICAgICAgICAgICAgICA6IGdob3N0X29mX2NocmlzdG1hc19mdXR1cmVfcmVs YXRpdmVfeDsKKyAgICAgICAgICBpbnQgY291bnQgPSAocHJldmlvdXNfcmVsYXRpdmVfeCAtIHRl bXBfeCkgLyBmb250X3NwYWNlX3dpZHRoOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtY19jcm9zc2hhaXJzX2hlbHBl ciAoaXQtPncsIHRlbXBfeCwgaXQtPmN1cnJlbnRfeSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdob3N0X29mX2NocmlzdG1hc19mdXR1cmVfaHBvcywgdnBvcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgs IGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY19iZ19s c2wgKGl0LT53LCBnaG9zdF9vZl9jaHJpc3RtYXNfZnV0dXJlX2ZhY2VfaWQpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUW1jX2dseXBoX3RhYiwgSVRfQ0hBUlBPUyAoKml0 KSAtIDIsIHJlc3VsdCk7CisgICAgICAgICAgICAgIHRlbXBfeCArPSBmb250X3NwYWNlX3dpZHRo OworICAgICAgICAgICAgfQorICAgICAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8q ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUW1jX2dseXBobGVzcyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICBp ZiAoZmluYWxfbG9vcF9wKQorICAgICAgICB7CisgICAgICAgICAgLyogV2Ugd2FudCB0byBzdGFy dCBkcmF3aW5nIHRoZSBmbG9hdGluZyBob3Jpem9udGFsIGxpbmUgZnJvbSBJVAorICAgICAgICAg IChsaW5lIGZlZWQ7IFpWOyBvciBzcGFjZS13b3JkX3dyYXApIHVudGlsIHRoZSByaWdodCBmcmlu Z2UuCisgICAgICAgICAgSWYgdGhlIGxpbmUgaXMgZW1wdHkgb3IgaGlkZGVuIGJ5IGhvcml6b250 YWwgc2Nyb2xsaW5nLCB0aGVuIGBpdC5jdXJyZW50X3hgCisgICAgICAgICAgbWF5IGJlIHNvbWV3 aGVyZSBiZWZvcmUgYGxudW1fcGl4ZWxfd2lkdGhgLiAgVGhlIHJlYWwgY3Vyc29yIHdpbGwgYmUg dG8gdGhlCisgICAgICAgICAgbGVmdCBvZiBgbG51bV9waXhlbF93aWR0aGAgaWYgd2UgYXJlIGhv cml6b250YWwgc2Nyb2xsaW5nIGFuZCBwb2ludCBpcworICAgICAgICAgIGhpZGRlbiBzb21ld2hl cmUgdG8gdGhlIGxlZnQgdGhlcmVvZi4gKi8KKyAgICAgICAgICBlbnVtIGZhY2VfaWQgdGVtcF9m YWNlX2lkID0gKChwaHlzX2N1cnNvcl9nbHlwaCA9IGdldF9waHlzX2N1cnNvcl9nbHlwaCAoaXQt PncpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g REVGQVVMVF9GQUNFX0lECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAoSVRfQ0hBUlBPUyAoKml0KSA+PSByZWdpb25fZW5kCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfHwgcmVnaW9uX2JlZ2lubmluZyA9PSByZWdpb25fZW5kKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBERUZBVUxUX0ZBQ0Vf SUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGh5c19jdXJz b3JfZ2x5cGgtPmZhY2VfaWQ7CisgICAgICAgICAgLyogQW4gZW1wdHkgbmV3IGxpbmUgLS0gbG9v cCBpbiBwcmV2aW91cyBzZWN0aW9uIGJyb2tlIGltbWVkaWF0ZWx5LiAqLworICAgICAgICAgIGlu dCB0ZW1wX2hwb3MgPSAocmVsYXRpdmVfeCA9PSBpdC0+bG51bV9waXhlbF93aWR0aCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgID8gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFy X3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBuZWVkIHRvIHJlYWRqdXN0 IGJlY2F1c2UgaXQgd2FzIGRvbmUgYWJvdmUuICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IHJjID09IE1PVkVfTElORV9DT05USU5VRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyBwcmV2aW91c19ocG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByZXZpb3Vz X2hwb3MgKyAxOworICAgICAgICAgIC8qIEFuIGVtcHR5IG5ldyBsaW5lIC0tIGxvb3AgaW4gcHJl dmlvdXMgc2VjdGlvbiBicm9rZSBpbW1lZGlhdGVseS4gKi8KKyAgICAgICAgICBpbnQgdGVtcF94 ID0gKHJlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aCkKKyAgICAgICAgICAgICAgICAg ICAgICAgPyBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICA6IHJl bGF0aXZlX3g7CisgICAgICAgICAgd2hpbGUgKHRlbXBfeCArIGZyYW1lX2NoYXJfd2lkdGggPCB0 ZXh0X2FyZWFfd2lkdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1jX2Nyb3NzaGFp cnNfaGVscGVyIChpdC0+dywgdGVtcF94LCBpdC0+Y3VycmVudF95LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGVtcF9ocG9zLCB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29y X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZCwg bWNfYmdfbHNsIChpdC0+dywgdGVtcF9mYWNlX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFtY19nbHlwaGxlc3MsIElUX0NIQVJQT1MgKCppdCksIHJlc3VsdCk7Cisg ICAgICAgICAgICAgIHRlbXBfeCA9IHRlbXBfeCArIGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAg ICAgICB9CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9 CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVkVSVElDQUwgUlVMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7Cisg ICAgICBpZiAocHJldmlvdXNfcmVsYXRpdmVfeCA9PSBvcG9pbnRfeAorICAgICAgICAgIHx8IGZp bmFsX2xvb3BfcCkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBo X3JvdyA9ICBNQVRSSVhfUk9XIChpdC0+dy0+Y3VycmVudF9tYXRyaXgsIHZwb3MpOworICAgICAg ICAgIExpc3BfT2JqZWN0IGZsYXZvciA9IFFuaWw7CisgICAgICAgICAgZW51bSBmYWNlX2lkIHRl bXBfZmFjZV9pZCA9IHByZXZpb3VzX2ZhY2VfaWQ7CisgICAgICAgICAgaW50IHRlbXBfaHBvcyA9 IHByZXZpb3VzX2hwb3M7CisgICAgICAgICAgLyogU2tpcCB0aGlzIGxpbmUuICovCisgICAgICAg ICAgaWYgKHJlYWxfZmFrZV9jdXJzb3JfcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAvKiBJZiBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiB0aGUgbGluZSBudW1iZXJzIHdoZW4gc2Ny b2xsaW5nCisgICAgICAgICAgaG9yaXpvbnRhbGx5LCB0aGVuIHdlIHdhbnQgdGhlIHZlcnRpY2Fs IGxpbmUgdG8gYWxpZ24gd2l0aCByaWdodCBlZGdlCisgICAgICAgICAgb2YgdGhlIGxpbmUgbnVt YmVycy4gKi8KKyAgICAgICAgICBpZiAoaXQtPnctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAg ICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPT0gb3BvaW50X3gKKyAgICAgICAgICAgICAgJiYgb3Bv aW50X3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAmJiBwcmV2aW91c19o cG9zID09IC0xKQorICAgICAgICAgICAgdGVtcF9ocG9zID0gKGl0LT5sbnVtX3BpeGVsX3dpZHRo IC8gZm9udF9zcGFjZV93aWR0aCkgLSAxOworICAgICAgICAgICAgZWxzZSBpZiAoZmluYWxfbG9v cF9wCisgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19ocG9zICE9IDAKKyAgICAgICAg ICAgICAgICAgICAgICYmIHJjID09IE1PVkVfTElORV9DT05USU5VRUQpCisgICAgICAgICAgICAg IHRlbXBfaHBvcyA9IHByZXZpb3VzX2hwb3MgKyAxOworICAgICAgICAgIGlmICgoaXQtPnctPmhz Y3JvbGwgPiAwCisgICAgICAgICAgICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94ID09IG9wb2lu dF94CisgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQor ICAgICAgICAgICAgICB8fCBJVF9DSEFSUE9TICgqaXQpID09IFpWKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBmbGF2b3IgPSBRbWNfZ2x5cGhsZXNzOworICAgICAgICAgICAgICB0ZW1w X2ZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl bHNlIGlmIChnaG9zdF9vZl9jaHJpc3RtYXNfZnV0dXJlX3ApCisgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBmbGF2b3IgPSBRbWNfZ2x5cGhfdGFiOworICAgICAgICAgICAgICAgIHRl bXBfZmFjZV9pZCA9IGdob3N0X29mX2NocmlzdG1hc19mdXR1cmVfZmFjZV9pZDsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmIChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAg ICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAg ICAgICAgICAgICAgICBmbGF2b3IgPSBRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlOworICAg ICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAg ICAgICAgICAgICYmIGdseXBoX3Jvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICBm bGF2b3IgPSBRbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaDsKKyAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg IWdseXBoX3Jvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3AKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmICFnbHlwaF9yb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAgICAgICAgICAgICBmbGF2 b3IgPSBRbWNfdmVydGljYWxfYmFyOworICAgICAgICAgICAgICAgICAgICAvKiBXaGVuIElUIGlz IGF0IHRoZSBlbmQgb2YgYSBsaW5lLCB1c2UgYFFtY19nbHlwaGxlc3MnLgorICAgICAgICAgICAg ICAgICAgICBIb3dldmVyLCBpdCBpcyBva2F5IHRvIHVzZSBRbWNfZ2x5cGggZm9yIGEgd29yZC13 cmFwcGVkIGxpbmUuICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFJVEVSQVRPUl9B VF9FTkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRkVU Q0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgIT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSAhPSAnXGYnCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGl0LT5jID09ICdcdCcgd2hlbiBJVCBpcyBhdCBhIHRh Yi13aWR0aCBzcGFjZXIgZm9sbG93aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBnbHlwaCBzdWNoIGFzIMK7LiAgQW5vdGhlciB3YXkgdG8g dGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBjb25kaXRpb24gaXMg d2hlbiBpdC0+YyA9PSBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKS4gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmMgIT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmMgIT0gTU9WRV9MSU5FX0NPTlRJTlVFRAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbGF0aXZlX3ggLyBmcmFtZV9jaGFyX3dpZHRo ID49IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgIGZsYXZvciA9 IFFtY19nbHlwaDsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBJdCBpcyBva2F5IHRvIHVzZSBR bWNfZ2x5cGggZm9yIGEgd29yZC13cmFwcGVkIGxpbmUuICovCisgICAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAocmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICcgJworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPT0gb3Bv aW50X3gpCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF2b3IgPSBRbWNfZ2x5cGg7CisgICAg ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0Jwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA9 PSBvcG9pbnRfeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZsYXZvciA9IFFtY19nbHlwaF90YWI7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGVtcF9mYWNlX2lkID0gcHJldmlvdXNfZmFjZV9pZDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zmxhdm9yID0gUW1jX2dseXBobGVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGVtcF9mYWNlX2lkID0gREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgIC8qIENPUk5FUiBDQVNFUzoKKyAgICAgICAgICAtICBXaGVuIHRo ZSB2ZXJ0aWNhbCBsaW5lIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0ZXh0IGFuZCBqdXN0IHRvIHRo ZQorICAgICAgICAgICAgIHJpZ2h0IG9mIHRoZSBsaW5lIG51bWJlcnMsIHdlIHdhbnQgdGhlIGRl ZmF1bHQgZmFjZS4KKyAgICAgICAgICAtICBXaGVuIHRoZXJlIGlzIGFuIGltYWdpbmFyeSBlbXB0 eSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB3aXRoCisgICAgICAgICAgICAgbm90aGlu ZyBvdGhlciB0aGFuIFpWLCB3ZSB3YW50IHRvIHVzZSB0aGUgZnJhbWUgZGVmYXVsdCBmYWNlIGlm IFpWCisgICAgICAgICAgICAgaXMgYXQgdGhlIGVuZCBvZiBhbiBhY3RpdmUgcmVnaW9uLiAqLwor ICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3ApCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIC8qIFN1YnNlcXVlbnQgdG8gYHJlZ2lvbl9lbmRgIGFuZCBhdCB0aGUgZW5kIG9mIGEgbGlu ZS4gKi8KKyAgICAgICAgICAgICAgaWYgKElUX0NIQVJQT1MgKCppdCkgPj0gcmVnaW9uX2VuZAor ICAgICAgICAgICAgICAgICAgJiYgKElURVJBVE9SX0FUX0VORF9PRl9MSU5FX1AgKGl0KQorICAg ICAgICAgICAgICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdc bicpKQorICAgICAgICAgICAgICAgIHRlbXBfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAg ICAgICAgICAgICAgICAvKiBQcmlvciB0byBgcmVnaW9uX2JlZ2lubmluZ2AgYW5kIGF0IHRoZSBl bmQgb2YgYSBsaW5lLiAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKElUX0NIQVJQT1MgKCpp dCkgPCByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKElURVJB VE9SX0FUX0VORF9PRl9MSU5FX1AgKGl0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nKSkKKyAgICAgICAgICAgICAg ICAgIHRlbXBfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICAgICAgICAgIC8q IC0gIFdpdGhpbiB0aGUgcmVnaW9uLgorICAgICAgICAgICAgICAgICAgICAgLSAgYHBoeXNfY3Vy c29yX2dseXBoYCBpcyBOVUxMLiAqLworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSVRfQ0hB UlBPUyAoKml0KSA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBJVF9DSEFSUE9TICgqaXQpIDwgcmVnaW9uX2VuZAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgcGh5c19jdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAg dGVtcF9mYWNlX2lkID0gcHJldmlvdXNfZmFjZV9pZDsKKyAgICAgICAgICAgICAgICAgICAgLyog LSAgV2l0aGluIHRoZSByZWdpb24uCisgICAgICAgICAgICAgICAgICAgICAgIC0gIGBwaHlzX2N1 cnNvcl9nbHlwaGAgaXMgbm9uLU5VTEwuCisgICAgICAgICAgICAgICAgICAgICAgIC0gIEF0IHRo ZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgIC0gIFBUIGlzIGF0IGBy ZWdpb25fYmVnaW5uaW5nYC4gKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSVRfQ0hB UlBPUyAoKml0KSA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIElUX0NIQVJQT1MgKCppdCkgPCByZWdpb25fZW5kCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09 ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBoeXNfY3Vyc29yX2dseXBo ICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUFQgPT0gcmVnaW9uX2Jl Z2lubmluZykKKyAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2ZhY2VfaWQgPSBwaHlzX2N1cnNv cl9nbHlwaC0+ZmFjZV9pZDsKKyAgICAgICAgICAgICAgICAgICAgICAvKiAtICBXaXRoaW4gdGhl IHJlZ2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAtICBgcGh5c19jdXJzb3JfZ2x5cGhg IGlzIG5vbi1OVUxMLgorICAgICAgICAgICAgICAgICAgICAgICAgIC0gIEF0IHRoZSBlbmQgb2Yg dGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgLSAgUFQgaXMgYXQgYHJlZ2lvbl9y ZWdpb25fZW5kYC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJVF9DSEFSUE9T ICgqaXQpID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBJVF9DSEFSUE9TICgqaXQpIDwgcmVnaW9uX2VuZAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkg PT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwaHlzX2N1cnNvcl9n bHlwaCAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUFQgPT0gcmVn aW9uX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlbXBfZmFjZV9pZCA9IHBoeXNf Y3Vyc29yX2dseXBoLT5mYWNlX2lkOyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVt cF9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKGl0LT5mLCBpbnRlcm4gKCJyZWdpb24iKSwg dHJ1ZSk7ICovCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2ZhY2VfaWQgPSBpdC0+ZmFj ZV9pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0gIFdpdGhpbiB0aGUgcmVnaW9uLgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgYHBoeXNfY3Vyc29yX2dseXBoYCBpcyBub24t TlVMTC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIE5vdCBhdCB0aGUgZW5kIG9mIHRo ZSBsaW5lLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSVRfQ0hBUlBPUyAo Kml0KSA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBJVF9DSEFSUE9TICgqaXQpIDwgcmVnaW9uX2VuZAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgKCFJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgq aXQpKSAhPSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGh5c19j dXJzb3JfZ2x5cGggIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9mYWNl X2lkID0gcHJldmlvdXNfZmFjZV9pZDsKKyAgICAgICAgICAgIH0KKyAgZG91YmxlIHJlZCA9IFhG TE9BVF9EQVRBIChBUkVGIChmb3JlZ3JvdW5kLCAwKSk7CisgIGRvdWJsZSBncmVlbiA9IFhGTE9B VF9EQVRBIChBUkVGIChmb3JlZ3JvdW5kLCAxKSk7CisgIGRvdWJsZSBibHVlID0gWEZMT0FUX0RB VEEgKEFSRUYgKGZvcmVncm91bmQsIDIpKTsKKyAgLyogU29tZSBvZiB0aGVzZSB2YWx1ZXMgY29t ZSB0aHJvdWdoIGFzIDEuMDAzOTA2LCB3aGljaCBjYXVzZXMgYSBicmVha2FnZQorICBvZiB0aGUg Y29sb3JzIGluIHRoYXQgbXVsdGlwbGljYXRpb24gYnkgdGhlIGJhc2Ugd2lsbCBleGNlZWQgdGhl IGJhc2UuICovCisgIGlmIChyZWQgPiAxLjApCisgICAgcmVkID0gMS4wOworICBpZiAoZ3JlZW4g PiAxLjApCisgICAgZ3JlZW4gPSAxLjA7CisgIGlmIChibHVlID4gMS4wKQorICAgIGJsdWUgPSAx LjA7CisgIGlmICghTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX3N0ZGVycikpKQorICAg IGZwcmludGYgKHN0ZGVyciwgIlxuXAorICAgIFZFUlRJQ0FMIFJVTEVSIC0tIFNQRUNTOlxuXAor ICAgIHggKCVkKVxuXAorICAgIHkgKCVkKVxuXAorICAgIGhwb3MgKCVkKVxuXAorICAgIHZwb3Mg KCVkKVxuXAorICAgIGZvcmVncm91bmQ6ICBSICglZikgfCBHICglZikgfCBCICglZilcblwKKyAg ICBiYWNrZ3JvdW5kICglcylcblwKKyAgICBmbGF2b3IgKCVzKVxuIiwKKyAgICBvcG9pbnRfeCwK KyAgICBpdC0+Y3VycmVudF95LAorICAgIHRlbXBfaHBvcywKKyAgICB2cG9zLAorICAgIHJlZCwg Z3JlZW4sIGJsdWUsCisgICAgU1NEQVRBIChtY19iZ19mYWNlIChpdC0+dywgdGVtcF9mYWNlX2lk KSksCisgICAgKEVRIChmbGF2b3IsIFFtY19nbHlwaCkKKyAgICAgID8gIlFtY19nbHlwaCIKKyAg ICAgIDogRVEgKGZsYXZvciwgUW1jX2dseXBoX3RhYikKKyAgICAgICAgPyAiUW1jX2dseXBoX3Rh YiIKKyAgICAgIDogRVEgKGZsYXZvciwgUW1jX2dseXBobGVzcykKKyAgICAgICAgPyAiUW1jX2ds eXBobGVzcyIKKyAgICAgIDogRVEgKGZsYXZvciwgUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmds ZSkKKyAgICAgICAgPyAiUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZSIKKyAgICAgIDogRVEg KGZsYXZvciwgUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gpCisgICAgICAgID8gIlFtY192ZXJ0 aWNhbF9iYXJfYmFja3NsYXNoIgorICAgICAgOiBFUSAoZmxhdm9yLCBRbWNfdmVydGljYWxfYmFy KQorICAgICAgICA/ICJRbWNfdmVydGljYWxfYmFyIgorICAgICAgOiAiT09QUyIpKTsKKyAgICAg ICAgICBtY19jcm9zc2hhaXJzX2hlbHBlciAoaXQtPncsIG9wb2ludF94LCBpdC0+Y3VycmVudF95 LCB0ZW1wX2hwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwb3MsIGN1cnNv cl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1jX2JnX2xzbCAoaXQtPncsIHRlbXBfZmFjZV9pZCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsYXZvciwgSVRfQ0hBUlBPUyAoKml0KSAtMSwgcmVzdWx0KTsK KyAgICAgICAgICByZXR1cm47CisgICAgICAgICAgLyogRG8gTk9UIHJlbW92ZSB0aGlzIGBicmVh a2AgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMhISEgIFdpdGhvdXQgdGhpcworICAgICAgICAgIGBi cmVha2AsIHRoZSBsb29wIGNvbnRpbnVlcyB1bnRpbCBgZmluYWxfbG9vcF9wYCBhbmQgcGxhY2Vz IGFuCisgICAgICAgICAgZXJyb25lb3VzIHNlY29uZCBmYWtlIGN1cnNvciBvdmVyIHRoZSBmaXJz dCBvbmUuICBUaGF0IGVycm9yIGlzIHZpc2libGUKKyAgICAgICAgICB3aGVuIGRlYWxpbmcgd2l0 aCBgUW1jX2dseXBoX3RhYmAgYmVjYXVzZSB0aGUgd3JvbmcgZmFjZV9pZCBpcyB1c2VkLgorICAg ICAgICAgIFRoZSBlcnJvciBpcyBkaWZmaWN1bHQgdG8gZGVidWcgYmVjYXVzZSBgb3BvaW50X3hg IGlzIGNvcnJlY3QuICovCisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUg VmFsdWVzIGZvciBOZXh0IExvb3AgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLworICAgICAgaWYgKGdyZWVuX2xpZ2h0X3AKKyAgICAgICAgICAmJiBp c3N1ZV8zMTcxNl9wKQorICAgICAgICB7CisgICAgICAgICAgZ2hvc3Rfb2ZfY2hyaXN0bWFzX2Z1 dHVyZV9wID0gdHJ1ZTsKKyAgICAgICAgICAvKiBVc2UgYHJlbGF0aXZlX3gnIGJlY2F1c2UgdGhp cyBpcyB3aGVyZSB0aGUgcHJldmlvdXMgbWNfZ2x5cGhfdGFiIGVuZHMuICovCisgICAgICAgICAg Z2hvc3Rfb2ZfY2hyaXN0bWFzX2Z1dHVyZV9yZWxhdGl2ZV94ID0gcmVsYXRpdmVfeDsKKyAgICAg ICAgICBnaG9zdF9vZl9jaHJpc3RtYXNfZnV0dXJlX2hwb3MgPSBpdC0+bG51bV9waXhlbF93aWR0 aCAvIGZvbnRfc3BhY2Vfd2lkdGg7CisgICAgICAgICAgZ2hvc3Rfb2ZfY2hyaXN0bWFzX2Z1dHVy ZV9mYWNlX2lkID0gcHJldmlvdXNfZmFjZV9pZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm IChncmVlbl9saWdodF9wCisgICAgICAgICAgICAgICAgICYmIGdob3N0X29mX2NocmlzdG1hc19m dXR1cmVfcCkKKyAgICAgICAgICBnaG9zdF9vZl9jaHJpc3RtYXNfZnV0dXJlX3AgPSBmYWxzZTsK KyAgICAgIC8qIEBsYXdsaXN0IHByZXZpb3VzbHkgZW5jb3VudGVyZWQgYSBjcmFzaCB0aGF0IHdh cyBwcm9iYWJseSBjYXVzZWQgYnkKKyAgICAgIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkg LSAxKSBub3QgZmluZGluZyBhbnl0aGluZyBhdCB0aGlzIGxvY2F0aW9uLiAqLworICAgICAgZmV0 Y2hfYnl0ZV9wcmV2aW91c19jaGFyYWN0ZXIgPSAoaXQtPmMgPiAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgIHByZXZpb3Vz X2NoYXJhY3RlciA9IGl0LT5jOworICAgICAgcHJldmlvdXNfcHQgPSBJVF9DSEFSUE9TICgqaXQp OworICAgICAgcHJldmlvdXNfZmFjZV9pZCA9IGl0LT5mYWNlX2lkOworICAgICAgcHJldmlvdXNf cmVsYXRpdmVfeCA9IHJlbGF0aXZlX3g7CisgICAgICBpZiAoZ3JlZW5fbGlnaHRfcCkKKyAgICAg ICAgeworICAgICAgICAgIHNhdmVkX2N1cnJlbnRfeCA9IGl0LT5jdXJyZW50X3g7CisgICAgICAg ICAgc2F2ZWRfcmVsYXRpdmVfeF9mb3JfdGFiID0gcmVsYXRpdmVfeDsKKyAgICAgICAgfQorICAg ICAgcHJpb3JfcHJldmlvdXNfaHBvcyA9IHByZXZpb3VzX2hwb3M7CisgICAgICAvKiBTb21lIGNo YXJhY3RlcnMsIGUuZy4sIGEgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBjaGFyYWN0ZXIgb2Yg8J2T lSBoYXZlIGEKKyAgICAgIGBmb250LT5zcGFjZV93aWR0aGAgdGhhdCBpcyBsZXNzIHRoYW4gdGhl IGBmcmFtZV9jaGFyX3dpZHRoYC4gKi8KKyAgICAgIGludCBpbmNyZW1lbnQgPSAoZm9udF9zcGFj ZV93aWR0aCAhPSBmcmFtZV9jaGFyX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgID8gZnJh bWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgIDogZm9udF9zcGFjZV93aWR0aDsK KyAgICAgIG5ld194ICs9IGluY3JlbWVudDsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIFggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgIHJj ID0gKElUX0NIQVJQT1MgKCppdCkgPT0gWlYpCisgICAgICAgICAgICAgPyBNT1ZFX1BPU19NQVRD SF9PUl9aVgorICAgICAgICAgICAgIDogTU9WRV9YX1JFQUNIRUQ7CisgICAgICAvKiBXaGVuIGBh dXRvLWhzY3JvbGwtbW9kZScgaXMgc2V0IHRvIGBjdXJyZW50LWxpbmVgIGFuZCB3ZSBhcmUgaG9y aXpvbnRhbCBzY3JvbGxpbmcKKyAgICAgIGEgbG9uZyBsaW5lIHRoYXQgYXBwcm9hY2hlcyBvciBl eGNlZWRzIGFuIGBpdC5jdXJyZW50LnhgIG9mIGFwcHJveGltYXRlbHkgMTAwMCwgYHJjYAorICAg ICAgd2lsbCBlcnJvbmVvdXNseSByZXR1cm4gZWFybHkgd2l0aCBhIE1PVkVfTElORV9UUlVOQ0FU RUQgaW5kaWNhdG9yICB3aXRob3V0IHB1c2hpbmcKKyAgICAgIGZvcndhcmRzIHVudGlsIElUIHJl YWNoZXMgdGhlIG5ld194LiAgQXMgYSB3b3JrYXJvdW5kLCBpZ25vcmUgTU9WRV9MSU5FX1RSVU5D QVRFRC4gKi8KKyAgICAgIGlmIChJVF9DSEFSUE9TICgqaXQpICE9IFpWCisgICAgICAgICAgLyog YElURVJBVE9SX0FUX0VORF9PRl9MSU5FX1BgIG1heSBiZSBgdHJ1ZWAgd2hlbiBJVCBpcyBhdCB0 aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4gKi8KKyAgICAgICAgICAvKiAmJiAhSVRFUkFUT1JfQVRf RU5EX09GX0xJTkVfUCAoaXQpICovCisgICAgICAgICAgJiYgKEZFVENIX0JZVEUgKElUX0JZVEVQ T1MgKCppdCkpICE9ICdcbicKKyAgICAgICAgICAgICAgfHwgKEZFVENIX0JZVEUgKElUX0JZVEVQ T1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICYmIGl0LT5jID09IDApKQorICAg ICAgICAgICYmIGl0LT5jdXJyZW50X3ggKyBmb250X3NwYWNlX3dpZHRoIDw9IG5ld194CisgICAg ICAgICAgJiYgKHJjID09IE1PVkVfWF9SRUFDSEVECisgICAgICAgICAgICAgIHx8IHJjID09IE1P VkVfTElORV9UUlVOQ0FURUQKKyAgICAgICAgICAgICAgfHwgKGl0LT5saW5lX3dyYXAgPT0gV09S RF9XUkFQCisgICAgICAgICAgICAgICAgICAmJiByYyA9PSBNT1ZFX1BPU19NQVRDSF9PUl9aVikp KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGl0IHNhdmVkX2l0OworICAgICAgICAgIHZv aWQgKnNhdmVkX2l0ZGF0YSA9IGJpZGlfc2hlbHZlX2NhY2hlICgpOworICAgICAgICAgIGludCBw cmV2X3g7CisgICAgICAgICAgU0FWRV9JVCAoc2F2ZWRfaXQsICppdCwgc2F2ZWRfaXRkYXRhKTsK KyAgICAgICAgICByYyA9IG1vdmVfaXRfaW5fZGlzcGxheV9saW5lX3RvIChpdCwgWlYsIG5ld194 LCBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCk7CisgICAgICAgICAgLyogV2hlbiB3b3JkLXdyYXAg aXMgb24sIFRPX1ggbWF5IGxpZSBwYXN0IHRoZSBlbmQgb2YgYSB3cmFwcGVkIGxpbmUuCisgICAg ICAgICAgVGhlbiBpdC0+Y3VycmVudCBpcyB0aGUgY2hhcmFjdGVyIG9uIHRoZSBuZXh0IGxpbmUs IHNvIGJhY2t0cmFjayB0byB0aGUKKyAgICAgICAgICBzcGFjZSBiZWZvcmUgdGhlIHdyYXAgcG9p bnQuICAqLworICAgICAgICAgIGlmIChpdC0+bGluZV93cmFwID09IFdPUkRfV1JBUAorICAgICAg ICAgICAgICAmJiByYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBwcmV2X3ggPSBtYXggKGl0LT5jdXJyZW50X3ggLSAxLCAwKTsKKyAgICAgICAg ICAgICAgUkVTVE9SRV9JVCAoaXQsICZzYXZlZF9pdCwgc2F2ZWRfaXRkYXRhKTsKKyAgICAgICAg ICAgICAgbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8gKGl0LCAtMSwgcHJldl94LCBNT1ZFX1RP X1gpOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIFdvcmthcm91bmQgZm9yIGJ1ZyAjMjg5 MzYgLS0gY29ycmVjdCB0aGUgZXJyb25lb3VzIE1PVkVfUE9TX01BVENIX09SX1pWLgorICAgICAg ICAgICMyODkzNjogIGBtb3ZlX2l0X2luX2Rpc3BsYXlfbGluZV90bycgcmV0dXJucyBNT1ZFX1BP U19NQVRDSF9PUl9aVgorICAgICAgICAgIGJlZm9yZSByZWFjaGluZyBaViB3aGVuIHRoZSBsYXR0 ZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBBTkQgYHdvcmQtd3JhcCcKKyAgICAgICAgICBp cyBub24tbmlsOiAgYWJjZGVmZ1taVl0uICBUaGUgd29ya2Fyb3VuZCBpcyB0byBhZGQgYW4gZXh0 cmEgY2hlY2sgdXNpbmcKKyAgICAgICAgICBJVF9DSEFSUE9TIGFuZCBjb21wYXJpbmcgaXQgdG8g WlYuICovCisgICAgICAgICAgaWYgKGl0LT5jdXJyZW50X3ggPT0gbmV3X3gKKyAgICAgICAgICAg ICAgJiYgcmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAgICAgICAgICAgJiYgSVRfQ0hB UlBPUyAoKml0KSAhPSBaVikKKyAgICAgICAgICAgIHJjID0gTU9WRV9YX1JFQUNIRUQ7CisgICAg ICAgICAgYmlkaV91bnNoZWx2ZV9jYWNoZSAoc2F2ZWRfaXRkYXRhLCB0cnVlKTsKKyAgICAgICAg fQorICAgIH0KK30KKy8qIE1DX0dMWVBIX0NBQ0hFOgorLSAgVGhlIGZpcnN0IGVsZW1lbnQgaXMg Y29tcGFyZWQgdG8gdGhlIGBtYy1nbHlwaC1saXN0JyB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBu ZWVkIHRvCisgICByZWNhbGN1bGF0ZSBjb29yZGluYXRlcy4gIFtXZSBhbHNvIGNoZWNrIHdoZXRo ZXIgd2luZG93LXN0YXJ0L3dpbmRvdy1lbmQgY2hhbmdlZC5dCistICBUaGUgc2Vjb25kIGVsZW1l bnQgY29udGFpbnMgYWxsIHByZXZpb3VzbHkgY2FsY3VsYXRlZCBjb29yZGluYXRlcy4KKy0gIFRo ZSB0aGlyZCBlbGVtZW50IGlzIHRoZSBidWZmZXIgd2hlcmUgdGhlIGBtY19nbHlwaF9jYWNoZScg d2FzIHNldC4gIEJlY2F1c2UgdGhlCisgICBgbWNfZ2x5cGhfY2FjaGUnIGlzIHdpbmRvdy1sb2Nh bCwgd2UgbmVlZCB0byBjaGVjayBib3RoIHRoZSB3aW5kb3cgYW5kIHRoZSBidWZmZXIuCisgICAg ICgoKDMgaGJhciBbMS4wIDAuMCAwLjBdKQorICAgICAgICg0IGJhciBbMC4wIDEuMCAwLjBdKQor ICAgICAgICg1IGJveCBbMC4wIDAuMCAxLjBdKQorICAgICAgICg2IGhvbGxvdyBbMC44IDAuNCAw LjJdKQorICAgICAgICg3IChoYmFyIDMpIFsxLjAgMC4wIDEuMF0pCisgICAgICAgKDggKGJhciAz KSBbMC4wIDEuMCAxLjBdKSkKKyAgICAgICgoKDMgaGJhciBbMS4wIDAuMCAwLjBdKSAoMjIgMjAg MiAwIGN1cnNvcl90eXBlIGN1cnNvcl93aWR0aCBmb3JlZ3JvdW5kIGJhY2tncm91bmQgZmxhdm9y IHBvc2ludCkpCisgICAgICAgKCg0IGJhciBbMC4wIDEuMCAwLjBdKSAoMzMgMjAgMyAwIGN1cnNv cl90eXBlIGN1cnNvcl93aWR0aCBmb3JlZ3JvdW5kIGJhY2tncm91bmQgZmxhdm9yIHBvc2ludCkp CisgICAgICAgKCg1IGJveCBbMC4wIDAuMCAxLjBdKSAoNDQgMjAgNCAwIGN1cnNvcl90eXBlIGN1 cnNvcl93aWR0aCBmb3JlZ3JvdW5kIGJhY2tncm91bmQgZmxhdm9yIHBvc2ludCkpCisgICAgICAg KCg2IGhvbGxvdyBbMC44IDAuNCAwLjJdKSAoNTUgMjAgNSAwIGN1cnNvcl90eXBlIGN1cnNvcl93 aWR0aCBmb3JlZ3JvdW5kIGJhY2tncm91bmQgZmxhdm9yIHBvc2ludCkpCisgICAgICAgKCg3ICho YmFyIDMpIFsxLjAgMC4wIDEuMF0pICg2NiAyMCA2IDAgY3Vyc29yX3R5cGUgY3Vyc29yX3dpZHRo IGZvcmVncm91bmQgYmFja2dyb3VuZCBmbGF2b3IgcG9zaW50KSkKKyAgICAgICAoKDggKGJhciAz KSBbMC4wIDEuMCAxLjBdKSAoNzcgMjAgNyAwIGN1cnNvcl90eXBlIGN1cnNvcl93aWR0aCBmb3Jl Z3JvdW5kIGJhY2tncm91bmQgZmxhdm9yIHBvc2ludCkpKQorICAgICAgKEJVRkZFUiB3aGVyZSBg bWNfZ2x5cGhfY2FjaGUnIHdhcyBzZXQuKSkgKi8KKy8qIElmIFJFTU9WRSBpcyAwLCB0aGVuIGRy YXcgZmFrZSBjdXJzb3JzLiAgSWYgUkVNT1ZFIGlzIDEsIHRoZW4gZXJhc2UgZmFrZSBjdXJzb3Jz LiAqLworCit2b2lkCittY19jYWxjIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIHJlbW92ZSkKK3sK KyAgLyogYHN0YXJ0X2Rpc3BsYXknIGNhbGxzIGBpbml0X2l0ZXJhdG9yJyB3aGljaCBjcmFzaGVz IEVtYWNzIGlmOgorICBlYXNzZXJ0IChjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+PSBCVUZfQkVH IChjdXJyZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikpCisgIGVhc3NlcnQgKGNoYXJwb3Mg PT0gQllURV9UT19DSEFSIChieXRlcG9zKSkKKyAgVGhpcyBoYXBwZW5zIHdoZW4gbXVsdGlwbGUg Y3Vyc29ycyBhcmUgYWN0aXZlIGFuZCB0aGUgdXNlciB0eXBlczogIE0teCAuLi4uICovCisgIHB0 cmRpZmZfdCBjaGFycG9zID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIGJvb2wgYmFy Zl9jcmFzaF9vbmUgPSAoY2hhcnBvcyA8IDAgfHwgKGNoYXJwb3MgPj0gQlVGX0JFRyAoY3VycmVu dF9idWZmZXIpICYmIGNoYXJwb3MgPD0gWlYpKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZf Y3Jhc2hfb25lKQorICAgIHJldHVybjsKKyAgc3RydWN0IHRleHRfcG9zIHN0YXJ0X3RleHRfcG9z aXRpb247CisgIFNFVF9URVhUX1BPU19GUk9NX01BUktFUiAoc3RhcnRfdGV4dF9wb3NpdGlvbiwg dy0+c3RhcnQpOworICBwdHJkaWZmX3QgYnl0ZXBvcyA9IEJZVEVQT1MgKHN0YXJ0X3RleHRfcG9z aXRpb24pOworICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKGNoYXJwb3MgPT0gQllURV9UT19DSEFS IChieXRlcG9zKSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICBy ZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBzdHJ1Y3Qg d2luZG93ICpzdyA9IFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdyk7CisgIExpc3BfT2JqZWN0 IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgIHN0cnVjdCBidWZm ZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBzdHJ1Y3QgaXQgaXQ7CisgIHZvaWQgKml0ZGF0YSA9 IGJpZGlfc2hlbHZlX2NhY2hlICgpOworICBzdHJ1Y3QgaXQgc2F2ZWRfaXRfZm9yX3dpbmRvd19z dGFydDsKKyAgdm9pZCAqc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQgPSBOVUxMOworICBw dHJkaWZmX3QgaXRfc3RhcnQ7CisgIGludCBmaXJzdF94LCBsYXN0X3g7CisgIGludCBsbnVtX3dp ZHRoID0gMDsKKyAgaW50IGxudW1fcGl4ZWxfd2lkdGggPSAwOworICBpbnQgbmV3X3ggPSAwOwor ICBwdHJkaWZmX3QgcG9zaW50ID0gLTE7CisgIGludCB4LCB5LCBocG9zLCB2cG9zOworICBlbnVt IHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlOworICBpbnQgY3Vyc29yX3dpZHRoID0gMTsK KyAgTGlzcF9PYmplY3Qgc3BlY3MsIGxpc3BfdHlwZSwgZm9yZWdyb3VuZCwgdmxpc3QsIHRlbl9l bGVtZW50czsKKyAgTGlzcF9PYmplY3QgZmxhdm9yID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgYmFj a2dyb3VuZCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IHRlbXAgPSBRbmlsOworICBMaXNwX09iamVj dCByZXN1bHQgPSBRbmlsOworICAvKiBBbiBpZGxlIHRpbWVyIHNpdHVhdGlvbiBhdCB0aGUgb3V0 c2V0IG1heSBub3QgbmVjZXNzYXJpbHkgaW52b2tlIGByZWRpc3BsYXlfd2luZG93JywKKyAgd2hp Y2ggaXMgd2hlcmUgY2VydGFpbiBtdWx0aXBsZSBjdXJzb3IgdmFsdWVzIGFyZSBzZXQgYXQgdGhl IHRhaWwgZW5kIHRoZXJlb2YuICovCisgIGlmICghdy0+bWMuY3VycmVudF9zdGFydCkKKyAgICB3 LT5tYy5jdXJyZW50X3N0YXJ0ID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIHN0YXJ0 X2Rpc3BsYXkgKCZpdCwgdywgc3RhcnRfdGV4dF9wb3NpdGlvbik7CisgIGZpcnN0X3ggPSBpdC5m aXJzdF92aXNpYmxlX3g7CisgIGxhc3RfeCA9IGl0Lmxhc3RfdmlzaWJsZV94OworICBpdF9zdGFy dCA9IElUX0NIQVJQT1MgKGl0KTsKKyAgU0FWRV9JVCAoc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFy dCwgaXQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgLyogRmluaXNoIHByaW1p bmcgdGhlIElUIGZvciBwb3RlbnRpYWwgbGluZSBudW1iZXJzLiAqLworICBpZiAoIU5JTFAgKFZk aXNwbGF5X2xpbmVfbnVtYmVycykKKyAgICAgICYmICFFUSAoVmRpc3BsYXlfbGluZV9udW1iZXJz LCBRdmlzdWFsKSkKKyAgICB7CisgICAgICBpdC5maXJzdF92aXNpYmxlX3ggPSAwOworICAgICAg bW92ZV9pdF9ieV9saW5lcyAoJml0LCAxKTsKKyAgICAgIGxudW1fd2lkdGggPSBpdC5sbnVtX3dp ZHRoOworICAgICAgbG51bV9waXhlbF93aWR0aCA9IGl0LmxudW1fcGl4ZWxfd2lkdGg7CisgICAg ICBSRVNUT1JFX0lUICgmaXQsICZzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBzYXZlZF9pdGRh dGFfZm9yX3dpbmRvd19zdGFydCk7CisgICAgICBpdC5maXJzdF92aXNpYmxlX3ggPSBmaXJzdF94 OworICAgICAgaXQubGFzdF92aXNpYmxlX3ggPSBsYXN0X3g7CisgICAgICBpdC5sbnVtX3dpZHRo ID0gbG51bV93aWR0aDsKKyAgICAgIGl0LmxudW1fcGl4ZWxfd2lkdGggPSBsbnVtX3BpeGVsX3dp ZHRoOworICAgICAgU0FWRV9JVCAoc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgaXQsIHNhdmVk X2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgICB9CisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTU9WRSBHTFlQSCBDVVJTT1JTCisq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKyAgLyogUmVtb3ZlIHRoZSBjdXJzb3JzIHVzaW5nIHRo ZSBjYWNoZSBpZiB0aGUgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkLiAqLworICBpZiAoKHJlbW92 ZSAmJiAhTklMUCAody0+bWNfZ2x5cGhfY2FjaGUpICYmIE5JTFAgKEJWQVIgKGIsIG1jX2dseXBo X2xpc3QpKSkKKyAgICAgIHx8ICghTklMUCAody0+bWNfZ2x5cGhfY2FjaGUpICYmICFOSUxQIChC VkFSIChiLCBtY19nbHlwaF9saXN0KSkgJiYgKHJlbW92ZSB8fCB3ICE9IHN3KSkpCisgICAgewor ICAgICAgLyogRXJhc2UgdGhlIHJlYWwgY3Vyc29yIHNvIHRoYXQgdGhlIHdob2xlIHZlcnRpY2Fs IGxpbmUgZ2V0cyByZW1vdmVkLCBub3QganVzdCB0aGUgZmFrZSBjdXJzb3JzLiAqLworICAgICAg bWNfZXJhc2VfZ2x5cGhfY3Vyc29yICh3LCB3LT5waHlzX2N1cnNvci54LCB3LT5waHlzX2N1cnNv ci55LCB3LT5waHlzX2N1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 LT5waHlzX2N1cnNvci52cG9zLCB3LT5waHlzX2N1cnNvcl90eXBlKTsKKyAgICAgIC8qIFByb2Nl c3MgdGhlIE1DX0dMWVBIX0NBQ0hFLiAqLworICAgICAgaWYgKCFOSUxQICh3LT5tY19nbHlwaF9j YWNoZSkpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKHZsaXN0ID0gWENBUiAoWENEUiAody0+ bWNfZ2x5cGhfY2FjaGUpKTsKKyAgICAgICAgICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAg ICAgICAgICB2bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgdGVuX2VsZW1lbnRzID0gWENBUiAoWENEUiAoWENBUiAodmxpc3QpKSk7CisgICAgICAgICAg ICAgIHggPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMCksIHRlbl9lbGVtZW50cykpOworICAg ICAgICAgICAgICB5ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDEpLCB0ZW5fZWxlbWVudHMp KTsKKyAgICAgICAgICAgICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgdGVu X2VsZW1lbnRzKSk7CisgICAgICAgICAgICAgIHZwb3MgPSBYSU5UIChGbnRoIChtYWtlX251bWJl ciAoMyksIHRlbl9lbGVtZW50cykpOworICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xp c3BfdG9fY3Vyc29yX3R5cGUgKEZudGggKG1ha2VfbnVtYmVyICg0KSwgdGVuX2VsZW1lbnRzKSk7 CisgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICg1 KSwgdGVuX2VsZW1lbnRzKSk7CisgICAgICAgICAgICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtl X251bWJlciAoNiksIHRlbl9lbGVtZW50cyk7CisgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBG bnRoIChtYWtlX251bWJlciAoNyksIHRlbl9lbGVtZW50cyk7CisgICAgICAgICAgICAgIGZsYXZv ciA9IEZudGggKG1ha2VfbnVtYmVyICg4KSwgdGVuX2VsZW1lbnRzKTsKKyAgICAgICAgICAgICAg cG9zaW50ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDkpLCB0ZW5fZWxlbWVudHMpKTsKKyAg ICAgICAgICAgICAgaWYgKEVRIChmbGF2b3IsIFFtY19nbHlwaGxlc3MpKQorICAgICAgICAgICAg ICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCB4LCB5LCBocG9zLCB2cG9zLCBjdXJzb3JfdHlw ZSwgY3Vyc29yX3dpZHRoLCBiYWNrZ3JvdW5kLCBmbGF2b3IpOworICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgIG1jX2VyYXNlX2dseXBoX2N1cnNvciAodywgeCwgeSwgaHBv cywgdnBvcywgY3Vyc29yX3R5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChOSUxQ IChCVkFSIChiLCBtY19nbHlwaF9saXN0KSkpCisgICAgICAgICAgICB3c2V0X21jX2dseXBoX2Nh Y2hlICh3LCBRbmlsKTsKKyAgICAgICAgfQorICAgICAgdy0+bWMuZXJhc2VfZ2x5cGhfY3Vyc29y ID0gZmFsc2U7CisgICAgfQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSRURSQVcgR0xZUEggQ1VSU09SUworKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisgIC8qIElmIHRoZSBmaXJzdCBlbGVtZW50IG9mIHctPm1jX2dseXBoX2NhY2hlIGlz IHRoZSBzYW1lIGFzIHRoZSBsb2NhbCB2YXJpYWJsZSBtY19nbHlwaF9saXN0LAorICAgICBhbmQg dGhlIHByZXZpb3VzL2N1cnJlbnQgd2luZG93LXN0YXJ0L3dpbmRvdy1lbmQgYXJlIHRoZSBzYW1l IChlLmcuLCBubyBzY3JvbGxpbmcpLAorICAgICB0aGVuIHJlZHJhdyB0aGUgY3Vyc29ycyB1c2lu ZyB0aGUgY2FjaGUuICBUaGlzIGF2b2lkcyByZWNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzLiAqLwor ICBpZiAoIXJlbW92ZQorICAgICAgJiYgdyA9PSBzdworICAgICAgJiYgdy0+bWMuY3VycmVudF9z dGFydAorICAgICAgJiYgdy0+bWMuY3VycmVudF9lbmQKKyAgICAgICYmIHctPm1jLnByZXZpb3Vz X3N0YXJ0CisgICAgICAmJiB3LT5tYy5wcmV2aW91c19lbmQKKyAgICAgICYmIHctPm1jLmN1cnJl bnRfc3RhcnQgPT0gdy0+bWMucHJldmlvdXNfc3RhcnQKKyAgICAgICYmIHctPm1jLmN1cnJlbnRf ZW5kID09IHctPm1jLnByZXZpb3VzX2VuZAorICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIG1jX2ds eXBoX2xpc3QpKQorICAgICAgJiYgIU5JTFAgKHctPm1jX2dseXBoX2NhY2hlKQorICAgICAgJiYg IU5JTFAgKEZlcXVhbCAoRm50aCAobWFrZV9udW1iZXIgKDApLCB3LT5tY19nbHlwaF9jYWNoZSks IEJWQVIgKGIsIG1jX2dseXBoX2xpc3QpKSkpCisgICAgeworICAgICAgZm9yICh2bGlzdCA9IFhD QVIgKFhDRFIgKHctPm1jX2dseXBoX2NhY2hlKSk7CisgICAgICAgICAgIENPTlNQICh2bGlzdCk7 CisgICAgICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgICAgICB7CisgICAgICAgICAg dGVuX2VsZW1lbnRzID0gWENBUiAoWENEUiAoWENBUiAodmxpc3QpKSk7CisgICAgICAgICAgeCA9 IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgwKSwgdGVuX2VsZW1lbnRzKSk7CisgICAgICAgICAg eSA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgxKSwgdGVuX2VsZW1lbnRzKSk7CisgICAgICAg ICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgdGVuX2VsZW1lbnRzKSk7Cisg ICAgICAgICAgdnBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgzKSwgdGVuX2VsZW1lbnRz KSk7CisgICAgICAgICAgY3Vyc29yX3R5cGUgPSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChGbnRo IChtYWtlX251bWJlciAoNCksIHRlbl9lbGVtZW50cykpOworICAgICAgICAgIGN1cnNvcl93aWR0 aCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICg1KSwgdGVuX2VsZW1lbnRzKSk7CisgICAgICAg ICAgZm9yZWdyb3VuZCA9IEZudGggKG1ha2VfbnVtYmVyICg2KSwgdGVuX2VsZW1lbnRzKTsKKyAg ICAgICAgICBiYWNrZ3JvdW5kID0gRm50aCAobWFrZV9udW1iZXIgKDcpLCB0ZW5fZWxlbWVudHMp OworICAgICAgICAgIGZsYXZvciA9IEZudGggKG1ha2VfbnVtYmVyICg4KSwgdGVuX2VsZW1lbnRz KTsKKyAgICAgICAgICBwb3NpbnQgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoOSksIHRlbl9l bGVtZW50cykpOworICAgICAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCB4LCB5LCBocG9z LCB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLCBRbWNfZ2x5cGgp OworICAgICAgICB9CisgICAgICB3LT5tYy5kcmF3X2dseXBoX2N1cnNvciA9IGZhbHNlOworICAg IH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEUkFXIEdMWVBIIENVUlNPUlMgQU5FVworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgICAg LyogRHJhdyB0aGUgY3Vyc29ycyBhbmV3IGJlY2F1c2Ugc29tZXRoaW5nIGhhcyBjaGFuZ2VkLCBl LmcuLCB0aGUgZmlyc3QgZWxlbWVudCBvZgorICAgICAgIHctPm1jX2dseXBoX2NhY2hlIGlzIE5P VCB0aGUgc2FtZSBhcyB0aGUgbG9jYWwgdmFyaWFibGUgbWNfZ2x5cGhfbGlzdDsgYW5kL29yLCB0 aGUgcHJldmlvdXMvCisgICAgICAgY3VycmVudCB3aW5kb3ctc3RhcnQvd2luZG93LWVuZCBhcmUg Tk9UIHRoZSBzYW1lIChlLmcuLCBzY3JvbGxpbmcgaGFzIG9jY3VycmVkKS4KKyAgICAgICBTZW1p LWV4cGVuc2l2ZSBjYWxjdWxhdGlvbiBvZiBjb29yZGluYXRlcyBpcyByZXF1aXJlZC4gKi8KKyAg ICBlbHNlIGlmICghcmVtb3ZlCisgICAgICAgICAgICAgJiYgdyA9PSBzdworICAgICAgICAgICAg ICYmIHctPm1jLmN1cnJlbnRfc3RhcnQKKyAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwg bWNfZ2x5cGhfbGlzdCkpKQorICAgICAgeworICAgICAgICBmb3IgKHZsaXN0ID0gQlZBUiAoYiwg bWNfZ2x5cGhfbGlzdCk7CisgICAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAg ICB2bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzcGVjcyA9 IFhDQVIgKHZsaXN0KTsKKyAgICAgICAgICAgIHBvc2ludCA9IFhJTlQgKEZudGggKG1ha2VfbnVt YmVyICgwKSwgc3BlY3MpKTsKKyAgICAgICAgICAgIGxpc3BfdHlwZSA9IEZudGggKG1ha2VfbnVt YmVyICgxKSwgc3BlY3MpOworICAgICAgICAgICAgaWYgKENPTlNQIChsaXNwX3R5cGUpKQorICAg ICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxp c3BfdHlwZSkpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3Vyc29yX3R5 cGUgPSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChsaXNwX3R5cGUpOworICAgICAgICAgICAgaWYg KENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGggPSBYSU5UIChY Q0FSIChYQ0RSIChsaXNwX3R5cGUpKSk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICBjdXJzb3Jfd2lkdGggPSAxOworICAgICAgICAgICAgZm9yZWdyb3VuZCA9IEZudGggKG1h a2VfbnVtYmVyICgyKSwgc3BlY3MpOworICAgICAgICAgICAgaWYgKFNUUklOR1AgKGZvcmVncm91 bmQpKQorICAgICAgICAgICAgICBmb3JlZ3JvdW5kID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcs IGZvcmVncm91bmQpOworICAgICAgICAgICAgUkVTVE9SRV9JVCAoJml0LCAmc2F2ZWRfaXRfZm9y X3dpbmRvd19zdGFydCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICAgICAgICAg ICAgbW92ZV9pdF90byAoJml0LCBwb3NpbnQsIGl0Lmxhc3RfdmlzaWJsZV94LCBpdC5sYXN0X3Zp c2libGVfeSAtIDEsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgTU9WRV9UT19QT1MgfCBN T1ZFX1RPX1ggfCBNT1ZFX1RPX1kpOworICAgICAgICAgICAgaWYgKElUX0NIQVJQT1MgKGl0KSA9 PSBwb3NpbnQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtb3ZlX2l0X2J5X2xp bmVzICgmaXQsIDApOworICAgICAgICAgICAgICAgIG1jX21vdmVfaXQgKCZpdCwgTVVMVElQTEVf Q1VSU09SUywgc3BlY3MsICZyZXN1bHQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB4ID0gLTE7CisgICAg ICAgICAgICAgICAgICB5ID0gLTE7CisgICAgICAgICAgICAgICAgICBocG9zID0gLTE7CisgICAg ICAgICAgICAgICAgICB2cG9zID0gLTE7CisgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0g bWNfYmdfbHNsIChpdC53LCBERUZBVUxUX0ZBQ0VfSUQpOworICAgICAgICAgICAgICAgICAgZmxh dm9yID0gUW1jX2dseXBoOworICAgICAgICAgICAgICAgICAgdGVuX2VsZW1lbnRzID0gbGlzdG4g KENPTlNUWVBFX0hFQVAsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlX251bWJlciAoeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2VfbnVtYmVyICh5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9udW1iZXIgKGhwb3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX251bWJlciAodnBvcyksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKGN1cnNvcl90eXBlKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKGN1 cnNvcl93aWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv cmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tn cm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXZvciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKHBv c2ludCkpOworICAgICAgICAgICAgICAgICAgdGVtcCA9IEZjb25zIChzcGVjcywgRmNvbnMgKHRl bl9lbGVtZW50cywgUW5pbCkpOworICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmNvbnMgKHRl bXAsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKy8qIGB3LT5tY19n bHlwaF9jYWNoZScgaXMgc2V0IGZvciB0aGUgd2luZG93LCBub3QgYnVmZmVyK3dpbmRvdyAtLSBp LmUuLCBhbGwgYnVmZmVycyBhcHBlYXJpbmcKK2luIHRoZSBzYW1lIHdpbmRvdyB2aWEgYHN3aXRj aC10by1idWZmZXInIHdpbGwgaGF2ZSBgdy0+bWNfZ2x5cGhfY2FjaGUnLiAgVGhpcyBiZWhhdmlv cgoraXMgY29uc2lzdGVudCB3aXRoIGZ1bmN0aW9ucyBzdWNoIGFzIGBzZXQtd2luZG93LWRpc3Bs YXktdGFibGUnLiAgV2UgZGVhbCB3aXRoIHRoaXMgaW4KK2Buc3Rlcm0ubScgLyBgdzMydGVybS5j JyAvIGB4dGVybS5jJyBieSBjb21wYXJpbmcgYHctPmNvbnRlbnRzJyB0byB0aGUgdmFsdWUgb2Yg dGhlIGBidWYnCitzdG9yZWQgaW4gYHctPm1jX2dseXBoX2NhY2hlJzogIChFUSAody0+Y29udGVu dHMsIFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgdy0+bWNfZ2x5cGhfY2FjaGUpKSkpICov CisgICAgICAgIGlmICghTklMUCAocmVzdWx0KSkKKyAgICAgICAgICB3c2V0X21jX2dseXBoX2Nh Y2hlICh3LCBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCVkFSIChiLCBtY19nbHlwaF9saXN0KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGcmV2ZXJzZSAocmVzdWx0KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGY29ucyAoYnVmLCBRbmlsKSkpOworICAgICAgICB3LT5tYy5k cmF3X2dseXBoX2N1cnNvciA9IGZhbHNlOworICAgICAgfQorICBiaWRpX3Vuc2hlbHZlX2NhY2hl IChpdGRhdGEsIGZhbHNlKTsKK30KKwordm9pZAorbWNfZHJhd19jcm9zc2hhaXJzIChzdHJ1Y3Qg d2luZG93ICp3KQoreworICAvKiBFbGkgWi46ICBUaGlzIGRvZXNuJ3QgZmVlbCByZWxldmFudC4g IFlvdSBjYW4gYWx3YXlzIHJlZGlzcGxheSBhIHdpbmRvdyB0aGF0IGlzCisgIG5vdCB0aGUgc2Vs ZWN0ZWQgd2luZG93LCBwcm92aWRlZCB0aGF0IHlvdSB0YWtlIGNhcmUgdG8gc3dpdGNoIHRvIGl0 cyBidWZmZXIKKyAgKHJlZGlzcGxheSBkb2VzIHRoYXQgYWxyZWFkeSkuICovCisgIGlmICh3ICE9 IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdykpCisgICAgcmV0dXJuOworICAvKiBFbGkgWi46ICBI b3cgZGlkIHlvdSBnZXQgaW50byB0aGlzIHNpdHVhdGlvbj8gIEl0IHNob3VsZG4ndCBoYXBwZW4g ZHVyaW5nIHJlZGlzcGxheS4gKi8KKyAgaWYgKCFXSU5ET1dfVkFMSURfUCAoc2VsZWN0ZWRfd2lu ZG93KSkKKyAgICByZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUp OworICBMaXNwX09iamVjdCBidWYgPSB3LT5jb250ZW50czsKKyAgQ0hFQ0tfQlVGRkVSIChidWYp OworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoYnVmKTsKKy8qIGVhc3NlcnQgKENIQVJQ T1MgKHBvcykgPj0gQkVHViAmJiBDSEFSUE9TIChwb3MpIDw9IFpWKTsKKyAgIGVhc3NlcnQgKGNo YXJwb3MgPT0gQllURV9UT19DSEFSIChieXRlcG9zKSk7CisgICBlYXNzZXJ0IChCVUZfQkVHX0JZ VEUgKGIpIDw9IGJ5dGVwb3MgJiYgYnl0ZXBvcyA8PSBCVUZfWl9CWVRFIChiKSk7ICovCisgIHB0 cmRpZmZfdCBjaGFycG9zID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIHB0cmRpZmZf dCBieXRlcG9zID0gbWFya2VyX2J5dGVfcG9zaXRpb24gKHctPnN0YXJ0KTsKKyAgLyogRWxpIFou OiAgSWYgd2luZG93J3Mgc3RhcnQgcG9pbnQgaXMgaW52YWxpZCwgaXQgbWVhbnMgdGhlIHdpbmRv dyBuZWVkcyB0byBiZQorICByZWRpc3BsYXllZC4gIEFnYWluLCBJJ20gbm90IHN1cmUgSSB1bmRl cnN0YW5kIGhvdyBkbyB5b3UgZ2V0IGludG8gdGhpcyBzaXR1YXRpb24KKyAgaW4gdGhlIG1pZGRs ZSBvZiByZWRpc3BsYXkuICovCisgIGJvb2wgYmFyZl9jcmFzaF9vbmUgPSAoY2hhcnBvcyA+PSBC RUdWICYmIGNoYXJwb3MgPD0gWlYpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9v bmUpCisgICAgcmV0dXJuOworICAvKiBFbGkgWi46ICBMaWtld2lzZS4gIE1hcmtlcnMgYXJlIHVw ZGF0ZWQgd2hlbiBhIGJ1ZmZlciBpcyBtb2RpZmllZCwgc28gdGhpcworICBzaG91bGQgbmV2ZXIg aGFwcGVuLiAqLworICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKGNoYXJwb3MgPT0gQllURV9UT19D SEFSIChieXRlcG9zKSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAg ICByZXR1cm47CisgIGlmICghQlVGRkVSUCAoYnVmKSkKKyAgICByZXR1cm47CisgIGlmIChOSUxQ IChCVkFSIChiLCBjcm9zc2hhaXJzKSkpCisgICAgcmV0dXJuOworICBpZiAoTklMUCAoQlZBUiAo YiwgY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyKSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKGIs IGNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIpKSkKKyAgICByZXR1cm47CisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVJUIFRIRSBUSU1F UgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGNs b2NrX3Qgc3RhcnQsIGVuZDsKKyAgZG91YmxlIGNwdV90aW1lX3VzZWQ7CisgIGNoYXIgYnVmX3Rp bWVbREJMX0JVRlNJWkVfQk9VTkRdOworICBzdGFydCA9IGNsb2NrKCk7CisjZW5kaWYKKyovCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJF R0lOIEpPVVJORVkgLi4uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgc3RydWN0IGl0IGl0 OworICB2b2lkICppdGRhdGEgPSBiaWRpX3NoZWx2ZV9jYWNoZSAoKTsKKyAgc3RydWN0IGl0IHNh dmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQ7CisgIHZvaWQgKnNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93 X3N0YXJ0ID0gTlVMTDsKKyAgc3RydWN0IGl0IHNhdmVkX2l0X2Zvcl9ob3Jpem9udGFsX3J1bGVy OworICB2b2lkICpzYXZlZF9pdGRhdGFfZm9yX2hvcml6b250YWxfcnVsZXIgPSBOVUxMOworICBz dHJ1Y3QgdGV4dF9wb3Mgc3RhcnRfdGV4dF9wb3NpdGlvbjsKKyAgcHRyZGlmZl90IGl0X3N0YXJ0 OworICBpbnQgZmlyc3RfeCwgbGFzdF94OworICBpbnQgbG51bV93aWR0aCA9IDA7CisgIGludCBs bnVtX3BpeGVsX3dpZHRoID0gMDsKKyAgaW50IGZyYW1lX2NoYXJfd2lkdGggPSBGUkFNRV9DT0xV TU5fV0lEVEggKGYpOworICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAo dywgVEVYVF9BUkVBKTsKKyAgYm9vbCBjdXJzb3JfaW5fZnJpbmdlX3AgPSB3LT5vdXRwdXRfY3Vy c29yLnggKyBmcmFtZV9jaGFyX3dpZHRoID49IHRleHRfYXJlYV93aWR0aDsKKyAgc3RydWN0IGds eXBoX3JvdyAqZ2x5cGhfcm93OworICBpbnQgaGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lORE9XX0hF QURFUl9MSU5FX0hFSUdIVCAodyk7CisgIGludCBjdXJzb3Jfd2lkdGggPSAxOworICBwdHJkaWZm X3Qgb3BvaW50X3B0ID0gUFQ7CisgIGludCByZWxhdGl2ZV94ID0gMDsKKyAgaW50IHByZXZpb3Vz X2hwb3MgPSAtMTsKKyAgaW50IG9wb2ludF94ID0gdy0+b3V0cHV0X2N1cnNvci54OworICBpbnQg b3BvaW50X3kgPSB3LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBvcyA9IHctPm91 dHB1dF9jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+b3V0cHV0X2N1cnNvci52 cG9zOworICBwdHJkaWZmX3QgY3VycmVudF9jb2wgPSBjdXJyZW50X2NvbHVtbiAoKTsKKyAgYm9v bCBmaWxsX2NvbHVtbl9wID0gIU5JTFAgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIHB0cmRp ZmZfdCBmaWxsX2NvbCA9IFhJTlQgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIExpc3BfT2Jq ZWN0IHJlc3VsdCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGZsYXZvciA9IFFuaWw7CisgIC8qIFZh bHVlcyBmb3IgdGhlIGN1cnJlbnQgY29sdW1uIG9mIHRoZSB2ZXJ0aWNhbCBsaW5lLiAqLworICBM aXNwX09iamVjdCBmb3JlZ3JvdW5kID0gRm1ha2VfdmVjdG9yIChtYWtlX251bWJlciAoMyksIFFu aWwpOworICBlbnVtIGZhY2VfaWQgZmFjZV9pZDsKKyAgc3RydWN0IGdseXBoICpwaHlzX2N1cnNv cl9nbHlwaDsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDT0xPUiBPRiBDUk9TU0hBSVJTCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAg ZW51bSBmYWNlX2lkIGV2ZW5fZmFjZV9pZCA9CisgICAgbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYs IGludGVybiAoIistZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0 IGZhY2UgKmV2ZW5fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZXZlbl9mYWNlX2lkKTsKKyAgTGlz cF9PYmplY3QgZXZlbl9jb2xvciA9IGV2ZW5fZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9J TkRFWF07CisgIENIRUNLX1NUUklORyAoZXZlbl9jb2xvcik7CisgIExpc3BfT2JqZWN0IGV2ZW5f Y29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGV2ZW5fY29sb3IpOworICBl bnVtIGZhY2VfaWQgb2RkX2ZhY2VfaWQgPQorICAgIGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBp bnRlcm4gKCIrLW9kZC1udW1iZXJlZC1jb2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZh Y2UgKm9kZF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBvZGRfZmFjZV9pZCk7CisgIExpc3BfT2Jq ZWN0IG9kZF9jb2xvciA9IG9kZF9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsK KyAgQ0hFQ0tfU1RSSU5HIChvZGRfY29sb3IpOworICBMaXNwX09iamVjdCBvZGRfY29sb3JfdmVj dG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIG9kZF9jb2xvcik7CisgIGVudW0gZmFjZV9p ZCBmaWxsX2ZhY2VfaWQgPQorICAgIGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIr LWJleW9uZC1maWxsLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZmlsbF9m YWNlID0gRkFDRV9GUk9NX0lEIChmLCBmaWxsX2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBmaWxs X2NvbG9yID0gZmlsbF9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hF Q0tfU1RSSU5HIChmaWxsX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgZmlsbF9jb2xvcl92ZWN0b3Ig PSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgZmlsbF9jb2xvcik7CisgIC8qIHJlZCAqLworICBp ZiAoY3VycmVudF9jb2wgJSAyICE9IDAKKyAgICAgICYmICFmaWxsX2NvbHVtbl9wKQorICAgIGZv cmVncm91bmQgPSBvZGRfY29sb3JfdmVjdG9yOworICAvKiB5ZWxsb3cgKi8KKyAgaWYgKGN1cnJl bnRfY29sICUgMiA9PSAwCisgICAgICAmJiAhZmlsbF9jb2x1bW5fcCkKKyAgICBmb3JlZ3JvdW5k ID0gZXZlbl9jb2xvcl92ZWN0b3I7CisgIC8qIHJlZCAqLworICBpZiAoY3VycmVudF9jb2wgJSAy ICE9IDAKKyAgICAgICYmIGZpbGxfY29sdW1uX3AKKyAgICAgICYmIGN1cnJlbnRfY29sIDw9IGZp bGxfY29sKQorICAgIGZvcmVncm91bmQgPSBvZGRfY29sb3JfdmVjdG9yOworICAvKiB5ZWxsb3cg Ki8KKyAgaWYgKGN1cnJlbnRfY29sICUgMiA9PSAwCisgICAgICAmJiBmaWxsX2NvbHVtbl9wCisg ICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxsX2NvbCkKKyAgICBmb3JlZ3JvdW5kID0gZXZlbl9j b2xvcl92ZWN0b3I7CisgIC8qIGdyZWVuICovCisgIGlmIChmaWxsX2NvbHVtbl9wCisgICAgICAm JiBjdXJyZW50X2NvbCA+IGZpbGxfY29sKQorICAgIGZvcmVncm91bmQgPSBmaWxsX2NvbG9yX3Zl Y3RvcjsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgIFNU QVJUIERJU1BMQVkgQU5EIFBSSU1FIElUCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgLyog QmVnaW4gdGhlIGpvdXJuZXkgYXQgdy0+c3RhcnQuICovCisgIFNFVF9URVhUX1BPU19GUk9NX01B UktFUiAoc3RhcnRfdGV4dF9wb3NpdGlvbiwgdy0+c3RhcnQpOworICBzdGFydF9kaXNwbGF5ICgm aXQsIHcsIHN0YXJ0X3RleHRfcG9zaXRpb24pOworICBmaXJzdF94ID0gaXQuZmlyc3RfdmlzaWJs ZV94OworICBsYXN0X3ggPSBpdC5sYXN0X3Zpc2libGVfeDsKKyAgaXRfc3RhcnQgPSBJVF9DSEFS UE9TIChpdCk7CisgIFNBVkVfSVQgKHNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIGl0LCBzYXZl ZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCk7CisgIC8qIEZpbmlzaCBwcmltaW5nIHRoZSBJVCBm b3IgcG90ZW50aWFsIGxpbmUgbnVtYmVycy4gKi8KKyAgaWYgKCFOSUxQIChWZGlzcGxheV9saW5l X251bWJlcnMpCisgICAgICAmJiAhRVEgKFZkaXNwbGF5X2xpbmVfbnVtYmVycywgUXZpc3VhbCkp CisgICAgeworICAgICAgaXQuZmlyc3RfdmlzaWJsZV94ID0gMDsKKyAgICAgIG1vdmVfaXRfYnlf bGluZXMgKCZpdCwgMSk7CisgICAgICBsbnVtX3dpZHRoID0gaXQubG51bV93aWR0aDsKKyAgICAg IGxudW1fcGl4ZWxfd2lkdGggPSBpdC5sbnVtX3BpeGVsX3dpZHRoOworICAgICAgUkVTVE9SRV9J VCAoJml0LCAmc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5k b3dfc3RhcnQpOworICAgICAgaXQuZmlyc3RfdmlzaWJsZV94ID0gZmlyc3RfeDsKKyAgICAgIGl0 Lmxhc3RfdmlzaWJsZV94ID0gbGFzdF94OworICAgICAgaXQubG51bV93aWR0aCA9IGxudW1fd2lk dGg7CisgICAgICBpdC5sbnVtX3BpeGVsX3dpZHRoID0gbG51bV9waXhlbF93aWR0aDsKKyAgICAg IFNBVkVfSVQgKHNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIGl0LCBzYXZlZF9pdGRhdGFfZm9y X3dpbmRvd19zdGFydCk7CisgICAgfQorICAvKiBUaGlzIG1pZ2h0IGhhcHBlbiBvbiBPU1ggMTAu MTEgd2hlbiByZXN0b3JpbmcgZGVza3RvcCBhdCB0aGUgYmVnaW5uaW5nCisgIG9mIGEgbmV3IHNl c3Npb24/ICovCisgIGlmIChpdF9zdGFydCA+IG9wb2ludF9wdCkKKyAgICByZXR1cm47CisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSQVNFIFRI RSBSRUFMIENVUlNPUgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBgdy0+cGh5c19jdXJz b3IueC95L2hwb3MvdnBvc2AgYXJlIGluY29ycmVjdCBhZnRlciBldmFsdWF0aW5nIChzY3JvbGwt bGVmdCAxKQorYSBjb3VwbGUgb2YgdGltZXMuICBSZWRpc3BsYXkgZXJhc2VzIHRoZSByZWFsIGN1 cnNvciBhbG1vc3QgaW1tZWRpYXRlbHkgYWZ0ZXIKK2BtY19kcmF3X2Nyb3NzaGFpcnMnIHJ1bnMg aXRzIGNvdXJzZSAtLSBhbG1vc3QgdG9vIHF1aWNrbHkgdG8gc2VlIGl0IGhhcHBlbmluZy4KK1Ro ZSBjaGFyYWN0ZXIgd2hlcmUgRW1hY3MgdGhpbmtzIHRoZSByZWFsIGN1cnNvciBpcyBsb2NhdGVk IGdldHMgcmVkcmF3biwgYWxiaWV0Cit3aXRob3V0IHRoZSByZWFsIGN1cnNvci4gIEVtYWNzIHRo aW5rcyB0aGUgcmVhbCBjdXJzb3IgaXMgb25lIGNoYXJhY3RlciB0byB0aGUKK3JpZ2h0IG9mIHdo ZXJlIGl0IHNob3VsZCBiZSAtLSB0aGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBpbmNvcnJl Y3QgSFBPUy4KK1RoaXMgcGhlbm9tZW5hIGRvZXMgbm90IG9jY3VyIHdoZW4gKHNjcm9sbC1sZWZ0 IDEpIGlzIGNhbGxlZCBpbnRlcmFjdGl2ZWx5OyBlLmcuLAoraG9yaXpvbnRhbCBzY3JvbGwgd2hl ZWwuICBJbmFzbXVjaCBhcyBgZXJhc2VfcGh5c19jdXJzb3InIHVwZGF0ZXMgbW9yZSB0aGFuCitt ZXJlbHkgdGhlIGFmb3JlbWVudGlvbmVkIGNvb3JkaW5hdGVzLCByZXNldHRpbmcgdGhvc2UgY29v cmRpbmF0ZXMgYWZ0ZXIgdGhlIGZhY3QKK2lzIGluc3VmZmljaWVudCB0byBmaXggdGhlIHByb2Js ZW0uICBXZSB1c2UgYHctPm91dHB1dF9jdXJzb3IueC95L2hwb3MvdnBvc2AKK2JlY2F1c2UgdGhv c2UgY29vcmRpbmF0ZXMgYXJlIGNvcnJlY3QuICBXZSBmaXggYHctPnBoeXNfY3Vyc29yLngveS9o cG9zL3Zwb3NgCitCRUZPUkUgY2FsbGluZyBgZXJhc2VfcGh5c19jdXJzb3InIHNvIHRoYXQgb3Ro ZXIgZ29vZGllcyBhcmUgdXBkYXRlZC4gKi8KKyAgdy0+cGh5c19jdXJzb3IueCA9IG9wb2ludF94 OworICB3LT5waHlzX2N1cnNvci55ID0gb3BvaW50X3k7CisgIHctPnBoeXNfY3Vyc29yLmhwb3Mg PSBvcG9pbnRfaHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IG9wb2ludF92cG9zOworICBl cmFzZV9waHlzX2N1cnNvciAodyk7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUkVQTEFDRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworICBnbHlwaF9yb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwg b3BvaW50X3Zwb3MpOworICBpZiAoIWN1cnNvcl9pbl9mcmluZ2VfcCkKKyAgICBmbGF2b3IgPSBR bWNfZ2x5cGg7CisgICAgLyogVGhpcyBjb25kaXRpb24gcHJvYmFibHkgZG9lcyBub3QgZXhpc3Qg Zm9yIHRoZSByZWFsIGZha2UgY3Vyc29yLiAqLworICAgIGVsc2UgaWYgKGN1cnNvcl9pbl9mcmlu Z2VfcAorICAgICAgICAgICAgICYmIGdseXBoX3Jvdy0+Y29udGludWVkX3ApCisgICAgICBmbGF2 b3IgPSBRbWNfcGlsY3JvdzsKKyAgICAgIGVsc2UgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAg ICAgICAgICAgICAgJiYgZ2x5cGhfcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAg Zmxhdm9yID0gUW1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYW5nbGU7CisgICAgICAgIGVsc2Ug aWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAmJiAhZ2x5cGhfcm93LT5j b250aW51ZWRfcAorICAgICAgICAgICAgICAgICAmJiAhZ2x5cGhfcm93LT50cnVuY2F0ZWRfb25f cmlnaHRfcCkKKyAgICAgICAgICBmbGF2b3IgPSBRbWNfaG9sbG93X3JlY3RhbmdsZTsKKyAgZmFj ZV9pZCA9ICgocGh5c19jdXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3JfZ2x5cGggKHcpKSA9 PSBOVUxMKQorICAgICAgICAgICAgICA/IERFRkFVTFRfRkFDRV9JRAorICAgICAgICAgICAgICA6 IHBoeXNfY3Vyc29yX2dseXBoLT5mYWNlX2lkOworICBtY19jcm9zc2hhaXJzX2hlbHBlciAodywg b3BvaW50X3gsIG9wb2ludF95LCBvcG9pbnRfaHBvcywgb3BvaW50X3Zwb3MsCisgICAgICAgICAg ICAgICAgICAgICAgICBIT0xMT1dfQk9YX0NVUlNPUiwgY3Vyc29yX3dpZHRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgZm9yZWdyb3VuZCwgbWNfYmdfbHNsICh3LCBmYWNlX2lkKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGZsYXZvciwgb3BvaW50X3B0LCAmcmVzdWx0KTsKKyAgbWNfY3Jv c3NoYWlyc19oZWxwZXIgKHcsIG9wb2ludF94LCBvcG9pbnRfeSwgb3BvaW50X2hwb3MsIG9wb2lu dF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgSE9MTE9XX0JPWF9DVVJTT1IsIGN1cnNv cl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQsIG1jX2JnX2xzbCAo dywgZmFjZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICBRb3ZlcmxheV9hcnJvd19iaXRt YXAsIG9wb2ludF9wdCwgJnJlc3VsdCk7CisgIGlmIChOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJz X2hvcml6b250YWxfcnVsZXIpKSkKKyAgICBnb3RvIHZlcnRpY2FsX3J1bGVyOworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgSE9SSVpPTlRBTCBSVUxFUjogIEZJUlNU IFggPT4gRU9MCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgIEhP UklaT05UQUwgUlVMRVI6ICBEUkFXIEZMT0FUSU5HIEdMWVBITEVTUyBMSU5FIChFT0wgVE8gRlJJ TkdFKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgIC8qIFBsYWNlIHRoZSBJVCBvbiB0aGUg Y3VycmVudCBsaW5lIGNvbnRhaW5pbmcgUFQuICovCisgIGludCB2b2Zmc2V0ID0gKGhlYWRlcl9s aW5lX2hlaWdodCA+IDAKKyAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPiAwKQorICAg ICAgICAgICAgICAgICAgPyBvcG9pbnRfdnBvcyAtIDEKKyAgICAgICAgICAgICAgICAgIDogb3Bv aW50X3Zwb3M7CisgIGlmICh2b2Zmc2V0ID4gMCkKKyAgICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQs IHZvZmZzZXQpOworICBtY19tb3ZlX2l0ICgmaXQsIEhPUklaT05UQUxfUlVMRVIsIGZvcmVncm91 bmQsICZyZXN1bHQpOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgIFZFUlRJ Q0FMIFJVTEVSOiAgQ09NQklOQVRJT04gT0YgR0xZUEggJiBHTFlQSExFU1MgQ1VSU09SUworKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisgIHZlcnRpY2FsX3J1bGVyOgorICBpZiAoTklMUCAoQlZB UiAoYiwgY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlcikpKQorICAgIGdvdG8gY3Jvc3NoYWlyc19m aW5pc2g7CisgIFJFU1RPUkVfSVQgKCZpdCwgJnNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIHNh dmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAg ICAgbWNfbW92ZV9pdCAoJml0LCBWRVJUSUNBTF9SVUxFUiwgZm9yZWdyb3VuZCwgJnJlc3VsdCk7 CisgICAgICAvKiBUaGlzIGNvbWJpbmF0aW9uIG9mIGEgWlYgY2hlY2sgYmVmb3JlIGBtb3ZlX2l0 X2J5X2xpbmVzJyBmb2xsb3dlZCBieSBhCisgICAgICBZIGNoZWNrIHN1YnNlcXVlbnQgdGhlcmV0 byBnaXZlcyB1cyB0aGUgRkVBVFVSRSBvZiBoYXZpbmcgYSB2ZXJ0aWNhbCBsaW5lCisgICAgICBm b2xsb3dpbmcgYSBsaW5lIHRlcm1pbmF0aW5nIHdpdGggWlYuICBXaGVyZWFzIGBkaXNwbGF5LWxp bmUtbnVtYmVycy1tb2RlJworICAgICAgaGFzIGEgRkVBVFVSRSBvZiBzdXBwcmVzc2luZyB0aGUg bGluZSBudW1iZXJzIGluIHRoaXMgc2l0dWF0aW9uLCB3ZSBkcmF3CisgICAgICBjcm9zc2hhaXJz IGluIHRoYXQgc2l0dWF0aW9uLiAgYG1jX21vdmVfaXQnIGhhcyBiZWVuCisgICAgICBlcXVpcHBl ZCB3aXRoIGEgY29uZGl0aW9uIHRvIHRlc3QgZm9yIFpWIGF0IHRoZSBvdXRzZXQgYW5kIHJldHVy biBpZiB0cnVlLAorICAgICAgd2hpY2ggcHJldmVudHMgRW1hY3MgZnJvbSBjcmFzaGluZy4gKi8K KyAgICAgIGlmIChJVF9DSEFSUE9TIChpdCkgPT0gWlYpCisgICAgICAgIGJyZWFrOworICAgICAg bW92ZV9pdF9ieV9saW5lcyAoJml0LCAxKTsKKyAgICAgIGlmIChpdC5jdXJyZW50X3kgPj0gaXQu bGFzdF92aXNpYmxlX3kpCisgICAgICAgIGJyZWFrOworICAgIH0KKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgVEhFIENBQ0hFCisq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKyAgY3Jvc3NoYWlyc19maW5pc2g6CisgIGlmICghTklM UCAocmVzdWx0KSkKKyAgICB3c2V0X2Nyb3NzaGFpcnNfY2FjaGUgKHcsIGxpc3RuIChDT05TVFlQ RV9IRUFQLCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXZlcnNl IChyZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZjb25zIChz ZWxlY3RlZF93aW5kb3csIFFuaWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZjb25zIChidWYsIFFuaWwpKSk7CisgIHctPm1jLmRyYXdfY3Jvc3NoYWlycyA9IGZhbHNl OworICBiaWRpX3Vuc2hlbHZlX2NhY2hlIChpdGRhdGEsIGZhbHNlKTsKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE9QIFRIRSBUSU1F UgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGVu ZCA9IGNsb2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGVuZCAtIHN0YXJ0KSkg LyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3RpbWUsIHNpemVvZiBidWZfdGltZSwg MCwgMCwgY3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJtY19kcmF3X2Ny b3NzaGFpcnM6ICBUSU1FICglcykiLCBidWZfdGltZSk7CisjZW5kaWYKKyovCit9dm9pZAorCitt Y19yZWRyYXdfY3Jvc3NoYWlycyAoc3RydWN0IHdpbmRvdyAqdykKK3sKKy8qCisjaWZkZWYgR0xZ UEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBkb3VibGUgY3B1X3RpbWVfdXNlZDsK KyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07CisgIHN0YXJ0ID0gY2xvY2soKTsK KyNlbmRpZgorKi8KKyAgTGlzcF9PYmplY3Qgdmxpc3QgPSBRbmlsOworICBMaXNwX09iamVjdCB0 ZW5fZWxlbWVudHMgPSBRbmlsOworICBpbnQgeCwgeSwgaHBvcywgdnBvczsKKyAgZW51bSB0ZXh0 X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZTsKKyAgaW50IGN1cnNvcl93aWR0aDsKKyAgTGlzcF9P YmplY3QgZm9yZWdyb3VuZCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGJhY2tncm91bmQgPSBRbmls OworICBMaXNwX09iamVjdCBmbGF2b3IgPSBRbmlsOworICBwdHJkaWZmX3QgcG9zOworICBmb3Ig KHZsaXN0ID0gWENBUiAody0+Y3Jvc3NoYWlyc19jYWNoZSk7CisgICAgICAgQ09OU1AgKHZsaXN0 KTsKKyAgICAgICB2bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAgICB7CisgICAgICB0ZW5fZWxlbWVu dHMgPSBYQ0FSICh2bGlzdCk7CisgICAgICB4ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDAp LCB0ZW5fZWxlbWVudHMpKTsKKyAgICAgIHkgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMSks IHRlbl9lbGVtZW50cykpOworICAgICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgy KSwgdGVuX2VsZW1lbnRzKSk7CisgICAgICB2cG9zID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIg KDMpLCB0ZW5fZWxlbWVudHMpKTsKKyAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJz b3JfdHlwZSAoRm50aCAobWFrZV9udW1iZXIgKDQpLCB0ZW5fZWxlbWVudHMpKTsKKyAgICAgIGN1 cnNvcl93aWR0aCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICg1KSwgdGVuX2VsZW1lbnRzKSk7 CisgICAgICBmb3JlZ3JvdW5kID0gRm50aCAobWFrZV9udW1iZXIgKDYpLCB0ZW5fZWxlbWVudHMp OworICAgICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfbnVtYmVyICg3KSwgdGVuX2VsZW1lbnRz KTsKKyAgICAgIGZsYXZvciA9IEZudGggKG1ha2VfbnVtYmVyICg4KSwgdGVuX2VsZW1lbnRzKTsK KyAgICAgIHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICg5KSwgdGVuX2VsZW1lbnRzKSk7 CisgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgeSwgaHBvcywgdnBvcywgY3Vyc29y X3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgZmxhdm9yKTsKKyAgICB9CisvKgorI2lm ZGVmIEdMWVBIX0RFQlVHCisgIGVuZCA9IGNsb2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRv dWJsZSkgKGVuZCAtIHN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3Rp bWUsIHNpemVvZiBidWZfdGltZSwgMCwgMCwgY3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhv ZF9hZGQgKHcsICJtY19yZWRyYXdfY3Jvc3NoYWlyczogIFRJTUUgKCVzKSIsIGJ1Zl90aW1lKTsK KyNlbmRpZgorKi8KK30KKwordm9pZAorbWNfZXJhc2VfY3Jvc3NoYWlycyAoc3RydWN0IHdpbmRv dyAqdywgYm9vbCBkZWxldGVfY2FjaGUpCit7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGNs b2NrX3Qgc3RhcnQsIGVuZDsKKyAgZG91YmxlIGNwdV90aW1lX3VzZWQ7CisgIGNoYXIgYnVmX3Rp bWVbREJMX0JVRlNJWkVfQk9VTkRdOworICBzdGFydCA9IGNsb2NrKCk7CisjZW5kaWYKKyovCisg IExpc3BfT2JqZWN0IHZsaXN0ID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgdGVuX2VsZW1lbnRzID0g UW5pbDsKKyAgaW50IHgsIHksIGhwb3MsIHZwb3M7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMg Y3Vyc29yX3R5cGU7CisgIGludCBjdXJzb3Jfd2lkdGg7CisgIExpc3BfT2JqZWN0IGZvcmVncm91 bmQgPSBRbmlsOworICBMaXNwX09iamVjdCBiYWNrZ3JvdW5kID0gUW5pbDsKKyAgTGlzcF9PYmpl Y3QgZmxhdm9yID0gUW5pbDsKKyAgcHRyZGlmZl90IHBvczsKKyAgLyogRGVwZW5kaW5nIHVwb24g dGhlIGRpcmVjdGlvbiBvZiBtb3ZlbWVudCBhbmQgZGlzdGFuY2UgZnJvbSB0aGUgcmVhbCBjdXJz b3IgdGhlIGN1cnJlbnQgY29tbWFuZAorICB0YWtlcyB1cywgdGhlIHByZXZpb3VzIHJlYWwgY3Vy c29yIHdpbGwgYmUgbGVmdCBiZWhpbmQuICBJIHRyaWVkIHJlc3RvcmluZyBwb2ludCBhZnRlciBk cmF3L2VyYXNlLAorICBidXQgdGhhdCBkaWRuJ3QgZml4IHRoZSBpc3N1ZS4gIFNvIGZvciBub3cs IHdlIGp1c3QgZXJhc2UgdGhlIHJlYWwgY3Vyc29yLiAqLworICBtY19lcmFzZV9nbHlwaF9jdXJz b3IgKHcsIHctPnBoeXNfY3Vyc29yLngsIHctPnBoeXNfY3Vyc29yLnksIHctPnBoeXNfY3Vyc29y Lmhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdy0+cGh5c19jdXJzb3IudnBvcywgdy0+ cGh5c19jdXJzb3JfdHlwZSk7CisgIGZvciAodmxpc3QgPSBYQ0FSICh3LT5jcm9zc2hhaXJzX2Nh Y2hlKTsKKyAgICAgICBDT05TUCAodmxpc3QpOworICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3Qp KQorICAgIHsKKyAgICAgIHRlbl9lbGVtZW50cyA9IFhDQVIgKHZsaXN0KTsKKyAgICAgIHggPSBY SU5UIChGbnRoIChtYWtlX251bWJlciAoMCksIHRlbl9lbGVtZW50cykpOworICAgICAgeSA9IFhJ TlQgKEZudGggKG1ha2VfbnVtYmVyICgxKSwgdGVuX2VsZW1lbnRzKSk7CisgICAgICBocG9zID0g WElOVCAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB0ZW5fZWxlbWVudHMpKTsKKyAgICAgIHZwb3Mg PSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMyksIHRlbl9lbGVtZW50cykpOworICAgICAgY3Vy c29yX3R5cGUgPSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChGbnRoIChtYWtlX251bWJlciAoNCks IHRlbl9lbGVtZW50cykpOworICAgICAgY3Vyc29yX3dpZHRoID0gWElOVCAoRm50aCAobWFrZV9u dW1iZXIgKDUpLCB0ZW5fZWxlbWVudHMpKTsKKyAgICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtl X251bWJlciAoNiksIHRlbl9lbGVtZW50cyk7CisgICAgICBiYWNrZ3JvdW5kID0gRm50aCAobWFr ZV9udW1iZXIgKDcpLCB0ZW5fZWxlbWVudHMpOworICAgICAgZmxhdm9yID0gRm50aCAobWFrZV9u dW1iZXIgKDgpLCB0ZW5fZWxlbWVudHMpOworICAgICAgcG9zID0gWElOVCAoRm50aCAobWFrZV9u dW1iZXIgKDkpLCB0ZW5fZWxlbWVudHMpKTsKKyAgICAgIGlmIChFUSAoZmxhdm9yLCBRbWNfZ2x5 cGgpKQorICAgICAgICBtY19lcmFzZV9nbHlwaF9jdXJzb3IgKHcsIHgsIHksIGhwb3MsIHZwb3Ms IGN1cnNvcl90eXBlKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIGlmIChFUSAoZmxhdm9yLCBRb3ZlcmxheV9hcnJvd19iaXRtYXApCisgICAgICAgICAgICAg ICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hbmdsZSkKKyAg ICAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3IsIFFtY19ob2xsb3dfcmVjdGFuZ2xlKQorICAg ICAgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmds ZSkKKyAgICAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3IsIFFtY192ZXJ0aWNhbF9iYXIpCisg ICAgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfdmVydGljYWxfYmFyX2JhY2tzbGFz aCkpCisgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUgPSBOT19DVVJTT1I7CisgICAgICAgICAg ICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCB4LCB5LCBocG9zLCB2cG9zLCBjdXJzb3JfdHlw ZSwgY3Vyc29yX3dpZHRoLCBiYWNrZ3JvdW5kLCBmbGF2b3IpOworICAgICAgICAgICAgfQorICAg IH0KKyAgaWYgKGRlbGV0ZV9jYWNoZSkKKyAgICB3c2V0X2Nyb3NzaGFpcnNfY2FjaGUgKHcsIFFu aWwpOworICB3LT5tYy5lcmFzZV9jcm9zc2hhaXJzID0gZmFsc2U7CisvKgorI2lmZGVmIEdMWVBI X0RFQlVHCisgIGVuZCA9IGNsb2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGVu ZCAtIHN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3RpbWUsIHNpemVv ZiBidWZfdGltZSwgMCwgMCwgY3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcs ICJtY19lcmFzZV9jcm9zc2hhaXJzOiAgVElNRSAoJXMpIiwgYnVmX3RpbWUpOworI2VuZGlmCisq LworfQorCit2b2lkCittY19wb3J0YWwgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgY3Vyc29yX29u X3ApCit7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1VTFRJUExFIENVUlNPUlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBpZiAo IU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiB3LT5tYy5lcmFzZV9nbHlwaF9jdXJzb3IKKyAg ICAgICYmICFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkKKyAgICAgICYmIEVRICh3LT5jb250ZW50 cywgWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB3LT5tY19nbHlwaF9jYWNoZSkpKSkKKyAg ICBtY19jYWxjICh3LCAxKTsKKyAgaWYgKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQor ICAgICAgJiYgV0lORE9XX1ZBTElEX1AgKHNlbGVjdGVkX3dpbmRvdykKKyAgICAgICYmICFNSU5J X1dJTkRPV19QICh3KQorICAgICAgJiYgdy0+bWMuZHJhd19nbHlwaF9jdXJzb3IKKyAgICAgICYm ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2dseXBoX2xpc3QpKSkKKyAg ICAvKiBEcmF3IGZha2UgY3Vyc29ycyAqLworICAgIG1jX2NhbGMgKHcsIDApOworICAgIC8qIEZp cnN0IGF0dGVtcHQgYXQgZGVhbGluZyB3aXRoIGEgYHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2Fy ZWEnIHNpdHVhdGlvbi4gKi8KKyAgICBlbHNlIGlmICghTUlOSV9XSU5ET1dfUCAodykKKyAgICAg ICAgICAgICAmJiAhdy0+bWMuZHJhd19nbHlwaF9jdXJzb3IKKyAgICAgICAgICAgICAmJiAhTklM UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19nbHlwaF9saXN0KSkKKyAgICAgICAg ICAgICAmJiAhTklMUCAody0+bWNfZ2x5cGhfY2FjaGUpCisgICAgICAgICAgICAgJiYgRVEgKHct PmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMiksIHctPm1jX2dseXBoX2NhY2hl KSkpKQorICAgICAgeworICAgICAgICAvKiBSZW1vdmUgZmFrZSBjdXJzb3JzLiAqLworICAgICAg ICBtY19jYWxjICh3LCAxKTsKKyAgICAgICAgLyogRHJhdyBmYWtlIGN1cnNvcnMgKi8KKyAgICAg ICAgbWNfY2FsYyAodywgMCk7CisgICAgICB9CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENST1NTSEFJUlMKKyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworICAvKiBSZW1vdmUgY3Jvc3NoYWlycyBhbmQgZGVsZXRlIHRoZSBjYWNoZSwgYnV0 IE9OTFkgaWYgd2UgcGxhbiBvbiByZWRyYXdpbmcgdGhlbS4KKyAgSW4gYSB0aW1lciBzaXR1YXRp b24sIHdlIHdhbnQgdG8gZXJhc2UgYW5kIHJlZHJhdyAtLSB3ZSBnbyBmcm9tIGBjaGVja3BvaW50 XzInCisgIGluIGByZWRpc3BsYXlfaW50ZXJuYWwnIGFuZCBmb3JjZSBvdXIgd2F5IG92ZXIgdG8g YHVwZGF0ZV9mcmFtZScgMiBvZiAzLgorICBFbWFjcyByZWZyZXNoZXMgdGhlIHNlbGVjdGVkIHdp bmRvdyBhZnRlciBhYm91dCAxIHRvIDIgbWludXRlcyBvZiBubyBhY3Rpdml0eQorICBldmVuIHRo b3VnaCB0aGVyZSBpcyBub3RoaW5nIGF0dGFjaGVkIHRvIHRoZSBgdGltZV9saXN0Jy9gaWRsZV90 aW1lcl9saXN0Jy4KKyAgSW4gdGhhdCByZWZyZXNoIG5vLXRpbWVyIHNpdHVhdGlvbiwgd2Ugd2Fu dCB0byBlcmFzZS9kcmF3IHVzaW5nIHRoZSBjYWNoZS4gKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19Q ICh3KQorICAgICAgJiYgdy0+bWMuZXJhc2VfY3Jvc3NoYWlycworICAgICAgJiYgdy0+bWMuZHJh d19jcm9zc2hhaXJzCisgICAgICAmJiAhTklMUCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAg ICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDEpLCB3LT5jcm9zc2hh aXJzX2NhY2hlKSkpCisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2Vf bnVtYmVyICgyKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSkKKyAgICBtY19lcmFzZV9jcm9zc2hh aXJzICh3LCB0cnVlKTsKKyAgaWYgKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQorICAg ICAgJiYgV0lORE9XX1ZBTElEX1AgKHNlbGVjdGVkX3dpbmRvdykKKyAgICAgICYmICFNSU5JX1dJ TkRPV19QICh3KQorICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IGNyb3NzaGFpcnMpKQorICAgICAgICAgIC8qIEEgcmFyZSBjaXJjdW1zdGFuY2Ugd2hlcmUgY3Jv c3NoYWlycyBtb2RlIGlzIG5vbi1uaWwsIGJ1dCB0aGUKKyAgICAgICAgICB1c2VyIGhhcyB1bndp dHRpbmdseSBzZXQgYm90aCBgY3Jvc3NoYWlycy1ob3Jpem9udGFsLXJ1bGVyJyB0byBuaWwgYW5k IGFsc28KKyAgICAgICAgICBzZXQgYGNyb3NzaGFpcnMtdmVydGljYWwtcnVsZXInIHRvIG5pbCAt LSBpLmUuLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLiAqLworICAgICAgICAgICYmICghTklMUCAo QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIp KQorICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBj cm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyKSkpKQorICAgICAgJiYgdy0+bWMuZHJhd19jcm9zc2hh aXJzKQorICAgIC8qIERyYXcgY3Jvc3NoYWlycy4gKi8KKyAgICBtY19kcmF3X2Nyb3NzaGFpcnMg KHcpOworICAgIC8qIEEgc2l0dWF0aW9uIHRoYXQgb2NjdXJzIHdpdGggYHJlZGlzcGxheV9wcmVz ZXJ2ZV9lY2hvX2FyZWEnLiAqLworICAgIGVsc2UgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAg ICAgICAgICAgICYmICF3LT5tYy5kcmF3X2Nyb3NzaGFpcnMKKyAgICAgICAgICAgICAmJiAhTklM UCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAgICAmJiB3ID09IFhX SU5ET1cgKFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkp KQorICAgICAgICAgICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9udW1i ZXIgKDIpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKQorICAgICAgeworICAgICAgICAvKiBSZW1v dmUgY3Jvc3NoYWlycywgYnV0IGRvIE5PVCBkZWxldGUgdGhlIGNhY2hlLiAqLworICAgICAgICBt Y19lcmFzZV9jcm9zc2hhaXJzICh3LCBmYWxzZSk7CisgICAgICAgIC8qIFJlZHJhdyB0aGUgY3Jv c3NoYWlycyB1c2luZyB0aGUgY2FjaGUuICovCisgICAgICAgIG1jX3JlZHJhd19jcm9zc2hhaXJz ICh3KTsKKyAgICAgIH0KKyAgICAgIC8qIENBVENIQUxMOiAgRFJBVyBUSEUgUkVBTCBDVVJTT1Ig KG1heWJlKSEgKi8KKyAgICAgIGVsc2UgaWYgKGN1cnNvcl9vbl9wKQorICAgICAgICBkaXNwbGF5 X2FuZF9zZXRfY3Vyc29yICh3LCB0cnVlLCB3LT5vdXRwdXRfY3Vyc29yLmhwb3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPm91dHB1dF9jdXJzb3IudnBvcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+b3V0cHV0X2N1cnNv ci54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5vdXRwdXRf Y3Vyc29yLnkpOworfQorCit2b2lkCittY19yZWNvcmRfd2luZG93X2JvdW5kcyAoc3RydWN0IHdp bmRvdyAqdykKK3sKKyAgLyogUmVjb3JkIHByaW9yIHZhbHVlcyBmb3IgY3Vyc29yIFgsIHdpbmRv dy1zdGFydCBhbmQgd2luZG93LWVuZC4KKyAgVGhlIGdvYWwgaGVyZSBpcyB0byBmYWNpbGl0YXRl IGBtY19jYWxjJyByZWRyYXcgbXVsdGlwbGUgZmFrZQorICBjdXJzb3JzIHVzaW5nIHRoZSBjYWNo ZSBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkLiAqLworICBpZiAoIU1JTklfV0lORE9XX1AgKHcpCisg ICAgICAmJiB3LT5tYy5kcmF3X2dseXBoX2N1cnNvcgorICAgICAgJiYgKCFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIG1jX2dseXBoX2xpc3QpKQorICAgICAgICAgIHx8ICFOSUxQ ICh3LT5tY19nbHlwaF9jYWNoZSkpKQorICAgIHsKKyAgICAgIGlmICh3LT5tYy5jdXJyZW50X3N0 YXJ0KQorICAgICAgICB3LT5tYy5wcmV2aW91c19zdGFydCA9IHctPm1jLmN1cnJlbnRfc3RhcnQ7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICB3LT5tYy5wcmV2aW91c19zdGFydCA9IC0xOworICAg ICAgaWYgKHctPm1jLmN1cnJlbnRfZW5kKQorICAgICAgICB3LT5tYy5wcmV2aW91c19lbmQgPSB3 LT5tYy5jdXJyZW50X2VuZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHctPm1jLnByZXZpb3Vz X2VuZCA9IC0xOworICAgICAgdy0+bWMuY3VycmVudF9zdGFydCA9IG1hcmtlcl9wb3NpdGlvbiAo dy0+c3RhcnQpOworICAgICAgdy0+bWMuY3VycmVudF9lbmQgPSBCVUZfWiAoWEJVRkZFUiAody0+ Y29udGVudHMpKSAtIHctPndpbmRvd19lbmRfcG9zOworICAgICAgLyogVGhlIGFzc3VtcHRpb24g aXMgdGhhdCBgdy0+b3V0cHV0X2N1cnNvci54YCBpcyB1cGRhdGVkIEFGVEVSIGByZWRpc3BsYXlf d2luZG93Jy4KKyAgICAgIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHVzaW5nIGdseXBobGVz cyBtdWx0aXBsZSBmYWtlIGN1cnNvcnMgYmVjYXVzZSBpdCBpcworICAgICAgcG9zc2libGUgdGhh dCB0aGUgYnVmZmVyIHBvaW50cyByZW1haW4gdGhlIHNhbWUsIGJ1dCB0aGUgWCBtYXkgaGF2ZSBj aGFuZ2VkLgorICAgICAgQ3Jvc3NoYWlycyBkbyBub3QgdXNlIGB3LT5tYy5wcmV2aW91c194YC4g IElmIGl0IHR1cm5zIG91dCB0aGF0IGB3LT5vdXRwdXRfY3Vyc29yLnhgCisgICAgICBpcyB1cGRh dGVkIERVUklORyBgcmVkaXNwbGF5X3dpbmRvdycsIHRoZW4gaXQgd2lsbCBiZSBuZWNlc3Nhcnkg dG8gY2hhbmdlIHRoaXMKKyAgICAgIHRvIHVzZSBgaXQuY3VycmVudF94JyBhbmQgcGVyaGFwcyBy dW4gYHN0YXJ0X2Rpc3BsYXknIHRvIGdldCB0aGF0IHZhbHVlLiAqLworICAgICAgaWYgKHctPm91 dHB1dF9jdXJzb3IueCkKKyAgICAgICAgdy0+bWMucHJldmlvdXNfeCA9IHctPm91dHB1dF9jdXJz b3IueDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB3LT5tYy5wcmV2aW91c194ID0gLTE7 CisgICAgfQorfQorCit2b2lkCittY19yZW1vdmVfZXZlcnl0aGluZyAoc3RydWN0IHdpbmRvdyAq dykKK3sKKyAgLyogUmVtb3ZlIGZha2UgY3Vyc29ycy4gIElmIHdlIHJlbHkgdXBvbiBgdXBkYXRl X2ZyYW1lJyB0byByZW1vdmUgZmFrZSBjdXJzb3JzLAorICB0aGVuIGl0IHdvdWxkIGJlIHRvbyBs YXRlIHRvIHJlbW92ZSBmYWtlIGN1cnNvcnMgZnJvbSBhbGwgYXJlYXMgb2YgdGhlIHZpc2libGUK KyAgd2luZG93IHdoZW4gY3V0dGluZy9wYXN0aW5nIHRleHQgYW5kIHBlcmhhcHMgYSBmZXcgb3Ro ZXIgc2l0dWF0aW9ucy4gKi8KKyAgYm9vbCByZW1vdmVfY3Vyc29ycyA9IGZhbHNlOworICBib29s IHJlbW92ZV9jcm9zc2hhaXJzID0gZmFsc2U7CisgIGlmICghdy0+cHNldWRvX3dpbmRvd19wCisg ICAgICAmJiB3ID09IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdykKKyAgICAgICYmICFNSU5JX1dJ TkRPV19QICh3KQorICAgICAgJiYgIU5JTFAgKHctPm1jX2dseXBoX2NhY2hlKQorICAgICAgJiYg RVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMiksIHctPm1jX2dseXBo X2NhY2hlKSkpKQorICAgIHJlbW92ZV9jdXJzb3JzID0gdHJ1ZTsKKyAgaWYgKCF3LT5wc2V1ZG9f d2luZG93X3AKKyAgICAgIC8qIFRoZSBjcm9zc2hhaXJzIGludGVyZmVyZSB3aXRoIHRoZSBicm93 c2Uta2lsbC1yaW5nIGxpYnJhcnkuICovCisgICAgICAvKiAmJiB3ID09IFhXSU5ET1cgKHNlbGVj dGVkX3dpbmRvdykgKi8KKyAgICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIU5J TFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZu dGggKG1ha2VfbnVtYmVyICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgJiYgRVEg KHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMiksIHctPmNyb3NzaGFpcnNf Y2FjaGUpKSkpCisgICAgcmVtb3ZlX2Nyb3NzaGFpcnMgPSB0cnVlOworICBpZiAocmVtb3ZlX2N1 cnNvcnMKKyAgICAgIHx8IHJlbW92ZV9jcm9zc2hhaXJzKQorICAgIHsKKyAgICAgIHN0cnVjdCBm cmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICAgICAgdXBkYXRlX2JlZ2luIChmKTsKKyAg ICAgIGJsb2NrX2lucHV0ICgpOworICAgICAgaWYgKHJlbW92ZV9jdXJzb3JzKQorICAgICAgICBt Y19jYWxjICh3LCAxKTsKKyAgICAgIC8qIFJlbW92ZSBjcm9zc2hhaXJzIGFuZCBkZWxldGUgdGhl IGNhY2hlLiAqLworICAgICAgaWYgKHJlbW92ZV9jcm9zc2hhaXJzKQorICAgICAgICBtY19lcmFz ZV9jcm9zc2hhaXJzICh3LCB0cnVlKTsKKyAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICB1 cGRhdGVfZW5kIChmKTsKKyAgICB9Cit9CisKK2ludAorbWNfY3Jvc3NoYWlyc19wIChzdHJ1Y3Qg d2luZG93ICp3KQoreworLyogTW92aW5nIHRoZSBtb3VzZSB0cmlnZ2VycyBgdXBkYXRlX3dpbmRv d19jdXJzb3InIHdoaWNoIGNhbGxzCitgZGlzcGxheV9hbmRfc2V0X2N1cnNvcicgdGhhdCB3b3Vs ZCBvdGhlcndpc2UgcmVtb3ZlIGEgcG9ydGlvbiBvZiB0aGUgaG9yaXpvbnRhbAorcnVsZXIgYXQg cG9pbnQgYW5kL29yIGZyb20gcG9pbnQgYXQgZW5kIG9mIHZpc3VhbCBsaW5lIHRvIHdpbmRvdyBl ZGdlLiAqLworICBpZiAoIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAhdy0+bWMuZHJhd19j cm9zc2hhaXJzCisgICAgICAmJiAhTklMUCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAgICYm ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAg JiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMSksIHctPmNyb3NzaGFp cnNfY2FjaGUpKSkKKyAgICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9u dW1iZXIgKDIpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKQorICAgIHJldHVybiB0cnVlOworICAg IGVsc2UKKyAgICAgIHJldHVybiBmYWxzZTsKK30KKworaW50CittY193aXRob3V0X3VwZGF0ZV9m cmFtZSAoc3RydWN0IHdpbmRvdyAqdykKK3sKKy8qIGB0aW1lci1saXN0JyAvIGB0aW1lci1pZGxl LWxpc3QnOiAgVGhlIGJvb2xlYW4gc3dpdGNoZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5Cit0dXJu ZWQgb24gd2hlbiBhIGZ1bmN0aW9uIGF0dGFjaGVkIHRvIGEgdGltZXIgaXMgY2FsbGVkLiAgV2Ug aGF2ZSBzd2l0Y2hlcyB0aGF0IGFyZQorc2V0IGluIGBrZXlib2FyZC5jYCBmb3IgbXVsdGlwbGUg ZmFrZSBjdXJzb3JzIChlLmcuLCBhIGtleWJvYXJkIHByZXNzKS4gIFdlIHNldAordGhlIHN3aXRj aGVzIG1hbnVhbGx5IGZvciBib3RoIG11bHRpcGxlIGN1cnNvcnMgYW5kIGNyb3NzaGFpcnMgaW4g Y29uanVuY3Rpb24gd2l0aAordGltZXIgZnVuY3Rpb25zLiAgYHVwZGF0ZV9mcmFtZScgbWF5IG5v dCBiZSBjYWxsZWQgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlCit3aW5kb3cvYnVmZmVy LiAgVG8gdGVzdCB0aGlzIHRoZW9yeSwgdGhyb3cgdGhlIHN3aXRjaGVzIGZvciBjcm9zc2hhaXJz IGZyb20gYW4gaWRsZQordGltZXIgd2l0aG91dCBkcmF3aW5nL2VyYXNpbmcgYW55IG92ZXJsYXlz IGluIHRoZSBidWZmZXIuICBga2JkX21jX2FjdGl2YXRlX2N1cnNvcnMnCitzZXRzIHRoZSBtdWx0 aXBsZSBjdXJzb3JzIGJvb2xlYW4gc3dpdGNoZXMgdG8gYHRydWVgIHdoZW5ldmVyIHRoZXJlIGlz IGEga2V5Ym9hcmQKK3RyaWdnZXJlZCBjb21tYW5kLiAgSG93ZXZlciwgdGhhdCBkb2VzIG5vdCBu ZWNlc3NhcmlseSBtZWFuIHRoYXQgd2UgbmVlZCB0byBkcmF3CittdWx0aXBsZSBjdXJzb3JzLiAg SW5hc211Y2ggYXMgdGhlIG11bHRpcGxlIGN1cnNvcnMgYm9vbGVhbiBzd2l0Y2hlcyBtaWdodCBo YXZlCitiZWVuIHNldCB0aHJvdWdoIGEgdGltZXIgZnVuY3Rpb24sIGl0IGlzIGJldHRlciB0byBj aGVjayB0aGUgYnVmZmVyIGxvY2FsIHZhcmlhYmxlcworYW5kIHRoZSB3aW5kb3cgY2FjaGVzLiAg SW4gdGhlIGNhc2Ugb2YgY3Jvc3NoYWlycywgdGhlIGNvcnJlc3BvbmRpbmcgYm9vbGVhbgorc3dp dGNoZXMgYXJlIG9ubHkgc2V0IHdoZW4gd2UgcmVhbGx5IHdhbnQgdG8gZHJhdyB0aGUgY3Jvc3No YWlycy4KKy0gIFdlIGFsc28gdXNlIHRoaXMgZnVuY3Rpb24gYXMgcGFydCBvZiBgdXBkYXRlX3dp bmRvd19jdXJzb3InIHdoZW4gbW91c2luZyBvdmVyCitzb21ldGhpbmcgdGhhdCB3b3VsZCBvcmRp bmFyaWx5IGNhdXNlIHRoZSByZWFsIGN1cnNvciB0byBiZSByZWRyYXduLiAqLworICAgICAgaWYg KCFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkKKyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBtY19nbHlwaF9saXN0KSkKKyAgICAgICAgICB8fCB3LT5tYy5k cmF3X2Nyb3NzaGFpcnMKKyAgICAgICAgICB8fCBtY19jcm9zc2hhaXJzX3AgKHcpKQorICAgICAg ICB7CisgICAgICAgICAgLyogV2UgYXJlIGJ5cGFzc2luZyBgdXBkYXRlX2ZyYW1lJyBhbmQgZ29p bmcgc3RyYWlnaHQgdG8gYG1jX3BvcnRhbCcuICovCisgICAgICAgICAgc3RydWN0IGZyYW1lICpm ID0gWEZSQU1FICh3LT5mcmFtZSk7CisgICAgICAgICAgdXBkYXRlX2JlZ2luIChmKTsKKyAgICAg ICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICBtY19wb3J0YWwgKHcsIHRydWUpOworICAg ICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgdXBkYXRlX2VuZCAoZik7CisgICAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJl dHVybiBmYWxzZTsKK30KKworREVGVU4gKCJtYy1hY3RpdmF0ZS1jcm9zc2hhaXJzIiwgRm1jX2Fj dGl2YXRlX2Nyb3NzaGFpcnMsIFNtY19hY3RpdmF0ZV9jcm9zc2hhaXJzLCAxLCAxLCAwLAorICAg ICAgIGRvYzogLyogRG9jLXN0cmluZy4gKi8pCisgIChMaXNwX09iamVjdCB3aW5kb3cpCit7Cisg IHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHdpbmRvdyk7CisgIHctPm1j LmRyYXdfY3Jvc3NoYWlycyA9IHRydWU7CisgIHctPm1jLmVyYXNlX2Nyb3NzaGFpcnMgPSB0cnVl OworICByZXR1cm4gUW5pbDsKK30KKworREVGVU4gKCJtYy1hY3RpdmF0ZS1jdXJzb3JzIiwgRm1j X2FjdGl2YXRlX2N1cnNvcnMsIFNtY19hY3RpdmF0ZV9jdXJzb3JzLCAxLCAxLCAwLAorICAgICAg IGRvYzogLyogV2hlbiB1c2luZyBhIHRpbWVyLCBga2JkX21jX2FjdGl2YXRlX2N1cnNvcnMnIGlu IGBrZXlib2FyZC5jJyBpcyBub3QgY2FsbGVkLgorVGhlcmUgYXJlIGFsc28gc29tZSBvdGhlciBj aXJjdW1zdGFuY2VzIHdoZXJlIGBtYy1hY3RpdmF0ZS1jdXJzb3JzJyBpcyBoZWxwZnVsLiAqLykK KyAgKExpc3BfT2JqZWN0IHdpbmRvdykKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9s aXZlX3dpbmRvdyAod2luZG93KTsKKyAgdy0+bWMuZHJhd19nbHlwaF9jdXJzb3IgPSB0cnVlOwor ICB3LT5tYy5lcmFzZV9nbHlwaF9jdXJzb3IgPSB0cnVlOworICByZXR1cm4gUW5pbDsKK30KKwor LyogIChmdW5kYW1lbnRhbC1tb2RlKQorICAgIChzZXRxIGRpc3BsYXktbGluZS1udW1iZXJzIHQp CisgICAgKHNldHEgYnVmZmVyLWRpc3BsYXktdGFibGUgKG1ha2UtZGlzcGxheS10YWJsZSkpCisg ICAgKGFzZXQgYnVmZmVyLWRpc3BsYXktdGFibGUKKyAgICAgICAgICA/XHQKKyAgICAgICAgICAo dmVjdG9yIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCQiAnZm9udC1sb2NrLXdhcm5pbmctZmFjZSkK KyAgICAgICAgICAgICAgICAgIChtYWtlLWdseXBoLWNvZGUgP1x0ICdoaWdobGlnaHQpKSkKKyAg ICAoYXNldCBidWZmZXItZGlzcGxheS10YWJsZQorICAgICAgICAgID9cbgorICAgICAgICAgICh2 ZWN0b3IgKG1ha2UtZ2x5cGgtY29kZSA/XHUwMEI2ICdmb250LWxvY2stY29tbWVudC1mYWNlKQor ICAgICAgICAgICAgICAgICAgP1xuKSkKKyAgICAoc2V0cSB0YWItd2lkdGggOCkKKyAgICAoc2V0 cS1sb2NhbCBhdXRvLWhzY3JvbGwtbW9kZSAnY3VycmVudC1saW5lKSAqLworCitERUZVTiAoImRl YnVnZ2luZyIsIEZkZWJ1Z2dpbmcsIFNkZWJ1Z2dpbmcsIDAsIDAsIDAsCisgICAgICAgZG9jOiAv KiBUaGlzIGZ1bmN0aW9uIHVzZWQgZm9yIGRlYnVnZ2luZy4gKi8pCisgICh2b2lkKQoreworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgUFJFTElNSU5BUlkg U1RVRkYKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVj b2RlX2xpdmVfd2luZG93IChzZWxlY3RlZF93aW5kb3cpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGl0IGl0OworICB2b2lkICppdGRhdGEgPSBiaWRp X3NoZWx2ZV9jYWNoZSAoKTsKKyAgZW51bSBtb3ZlX2l0X3Jlc3VsdCByYyA9IE1PVkVfWF9SRUFD SEVEOworICBzdHJ1Y3QgdGV4dF9wb3Mgc3RhcnRfdGV4dF9wb3NpdGlvbjsKKyAgaW50IGNvdW50 ID0gMDsKKyAgaW50IG5ld194ID0gMDsKKyAgaW50IHJlbGF0aXZlX3ggPSAwOworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgU1RBUlQgRElTUExBWSAtLSB3 LT5zdGFydAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgIC8qIEJlZ2luIHRoZSBqb3VybmV5 IGF0IHctPnN0YXJ0LiAqLworICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIgKHN0YXJ0X3RleHRf cG9zaXRpb24sIHctPnN0YXJ0KTsKKyAgc3RhcnRfZGlzcGxheSAoJml0LCB3LCBzdGFydF90ZXh0 X3Bvc2l0aW9uKTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgIEdP IFRPIFRIRSBCRUdJTk5JTkcgT0YgVEhFIENVUlJFTlQgTElORS4KKyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworICAvKiBQbGFjZSB0aGUgSVQgb24gdGhlIGN1cnJlbnQgbGluZSBjb250YWluaW5n IFBULiAqLworICBpbnQgdm9mZnNldCA9IChXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUICh3KSA+ IDAKKyAgICAgICAgICAgICAgICAgJiYgdy0+b3V0cHV0X2N1cnNvci52cG9zID4gMCkKKyAgICAg ICAgICAgICAgICAgID8gdy0+b3V0cHV0X2N1cnNvci52cG9zIC0gMQorICAgICAgICAgICAgICAg ICAgOiB3LT5vdXRwdXRfY3Vyc29yLnZwb3M7CisgIGlmICh2b2Zmc2V0ID4gMCkKKyAgICBtb3Zl X2l0X2J5X2xpbmVzICgmaXQsIHZvZmZzZXQpOworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg ICAgICAgICAgICAgTU9WRSBJVCBPVkVSIEVBQ0ggQ0hBUkFDVEVSIE9OIFRIRSBDVVJSRU5UIExJ TkUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgd2hpbGUgKHRydWUpCisgICAgeworICAg ICAgY291bnQgKz0gMTsKKyAgICAgIGlmIChuZXdfeCA+IDApCisgICAgICAgIHJlbGF0aXZlX3gg PSBuZXdfeCAtIGl0LmZpcnN0X3Zpc2libGVfeDsKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICAgICAgICAgICAgICAgICAgICAgICBEVU1QIFJFTEVWQU5UIEdMWVBIIElORk9STUFUSU9OCisq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKyAgaW50IHdfaHNjcm9sbCA9IGl0LnctPmhzY3JvbGw7 CisgIGludCB3X21pbl9oc2Nyb2xsID0gaXQudy0+bWluX2hzY3JvbGw7CisgIGludCBpdF9jaGFy cG9zID0gSVRfQ0hBUlBPUyAoaXQpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NP TFVNTl9XSURUSCAoZik7CisgIHN0cnVjdCBmYWNlICpmYWNlID0gbWNfbG9va3VwX2ZhY2UgKCZp dCk7CisgIHN0cnVjdCBmb250ICpmb250ID0gZmFjZS0+Zm9udDsKKyAgaW50IGZvbnRfc3BhY2Vf d2lkdGggPSAoZm9udCA9PSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnJhbWVf Y2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvbnQtPnNwYWNlX3dpZHRo KTsKKyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZF9mYWNlID0gZmFjZS0+bGZhY2VbTEZBQ0VfRk9S RUdST1VORF9JTkRFWF07CisgIExpc3BfT2JqZWN0IGJhY2tncm91bmRfZmFjZSA9IGZhY2UtPmxm YWNlW0xGQUNFX0JBQ0tHUk9VTkRfSU5ERVhdOworICBMaXNwX09iamVjdCBidWYgPSBpdC53LT5j b250ZW50czsKKyAgYm9vbCBoc2NsID0gKCFpdC53LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAg ICAgICAgICAgICAgJiYgRVEgKEZidWZmZXJfbG9jYWxfdmFsdWUgKFFhdXRvX2hzY3JvbGxfbW9k ZSwgYnVmKSwgUWN1cnJlbnRfbGluZSkKKyAgICAgICAgICAgICAgICYmIGl0LnctPmhzY3JvbGwg PiAwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiXG4lZC4gICVzJXNcblwKKyAgICBpdC5jICglZClc blwKKyAgICBmZXRjaF9ieXRlICglZClcblwKKyAgICBjaGFyYWN0ZXIgKCVzKVxuXAorICAgIElU X0NIQVJQT1MgKCVkKVxuXAorICAgIHctPmhzY3JvbGwgKCVkKVxuXAorICAgIGhzY2wgKCVzKVxu XAorICAgIHctPm1pbl9oc2Nyb2xsICglZClcblwKKyAgICBpdC5ocG9zICglZClcblwKKyAgICBp dC52cG9zICglZClcblwKKyAgICBpdC5jdXJyZW50X3ggKCVkKVxuXAorICAgIG5ld194ICglZClc blwKKyAgICBmb250LT5zcGFjZV93aWR0aCAoJWQpXG5cCisgICAgaXQubG51bV9waXhlbF93aWR0 aCAoJWQpXG5cCisgICAgaXQubG51bV93aWR0aCAoJWQpXG5cCisgICAgaXQuZmlyc3RfdmlzaWJs ZV94ICglZClcblwKKyAgICByZWxhdGl2ZV94ICglZClcblwKKyAgICBpdC5mYWNlX2lkICglZClc blwKKyAgICBmb3JlZ3JvdW5kX2ZhY2UgKCVzKVxuXAorICAgIGJhY2tncm91bmRfZmFjZSAoJXMp XG5cCisgICAgcmMgKCVzKVxuIiwKKyAgICAgIGNvdW50LAorICAgICAgKGl0LmMgPT0gMAorICAg ICAgICA/ICJOT1RISU5HIgorICAgICAgICA6IGl0LmMgPT0gMTg3CisgICAgICAgICAgPyAiVEFC IENIQVJBQ1RFUiIKKyAgICAgICAgOiBpdC5jID09ICdcdCcKKyAgICAgICAgICA/ICJUQUIgU1RS RVRDSCIKKyAgICAgICAgOiAiVEVYVCIpLAorICAgICAgKHJlbGF0aXZlX3ggPT0gaXQubG51bV9w aXhlbF93aWR0aAorICAgICAgICA/ICIgLS0gVEhFIEZVTiBTVEFSVFMgSEVSRSIKKyAgICAgICAg OiAiIiksCisgICAgICBpdC5jLAorICAgICAgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKSwK KyAgICAgICghTklMUCAoRmNoYXJfdG9fc3RyaW5nIChtYWtlX251bWJlciAoaXQuYykpKQorICAg ICAgICA/IFNTREFUQSAoRmNoYXJfdG9fc3RyaW5nIChtYWtlX251bWJlciAoaXQuYykpKQorICAg ICAgICA6ICJOSUxQIC0tIGl0LmMgYXMgYSBzdHJpbmciKSwKKyAgICAgIGl0X2NoYXJwb3MsCisg ICAgICAvKiBXaGVuIGBpdC53LT5oc2Nyb2xsYCBpcyBzZXQgdG8gYW4gYGludGAsIGdkYiByZXBv cnRzIHRoZSB2YWx1ZQorICAgICAgYXMgYmVpbmc6ICA8dmFyaWFibGUgb3B0aW1pemVkIGF3YXkg YnkgY29tcGlsZXI+ICovCisgICAgICB3X2hzY3JvbGwsCisgICAgICAoaHNjbCA/ICJ0cnVlIiA6 ICJmYWxzZSIpLAorICAgICAgd19taW5faHNjcm9sbCwKKyAgICAgIGl0Lmhwb3MsCisgICAgICBp dC52cG9zLAorICAgICAgaXQuY3VycmVudF94LAorICAgICAgbmV3X3gsCisgICAgICAvKiBDYW5u b3QgYWNjZXNzIG1lbW9yeSBhdCBhZGRyZXNzIDB4YTAuICBUaGlzIGNhbWUgYWJvdXQgYnkgdXNp bmcKKyAgICAgIGA/XFUwMDAxRDRENWAgdG8gY3JlYXRlIGEgZmFuY3kgZm9ybSBmZWVkIGNoYXJh Y3RlciB0aGF0IHdhcyBub3QKKyAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGZvbnQgY2hvc2VuIG9u IFgxMS4gKi8KKyAgICAgIChmb250ID09IE5VTEwKKyAgICAgICA/IDAKKyAgICAgICA6IGZvbnQt PnNwYWNlX3dpZHRoKSwKKyAgICAgIGl0LmxudW1fcGl4ZWxfd2lkdGgsCisgICAgICBpdC5sbnVt X3dpZHRoLAorICAgICAgaXQuZmlyc3RfdmlzaWJsZV94LAorICAgICAgcmVsYXRpdmVfeCwKKyAg ICAgIGl0LmZhY2VfaWQsCisgICAgICAoIU5JTFAgKGZvcmVncm91bmRfZmFjZSkKKyAgICAgICAg PyBTU0RBVEEgKGZvcmVncm91bmRfZmFjZSkKKyAgICAgICAgOiAiTklMUCBmb3JlZ3JvdW5kX2Zh Y2UiKSwKKyAgICAgICghTklMUCAoYmFja2dyb3VuZF9mYWNlKQorICAgICAgICA/IFNTREFUQSAo YmFja2dyb3VuZF9mYWNlKQorICAgICAgICA6ICJOSUxQIGJhY2tncm91bmRfZmFjZSIpLAorICAg ICAgKHJjID09IE1PVkVfVU5ERUZJTkVECisgICAgICAgID8gIk1PVkVfVU5ERUZJTkVEIgorICAg ICAgICA6IHJjID09IE1PVkVfUE9TX01BVENIX09SX1pWCisgICAgICAgICAgPyAiTU9WRV9QT1Nf TUFUQ0hfT1JfWlYiCisgICAgICAgIDogcmMgPT0gTU9WRV9YX1JFQUNIRUQKKyAgICAgICAgICA/ ICJNT1ZFX1hfUkVBQ0hFRCIKKyAgICAgICAgOiByYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVECisg ICAgICAgICAgPyAiTU9WRV9MSU5FX0NPTlRJTlVFRCIKKyAgICAgICAgOiByYyA9PSBNT1ZFX0xJ TkVfVFJVTkNBVEVECisgICAgICAgICAgPyAiTU9WRV9MSU5FX1RSVU5DQVRFRCIKKyAgICAgICAg OiByYyA9PSBNT1ZFX05FV0xJTkVfT1JfQ1IKKyAgICAgICAgICA/ICJNT1ZFX05FV0xJTkVfT1Jf Q1IiCisgICAgICAgIDogIk9PUFMiKSk7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAg ICAgICAgICAgICAgICAgICAgTU9WRSBJVDogIElOQ1JFTUVOVCA9PSBGT05ULlNQQUNFX1dJRFRI CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgICAgIGlmICgoRkVUQ0hfQllURSAoSVRfQllU RVBPUyAoaXQpKSA9PSAnXG4nCisgICAgICAgICAgICYmIGl0LmMgIT0gMCkKKyAgICAgICAgICAv KiB8fCBJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QICgmaXQpICovCisgICAgICAgICAgfHwgcmMg PT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYpCisgICAgICAgIGJyZWFrOworICAgICAgbmV3X3ggKz0g Zm9udF9zcGFjZV93aWR0aDsKKyAgICAgIHJjID0gbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8g KCZpdCwgWlYsIG5ld194LCBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCk7CisgICAgICBpZiAocmMg PT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZiAoaXQuY3Vy cmVudF94IC0gaXQuZmlyc3RfdmlzaWJsZV94ICsgZm9udF9zcGFjZV93aWR0aCA+PQorICAgICAg ICAgIHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSkpCisgICAgICAgIGJyZWFrOworICAg IH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgIFJF RElTUExBWSBBTkQgRFVNUF9HTFBZSF9ST1cKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBy ZWRpc3BsYXlfaW50ZXJuYWwgKCk7CisgIGludCB2cG9zID0gKFdJTkRPV19IRUFERVJfTElORV9I RUlHSFQgKGl0LncpID4gMCkKKyAgICAgICAgICAgICA/IGl0LnZwb3MgKyAxCisgICAgICAgICAg ICAgOiBpdC52cG9zOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3cgPSBNQVRSSVhfUk9X ICh3LT5jdXJyZW50X21hdHJpeCwgdnBvcyk7CisgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Cisg IGR1bXBfZ2x5cGhfcm93IChnbHlwaF9yb3csIHZwb3MsIDIpOworICBiaWRpX3Vuc2hlbHZlX2Nh Y2hlIChpdGRhdGEsIGZhbHNlKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKKy8qIGVuZCBNVUxUSVBM RSBDVVJTT1JTICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAMCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKIAkJICAgICAgV2luZG93IGRpc3BsYXkgZGltZW5zaW9ucwpAQCAtMTMzNjYsOSArMTU3 ODMsMjMgQEAgaHNjcm9sbF93aW5kb3dfdHJlZSAoTGlzcF9PYmplY3Qgd2luZG93KQogCSAgICAg IGVsc2UKIAkJcHQgPSBjbGlwX3RvX2JvdW5kcyAoQkVHViwgbWFya2VyX3Bvc2l0aW9uICh3LT5w b2ludG0pLCBaVik7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBD VVJTT1JTICovCisKKyAgc3RydWN0IGRpc3BsYXlfcG9zICpwb3MgPSAmY3Vyc29yX3Jvdy0+c3Rh cnQ7CisgIHB0cmRpZmZfdCBjaGFycG9zID0gQ0hBUlBPUyAocG9zLT5wb3MpOworICBib29sIGJh cmZfY3Jhc2ggPSAoY2hhcnBvcyA8IDAgfHwgKGNoYXJwb3MgPj0gQlVGX0JFRyAoY3VycmVudF9i dWZmZXIpICYmIGNoYXJwb3MgPD0gWlYpKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jh c2gpCisgICAgcmV0dXJuIGhzY3JvbGxlZF9wOworICAgIGVsc2UKIAkgICAgICAvKiBNb3ZlIGl0 ZXJhdG9yIHRvIHB0IHN0YXJ0aW5nIGF0IGN1cnNvcl9yb3ctPnN0YXJ0IGluCiAJCSBhIGxpbmUg d2l0aCBpbmZpbml0ZSB3aWR0aC4gICovCiAJICAgICAgaW5pdF90b19yb3dfc3RhcnQgKCZpdCwg dywgY3Vyc29yX3Jvdyk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICBp ZiAoaHNjbCkKIAkJaXQuZmlyc3RfdmlzaWJsZV94ID0gd2luZG93X2hzY3JvbGxfbGltaXRlZCAo dywgaXQuZikKIAkJCQkgICAgICogRlJBTUVfQ09MVU1OX1dJRFRIIChpdC5mKTsKQEAgLTEzNjc3 LDIwICsxNjEwOCwzNiBAQCBvdmVybGF5X2Fycm93c19jaGFuZ2VkX3AgKGJvb2wgc2V0X3JlZGlz cGxheSkKIAkJRmdldCAodmFyLCBRbGFzdF9hcnJvd19wb3NpdGlvbikpCiAJICB8fCAhIChwc3Ry ID0gb3ZlcmxheV9hcnJvd19zdHJpbmdfb3JfcHJvcGVydHkgKHZhciksCiAJCUVRIChwc3RyLCBG Z2V0ICh2YXIsIFFsYXN0X2Fycm93X3N0cmluZykpKSkKKworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogQGxhd2xpc3QgYWRkZWQgY2hlY2tz IGZvciBhIHZhbGlkIG1hcmtlciBhbmQgYSBsaXZlIGJ1ZmZlciB0byBhdm9pZCBjcmFzaGluZzsK K2FuZCwgaGUgb3B0ZWQgdG8gYnlwYXNzIGByZWRpc3BsYXlfb3RoZXJfd2luZG93cycgd2hlbiB0 aGUgYnVmZmVyIGlzIGRpc3BsYXllZAoraW4gbW9yZSB0aGFuIG9uZSB3aW5kb3cuICBPdGhlcndp c2UsIHVzaW5nIHRoaXMgZmVhdHVyZSBpcyB1bmJlYXJhYmx5IHNsb3cuICovCiAJewogCSAgc3Ry dWN0IGJ1ZmZlciAqYnVmID0gWE1BUktFUiAodmFsKS0+YnVmZmVyOwotCi0JICBpZiAoc2V0X3Jl ZGlzcGxheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGJ1ZikKLQkgICAgICAg IGJzZXRfcmVkaXNwbGF5IChidWYpOwotICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAg ICAgICAgICAgIH0KKwkgIGlmIChzZXRfcmVkaXNwbGF5CisgICAgICAgIC8qIFRvIGF2b2lkIGNy YXNoaW5nIGR1ZSB0bzogIzxtYXJrZXIgaW4gbm8gYnVmZmVyPiAqLworICAgICAgICAmJiBidWYK KyAgICAgICAgJiYgTUFSS0VSUCAodmFsKQorICAgICAgICAmJiBCVUZGRVJfTElWRV9QIChidWYp KQorICAgICAgLyogYnNldF9yZWRpc3BsYXkgKGJ1Zik7ICovCisgICAgICAvKiBFdmVuIGlmIHdl IGRvbid0IHNldCB3aW5kb3dzX29yX2J1ZmZlcnNfY2hhbmdlZCwgZG8gc2V0IGByZWRpc3BsYXkn CisgICAgICBzbyB0aGF0IGlmIHdlIGxhdGVyIHNldCB3aW5kb3dzX29yX2J1ZmZlcnNfY2hhbmdl ZCwgdGhpcyBidWZmZXIgd2lsbAorICAgICAgbm90IGJlIG9taXR0ZWQuICAqLworICAgICAgYnVm LT50ZXh0LT5yZWRpc3BsYXkgPSB0cnVlOwogCSAgZWxzZQogCSAgICByZXR1cm4gdHJ1ZTsKIAl9 CisKICAgICB9CiAgIHJldHVybiBjaGFuZ2VkOworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiB9CiAKIC8qIE1hcmsgb3ZlcmxheSBhcnJvd3MgdG8gYmUgdXBkYXRlZCBvbiBuZXh0IHJl ZGlzcGxheS4gICovCkBAIC0xNDI4MSw2ICsxNjcyOCwyMSBAQCByZWRpc3BsYXlfaW50ZXJuYWwg KHZvaWQpCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAJICAgICAgdXBkYXRlX3dpbmRvd19m cmluZ2VzICh3LCBmYWxzZSk7CiAjZW5kaWYKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTk9URTogIEFuIGlkbGUtdGltZXIgZnVuY3Rp b24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2VyIGByZWRpc3BsYXlfd2luZG93Jy4KK2BvcHRp bWl6YXRpb24gMWAgKHdoaWNoIGluY2x1ZGVzIGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9u IHRoZSBmaXJzdCBzY3JlZW4KK2xpbmUpLCBhbmQgYG9wdGltaXphdGlvbiAzYCAod2hpY2ggaW5j bHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gc2NyZWVuCitsaW5lcyBzdWJzZXF1 ZW50IHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSksIGJ5cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycu ICovCisKKyAgICAgIG1jX3JlbW92ZV9ldmVyeXRoaW5nICh3KTsKKworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisKKwogCSAgICAgIGdvdG8gdXBkYXRlOwogCSAgICB9CiAJICBlbHNlCkBAIC0x NDMwMyw2ICsxNjc2NSwxNiBAQCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAJCSAgJiYgKHcg PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpKSAhPSBzdykKIAkJZ290byByZXRyeTsKIAorCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAg IGlmIChtY193aXRob3V0X3VwZGF0ZV9mcmFtZSAodykpCisgICAgICAgICBnb3RvIGVuZF9vZl9y ZWRpc3BsYXk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICAvKiBXZSB1 c2VkIHRvIGFsd2F5cyBnb3RvIGVuZF9vZl9yZWRpc3BsYXkgaGVyZSwgYnV0IHRoaXMKIAkJIGlz bid0IGVub3VnaCBpZiB3ZSBoYXZlIGEgYmxpbmtpbmcgY3Vyc29yLiAgKi8KIAkgICAgICBpZiAo dy0+Y3Vyc29yX29mZl9wID09IHctPmxhc3RfY3Vyc29yX29mZl9wKQpAQCAtMTQzNDQsNiArMTY4 MTYsMjEgQEAgcmVkaXNwbGF5X2ludGVybmFsICh2b2lkKQogCQkgICp3LT5kZXNpcmVkX21hdHJp eC0+bWV0aG9kID0gMDsKIAkJICBkZWJ1Z19tZXRob2RfYWRkICh3LCAib3B0aW1pemF0aW9uIDMi KTsKICNlbmRpZgorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VS U09SUyAqLworCisvKiBOT1RFOiAgQW4gaWRsZS10aW1lciBmdW5jdGlvbiBtYXkgbm90IG5lY2Vz c2FyaWx5IHRyaWdnZXIgYHJlZGlzcGxheV93aW5kb3cnLgorYG9wdGltaXphdGlvbiAxYCAod2hp Y2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gdGhlIGZpcnN0IHNjcmVl bgorbGluZSksIGFuZCBgb3B0aW1pemF0aW9uIDNgICh3aGljaCBpbmNsdWRlcyBsZWZ0L3JpZ2h0 IGN1cnNvciBtb3ZlbWVudCBvbiBzY3JlZW4KK2xpbmVzIHN1YnNlcXVlbnQgdG8gdGhlIGZpcnN0 IHNjcmVlbiBsaW5lKSwgYnlwYXNzIGByZWRpc3BsYXlfd2luZG93Jy4gKi8KKworICAgICAgbWNf cmVtb3ZlX2V2ZXJ5dGhpbmcgKHcpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJ CSAgZ290byB1cGRhdGU7CiAJCX0KIAkgICAgICBlbHNlCkBAIC0xNDQ3Nyw2ICsxNjk2NCwyMCBA QCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAJCSAgICB1bnJlcXVlc3Rfc2lnaW8gKCk7CiAJ CSAgU1RPUF9QT0xMSU5HOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQ TEUgQ1VSU09SUyAqLworCisgICAgLyogT24gRW1hY3MgZm9yIFdpbmRvd3MsIGNyb3NzaGFpcnMg d2lsbCBub3QgZHJhdyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIKKyAgICB3aXRob3V0 IHRoaXMgY29uZGl0aW9uIHdoZW4gdGhlIGlkbGUtdGltZXIgc3dpdGNoZXMgYXJlIHRvZ2dsZWQu ICBUaGlzIG1heSBoYXZlCisgICAgYmVlbiBkdWUgdG8gdGhlIHBhcmVudGhlc2VzIG92ZXJsYXlz IHRoYXQgd2VyZSByZW1vdmVkIGFuZCBkaWQgbm90IG5lZWQgdG8gYmUKKyAgICByZWRyYXduIHNp bmNlIG9wZW5pbmcgcGFyZW50aGVzZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIGFy ZSBub3QgaGlnaGxpZ2h0ZWQuICovCisgICAgaWYgKHctPm1jLmRyYXdfY3Jvc3NoYWlycykKKyAg ICAgIHctPm11c3RfYmVfdXBkYXRlZF9wID0gdHJ1ZTsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKKwogCQkgIHBlbmRpbmcgfD0gdXBkYXRlX2ZyYW1lIChmLCBmYWxzZSwgZmFsc2UpOwog CQkgIGYtPmN1cnNvcl90eXBlX2NoYW5nZWQgPSBmYWxzZTsKIAkJICBmLT51cGRhdGVkX3AgPSB0 cnVlOwpAQCAtMTc2ODksNiArMjAyMzgsMjIgQEAgcmVkaXNwbGF5X3dpbmRvdyAoTGlzcF9PYmpl Y3Qgd2luZG93LCBib29sIGp1c3RfdGhpc19vbmVfcCkKICAgZWxzZQogICAgIFRFTVBfU0VUX1BU X0JPVEggKENIQVJQT1MgKG9wb2ludCksIEJZVEVQT1MgKG9wb2ludCkpOwogCisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisvKiBOT1RFOiAgQW4g aWRsZS10aW1lciBmdW5jdGlvbiBtYXkgbm90IG5lY2Vzc2FyaWx5IHRyaWdnZXIgYHJlZGlzcGxh eV93aW5kb3cnLgorYG9wdGltaXphdGlvbiAxYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBj dXJzb3IgbW92ZW1lbnQgb24gdGhlIGZpcnN0IHNjcmVlbgorbGluZSksIGFuZCBgb3B0aW1pemF0 aW9uIDNgICh3aGljaCBpbmNsdWRlcyBsZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVudCBvbiBzY3Jl ZW4KK2xpbmVzIHN1YnNlcXVlbnQgdG8gdGhlIGZpcnN0IHNjcmVlbiBsaW5lKSwgYnlwYXNzIGBy ZWRpc3BsYXlfd2luZG93Jy4gKi8KKworICBtY19yZWNvcmRfd2luZG93X2JvdW5kcyAodyk7CisK KyAgbWNfcmVtb3ZlX2V2ZXJ5dGhpbmcgKHcpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiAgIHNldF9idWZmZXJfaW50ZXJuYWxfMSAob2xkKTsKICAgLyogQXZvaWQgYW4gYWJvcnQg aW4gVEVNUF9TRVRfUFRfQk9USCBpZiB0aGUgYnVmZmVyIGhhcyBiZWNvbWUKICAgICAgc2hvcnRl ci4gIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBsb2cgdHJ1bmNhdGlvbiBpbiAqTWVzc2FnZXMqLiAg Ki8KQEAgLTIxMDQxLDYgKzIzNjA2LDIxIEBAIGRpc3BsYXlfY291bnRfbGluZXNfdmlzdWFsbHkg KHN0cnVjdCBpdCAqaXQpCiBzdGF0aWMgdm9pZAogbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAo c3RydWN0IGl0ICppdCkKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJ UExFIENVUlNPUlMgKi8KKworICBib29sIGJhcmZfY3Jhc2ggPSAoaXQtPmdseXBoX3JvdyA9PSBO VUxMCisgICAgICAgICAgICAgICAgICAgICB8fCBpdC0+Z2x5cGhfcm93LT51c2VkW1RFWFRfQVJF QV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgPyBmYWxzZQorICAgICAgICAgICAgICAgICAg ICA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoKQorICAgcmV0dXJuOworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAgIHB0cmRpZmZfdCBsYXN0X2xpbmUgPSBpdC0+bG51bTsKICAgcHRy ZGlmZl90IHN0YXJ0X2Zyb20sIGJ5dGVwb3M7CiAgIHB0cmRpZmZfdCB0aGlzX2xpbmU7CkBAIC0y OTY5Miw5ICszMjI5MywyMSBAQCBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yIChzdHJ1Y3Qgd2luZG93 ICp3LCBib29sIG9uLAogICAgICAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7CiAgICAgfQog CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisg IExpc3BfT2JqZWN0IGNvbG9yX3ZlY3RvciA9IChGbWFrZV92ZWN0b3IgKG1ha2VfbnVtYmVyICgz KSwgUW5pbCkpOworICBBU0VUIChjb2xvcl92ZWN0b3IsIDAsIG1ha2VfZmxvYXQgKC0xLjApKTsK KyAgQVNFVCAoY29sb3JfdmVjdG9yLCAxLCBtYWtlX2Zsb2F0ICgtMS4wKSk7CisgIEFTRVQgKGNv bG9yX3ZlY3RvciwgMiwgbWFrZV9mbG9hdCAoLTEuMCkpOwogICBGUkFNRV9SSUYgKGYpLT5kcmF3 X3dpbmRvd19jdXJzb3IgKHcsIGdseXBoX3JvdywgeCwgeSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuZXdfY3Vyc29yX3R5cGUsIG5ld19jdXJzb3Jfd2lkdGgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24sIGFjdGl2ZV9jdXJzb3IpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uLCBhY3RpdmVfY3Vyc29yLCBjb2xv cl92ZWN0b3IsIFFuaWwpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiB9CiAKIApA QCAtMjk3MjYsMTAgKzMyMzM5LDMwIEBAIHVwZGF0ZV93aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2lu ZG93ICp3LCBib29sIG9uKQogICAgICAgaWYgKHJvdy0+cmV2ZXJzZWRfcCAmJiBocG9zID49IHJv dy0+dXNlZFtURVhUX0FSRUFdKQogCWhwb3MgPSByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDE7CiAK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAg ICAgIC8qIE1vdmluZyB0aGUgbW91c2UgdHJpZ2dlcnMgYHVwZGF0ZV93aW5kb3dfY3Vyc29yJyB3 aGljaCBjYWxscworICAgICAgYGRpc3BsYXlfYW5kX3NldF9jdXJzb3InIHRoYXQgd291bGQgb3Ro ZXJ3aXNlIHJlbW92ZSBhIHBvcnRpb24gb2YgdGhlCisgICAgICBob3Jpem9udGFsIHJ1bGVyIGZy b20gcG9pbnQgYXQgZW5kIG9mIHZpc3VhbCBsaW5lIHRvIHdpbmRvdyBlZGdlLiAqLworICAgICAg Ym9vbCBjcm9zc2hhaXJzX3AgPSAoIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiAhdy0+bWMuZHJhd19jcm9zc2hhaXJzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiAhTklMUCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFp cnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChG bnRoIChtYWtlX251bWJlciAoMSksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9udW1i ZXIgKDIpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKTsKKyAgICAgIGlmICghY3Jvc3NoYWlyc19w KQorICAgICAgICB7CiAgICAgICBibG9ja19pbnB1dCAoKTsKICAgICAgIGRpc3BsYXlfYW5kX3Nl dF9jdXJzb3IgKHcsIG9uLCBocG9zLCB2cG9zLAogCQkJICAgICAgdy0+cGh5c19jdXJzb3IueCwg dy0+cGh5c19jdXJzb3IueSk7CiAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICB9CisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICB9CiB9CiAKQEAgLTMyNDM2LDYgKzM1 MDY5LDI0IEBAIHhfaW50ZXJzZWN0X3JlY3RhbmdsZXMgKFhSZWN0YW5nbGUgKnIxLCBYUmVjdGFu Z2xlICpyMiwgWFJlY3RhbmdsZSAqcmVzdWx0KQogdm9pZAogc3ltc19vZl94ZGlzcCAodm9pZCkK IHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8K KworICBERUZTWU0gKFFtY19nbHlwaCwgIm1jLWdseXBoLWN1cnNvciIpOworICBERUZTWU0gKFFt Y19nbHlwaGxlc3MsICJtYy1nbHlwbGVzcy1jdXJzb3IiKTsKKyAgREVGU1lNIChRbWNfZ2x5cGhf dGFiLCAibWMtZ2x5cGgtdGFiIik7CisKKyAgZGVmc3ViciAoJlNtY19hY3RpdmF0ZV9jdXJzb3Jz KTsKKworICBkZWZzdWJyICgmU21jX2FjdGl2YXRlX2Nyb3NzaGFpcnMpOworCisgIGRlZnN1YnIg KCZTZGVidWdnaW5nKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBWd2l0aF9l Y2hvX2FyZWFfc2F2ZV92ZWN0b3IgPSBRbmlsOwogICBzdGF0aWNwcm8gKCZWd2l0aF9lY2hvX2Fy ZWFfc2F2ZV92ZWN0b3IpOwogCmRpZmYgLS1naXQgYS9zcmMveHRlcm0uYyBiL3NyYy94dGVybS5j CmluZGV4IGFmMjhkYWIuLmUwYjVhZjkgMTAwNjQ0Ci0tLSBhL3NyYy94dGVybS5jCisrKyBiL3Ny Yy94dGVybS5jCkBAIC0xMTUxLDEwICsxMTUxLDE0IEBAIHhfdXBkYXRlX3dpbmRvd19lbmQgKHN0 cnVjdCB3aW5kb3cgKncsIGJvb2wgY3Vyc29yX29uX3AsCiAgICAgewogICAgICAgYmxvY2tfaW5w dXQgKCk7CiAKLSAgICAgIGlmIChjdXJzb3Jfb25fcCkKLQlkaXNwbGF5X2FuZF9zZXRfY3Vyc29y ICh3LCB0cnVlLAotCQkJCXctPm91dHB1dF9jdXJzb3IuaHBvcywgdy0+b3V0cHV0X2N1cnNvci52 cG9zLAotCQkJCXctPm91dHB1dF9jdXJzb3IueCwgdy0+b3V0cHV0X2N1cnNvci55KTsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAgIG1j X3BvcnRhbCAodywgY3Vyc29yX29uX3ApOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwog CiAgICAgICBpZiAoZHJhd193aW5kb3dfZnJpbmdlcyAodywgdHJ1ZSkpCiAJewpAQCAtMTUzMCwx MCArMTUzNCwyMSBAQCBzdGF0aWMgdm9pZCB4X2NoZWNrX2ZvbnQgKHN0cnVjdCBmcmFtZSAqLCBz dHJ1Y3QgZm9udCAqKTsKIHN0YXRpYyB2b2lkCiB4X3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlw aF9zdHJpbmcgKnMpCiB7Ci0gIGlmIChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCisKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgc3Ry dWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRfd2luZG93KTsKKyAg aWYgKChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5iYWNr Z3JvdW5kID09IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNl LT5mb3JlZ3JvdW5kID09IEZSQU1FX0ZPUkVHUk9VTkRfUElYRUwgKHMtPmYpCiAgICAgICAmJiAh cy0+Y21wKQorICAgICAgfHwgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQpCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCisKICAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNv cl9nYzsKICAgZWxzZQogICAgIHsKQEAgLTkzMjgsNyArOTM0MywxOCBAQCB4X2RyYXdfYmFyX2N1 cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqcm93LCBpbnQgd2lkdGgs IGVudW0gdGV4dAogCSBpbnZpc2libGUuICBVc2UgdGhlIGdseXBoJ3MgZm9yZWdyb3VuZCBjb2xv ciBpbnN0ZWFkIGluIHRoaXMKIAkgY2FzZSwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZ2x5 cGgncyBjb2xvcnMgYXJlIGNob3NlbiBzbwogCSB0aGF0IHRoZSBnbHlwaCBpcyBsZWdpYmxlLiAg Ki8KLSAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGYtPm91dHB1dF9kYXRhLngtPmN1cnNv cl9waXhlbCkKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNP UlMgKi8KKworICAgICAgaWYgKGZhY2UtPmJhY2tncm91bmQgPT0gZi0+b3V0cHV0X2RhdGEueC0+ Y3Vyc29yX3BpeGVsCisgICAgICAgICAgJiYgIXctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2th eSkKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJeGdjdi5iYWNrZ3JvdW5kID0g eGdjdi5mb3JlZ3JvdW5kID0gZmFjZS0+Zm9yZWdyb3VuZDsKICAgICAgIGVsc2UKIAl4Z2N2LmJh Y2tncm91bmQgPSB4Z2N2LmZvcmVncm91bmQgPSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4 ZWw7CkBAIC05NDE2LDcgKzk0NDIsMTcgQEAgeF9jbGVhcl9mcmFtZV9hcmVhIChzdHJ1Y3QgZnJh bWUgKmYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogc3RhdGljIHZvaWQK IHhfZHJhd193aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93 ICpnbHlwaF9yb3csIGludCB4LAogCQkgICAgICBpbnQgeSwgZW51bSB0ZXh0X2N1cnNvcl9raW5k cyBjdXJzb3JfdHlwZSwKLQkJICAgICAgaW50IGN1cnNvcl93aWR0aCwgYm9vbCBvbl9wLCBib29s IGFjdGl2ZV9wKQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VS U09SUyAqLworCisgIGludCBjdXJzb3Jfd2lkdGgsIGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCwK KyAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVjdCBmbGF2b3IpCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKIHsKICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChX SU5ET1dfRlJBTUUgKHcpKTsKIApAQCAtOTQzNSwzMSArOTQ3MSwxMjcgQEAgeF9kcmF3X3dpbmRv d19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3Jvdywg aW50IHgsCiAJfQogICAgICAgZWxzZQogCXsKLQkgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCi0JICAg IHsKLQkgICAgY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoKLQkgICAgICB4X2RyYXdfaG9sbG93X2N1 cnNvciAodywgZ2x5cGhfcm93KTsKLQkgICAgICBicmVhazsKIAotCSAgICBjYXNlIEZJTExFRF9C T1hfQ1VSU09SOgotCSAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3Jvdywg RFJBV19DVVJTT1IpOwotCSAgICAgIGJyZWFrOwogCi0JICAgIGNhc2UgQkFSX0NVUlNPUjoKLQkg ICAgICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9D VVJTT1IpOwotCSAgICAgIGJyZWFrOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdp biBNVUxUSVBMRSBDVVJTT1JTICovCiAKLQkgICAgY2FzZSBIQkFSX0NVUlNPUjoKLQkgICAgICB4 X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEhCQVJfQ1VSU09S KTsKLQkgICAgICBicmVhazsKKyAgc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJB TUVfRElTUExBWV9JTkZPIChmKTsKKyAgQ29sb3JtYXAgY21hcCA9IEZSQU1FX1hfQ09MT1JNQVAg KGYpOworICB1bnNpZ25lZCBsb25nIG9yaWdpbmFsX2N1cnNvcl9waXhlbCA9IGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9waXhlbDsKKyAgZG91YmxlIHJlZCA9IFhGTE9BVF9EQVRBIChBUkVGIChj b2xvcl92ZWN0b3IsIDApKTsKKyAgZG91YmxlIGdyZWVuID0gWEZMT0FUX0RBVEEgKEFSRUYgKGNv bG9yX3ZlY3RvciwgMSkpOworICBkb3VibGUgYmx1ZSA9IFhGTE9BVF9EQVRBIChBUkVGIChjb2xv cl92ZWN0b3IsIDIpKTsKKyAgLyogU29tZSBvZiB0aGVzZSB2YWx1ZXMgY29tZSB0aHJvdWdoIGFz IDEuMDAzOTA2LCB3aGljaCBjYXVzZXMgYSBicmVha2FnZQorICBvZiB0aGUgY29sb3JzIGluIHRo YXQgbXVsdGlwbGljYXRpb24gYnkgdGhlIGJhc2Ugd2lsbCBleGNlZWQgdGhlIGJhc2UuICovCisg IGlmIChyZWQgPiAxLjApCisgICAgcmVkID0gMS4wOworICBpZiAoZ3JlZW4gPiAxLjApCisgICAg Z3JlZW4gPSAxLjA7CisgIGlmIChibHVlID4gMS4wKQorICAgIGJsdWUgPSAxLjA7CisgIGRvdWJs ZSBiYXNlID0gNjU1MzUuMDsKKyAgZG91YmxlIHRlcm1fcmVkID0gYmFzZSAqIHJlZDsKKyAgZG91 YmxlIHRlcm1fZ3JlZW4gPSBiYXNlICogZ3JlZW47CisgIGRvdWJsZSB0ZXJtX2JsdWUgPSBiYXNl ICogYmx1ZTsKKyAgaW50IGludF9yZWQgPSBYSU5UIChGdHJ1bmNhdGUgKG1ha2VfZmxvYXQgKHRl cm1fcmVkKSwgUW5pbCkpOworICBpbnQgaW50X2dyZWVuID0gWElOVCAoRnRydW5jYXRlIChtYWtl X2Zsb2F0ICh0ZXJtX2dyZWVuKSwgUW5pbCkpOzsKKyAgaW50IGludF9ibHVlID0gWElOVCAoRnRy dW5jYXRlIChtYWtlX2Zsb2F0ICh0ZXJtX2JsdWUpLCBRbmlsKSk7OworICBYQ29sb3IgY29sb3I7 CisgIGNvbG9yLnJlZCA9IGludF9yZWQ7CisgIGNvbG9yLmdyZWVuID0gaW50X2dyZWVuOworICBj b2xvci5ibHVlID0gaW50X2JsdWU7CisgIC8qIGB4X2FsbG9jX25lYXJlc3RfY29sb3InIHNldHMg dGhlIGBjb2xvci5waXhlbGAuICovCisgIHhfYWxsb2NfbmVhcmVzdF9jb2xvciAoZiwgY21hcCwg JmNvbG9yKTsKKworICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICB7CisgICAgY2FzZSBIT0xMT1df Qk9YX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdy ZWVuID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYt Pm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICAqLworICAgICAgICAgIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9waXhlbCA9IGNvbG9yLnBpeGVsOworICAgICAgICAgIHhfZHJhd19ob2xs b3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1 cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAgICAgICBl bHNlCisgICAgICAgICAgeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7CisgICAg ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGSUxMRURfQk9YX0NVUlNPUjoKKyAgICB7CisgICAg ICBpZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVuID49IDApCisgICAgICAgIC8qIFRl bXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJyBieSBib3Jyb3dp bmcgdGhlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9nYycgaW4geGZucy5jLiAg Ki8KKyAgICAgICAgeworICAgICAgICAgIGJsb2NrX2lucHV0ICgpOworICAgICAgICAgIHN0cnVj dCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHNlbGVjdGVkX3dpbmRvdyk7CisgICAg ICAgICAgWEdDVmFsdWVzIGdjX3ZhbHVlczsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2sg PSBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQgfCBHQ0ZpbGxTdHlsZSB8IEdDTGluZVdpZHRo OworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZnJhbWVfYmdfcGl4ZWwgPSBGUkFNRV9CQUNLR1JP VU5EX1BJWEVMIChmKTsKKyAgICAgICAgICBnY192YWx1ZXMubGluZV93aWR0aCA9IDA7ICAvKiBN ZWFucyAxIHVzaW5nIGZhc3QgYWxnb3JpdGhtLiAgKi8KKyAgICAgICAgICBnY192YWx1ZXMuZm9y ZWdyb3VuZCA9IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKGYpOworICAgICAgICAgIGdjX3ZhbHVl cy5iYWNrZ3JvdW5kID0geF9tYWtlX3RydWVjb2xvcl9waXhlbCAoZHB5aW5mbywgaW50X3JlZCwg aW50X2dyZWVuLCBpbnRfYmx1ZSk7CisgICAgICAgICAgZ2NfdmFsdWVzLmZpbGxfc3R5bGUgPSBG aWxsT3BhcXVlU3RpcHBsZWQ7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2dj CisgICAgICAgICAgICA9IFhDcmVhdGVHQyAoRlJBTUVfWF9ESVNQTEFZIChmKSwgRlJBTUVfWF9X SU5ET1cgKGYpLCBtYXNrLCAmZ2NfdmFsdWVzKTsKKyAgICAgICAgICAvKiBGb3JjZSBgeF9zZXRf Y3Vyc29yX2djJyB0byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYycuICAqLwor ICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19kZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICBkcmF3 X3BoeXNfY3Vyc29yX2dseXBoICh3LCBnbHlwaF9yb3csIERSQVdfQ1VSU09SKTsKKyAgICAgICAg ICB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9IGZhbHNlOworICAgICAgICAgIGdjX3ZhbHVlcy5s aW5lX3dpZHRoID0gMDsgIC8qIE1lYW5zIDEgdXNpbmcgZmFzdCBhbGdvcml0aG0uICAqLworICAg ICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gZnJhbWVfYmdfcGl4ZWw7CisgICAgICAgICAg Z2NfdmFsdWVzLmJhY2tncm91bmQgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgICAg Z2NfdmFsdWVzLmZpbGxfc3R5bGUgPSBGaWxsT3BhcXVlU3RpcHBsZWQ7CisgICAgICAgICAgZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djCisgICAgICAgICAgICA9IFhDcmVhdGVHQyAoRlJBTUVf WF9ESVNQTEFZIChmKSwgRlJBTUVfWF9XSU5ET1cgKGYpLCBtYXNrLCAmZ2NfdmFsdWVzKTsKKyAg ICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg ICAgICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3LCBnbHlwaF9yb3csIERSQVdfQ1VSU09SKTsK KyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEJBUl9DVVJTT1I6CisgICAgeworICAgICAg aWYgKHJlZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICB7CisgICAg ICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4 ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBjb2xv ci5waXhlbDsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSB0cnVl OworICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0 aCwgQkFSX0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5 ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gb3Jp Z2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB4 X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1Ip OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSEJBUl9DVVJTT1I6CisgICAgeworICAg ICAgaWYgKHJlZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICB7Cisg ICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3Jf cGl4ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBj b2xvci5waXhlbDsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSB0 cnVlOworICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93 aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVf b2theSA9IGZhbHNlOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9 IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg ICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBIQkFSX0NV UlNPUik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOT19DVVJTT1I6CisgICAgICB3 LT5waHlzX2N1cnNvcl93aWR0aCA9IDA7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg ICAgZW1hY3NfYWJvcnQgKCk7CisgIH0KKy8qIGVuZCBNVUxUSVBMRSBDVVJTT1JTICovCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KIAotCSAgICBjYXNlIE5PX0NVUlNPUjoKLQkgICAgICB3LT5w aHlzX2N1cnNvcl93aWR0aCA9IDA7Ci0JICAgICAgYnJlYWs7CiAKLQkgICAgZGVmYXVsdDoKLQkg ICAgICBlbWFjc19hYm9ydCAoKTsKLQkgICAgfQogCX0KIAogI2lmZGVmIEhBVkVfWF9JMThOCg== --Multipart_Tue_Jul_17_12:09:17_2018-1 Content-Type: application/el; type=lawlist-elisp Content-Disposition: attachment; filename="crosshairs.el" Content-Transfer-Encoding: base64 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cjs7OyBCRUdJTiBtb2RpZmljYXRpb24gb2YgdGhlIE11 bHRpcGxlIEN1cnNvcnMgbGlicmFyeSB3cml0dGVuIGJ5ICBNYWduYXIgU3ZlZW4uCgo7OzsgKHJl cXVpcmUgJ3BhY2thZ2UpCjs7OyAoYWRkLXRvLWxpc3QgJ3BhY2thZ2UtYXJjaGl2ZXMgJygibWVs cGEiIC4gImh0dHA6Ly9tZWxwYS5taWxrYm94Lm5ldC9wYWNrYWdlcy8iKSB0KQo7OzsgTS14IHBh Y2thZ2UtaW5zdGFsbCBtdWx0aXBsZS1jdXJzb3JzCjs7OyBUbyB1c2UgbXVsdGlwbGUtY3Vyc29y cyBhZnRlciByZXN0YXJ0aW5nIEVtYWNzLCBtYWtlIHN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGxp bmUKOzs7IGFwcGVhcnMgc29tZXdoZXJlIGluIHRoZSAuZW1hY3MvaW5pdC5lbDogIChwYWNrYWdl LWluaXRpYWxpemUpCgood2hlbiAocmVxdWlyZSAnbXVsdGlwbGUtY3Vyc29ycy1jb3JlIG5pbCAn bm9lcnJvcikKCiAgKGRlZnZhciBtYy0tbWF4LWN1cnNvcnMtb3JpZ2luYWwpCiAgKGRlZnZhciBt Yy9tYXgtY3Vyc29ycykKICAoZGVmdmFyIG1jLS1tYXgtY3Vyc29ycy1vcmlnaW5hbCkKICAoZGVm dmFyIG1jL21heC1jdXJzb3JzKQogIChkZWZ2YXIgbWMvYWx3YXlzLXJ1bi1mb3ItYWxsKQogIChk ZWNsYXJlLWZ1bmN0aW9uIG1jL21ha2UtY3Vyc29yLW92ZXJsYXktYXQtcG9pbnQgIm11bHRpcGxl LWN1cnNvcnMtY29yZSIpCiAgKGRlY2xhcmUtZnVuY3Rpb24gbXVsdGlwbGUtY3Vyc29ycy1tb2Rl ICJtdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQoKICA7OyBDb3BpZWQgZnJvbSB0aGUgY2wtbGliIGxp YnJhcnkgYW5kIHJlbmFtZWQgdG8gYXZvaWQgbG9hZGluZyBleHRyYSBzdHVmZi4KICAoZGVmdW4g bWMtb2RkcCAoaW50ZWdlcikKICAgICJSZXR1cm4gdCBpZiBJTlRFR0VSIGlzIG9kZC4iCiAgICAo ZXEgKGxvZ2FuZCBpbnRlZ2VyIDEpIDEpKQoKICA7OyBDb3BpZWQgZnJvbSB0aGUgY2wtbGliIGxp YnJhcnkgYW5kIHJlbmFtZWQgdG8gYXZvaWQgbG9hZGluZyBleHRyYSBzdHVmZi4KICAoZGVmdW4g bWMtZXZlbnAgKGludGVnZXIpCiAgICAiUmV0dXJuIHQgaWYgSU5URUdFUiBpcyBldmVuLiIKICAg IChlcSAobG9nYW5kIGludGVnZXIgMSkgMCkpCgogIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgW1Mt bW91c2UtMV0gJ21jL2FkZC1jdXJzb3Itb24tY2xpY2spCiAgKGRlZmluZS1rZXkgZ2xvYmFsLW1h cCAoa2JkICI8Qy1zLTI2ODYzMjA3MT4iKSAnbWMvbWFyay1hbGwtbGlrZS10aGlzKQogIChkZWZp bmUta2V5IGdsb2JhbC1tYXAgKGtiZCAiQy1zLWciKSAnbWMvbWFyay1hbGwtbGlrZS10aGlzKQog IChkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAiUy1zLWQiKSAnbWMvbWFyay1wcmV2aW91cy1s aWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIFs/XE0tZF0g J21jL21hcmstbmV4dC1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKICAoZGVmaW5lLWtleSBnbG9i YWwtbWFwIFs/XE0tRF0gJ21jL21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQp CiAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCBbP1xzLWRdICdtYy9tYXJrLW5leHQtbGlrZS10aGlz LWN5Y2xlLWZvcndhcmQpCiAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCBbP1xzLURdICdtYy9tYXJr LXByZXZpb3VzLWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQogIChkZWZpbmUta2V5IGdsb2JhbC1t YXAgKGtiZCAiQy1sIikgJ21jL2VkaXQtZW5kcy1vZi1saW5lcykKICAoZGVmaW5lLWtleSBnbG9i YWwtbWFwIChrYmQgIkMtUy1sIikgJ21jL2VkaXQtYmVnaW5uaW5ncy1vZi1saW5lcykKCiAgKGFk ZC1ob29rICdtdWx0aXBsZS1jdXJzb3JzLW1vZGUtZGlzYWJsZWQtaG9vawogICAgICAgICAgICAo bGFtYmRhICgpIChraWxsLWxvY2FsLXZhcmlhYmxlICdtYy1nbHlwaC1saXN0KSkpCgogIChkZWZ2 YXIgbWMvdXNlLWJ1aWx0LWluLWN1cnNvcnMgdAogICJXaGV0aGVyIHRvIHVzZSB0aGUgYnVpbHQt aW4gZmFrZSBjdXJzb3JzLiIpCgogIChkZWZ1biBtYy9jcmVhdGUtZmFrZS1jdXJzb3ItYXQtcG9p bnQgKCZvcHRpb25hbCBpZCkKICAgICJBZGQgYSBmYWtlIGN1cnNvciBhbmQgcG9zc2libHkgYSBm YWtlIGFjdGl2ZSByZWdpb24gb3ZlcmxheSBiYXNlZCBvbiBwb2ludCBhbmQgbWFyay4KICBTYXZl cyB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgb3ZlcmxheSB0byBiZSByZXN0b3JlZCBsYXRlci4i CiAgICAodW5sZXNzIG1jLS1tYXgtY3Vyc29ycy1vcmlnaW5hbAogICAgICAoc2V0cSBtYy0tbWF4 LWN1cnNvcnMtb3JpZ2luYWwgbWMvbWF4LWN1cnNvcnMpKQogICAgKHdoZW4gbWMvbWF4LWN1cnNv cnMKICAgICAgKHVubGVzcyAoPCAobWMvbnVtLWN1cnNvcnMpIG1jL21heC1jdXJzb3JzKQogICAg ICAgIChpZiAoeWVzLW9yLW5vLXAgKGZvcm1hdCAiJWQgYWN0aXZlIGN1cnNvcnMuIENvbnRpbnVl PyAiIChtYy9udW0tY3Vyc29ycykpKQogICAgICAgICAgICAoc2V0cSBtYy9tYXgtY3Vyc29ycyAo cmVhZC1udW1iZXIgIkVudGVyIGEgbmV3LCB0ZW1wb3JhcnkgbWF4aW11bTogIikpCiAgICAgICAg ICAobWMvcmVtb3ZlLWZha2UtY3Vyc29ycykKICAgICAgICAgIChlcnJvciAiQWJvcnRlZDogdG9v IG1hbnkgY3Vyc29ycyIpKSkpCiAgICAobGV0ICgob3ZlcmxheQogICAgICAgICAgICAoaWYgbWMv dXNlLWJ1aWx0LWluLWN1cnNvcnMKICAgICAgICAgICAgICAobWFrZS1vdmVybGF5IChwb2ludCkg KHBvaW50KSkKICAgICAgICAgICAgICAobWMvbWFrZS1jdXJzb3Itb3ZlcmxheS1hdC1wb2ludCkp KSkKICAgICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ21jLWlkIChvciBpZCAobWMvY3JlYXRlLWN1 cnNvci1pZCkpKQogICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAndHlwZSAnZmFrZS1jdXJzb3Ip CiAgICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICdwcmlvcml0eSAxMDApCiAgICAgIChtYy9zdG9y ZS1jdXJyZW50LXN0YXRlLWluLW92ZXJsYXkgb3ZlcmxheSkKICAgICAgKHdoZW4gKHVzZS1yZWdp b24tcCkKICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAncmVnaW9uLW92ZXJsYXkKICAgICAg ICAgICAgICAgICAgICAgKG1jL21ha2UtcmVnaW9uLW92ZXJsYXktYmV0d2Vlbi1wb2ludC1hbmQt bWFyaykpKQogICAgICBvdmVybGF5KSkKCiAgKGRlZnVuIG1jL2V4ZWN1dGUtdGhpcy1jb21tYW5k LWZvci1hbGwtY3Vyc29ycy0xICgpCiAgICAiVXNlZCB3aXRoIHBvc3QtY29tbWFuZC1ob29rIHRv IGV4ZWN1dGUgc3VwcG9ydGVkIGNvbW1hbmRzIGZvciBhbGwgY3Vyc29ycy4KICAtICBJdCB1c2Vz IHR3byBsaXN0cyBvZiBjb21tYW5kcyB0byBrbm93IHdoYXQgdG8gZG86IHRoZSBydW4tb25jZQog IGxpc3QgYW5kIHRoZSBydW4tZm9yLWFsbCBsaXN0LiBJZiBhIGNvbW1hbmQgaXMgaW4gbmVpdGhl ciBvZiB0aGVzZSBsaXN0cywKICBpdCB3aWxsIHByb21wdCBmb3IgdGhlIHByb3BlciBhY3Rpb24g YW5kIHRoZW4gc2F2ZSB0aGF0IHByZWZlcmVuY2UuCiAgLSAgU29tZSBjb21tYW5kcyBhcmUgc28g dW5zdXBwb3J0ZWQgdGhhdCB0aGV5IGFyZSBldmVuIHByZXZlbnRlZCBmb3IKICB0aGUgb3JpZ2lu YWwgY3Vyc29yLCB0byBpbmZvcm0gYWJvdXQgdGhlIGxhY2sgb2Ygc3VwcG9ydC4iCiAgICAodW5s ZXNzIG1jLS1leGVjdXRpbmctY29tbWFuZC1mb3ItZmFrZS1jdXJzb3IKICAgICAgKGlmIChlcSAx IChtYy9udW0tY3Vyc29ycykpIDs7IG5vIGZha2UgY3Vyc29ycz8gZGlzYWJsZSBtYy1tb2RlCiAg ICAgICAgICAobXVsdGlwbGUtY3Vyc29ycy1tb2RlIDApCiAgICAgICAgKHdoZW4gdGhpcy1vcmln aW5hbC1jb21tYW5kCiAgICAgICAgICAobGV0ICgob3JpZ2luYWwtY29tbWFuZCAob3IgbWMtLXRo aXMtY29tbWFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21tYW5k LXJlbWFwcGluZyB0aGlzLW9yaWdpbmFsLWNvbW1hbmQpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy1vcmlnaW5hbC1jb21tYW5kKSkpCiAgICAgICAgICAgIDs7IHNr aXAga2V5Ym9hcmQgbWFjcm9zLCBzaW5jZSB0aGV5IHdpbGwgZ2VuZXJhdGUgYWN0dWFsIGNvbW1h bmRzIHRoYXQgYXJlCiAgICAgICAgICAgIDs7IGFsc28gcnVuIGluIHRoZSBjb21tYW5kIGxvb3Ag LSB3ZSdsbCBoYW5kbGUgdGhvc2UgbGF0ZXIgaW5zdGVhZC4KICAgICAgICAgICAgKHdoZW4gKGZ1 bmN0aW9ucCBvcmlnaW5hbC1jb21tYW5kKQogICAgICAgICAgICAgIDs7IGlmIGl0J3MgYSBsYW1i ZGEsIHdlIGNhbid0IGtub3cgaWYgaXQncyBzdXBwb3J0ZWQgb3Igbm90CiAgICAgICAgICAgICAg OzsgLSBzbyBnbyBhaGVhZCBhbmQgYXNzdW1lIGl0J3Mgb2ssIGJlY2F1c2Ugd2UncmUganVzdCBv cHRpbWlzdGljIGxpa2UgdGhhdAogICAgICAgICAgICAgIChpZiAob3IgKG5vdCAoc3ltYm9scCBv cmlnaW5hbC1jb21tYW5kKSkKICAgICAgICAgICAgICAgICAgICAgIDs7IGxhbWJkYSByZWdpc3Rl cmVkIGJ5IHNtYXJ0cmVwCiAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXByZWZpeC1wICIo IiAoc3ltYm9sLW5hbWUgb3JpZ2luYWwtY29tbWFuZCkpKQogICAgICAgICAgICAgICAgICAobWMv ZXhlY3V0ZS1jb21tYW5kLWZvci1hbGwtZmFrZS1jdXJzb3JzIG9yaWdpbmFsLWNvbW1hbmQpCiAg ICAgICAgICAgICAgICA7OyBzbWFydHJlcCBgaW50ZXJuJ3MgY29tbWFuZHMgaW50byBvd24gb2Jh cnJheSB0byBoZWxwCiAgICAgICAgICAgICAgICA7OyBgZGVzY3JpYmUtYmluZGluZ3MnLiAgU28s IGxldCdzIHJlLWBpbnRlcm4nIGhlcmUgdG8KICAgICAgICAgICAgICAgIDs7IG1ha2UgdGhlIGNv bW1hbmQgY29tcGFyYWJsZSBieSBgZXEnLgogICAgICAgICAgICAgICAgKHNldHEgb3JpZ2luYWwt Y29tbWFuZCAoaW50ZXJuIChzeW1ib2wtbmFtZSBvcmlnaW5hbC1jb21tYW5kKSkpCiAgICAgICAg ICAgICAgICA7OyBvdGhlcndpc2UgaXQncyBhIHN5bWJvbCwgYW5kIHdlIGNhbiBiZSBtb3JlIHRo b3JvdWdoCiAgICAgICAgICAgICAgICAoaWYgKGdldCBvcmlnaW5hbC1jb21tYW5kICdtYy0tdW5z dXBwb3J0ZWQpCiAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIiVTIGlzIG5vdCBzdXBwb3J0 ZWQgd2l0aCBtdWx0aXBsZSBjdXJzb3JzJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3JpZ2luYWwtY29tbWFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQgb3JpZ2lu YWwtY29tbWFuZCAnbWMtLXVuc3VwcG9ydGVkKSkKICAgICAgICAgICAgICAgICAgKHdoZW4gKGFu ZCBvcmlnaW5hbC1jb21tYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAobWVt cSBvcmlnaW5hbC1jb21tYW5kIG1jLS1kZWZhdWx0LWNtZHMtdG8tcnVuLW9uY2UpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChub3QgKG1lbXEgb3JpZ2luYWwtY29tbWFuZCBtYy9jbWRz LXRvLXJ1bi1vbmNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgbWMvYWx3YXlz LXJ1bi1mb3ItYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1xIG9yaWdp bmFsLWNvbW1hbmQgbWMtLWRlZmF1bHQtY21kcy10by1ydW4tZm9yLWFsbCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG1lbXEgb3JpZ2luYWwtY29tbWFuZCBtYy9jbWRzLXRvLXJ1 bi1mb3ItYWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWMvcHJvbXB0LWZv ci1pbmNsdXNpb24taW4td2hpdGVsaXN0IG9yaWdpbmFsLWNvbW1hbmQpKSkKICAgICAgICAgICAg ICAgICAgICAobWMvZXhlY3V0ZS1jb21tYW5kLWZvci1hbGwtZmFrZS1jdXJzb3JzIG9yaWdpbmFs LWNvbW1hbmQpKSkpKSkKICAgICAgICAgICAgICAod2hlbiBtYy91c2UtYnVpbHQtaW4tY3Vyc29y cwogICAgICAgICAgICAgICAgKGxldCogKCh3aW4gKHNlbGVjdGVkLXdpbmRvdykpCiAgICAgICAg ICAgICAgICAgICAgICAgKHdpbmRvdy1zdGFydCAod2luZG93LXN0YXJ0IHdpbikpCiAgICAgICAg ICAgICAgICAgICAgICAgKHdpbmRvdy1lbmQgKHdpbmRvdy1lbmQgd2luKSkKICAgICAgICAgICAg ICAgICAgICAgICAob3ZlcmxheXMgKG1jL2FsbC1mYWtlLWN1cnNvcnMpKQogICAgICAgICAgICAg ICAgICAgICAgIChsc3QKICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobGV0KiAoKHBvcyAob3ZlcmxheS1zdGFydCB4KSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGN1cnJlbnQtY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGlmIChhbmQgKD49IHBvcyB3aW5kb3ctc3RhcnQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDw9IHBvcyB3aW5kb3ctZW5kKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIHBvcykKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtY29sdW1uKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo bWMtb2RkcCBjdXJyZW50LWNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobGlzdCBwb3MgImJhciIgIiNGRjAwMDAiKSkgOzsgcmVkIG9yIFsxLjAgMC4wIDAuMF0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChtYy1ldmVucCBjdXJyZW50LWNvbHVtbikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCBwb3MgImJhciIgInllbGxv dyIpKSkpKSA7OyAjRkZGRjAwIG9yIFsxLjAgMS4wIDAuMF0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3ZlcmxheXMpKSkKICAgICAgICAgICAgICAgICAgKHNldHEgbWMtZ2x5cGgtbGlzdCBs c3QpKSkpKSkpCgogIChkZWZ1biBtYy9tYXJrLW5leHQtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQg KCkKICAiTWFya3MgbmV4dCBvY2N1cmVuY2Ugb2Ygd29yZCBsaWtlIHRoaXMgYW5kIGFkdmFuY2Vz IGN1cnNvciB0byB0aGlzIG9jY3VycmVuY2UiCiAgKGludGVyYWN0aXZlKQogICAgKG1jL21hcmst bmV4dC1saWtlLXRoaXMgMSkpCgogIChkZWZ1biBtYy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcy1j eWNsZS1mb3J3YXJkICgpCiAgIk1hcmtzIG5leHQgb2NjdXJyZW5jZSBvZiB3b3JkIGxpa2UgdGhp cyBhbmQgYWR2YW5jZXMgY3Vyc29yIHRvIHRoaXMgb2NjdXJyZW5jZSIKICAoaW50ZXJhY3RpdmUp CiAgICAobWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMgMSkpCgogIChhZGQtdG8tbGlzdCAnbWMt LWRlZmF1bHQtY21kcy10by1ydW4tb25jZSAnbWMvbWFyay1uZXh0LWxpa2UtdGhpcy1jeWNsZS1m b3J3YXJkKQoKICAoYWRkLXRvLWxpc3QgJ21jLS1kZWZhdWx0LWNtZHMtdG8tcnVuLW9uY2UgJ21j L21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpICkKCjs7OyBFTkQgbW9kaWZp Y2F0aW9uIG9mIHRoZSBNdWx0aXBsZSBDdXJzb3JzIGxpYnJhcnkgd3JpdHRlbiBieSAgTWFnbmFy IFN2ZWVuLgoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cjs7OyBCRUdJTiBjcm9zc2hhaXJzLmVs CgooZGVmdW4gbWMtdGVzdCAoKQoiRHJhdyBmYWtlIGN1cnNvcnMgYXQgYWxsIFBPUyBkZWZpbmVk IGluIHRoZSBgbWMtZ2x5cGgtbGlzdCcuICBNdWx0aXBsZSBmYWtlIGN1cnNvcnMKYXJlIHN1cHBv cnRlZCBieSBHVUkgdmVyc2lvbnMgb2YgRW1hY3MgYnVpbHQgZm9yIFgsIFdpbmRvd3MgYW5kIE9T WC4KUG9wdWxhciBmb3JtcyBvZiBzcGVjaWZ5aW5nIGNvbG9ycyBzdWNoIGFzIFwicmVkXCIgYW5k IFwiI0ZGMDAwMFwiIGFyZSBub3cKc3VwcG9ydGVkLCBhcyB3ZWxsIGFzIExTTCBjb2xvciB2ZWN0 b3JzIHN1Y2ggYXMgWzEuMCAwLjAgMC4wXS4gIEZvciB0aG9zZSB1c2Vycwp3aG8gY2hvb3NlIHRo ZSBmb3JtZXIgZmFtaWxpYXIgbWV0aG9kcyBvZiBzcGVjaWZ5aW5nIGNvbG9ycyB3aXRoIHN0cmlu Z3MsCmBtY19jb2xvcl92ZWN0b3JfY2FsY3VsYXRlJyB3aWxsIGNvbnZlcnQgdGhvc2Ugc3RyaW5n cyB0byBMU0wgY29sb3IgdmVjdG9ycy4KVGhlIGNvbG9yIHZlY3RvcnMgYXJlIGNvbW1vbmx5IHJl ZmVycmVkIHRvIGFzIExTTCAoVGhlIExpbmRlbiBTY3JpcHRpbmcgTGFuZ3VhZ2UpLgpgbnN0ZXJt Lm0nIHVzZXMgYE5TQ29sb3InLCB3aGljaCB3b3JrcyB3ZWxsIHdpdGggTFNMLiAgYHczMnRlcm0u YycgdXNlcwpgUEFMRVRURVJHQicgb3IgYFJHQicsIGFuZCB0aGUgY29udmVyc2lvbiBmcm9tIExT TCBpcyBkb25lIGludGVybmFsbHkgYnkKbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBM U0wgY29sb3IgdmVjdG9yIGJ5IDI1NS4gIGB4dGVybS5jJyB1c2VzCmB4X21ha2VfdHJ1ZWNvbG9y X3BpeGVsJywgd2hpY2ggdXNlcyAxNi1iaXQgUkdCIC0tIHRoZSBjb252ZXJzaW9uIGZyb20gTFNM CmhhcHBlbnMgaW50ZXJuYWxseSBieSBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIExT TCBjb2xvciB2ZWN0b3IgYnkgNjU1MzUuIgooaW50ZXJhY3RpdmUpCiAgKGxldCAoKGJ1ZmZlciAo Z2V0LWJ1ZmZlci1jcmVhdGUgIipNQy1URVNUKiIpKSkKICAgICh3aXRoLWN1cnJlbnQtYnVmZmVy IGJ1ZmZlcgogICAgICAoZXJhc2UtYnVmZmVyKQogICAgICAoaW5zZXJ0ICJUaGlzIGlzIGEgdGVz dCEiKQogICAgICAoc2V0cSBtYy1nbHlwaC1saXN0ICcoKDEgImhiYXIiICJtYWdlbnRhIikKICAg ICAgICAgICAgICAgICAgICAgICgyICJiYXIiICJwdXJwbGUiKQogICAgICAgICAgICAgICAgICAg ICAgKDMgImJveCIgIiMwMEZGMDAiKQogICAgICAgICAgICAgICAgICAgICAgKDQgImhvbGxvdyIg IiMwMDAwRkYiKQogICAgICAgICAgICAgICAgICAgICAgKDUgKCJoYmFyIiAzKSBbMS4wIDAuMCAx LjBdKQogICAgICAgICAgICAgICAgICAgICAgKDYgKCJiYXIiIDMpIFswLjAgMS4wIDEuMF0pKSkp CiAgICAoc2VsZWN0LXdpbmRvdyAoZGlzcGxheS1idWZmZXIgYnVmZmVyKSkKICAgIDs7OyBUaGUg dHJpZ2dlciBpbiBga2V5Ym9hcmQuY2AgaXMgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGV4YW1wbGUs IHNvIHdlCiAgICA7OzsgZm9yY2UgdGhlIG11bHRpcGxlIGN1cnNvcnMgdG8gYmUgZHJhd24uCiAg ICAobWMtYWN0aXZhdGUtY3Vyc29ycyAoc2VsZWN0ZWQtd2luZG93KSkpKQoKKGRlZnVuICstdGlt ZXItZm4gKCkKIlNpbmNlIHRoaXMgZmlyZXMgZ2xvYmFsbHksIHdlIG11c3QgY29udHJvbCB3aGlj aCBidWZmZXJzIGNyb3NzaGFpcnMgYXBwZWFyIGluLiIKICAod2hlbiArLW1vZGUKICAgIChzZXRx IG92ZXJsYXktYXJyb3ctcG9zaXRpb24gbmlsKQogICAgOzs7IEF2b2lkIHBvdGVudGlhbCBjb25m bGljdHMgd2l0aCB1c2VyLWRlZmluZWQgYGZhY2UtcmVtYXBwaW5nLWFsaXN0Jy4KICAgICh3aGVu IChudWxsIChkZWZhdWx0LXZhbHVlICdmYWNlLXJlbWFwcGluZy1hbGlzdCkpCiAgICAgIChzZXRx LWxvY2FsIGZhY2UtcmVtYXBwaW5nLWFsaXN0ICcoKCstb3ZlcmxheS1hcnJvdy1mYWNlICstbGVm dC1mcmluZ2UtY3Vyc29yLWFsdC10d28tZmFjZSkpKSkKICAgICh1bmxlc3MgKG1lbXEgbGFzdC1j b21tYW5kICcobXdoZWVsLXNjcm9sbCkpCiAgICAgICgrLXBhcmVucy1mbikpCiAgICAod2hlbiB2 ci10aW1lcgogICAgICAoc2V0cSB0aW1lci1pZGxlLWxpc3QgKGRlbHEgdnItdGltZXIgdGltZXIt aWRsZS1saXN0KSkKICAgICAgKHNldHEgdnItdGltZXIgbmlsKSkKICAgIChtYy1hY3RpdmF0ZS1j cm9zc2hhaXJzIChzZWxlY3RlZC13aW5kb3cpKSkpCgooZGVmdmFyICstcGNoLXNpdC10aGlzLW9u ZS1vdXQgbmlsCiJObyBuZWVkIHRvIHJ1biBgKy1kcmF3LWhvcml6b250YWwtcnVsZXInIGZyb20g dGhlIGBwb3N0LWNvbW1hbmQtaG9vaycgaWYgdGhlCmB3aW5kb3ctY29uZmlndXJhdGlvbi1jaGFu Z2UtaG9vaycgcmFuIHByaW9yIHRoZXJldG8uIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2Fs ICcrLXBjaC1zaXQtdGhpcy1vbmUtb3V0KQoKKGRlZnVuICstcmVkcmF3LWZvcnRod2l0aCAoKQoi Rm9yY2UgYm90aCBydWxlcyB0byBiZSByZWRyYXduLiIKICAoKy1kcmF3LWhvcml6b250YWwtcnVs ZXIgJ2ZvcmNlKQogIChzZXRxICstcGNoLXNpdC10aGlzLW9uZS1vdXQgdCkpCgooZGVmdW4gKy1k cmF3LWhvcml6b250YWwtcnVsZXIgKCZvcHRpb25hbCBmb3JjZSkKICAoaWYgKGFuZCArLW1vZGUK ICAgICAgICAgICArLXBjaC1zaXQtdGhpcy1vbmUtb3V0KQogICAgKHNldHEgKy1wY2gtc2l0LXRo aXMtb25lLW91dCBuaWwpCiAgICAod2hlbiArLW1vZGUKICAgICAgOzs7IEF2b2lkIHBvdGVudGlh bCBjb25mbGljdHMgd2l0aCB1c2VyLWRlZmluZWQgYGZhY2UtcmVtYXBwaW5nLWFsaXN0Jy4KICAg ICAgKHdoZW4gKG51bGwgKGRlZmF1bHQtdmFsdWUgJ2ZhY2UtcmVtYXBwaW5nLWFsaXN0KSkKICAg ICAgICAoc2V0cS1sb2NhbCBmYWNlLXJlbWFwcGluZy1hbGlzdCAnKCgrLW92ZXJsYXktYXJyb3ct ZmFjZSArLWxlZnQtZnJpbmdlLWN1cnNvci1hbHQtb25lLWZhY2UpKSkpCiAgICAgIDs7OyBUaGVy ZSBpcyBhIHN1YnN0YW50aWFsIHNsb3ctZG93biB3aGVuIHNldHRpbmcgdGhlIG92ZXJsYXkgYXJy b3cgZXZlcnkKICAgICAgOzs7IGNvbW1hbmQgbG9vcCB3aGVuIHRoZSBidWZmZXIgaXMgZGlzcGxh eWVkIGluIG1vcmUgdGhhbiBvbmUgd2luZG93LAogICAgICA7OzsgZXNwZWNpYWxseSB3aGVuIGlu IGRpZmZlcmVudCBmcmFtZXMuICBUaGlzIGNhbiBiZSB2ZXJpZmllZCBieSByZWR1Y2luZwogICAg ICA7OzsgdGhlIG51bWJlciBvZiB3aW5kb3dzIHRvIGp1c3QgdGhlIG9uZSBkaXNwbGF5aW5nIHRo ZSBvdmVybGF5IGFycm93LAogICAgICA7OzsgYW5kIHRoZSBzcGVlZCByZXR1cm5zIHRvIGFuIGFj Y2VwdGFibGUgbGV2ZWwuIGBic2V0X3JlZGlzcGxheScgY2FsbHMKICAgICAgOzs7IGByZWRpc3Bs YXlfb3RoZXJfd2luZG93cycgaW4gdGhhdCBzaXR1YXRpb24sIGFuZCB0aGF0IHNsb3dzIHVzIGRv d24uCiAgICAgIChpZiAobm90IChhbmQgKGVvYnApIChib2xwKSkpCiAgICAgICAgKHNldHEgb3Zl cmxheS1hcnJvdy1wb3NpdGlvbiAoY29weS1tYXJrZXIgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9u KSkpCiAgICAgICAgKHNldHEgb3ZlcmxheS1hcnJvdy1wb3NpdGlvbiBuaWwpKQogICAgICAod2hl biB2ci10aW1lcgogICAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVscSB2ci10aW1lciB0 aW1lci1pZGxlLWxpc3QpKQogICAgICAgIChzZXRxIHZyLXRpbWVyIG5pbCkpCiAgICAgICh1bmxl c3MgKG1lbXEgdGhpcy1jb21tYW5kICcobXdoZWVsLXNjcm9sbCkpCiAgICAgICAgKCstZGVsZXRl LXBhcmVucy1vdmVybGF5cykpCiAgICAgIChpZiBmb3JjZQogICAgICAgIChwcm9nbgogICAgICAg ICAgKCstcGFyZW5zLWZuKQogICAgICAgICAgKG1jLWFjdGl2YXRlLWNyb3NzaGFpcnMgKHNlbGVj dGVkLXdpbmRvdykpKQogICAgICAgIChzZXRxIHZyLXRpbWVyIChydW4td2l0aC1pZGxlLXRpbWVy IDAuNSBuaWwgIycrLXRpbWVyLWZuKSkpKSkpCgooZGVmaW5lLW1pbm9yLW1vZGUgKy1tb2RlCiJN aW5vciBtb2RlIGZvciBkaXNwbGF5aW5nIGEgaG9yaXpvbnRhbCBydWxlci4iCiAgOmluaXQtdmFs dWUgbmlsCiAgOmxpZ2h0ZXIgIiArIgogIDprZXltYXAgbmlsCiAgOmdsb2JhbCBuaWwKICA6Z3Jv dXAgJystbW9kZQogIChjb25kCiAgICAoKy1tb2RlCiAgICAgIChpZiBibGluay1jdXJzb3ItbW9k ZQogICAgICAgIChibGluay1jdXJzb3ItbW9kZSAtMSkpCiAgICAgIChzZXRxIGNyb3NzaGFpcnMg dCkKICAgICAgOzs7IFJFTUlOREVSOiAgVGhlIHVzZXIgY2FuIHN1cHByZXNzIGVpdGhlciBvciBi b3RoIG9mIHRoZSBydWxlcnMuCiAgICAgIDs7IChzZXRxIGNyb3NzaGFpcnMtaG9yaXpvbnRhbC1y dWxlciBuaWwpCiAgICAgIDs7IChzZXRxIGNyb3NzaGFpcnMtdmVydGljYWwtcnVsZXIgbmlsKQog ICAgICA7OzsgREVCVUdHSU5HOiAgVG8gZ2VuZXJhdGUgaGVscGZ1bCBtZXNzYWdlcyBvdXRwdXQg dG8gc3RkZXJyLgogICAgICA7OyAoc2V0cSBtYy1zdGRlcnIgbmlsKQogICAgICAoc2V0IChtYWtl LWxvY2FsLXZhcmlhYmxlICcrLS1zYXZlZC1zdGF0ZSkgbmlsKQogICAgICA7OyBTYXZlIHRoZSBs b2NhbCB2YWx1ZXMgb2Ygc29tZSB2YXJpYWJsZXMsIHRvIGJlIHJlc3RvcmVkIGlmIHZsLW1vZGUg aXMgdHVybmVkIG9mZi4KICAgICAgKGRvbGlzdCAodmFyICcoYnVmZmVyLWRpc3BsYXktdGFibGUK ICAgICAgICAgICAgICAgICAgICAgZnJpbmdlLWluZGljYXRvci1hbGlzdAogICAgICAgICAgICAg ICAgICAgICB0YWItd2lkdGgKICAgICAgICAgICAgICAgICAgICAgbGluZS1tb3ZlLXZpc3VhbAog ICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZS1wYXJ0aWFsLXdpZHRoLXdpbmRvd3MKICAgICAg ICAgICAgICAgICAgICAgdHJ1bmNhdGUtbGluZXMKICAgICAgICAgICAgICAgICAgICAgd29yZC13 cmFwKSkKICAgICAgICAod2hlbiAobG9jYWwtdmFyaWFibGUtcCB2YXIpCiAgICAgICAgICAocHVz aCAoY29ucyB2YXIgKHN5bWJvbC12YWx1ZSB2YXIpKSArLS1zYXZlZC1zdGF0ZSkpKQogICAgICAo c2V0cSBkaXNwbGF5LWxpbmUtbnVtYmVycyB0KQogICAgICAoc2V0cS1sb2NhbCBhdXRvLWhzY3Jv bGwtbW9kZSAnY3VycmVudC1saW5lKQogICAgICAoc2V0cS1sb2NhbCBoc2Nyb2xsLXN0ZXAgNSkK ICAgICAgKHNldHEgYnVmZmVyLWRpc3BsYXktdGFibGUgKy1idWZmZXItZGlzcGxheS10YWJsZSkK ICAgICAgKHNldHEgdGFiLXdpZHRoIDQpCiAgICAgIChzZXRxLWxvY2FsIHRhYi1zdG9wLWxpc3Qg KG51bWJlci1zZXF1ZW5jZSAwIDEwMDAgNCkpCiAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFi bGUgJ2xpbmUtbW92ZS12aXN1YWwpIHQpCiAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUg J3RydW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cykgbmlsKQogICAgICAoc2V0cSB0cnVuY2F0 ZS1saW5lcyBuaWwpCiAgICAgIChzZXRxIHdvcmQtd3JhcCB0KQogICAgICAoc2V0cSBpbmRpY2F0 ZS1lbXB0eS1saW5lcyB0KQogICAgICAoc2V0cSBpbmRpY2F0ZS1idWZmZXItYm91bmRhcmllcyAn bGVmdCkKICAgICAgKHNldHEgZnJpbmdlLWluZGljYXRvci1hbGlzdCAnKAogICAgICAgICh0cnVu Y2F0aW9uIC4gKCstZnJpbmdlLWxlZnQtYXJyb3cgKy1mcmluZ2UtcmlnaHQtYXJyb3cpKQogICAg ICAgIChjb250aW51YXRpb24gLiAoKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdyArLWJhY2tzbGFz aCkpCiAgICAgICAgKG92ZXJsYXktYXJyb3cgLiArLWZyaW5nZS1yaWdodC10cmlhbmdsZSkKICAg ICAgICAodXAgLiArLWZyaW5nZS11cC1hcnJvdykKICAgICAgICAoZG93biAuICstZnJpbmdlLWRv d24tYXJyb3cpCiAgICAgICAgKHRvcCAuICstZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlKQogICAgICAg IChib3R0b20gLiArLWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUpCiAgICAgICAgKHRvcC1ib3R0 b20gLiAoKy1mcmluZ2UtbGVmdC1icmFja2V0CiAgICAgICAgICAgICAgICAgICAgICAgKy1mcmlu Z2UtcmlnaHQtYnJhY2tldAogICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXRvcC1yaWdo dC1hbmdsZQogICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlKSkK ICAgICAgICAoZW1wdHktbGluZSAuICstZnJpbmdlLWVtcHR5LWxpbmUpCiAgICAgICAgKHVua25v d24gLiArLWZyaW5nZS1xdWVzdGlvbi1tYXJrKSkpCiAgICAgIDs7OyBSRU1BUCBERUZBVUxUIEJF SEFWSU9SIChpZiB0aGUgdXNlciB3YW50cyBzb21ldGhpbmcgZGlmZmVyZW50KS4KICAgICAgKHNl dHEgZnJpbmdlLWN1cnNvci1hbGlzdCAnKChib3ggLiArLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhvbGxvdyAuICstaG9sbG93LXJlY3Rh bmdsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYXIgLiArLXZlcnRpY2Fs LWJhcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYmFyIC4gKy1mcmluZ2Ut aG9yaXpvbnRhbC1iYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaG9sbG93 LXNtYWxsIC4gKy1mcmluZ2UtaG9sbG93LXNxdWFyZSkpKQogICAgICAoc2V0cSBmaWxsLWNvbHVt biA4MCkKICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnKy1kcmF3LWhvcml6b250 YWwtcnVsZXIgJ2FwcGVuZCAnbG9jYWwpCiAgICAgIChhZGQtaG9vayAnd2luZG93LWNvbmZpZ3Vy YXRpb24tY2hhbmdlLWhvb2sgJystcmVkcmF3LWZvcnRod2l0aCBuaWwgJ2xvY2FsKQogICAgICAo YWRkLWhvb2sgJ2NoYW5nZS1tYWpvci1tb2RlLWhvb2sgJ3R1cm4tb2ZmLSstbW9kZSBuaWwgJ2xv Y2FsKQogICAgICAod2hlbiAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQogICAgICAgICht ZXNzYWdlICJUdXJuZWQgT04gYCstbW9kZScuIikpKQogICAgKHQKICAgICAgKGtpbGwtbG9jYWwt dmFyaWFibGUgJ2Nyb3NzaGFpcnMpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdkaXNwbGF5 LWxpbmUtbnVtYmVycykKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2Rpc3BsYXktbGluZS1u dW1iZXJzLXdpZHRoKQogICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnbWMtZ2x5cGgtbGlzdCkK ICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ21jLWdseXBobGVzcy1saXN0KQogICAgICAoa2ls bC1sb2NhbC12YXJpYWJsZSAnYnVmZmVyLWRpc3BsYXktdGFibGUpCiAgICAgIChraWxsLWxvY2Fs LXZhcmlhYmxlICd0YWItd2lkdGgpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICd0YWItc3Rv cC1saXN0KQogICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnbGluZS1tb3ZlLXZpc3VhbCkKICAg ICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RydW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cykK ICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RydW5jYXRlLWxpbmVzKQogICAgICAoa2lsbC1s b2NhbC12YXJpYWJsZSAnd29yZC13cmFwKQogICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaW5k aWNhdGUtZW1wdHktbGluZXMpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdpbmRpY2F0ZS1i dWZmZXItYm91bmRhcmllcykKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2ZyaW5nZS1pbmRp Y2F0b3ItYWxpc3QpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdmcmluZ2UtY3Vyc29yLWFs aXN0KQogICAgICAoZG9saXN0IChzYXZlZCArLS1zYXZlZC1zdGF0ZSkKICAgICAgICAoc2V0ICht YWtlLWxvY2FsLXZhcmlhYmxlIChjYXIgc2F2ZWQpKSAoY2RyIHNhdmVkKSkpCiAgICAgIChraWxs LWxvY2FsLXZhcmlhYmxlICcrLS1zYXZlZC1zdGF0ZSkKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFi bGUgJ2ZhY2UtcmVtYXBwaW5nLWFsaXN0KQogICAgICAoKy1kZWxldGUtcGFyZW5zLW92ZXJsYXlz KQogICAgICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICcrLWRyYXctaG9yaXpvbnRh bC1ydWxlciAnbG9jYWwpCiAgICAgIChyZW1vdmUtaG9vayAnd2luZG93LWNvbmZpZ3VyYXRpb24t Y2hhbmdlLWhvb2sgJystcmVkcmF3LWZvcnRod2l0aCAnbG9jYWwpCiAgICAgIChyZW1vdmUtaG9v ayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vayAndHVybi1vZmYtKy1tb2RlICdsb2NhbCkKICAgICAg KHdoZW4gdnItdGltZXIKICAgICAgICAoc2V0cSB0aW1lci1pZGxlLWxpc3QgKGRlbHEgdnItdGlt ZXIgdGltZXItaWRsZS1saXN0KSkKICAgICAgICAoc2V0cSB2ci10aW1lciBuaWwpKQogICAgICAo c2V0cSBvdmVybGF5LWFycm93LXBvc2l0aW9uIG5pbCkKICAgICAgKHdoZW4gKGNhbGxlZC1pbnRl cmFjdGl2ZWx5LXAgJ2FueSkKICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9GRiBgKy1tb2RlJy4i KSkpKSkKCihkZWZ1biB0dXJuLW9mZi0rLW1vZGUgKCkKICAoKy1tb2RlIC0xKSkKCjs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7OwoKKGRlZnVuICstcGFyZW5zLWZuICgpCiJEb2Mtc3RyaW5nLiIKICAo bGV0KiAoKG9wb2ludCAocG9pbnQpKQogICAgICAgICAoZnJvbSAocG9pbnQtbWluKSkKICAgICAg ICAgKHdpbiAoc2VsZWN0ZWQtd2luZG93KSkKICAgICAgICAgKGkgMCkKICAgICAgICAgKHByZWNl ZGluZy1jaGFyIChwcmVjZWRpbmctY2hhcikpCiAgICAgICAgIChvY2hhciAoY2hhci1hZnRlciBv cG9pbnQpKQogICAgICAgICAocG9zMQogICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAoKGFu ZCBvY2hhcgogICAgICAgICAgICAgICAgICAgKG9yIDs7OyAoY2hhci10by1zdHJpbmcgNDApID0+ IG9wZW5pbmcgcGFyZW50aGVzaXMKICAgICAgICAgICAgICAgICAgICAgICAoPSBvY2hhciA0MCkK ICAgICAgICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDkxKSA9PiBvcGVuaW5n IHNxdWFyZSBicmFja2V0CiAgICAgICAgICAgICAgICAgICAgICAgKD0gb2NoYXIgOTEpCiAgICAg ICAgICAgICAgICAgICAgICAgOzs7IChjaGFyLXRvLXN0cmluZyAxMjMpID0+IG9wZW5pbmcgd2F2 eSBicmFja2V0CiAgICAgICAgICAgICAgICAgICAgICAgKD0gb2NoYXIgMTIzKSkpCiAgICAgICAg ICAgICAgICAobWluICgxKyBvcG9pbnQpIChwb2ludC1tYXgpKSkKICAgICAgICAgICAgICgob3Ig Ozs7IChjaGFyLXRvLXN0cmluZyA0MSkgPT4gY2xvc2luZyBwYXJlbnRoZXNpcwogICAgICAgICAg ICAgICAgICAoPSBwcmVjZWRpbmctY2hhciA0MSkKICAgICAgICAgICAgICAgICAgOzs7IChjaGFy LXRvLXN0cmluZyA5MykgPT4gY2xvc2luZyBzcXVhcmUgYnJhY2tldAogICAgICAgICAgICAgICAg ICAoPSBwcmVjZWRpbmctY2hhciA5MykKICAgICAgICAgICAgICAgICAgOzs7IChjaGFyLXRvLXN0 cmluZyAxMjUpID0+IGNsb3Npbmcgd2F2eSBicmFja2V0CiAgICAgICAgICAgICAgICAgICg9IHBy ZWNlZGluZy1jaGFyIDEyNSkpCiAgICAgICAgICAgICAgICAobWF4IChwb2ludC1taW4pICgxLSBv cG9pbnQpKSkKICAgICAgICAgICAgICh0CiAgICAgICAgICAgICAgICBvcG9pbnQpKSkKICAgICAg ICAgcG9zMgogICAgICAgICBzZWxlY3RlZC1mYWNlKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAg IChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAod2hpbGUgKHNldHEgcG9zMSAobnRoIDEgKHBh cnNlLXBhcnRpYWwtc2V4cCBmcm9tIHBvczEpKSkKICAgICAgICAgIChzZXRxIHBvczIgKHNjYW4t c2V4cHMgcG9zMSAxKSkKICAgICAgICAgIChpZiAoPSBpIDEwKQogICAgICAgICAgICAoc2V0cSBp IDEpCiAgICAgICAgICAgIChpbmNmIGkpKQogICAgICAgICAgKHNldHEgc2VsZWN0ZWQtZmFjZSAo Y29uZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDEpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtb25lLWZhY2UpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCg9IGkgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICcrLXBhcmVucy10d28tZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KD0gaSAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXRocmVl LWZhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgNCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1mb3VyLWZhY2UpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCg9IGkgNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcrLXBhcmVucy1maXZlLWZhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCg9IGkgNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1z aXgtZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA3KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXNldmVuLWZhY2UpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgOCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICcrLXBhcmVucy1laWdodC1mYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoPSBpIDkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJl bnMtbmluZS1mYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDEwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXRlbi1mYWNlKSkpCiAg ICAgICAgICAobGV0ICgob3YgKG1ha2Utb3ZlcmxheSBwb3MxICgxKyBwb3MxKSkpKQogICAgICAg ICAgICAob3ZlcmxheS1wdXQgb3YgJ3dpbmRvdyB3aW4pCiAgICAgICAgICAgIChvdmVybGF5LXB1 dCBvdiAnZmFjZSBzZWxlY3RlZC1mYWNlKSkKICAgICAgICAgICh3aGVuIHBvczIKICAgICAgICAg ICAgKGxldCAoKG92IChtYWtlLW92ZXJsYXkgKDEtIHBvczIpIHBvczIpKSkKICAgICAgICAgICAg ICAob3ZlcmxheS1wdXQgb3YgJ3dpbmRvdyB3aW4pCiAgICAgICAgICAgICAgKG92ZXJsYXktcHV0 IG92ICdmYWNlIHNlbGVjdGVkLWZhY2UpKSkpCiAgICAgICAgKGVycm9yIG5pbCkpKQogICAgKHNl dHEgKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3QtcCB0KSkpCgooZGVmdW4gKy1yZW1vdmUtb3Zlcmxh eXMgKGJlZyBlbmQgbmFtZSB2YWwpCiJSZW1vdmUgdGhlIG92ZXJsYXlzIHRoYXQgYXJlIGBlcXVh bC1pbmNsdWRpbmctcHJvcGVydGllc2AuCkluY2x1ZGVzIGEgdW5pcXVlIHNpdHVhdGlvbiB3aGVu IGFuIG92ZXJsYXkgd2l0aCBhbiBgJ2FmdGVyLXN0cmluZ2AgcHJvcGVydHkKaXMgYXQgdGhlIHZl cnkgZW5kIG9mIGEgbmFycm93ZWQtYnVmZmVyLiIKICAobGV0KiAoCiAgICAgIChwb2ludC1tYXgg KHBvaW50LW1heCkpCiAgICAgIChwb2ludC1taW4gKHBvaW50LW1pbikpCiAgICAgIChuYXJyb3dl ZC1wIChidWZmZXItbmFycm93ZWQtcCkpCiAgICAgIChiZWcgKGlmIGJlZyBiZWcgcG9pbnQtbWlu KSkKICAgICAgKGVuZAogICAgICAgIChjb25kCiAgICAgICAgICAoKGFuZAogICAgICAgICAgICAg IChub3QgbmFycm93ZWQtcCkKICAgICAgICAgICAgICBlbmQpCiAgICAgICAgICAgIGVuZCkKICAg ICAgICAgICgoYW5kCiAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1wKQogICAgICAgICAgICAg IChudWxsIGVuZCkpCiAgICAgICAgICAgIHBvaW50LW1heCkKICAgICAgICAgICgoYW5kCiAgICAg ICAgICAgICAgbmFycm93ZWQtcAogICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICg8IGVu ZCBwb2ludC1tYXgpKQogICAgICAgICAgICBlbmQpCiAgICAgICAgICAoKGFuZAogICAgICAgICAg ICAgIG5hcnJvd2VkLXAKICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAoPSBlbmQgcG9p bnQtbWF4KSkKICAgICAgICAgICAgKDErIGVuZCkpCiAgICAgICAgICAoKGFuZAogICAgICAgICAg ICAgIG5hcnJvd2VkLXAKICAgICAgICAgICAgICAobnVsbCBlbmQpKQogICAgICAgICAgICAoMSsg cG9pbnQtbWF4KSkgKSkKICAgICAgKG92ZXJsYXlzCiAgICAgICAgKHByb2duCiAgICAgICAgICAo b3ZlcmxheS1yZWNlbnRlciBlbmQpCiAgICAgICAgICAob3ZlcmxheXMtaW4gYmVnIGVuZCkpKSAp CiAgICAod2hlbiAoYW5kIGJlZyBlbmQgbmFtZSB2YWwpCiAgICAgIChkb2xpc3QgKG8gb3Zlcmxh eXMpCiAgICAgICAgKGNvbmQKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgICAoZXEgbmFt ZSAnZmFjZSkKICAgICAgICAgICAgICAgIChlcSAob3ZlcmxheS1nZXQgbyBuYW1lKSB2YWwpKQog ICAgICAgICAgICA7OyBFaXRoZXIgcHVzaCB0aGlzIG92ZXJsYXkgb3V0c2lkZSBiZWcuLi5lbmQK ICAgICAgICAgICAgOzsgb3Igc3BsaXQgaXQgdG8gZXhjbHVkZSBiZWcuLi5lbmQKICAgICAgICAg ICAgOzsgb3IgZGVsZXRlIGl0IGVudGlyZWx5IChpZiBpdCBpcyBjb250YWluZWQgaW4gYmVnLi4u ZW5kKS4KICAgICAgICAgICAgKGlmICg8IChvdmVybGF5LXN0YXJ0IG8pIGJlZykKICAgICAgICAg ICAgICAgIChpZiAoPiAob3ZlcmxheS1lbmQgbykgZW5kKQogICAgICAgICAgICAgIChwcm9nbgog ICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSAoY29weS1vdmVybGF5IG8pCiAgICAgICAgICAg ICAgICAgIChvdmVybGF5LXN0YXJ0IG8pIGJlZykKICAgICAgICAgICAgICAgIChtb3ZlLW92ZXJs YXkgbyBlbmQgKG92ZXJsYXktZW5kIG8pKSkKICAgICAgICAgICAgICAgICAgKG1vdmUtb3Zlcmxh eSBvIChvdmVybGF5LXN0YXJ0IG8pIGJlZykpCiAgICAgICAgICAgICAgKGlmICg+IChvdmVybGF5 LWVuZCBvKSBlbmQpCiAgICAgICAgICAgICAgICAgIChtb3ZlLW92ZXJsYXkgbyBlbmQgKG92ZXJs YXktZW5kIG8pKQogICAgICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG8pKSkpCiAgICAgICAg ICAoKGFuZAogICAgICAgICAgICAgICAgKG5vdCAoZXEgbmFtZSAnZmFjZSkpCiAgICAgICAgICAg ICAgICAoZXF1YWwtaW5jbHVkaW5nLXByb3BlcnRpZXMgKG92ZXJsYXktZ2V0IG8gbmFtZSkgdmFs KSkKICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG8pKSkpKSkpCgooZGVmdW4gKy1kZWxldGUt cGFyZW5zLW92ZXJsYXlzICgpCiAgKHdoZW4gKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3QtcAogICAg KGRvbGlzdCAoZmFjZSAnKAogICAgICAgICstcGFyZW5zLW9uZS1mYWNlCiAgICAgICAgKy1wYXJl bnMtdHdvLWZhY2UKICAgICAgICArLXBhcmVucy10aHJlZS1mYWNlCiAgICAgICAgKy1wYXJlbnMt Zm91ci1mYWNlCiAgICAgICAgKy1wYXJlbnMtZml2ZS1mYWNlCiAgICAgICAgKy1wYXJlbnMtc2l4 LWZhY2UKICAgICAgICArLXBhcmVucy1zZXZlbi1mYWNlCiAgICAgICAgKy1wYXJlbnMtZWlnaHQt ZmFjZQogICAgICAgICstcGFyZW5zLW5pbmUtZmFjZQogICAgICAgICstcGFyZW5zLXRlbi1mYWNl KSkKICAgICAgKCstcmVtb3ZlLW92ZXJsYXlzIG5pbCBuaWwgJ2ZhY2UgZmFjZSkpCiAgICAoc2V0 cSArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wIG5pbCkpKQoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Cjs7IGZhY2VzCgooZGVmZ3JvdXAgKy1tb2RlIG5pbAogICJGYWNlcyBmb3IgdGhlIHZlcnRp Y2FsIHJ1bGVyLiIKICA6Z3JvdXAgJ2NvbnZlbmllbmNlKQoKKGRlZmZhY2UgKy1mb3JtLWZlZWQt ZmFjZQogIChjb25kCiAgICAoKGVxIHN5c3RlbS10eXBlICdkYXJ3aW4pCiAgICAgICcoKHQgKDpm b3JlZ3JvdW5kICJtYWdlbnRhIikpKSkKICAgICgoZXEgc3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQp CiAgICAgICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdlbnRhIikpKSkpCiAgIkZhY2UgZm9yIGArLWZv cm0tZmVlZC1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLW5ld2xpbmUtZmFj ZQogICcoKHQgKDpmb3JlZ3JvdW5kICIjNTU1NTU1IikpKQogICJGYWNlIGZvciBgKy1uZXdsaW5l LWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstc3BhY2UtZmFjZQogICcoKHQg KDpmb3JlZ3JvdW5kICJEYXJrUmVkIikpKQogICJGYWNlIGZvciBgKy1zcGFjZS1mYWNlJy4iCiAg Omdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXRhYi1mYWNlCiAgJygodCAoOmZvcmVncm91bmQg ImN5YW4iKSkpCiAgIkZhY2UgZm9yIGArLXRhYi1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgoo ZGVmZmFjZSArLXRhYi1zcGFjZXItZmFjZQogICcoKHQgKDpiYWNrZ3JvdW5kICJncmV5MjUiKSkp CiAgIkZhY2UgZm9yIGArLXRhYi1zcGFjZXItZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRl ZmZhY2UgKy1wYXJlbnMtb25lLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkK ICAiRmFjZSBmb3IgYCstcGFyZW5zLW9uZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVm ZmFjZSArLXBhcmVucy10d28tZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJyZWQiKSkpCiAgIkZh Y2UgZm9yIGArLXBhcmVucy10d28tZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2Ug Ky1wYXJlbnMtdGhyZWUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCiAgIkZh Y2UgZm9yIGArLXBhcmVucy10aHJlZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFj ZSArLXBhcmVucy1mb3VyLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JlZW4iKSkpCiAgIkZh Y2UgZm9yIGArLXBhcmVucy1mb3VyLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNl ICstcGFyZW5zLWZpdmUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQogICJGYWNl IGZvciBgKy1wYXJlbnMtZml2ZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSAr LXBhcmVucy1zaXgtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJvcmFuZ2UiKSkpCiAgIkZhY2Ug Zm9yIGArLXBhcmVucy1zaXgtZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2UgKy1w YXJlbnMtc2V2ZW4tZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkpCiAgIkZhY2Ug Zm9yIGArLXBhcmVucy1zZXZlbi1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSAr LXBhcmVucy1laWdodC1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImJsdWUiKSkpCiAgIkZhY2Ug Zm9yIGArLXBhcmVucy1laWdodC1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSAr LXBhcmVucy1uaW5lLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiYnJvd24iKSkpCiAgIkZhY2Ug Zm9yIGArLXBhcmVucy1uaW5lLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICst cGFyZW5zLXRlbi1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIndoaXRlIikpKQogICJGYWNlIGZv ciBgKy1wYXJlbnMtdGVuLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCjs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Owo7OyAgdmFyaWFibGVzCgooZGVmdmFyICstLXNhdmVkLXN0YXRlIG5pbCkKCihk ZWZ2YXIgKy1idWZmZXItZGlzcGxheS10YWJsZQogIChsZXQqICgoZGlzcGxheS10YWJsZSAobWFr ZS1kaXNwbGF5LXRhYmxlKSkKICAgICAgICAgKGZmLWNoYXIgP1x1MDA0NikKICAgICAgICAgKGds eXBoLWZvcm0tZmVlZCAobWFrZS1nbHlwaC1jb2RlIGZmLWNoYXIgJystZm9ybS1mZWVkLWZhY2Up KQogICAgICAgICAoZ2x5cGgtcGlsY3JvdyAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjYgJystbmV3 bGluZS1mYWNlKSkKICAgICAgICAgKGdseXBoLXNwYWNlIChtYWtlLWdseXBoLWNvZGUgP1x1MDBC NyAnKy1zcGFjZS1mYWNlKSkKICAgICAgICAgKGdseXBoLXRhYiAobWFrZS1nbHlwaC1jb2RlID9c dTAwQkIgJystdGFiLWZhY2UpKQogICAgICAgICAoZ2x5cGgtdGFiLXNwYWNlciAobWFrZS1nbHlw aC1jb2RlID9cdCAnKy10YWItc3BhY2VyLWZhY2UpKSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUg P1xuIGBbLGdseXBoLXBpbGNyb3cgP1xuXSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1xmIGBb LGdseXBoLWZvcm0tZmVlZCAsZ2x5cGgtZm9ybS1mZWVkXSkKICAgIDs7OyBtaW5pbXVtIHRhYi13 aWR0aCBpcyBgMmAKICAgIDs7IChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYiA/ XHRdKQogICAgKGFzZXQgZGlzcGxheS10YWJsZSA/XHQgYFssZ2x5cGgtdGFiICxnbHlwaC10YWIt c3BhY2VyXSkKICAgIDs7OyB0YWItd2lkdGggYWx3YXlzIGVxdWFscyBgMWAKICAgIDs7IChhc2V0 IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYl0pCiAgICAoYXNldCBkaXNwbGF5LXRhYmxl ID9ccyBgWyxnbHlwaC1zcGFjZV0pCiAgICBkaXNwbGF5LXRhYmxlKQogICJUaGUgYGJ1ZmZlci1k aXNwbGF5LXRhYmxlJyB0aGF0IGlzIHVzZWQgd2hlbiBgKy1tb2RlJyBpcyBhY3RpdmUuIikKCihk ZWZ2YXIgdnItdGltZXIgbmlsCiJUaW1lciB1c2VkIHRvIGhpZ2hsaWdodCBjdXJyZW50IGNvbHVt biB3aGVuZXZlciBFbWFjcyBpcyBpZGxlLiIpCgooZGVmdmFyICstcGFyZW5zLW92ZXJsYXlzLWV4 aXN0LXAgbmlsCiJTaW1wbGUgdGVzdCB0byBzZWUgd2hldGhlciB0aGUgcGFyZW5zIG92ZXJsYXlz IGhhdmUgYmVlbiBwbGFjZWQuClRoaXMgY291bGQgYmUgYSBkaWZmZXJlbnQga2luZCBvZiB0ZXN0 IC0tIGUuZy4sIHNjYW5uaW5nIGZvciB0aGUKcHJlc2VuY2Ugb2Ygc3BlY2lmaWMgb3ZlcmxheXMs IGJ1dCBwZXJoYXBzIHRoYXQgaXMgb3ZlcmtpbGwuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxv Y2FsICcrLXBhcmVucy1vdmVybGF5cy1leGlzdC1wKQoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Cjs7IGZyaW5nZSBiaXRtYXBzLCBmdW5jdGlvbnMgYW5kIGZhY2VzLgoKOzs7IERlZmluZWQg aW4gZmFjZXMuZWw7IGFuZCwgdXNlZCBpbiBgeGRpc3AuYycuCjs7IChkZWZmYWNlICstdmVydGlj YWwtYmFyLWZhY2UKOzsgICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkKOzsgICAiRmFjZSBm b3IgYCstdmVydGljYWwtYmFyLWZhY2UnLiIKOzsgICA6Z3JvdXAgJystbW9kZSkKCjs7OyBEZWZp bmVkIGluIGZhY2VzLmVsOyBhbmQsIHVzZWQgaW4gYHhkaXNwLmMnLgo7OyAoZGVmZmFjZSArLWV2 ZW4tbnVtYmVyZWQtY29sdW1uLWZhY2UKOzsgICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVsbG93Iikp KQo7OyAgICJGYWNlIGZvciBgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1mYWNlJy4iCjs7ICAgOmdy b3VwICcrLW1vZGUpCgo7OzsgRGVmaW5lZCBpbiBmYWNlcy5lbDsgYW5kLCB1c2VkIGluIGB4ZGlz cC5jJy4KOzsgKGRlZmZhY2UgKy1vZGQtbnVtYmVyZWQtY29sdW1uLWZhY2UKOzsgICAnKCh0ICg6 Zm9yZWdyb3VuZCAicmVkIikpKQo7OyAgICJGYWNlIGZvciBgKy1vZGQtbnVtYmVyZWQtY29sdW1u LWZhY2UnLiIKOzsgICA6Z3JvdXAgJystbW9kZSkKCjs7OyBEZWZpbmVkIGluIGZhY2VzLmVsOyBh bmQsIHVzZWQgaW4gYHhkaXNwLmMnLgo7OyAoZGVmZmFjZSArLWJleW9uZC1maWxsLWNvbHVtbi1m YWNlCjs7ICAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQo7OyAgICJGYWNlIGZvciBgKy1i ZXlvbmQtZmlsbC1jb2x1bW4tZmFjZScuIgo7OyAgIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2Ug Ky1vdmVybGF5LWFycm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JlZW4iKSkpCiAgIkZh Y2UgZm9yIGArLW92ZXJsYXktYXJyb3ctZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZh Y2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LW9uZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQg ImJsdWUiKSkpCiAgIkZhY2UgZm9yIGArLWxlZnQtZnJpbmdlLWN1cnNvci1hbHQtb25lLWZhY2Un LiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC10 d28tZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJyZWQiKSkpCiAgIkZhY2UgZm9yIGArLWxlZnQt ZnJpbmdlLWN1cnNvci1hbHQtdHdvLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCjs7OyBgb3Zl cmxheS1hcnJvdy1iaXRtYXAnIGlzIGEgc3BlY2lhbCBTWU1CT0wgZGVmaW5lZCBpbiB4ZGlzcC5j LgoKOzsgIChkZWZ2YXIgKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0aW9uIG5pbAo7OyAgIlRv IGJlIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Cjs7ICAgIChpZiAobm90IChhbmQg KGVvYnApIChib2xwKSkpCjs7ICAgICAgKHNldHEgKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0 aW9uIChjb3B5LW1hcmtlciAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pKSkKOzsgICAgICAoc2V0 cSArLWxlZnQtZnJpbmdlLW92ZXJsYXktcG9zaXRpb24gIG5pbCkpCgo7OyAgKG1ha2UtdmFyaWFi bGUtYnVmZmVyLWxvY2FsICcrLWxlZnQtZnJpbmdlLW92ZXJsYXktcG9zaXRpb24pCgo7OyAgKGFk ZC10by1saXN0ICdvdmVybGF5LWFycm93LXZhcmlhYmxlLWxpc3QgJystbGVmdC1mcmluZ2Utb3Zl cmxheS1wb3NpdGlvbikKCjs7ICAocHV0ICcrLWxlZnQtZnJpbmdlLW92ZXJsYXktcG9zaXRpb24g J292ZXJsYXktYXJyb3ctYml0bWFwICcrLXJpZ2h0LWFuZ2xlKQoKKHB1dCAnb3ZlcmxheS1hcnJv dy1wb3NpdGlvbiAnb3ZlcmxheS1hcnJvdy1iaXRtYXAgJystc21pbGV5LWZhY2UpCgooc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1zbWlsZXktZmFjZSAnKy1vdmVybGF5LWFycm93LWZhY2UpCgoo ZGVmZmFjZSArLWhvbGxvdy1yZWN0YW5nbGUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJjaGFy dHJldXNlIikpKQogICJGYWNlIGZvciBgKy1ob2xsb3ctcmVjdGFuZ2xlLWZhY2UnLiIKICA6Z3Jv dXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWhvbGxvdy1yZWN0YW5nbGUg JystaG9sbG93LXJlY3RhbmdsZS1mYWNlKQoKKGRlZmZhY2UgKy1iYWNrc2xhc2gtZmFjZQogICco KHQgKDpmb3JlZ3JvdW5kICJncmV5MjUiKSkpCiAgIkZhY2UgZm9yIGArLWJhY2tzbGFzaC1mYWNl Jy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1iYWNrc2xh c2ggJystYmFja3NsYXNoLWZhY2UpCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCjs7IEFVVEhP UjogIE5pa29sYWogU2NodW1hY2hlciAtLSBodHRwczovL2dpdGh1Yi5jb20vbnNjaHVtL2ZyaW5n ZS1oZWxwZXIuZWwKKGRlZnVuICstZnJpbmdlLWhlbHBlci1kZWNpbWFsICgmcmVzdCBzdHJpbmdz KQoiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0b3IgdXNhYmxlIGZvciBgZGVmaW5lLWZyaW5n ZS1iaXRtYXAnLgpFYWNoIHN0cmluZyBpbiBTVFJJTkdTIHJlcHJlc2VudHMgYSBsaW5lIG9mIHRo ZSBmcmluZ2UgYml0bWFwLgpQZXJpb2RzICguKSBhcmUgYmFja2dyb3VuZC1jb2xvcmVkIHBpeGVs OyBYcyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVkLiBUaGUKZnJpbmdlIGJpdG1hcCBhbHdheXMgaXMg YWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYKd2lkdGgsIG9ubHkg dGhlIGxlZnQgNCBwaXhlbHMgb2YgYW4gOCBwaXhlbCBiaXRtYXAgd2lsbCBiZSBzaG93bi4KRm9y IGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIGEgZGlhZ29uYWwgbGluZS4KXCgr LWZyaW5nZS1oZWxwZXItZGVjaW1hbApcIlhYLi4uLi4uXCIKXCIuLlhYLi4uLlwiClwiLi4uLlhY Li5cIgpcIi4uLi4uLlhYXCJcKSIKICAodW5sZXNzIChjZHIgc3RyaW5ncykKICAgIChzZXRxIHN0 cmluZ3MgKHNwbGl0LXN0cmluZyAoY2FyIHN0cmluZ3MpICJcbiIpKSkKICAoYXBwbHkgJ3ZlY3Rv cgogICAgKG1hcGNhcgogICAgICAobGFtYmRhIChzdHIpCiAgICAgICAgKGxldCAoKG51bSAwKSkK ICAgICAgICAgIChkb2xpc3QgKGMgKHN0cmluZy10by1saXN0IHN0cikpCiAgICAgICAgICAgIChz ZXRxIG51bSAoKyAoKiBudW0gMikgKGlmIChlcSBjID8uKSAwIDEpKSkpCiAgICAgICAgICBudW0p KQogICAgICBzdHJpbmdzKSkpCgooZGVmdW4gKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsICgm cmVzdCBzdHJpbmdzKQoiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0b3IgdXNhYmxlIGZvciBg ZGVmaW5lLWZyaW5nZS1iaXRtYXAnLgpFYWNoIHN0cmluZyBpbiBTVFJJTkdTIHJlcHJlc2VudHMg YSBsaW5lIG9mIHRoZSBmcmluZ2UgYml0bWFwLgpQZXJpb2RzICguKSBhcmUgYmFja2dyb3VuZC1j b2xvcmVkIHBpeGVsOyBYcyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVkLiBUaGUKZnJpbmdlIGJpdG1h cCBhbHdheXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYK d2lkdGgsIG9ubHkgdGhlIGxlZnQgNCBwaXhlbHMgb2YgYW4gOCBwaXhlbCBiaXRtYXAgd2lsbCBi ZSBzaG93bi4KRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIGEgZGlhZ29u YWwgbGluZS4KXCgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKXCJYWC4uLi4uLlwiClwiLi5Y WC4uLi5cIgpcIi4uLi5YWC4uXCIKXCIuLi4uLi5YWFwiXCkiCiAgKHVubGVzcyAoY2RyIHN0cmlu Z3MpCiAgICAoc2V0cSBzdHJpbmdzIChzcGxpdC1zdHJpbmcgKGNhciBzdHJpbmdzKSAiXG4iKSkp CiAgKGFwcGx5ICd2ZWN0b3IKICAgIChtYXBjYXIKICAgICAgKGxhbWJkYSAoc3RyKQogICAgICAg IChsZXQgKChudW0gMCkpCiAgICAgICAgICAoZG9saXN0IChjIChzdHJpbmctdG8tbGlzdCBzdHIp KQogICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEgYyA/LikgMCAxKSkp KQogICAgICAgICAgKGZvcm1hdCAiJSMteCIgbnVtKSkpCiAgICAgIHN0cmluZ3MpKSkKCjs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1xdWVz dGlvbi1tYXJrICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi54eHh4Li4iCiIueHh4eHh4LiIK Inh4Li4uLnh4IgoieHguLi4ueHgiCiIuLi4ueHguLiIKIi4uLnh4Li4uIgoiLi4ueHguLi4iCiIu Li4uLi4uLiIKIi4uLnh4Li4uIgoiLi4ueHguLi4iKSBuaWwgbmlsICdjZW50ZXIpCgooZGVmZmFj ZSArLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JlZW4i KSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UnLiIKICA6Z3JvdXAg JystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJr ICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcr LWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4uWFgu Li4iCiIuLi5YWC4uLiIKIi4uLlhYLi4uIgoiLi4uWFguLi4iCiIuLi5YWC4uLiIKIi4uLlhYLi4u IgoiLi4uWFguLi4iCiIuLi4uLi4uLiIKIi4uLlhYLi4uIgoiLi4uWFguLi4iKSBuaWwgbmlsICdj ZW50ZXIpCgooZGVmZmFjZSArLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrLWZhY2UKICAnKCh0ICg6 Zm9yZWdyb3VuZCAiY3lhbiIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWV4Y2xhbWF0aW9uLW1h cmstZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJyst ZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmsgJystZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmstZmFjZSkK CgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtYXJyb3cgKCstZnJpbmdlLWhl bHBlci1kZWNpbWFsCiIuLi54eC4uLiIKIi4ueHguLi4uIgoiLnh4Li4uLi4iCiJ4eHh4eHguLiIK Inh4eHh4eC4uIgoiLnh4Li4uLi4iCiIuLnh4Li4uLiIKIi4uLnh4Li4uIikgbmlsIG5pbCAnY2Vu dGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1hcnJvdy1mYWNlCiAgJygodCAoOmZvcmVncm91 bmQgInB1cnBsZSIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtYXJyb3ctZmFjZScuIgog IDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWxlZnQt YXJyb3cgJystZnJpbmdlLWxlZnQtYXJyb3ctZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAg JystZnJpbmdlLXJpZ2h0LWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4ueHguLi4i CiIuLi4ueHguLiIKIi4uLi4ueHguIgoiLi54eHh4eHgiCiIuLnh4eHh4eCIKIi4uLi4ueHguIgoi Li4uLnh4Li4iCiIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICstZnJpbmdl LXJpZ2h0LWFycm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiT3JhbmdlUmVkIikpKQogICJG YWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtYXJyb3ctZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoK KHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXJpZ2h0LWFycm93ICcrLWZyaW5nZS1y aWdodC1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtdXAtYXJy b3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIuLi54eC4uLiIKIi4ueHh4eC4uIgoiLnh4eHh4 eC4iCiJ4eHh4eHh4eCIKIi4uLnh4Li4uIgoiLi4ueHguLi4iCiIuLi54eC4uLiIKIi4uLnh4Li4u IikgbmlsIG5pbCAndG9wKQoKKGRlZmZhY2UgKy1mcmluZ2UtdXAtYXJyb3ctZmFjZQogICcoKHQg KDpmb3JlZ3JvdW5kICJSb3lhbEJsdWUiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS11cC1hcnJv dy1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1m cmluZ2UtdXAtYXJyb3cgJystZnJpbmdlLXVwLWFycm93LWZhY2UpCgoKKGRlZmluZS1mcmluZ2Ut Yml0bWFwICcrLWZyaW5nZS1kb3duLWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4u eHguLi4iCiIuLi54eC4uLiIKIi4uLnh4Li4uIgoiLi4ueHguLi4iCiJ4eHh4eHh4eCIKIi54eHh4 eHguIgoiLi54eHh4Li4iCiIuLi54eC4uLiIpIG5pbCBuaWwgJ2JvdHRvbSkKCihkZWZmYWNlICst ZnJpbmdlLWRvd24tYXJyb3ctZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQogICJG YWNlIGZvciBgKy1mcmluZ2UtZG93bi1hcnJvdy1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgoo c2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZG93bi1hcnJvdyAnKy1mcmluZ2UtZG93 bi1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtbGVmdC1jdXJs eS1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4uLnh4eHguIgoiLi54eHh4eC4iCiIu eHguLi4uLiIKIi54eHguLnguIgoiLnh4eHh4eC4iCiIuLnh4eHh4LiIKIi4uLnh4eHguIgoiLi54 eHh4eC4iKSBuaWwgbmlsICdjZW50ZXIpCgooZGVmZmFjZSArLWZyaW5nZS1sZWZ0LWN1cmx5LWFy cm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JleTI1IikpKQogICJGYWNlIGZvciBgKy1m cmluZ2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdyAnKy1mcmluZ2UtbGVm dC1jdXJseS1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2Utcmln aHQtY3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIueHh4eC4uLiIKIi54eHh4 eC4uIgoiLi4uLi54eC4iCiIueC4ueHh4LiIKIi54eHh4eHguIgoiLnh4eHh4Li4iCiIueHh4eC4u LiIKIi54eHh4eC4uIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQt Y3VybHktYXJyb3ctZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICIjM2MzYzNjIikpKQogICJGYWNl IGZvciBgKy1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3ctZmFjZScuIgogIDpncm91cCAnKy1tb2Rl KQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93ICcr LWZyaW5nZS1yaWdodC1jdXJseS1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAn Ky1mcmluZ2UtbGVmdC10cmlhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4uLi4uLnh4 IgoiLi4uLnh4eHgiCiIuLi54eHh4eCIKIi4ueHh4eHh4IgoiLi54eHh4eHgiCiIuLi54eHh4eCIK Ii4uLi54eHh4IgoiLi4uLi4ueHgiKSBuaWwgbmlsICdjZW50ZXIpCgooZGVmZmFjZSArLWZyaW5n ZS1sZWZ0LXRyaWFuZ2xlLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQogICJGYWNl IGZvciBgKy1mcmluZ2UtbGVmdC10cmlhbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgoo c2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC10cmlhbmdsZSAnKy1mcmluZ2Ut bGVmdC10cmlhbmdsZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2Utcmln aHQtdHJpYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eC4uLi4uLiIKInh4eHguLi4u IgoieHh4eHguLi4iCiJ4eHh4eHguLiIKInh4eHh4eC4uIgoieHh4eHguLi4iCiJ4eHh4Li4uLiIK Inh4Li4uLi4uIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtdHJp YW5nbGUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCiAgIkZhY2UgZm9yIGAr LWZyaW5nZS1yaWdodC10cmlhbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUgJystZnJpbmdlLXJpZ2h0 LXRyaWFuZ2xlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10b3AtbGVm dC1hbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKInh4eHh4eC4uIgoieHh4eHh4Li4iCiJ4 eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoiLi4u Li4uLi4iKSBuaWwgbmlsICd0b3ApCgooZGVmZmFjZSArLWZyaW5nZS10b3AtbGVmdC1hbmdsZS1m YWNlCiAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5n ZS10b3AtbGVmdC1hbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1i aXRtYXAtZmFjZSAnKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUgJystZnJpbmdlLXRvcC1sZWZ0LWFu Z2xlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10b3AtcmlnaHQtYW5n bGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIuLnh4eHh4eCIKIi4ueHh4eHh4IgoiLi4uLi4u eHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIKIi4uLi4uLi4u IikgbmlsIG5pbCAndG9wKQoKKGRlZmZhY2UgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlLWZhY2UK ICAnKCh0ICg6Zm9yZWdyb3VuZCAib3JhbmdlIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtdG9w LXJpZ2h0LWFuZ2xlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1h cC1mYWNlICcrLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUgJystZnJpbmdlLXRvcC1yaWdodC1hbmds ZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90dG9tLWxlZnQtYW5n bGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4u Li4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHh4eHh4Li4iCiJ4eHh4eHguLiIpIG5pbCBuaWwg J2JvdHRvbSkKCihkZWZmYWNlICstZnJpbmdlLWJvdHRvbS1sZWZ0LWFuZ2xlLWZhY2UKICAnKCh0 ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWJvdHRvbS1s ZWZ0LWFuZ2xlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1m YWNlICcrLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZSAnKy1mcmluZ2UtYm90dG9tLWxlZnQtYW5n bGUtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWJvdHRvbS1yaWdodC1h bmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLi4u Li54eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLnh4eHh4eCIKIi4ueHh4eHh4IikgbmlsIG5p bCAnYm90dG9tKQoKKGRlZmZhY2UgKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlLWZhY2UKICAn KCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWJvdHRv bS1yaWdodC1hbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRt YXAtZmFjZSAnKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlICcrLWZyaW5nZS1ib3R0b20tcmln aHQtYW5nbGUtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtYnJh Y2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKInh4eHh4eC4uIgoieHh4eHh4Li4iCiJ4eC4u Li4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4u Li4iCiJ4eHh4eHguLiIKInh4eHh4eC4uIikgbmlsIG5pbCAnY2VudGVyKQo7OwoKKGRlZmZhY2Ug Ky1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVsbG93Iikp KQogICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UnLiIKICA6Z3JvdXAgJyst bW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1sZWZ0LWJyYWNrZXQgJyst ZnJpbmdlLWxlZnQtYnJhY2tldC1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmlu Z2UtcmlnaHQtYnJhY2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4ueHh4eHh4IgoiLi54 eHh4eHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIKIi4uLi4u Lnh4IgoiLi4uLi4ueHgiCiIuLnh4eHh4eCIKIi4ueHh4eHh4IikgbmlsIG5pbCAnY2VudGVyKQoK KGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlCiAgJygodCAoOmZvcmVncm91bmQg ImdyZWVuIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlJy4iCiAg Omdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQt YnJhY2tldCAnKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJp dG1hcCAnKy1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwK Inh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4 eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIgoieHh4 eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2Ug Ky1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0 cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UnLiIK ICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1maWxs ZWQtcmVjdGFuZ2xlICcrLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UpCgoKKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlICgrLWZyaW5nZS1oZWxwZXItZGVj aW1hbAoiLnh4eHh4eC4iCiIueC4uLi54LiIKIi54Li4uLnguIgoiLnguLi4ueC4iCiIueC4uLi54 LiIKIi54eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtaG9sbG93 LXNxdWFyZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCiAgIkZhY2Ug Zm9yIGArLWZyaW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihz ZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlICcrLWZyaW5nZS1o b2xsb3ctc3F1YXJlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1maWxs ZWQtc3F1YXJlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLnh4eHh4eC4iCiIueHh4eHh4LiIK Ii54eHh4eHguIgoiLnh4eHh4eC4iCiIueHh4eHh4LiIKIi54eHh4eHguIikgbmlsIG5pbCAnY2Vu dGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtZmlsbGVkLXNxdWFyZS1mYWNlCiAgJygodCAoOmZvcmVn cm91bmQgImNoYXJ0cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtc3F1YXJl LWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZy aW5nZS1maWxsZWQtc3F1YXJlICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UpCgoKKGRlZmlu ZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1ob3Jpem9udGFsLWJhciAoKy1mcmluZ2UtaGVscGVy LWRlY2ltYWwKInh4eHh4eHguIgoieHh4eHh4eC4iKSBuaWwgbmlsICdib3R0b20pCgooZGVmZmFj ZSArLWZyaW5nZS1ob3Jpem9udGFsLWJhci1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0 cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1ob3Jpem9udGFsLWJhci1mYWNlJy4iCiAg Omdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtaG9yaXpv bnRhbC1iYXIgJystZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UpCgoKKGRlZmluZS1mcmluZ2Ut Yml0bWFwICcrLWZyaW5nZS1lbXB0eS1saW5lICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4u Li4uLi4iCiIuLnh4eHguLiIKIi4uLi4uLi4uIgoiLi4uLi4uLi4iCiIuLnh4eHguLiIKIi4uLi4u Li4uIikgbmlsIG5pbCAnKHRvcCB0KSkKCihkZWZmYWNlICstZnJpbmdlLWVtcHR5LWxpbmUtZmFj ZQogICcoKHQgKDpmb3JlZ3JvdW5kICJEYXJrR3JlZW4iKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5n ZS1lbXB0eS1saW5lLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1h cC1mYWNlICcrLWZyaW5nZS1lbXB0eS1saW5lICcrLWZyaW5nZS1lbXB0eS1saW5lLWZhY2UpCgo7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCihwcm92aWRlICdjcm9zc2hhaXJzKQ== --Multipart_Tue_Jul_17_12:09:17_2018-1--