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.devel Subject: Re: Problems with move_it_in_display_line_to X when tabs exist. Date: Sun, 03 Dec 2017 12:56:49 -0800 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Sun_Dec__3_12:56:49_2017-1" X-Trace: blaine.gmane.org 1512334692 30632 195.159.176.226 (3 Dec 2017 20:58:12 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 3 Dec 2017 20:58:12 +0000 (UTC) Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Dec 03 21:58:07 2017 Return-path: Envelope-to: ged-emacs-devel@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 1eLbKt-0007Sy-DG for ged-emacs-devel@m.gmane.org; Sun, 03 Dec 2017 21:58:05 +0100 Original-Received: from localhost ([::1]:40179 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eLbL0-0001fT-Qq for ged-emacs-devel@m.gmane.org; Sun, 03 Dec 2017 15:58:10 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40868) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eLbK2-0007kt-T4 for emacs-devel@gnu.org; Sun, 03 Dec 2017 15:57:12 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eLbJy-0005Vv-Ts for emacs-devel@gnu.org; Sun, 03 Dec 2017 15:57:10 -0500 Original-Received: from gateway20.websitewelcome.com ([192.185.65.13]:39777) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eLbJx-0005Pp-Ml for emacs-devel@gnu.org; Sun, 03 Dec 2017 15:57:06 -0500 Original-Received: from cm13.websitewelcome.com (cm13.websitewelcome.com [100.42.49.6]) by gateway20.websitewelcome.com (Postfix) with ESMTP id 9267D400C50D1 for ; Sun, 3 Dec 2017 14:56:52 -0600 (CST) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id LbJjeH3GqBUMKLbJkeVMM5; Sun, 03 Dec 2017 14:56:52 -0600 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=0UPqAM1dX61RcT/C8/2Fb0Y7KaHaOqV2WLxdJKOQfls=; b=P9t9VMGLWoRzXcYAkK9nKfRLBJ 5ycKi6yb9mZbrskgEWCi5mt+7sl+Td2PGs1TvCt3g5HGFo8WFq6k+XWPwD9rrkwIf3Z+nGuOlUMUM SE4xRbvxygr4O5kz0LxvY0f7kUv+xn8cZGSMmG1jiZYk+NYGRsVqwKjW034Do/CqTSS3F2KY9TaeH tCeQ/lVhI99o1xySzoxdTMgg9l7KLkHBHO5OXRS/BLQYSgBVEciRUs/NpAGocPq/KCvNffpvoPrNG sBnJ6+boe0+moTWO6KXKBPgylzJmbSpgxh/lnAoy2FsviLqfel2CuezeNqjf12y7iNxi4tW0oUgDB 7GPjcTTg==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:52273 helo=server.private) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.89) (envelope-from ) id 1eLbJi-001aWb-Jz; Sun, 03 Dec 2017 14:56:51 -0600 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 - 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: 1eLbJi-001aWb-Jz X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.private) [45.48.239.195]:52273 X-Source-Auth: lawlist X-Email-Count: 1 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 192.185.65.13 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:220662 Archived-At: --Multipart_Sun_Dec__3_12:56:49_2017-1 Content-Type: text/plain; charset=US-ASCII Thank you, Eli, for trying to reproduce the current issue. The good news is that I was able to reproduce the issue with Emacs 26, dated today (12/03/2017), bearing last commit 1fdac2d65c7134a2e1261bf7ad32d275f37da0dc. The bad news is that my recipe is cumbersome. In the coming days, I will work on developing a less cumbersome recipe. For the issue to be present, the tab STRETCH must _visibly_ be 2 columns wide _and_ the tab CHARACTER must be 1 column wide, for a grand total of 3 columns. The variable tab-width is exactly 2. The preceding long line must have a space at the window edge; and, the following line contains a second word with just "xxx", a tab, followed by some letters like "hello-world". This evening (after work), I will experiment using your recipe in the most recent email (below). I can also build Emacs 26 on Windows and compare the results to Emacs 26 on OSX 10.6.8 (which is what I currently use). Here is my complete recipe for Emacs 26: 0. Screen-shot taken today: https://lawlist.com/images/pgrowx_b.png 1. Apply the attached patch.diff, and build a modified Emacs 26. I am using the following settings: CFLAGS='-O0 -g3' ./configure \ --with-ns \ --enable-checking='yes,glyphs' \ --enable-check-lisp-object-type \ --without-compress-install \ --without-makeinfo \ --with-gnutls=no \ --with-mailutils \ --without-makeinfo 2. Launch the newly built modified Emacs 26 in gdb. 3. Open the attached Lisp library named +-mode.el and evaluate the entire buffer. 4. Open the attached .scratch file; place the cursor at the end of the buffer; and type M-x +-mode [If the default font is different than Emacs 26 on OSX 10.6.8, then the long line will need to be adjusted such that the last character at the right window edge is a space.] 5. In the gdb debugger select the frame that threw the hard-code emacs_abort and run the tests that we have been using: Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=40) at emacs.c:364 364 signal (sig, SIG_DFL); (gdb) frame 2 #2 0x000000010002d244 in mc_draw_crosshairs (w=0x103be7038) at xdisp.c:1918 1918 emacs_abort (); (gdb) pgrowx glyph_row [New Thread 0x1d0b of process 25723] TEXT: 17 glyphs 0 0: CHAR[x] pos=1099 blev=0,btyp=L w=7 a+d=12+4 MB 1 7: CHAR[x] pos=1100 blev=0,btyp=L w=7 a+d=12+4 MB 2 14: CHAR[x] pos=1101 blev=0,btyp=L w=7 a+d=12+4 MB 3 21: CHAR[0xbb] pos=1102 blev=0,btyp=L w=7 a+d=12+4 face=36 MB 4 28: STRETCH[16+12] pos=1102 w=14 a+d=12+4 face=35 MB 5 42: CHAR[h] pos=1103 blev=0,btyp=L w=7 a+d=12+4 MB 6 49: CHAR[e] pos=1104 blev=0,btyp=L w=7 a+d=12+4 MB 7 56: CHAR[l] pos=1105 blev=0,btyp=L w=7 a+d=12+4 MB 8 63: CHAR[l] pos=1106 blev=0,btyp=L w=7 a+d=12+4 MB 9 70: CHAR[o] pos=1107 blev=0,btyp=L w=7 a+d=12+4 MB 10 77: CHAR[-] pos=1108 blev=0,btyp=L w=7 a+d=12+4 MB 11 84: CHAR[w] pos=1109 blev=0,btyp=L w=7 a+d=12+4 MB 12 91: CHAR[o] pos=1110 blev=0,btyp=L w=7 a+d=12+4 MB 13 98: CHAR[r] pos=1111 blev=0,btyp=L w=7 a+d=12+4 MB 14 105: CHAR[l] pos=1112 blev=0,btyp=L w=7 a+d=12+4 MB 15 112: CHAR[d] pos=1113 blev=0,btyp=L w=7 a+d=12+4 MB 16 119: CHAR[ ] pos=0 blev=0,btyp=B w=7 a+d=12+4 MB (gdb) print it.c $1 = 9 (gdb) print it.pixel_width $2 = 7 (gdb) print it.what $3 = IT_CHARACTER (gdb) print it.method $4 = GET_FROM_DISPLAY_VECTOR (gdb) print it.current_x $5 = 28 (gdb) print it.char_to_display $6 = 9 (gdb) print it.method ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATE: [12-03-2017 06:29:57] <03 Dec 2017 16:29:57 +0200> FROM: Eli Zaretskii > > > Date: Sat, 02 Dec 2017 19:38:51 -0800 > > From: Keith David Bershatsky > > Cc: emacs-devel@gnu.org > > > > The five faces were set up with the built-in defface macro. I set the buffer-display-table with setq and the following variable: > > > > (defvar +-buffer-display-table > > (let* ( > > (display-table (make-display-table)) > > (ff-char > > (cond > > ((eq system-type 'darwin) > > ?\U0001D4D5) > > ((eq system-type 'windows-nt) > > ?\u0046))) > > (glyph-form-feed (make-glyph-code ff-char '+-form-feed-face)) > > (glyph-pilcrow (make-glyph-code ?\u00B6 '+-newline-face)) > > (glyph-space (make-glyph-code ?\u00B7 '+-space-face)) > > (glyph-tab (make-glyph-code ?\u00BB '+-tab-face)) > > (glyph-tab-spacer (make-glyph-code ?\t '+-tab-spacer-face))) > > (aset display-table ?\n `[,glyph-pilcrow ?\n]) > > (aset display-table ?\f `[,glyph-form-feed]) > > (aset display-table ?\t `[,glyph-tab ,glyph-tab-spacer]) > > (aset display-table ?\s `[,glyph-space]) > > display-table) > > "The `buffer-display-table' that is used when `+-mode' is active.") > > I cannot reproduce your problem with the latest emacs-26 branch. > > The above snippet leaves a lot undefined, so I simulated that as > follows: > > (setq buffer-display-table (make-display-table)) > (aset buffer-display-table > ?\t > (vector (make-glyph-code ?\u00BB 'font-lock-warning-face) > (make-glyph-code ?\t 'fringe))) > (setq word-wrap t) > (set tab-width 2) > > Then I inserted a long line as you described, arranging for its second > screen line to start with "xxx" followed by a TAB. > > Then I emulated your calls to move_it_in_display_line_to by setting > visual-order-cursor-movement to t, putting the cursor on the 0xBB > character which depicts the TAB, and typing "M-x right-char RET". > If I set a breakpoint in xdisp.c:22746, which is here: > > else if (it.current_x != target_x) > move_it_in_display_line_to (&it, ZV, target_x, MOVE_TO_POS | MOVE_TO_X); > > I see that this call returns with it.current on the stretch glyph > following the 0xBB character, and with it.pixel_width set correctly to > the width of the stretch glyph. > > So I think either you call move_it_in_display_line_to in some way that > is different from the above, or there's something else you didn't tell > in your recipe. --Multipart_Sun_Dec__3_12:56:49_2017-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCBjNmY5ZWIyLi42 ODU5MzIwIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC01 MTI2LDYgKzUxMjYsMTUgQEAgaW5pdF9idWZmZXJfb25jZSAodm9pZCkKICAgYnNldF9sYXN0X3Nl bGVjdGVkX3dpbmRvdyAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbWFrZV9udW1iZXIgKDApKTsKIAog ICBpZHggPSAxOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3Jz ICovCisKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1jX2dseXBo X2xpc3QpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxf ZmxhZ3MsIGNyb3NzaGFpcnMpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZi dWZmZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIGlkeCk7ICsr aWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWly c192ZXJ0aWNhbF9ydWxlciksIGlkeCk7ICsraWR4OworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1vZGVfbGluZV9m b3JtYXQpLCBpZHgpOyArK2lkeDsKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxf ZmxhZ3MsIGFiYnJldl9tb2RlKSwgaWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgm YnVmZmVyX2xvY2FsX2ZsYWdzLCBvdmVyd3JpdGVfbW9kZSksIGlkeCk7ICsraWR4OwpAQCAtNTIw NSw2ICs1MjE0LDE1IEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpCiAgIC8qIE11c3QgZG8gdGhl c2UgYmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgYnVmZmVyISAqLwogCiAgIC8qIHJlYWwgc2V0dXAg aXMgZG9uZSBpbiBiaW5kaW5ncy5lbCAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBt dWx0aXBsZSBjdXJzb3JzICovCisKKyAgYnNldF9ibHZfbWNfZ2x5cGhfbGlzdCAoJmJ1ZmZlcl9k ZWZhdWx0cywgUW5pbCk7CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnMgKCZidWZmZXJfZGVmYXVsdHMs IFFuaWwpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIgKCZidWZmZXJf ZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9ibHZfY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlciAoJmJ1 ZmZlcl9kZWZhdWx0cywgUXQpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICAgYnNldF9t b2RlX2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBidWlsZF9wdXJlX2Nfc3RyaW5nICgi JS0iKSk7CiAgIGJzZXRfaGVhZGVyX2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBRbmls KTsKICAgYnNldF9hYmJyZXZfbW9kZSAoJmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7CkBAIC01NDUz LDYgKzU0NzEsMTYgQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIHN0YXRpY3BybyAoJlFTRnVu ZGFtZW50YWwpOwogICBzdGF0aWNwcm8gKCZWYnVmZmVyX2FsaXN0KTsKIAorLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgREVGU1lNIChRbWNfZ2x5 cGhfbGlzdCwgIm1jLWdseXBoLWxpc3QiKTsKKyAgREVGU1lNIChRY3Jvc3NoYWlycywgImNyb3Nz aGFpcnMiKTsKKyAgREVGU1lNIChRY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyLCAiY3Jvc3No YWlycy1ob3Jpem9udGFsLXJ1bGVyIik7CisgIERFRlNZTSAoUWNyb3NzaGFpcnNfdmVydGljYWxf cnVsZXIsICJjcm9zc2hhaXJzLXZlcnRpY2FsLXJ1bGVyIik7CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCiAgIERFRlNZTSAoUWNob2ljZSwgImNob2ljZSIpOwogICBERUZTWU0gKFFsZWZ0 LCAibGVmdCIpOwogICBERUZTWU0gKFFyaWdodCwgInJpZ2h0Iik7CkBAIC01NDkwLDYgKzU1MTgs MjQgQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIEZwdXQgKFFwcm90ZWN0ZWRfZmllbGQsIFFl cnJvcl9tZXNzYWdlLAogCWJ1aWxkX3B1cmVfY19zdHJpbmcgKCJBdHRlbXB0IHRvIG1vZGlmeSBh IHByb3RlY3RlZCBmaWVsZCIpKTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0 aXBsZSBjdXJzb3JzICovCisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJtYy1nbHlwaC1saXN0Iiwg JkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtY19nbHlwaF9saXN0KSwgUW5pbCwKKyAgICBkb2M6IC8q IEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBtdWx0aXBs ZSBjdXJzb3JzIHRvIGJlIGRpc3BsYXllZAorZHVyaW5nIHRoZSBuZXh0IHJlZGlzcGxheS4gICov KTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNyb3NzaGFpcnMiLCAmQlZBUiAoY3VycmVudF9i dWZmZXIsIGNyb3NzaGFpcnMpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJp YWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIGNyb3NzaGFpcnMuICAqLyk7CisKKyAgREVGVkFS X1BFUl9CVUZGRVIgKCJjcm9zc2hhaXJzLWhvcml6b250YWwtcnVsZXIiLCAmQlZBUiAoY3VycmVu dF9idWZmZXIsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIFFuaWwsCisgICAgZG9jOiAv KiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhlIGNyb3Nz aGFpcnMgaG9yaXpvbnRhbCBydWxlci4gICovKTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNy b3NzaGFpcnMtdmVydGljYWwtcnVsZXIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNyb3NzaGFp cnNfdmVydGljYWxfcnVsZXIpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJp YWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHRoZSBjcm9zc2hhaXJzIHZlcnRpY2FsIHJ1bGVy LiAgKi8pOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICBERUZWQVJfUEVSX0JVRkZF UiAoImhlYWRlci1saW5lLWZvcm1hdCIsCiAJCSAgICAgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBo ZWFkZXJfbGluZV9mb3JtYXQpLAogCQkgICAgIFFuaWwsCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVy LmggYi9zcmMvYnVmZmVyLmgKaW5kZXggNDZjN2M2ZS4uOGJkZTk1ZSAxMDA2NDQKLS0tIGEvc3Jj L2J1ZmZlci5oCisrKyBiL3NyYy9idWZmZXIuaApAQCAtNjU4LDYgKzY1OCwyMyBAQCBzdHJ1Y3Qg YnVmZmVyCiAgICAgIGNhY2hlIGFyZSBlbmFibGVkLiAgU2VlIHNlYXJjaC5jLCBpbmRlbnQuYyBh bmQgYmlkaS5jIGZvciBkZXRhaWxzLiAgKi8KICAgTGlzcF9PYmplY3QgY2FjaGVfbG9uZ19zY2Fu c187CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLwor CisgIC8qIFRoZSBuYW1lIG9mIGxpc3QgdXNlZCBieSBtdWx0aXBsZSBjdXJzb3JzIGZvciBuZXh0 IHJlZGlzcGxheS4gICovCisgIExpc3BfT2JqZWN0IG1jX2dseXBoX2xpc3RfOworCisgIC8qIFRo ZSBuYW1lIG9mIGxpc3QuICAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJzXzsKKworICAvKiBU aGUgbmFtZSBvZiB0aGUgY3Jvc3NoYWlycyBob3Jpem9udGFsIHJ1bGVyLiAgKi8KKyAgTGlzcF9P YmplY3QgY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyXzsKKworICAvKiBUaGUgbmFtZSBvZiB0 aGUgY3Jvc3NoYWlycyB2ZXJ0aWNhbCBydWxlci4gICovCisgIExpc3BfT2JqZWN0IGNyb3NzaGFp cnNfdmVydGljYWxfcnVsZXJfOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICAvKiBJ ZiB0aGUgd2lkdGggcnVuIGNhY2hlIGlzIGVuYWJsZWQsIHRoaXMgdGFibGUgY29udGFpbnMgdGhl CiAgICAgIGNoYXJhY3RlciB3aWR0aHMgd2lkdGhfcnVuX2NhY2hlIChzZWUgYWJvdmUpIGFzc3Vt ZXMuICBXaGVuIHdlCiAgICAgIGRvIGEgdGhvcm91Z2ggcmVkaXNwbGF5LCB3ZSBjb21wYXJlIHRo aXMgYWdhaW5zdCB0aGUgYnVmZmVyJ3MKQEAgLTkxOCw2ICs5MzUsMzYgQEAgWEJVRkZFUiAoTGlz cF9PYmplY3QgYSkKIC8qIE1vc3QgY29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBz ZXQgTGlzcCBmaWVsZHMgaW4gc3RydWN0CiAgICBidWZmZXIuICAoU29tZSBzZXR0ZXJzIHRoYXQg YXJlIHByaXZhdGUgdG8gYSBzaW5nbGUgLmMgZmlsZSBhcmUKICAgIGRlZmluZWQgYXMgc3RhdGlj IGluIHRob3NlIGZpbGVzLikgICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVs dGlwbGUgY3Vyc29ycyAqLworCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbWNfZ2x5cGhfbGlzdCAo c3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5tY19nbHlwaF9saXN0 XyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2Nyb3NzaGFpcnMgKHN0cnVjdCBi dWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+Y3Jvc3NoYWlyc18gPSB2YWw7Cit9 CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIgKHN0 cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+Y3Jvc3NoYWlyc19ob3Jp em9udGFsX3J1bGVyXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2Nyb3NzaGFp cnNfdmVydGljYWxfcnVsZXIgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sK KyAgYi0+Y3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlcl8gPSB2YWw7Cit9CisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCiBJTkxJTkUgdm9pZAogYnNldF9iaWRpX3BhcmFncmFwaF9kaXJlY3Rp b24gKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKIHsKZGlmZiAtLWdpdCBhL3Ny Yy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDQzMGFmYmYuLmYxZDU0MTUg MTAwNjQ0Ci0tLSBhL3NyYy9kaXNwZXh0ZXJuLmgKKysrIGIvc3JjL2Rpc3BleHRlcm4uaApAQCAt Mjg4OSw3ICsyODg5LDEzIEBAIHN0cnVjdCByZWRpc3BsYXlfaW50ZXJmYWNlCiAJCQkgICAgICBz dHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csCiAJCQkgICAgICBpbnQgeCwgaW50IHksCiAJCQkg ICAgICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlLAotCQkJICAgICAgaW50IGN1 cnNvcl93aWR0aCwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9wKTsKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisgICAgICAgICBpbnQgY3Vyc29yX3dp ZHRoLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3AsCisgICAgICAgICBMaXNwX09iamVjdCBjb2xv cl92ZWN0b3IsIExpc3BfT2JqZWN0IGZsYXZvcik7CisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LwogCiAgIC8qIERyYXcgdmVydGljYWwgYm9yZGVyIGZvciB3aW5kb3cgVyBmcm9tIChYLFlfMCkg dG8gKFgsWV8xKS4gICovCiAgIHZvaWQgKCpkcmF3X3ZlcnRpY2FsX3dpbmRvd19ib3JkZXIpIChz dHJ1Y3Qgd2luZG93ICp3LApAQCAtMzI3NCw2ICszMjgwLDEzIEBAIGV4dGVybiB2b2lkIGdldF9m b250X2FzY2VudF9kZXNjZW50IChzdHJ1Y3QgZm9udCAqLCBpbnQgKiwgaW50ICopOwogCiAjaWZk ZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVs dGlwbGUgY3Vyc29ycyAqLworCit2b2lkIG1jX3BvcnRhbCAoc3RydWN0IHdpbmRvdyAqLCBib29s KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKICNpZmRlZiBHTFlQSF9ERUJVRwogZXh0 ZXJuIHZvaWQgZHVtcF9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKikgRVhURVJO QUxMWV9WSVNJQkxFOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZnJpbmdlLmMgYi9zcmMvZnJp bmdlLmMKaW5kZXggMDg3ZWYzMy4uMTAzYmJiNiAxMDA2NDQKLS0tIGEvc3JjL2ZyaW5nZS5jCisr KyBiL3NyYy9mcmluZ2UuYwpAQCAtNDMxLDYgKzQzMSwyMjQgQEAgc3RhdGljIHVuc2lnbmVkIHNo b3J0IGVtcHR5X2xpbmVfYml0c1tdID0gewogICAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDNj LCAweDAwLCAweDAwLCAweDNjLCAweDAwLAogICAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDNj LCAweDAwLCAweDAwLCAweDNjLCAweDAwfTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBtdWx0aXBsZSBjdXJzb3JzCisKKy8qICA7OyBBVVRIT1I6ICBOaWtvbGFqIFNjaHVtYWNoZXIg LS0gaHR0cHM6Ly9naXRodWIuY29tL25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCisgICAgKGRlZnVu ICstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKKyAgICAiQ29udmVy dCBTVFJJTkdTIGludG8gYSB2ZWN0b3IgdXNhYmxlIGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAn LgorICAgIEVhY2ggc3RyaW5nIGluIFNUUklOR1MgcmVwcmVzZW50cyBhIGxpbmUgb2YgdGhlIGZy aW5nZSBiaXRtYXAuCisgICAgUGVyaW9kcyAoLikgYXJlIGJhY2tncm91bmQtY29sb3JlZCBwaXhl bDsgWHMgYXJlIGZvcmVncm91bmQtY29sb3JlZC4gVGhlCisgICAgZnJpbmdlIGJpdG1hcCBhbHdh eXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYKKyAgICB3 aWR0aCwgb25seSB0aGUgbGVmdCA0IHBpeGVscyBvZiBhbiA4IHBpeGVsIGJpdG1hcCB3aWxsIGJl IHNob3duLgorICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgZGVmaW5lcyBhIGRp YWdvbmFsIGxpbmUuCisgICAgXCgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICBcIlhY Li4uLi4uXCIKKyAgICBcIi4uWFguLi4uXCIKKyAgICBcIi4uLi5YWC4uXCIKKyAgICBcIi4uLi4u LlhYXCJcKSIKKyAgICAgICh1bmxlc3MgKGNkciBzdHJpbmdzKQorICAgICAgICAoc2V0cSBzdHJp bmdzIChzcGxpdC1zdHJpbmcgKGNhciBzdHJpbmdzKSAiXG4iKSkpCisgICAgICAoYXBwbHkgJ3Zl Y3RvcgorICAgICAgICAobWFwY2FyCisgICAgICAgICAgKGxhbWJkYSAoc3RyKQorICAgICAgICAg ICAgKGxldCAoKG51bSAwKSkKKyAgICAgICAgICAgICAgKGRvbGlzdCAoYyAoc3RyaW5nLXRvLWxp c3Qgc3RyKSkKKyAgICAgICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEg YyA/LikgMCAxKSkpKQorICAgICAgICAgICAgICAoZm9ybWF0ICIlIy14IiBudW0pKSkKKyAgICAg ICAgICBzdHJpbmdzKSkpCisqLworCisvKiAyNAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRl Y2ltYWwKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4u LiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li4uLnh4LiIK KyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Li4uLnh4LiIKKyAg ICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAg ICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0 IG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZV9iaXRzW10gPXsKKyAgMHg4MCwgMHg4MCwgMHg4 MCwgMHg5OCwgMHg4YywgMHg4NiwgMHhiZiwKKyAgMHhiZiwgMHg4NiwgMHg4YywgMHg5OCwgMHg4 MCwgMHg4MCwgMHg4MH07CisKKy8qIDI1CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgInh4eHh4eHh4IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54Igor ICAgICAgInguLnh4Li54IgorICAgICAgInguLi54eC54IgorICAgICAgInguLi4ueHh4IgorICAg ICAgIngueHh4eHh4IgorICAgICAgIngueHh4eHh4IgorICAgICAgInguLi4ueHh4IgorICAgICAg InguLi54eC54IgorICAgICAgInguLnh4Li54IgorICAgICAgInguLi4uLi54IgorICAgICAgIngu Li4uLi54IgorICAgICAgInh4eHh4eHh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNf aG9sbG93X3JlY3RhbmdsZV9yaWdodF9hbmdsZV9iaXRzW10gPXsKKyAgMHhmZiwgMHg4MSwgMHg4 MSwgMHg5OSwgMHg4ZCwgMHg4NywgMHhiZiwKKyAgMHhiZiwgMHg4NywgMHg4ZCwgMHg5OSwgMHg4 MSwgMHg4MSwgMHhmZn07CisKKy8qIDI2CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgInh4eHh4eHh4IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54Igor ICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAg ICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAg InguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgIngu Li4uLi54IgorICAgICAgInh4eHh4eHh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNf aG9sbG93X3JlY3RhbmdsZV9iaXRzW10gPXsKKyAgMHhmZiwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4 MSwgMHg4MSwgMHg4MSwKKyAgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHhm Zn07CisKKy8qIDI3CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIngu Li4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4u Li4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4u IgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgor ICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAg ICAgInguLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdmVydGljYWxfYmFy X2JpdHNbXSA9eworICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLAor ICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfTsKKworLyogMjgKKyAg ICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHguLi4uLi4iCisgICAgICAi Lnh4Li4uLi4iCisgICAgICAiLi54eC4uLi4iCisgICAgICAiLi4ueHguLi4iCisgICAgICAiLi4u Lnh4Li4iCisgICAgICAiLi4uLi54eC4iCisgICAgICAiLi4uLi4ueHgiCisgICAgICAiLi4uLi54 eC4iCisgICAgICAiLi4uLnh4Li4iCisgICAgICAiLi4ueHguLi4iCisgICAgICAiLi54eC4uLi4i CisgICAgICAiLnh4Li4uLi4iCisgICAgICAieHguLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25l ZCBzaG9ydCBtY19yaWdodF9hbmdsZV9iaXRzW10gPXsKKyAgMHhjMCwgMHg2MCwgMHgzMCwgMHgx OCwgMHhjLCAweDYsIDB4MywgMHg2LCAweGMsIDB4MTgsIDB4MzAsIDB4NjAsIDB4YzB9OworCisv KiAyOQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eC4uLi4uLiIK KyAgICAgICJ4eC4uLi4uLiIKKyAgICAgICIgeHguLi4uLiIKKyAgICAgICIueHguLi4uLiIKKyAg ICAgICIuLnh4Li4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAg ICIuLi54eC4uLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIu Li4uLnh4LiIKKyAgICAgICIuLi4uLnh4LiIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4u Li54eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2JhY2tzbGFzaF9iaXRzW10gPXsK KyAgMHhjMCwgMHhjMCwgMHhlMCwgMHg2MCwgMHgzMCwgMHgzMCwgMHgxOCwgMHgxOCwgMHhjLCAw eGMsIDB4NiwgMHg2LCAweDMsIDB4M307CisKKy8qIDMwCisgICAgKCstZnJpbmdlLWhlbHBlci1o ZXhhZGVjaW1hbAorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4 eC4uLi4uIgorICAgICAgInh4eC4uLi4uIgorICAgICAgIngueHguLi4uIgorICAgICAgIngueHgu Li4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4u IgorICAgICAgInguLi54eC4uIgorICAgICAgInguLi4ueHguIgorICAgICAgInguLi4ueHguIgor ICAgICAgInguLi4uLnh4IgorICAgICAgInguLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwg MHhlMCwgMHhlMCwgMHhiMCwgMHhiMCwgMHg5OCwKKyAgMHg5OCwgMHg4YywgMHg4YywgMHg4Niwg MHg4NiwgMHg4MywgMHg4M307CisKKy8qIDMxCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj aW1hbAorICAgICAgIi54eHh4eHguIgorICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4u IgorICAgICAgInh4eHgueC4uIgorICAgICAgIi54eHgueC4uIgorICAgICAgIi4uLngueC4uIgor ICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAg ICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hv cnQgbWNfcGlsY3Jvd19iaXRzW10gPXsKKyAgMHg3ZSwgMHhmNCwgMHhmNCwgMHhmNCwgMHg3NCwg MHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNH07CisKKy8qIDMyCisgICAgKCstZnJp bmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4Lnh4Li4uIgorICAgICAgIi54eC54eC4u IgorICAgICAgIi4ueHgueHguIgorICAgICAgIi4uLnh4Lnh4IgorICAgICAgIi4ueHgueHguIgor ICAgICAgIi54eC54eC4uIgorICAgICAgInh4Lnh4Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWNfcmlnaHRfZG91YmxlX2FuZ2xlX2JpdHNbXSA9eworICAweGQ4LCAweDZjLCAweDM2 LCAweDFiLCAweDM2LCAweDZjLCAweGQ4fTsKKworLyogMzMKKyAgICAoKy1mcmluZ2UtaGVscGVy LWhleGFkZWNpbWFsCisgICAgICAiLi54eHh4Li4iCisgICAgICAiLnh4eHh4eC4iCisgICAgICAi eC4ueHguLngiCisgICAgICAieC4ueHguLngiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieHgu Li4ueHgiCisgICAgICAieHh4Li54eHgiCisgICAgICAiLnh4eHh4eC4iCisgICAgICAiLi54eHh4 Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zbWlsZXlfZmFjZV9iaXRzW10gPXsK KyAgMHgzYywgMHg3ZSwgMHg5OSwgMHg5OSwgMHhmZiwgMHhjMywgMHhlNywgMHg3ZSwgMHgzY307 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAjZGVmaW5lIEJZVEVTX1BFUl9CSVRNQVBf Uk9XICAoc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCkpCiAjZGVmaW5lIFNUQU5EQVJEX0JJVE1BUF9I RUlHSFQoYml0cykgKHNpemVvZiAoYml0cykvQllURVNfUEVSX0JJVE1BUF9ST1cpCkBAIC00NjUs NiArNjgzLDMxIEBAIHN0YXRpYyBzdHJ1Y3QgZnJpbmdlX2JpdG1hcCBzdGFuZGFyZF9iaXRtYXBz W10gPQogICB7IEZSQklUUyAodmVydGljYWxfYmFyX2JpdHMpLCAgICAgICA4LCAwLCBBTElHTl9C SVRNQVBfQ0VOVEVSLCAwIH0sCiAgIHsgRlJCSVRTIChob3Jpem9udGFsX2Jhcl9iaXRzKSwgICAg IDgsIDAsIEFMSUdOX0JJVE1BUF9CT1RUT00sIDAgfSwKICAgeyBGUkJJVFMgKGVtcHR5X2xpbmVf Yml0cyksICAgICAgICAgOCwgMywgQUxJR05fQklUTUFQX1RPUCwgICAgMCB9LAorLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgLyogMjQgKi8KKyAg eyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZV9iaXRzKSwgICAgIDgsIDAsIEFM SUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjUgKi8KKyAgeyBGUkJJVFMgKG1jX2hvbGxv d19yZWN0YW5nbGVfcmlnaHRfYW5nbGVfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIs IDAgfSwKKyAgLyogMjYgKi8KKyAgeyBGUkJJVFMgKG1jX2hvbGxvd19yZWN0YW5nbGVfYml0cyks ICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjcgKi8K KyAgeyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iaXRzKSwgICAgICAgICAgICAgICAgIDgsIDAs IEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjggKi8KKyAgeyBGUkJJVFMgKG1jX3Jp Z2h0X2FuZ2xlX2JpdHMpLCAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwK KyAgLyogMjkgKi8KKyAgeyBGUkJJVFMgKG1jX2JhY2tzbGFzaF9iaXRzKSwgICAgICAgICAgICAg ICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzAgKi8KKyAgeyBG UkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2hfYml0cyksICAgICAgIDgsIDAsIEFMSUdO X0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzEgKi8KKyAgeyBGUkJJVFMgKG1jX3BpbGNyb3df Yml0cyksICAgICAgICAgICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAg fSwKKyAgLyogMzIgKi8KKyAgeyBGUkJJVFMgKG1jX3JpZ2h0X2RvdWJsZV9hbmdsZV9iaXRzKSwg ICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzMgKi8KKyAg eyBGUkJJVFMgKG1jX3NtaWxleV9mYWNlX2JpdHMpLCAgICAgICAgICAgICAgICAgIDgsIDAsIEFM SUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiB9Owog CiAjZGVmaW5lIE5PX0ZSSU5HRV9CSVRNQVAgMApAQCAtMTcyMiw2ICsxOTY1LDc1IEBAIElmIG5p bCwgYWxzbyBjb250aW51ZSBsaW5lcyB3aGljaCBhcmUgZXhhY3RseSBhcyB3aWRlIGFzIHRoZSB3 aW5kb3cuICAqLyk7CiAgIERFRlZBUl9MSVNQICgiZnJpbmdlLWJpdG1hcHMiLCBWZnJpbmdlX2Jp dG1hcHMsCiAgICAgZG9jOiAvKiBMaXN0IG9mIGZyaW5nZSBiaXRtYXAgc3ltYm9scy4gICovKTsK ICAgVmZyaW5nZV9iaXRtYXBzID0gUW5pbDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgLyogKGdldCAnZW1wdHktbGluZSAnZnJpbmdlKSA9 PiAyMyA9PiB0aGUgbGFzdCBzdGFuZGFyZC1iaXRtYXAgYmVmb3JlIHRoaXMgb25lLgorICBTZWUg YGZyaW5nZS5lbGAuICovCisKKyAgLyogMjQgKi8KKyAgREVGU1lNIChRbWNfdmVydGljYWxfYmFy X3JpZ2h0X2FuZ2xlLCAiKy12ZXJ0aWNhbC1iYXItcmlnaHQtYW5nbGUiKTsKKyAgVmZyaW5nZV9i aXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYW5nbGUsIFZmcmluZ2VfYml0 bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYW5nbGUsIFFmcmluZ2UsIG1h a2VfbnVtYmVyICgyNCkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJhci1yaWdodC1hbmdsZSAn ZnJpbmdlKSA9PiAyNCAqLworCisgIC8qIDI1ICovCisgIERFRlNZTSAoUW1jX2hvbGxvd19yZWN0 YW5nbGVfcmlnaHRfYW5nbGUsICIrLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYW5nbGUiKTsKKyAg VmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2FuZ2xl LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9h bmdsZSwgUWZyaW5nZSwgbWFrZV9udW1iZXIgKDI1KSk7CisgIC8qIChnZXQgJystaG9sbG93LXJl Y3RhbmdsZS1yaWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyNSAqLworCisgIC8qIDI2ICovCisgIERF RlNZTSAoUW1jX2hvbGxvd19yZWN0YW5nbGUsICIrLWhvbGxvdy1yZWN0YW5nbGUiKTsKKyAgVmZy aW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVjdGFuZ2xlLCBWZnJpbmdlX2JpdG1h cHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3RhbmdsZSwgUWZyaW5nZSwgbWFrZV9udW1iZXIg KDI2KSk7CisgIC8qIChnZXQgJystaG9sbG93LXJlY3RhbmdsZSAnZnJpbmdlKSA9PiAyNiAqLwor CisgIC8qIDI3ICovCisgIERFRlNZTSAoUW1jX3ZlcnRpY2FsX2JhciwgIistdmVydGljYWwtYmFy Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFyLCBWZnJpbmdl X2JpdG1hcHMpOworICBGcHV0IChRbWNfdmVydGljYWxfYmFyLCBRZnJpbmdlLCBtYWtlX251bWJl ciAoMjcpKTsKKyAgLyogKGdldCAnKy12ZXJ0aWNhbC1iYXIgJ2ZyaW5nZSkgPT4gMjcgKi8KKwor ICAvKiAyOCAqLworICBERUZTWU0gKFFtY19yaWdodF9hbmdsZSwgIistcmlnaHQtYW5nbGUiKTsK KyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19yaWdodF9hbmdsZSwgVmZyaW5nZV9iaXRt YXBzKTsKKyAgRnB1dCAoUW1jX3JpZ2h0X2FuZ2xlLCBRZnJpbmdlLCBtYWtlX251bWJlciAoMjgp KTsKKyAgLyogKGdldCAnKy1yaWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyOCAqLworCisgIC8qIDI5 ICovCisgIERFRlNZTSAoUW1jX2JhY2tzbGFzaCwgIistYmFja3NsYXNoIik7CisgIFZmcmluZ2Vf Yml0bWFwcyA9IEZjb25zIChRbWNfYmFja3NsYXNoLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0 IChRbWNfYmFja3NsYXNoLCBRZnJpbmdlLCBtYWtlX251bWJlciAoMjkpKTsKKyAgLyogKGdldCAn Ky1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMjkgKi8KKworICAvKiAzMCAqLworICBERUZTWU0gKFFt Y192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCAiKy12ZXJ0aWNhbC1iYXItYmFja3NsYXNoIik7Cisg IFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaCwgVmZy aW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gsIFFmcmlu Z2UsIG1ha2VfbnVtYmVyICgzMCkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJhci1iYWNrc2xh c2ggJ2ZyaW5nZSkgPT4gMzAgKi8KKworICAvKiAzMSAqLworICBERUZTWU0gKFFtY19waWxjcm93 LCAiKy1waWxjcm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfcGlsY3Jvdywg VmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3BpbGNyb3csIFFmcmluZ2UsIG1ha2VfbnVt YmVyICgzMSkpOworICAvKiAoZ2V0ICcrLXBpbGNyb3cgJ2ZyaW5nZSkgPT4gMzEgKi8KKworICAv KiAzMiAqLworICBERUZTWU0gKFFtY19yaWdodF9kb3VibGVfYW5nbGUsICIrLXJpZ2h0LWRvdWJs ZS1hbmdsZSIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3JpZ2h0X2RvdWJsZV9h bmdsZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JpZ2h0X2RvdWJsZV9hbmdsZSwg UWZyaW5nZSwgbWFrZV9udW1iZXIgKDMyKSk7CisgIC8qIChnZXQgJystcmlnaHQtZG91YmxlLWFu Z2xlICdmcmluZ2UpID0+IDMyICovCisKKyAgLyogMzMgKi8KKyAgREVGU1lNIChRbWNfc21pbGV5 X2ZhY2UsICIrLXNtaWxleS1mYWNlIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNf c21pbGV5X2ZhY2UsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19zbWlsZXlfZmFjZSwg UWZyaW5nZSwgbWFrZV9udW1iZXIgKDMzKSk7CisgIC8qIChnZXQgJystc21pbGV5LWZhY2UgJ2Zy aW5nZSkgPT4gMzMgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIH0KIAogLyogR2Fy YmFnZSBjb2xsZWN0aW9uIGhvb2sgKi8KZGlmZiAtLWdpdCBhL3NyYy9rZXlib2FyZC5jIGIvc3Jj L2tleWJvYXJkLmMKaW5kZXggNTc3NTdjZi4uMGI1NDQzMyAxMDA2NDQKLS0tIGEvc3JjL2tleWJv YXJkLmMKKysrIGIvc3JjL2tleWJvYXJkLmMKQEAgLTEyNTQsNiArMTI1NCwyNyBAQCBzdGF0aWMg aW50IHJlYWRfa2V5X3NlcXVlbmNlIChMaXNwX09iamVjdCAqLCBpbnQsIExpc3BfT2JqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCk7CiBz dGF0aWMgdm9pZCBhZGp1c3RfcG9pbnRfZm9yX3Byb3BlcnR5IChwdHJkaWZmX3QsIGJvb2wpOwog CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworc3Rh dGljIHZvaWQKK2tiZF9tY19hY3RpdmF0ZV9jdXJzb3JzICh2b2lkKQoreworICBzdHJ1Y3Qgd2lu ZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93IChzZWxlY3RlZF93aW5kb3cpOworICB3LT5tYy5k cmF3X2dseXBoX2N1cnNvciA9IHRydWU7CisgIHctPm1jLmVyYXNlX2dseXBoX2N1cnNvciA9IHRy dWU7Cit9CisKK3N0YXRpYyB2b2lkCitrYmRfbWNfYWN0aXZhdGVfY3Jvc3NoYWlycyAodm9pZCkK K3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRfd2lu ZG93KTsKKyAgdy0+bWMuZHJhd19jcm9zc2hhaXJzID0gdHJ1ZTsKKyAgdy0+bWMuZXJhc2VfY3Jv c3NoYWlycyA9IHRydWU7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiBMaXNwX09i amVjdAogY29tbWFuZF9sb29wXzEgKHZvaWQpCiB7CkBAIC0xNDUwLDYgKzE0NzEsMTMgQEAgY29t bWFuZF9sb29wXzEgKHZvaWQpCiAgICAgICBWcmVhbF90aGlzX2NvbW1hbmQgPSBjbWQ7CiAgICAg ICBzYWZlX3J1bl9ob29rcyAoUXByZV9jb21tYW5kX2hvb2spOwogCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgICAga2JkX21jX2FjdGl2YXRl X2N1cnNvcnMgKCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAgICAgICBhbHJlYWR5 X2FkanVzdGVkID0gMDsKIAogICAgICAgaWYgKE5JTFAgKFZ0aGlzX2NvbW1hbmQpKQpkaWZmIC0t Z2l0IGEvc3JjL25zdGVybS5tIGIvc3JjL25zdGVybS5tCmluZGV4IDUwZTA2YzkuLjk2NzkzNjIg MTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0ubQorKysgYi9zcmMvbnN0ZXJtLm0KQEAgLTExMzQsMTAg KzExMzQsMTIgQEAgc3RhdGljIE5TUmVjdCBjb25zdHJhaW5fZnJhbWVfcmVjdChOU1JlY3QgZnJh bWVSZWN0LCBib29sIGlzRnVsbHNjcmVlbikKICAgICB7CiAgICAgICBibG9ja19pbnB1dCAoKTsK IAotICAgICAgaWYgKGN1cnNvcl9vbl9wKQotCWRpc3BsYXlfYW5kX3NldF9jdXJzb3IgKHcsIDEs Ci0JCQkJdy0+b3V0cHV0X2N1cnNvci5ocG9zLCB3LT5vdXRwdXRfY3Vyc29yLnZwb3MsCi0JCQkJ dy0+b3V0cHV0X2N1cnNvci54LCB3LT5vdXRwdXRfY3Vyc29yLnkpOworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgIG1jX3BvcnRhbCAodywg Y3Vyc29yX29uX3ApOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAogICAgICAgaWYgKGRy YXdfd2luZG93X2ZyaW5nZXMgKHcsIDEpKQogCXsKQEAgLTMwMDUsNyArMzAwNywxMyBAQCBzbyBz b21lIGtleSBwcmVzc2VzIChUQUIpIGFyZSBzd2FsbG93ZWQgYnkgdGhlIHN5c3RlbS4gKi8KIHN0 YXRpYyB2b2lkCiBuc19kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVj dCBnbHlwaF9yb3cgKmdseXBoX3JvdywKIAkJICAgICAgIGludCB4LCBpbnQgeSwgZW51bSB0ZXh0 X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZSwKLQkJICAgICAgIGludCBjdXJzb3Jfd2lkdGgsIGJv b2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVs dGlwbGUgY3Vyc29ycyAqLworCisgIGludCBjdXJzb3Jfd2lkdGgsIGJvb2wgb25fcCwgYm9vbCBh Y3RpdmVfcCwKKyAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVjdCBmbGF2b3Ip CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAg RXh0ZXJuYWwgY2FsbCAoUklGKTogZHJhdyBjdXJzb3IuCiAgICAgIE5vdGUgdGhhdCBDVVJTT1Jf V0lEVEggaXMgbWVhbmluZ2Z1bCBvbmx5IGZvciAoaCliYXIgY3Vyc29ycy4KQEAgLTMwMzksOCAr MzA0NywyOSBAQCBOb3RlIHRoYXQgQ1VSU09SX1dJRFRIIGlzIG1lYW5pbmdmdWwgb25seSBmb3Ig KGgpYmFyIGN1cnNvcnMuCiAKICAgaWYgKChwaHlzX2N1cnNvcl9nbHlwaCA9IGdldF9waHlzX2N1 cnNvcl9nbHlwaCAodykpID09IE5VTEwpCiAgICAgewotICAgICAgaWYgKGdseXBoX3Jvdy0+ZXhh Y3Rfd2luZG93X3dpZHRoX2xpbmVfcAotICAgICAgICAgICYmIHctPnBoeXNfY3Vyc29yLmhwb3Mg Pj0gZ2x5cGhfcm93LT51c2VkW1RFWFRfQVJFQV0pCisKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgIC8qIFRoaXMgbW9kaWZpY2F0aW9u IGVuYWJsZXMgcGxhY2VtZW50IG9mIHRoZSBjdXJzb3ItaW4tZnJpbmdlIGJpdG1hcCB3aGVuCisg ICAgICB0aGUgd2luZG93LXdpZHRoIGlzIHNsaWdodGx5IGxlc3MgdGhhbiBgZ2x5cGhfcm93LT5l eGFjdF93aW5kb3dfd2lkdGhfbGluZV9wYC4KKyAgICAgIFRoaXMgbW9kaWZpY2F0aW9uIGFsc28g cHJldmVudHMgZHJhd2luZyB0aGUgcmVhbCBjdXJzb3Igb24gdGhlIGZyaW5nZSAoaW5zdGVhZAor ICAgICAgb2YgdXNpbmcgdGhlIGN1cnNvci1pbi1mcmluZ2UgYml0bWFwKSBpbiB0aGUgYWJvdmUt bWVudGlvbmVkIGNpcmN1bXN0YW5jZS4KKyAgICAgIFNlZSB0aGUgZm9sbG93aW5nIHJlbGF0ZWQg cGF0Y2hlczoKKyAgICAgIC0gIEp1bHkgMTksIDIwMTY6ICBiZjVkZGRlZDcwYzExZWRhZjM1MTRi MjVkYTI3ZmM3MWNmYjhlOTY1CisgICAgICAtICBNYXkgMjEsIDIwMTY6ICBlNTAxNWM1ZDk2MzJh MGJmNjg1YzA5MzI0OWFlNGE3ZDNlODI1YjEzCisgICAgICBTZWUgdGhlIGZvbGxvd2luZyBidWcg cmVwb3J0czogICMxNjg1NiBhbmQgIzI5MjMzLiAqLworICAgICAgaW50IGZyYW1lX2NoYXJfd2lk dGggPSBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOworICAgICAgaW50IHRleHRfYXJlYV93aWR0aCA9 IHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSk7CisgICAgICBib29sIGN1cnNvcl9pbl9m cmluZ2VfcCA9IHctPnBoeXNfY3Vyc29yLnggKyBmcmFtZV9jaGFyX3dpZHRoID49IHRleHRfYXJl YV93aWR0aDsKKyAgICAgIGlmICgoZ2x5cGhfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9w CisgICAgICAgICAgICAmJiB3LT5waHlzX2N1cnNvci5ocG9zID49IGdseXBoX3Jvdy0+dXNlZFtU RVhUX0FSRUFdKQorICAgICAgICAgIHx8IGN1cnNvcl9pbl9mcmluZ2VfcCkKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisKKwogICAgICAgICB7CiAgICAgICAgICAgZ2x5cGhfcm93LT5jdXJz b3JfaW5fZnJpbmdlX3AgPSAxOwogICAgICAgICAgIGRyYXdfZnJpbmdlX2JpdG1hcCAodywgZ2x5 cGhfcm93LCAwKTsKQEAgLTMwODUsOCArMzExNCw0NyBAQCBOb3RlIHRoYXQgQ1VSU09SX1dJRFRI IGlzIG1lYW5pbmdmdWwgb25seSBmb3IgKGgpYmFyIGN1cnNvcnMuCiAKIAogICBmYWNlID0gRkFD RV9GUk9NX0lEX09SX05VTEwgKGYsIHBoeXNfY3Vyc29yX2dseXBoLT5mYWNlX2lkKTsKLSAgaWYg KGZhY2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKQotICAgICAgPT0gbnNfaW5kZXhfY29s b3IgKEZSQU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisvKiBFWEFNUExFIE9GIEhPVyBUTyBMT09L LVVQIEEgQ09MT1I6CisgIGVudW0gZmFjZV9pZCBmYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2Ug KGYsIGludGVybiAoIistdmVydGljYWwtYmFyLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNl ICpmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNlX2lkKTsKKyAgTlNDb2xvciAqY29sb3IgPSBu c19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNlKSwgZik7Cisq LworCisgIGlmIChFUSAoZmxhdm9yLCBRbWNfZ2x5cGgpCisgICAgICB8fCBFUSAoZmxhdm9yLCBR bWNfZ2x5cGhsZXNzKQorICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX2dseXBoX3RhYikpCisgICAg eworICAgICAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgICAgICBDSEVDS19CVUZG RVIgKGJ1Zik7CisgICAgICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoYnVmKTsKKyAgICAg IGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50X21hcmtfbW9kZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBtYXJrX2FjdGl2 ZSkpKTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fYmVnaW5uaW5nID0gKHJlZ2lvbl9hY3RpdmVf cCkgPyBYSU5UIChGcmVnaW9uX2JlZ2lubmluZyAoKSkgOiAtMTsKKyAgICAgIHB0cmRpZmZfdCBy ZWdpb25fZW5kID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBYSU5UIChGcmVnaW9uX2VuZCAoKSkgOiAt MTsKKyAgICAgIGJvb2wgcmVnaW9uX3AgPSAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAg ICAgICAgICAgICYmIFBUID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAg ICAgJiYgUFQgPCByZWdpb25fZW5kKTsKKyAgICAgIGRvdWJsZSByZWQgPSBYRkxPQVRfREFUQSAo QVJFRiAoY29sb3JfdmVjdG9yLCAwKSk7CisgICAgICBkb3VibGUgZ3JlZW4gPSBYRkxPQVRfREFU QSAoQVJFRiAoY29sb3JfdmVjdG9yLCAxKSk7CisgICAgICBkb3VibGUgYmx1ZSA9IFhGTE9BVF9E QVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDIpKTsKKyAgICAgIFtbTlNDb2xvciBjb2xvcldpdGhD YWxpYnJhdGVkUmVkOiByZWQgZ3JlZW46IGdyZWVuIGJsdWU6IGJsdWUgYWxwaGE6IDEuMF0gc2V0 XTsKKyAgICAgIGlmIChyZWdpb25fcCkKKyAgICAgICAgaG9sbG93X2NvbG9yID0gbnNfbG9va3Vw X2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSksIGYpOworICAgICAgICBl bHNlIGlmIChmYWNlICYmIE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSkgPT0gbnNfaW5kZXhfY29s b3IgKEZSQU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorICAgICAgICAgIGhvbGxvd19jb2xvciA9 IEZSQU1FX0NVUlNPUl9DT0xPUiAoZik7CisgICAgICAvKiBGSVhNRTogIEFkZCBhIGNvbmRpdGlv biBmb3IgYGhvbGxvd19jb2xvcmAgaWYgdGhlIHJlZ2lvbiBmb3JlZ3JvdW5kIGlzIHRoZQorICAg ICAgc2FtZSBhcyB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGFuZCBjaG9vc2UgYW4gYXBwcm9wcmlh dGUgY29sb3IgaWYgc28uICovCisgICAgfQorICBlbHNlIGlmIChmYWNlICYmIE5TX0ZBQ0VfQkFD S0dST1VORCAoZmFjZSkKKyAgICAgICAgICAgPT0gbnNfaW5kZXhfY29sb3IgKEZSQU1FX0NVUlNP Ul9DT0xPUiAoZiksIGYpKQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICAgIHsKICAg ICAgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNlKSwg Zikgc2V0XTsKICAgICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xPUiAoZik7CkBA IC0zMTMzLDkgKzMyMDEsMTYgQEAgTm90ZSB0aGF0IENVUlNPUl9XSURUSCBpcyBtZWFuaW5nZnVs IG9ubHkgZm9yIChoKWJhciBjdXJzb3JzLgogICAgIH0KICAgbnNfdW5mb2N1cyAoZik7CiAKLSAg LyogZHJhdyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgKi8KLSAgaWYgKGN1cnNvcl90 eXBlICE9IE5PX0NVUlNPUikKLSAgICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3LCBnbHlwaF9y b3csIERSQVdfQ1VSU09SKTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUg Y3Vyc29ycyAqLworCisgICAvKiBkcmF3IHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAq LworICBpZiAoY3Vyc29yX3R5cGUgIT0gTk9fQ1VSU09SCisgICAgICAmJiAhRVEgKGZsYXZvciwg UW1jX2dseXBobGVzcykKKyAgICAgICYmICFFUSAoZmxhdm9yLCBRbWNfZ2x5cGhfdGFiKSkKKyAg ICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAjaWZkZWYgTlNfSU1QTF9DT0NPQQogICBOU0Vu YWJsZVNjcmVlblVwZGF0ZXMgKCk7CmRpZmYgLS1naXQgYS9zcmMvdzMydGVybS5jIGIvc3JjL3cz MnRlcm0uYwppbmRleCA3YzJkODZiLi5iMDc5MTM1IDEwMDY0NAotLS0gYS9zcmMvdzMydGVybS5j CisrKyBiL3NyYy93MzJ0ZXJtLmMKQEAgLTcwNSwxMCArNzA1LDEyIEBAIHhfdXBkYXRlX3dpbmRv d19lbmQgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgY3Vyc29yX29uX3AsCiAgICAgewogICAgICAg YmxvY2tfaW5wdXQgKCk7CiAKLSAgICAgIGlmIChjdXJzb3Jfb25fcCkKLQlkaXNwbGF5X2FuZF9z ZXRfY3Vyc29yICh3LCB0cnVlLAotCQkJCXctPm91dHB1dF9jdXJzb3IuaHBvcywgdy0+b3V0cHV0 X2N1cnNvci52cG9zLAotCQkJCXctPm91dHB1dF9jdXJzb3IueCwgdy0+b3V0cHV0X2N1cnNvci55 KTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisg ICAgICBtY19wb3J0YWwgKHcsIGN1cnNvcl9vbl9wKTsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCiAKICAgICAgIGlmIChkcmF3X3dpbmRvd19mcmluZ2VzICh3LCB0cnVlKSkKIAl7CkBAIC05 NzMsNyArOTc1LDExIEBAIHN0YXRpYyB2b2lkIHczMl9kcmF3X2JveF9yZWN0IChzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQsIGludCwKIHN0YXRpYyB2b2lkCiB4X3NldF9jdXJz b3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMpCiB7Ci0gIGlmIChzLT5mb250ID09IEZSQU1F X0ZPTlQgKHMtPmYpCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNv cnMgKi8KKworICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93IChzZWxlY3Rl ZF93aW5kb3cpOworICBpZiAoKHMtPmZvbnQgPT0gRlJBTUVfRk9OVCAocy0+ZikKICAgICAgICYm IHMtPmZhY2UtPmJhY2tncm91bmQgPT0gRlJBTUVfQkFDS0dST1VORF9QSVhFTCAocy0+ZikKICAg ICAgICYmIHMtPmZhY2UtPmZvcmVncm91bmQgPT0gRlJBTUVfRk9SRUdST1VORF9QSVhFTCAocy0+ ZikKICAgICAgIC8qIFNvbWV0aW1lcyB3ZSBhcmUgbm90IGNhbGxlZCBmb3IgZWFjaCBjaGFuZ2Ug aW4gdGhlIGRlZmF1bHQKQEAgLTk4MSw2ICs5ODcsOSBAQCB4X3NldF9jdXJzb3JfZ2MgKHN0cnVj dCBnbHlwaF9zdHJpbmcgKnMpCiAJIHRlc3QgaW4gdGhlIG5leHQgbGluZSBnaXZlcyB1cyBhIGNo YW5jZSB0byByZXN5bmMuICAqLwogICAgICAgJiYgcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJz b3JfZ2MtPmZvcmVncm91bmQgPT0gcy0+ZmFjZS0+YmFja2dyb3VuZAogICAgICAgJiYgIXMtPmNt cCkKKyAgICAgIHx8IHctPm1jLmN1cnNvcl9nY19kZWZhdWx0KQorCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KICAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djOwog ICBlbHNlCiAgICAgewpAQCAtNTc0Niw3ICs1NzU1LDEzIEBAIHhfZHJhd19iYXJfY3Vyc29yIChz dHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCiAJIGludmlzaWJsZS4gIFVz ZSB0aGUgZ2x5cGgncyBmb3JlZ3JvdW5kIGNvbG9yIGluc3RlYWQgaW4gdGhpcwogCSBjYXNlLCBv biB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUgY2hvc2VuIHNvCiAJ IHRoYXQgdGhlIGdseXBoIGlzIGxlZ2libGUuICAqLwotICAgICAgaWYgKGZhY2UtPmJhY2tncm91 bmQgPT0gY3Vyc29yX2NvbG9yKQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBs ZSBjdXJzb3JzICovCisKKyAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGN1cnNvcl9jb2xv cgorICAgICAgICAgICYmICF3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkpCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLwogCWN1cnNvcl9jb2xvciA9IGZhY2UtPmZvcmVncm91bmQ7CiAK ICAgICAgIHggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB3LT5waHlzX2N1cnNv ci54KTsKQEAgLTU4MjMsNyArNTgzOCwxMyBAQCB3MzJfY2xlYXJfZnJhbWVfYXJlYSAoc3RydWN0 IGZyYW1lICpmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHN0YXRpYyB2 b2lkCiB3MzJfZHJhd193aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5 cGhfcm93ICpnbHlwaF9yb3csCiAJCQlpbnQgeCwgaW50IHksIGVudW0gdGV4dF9jdXJzb3Jfa2lu ZHMgY3Vyc29yX3R5cGUsCi0JCQlpbnQgY3Vyc29yX3dpZHRoLCBib29sIG9uX3AsIGJvb2wgYWN0 aXZlX3ApCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8K KworICBpbnQgY3Vyc29yX3dpZHRoLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3AsCisgIExpc3Bf T2JqZWN0IGNvbG9yX3ZlY3RvciwgTGlzcF9PYmplY3QgZmxhdm9yKQorCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KIHsKICAgaWYgKG9uX3ApCiAgICAgewpAQCAtNTg4OCwzMSArNTkwOSwxMTgg QEAgdzMyX2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBo X3JvdyAqZ2x5cGhfcm93LAogCSAgcmV0dXJuOwogCX0KIAotICAgICAgc3dpdGNoIChjdXJzb3Jf dHlwZSkKLQl7Ci0JY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoKLQkgIHhfZHJhd19ob2xsb3dfY3Vy c29yICh3LCBnbHlwaF9yb3cpOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZJTExFRF9CT1hfQ1VSU09S OgotCSAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7 Ci0JICBicmVhazsKLQotCWNhc2UgQkFSX0NVUlNPUjoKLQkgIHhfZHJhd19iYXJfY3Vyc29yICh3 LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgQkFSX0NVUlNPUik7Ci0JICBicmVhazsKLQotCWNh c2UgSEJBUl9DVVJTT1I6Ci0JICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJz b3Jfd2lkdGgsIEhCQVJfQ1VSU09SKTsKLQkgIGJyZWFrOwotCi0JY2FzZSBOT19DVVJTT1I6Ci0J ICB3LT5waHlzX2N1cnNvcl93aWR0aCA9IDA7Ci0JICBicmVhazsKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworLyogQkVHSU4gbXVsdGlwbGUgY3Vyc29ycyAqLworICBkb3VibGUgcmVkID0gWEZM T0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMCkpOworICBkb3VibGUgZ3JlZW4gPSBYRkxP QVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAxKSk7CisgIGRvdWJsZSBibHVlID0gWEZMT0FU X0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMikpOworICBzd2l0Y2ggKGN1cnNvcl90eXBlKQor ICB7CisgICAgY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAocmVkID49 IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVuID49IDApCisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhp amFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgewor ICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7Cisg ICAgICAgICAgQ09MT1JSRUYgb3JpZ192YWwgPSBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9w aXhlbDsKKyAgICAgICAgICBpbnQgaW50X3JlZCA9IHJlZCAqIDI1NTsKKyAgICAgICAgICBpbnQg aW50X2dyZWVuID0gZ3JlZW4gKiAyNTU7CisgICAgICAgICAgaW50IGludF9ibHVlID0gYmx1ZSAq IDI1NTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IFBBTEVU VEVSR0IgKGludF9yZWQsIGludF9ncmVlbiwgaW50X2JsdWUpOworICAgICAgICAgIHhfZHJhd19o b2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLncz Mi0+Y3Vyc29yX3BpeGVsID0gb3JpZ192YWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg ICAgICAgIHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAgICAgYnJlYWs7 CisgICAgfQorICAgIGNhc2UgRklMTEVEX0JPWF9DVVJTT1I6CisgICAgeworICAgICAgaWYgKHJl ZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICAvKiBUZW1wb3Jhcmls eSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhl CisgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9nYycgaW4gdzMyZm5zLmMuICAqLwor ICAgICAgICB7CisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgTGlzcF9PYmpl Y3Qgd2luZG93ID0gKHNlbGVjdGVkX3dpbmRvdyk7CisgICAgICAgICAgc3RydWN0IHdpbmRvdyAq dyA9IGRlY29kZV9saXZlX3dpbmRvdyAod2luZG93KTsKKyAgICAgICAgICBzdHJ1Y3QgZnJhbWUg KmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAgICAgICAgIGludCBpbnRfcmVkID0g cmVkICogMjU1OworICAgICAgICAgIGludCBpbnRfZ3JlZW4gPSBncmVlbiAqIDI1NTsKKyAgICAg ICAgICBpbnQgaW50X2JsdWUgPSBibHVlICogMjU1OworICAgICAgICAgIFhHQ1ZhbHVlcyBnY192 YWx1ZXM7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gR0NGb250IHwgR0NGb3JlZ3Jv dW5kIHwgR0NCYWNrZ3JvdW5kOworICAgICAgICAgIENPTE9SUkVGIG9yaWdfdmFsX2EgPSBGUkFN RV9CQUNLR1JPVU5EX1BJWEVMIChmKTsKKyAgICAgICAgICBDT0xPUlJFRiBvcmlnX3ZhbF9iID0g Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgZ2NfdmFsdWVzLmZv bnQgPSBGUkFNRV9GT05UIChmKTsKKyAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IEZS QU1FX0JBQ0tHUk9VTkRfUElYRUwgKGYpOworICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5k ID0gUEFMRVRURVJHQiAoaW50X3JlZCwgaW50X2dyZWVuLCBpbnRfYmx1ZSk7CisgICAgICAgICAg Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MKKyAgICAgICAgICAgID0gWENyZWF0ZUdDIChO VUxMLCBGUkFNRV9XMzJfV0lORE9XIChmKSwgbWFzaywgJmdjX3ZhbHVlcyk7CisgICAgICAgICAg LyogV2hlbiBgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlJywgZm9yY2UgYHhfc2V0X2N1 cnNvcl9nYycgdG8KKyAgICAgICAgICB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29y X2djJy4gICovCisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlOworICAg ICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1Ip OworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19kZWZhdWx0ID0gZmFsc2U7CisgICAgICAgICAg Z2NfdmFsdWVzLmZvbnQgPSBGUkFNRV9GT05UIChmKTsKKyAgICAgICAgICBnY192YWx1ZXMuZm9y ZWdyb3VuZCA9IG9yaWdfdmFsX2E7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBv cmlnX3ZhbF9iOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djCisgICAg ICAgICAgICA9IFhDcmVhdGVHQyAoTlVMTCwgRlJBTUVfVzMyX1dJTkRPVyAoZiksIG1hc2ssICZn Y192YWx1ZXMpOworICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZQorICAgICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3Jvdywg RFJBV19DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQkFSX0NVUlNPUjoK KyAgICB7CisgICAgICBpZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVuID49IDApCisg ICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3Jf cGl4ZWwnLiAgKi8KKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFN RSAoV0lORE9XX0ZSQU1FICh3KSk7CisgICAgICAgICAgQ09MT1JSRUYgb3JpZ192YWwgPSBmLT5v dXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbDsKKyAgICAgICAgICBpbnQgaW50X3JlZCA9IHJl ZCAqIDI1NTsKKyAgICAgICAgICBpbnQgaW50X2dyZWVuID0gZ3JlZW4gKiAyNTU7CisgICAgICAg ICAgaW50IGludF9ibHVlID0gYmx1ZSAqIDI1NTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53 MzItPmN1cnNvcl9waXhlbCA9IFBBTEVUVEVSR0IgKGludF9yZWQsIGludF9ncmVlbiwgaW50X2Js dWUpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IHRydWU7Cisg ICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBC QVJfQ1VSU09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSBm YWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IG9yaWdf dmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB4X2RyYXdfYmFyX2N1cnNv ciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOworICAgICAgYnJlYWs7 CisgICAgfQorICAgIGNhc2UgSEJBUl9DVVJTT1I6CisgICAgeworICAgICAgaWYgKHJlZCA+PSAw ICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWph Y2sgYGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgIHsKKyAg ICAgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAg ICAgICAgIENPTE9SUkVGIG9yaWdfdmFsID0gZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4 ZWw7CisgICAgICAgICAgaW50IGludF9yZWQgPSByZWQgKiAyNTU7CisgICAgICAgICAgaW50IGlu dF9ncmVlbiA9IGdyZWVuICogMjU1OworICAgICAgICAgIGludCBpbnRfYmx1ZSA9IGJsdWUgKiAy NTU7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBQQUxFVFRF UkdCIChpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9ibHVlKTsKKyAgICAgICAgICB3LT5tYy5jdXJz b3JfZ2NfaW52aXNpYmxlX29rYXkgPSB0cnVlOworICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29y ICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAgICAgIHct Pm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IGZhbHNlOworICAgICAgICAgIGYtPm91dHB1 dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ192YWw7CisgICAgICAgIH0KKyAgICAgICAg ZWxzZQorICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93 aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTk9fQ1VS U09SOgorICAgICAgdy0+cGh5c19jdXJzb3Jfd2lkdGggPSAwOworICAgICAgYnJlYWs7CisgICAg ZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgpOworICB9CisvKiBFTkQgbXVsdGlwbGUgY3Vy c29ycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLQlkZWZhdWx0OgotCSAgZW1hY3Nf YWJvcnQgKCk7Ci0JfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5jIGIvc3Jj L3dpbmRvdy5jCmluZGV4IDUwNGRjZDMuLjhkYWVlMzUgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cu YworKysgYi9zcmMvd2luZG93LmMKQEAgLTY3ODksNiArNjc4OSwyNyBAQCBnZXRfcGh5c19jdXJz b3JfZ2x5cGggKHN0cnVjdCB3aW5kb3cgKncpCiAgIHN0cnVjdCBnbHlwaCAqZ2x5cGg7CiAgIGlu dCBocG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKIAorLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKy8qIFRoaXMgbW9kaWZpY2F0aW9uIGVuYWJsZXMg cGxhY2VtZW50IG9mIHRoZSBjdXJzb3ItaW4tZnJpbmdlIGJpdG1hcCB3aGVuCit0aGUgd2luZG93 LXdpZHRoIGlzIHNsaWdodGx5IGxlc3MgdGhhbiBgZ2x5cGhfcm93LT5leGFjdF93aW5kb3dfd2lk dGhfbGluZV9wYC4KK1RoaXMgbW9kaWZpY2F0aW9uIGFsc28gcHJldmVudHMgZHJhd2luZyB0aGUg cmVhbCBjdXJzb3Igb24gdGhlIGZyaW5nZSAoaW5zdGVhZAorb2YgdXNpbmcgdGhlIGN1cnNvci1p bi1mcmluZ2UgYml0bWFwKSBpbiB0aGUgYWJvdmUtbWVudGlvbmVkIGNpcmN1bXN0YW5jZS4KK1Nl ZSB0aGUgZm9sbG93aW5nIHJlbGF0ZWQgcGF0Y2hlczoKKy0gIEp1bHkgMTksIDIwMTY6ICBiZjVk ZGRlZDcwYzExZWRhZjM1MTRiMjVkYTI3ZmM3MWNmYjhlOTY1CistICBNYXkgMjEsIDIwMTY6ICBl NTAxNWM1ZDk2MzJhMGJmNjg1YzA5MzI0OWFlNGE3ZDNlODI1YjEzCitTZWUgdGhlIGZvbGxvd2lu ZyBidWcgcmVwb3J0czogICMxNjg1NiBhbmQgIzI5MjMzLiAqLworCisgIHN0cnVjdCBmcmFtZSAq ZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NP TFVNTl9XSURUSCAoZik7CisgIGludCB0ZXh0X2FyZWFfd2lkdGggPSB3aW5kb3dfYm94X3dpZHRo ICh3LCBURVhUX0FSRUEpOworICBib29sIGN1cnNvcl9pbl9mcmluZ2VfcCA9IHctPnBoeXNfY3Vy c29yLnggKyBmcmFtZV9jaGFyX3dpZHRoID49IHRleHRfYXJlYV93aWR0aDsKKyAgaWYgKGN1cnNv cl9pbl9mcmluZ2VfcCkKKyAgICByZXR1cm4gTlVMTDsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKICAgaWYgKCEody0+cGh5c19jdXJzb3IudnBvcyA+PSAwCiAJJiYgdy0+cGh5c19jdXJz b3IudnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cykpCiAgICAgcmV0dXJuIE5VTEw7CmRp ZmYgLS1naXQgYS9zcmMvd2luZG93LmggYi9zcmMvd2luZG93LmgKaW5kZXggMjVjOTY4Ni4uNDgy MzM0ZiAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5oCisrKyBiL3NyYy93aW5kb3cuaApAQCAtNzYs NiArNzYsMzkgQEAgb25lIGFuZCB0aGUgc2FtZSwgc28gaXRzIHByZXYgYW5kIG5leHQgbWVtYmVy cyBhcmUgbmlsLgogCiBBIGRlYWQgd2luZG93IGhhcyBpdHMgY29udGVudHMgZmllbGQgc2V0IHRv IG5pbC4gICovCiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQkVHSU4gbXVsdGlwbGUg Y3Vyc29ycyAqLworCisvKiBTdWZmaXhlcyBmb3IgdGhlIGBtY2Agd2luZG93IHBvaW50ZXIgcHJl Zml4LiAqLworc3RydWN0IG11bHRpcGxlX2N1cnNvcnMKK3sKKyAgLyogVmFsdWVzIGZvciBwcmV2 aW91cyBhbmQgY3VycmVudCBgd2luZG93LXN0YXJ0JyBhbmQgYHdpbmRvdy1lbmQnLiAqLworICBF TUFDU19JTlQgY3VycmVudF9zdGFydCwgY3VycmVudF9lbmQsIHByZXZpb3VzX3N0YXJ0LCBwcmV2 aW91c19lbmQsIGN1cnJlbnRfeCwgcHJldmlvdXNfeDsKKworICAvKiBUcnVlIG1lYW5zIHRvIGZv cmNlIGB4X3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJz b3JfZ2MnCisgIGluIHczMnRlcm0uYyBvciBgcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2dj JyBpbiB4dGVybS5jLiAqLworICBib29sX2JmIGN1cnNvcl9nY19kZWZhdWx0IDogMTsKKworICAv KiBUcnVlIG1lYW5zIGB4X3NldF9jdXJzb3JfZ2MnIHNob3VsZCBwZXJtaXQgdGhlIGZvcmVncm91 bmQgYW5kIGJhY2tncm91bmQKKyAgY29sb3JzIHRvIGJlIHRoZSBzYW1lLiAgVGhlIGRlZmF1bHQg YmVoYXZpb3IgZGlzYWxsb3dzIGFuIGludmlzaWJsZSByZXN1bHQuICovCisgIGJvb2xfYmYgY3Vy c29yX2djX2ludmlzaWJsZV9va2F5IDogMTsKKworICAvKiBUcnVlIG1lYW5zIGBtY19jYWxjJyBo YXMgbm90IHJ1biB5ZXQgZHJhd24gZ2x5cGggZmFrZSBjdXJzb3JzLiAqLworICBib29sX2JmIGRy YXdfZ2x5cGhfY3Vyc29yIDogMTsKKworICAvKiBUcnVlIG1lYW5zIGBtY19jYWxjJyBoYXMgbm90 IHJ1biB5ZXQgZXJhc2VkIGdseXBoIGZha2UgY3Vyc29ycy4gKi8KKyAgYm9vbF9iZiBlcmFzZV9n bHlwaF9jdXJzb3IgOiAxOworCisgIC8qIFRydWUgbWVhbnMgY3Jvc3NoYWlycyBoYXZlIG5vdCB5 ZXQgYmVlbiBkcmF3bi4gKi8KKyAgYm9vbF9iZiBkcmF3X2Nyb3NzaGFpcnMgOiAxOworCisgIC8q IFRydWUgbWVhbnMgY3Jvc3NoYWlycyBoYXZlIG5vdCB5ZXQgYmVlbiBlcmFzZWQuICovCisgIGJv b2xfYmYgZXJhc2VfY3Jvc3NoYWlycyA6IDE7Cit9OworCisvKiBFTkQgbXVsdGlwbGUgY3Vyc29y cyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIHN0cnVjdCBjdXJzb3JfcG9zCiB7CiAg IC8qIFBpeGVsIHBvc2l0aW9uLiAgVGhlc2UgYXJlIGFsd2F5cyB3aW5kb3cgcmVsYXRpdmUuICAq LwpAQCAtMTc4LDYgKzIxMSwyMCBAQCBzdHJ1Y3Qgd2luZG93CiAgICAgLyogQW4gYWxpc3Qgd2l0 aCBwYXJhbWV0ZXJzLiAgKi8KICAgICBMaXNwX09iamVjdCB3aW5kb3dfcGFyYW1ldGVyczsKIAor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAv KiBUaGUgY2FjaGUgZm9yIG11bHRpcGxlIGdseXBoIGN1cnNvcnMuICBGb3IgYW4gZXhhbXBsZSBv ZiB0aGUgc3RydWN0dXJlIG9mCisgICAgdGhlIGxpc3QsIHNlZSB0aGUgY29tbWVudHMgYXQgdGhl IGJlZ2lubmluZyBvZiBgbWNfY2FsYycgaW4geGRpc3AuYy4gICovCisgICAgTGlzcF9PYmplY3Qg bWNfZ2x5cGhfY2FjaGU7CisKKyAgICAvKiBUaGUgY2FjaGUgZm9yIG11bHRpcGxlIGdseXBoL2ds eXBobGVzcyBjdXJzb3JzIHRoYXQgZm9ybSBjcm9zc2hhaXJzLiAgRm9yIGFuCisgICAgZXhhbXBs ZSBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBsaXN0LCBzZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBi ZWdpbm5pbmcgb2YKKyAgICBgbWNfY3Jvc3NoYWlycycgaW4geGRpc3AuYy4gICovCisgICAgTGlz cF9PYmplY3QgY3Jvc3NoYWlyc19jYWNoZTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisK ICAgICAvKiBObyBMaXNwIGRhdGEgbWF5IGZvbGxvdyBiZWxvdyB0aGlzIHBvaW50IHdpdGhvdXQg Y2hhbmdpbmcKICAgICAgICBtYXJrX29iamVjdCBpbiBhbGxvYy5jLiAgVGhlIG1lbWJlciBjdXJy ZW50X21hdHJpeCBtdXN0IGJlIHRoZQogICAgICAgIGZpcnN0IG5vbi1MaXNwIG1lbWJlci4gICov CkBAIC0yODAsNiArMzI3LDE0IEBAIHN0cnVjdCB3aW5kb3cKIAogI2lmZGVmIEhBVkVfV0lORE9X X1NZU1RFTQogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMg Ki8KKworICAgIC8qIFRoZSBwcmVmaXggZm9yIHdpbmRvdyBwb2ludGVycyByZWxhdGluZyB0byBt dWx0aXBsZSBjdXJzb3JzLiAgKi8KKyAgICBzdHJ1Y3QgbXVsdGlwbGVfY3Vyc29ycyBtYzsKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKICAgICAvKiBDdXJzb3IgdHlwZSBvZiBsYXN0IGN1 cnNvciBkcmF3biBvbiB0aGUgd2luZG93LiAgKi8KICAgICBlbnVtIHRleHRfY3Vyc29yX2tpbmRz IHBoeXNfY3Vyc29yX3R5cGU7CiAKQEAgLTQxNyw2ICs0NzIsMjMgQEAgWFdJTkRPVyAoTGlzcF9P YmplY3QgYSkKICAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKTsKIH0KIAorLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKK0lOTElORSB2 b2lkCit3c2V0X21jX2dseXBoX2NhY2hlIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2 YWwpCit7CisgIHctPm1jX2dseXBoX2NhY2hlID0gdmFsOworfQorCitJTkxJTkUgdm9pZAord3Nl dF9jcm9zc2hhaXJzX2NhY2hlIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCit7 CisgIHctPmNyb3NzaGFpcnNfY2FjaGUgPSB2YWw7Cit9CisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworCiAvKiBNb3N0IGNvZGUgc2hvdWxkIHVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gc2V0IExp c3AgZmllbGRzIGluIHN0cnVjdAogICAgd2luZG93LiAgKi8KIElOTElORSB2b2lkCmRpZmYgLS1n aXQgYS9zcmMveGRpc3AuYyBiL3NyYy94ZGlzcC5jCmluZGV4IDAyYzVkNzYuLjY0MWI5NmIgMTAw NjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94ZGlzcC5jCkBAIC05MDcsNiArOTA3LDE1 NDcgQEAgc3RhdGljIHZvaWQgcHJvZHVjZV9zcGVjaWFsX2dseXBocyAoc3RydWN0IGl0ICosIGVu dW0gZGlzcGxheV9lbGVtZW50X3R5cGUpOwogc3RhdGljIHZvaWQgc2hvd19tb3VzZV9mYWNlIChN b3VzZV9ITEluZm8gKiwgZW51bSBkcmF3X2dseXBoc19mYWNlKTsKIHN0YXRpYyBib29sIGNvb3Jk c19pbl9tb3VzZV9mYWNlX3AgKHN0cnVjdCB3aW5kb3cgKiwgaW50LCBpbnQpOwogCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIEJFR0lOIG11bHRpcGxlIGN1cnNvcnMgKi8KKworLyogTVVM VElQTEUgQ1VSU09SUzogIEVtYWNzIEJ1ZyAjMjI4NzMgKGZlYXR1cmUgcmVxdWVzdCkKKworICAg Q1JPU1NIQUlSUzogIEVtYWNzIEJ1ZyAjMTc2ODQgKGZlYXR1cmUgcmVxdWVzdCkKKworUEFUQ0gg VkVSU0lPTjogIDAxMQorQXBwbHkgcGF0Y2ggdG8gbWFzdGVyIGJyYW5jaCAoMDMvMjgvMjAxNik6 ICBhMzBlN2UxMmVkODQ2NWUyNTY1ZGQzMThkOTIxYmM4N2Y1MmNlMThlCitnaXQgcmVzZXQgLS1o YXJkIGEzMGU3ZTEyZWQ4NDY1ZTI1NjVkZDMxOGQ5MjFiYzg3ZjUyY2UxOGUKKworRVhBTVBMRSAj MTogIChzZXRxIG1jLWdseXBoLWxpc3QgJygoMSAiaGJhciIgIm1hZ2VudGEiKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMiAiYmFyIiAicHVycGxlIikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDMgImJveCIgIiMwMEZGMDAiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoNCAiaG9sbG93IiAiIzAwMDBGRiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICg1ICgiaGJhciIgMykgWzEuMCAwLjAgMS4wXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDYgKCJiYXIiIDMpIFswLjAgMS4wIDEuMF0pKSkKKworRVhBTVBMRSAjMjogIChzZXRxIG1j LWdseXBoLWxpc3QgbmlsKQorCitUT0RPOgorCistICBTZXQgdXAgYSB1c2VyIG9wdGlvbiBzaW1p bGFyIHRvIGBjdXJzb3ItaW4tbm9uLXNlbGVjdGVkLXdpbmRvd3MnLgorCistICBFeHBsb3JlIHRo ZSBpZGVhIG9mIHdoZXRoZXIgd2UgbmVlZCBhZGRpdGlvbmFsIGNvZGUgdG8gaGFuZGxlIHJlbW92 aW5nL3JlZHJhd2luZworICAgZmFrZSBjdXJzb3JzIHdoZW4gd2luZG93cyBjaGFuZ2Ugc2l6ZXMg LyBsYXlvdXRzLgorCistICBGYWtlIGN1cnNvcnMgYXJlIGJlaW5nIHJlZHJhd24gdG9vIG9mdGVu IHdoZW4gbW91c2luZyBvdmVyIHRleHQgKHVuZGVybmVhdGggdGhlCisgICByZWFsIGN1cnNvcikg d2l0aCBtb3VzZS1mYWNlIHByb3BlcnRpZXMsIGFuZCBhbHNvIHdoZW4gbm9uLXNlbGVjdGVkIHdp bmRvd3MvZnJhbWVzCisgICBoYXZlIGFuIG9uZ29pbmcgcHJvY2VzcyB0aGF0IHJlcXVpcmUgZnJl cXVlbnQgcmVkaXNwbGF5IHVwZGF0ZXMuCisKKy0gIE9wdGltaXplIGRyYXdpbmcvZXJhc2luZyBm YWtlIGN1cnNvcnMuCisKKy0gIEltcGxlbWVudCBhIHdheSB0byBwcm9wZXJseSBjYWxjdWxhdGUg WCwgWSwgSFBPUywgVlBPUyB3aGVuIGRlYWxpbmcgd2l0aCBvdmVybGF5cworICAgdGV4dCBwcm9w ZXJ0aWVzLCBjb21wb3NpdGlvbiBjaGFyYWN0ZXJzLCB0YWJzLCBldGMuCisKKy0gIEltcGxlbWVu dCBhIHRlc3QgZm9yIGNyb3NzaGFpcnMgdG8gc2VlIGlmIHRoZSBidWZmZXIgdXNlcyBtb25vc3Bh Y2UgdmVyc3VzCisgICBwcm9wb3J0aW9uYWwgZm9udHMsIGFuZCBzdXBwcmVzcyBjcm9zc2hhaXJz IHdoZW4gdGhlIGxhdHRlci4KKworLSAgSW1wbGVtZW50IGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0 byB0aGUgbXVsdGlwbGUgY3Vyc29ycyBsaWJyYXJ5IGJ5IE1hZ25hciBTdmVlbi4KKworTEVHRU5E CisKK2ZwcmludGYgKHN0ZGVyciwgInN0cmluZzogJXMgfCBpbnQ6ICVkXG4iLCBTU0RBVEEgKGJ1 aWxkX3N0cmluZyAoImZvbyIpKSwgNjkpOworCitpZiAoQlVGRkVSUCAody0+Y29udGVudHMpICYm IFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKQorICBmcHJpbnRm IChzdGRlcnIsICJuc191cGRhdGVfd2luZG93X2VuZDogICVzXG4iLCBTU0RBVEEgKEJWQVIgKFhC VUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKTsKKworQVVUT19TVFJJTkcgKG15X3N0cmluZ19v bmUsICJUaGlzIGlzIHRoZSB2YWx1ZSBvZiBgbXlfb2JqZWN0X29uZSc6ICAlcyIpOworTGlzcF9P YmplY3QgbXlfb2JqZWN0X29uZSA9IG1ha2VfZmxvYXQgKDAuMSk7CitDQUxMTiAoRm1lc3NhZ2Us IG15X3N0cmluZ19vbmUsIG15X29iamVjdF9vbmUpOworCitBVVRPX1NUUklORyAobXlfc3RyaW5n X3R3bywgIlRoaXMgaXMgdGhlIHZhbHVlIG9mIGBteV9vYmplY3RfdHdvJzogICVzIik7CitMaXNw X09iamVjdCBteV9vYmplY3RfdHdvID0gbWFrZV9udW1iZXIgKDc3Nyk7CitDQUxMTiAoRm1lc3Nh Z2UsIG15X3N0cmluZ190d28sIG15X29iamVjdF90d28pOworCitXSU5ET1c6ICB3LT5jb250ZW50 cworCitCVUZGRVI6ICBYQlVGRkVSICh3LT5jb250ZW50cykKKworQlVGRkVSIExPQ0FMIFZBUklB QkxFOiAgQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCB2YXJpYWJsZV9uYW1lKQorCitOTyBO QVJST1dJTkc6CisKK0JFRyA9PSBCZWdpbm5pbmcgb2YgQnVmZmVyICh3aW5kb3cgZGlzcGxheXMg Y3VycmVudCBidWZmZXIpCisKK1pWID09IEVuZCBvZiBCdWZmZXIgKHdpbmRvdyBkaXNwbGF5cyBj dXJyZW50IGJ1ZmZlcikKKworQkVHX0JZVEUgPT0gQmVnaW5uaW5nIEJ5dGUgb2YgQnVmZmVyCisK K1pfQllURSA9PSBFbmRpbmcgQnl0ZSBvZiBCdWZmZXIKKworTkFSUk9XRUQgLS0gIlYiOgorCitC RUdWID09IEJlZ2lubmluZyBvZiBOQVJST1dFRCBCdWZmZXIgKHdpbmRvdyBkaXNwbGF5cyBjdXJy ZW50IGJ1ZmZlcikKKworWlYgPT0gRW5kIG9mIE5BUlJPV0VEIEJ1ZmZlciAod2luZG93IGRpc3Bs YXlzIGN1cnJlbnQgYnVmZmVyKQorCitCRUdWX0JZVEUgPT0gQmVnaW5uaW5nIEJ5dGUgb2YgTkFS Uk9XRUQgQnVmZmVyCisKK1pWX0JZVEUgPT0gRW5kaW5nIEJ5dGUgb2YgTkFSUk9XRUQgYnVmZmVy CisKK1dJTkRPVyBET0VTIE5PVCBORUNFU1NBUklMWSBESVNQTEFZIEJVRkZFUjoKKworYm9iX2Rp c3JlZ2FyZF9uYXJyb3cgPSBCVUZfQkVHIChidWZmZXIpCitlb2JfZGlzcmVnYXJkX25hcnJvdyA9 IEJVRl9aIChidWZmZXIpCisKK2JvYl9yZXNwZWN0X25hcnJvdyA9IEJVRl9CRUdWIChidWZmZXIp Citlb2JfcmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKGJ1ZmZlcikKKword2luZG93X3N0YXJ0ID0g bWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCkKK3dpbmRvd19lbmQgPSBlb2JfZGlzcmVnYXJkX25h cnJvdyAtIHctPndpbmRvd19lbmRfcG9zCisKK2J1ZmZlcl9zaXplID0gZW9iX2Rpc3JlZ2FyZF9u YXJyb3cgLSBib2JfZGlzcmVnYXJkX25hcnJvdworCitidWZmZXJfbmFycm93ZWRfcCA9IChlb2Jf cmVzcGVjdF9uYXJyb3cgLSBib2JfcmVzcGVjdF9uYXJyb3cgIT0gYnVmZmVyX3NpemUpCisKK3dp bmRvd19jb250ZW50c192aXNpYmxlX3AgPSAoYm9iX3Jlc3BlY3RfbmFycm93ID09IHdpbmRvd19z dGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlb2JfcmVzcGVjdF9uYXJyb3cg PT0gd2luZG93X2VuZCkKKworVGhpcyBpcyB0aGUgQyBbdGVybmFyeSBvcGVyYXRvcl1bMV0gKE9i amVjdGl2ZS1DIGlzIGEgc3VwZXJzZXQgb2YgQyk6CisKKyAgICBsYWJlbC5mcmFtZSA9IChpblBz ZXVkb0VkaXRNb2RlKSA/IGtMYWJlbEluZGVudGVkUmVjdCA6IGtMYWJlbFJlY3Q7CisKK2lzIHNl bWFudGljYWxseSBlcXVpdmFsZW50IHRvCisKKyAgICBpZihpblBzZXVkb0VkaXRNb2RlKSB7Cisg ICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsSW5kZW50ZWRSZWN0OworICAgIH0gZWxzZSB7CisgICAg IGxhYmVsLmZyYW1lID0ga0xhYmVsUmVjdDsKKyAgICB9CisKK1RoZSB0ZXJuYXJ5IHdpdGggbm8g Zmlyc3QgZWxlbWVudCAoZS5nLiBgdmFyaWFibGUgPzogYW5vdGhlclZhcmlhYmxlYCkgbWVhbnMg dGhlIHNhbWUgYXMgYCh2YWxPclZhciAhPSAwKSA/IHZhbE9yVmFyIDogYW5vdGhlclZhbE9yVmFy YAorCitFQVNTRVJUOgorCisgIGVhc3NlcnQgKEJVRl9CRUcgKGIpIDw9IGNoYXJwb3MgJiYgY2hh cnBvcyA8PSBCVUZfWiAoYikpOworICBib29sIGJhcmZfY3Jhc2ggPSAoQlVGX0JFRyAoYikgPD0g WlYgJiYgWlYgPD0gQlVGX1ogKGIpKSA/IGZhbHNlIDogdHJ1ZTsgKi8KKworI2luY2x1ZGUgPHRp bWUuaD4KKyNpbmNsdWRlIDxmdG9hc3RyLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjZGVmaW5l IE5PX0ZSSU5HRV9CSVRNQVAgMAorCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAgKi8KKworc3Rh dGljIHZvaWQgZGVidWdfbWV0aG9kX2FkZCAoc3RydWN0IHdpbmRvdyAqLCBjaGFyIGNvbnN0ICos IC4uLik7CisKK3N0YXRpYyBib29sIGhzY3JvbGxpbmdfY3VycmVudF9saW5lX3AgKHN0cnVjdCB3 aW5kb3cgKncpOworCitzdGF0aWMgaW50IHdpbmRvd19oc2Nyb2xsX2xpbWl0ZWQgKHN0cnVjdCB3 aW5kb3cgKncsIHN0cnVjdCBmcmFtZSAqZik7CisKK3N0YXRpYyB2b2lkIHBpbnQyc3RyIChyZWdp c3RlciBjaGFyICosIHJlZ2lzdGVyIGludCwgcmVnaXN0ZXIgcHRyZGlmZl90KTsKKworLyogVGhp cyBpcyBtZWFudCB0byBiZSB1c2VkIHdoZW4gdGFyZ2V0IGlzIHZpc2libGUgYW5kIHdoZW4gY29k ZSBpcyBzYW5kd2ljaGVkOgorICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICBibG9ja19pbnB1 dCAoKTsKKyAgICAgbWNfZXJhc2VfZ2x5cGhfY3Vyc29yICh3LCB4LCB5LCBocG9zLCB2cG9zLCBj dXJzb3JfdHlwZSk7CisgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgIHVwZGF0ZV9lbmQgKGYp OyAqLworc3RhdGljIHZvaWQKK21jX2VyYXNlX2dseXBoX2N1cnNvciAoc3RydWN0IHdpbmRvdyAq dywgcHRyZGlmZl90IHgsIHB0cmRpZmZfdCB5LCBwdHJkaWZmX3QgaHBvcywKKyAgICAgICAgICAg ICAgICAgICAgICAgcHRyZGlmZl90IHZwb3MsIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29y X3R5cGUpCit7CisgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250YWlucyB0aGUg Zm9sbG93aW5nIHRlc3RzLAorICBlYXNzZXJ0IChtYXRyaXggJiYgbWF0cml4LT5yb3dzKTsKKyAg ZWFzc2VydCAocm93ID49IDAgJiYgcm93IDwgbWF0cml4LT5ucm93cyk7ICovCisgIGJvb2wgYmFy Zl9jcmFzaF9vbmUgPSAody0+Y3VycmVudF9tYXRyaXggJiYgdy0+Y3VycmVudF9tYXRyaXgtPnJv d3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgcmV0dXJuOwor ICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKHZwb3MgPj0gMCAmJiB2cG9zIDwgdy0+Y3VycmVudF9t YXRyaXgtPm5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfdHdvKQorICAg IHJldHVybjsKKyAgaWYgKHggPCAwCisgICAgICB8fCB5IDwgMAorICAgICAgfHwgaHBvcyA8IDAK KyAgICAgIHx8IHZwb3MgPCAwKQorICAgIHJldHVybjsKKyAgLyogUmVjb3JkIHRoZSBjdXJyZW50 IHZhbHVlcyBmb3Igdy0+cGh5c19jdXJzb3IuICovCisgIHB0cmRpZmZfdCBvcmlnaW5hbF94ID0g dy0+cGh5c19jdXJzb3IueDsKKyAgcHRyZGlmZl90IG9yaWdpbmFsX3kgPSB3LT5waHlzX2N1cnNv ci55OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfaHBvcyA9IHctPnBoeXNfY3Vyc29yLmhwb3M7Cisg IHB0cmRpZmZfdCBvcmlnaW5hbF92cG9zID0gdy0+cGh5c19jdXJzb3IudnBvczsKKyAgZW51bSB0 ZXh0X2N1cnNvcl9raW5kcyBvcmlnaW5hbF9jdXJzb3JfdHlwZSA9IHctPnBoeXNfY3Vyc29yX3R5 cGU7CisgIC8qIEhpamFjayB3LT5waHlzX2N1cnNvciBieSBzZXR0aW5nIG5ldyB2YWx1ZXMuICov CisgIHctPnBoeXNfY3Vyc29yLnggPSB4OworICB3LT5waHlzX2N1cnNvci55ID0geTsKKyAgdy0+ cGh5c19jdXJzb3IuaHBvcyA9IGhwb3M7CisgIHctPnBoeXNfY3Vyc29yLnZwb3MgPSB2cG9zOwor ICB3LT5waHlzX2N1cnNvcl90eXBlID0gY3Vyc29yX3R5cGU7CisgIGVyYXNlX3BoeXNfY3Vyc29y ICh3KTsKKyAgLyogUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWVzIGZvciB3LT5waHlzX2N1cnNv ci4gKi8KKyAgdy0+cGh5c19jdXJzb3IueCA9IG9yaWdpbmFsX3g7CisgIHctPnBoeXNfY3Vyc29y LnkgPSBvcmlnaW5hbF95OworICB3LT5waHlzX2N1cnNvci5ocG9zID0gb3JpZ2luYWxfaHBvczsK KyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IG9yaWdpbmFsX3Zwb3M7CisgIHctPnBoeXNfY3Vyc29y X3R5cGUgPSBvcmlnaW5hbF9jdXJzb3JfdHlwZTsKK30KKworLyogVGhpcyBpcyBtZWFudCB0byBi ZSB1c2VkIHdoZW4gdGFyZ2V0IGlzIHZpc2libGUgYW5kIHdoZW4gY29kZSBpcyBzYW5kd2ljaGVk OgorICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgbWNf ZHJhd19lcmFzZV9oeWJyaWQgKC4uLik7CisgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgIHVw ZGF0ZV9lbmQgKGYpOworV2UgY2FsbCB0aGlzIGEgZHJhdy9lcmFzZSBoeWJyaWQgYmVjYXVzZSBp dCBkb2VzIGFsbCBvZiB0aGUgZm9sbG93aW5nOgorLSAgRHJhdyBhbGwgZ2x5cGggY3Vyc29ycywg YnV0IGVyYXNlIHdpdGggYG1jX2VyYXNlX2dseXBoX2N1cnNvcicuCistICBEcmF3L2VyYXNlIGFs bCBmcmluZ2UgYml0bWFwcyByZWxhdGluZyB0byBjcm9zc2hhaXJzLgorLSAgRHJhdy9lcmFzZSBh bGwgZ2x5cGhsZXNzIGN1cnNvcnMuICovCitzdGF0aWMgdm9pZAorbWNfZHJhd19lcmFzZV9oeWJy aWQgKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCB4LCBwdHJkaWZmX3QgeSwgcHRyZGlmZl90 IGhwb3MsIHB0cmRpZmZfdCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgIGVudW0gdGV4dF9j dXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAg ICAgICAgICAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVjdCBmbGF2b3IpCit7 CisgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250YWlucyB0aGUgZm9sbG93aW5n IHRlc3RzLAorICBlYXNzZXJ0IChtYXRyaXggJiYgbWF0cml4LT5yb3dzKTsKKyAgZWFzc2VydCAo cm93ID49IDAgJiYgcm93IDwgbWF0cml4LT5ucm93cyk7ICovCisgIGJvb2wgYmFyZl9jcmFzaF9v bmUgPSAody0+Y3VycmVudF9tYXRyaXggJiYgdy0+Y3VycmVudF9tYXRyaXgtPnJvd3MpID8gZmFs c2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgcmV0dXJuOworICBib29sIGJh cmZfY3Jhc2hfdHdvID0gKHZwb3MgPj0gMCAmJiB2cG9zIDwgdy0+Y3VycmVudF9tYXRyaXgtPm5y b3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfdHdvKQorICAgIHJldHVybjsK KyAgaWYgKHggPCAwCisgICAgICB8fCB5IDwgMAorICAgICAgfHwgaHBvcyA8IDAKKyAgICAgIHx8 IHZwb3MgPCAwKQorICAgIHJldHVybjsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5m cmFtZSk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdyA9IE1BVFJJWF9ST1cgKHctPmN1 cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgLyogUmVjb3JkIHNvbWUgb2YgdGhlIGN1cnJlbnQgdmFs dWVzIGZvciB0aGUgY3Vyc29yIGFuZCBnbHlwaF9yb3cuICovCisgIGJvb2wgb3JpZ2luYWxfY3Vy c29yX2luX2ZyaW5nZV9wID0gZ2x5cGhfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3A7CisgIGJvb2wg b3JpZ2luYWxfcmV2ZXJzZWRfcCA9IGdseXBoX3Jvdy0+cmV2ZXJzZWRfcDsKKyAgcHRyZGlmZl90 IG9yaWdpbmFsX3ggPSB3LT5waHlzX2N1cnNvci54OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfeSA9 IHctPnBoeXNfY3Vyc29yLnk7CisgIHB0cmRpZmZfdCBvcmlnaW5hbF9ocG9zID0gdy0+cGh5c19j dXJzb3IuaHBvczsKKyAgcHRyZGlmZl90IG9yaWdpbmFsX3Zwb3MgPSB3LT5waHlzX2N1cnNvci52 cG9zOworICBwdHJkaWZmX3Qgb3JpZ2luYWxfYXNjZW50ID0gdy0+cGh5c19jdXJzb3JfYXNjZW50 OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfaGVpZ2h0ID0gdy0+cGh5c19jdXJzb3JfaGVpZ2h0Owor ICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIG9yaWdpbmFsX2N1cnNvcl90eXBlID0gdy0+cGh5c19j dXJzb3JfdHlwZTsKKyAgLyogSGlqYWNrIHctPnBoeXNfY3Vyc29yLiAqLworICB3LT5waHlzX2N1 cnNvci5ocG9zID0gaHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7CisgIHctPnBo eXNfY3Vyc29yLnggPSB4OworICB3LT5waHlzX2N1cnNvci55ID0gZ2x5cGhfcm93LT55OworICB3 LT5waHlzX2N1cnNvcl90eXBlID0gY3Vyc29yX3R5cGU7CisgIHctPnBoeXNfY3Vyc29yX2FzY2Vu dCA9IGdseXBoX3Jvdy0+YXNjZW50OworICB3LT5waHlzX2N1cnNvcl9oZWlnaHQgPSBnbHlwaF9y b3ctPmhlaWdodDsKKyAgLyogKGdldCAnKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0aW9uICdv dmVybGF5LWFycm93LWJpdG1hcCkKKyAgICAgPT4gJystb3ZlcmxheS1hcnJvdy1iaXRtYXAKKyAg ICAgPT4gUW1jX3NtaWxleV9mYWNlICovCisgIC8qIExpc3BfT2JqZWN0IHZhbCA9IEZnZXQgKGlu dGVybiAoIistbGVmdC1mcmluZ2Utb3ZlcmxheS1wb3NpdGlvbiIpLCBRb3ZlcmxheV9hcnJvd19i aXRtYXApOyAqLworICBMaXNwX09iamVjdCBtYXJrZXIgPSBmaW5kX3N5bWJvbF92YWx1ZSAoaW50 ZXJuICgib3ZlcmxheS1hcnJvdy1wb3NpdGlvbiIpKTsKKyAgaW50IGZyaW5nZV9iaXRtYXAgPSBO T19GUklOR0VfQklUTUFQOworICBpbnQgZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgaWYg KEVRIChmbGF2b3IsIFFvdmVybGF5X2Fycm93X2JpdG1hcCkpCisgICAgeworICAgICAgTGlzcF9P YmplY3Qgdmxpc3Q7CisgICAgICBmb3IgKHZsaXN0ID0gVm92ZXJsYXlfYXJyb3dfdmFyaWFibGVf bGlzdDsKKyAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgdmxpc3QgPSBYQ0RS ICh2bGlzdCkpCisgICAgICAgIHsKKyAgICAgICAgICBMaXNwX09iamVjdCB2YXIgPSBYQ0FSICh2 bGlzdCk7CisgICAgICAgICAgTGlzcF9PYmplY3QgdmFsOworICAgICAgICAgIGlmICghU1lNQk9M UCAodmFyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIHZhbCA9IGZpbmRfc3lt Ym9sX3ZhbHVlICh2YXIpOworICAgICAgICAgIGlmICh2YWwgPSBGZ2V0ICh2YXIsIFFvdmVybGF5 X2Fycm93X2JpdG1hcCksIFNZTUJPTFAgKHZhbCkpCisgICAgICAgICAgICBmcmluZ2VfYml0bWFw ID0gbG9va3VwX2ZyaW5nZV9iaXRtYXAgKHZhbCk7CisgICAgICAgIH0KKyAgICAgIGdseXBoX3Jv dy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgPSAoY3Vyc29yX3R5cGUgIT0gTk9fQ1VSU09SKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnJpbmdlX2JpdG1hcCAvKiBs b29rdXBfZnJpbmdlX2JpdG1hcCAoZmxhdm9yKSAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgIGRyYXdfZnJpbmdlX2Jp dG1hcCAodywgZ2x5cGhfcm93LCB0cnVlKTsKKyAgICAgIC8qIG9wdGltaXphdGlvbiAzOiAgRFJB VyB0aGUgYG92ZXJsYXktYXJyb3ctYml0bWFwJyBpZiB0aGVyZSBpcyBhIG1hcmtlci4gKi8KKyAg ICAgIGlmIChNQVJLRVJQIChtYXJrZXIpCisgICAgICAgICAgJiYgWE1BUktFUiAobWFya2VyKS0+ YnVmZmVyCisgICAgICAgICAgJiYgQlVGRkVSX0xJVkVfUCAoWE1BUktFUiAobWFya2VyKS0+YnVm ZmVyKSkKKyAgICAgICAgeworICAgICAgICAgIGdseXBoX3Jvdy0+b3ZlcmxheV9hcnJvd19iaXRt YXAgPSBmcmluZ2VfYml0bWFwOworICAgICAgICAgIGRyYXdfZnJpbmdlX2JpdG1hcCAodywgZ2x5 cGhfcm93LCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChFUSAoZmxhdm9y LCBRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hbmdsZSkKKyAgICAgICAgICAgICB8fCBFUSAo Zmxhdm9yLCBRbWNfaG9sbG93X3JlY3RhbmdsZSkKKyAgICAgICAgICAgICB8fCBFUSAoZmxhdm9y LCBRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlKQorICAgICAgICAgICAgIHx8IEVRIChmbGF2 b3IsIFFtY192ZXJ0aWNhbF9iYXIpCisgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX3Zl cnRpY2FsX2Jhcl9iYWNrc2xhc2gpKQorICAgICAgeworICAgICAgICBmcmluZ2VfYml0bWFwID0g KGN1cnNvcl90eXBlICE9IE5PX0NVUlNPUikKKyAgICAgICAgICAgICAgICAgICAgICAgID8gbG9v a3VwX2ZyaW5nZV9iaXRtYXAgKGZsYXZvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogTk9f RlJJTkdFX0JJVE1BUDsKKyAgICAgICAgZmFjZV9pZCA9IChjdXJzb3JfdHlwZSAhPSBOT19DVVJT T1IpCisgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlIChmLCBpbnRlcm4gKCIr LXZlcnRpY2FsLWJhci1mYWNlIiksIHRydWUpCisgICAgICAgICAgICAgICAgICA6IERFRkFVTFRf RkFDRV9JRDsKKyAgICAgICAgZ2x5cGhfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSBmYWxzZTsK KyAgICAgICAgZ2x5cGhfcm93LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSAwOworICAgICAg ICBnbHlwaF9yb3ctPnJpZ2h0X2ZyaW5nZV9iaXRtYXAgPSBmcmluZ2VfYml0bWFwOworICAgICAg ICBnbHlwaF9yb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gZmFjZV9pZDsKKyAgICAgICAgZ2x5 cGhfcm93LT5yaWdodF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAgICAgICAgZHJhd19mcmluZ2VfYml0 bWFwICh3LCBnbHlwaF9yb3csIGZhbHNlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKEVRIChm bGF2b3IsIFFtY19nbHlwaCkKKyAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3IsIFFtY19nbHlw aGxlc3MpCisgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfZ2x5cGhfdGFiKSkKKyAg ICAgICAgRlJBTUVfUklGIChmKS0+ZHJhd193aW5kb3dfY3Vyc29yICh3LCBnbHlwaF9yb3csIHgs IHksIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN1cnNvcl93aWR0aCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29sb3JfdmVjdG9yLCBmbGF2b3IpOworICAvKiBSZXN0b3JlIHRo ZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHctPnBoeXNfY3Vyc29yIGFuZCBnbHlwaF9yb3cuICovCisg IHctPnBoeXNfY3Vyc29yLnggPSBvcmlnaW5hbF94OworICB3LT5waHlzX2N1cnNvci55ID0gb3Jp Z2luYWxfeTsKKyAgdy0+cGh5c19jdXJzb3IuaHBvcyA9IG9yaWdpbmFsX2hwb3M7CisgIHctPnBo eXNfY3Vyc29yLnZwb3MgPSBvcmlnaW5hbF92cG9zOworICB3LT5waHlzX2N1cnNvcl90eXBlID0g b3JpZ2luYWxfY3Vyc29yX3R5cGU7CisgIGdseXBoX3Jvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wID0g b3JpZ2luYWxfY3Vyc29yX2luX2ZyaW5nZV9wOworICBnbHlwaF9yb3ctPnJldmVyc2VkX3AgPSBv cmlnaW5hbF9yZXZlcnNlZF9wOworICB3LT5waHlzX2N1cnNvcl9hc2NlbnQgPSBvcmlnaW5hbF9h c2NlbnQ7CisgIHctPnBoeXNfY3Vyc29yX2hlaWdodCA9IG9yaWdpbmFsX2hlaWdodDsKK30KKwor c3RhdGljIGludAorbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoTGlzcF9PYmplY3QgYXJnKQorewor ICBjaGFyICpzdHI7CisgIGlmIChYVFlQRSAoYXJnKSA9PSBMaXNwX1N0cmluZykKKyAgICBzdHIg PSBTU0RBVEEgKGFyZyk7CisgIGVsc2UgaWYgKFhUWVBFIChhcmcpID09IExpc3BfU3ltYm9sKQor ICAgIHN0ciA9IFNTREFUQSAoU1lNQk9MX05BTUUgKGFyZykpOworICBlbHNlIHJldHVybiAtMTsK KyAgaWYgKCFzdHJjbXAgKHN0ciwgImJveCIpKQorICAgIHJldHVybiBGSUxMRURfQk9YX0NVUlNP UjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImhvbGxvdyIpKQorICAgIHJldHVybiBIT0xMT1dfQk9Y X0NVUlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImhiYXIiKSkKKyAgICByZXR1cm4gSEJBUl9D VVJTT1I7CisgIGlmICghc3RyY21wIChzdHIsICJiYXIiKSkKKyAgICByZXR1cm4gQkFSX0NVUlNP UjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgIm5vIikpCisgICAgcmV0dXJuIE5PX0NVUlNPUjsKKyAg cmV0dXJuIC0xOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2N1cnNvcl90eXBlX3RvX2xp c3AgKGludCBhcmcpCit7CisgIHN3aXRjaCAoYXJnKQorICAgIHsKKyAgICBjYXNlIEZJTExFRF9C T1hfQ1VSU09SOiByZXR1cm4gUWJveDsKKyAgICBjYXNlIEhPTExPV19CT1hfQ1VSU09SOiByZXR1 cm4gUWhvbGxvdzsKKyAgICBjYXNlIEhCQVJfQ1VSU09SOiByZXR1cm4gUWhiYXI7CisgICAgY2Fz ZSBCQVJfQ1VSU09SOiByZXR1cm4gUWJhcjsKKyAgICBjYXNlIE5PX0NVUlNPUjoKKyAgICBkZWZh dWx0OiByZXR1cm4gaW50ZXJuICgibm8iKTsKKyAgICB9Cit9CisKK3N0YXRpYyBMaXNwX09iamVj dAorbWNfY29sb3JfdmVjdG9yX2NhbGMgKHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IGNv bG9yKQoreworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgTGlzcF9PYmplY3QgdGFyZ2V0X2Zy YW1lID0gdy0+ZnJhbWU7CisgIExpc3BfT2JqZWN0IGNvbG9yX3ZhbHVlczsKKyAgZG91YmxlIHZh bG1heCA9IFhJTlQgKFhDQVIgKEZ4d19jb2xvcl92YWx1ZXMgKGJ1aWxkX3N0cmluZyAoIiNmZmZm ZmYiKSwgdGFyZ2V0X2ZyYW1lKSkpOworICBMaXNwX09iamVjdCB2bGlzdDsKKyAgcHRyZGlmZl90 IHg7CisgIGludCBpID0gMDsKKyAgTGlzcF9PYmplY3QgdGVtcCA9IFFuaWw7CisgIExpc3BfT2Jq ZWN0IHZlY3RvciA9IChGbWFrZV92ZWN0b3IgKG1ha2VfbnVtYmVyICgzKSwgUW5pbCkpOworICBp ZiAoIU5JTFAgKEZtZW1xICgoRmZyYW1lcCAodGFyZ2V0X2ZyYW1lKSksIGxpc3RuIChDT05TVFlQ RV9IRUFQLCAzLCBpbnRlcm4gKCJ4IiksIGludGVybiAoInczMiIpLCBpbnRlcm4gKCJucyIpKSkp KQorICAgIHsKKyAgICAgIGNvbG9yX3ZhbHVlcyA9IChGeHdfY29sb3JfdmFsdWVzIChjb2xvciwg dGFyZ2V0X2ZyYW1lKSk7CisgICAgICBmb3IgKHZsaXN0ID0gY29sb3JfdmFsdWVzOworICAgICAg ICAgICBDT05TUCAodmxpc3QpOworICAgICAgICAgICB2bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAg ICAgICAgeworICAgICAgICAgIHggPSBYSU5UIChYQ0FSICh2bGlzdCkpOworICAgICAgICAgIHRl bXAgPSBtYWtlX2Zsb2F0ICh4IC8gdmFsbWF4KTsKKyAgICAgICAgICBBU0VUICh2ZWN0b3IsIGks IHRlbXApOworICAgICAgICAgIGkgPSBpICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJu IHZlY3RvcjsKK30KKworLyogWW91IG9ubHkgbmVlZCB0byBjYWxsIGxvb2t1cF9iYXNpY19mYWNl IGlmIGl0LmZhY2VfaWQgaXMgYSBiYXNpYyBmYWNlCitBTkQgZmFjZS1yZW1hcHBpbmctYWxpc3Qg aXMgbm9uLW5pbC4gIElmIGl0LmZhY2VfaWQgaXMgbm90IGEgYmFzaWMKK2ZhY2UsIGxvb2t1cF9i YXNpY19mYWNlIHdpbGwgYWJvcnQsIGFuZCB5b3Ugc2hvdWxkIGNhbGwgbG9va3VwX2ZhY2UKK2lu c3RlYWQuICBGb3IgYSByZW1hcHBlZCBub24tYmFzaWMgZmFjZSB5b3Ugd2lsbCBoYXZlIHRvIGxv b2sgdXAKK2ZhY2UtcmVtYXBwaW5nLWFsaXN0IG1hbnVhbGx5IGFuZCB0aGVuIHVzZSBsb29rdXBf bmFtZWRfZmFjZS4gKi8KK3N0YXRpYyBMaXNwX09iamVjdAorbWNfYmdfY29sb3JfdmVjdG9yIChz dHJ1Y3Qgd2luZG93ICp3LCBlbnVtIGZhY2VfaWQgZmFjZV9pZCkKK3sKKyAgc3RydWN0IGZyYW1l ICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIHN0cnVjdCBmYWNlICpmYWNlOworICBMaXNwX09i amVjdCBjb2xvciwgY29sb3JfdmVjdG9yOworICBpZiAoIU5JTFAgKFZmYWNlX3JlbWFwcGluZ19h bGlzdCkKKyAgICAgICYmIChmYWNlX2lkID09IERFRkFVTFRfRkFDRV9JRCAvKiBRZGVmYXVsdCAq LworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0ZBQ0VfSUQgLyogUW1vZGVfbGlu ZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0lOQUNUSVZFX0ZBQ0VfSUQg LyogUW1vZGVfbGluZV9pbmFjdGl2ZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gSEVBREVS X0xJTkVfRkFDRV9JRCAvKiBRaGVhZGVyX2xpbmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IFRPT0xfQkFSX0ZBQ0VfSUQgLyogUXRvb2xfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9 PSBGUklOR0VfRkFDRV9JRCAvKiBRZnJpbmdlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBT Q1JPTExfQkFSX0ZBQ0VfSUQgLyogUXNjcm9sbF9iYXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lk ID09IEJPUkRFUl9GQUNFX0lEIC8qIFFib3JkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IENVUlNPUl9GQUNFX0lEIC8qIFFjdXJzb3IgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1P VVNFX0ZBQ0VfSUQgLyogUW1vdXNlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNRU5VX0ZB Q0VfSUQgLyogUW1lbnUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVS X0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBX SU5ET1dfRElWSURFUl9GSVJTVF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9maXJz dF9waXhlbCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfTEFTVF9Q SVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9sYXN0X3BpeGVsICovCisgICAgICAgICAg fHwgZmFjZV9pZCA9PSBWRVJUSUNBTF9CT1JERVJfRkFDRV9JRCAvKiBRdmVydGljYWxfYm9yZGVy ICovCisgICAgICAgICAgLyogUWludGVybmFsX2JvcmRlciAqLworICAgICAgICAgIC8qIHx8IGZh Y2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpICovCisgICAgICAgICAgKSkKKyAgICBm YWNlID0gRkFDRV9GUk9NX0lEIChmLCBsb29rdXBfYmFzaWNfZmFjZSAoZiwgZmFjZV9pZCkpOwor ICAgIGVsc2UKKyAgICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOworICBjb2xv ciA9IGZhY2UtPmxmYWNlW0xGQUNFX0JBQ0tHUk9VTkRfSU5ERVhdOworICBDSEVDS19TVFJJTkcg KGNvbG9yKTsKKyAgY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGNvbG9y KTsKKyAgcmV0dXJuIGNvbG9yX3ZlY3RvcjsKK30KKworLyogTUNfR0xZUEhfQ0FDSEU6CistICBU aGUgZmlyc3QgZWxlbWVudCBpcyBjb21wYXJlZCB0byB0aGUgYG1jLWdseXBoLWxpc3QnIHRvIGRl dGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgIHJlY2FsY3VsYXRlIGNvb3JkaW5hdGVzLiAg W1dlIGFsc28gY2hlY2sgd2hldGhlciB3aW5kb3ctc3RhcnQvd2luZG93LWVuZCBjaGFuZ2VkLl0K Ky0gIFRoZSBzZWNvbmQgZWxlbWVudCBjb250YWlucyBhbGwgcHJldmlvdXNseSBjYWxjdWxhdGVk IGNvb3JkaW5hdGVzLgorLSAgVGhlIHRoaXJkIGVsZW1lbnQgaXMgdGhlIGJ1ZmZlciB3aGVyZSB0 aGUgYG1jX2dseXBoX2NhY2hlJyB3YXMgc2V0LiAgQmVjYXVzZSB0aGUKKyAgIGBtY19nbHlwaF9j YWNoZScgaXMgd2luZG93LWxvY2FsLCB3ZSBuZWVkIHRvIGNoZWNrIGJvdGggdGhlIHdpbmRvdyBh bmQgdGhlIGJ1ZmZlci4KKyAgICAgKCgoMyBoYmFyIFsxLjAgMC4wIDAuMF0pCisgICAgICAgKDQg YmFyIFswLjAgMS4wIDAuMF0pCisgICAgICAgKDUgYm94IFswLjAgMC4wIDEuMF0pCisgICAgICAg KDYgaG9sbG93IFswLjggMC40IDAuMl0pCisgICAgICAgKDcgKGhiYXIgMykgWzEuMCAwLjAgMS4w XSkKKyAgICAgICAoOCAoYmFyIDMpIFswLjAgMS4wIDEuMF0pKQorICAgICAgKCgoMyBoYmFyIFsx LjAgMC4wIDAuMF0pICgyMiAyMCAyIDApKQorICAgICAgICgoNCBiYXIgWzAuMCAxLjAgMC4wXSkg KDMzIDIwIDMgMCkpCisgICAgICAgKCg1IGJveCBbMC4wIDAuMCAxLjBdKSAoNDQgMjAgNCAwKSkK KyAgICAgICAoKDYgaG9sbG93IFswLjggMC40IDAuMl0pICg1NSAyMCA1IDApKQorICAgICAgICgo NyAoaGJhciAzKSBbMS4wIDAuMCAxLjBdKSAoNjYgMjAgNiAwKSkKKyAgICAgICAoKDggKGJhciAz KSBbMC4wIDEuMCAxLjBdKSAoNzcgMjAgNyAwKSkpCisgICAgICAoQlVGRkVSIHdoZXJlIGBtY19n bHlwaF9jYWNoZScgd2FzIHNldC4pKSAqLworLyogSWYgUkVNT1ZFIGlzIDAsIHRoZW4gZHJhdyBm YWtlIGN1cnNvcnMuICBJZiBSRU1PVkUgaXMgMSwgdGhlbiBlcmFzZSBmYWtlIGN1cnNvcnMuICov Cit2b2lkCittY19jYWxjIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIHJlbW92ZSkKK3sKKyAgLyog YHN0YXJ0X2Rpc3BsYXknIGNhbGxzIGBpbml0X2l0ZXJhdG9yJyB3aGljaCBjcmFzaGVzIEVtYWNz IGlmOgorICBlYXNzZXJ0IChjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+PSBCVUZfQkVHIChjdXJy ZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikpCisgIFRoaXMgaGFwcGVucyB3aGVuIG11bHRp cGxlIGN1cnNvcnMgYXJlIGFjdGl2ZSBhbmQgdGhlIHVzZXIgdHlwZXM6ICBNLXggLi4uLiAqLwor ICBwdHJkaWZmX3QgY2hhcnBvcyA9IG1hcmtlcl9wb3NpdGlvbiAody0+c3RhcnQpOworICBib29s IGJhcmZfY3Jhc2hfb25lID0gKGNoYXJwb3MgPCAwIHx8IChjaGFycG9zID49IEJVRl9CRUcgKGN1 cnJlbnRfYnVmZmVyKSAmJiBjaGFycG9zIDw9IFpWKSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChi YXJmX2NyYXNoX29uZSkKKyAgICByZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAo dy0+ZnJhbWUpOworICBzdHJ1Y3Qgd2luZG93ICpzdyA9IFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dp bmRvdyk7CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIg KGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICAvKiBXZSB3YW50 IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBidWZmZXIgYmVmb3JlIHRlc3RpbmcgYnVm ZmVyIGxvY2FsIHZhcmlhYmxlcy4gKi8KKyAgTGlzcF9PYmplY3QgYnVmZmVyX2Rpc3BsYXlfdGFi bGUgPSBCVkFSIChiLCBkaXNwbGF5X3RhYmxlKTsKKyAgYm9vbCBidWZmZXJfZGlzcGxheV90YWJs ZV9wID0gIU5JTFAgKGJ1ZmZlcl9kaXNwbGF5X3RhYmxlKTsKKyAgTGlzcF9PYmplY3QgbGluZV9m ZWVkX3ZlY3RvcjsKKyAgaWYgKGJ1ZmZlcl9kaXNwbGF5X3RhYmxlX3ApCisgICAgbGluZV9mZWVk X3ZlY3RvciA9IEZhcmVmIChidWZmZXJfZGlzcGxheV90YWJsZSwgbWFrZV9udW1iZXIgKDEwKSk7 CisgIHN0cnVjdCBpdCBpdDsKKyAgdm9pZCAqaXRkYXRhID0gYmlkaV9zaGVsdmVfY2FjaGUgKCk7 CisgIHN0cnVjdCBpdCBzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0OworICB2b2lkICpzYXZlZF9p dGRhdGFfZm9yX3dpbmRvd19zdGFydCA9IE5VTEw7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90 ZXh0X3Bvc2l0aW9uOworICBwdHJkaWZmX3QgaXRfc3RhcnQ7CisgIGludCBmaXJzdF94LCBsYXN0 X3g7CisgIGludCBsbnVtX3dpZHRoID0gMDsKKyAgaW50IGxudW1fcGl4ZWxfd2lkdGggPSAwOwor ICBib29sIGhzY2wgPSAoIXctPnN1c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAm JiBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1ZSAoUWF1dG9faHNjcm9sbF9tb2RlLCB3LT5jb250ZW50 cyksIFFjdXJyZW50X2xpbmUpCisgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMCk7Cisg IGludCBoc2NsX2ZpcnN0X2hwb3MgPSB3aW5kb3dfaHNjcm9sbF9saW1pdGVkICh3LCBmKTsKKyAg aW50IGZyYW1lX2NoYXJfd2lkdGggPSBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOworICBpbnQgdGV4 dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgaW50IHJp Z2h0X2ZyaW5nZV93aWR0aCA9IFdJTkRPV19SSUdIVF9GUklOR0VfV0lEVEggKHcpOworICBpbnQg aGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lORE9XX0hFQURFUl9MSU5FX0hFSUdIVCAodyk7CisgIGVu dW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGU7CisgIGludCBjdXJzb3Jfd2lkdGggPSAx OworICBwdHJkaWZmX3QgcG9zaW50LCB4LCB5LCBocG9zLCB2cG9zOworICAvKiBBbiBpZGxlIHRp bWVyIHNpdHVhdGlvbiBhdCB0aGUgb3V0c2V0IG1heSBub3QgbmVjZXNzYXJpbHkgaW52b2tlIGBy ZWRpc3BsYXlfd2luZG93JywKKyAgd2hpY2ggaXMgd2hlcmUgY2VydGFpbiBtdWx0aXBsZSBjdXJz b3IgdmFsdWVzIGFyZSBzZXQgYXQgdGhlIHRhaWwgZW5kIHRoZXJlb2YuICovCisgIGlmICghdy0+ bWMuY3VycmVudF9zdGFydCkKKyAgICB3LT5tYy5jdXJyZW50X3N0YXJ0ID0gbWFya2VyX3Bvc2l0 aW9uICh3LT5zdGFydCk7CisgIExpc3BfT2JqZWN0IHNwZWNzLCBsaXNwX3R5cGUsIGNvbG9yX3Zl Y3Rvciwgdmxpc3QsIHhfeV9ocG9zX3Zwb3M7CisgIExpc3BfT2JqZWN0IHRlbXAgPSBRbmlsOwor ICBMaXNwX09iamVjdCByZXN1bHQgPSBRbmlsOworICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIg KHN0YXJ0X3RleHRfcG9zaXRpb24sIHctPnN0YXJ0KTsKKyAgc3RhcnRfZGlzcGxheSAoJml0LCB3 LCBzdGFydF90ZXh0X3Bvc2l0aW9uKTsKKyAgZmlyc3RfeCA9IGl0LmZpcnN0X3Zpc2libGVfeDsK KyAgbGFzdF94ID0gaXQubGFzdF92aXNpYmxlX3g7CisgIGl0X3N0YXJ0ID0gSVRfQ0hBUlBPUyAo aXQpOworICBTQVZFX0lUIChzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRk YXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICAvKiBGaW5pc2ggcHJpbWluZyB0aGUgSVQgZm9yIHBv dGVudGlhbCBsaW5lIG51bWJlcnMuICovCisgIGlmICghTklMUCAoVmRpc3BsYXlfbGluZV9udW1i ZXJzKQorICAgICAgJiYgIUVRIChWZGlzcGxheV9saW5lX251bWJlcnMsIFF2aXN1YWwpKQorICAg IHsKKyAgICAgIGl0LmZpcnN0X3Zpc2libGVfeCA9IDA7CisgICAgICBtb3ZlX2l0X2J5X2xpbmVz ICgmaXQsIDEpOworICAgICAgbG51bV93aWR0aCA9IGl0LmxudW1fd2lkdGg7CisgICAgICBsbnVt X3BpeGVsX3dpZHRoID0gaXQubG51bV9waXhlbF93aWR0aDsKKyAgICAgIFJFU1RPUkVfSVQgKCZp dCwgJnNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0 YXJ0KTsKKyAgICAgIGl0LmZpcnN0X3Zpc2libGVfeCA9IGZpcnN0X3g7CisgICAgICBpdC5sYXN0 X3Zpc2libGVfeCA9IGxhc3RfeDsKKyAgICAgIGl0LmxudW1fd2lkdGggPSBsbnVtX3dpZHRoOwor ICAgICAgaXQubG51bV9waXhlbF93aWR0aCA9IGxudW1fcGl4ZWxfd2lkdGg7CisgICAgICBTQVZF X0lUIChzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5k b3dfc3RhcnQpOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUkVNT1ZFIEdMWVBIIENVUlNPUlMKKyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworICAvKiBSZW1vdmUgdGhlIGN1cnNvcnMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoZSBj b25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuICovCisgIGlmICgocmVtb3ZlICYmICFOSUxQICh3LT5t Y19nbHlwaF9jYWNoZSkgJiYgTklMUCAoQlZBUiAoYiwgbWNfZ2x5cGhfbGlzdCkpKQorICAgICAg fHwgKCFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkgJiYgIU5JTFAgKEJWQVIgKGIsIG1jX2dseXBo X2xpc3QpKSAmJiAocmVtb3ZlIHx8IHcgIT0gc3cpKSkKKyAgICB7CisgICAgICAvKiBFcmFzZSB0 aGUgcmVhbCBjdXJzb3Igc28gdGhhdCB0aGUgd2hvbGUgdmVydGljYWwgbGluZSBnZXRzIHJlbW92 ZWQsIG5vdCBqdXN0IHRoZSBmYWtlIGN1cnNvcnMuICovCisgICAgICBtY19lcmFzZV9nbHlwaF9j dXJzb3IgKHcsIHctPnBoeXNfY3Vyc29yLngsIHctPnBoeXNfY3Vyc29yLnksIHctPnBoeXNfY3Vy c29yLmhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPnBoeXNfY3Vyc29yLnZw b3MsIHctPnBoeXNfY3Vyc29yX3R5cGUpOworICAgICAgLyogUHJvY2VzcyB0aGUgTUNfR0xZUEhf Q0FDSEUuICovCisgICAgICBpZiAoIU5JTFAgKHctPm1jX2dseXBoX2NhY2hlKSkKKyAgICAgICAg eworICAgICAgICAgIGZvciAodmxpc3QgPSBYQ0FSIChYQ0RSICh3LT5tY19nbHlwaF9jYWNoZSkp OworICAgICAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgICAgIHZsaXN0ID0g WENEUiAodmxpc3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzcGVjcyA9IFhDQVIg KFhDQVIgKHZsaXN0KSk7CisgICAgICAgICAgICAgIGxpc3BfdHlwZSA9IEZudGggKG1ha2VfbnVt YmVyICgxKSwgc3BlY3MpOworICAgICAgICAgICAgIGlmIChDT05TUCAobGlzcF90eXBlKSkKKyAg ICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIg KGxpc3BfdHlwZSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGN1 cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsKKyAgICAgICAg ICAgICAgeF95X2hwb3NfdnBvcyA9IFhDQVIgKFhDRFIgKFhDQVIgKHZsaXN0KSkpOworICAgICAg ICAgICAgICB4ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDApLCB4X3lfaHBvc192cG9zKSk7 CisgICAgICAgICAgICAgIHkgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMSksIHhfeV9ocG9z X3Zwb3MpKTsKKyAgICAgICAgICAgICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgy KSwgeF95X2hwb3NfdnBvcykpOworICAgICAgICAgICAgICB2cG9zID0gWElOVCAoRm50aCAobWFr ZV9udW1iZXIgKDMpLCB4X3lfaHBvc192cG9zKSk7CisgICAgICAgICAgICAgIG1jX2VyYXNlX2ds eXBoX2N1cnNvciAodywgeCwgeSwgaHBvcywgdnBvcywgY3Vyc29yX3R5cGUpOworICAgICAgICAg ICAgfQorICAgICAgICAgIGlmIChOSUxQIChCVkFSIChiLCBtY19nbHlwaF9saXN0KSkpCisgICAg ICAgICAgICB3c2V0X21jX2dseXBoX2NhY2hlICh3LCBRbmlsKTsKKyAgICAgICAgfQorICAgICAg dy0+bWMuZXJhc2VfZ2x5cGhfY3Vyc29yID0gZmFsc2U7CisgICAgfQorLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRURSQVcgR0xZUEggQ1VS U09SUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgIC8qIElmIHRoZSBmaXJzdCBlbGVtZW50 IG9mIHctPm1jX2dseXBoX2NhY2hlIGlzIHRoZSBzYW1lIGFzIHRoZSBsb2NhbCB2YXJpYWJsZSBt Y19nbHlwaF9saXN0LAorICAgICBhbmQgdGhlIHByZXZpb3VzL2N1cnJlbnQgd2luZG93LXN0YXJ0 L3dpbmRvdy1lbmQgYXJlIHRoZSBzYW1lIChlLmcuLCBubyBzY3JvbGxpbmcpLAorICAgICB0aGVu IHJlZHJhdyB0aGUgY3Vyc29ycyB1c2luZyB0aGUgY2FjaGUuICBUaGlzIGF2b2lkcyByZWNhbGN1 bGF0aW5nIGNvb3JkaW5hdGVzLiAqLworICBpZiAoIXJlbW92ZQorICAgICAgJiYgdyA9PSBzdwor ICAgICAgJiYgdy0+bWMuY3VycmVudF9zdGFydAorICAgICAgJiYgdy0+bWMuY3VycmVudF9lbmQK KyAgICAgICYmIHctPm1jLnByZXZpb3VzX3N0YXJ0CisgICAgICAmJiB3LT5tYy5wcmV2aW91c19l bmQKKyAgICAgICYmIHctPm1jLmN1cnJlbnRfc3RhcnQgPT0gdy0+bWMucHJldmlvdXNfc3RhcnQK KyAgICAgICYmIHctPm1jLmN1cnJlbnRfZW5kID09IHctPm1jLnByZXZpb3VzX2VuZAorICAgICAg JiYgIU5JTFAgKEJWQVIgKGIsIG1jX2dseXBoX2xpc3QpKQorICAgICAgJiYgIU5JTFAgKHctPm1j X2dseXBoX2NhY2hlKQorICAgICAgJiYgIU5JTFAgKEZlcXVhbCAoRm50aCAobWFrZV9udW1iZXIg KDApLCB3LT5tY19nbHlwaF9jYWNoZSksIEJWQVIgKGIsIG1jX2dseXBoX2xpc3QpKSkpCisgICAg eworICAgICAgZm9yICh2bGlzdCA9IFhDQVIgKFhDRFIgKHctPm1jX2dseXBoX2NhY2hlKSk7Cisg ICAgICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3Qp KQorICAgICAgICB7CisgICAgICAgICAgc3BlY3MgPSBYQ0FSIChYQ0FSICh2bGlzdCkpOworICAg ICAgICAgIHBvc2ludCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgwKSwgc3BlY3MpKTsKKyAg ICAgICAgICBsaXNwX3R5cGUgPSBGbnRoIChtYWtlX251bWJlciAoMSksIHNwZWNzKTsKKyAgICAg ICAgICBpZiAoQ09OU1AgKGxpc3BfdHlwZSkpCisgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1j X2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxpc3BfdHlwZSkpOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKGxp c3BfdHlwZSk7CisgICAgICAgICAgaWYgKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAg Y3Vyc29yX3dpZHRoID0gWElOVCAoWENBUiAoWENEUiAobGlzcF90eXBlKSkpOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGggPSAxOworICAgICAgICAgIGNvbG9y X3ZlY3RvciA9IEZudGggKG1ha2VfbnVtYmVyICgyKSwgc3BlY3MpOworICAgICAgICAgIGlmIChT VFJJTkdQIChjb2xvcl92ZWN0b3IpKQorICAgICAgICAgICAgY29sb3JfdmVjdG9yID0gbWNfY29s b3JfdmVjdG9yX2NhbGMgKHcsIGNvbG9yX3ZlY3Rvcik7CisgICAgICAgICAgeF95X2hwb3NfdnBv cyA9IFhDQVIgKFhDRFIgKFhDQVIgKHZsaXN0KSkpOworICAgICAgICAgIHggPSBYSU5UIChGbnRo IChtYWtlX251bWJlciAoMCksIHhfeV9ocG9zX3Zwb3MpKTsKKyAgICAgICAgICB5ID0gWElOVCAo Rm50aCAobWFrZV9udW1iZXIgKDEpLCB4X3lfaHBvc192cG9zKSk7CisgICAgICAgICAgaHBvcyA9 IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgeF95X2hwb3NfdnBvcykpOworICAgICAgICAg IHZwb3MgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMyksIHhfeV9ocG9zX3Zwb3MpKTsKKyAg ICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgeSwgaHBvcywgdnBvcywgY3Vyc29y X3R5cGUsIGN1cnNvcl93aWR0aCwgY29sb3JfdmVjdG9yLCBRbWNfZ2x5cGgpOworICAgICAgICB9 CisgICAgICB3LT5tYy5kcmF3X2dseXBoX2N1cnNvciA9IGZhbHNlOworICAgIH0KKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUkFXIEdMWVBI IENVUlNPUlMgQU5FVworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgICAgLyogRHJhdyB0aGUg Y3Vyc29ycyBhbmV3IGJlY2F1c2Ugc29tZXRoaW5nIGhhcyBjaGFuZ2VkLCBlLmcuLCB0aGUgZmly c3QgZWxlbWVudCBvZgorICAgICAgIHctPm1jX2dseXBoX2NhY2hlIGlzIE5PVCB0aGUgc2FtZSBh cyB0aGUgbG9jYWwgdmFyaWFibGUgbWNfZ2x5cGhfbGlzdDsgYW5kL29yLCB0aGUgcHJldmlvdXMv CisgICAgICAgY3VycmVudCB3aW5kb3ctc3RhcnQvd2luZG93LWVuZCBhcmUgTk9UIHRoZSBzYW1l IChlLmcuLCBzY3JvbGxpbmcgaGFzIG9jY3VycmVkKS4KKyAgICAgICBTZW1pLWV4cGVuc2l2ZSBj YWxjdWxhdGlvbiBvZiBjb29yZGluYXRlcyBpcyByZXF1aXJlZC4gKi8KKyAgICBlbHNlIGlmICgh cmVtb3ZlCisgICAgICAgICAgICAgJiYgdyA9PSBzdworICAgICAgICAgICAgICYmIHctPm1jLmN1 cnJlbnRfc3RhcnQKKyAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgbWNfZ2x5cGhfbGlz dCkpKQorICAgICAgeworICAgICAgICBmb3IgKHZsaXN0ID0gQlZBUiAoYiwgbWNfZ2x5cGhfbGlz dCk7CisgICAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgICB2bGlzdCA9IFhD RFIgKHZsaXN0KSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzcGVjcyA9IFhDQVIgKHZsaXN0 KTsKKyAgICAgICAgICAgIHBvc2ludCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgwKSwgc3Bl Y3MpKTsKKyAgICAgICAgICAgIGxpc3BfdHlwZSA9IEZudGggKG1ha2VfbnVtYmVyICgxKSwgc3Bl Y3MpOworICAgICAgICAgICAgaWYgKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICBj dXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxpc3BfdHlwZSkpOwor ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUgPSBtY19saXNw X3RvX2N1cnNvcl90eXBlIChsaXNwX3R5cGUpOworICAgICAgICAgICAgaWYgKENPTlNQIChsaXNw X3R5cGUpKQorICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGggPSBYSU5UIChYQ0FSIChYQ0RSIChs aXNwX3R5cGUpKSk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJzb3Jf d2lkdGggPSAxOworICAgICAgICAgICAgY29sb3JfdmVjdG9yID0gRm50aCAobWFrZV9udW1iZXIg KDIpLCBzcGVjcyk7CisgICAgICAgICAgICBpZiAoU1RSSU5HUCAoY29sb3JfdmVjdG9yKSkKKyAg ICAgICAgICAgICAgY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGNvbG9y X3ZlY3Rvcik7CisgICAgICAgICAgICBSRVNUT1JFX0lUICgmaXQsICZzYXZlZF9pdF9mb3Jfd2lu ZG93X3N0YXJ0LCBzYXZlZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCk7CisgICAgICAgICAgICAv KiBGSVhNRTogIFdoZW4gZGVhbGluZyB3aXRoIGEgbGluZSBmZWVkIGBidWZmZXItZGlzcGxheS10 YWJsZScgaXNzdWUsCisgICAgICAgICAgICBpbXBsZW1lbnQgYSBzeXN0ZW0gdXNpbmcgYG1jX21v dmVfaXRfaW5fZGlzcGxheV9saW5lJyB0byBhdm9pZCBvdmVyc2hvb3RpbmcuCisgICAgICAgICAg ICBUaGUgY3VycmVudCBzdHJhdGVneSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIGZpcnN0IHVzZSBg bW92ZV9pdF90bycgYW5kIHNlZSBpZgorICAgICAgICAgICAgaXQgZW5jb3VudGVyZWQgYSBsaW5l IGZlZWQuICBJZiBzbywgdGhlbiBjYWxsIGBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIDApYCBhbmQK KyAgICAgICAgICAgIHRoZW4gYG1jX21vdmVfaXRfaW5fZGlzcGxheV9saW5lJyAtLSBzdG9wcGlu ZyBhdCB0aGUgY29ycmVjdCBYLiAqLworICAgICAgICAgICAgbW92ZV9pdF90byAoJml0LCBwb3Np bnQsIGl0Lmxhc3RfdmlzaWJsZV94LCBpdC5sYXN0X3Zpc2libGVfeSAtIDEsIC0xLCBNT1ZFX1RP X1BPUyB8IE1PVkVfVE9fWCB8IE1PVkVfVE9fWSk7CisgICAgICAgICAgICAvKiAoYXJlZiBidWZm ZXItZGlzcGxheS10YWJsZSA/XG4pID09IFsoMTgyIC4gMTI3KSAxMF0gKi8KKyAgICAgICAgICAg IGJvb2wgbGluZV9mZWVkX292ZXJzaG9vdCA9IChGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkp ID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBidWZm ZXJfZGlzcGxheV90YWJsZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgVkVDVE9SUCAobGluZV9mZWVkX3ZlY3RvcikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBBU0laRSAobGluZV9mZWVkX3ZlY3RvcikgPiAxCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgSVRFUkFUT1JfQVRfRU5EX09GX0xJ TkVfUCAoJml0KSk7CisgICAgICAgICAgICBpbnQgYWRqdXN0X3ggPSAobGluZV9mZWVkX292ZXJz aG9vdCkgPyBmcmFtZV9jaGFyX3dpZHRoIDogMDsKKyAgICAgICAgICAgIGludCBhZGp1c3RfaHBv cyA9IChsaW5lX2ZlZWRfb3ZlcnNob290KSA/IDEgOiAwOworICAgICAgICAgICAgaWYgKElUX0NI QVJQT1MgKGl0KSAhPSBwb3NpbnQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4 ID0gLTE7CisgICAgICAgICAgICAgICAgeSA9IC0xOworICAgICAgICAgICAgICAgIGhwb3MgPSAt MTsKKyAgICAgICAgICAgICAgICB2cG9zID0gLTE7CisgICAgICAgICAgICAgICAgZ290byBkb25l X29uZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgeSA9IGl0LmN1cnJlbnRfeTsKKyAg ICAgICAgICAgIGlmIChoZWFkZXJfbGluZV9oZWlnaHQgPiAwKQorICAgICAgICAgICAgICB2cG9z ID0gaXQudnBvcyArIDE7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2cG9z ID0gaXQudnBvczsKKyAgICAgICAgICAgIGlmIChoc2NsKQorICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgeCA9IGl0LmN1cnJlbnRfeCAtIChoc2NsX2ZpcnN0X2hwb3MgKiBmcmFtZV9j aGFyX3dpZHRoKSAtIGFkanVzdF94OworICAgICAgICAgICAgICAgIGhwb3MgPSBpdC5ocG9zIC0g aHNjbF9maXJzdF9ocG9zIC0gYWRqdXN0X2hwb3M7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHggPSBpdC5j dXJyZW50X3ggLSBmaXJzdF94IC0gYWRqdXN0X3g7CisgICAgICAgICAgICAgICAgICBocG9zID0g aXQuaHBvcyAtIGFkanVzdF9ocG9zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRv bmVfb25lOgorICAgICAgICAgICAgeF95X2hwb3NfdnBvcyA9IGxpc3RuIChDT05TVFlQRV9IRUFQ LCA0LCBtYWtlX251bWJlciAoeCksIG1ha2VfbnVtYmVyICh5KSwgbWFrZV9udW1iZXIgKGhwb3Mp LCBtYWtlX251bWJlciAodnBvcykpOworICAgICAgICAgICAgdGVtcCA9IEZjb25zIChzcGVjcywg RmNvbnMgKHhfeV9ocG9zX3Zwb3MsIFFuaWwpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IEZjb25z ICh0ZW1wLCByZXN1bHQpOworICAgICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIHgs IHksIGhwb3MsIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGNvbG9yX3ZlY3Rvciwg UW1jX2dseXBoKTsKKyAgICAgICAgICB9CisvKiBgdy0+bWNfZ2x5cGhfY2FjaGUnIGlzIHNldCBm b3IgdGhlIHdpbmRvdywgbm90IGJ1ZmZlcit3aW5kb3cgLS0gaS5lLiwgYWxsIGJ1ZmZlcnMgYXBw ZWFyaW5nCitpbiB0aGUgc2FtZSB3aW5kb3cgdmlhIGBzd2l0Y2gtdG8tYnVmZmVyJyB3aWxsIGhh dmUgYHctPm1jX2dseXBoX2NhY2hlJy4gIFRoaXMgYmVoYXZpb3IKK2lzIGNvbnNpc3RlbnQgd2l0 aCBmdW5jdGlvbnMgc3VjaCBhcyBgc2V0LXdpbmRvdy1kaXNwbGF5LXRhYmxlJy4gIFdlIGRlYWwg d2l0aCB0aGlzIGluCitgbnN0ZXJtLm0nIC8gYHczMnRlcm0uYycgLyBgeHRlcm0uYycgYnkgY29t cGFyaW5nIGB3LT5jb250ZW50cycgdG8gdGhlIHZhbHVlIG9mIHRoZSBgYnVmJworc3RvcmVkIGlu IGB3LT5tY19nbHlwaF9jYWNoZSc6ICAoRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtl X251bWJlciAoMiksIHctPm1jX2dseXBoX2NhY2hlKSkpKSAqLworICAgICAgICBpZiAoIU5JTFAg KHJlc3VsdCkpCisgICAgICAgICAgd3NldF9tY19nbHlwaF9jYWNoZSAodywgbGlzdG4gKENPTlNU WVBFX0hFQVAsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlZBUiAo YiwgbWNfZ2x5cGhfbGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RnJldmVyc2UgKHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmNvbnMgKGJ1ZiwgUW5pbCkpKTsKKyAgICAgICAgdy0+bWMuZHJhd19nbHlwaF9jdXJzb3IgPSBm YWxzZTsKKyAgICAgIH0KKyAgYmlkaV91bnNoZWx2ZV9jYWNoZSAoaXRkYXRhLCBmYWxzZSk7Cit9 CisKK2ludAorbWNfbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmUgKHN0cnVjdCB3aW5kb3cgKncsIHN0 cnVjdCBpdCAqaXQsIGludCB0YXJnZXRfeCkKK3sKKyAgaWYgKElUX0NIQVJQT1MgKCppdCkgPT0g WlYpCisgICAgcmV0dXJuIE1PVkVfUE9TX01BVENIX09SX1pWOworICBzdHJ1Y3QgaXQgc2F2ZWRf aXQ7CisgIHZvaWQgKnNhdmVkX2RhdGEgPSBiaWRpX3NoZWx2ZV9jYWNoZSAoKTsKKyAgZW51bSBt b3ZlX2l0X3Jlc3VsdCByYyA9IE1PVkVfWF9SRUFDSEVEOworICBpbnQgbmV3X3gsIHByZXZfeDsK KyAgLyogV2hlbiBgYXV0by1oc2Nyb2xsLW1vZGUnIGlzIHNldCB0byBgY3VycmVudC1saW5lYCBh bmQgd2UgYXJlIGhvcml6b250YWwgc2Nyb2xsaW5nCisgIGEgbG9uZyBsaW5lIHRoYXQgYXBwcm9h Y2hlcyBvciBleGNlZWRzIGFuIGBpdC5jdXJyZW50LnhgIG9mIGFwcHJveGltYXRlbHkgMTAwMCwg YHJjYAorICB3aWxsIGVycm9uZW91c2x5IHJldHVybiBlYXJseSB3aXRoIGEgTU9WRV9MSU5FX1RS VU5DQVRFRCBpbmRpY2F0b3IgIHdpdGhvdXQgcHVzaGluZworICBmb3J3YXJkcyB1bnRpbCBJVCBy ZWFjaGVzIHRoZSB0YXJnZXRfeC4gIEFzIGEgd29ya2Fyb3VuZCwgaWdub3JlIE1PVkVfTElORV9U UlVOQ0FURUQuICovCisgIHdoaWxlIChpdC0+Y3VycmVudF94ICsgaXQtPnBpeGVsX3dpZHRoIDw9 IHRhcmdldF94CisgICAgICAgICAmJiAocmMgPT0gTU9WRV9YX1JFQUNIRUQKKyAgICAgICAgICAg ICB8fCByYyA9PSBNT1ZFX0xJTkVfVFJVTkNBVEVECisgICAgICAgICAgICAgfHwgKGl0LT5saW5l X3dyYXAgPT0gV09SRF9XUkFQCisgICAgICAgICAgICAgICAgICYmIHJjID09IE1PVkVfUE9TX01B VENIX09SX1pWKSkpCisgICAgeworICAgICAgU0FWRV9JVCAoc2F2ZWRfaXQsICppdCwgc2F2ZWRf ZGF0YSk7CisgICAgICBuZXdfeCA9IGl0LT5jdXJyZW50X3ggKyBpdC0+cGl4ZWxfd2lkdGg7Cisg ICAgICBpZiAobmV3X3ggPT0gaXQtPmN1cnJlbnRfeCkKKyAgICAgICAgbmV3X3grKzsKKyAgICAg IHJjID0gbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8gKGl0LCBaViwgbmV3X3gsIE1PVkVfVE9f UE9TIHwgTU9WRV9UT19YKTsKKyAgICAgIGlmIChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QIChp dCkKKyAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisg ICAgICAgICAgLyogIzI4OTM2OiAgYG1vdmVfaXRfaW5fZGlzcGxheV9saW5lX3RvJyByZXR1cm5z IE1PVkVfUE9TX01BVENIX09SX1pWCisgICAgICAgICAgYmVmb3JlIHJlYWNoaW5nIFpWIHdoZW4g dGhlIGxhdHRlciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIEFORCBgd29yZC13cmFwJworICAg ICAgICAgIGlzIG5vbi1uaWw6ICBhYmNkZWZnW1pWXS4gIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGFk ZCBhbiBleHRyYSBjaGVjayB1c2luZworICAgICAgICAgIElUX0NIQVJQT1MgYW5kIGNvbXBhcmlu ZyBpdCB0byBaVi4gKi8KKyAgICAgICAgICB8fCAocmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYK KyAgICAgICAgICAgICAgJiYgSVRfQ0hBUlBPUyAoKml0KSA9PSBaVikpCisgICAgICAgIGJyZWFr OworICAgIH0KKyAgLyogV2hlbiB3b3JkLXdyYXAgaXMgb24sIFRPX1ggbWF5IGxpZSBwYXN0IHRo ZSBlbmQgb2YgYSB3cmFwcGVkIGxpbmUuCisgIFRoZW4gaXQtPmN1cnJlbnQgaXMgdGhlIGNoYXJh Y3RlciBvbiB0aGUgbmV4dCBsaW5lLCBzbyBiYWNrdHJhY2sgdG8gdGhlCisgIHNwYWNlIGJlZm9y ZSB0aGUgd3JhcCBwb2ludC4gICovCisgIGlmIChpdC0+bGluZV93cmFwID09IFdPUkRfV1JBUAor ICAgICAgJiYgcmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICB7CisgICAgICBwcmV2X3gg PSBtYXggKGl0LT5jdXJyZW50X3ggLSAxLCAwKTsKKyAgICAgIFJFU1RPUkVfSVQgKGl0LCAmc2F2 ZWRfaXQsIHNhdmVkX2RhdGEpOworICAgICAgbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8gKGl0 LCAtMSwgcHJldl94LCBNT1ZFX1RPX1gpOworICAgIH0KKyAgYmlkaV91bnNoZWx2ZV9jYWNoZSAo c2F2ZWRfZGF0YSwgdHJ1ZSk7CisgIC8qIFdvcmthcm91bmQgZm9yIGJ1ZyAjMjg5MzYgLS0gY29y cmVjdCB0aGUgZXJyb25lb3VzIE1PVkVfUE9TX01BVENIX09SX1pWLiAqLworICBpZiAoaXQtPmN1 cnJlbnRfeCA9PSB0YXJnZXRfeAorICAgICAgJiYgcmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYK KyAgICAgICYmIElUX0NIQVJQT1MgKCppdCkgIT0gWlYpCisgICAgcmMgPSBNT1ZFX1hfUkVBQ0hF RDsKKyAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorbWNfY3Jvc3NoYWlyc19oZWxwZXIg KHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCB4LCBwdHJkaWZmX3QgeSwgcHRyZGlmZl90IGhw b3MsIHB0cmRpZmZfdCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgIGVudW0gdGV4dF9jdXJz b3Jfa2luZHMgdHlwZSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2Jq ZWN0IGZvcmVncm91bmQsIExpc3BfT2JqZWN0IGJhY2tncm91bmQsCisgICAgICAgICAgICAgICAg ICAgICAgTGlzcF9PYmplY3QgZmxhdm9yLCBwdHJkaWZmX3QgcG9zLCBMaXNwX09iamVjdCAqcmVz dWx0KQoreworICBMaXNwX09iamVjdCB0ZW1wOworICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywg eCwgeSwgaHBvcywgdnBvcywgdHlwZSwgd2lkdGgsIGZvcmVncm91bmQsIGZsYXZvcik7CisgIHRl bXAgPSBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMTAsCisgICAgICAgICAgICAgICAgbWFrZV9udW1i ZXIgKHgpLAorICAgICAgICAgICAgICAgIG1ha2VfbnVtYmVyICh5KSwKKyAgICAgICAgICAgICAg ICBtYWtlX251bWJlciAoaHBvcyksCisgICAgICAgICAgICAgICAgbWFrZV9udW1iZXIgKHZwb3Mp LAorICAgICAgICAgICAgICAgIG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKHR5cGUpLAorICAgICAg ICAgICAgICAgIG1ha2VfbnVtYmVyICh3aWR0aCksCisgICAgICAgICAgICAgICAgZm9yZWdyb3Vu ZCwKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgICAgIGZsYXZvciwK KyAgICAgICAgICAgICAgICBtYWtlX251bWJlciAocG9zKSk7CisgICpyZXN1bHQgPSBGY29ucyAo dGVtcCwgKnJlc3VsdCk7Cit9CisKK3ZvaWQKK21jX2RyYXdfY3Jvc3NoYWlycyAoc3RydWN0IHdp bmRvdyAqdykKK3sKKyAgLyogRWxpIFouOiAgVGhpcyBkb2Vzbid0IGZlZWwgcmVsZXZhbnQuICBZ b3UgY2FuIGFsd2F5cyByZWRpc3BsYXkgYSB3aW5kb3cgdGhhdCBpcworICBub3QgdGhlIHNlbGVj dGVkIHdpbmRvdywgcHJvdmlkZWQgdGhhdCB5b3UgdGFrZSBjYXJlIHRvIHN3aXRjaCB0byBpdHMg YnVmZmVyCisgIChyZWRpc3BsYXkgZG9lcyB0aGF0IGFscmVhZHkpLiAqLworICBpZiAodyAhPSBY V0lORE9XIChzZWxlY3RlZF93aW5kb3cpKQorICAgIHJldHVybjsKKyAgLyogRWxpIFouOiAgSG93 IGRpZCB5b3UgZ2V0IGludG8gdGhpcyBzaXR1YXRpb24/ICBJdCBzaG91bGRuJ3QgaGFwcGVuIGR1 cmluZyByZWRpc3BsYXkuICovCisgIGlmICghV0lORE9XX1ZBTElEX1AgKHNlbGVjdGVkX3dpbmRv dykpCisgICAgcmV0dXJuOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsK KyAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgIENIRUNLX0JVRkZFUiAoYnVmKTsK KyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisvKiBlYXNzZXJ0IChDSEFSUE9T IChwb3MpID49IEJFR1YgJiYgQ0hBUlBPUyAocG9zKSA8PSBaVik7CisgICBlYXNzZXJ0IChjaGFy cG9zID09IEJZVEVfVE9fQ0hBUiAoYnl0ZXBvcykpOworICAgZWFzc2VydCAoQlVGX0JFR19CWVRF IChiKSA8PSBieXRlcG9zICYmIGJ5dGVwb3MgPD0gQlVGX1pfQllURSAoYikpOyAqLworICBwdHJk aWZmX3QgY2hhcnBvcyA9IG1hcmtlcl9wb3NpdGlvbiAody0+c3RhcnQpOworICBwdHJkaWZmX3Qg Ynl0ZXBvcyA9IG1hcmtlcl9ieXRlX3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIC8qIEVsaSBaLjog IElmIHdpbmRvdydzIHN0YXJ0IHBvaW50IGlzIGludmFsaWQsIGl0IG1lYW5zIHRoZSB3aW5kb3cg bmVlZHMgdG8gYmUKKyAgcmVkaXNwbGF5ZWQuICBBZ2FpbiwgSSdtIG5vdCBzdXJlIEkgdW5kZXJz dGFuZCBob3cgZG8geW91IGdldCBpbnRvIHRoaXMgc2l0dWF0aW9uCisgIGluIHRoZSBtaWRkbGUg b2YgcmVkaXNwbGF5LiAqLworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKGNoYXJwb3MgPj0gQkVH ViAmJiBjaGFycG9zIDw9IFpWKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfb25l KQorICAgIHJldHVybjsKKyAgLyogRWxpIFouOiAgTGlrZXdpc2UuICBNYXJrZXJzIGFyZSB1cGRh dGVkIHdoZW4gYSBidWZmZXIgaXMgbW9kaWZpZWQsIHNvIHRoaXMKKyAgc2hvdWxkIG5ldmVyIGhh cHBlbi4gKi8KKyAgYm9vbCBiYXJmX2NyYXNoX3R3byA9IChjaGFycG9zID09IEJZVEVfVE9fQ0hB UiAoYnl0ZXBvcykpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF90d28pCisgICAg cmV0dXJuOworICAvKiBFbGkgWi46ICBTaW5jZSB5b3UgYWxyZWFkeSB2ZXJpZmllZCB0aGUgc2Ft ZSBjb25kaXRpb24gYWJvdXQgdGhlIGNoYXJhY3RlcgorICBwb3NpdGlvbiwgYW5kIHlvdSBhbHJl YWR5IHZlcmlmaWVkIHRoYXQgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgdGhlIGJ5dGUKKyAg cG9zaXRpb24gYXJlIGNvbnNpc3RlbnQsIHRoaXMgY29uZGl0aW9uIGlzIHJlZHVuZGFudC4gKi8K Ky8qCisgIGJvb2wgYmFyZl9jcmFzaF90aHJlZSA9IChCVUZfQkVHX0JZVEUgKGIpIDw9IGJ5dGVw b3MgJiYgYnl0ZXBvcyA8PSBCVUZfWl9CWVRFIChiKSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChi YXJmX2NyYXNoX3RocmVlKQorICAgIHJldHVybjsKKyovCisgIGlmICghQlVGRkVSUCAoYnVmKSkK KyAgICByZXR1cm47CisgIGlmIChOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkpCisgICAgcmV0 dXJuOworICBpZiAoTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyKSkK KyAgICAgICYmIE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIpKSkKKyAg ICByZXR1cm47CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJFR0lOIEpPVVJORVkgLi4uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q CisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBkb3VibGUgY3B1 X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07CisgIHN0YXJ0 ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyAgc3RydWN0IGl0IGl0OworICB2b2lkICppdGRhdGEg PSBiaWRpX3NoZWx2ZV9jYWNoZSAoKTsKKyAgc3RydWN0IGl0IHNhdmVkX2l0X2Zvcl93aW5kb3df c3RhcnQ7CisgIHZvaWQgKnNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0ID0gTlVMTDsKKyAg c3RydWN0IGl0IHNhdmVkX2l0X2Zvcl9ob3Jpem9udGFsX3J1bGVyOworICB2b2lkICpzYXZlZF9p dGRhdGFfZm9yX2hvcml6b250YWxfcnVsZXIgPSBOVUxMOworICBlbnVtIG1vdmVfaXRfcmVzdWx0 IHJjID0gTU9WRV9YX1JFQUNIRUQ7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0 aW9uOworICBwdHJkaWZmX3QgaXRfc3RhcnQ7CisgIGludCBmaXJzdF94LCBsYXN0X3g7CisgIGlu dCBsbnVtX3dpZHRoID0gMDsKKyAgaW50IGxudW1fcGl4ZWxfd2lkdGggPSAwOworICBpbnQgZnJh bWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURUSCAoZik7CisgIGJvb2wgaHNjbCA9ICgh dy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICYmIEVRIChGYnVmZmVyX2xv Y2FsX3ZhbHVlIChRYXV0b19oc2Nyb2xsX21vZGUsIGJ1ZiksIFFjdXJyZW50X2xpbmUpCisgICAg ICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMCk7CisgIGludCBoc2NsX2ZpcnN0X2hwb3MgPSB3 aW5kb3dfaHNjcm9sbF9saW1pdGVkICh3LCBmKTsKKyAgaW50IGhzY2xfZmlyc3RfeCA9IGhzY2xf Zmlyc3RfaHBvcyAqIGZyYW1lX2NoYXJfd2lkdGg7CisgIGludCB0ZXh0X2FyZWFfd2lkdGggPSB3 aW5kb3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEpOworICBib29sIGN1cnNvcl9pbl9mcmluZ2Vf cCA9IHctPm91dHB1dF9jdXJzb3IueCArIGZyYW1lX2NoYXJfd2lkdGggPj0gdGV4dF9hcmVhX3dp ZHRoOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3c7CisgIGludCByaWdodF9mcmluZ2Vf d2lkdGggPSBXSU5ET1dfUklHSFRfRlJJTkdFX1dJRFRIICh3KTsKKyAgaW50IGhlYWRlcl9saW5l X2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBpbnQgY3Vyc29yX3dp ZHRoID0gMTsKKyAgcHRyZGlmZl90IG9wb2ludF9wdCA9IFBUOworICBpbnQgcmVsYXRpdmVfeCwg aHBvcywgdnBvczsKKyAgaW50IG9wb2ludF94ID0gdy0+b3V0cHV0X2N1cnNvci54OworICBpbnQg b3BvaW50X3kgPSB3LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBvcyA9IHctPm91 dHB1dF9jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+b3V0cHV0X2N1cnNvci52 cG9zOworICBwdHJkaWZmX3QgY3VycmVudF9jb2wgPSBjdXJyZW50X2NvbHVtbiAoKTsKKyAgYm9v bCBmaWxsX2NvbHVtbl9wID0gIU5JTFAgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIHB0cmRp ZmZfdCBmaWxsX2NvbCA9IFhJTlQgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIExpc3BfT2Jq ZWN0IHJlc3VsdCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGZsYXZvciA9IFFuaWw7CisgIC8qIFZh bHVlcyBmb3IgdGhlIGN1cnJlbnQgY29sdW1uIG9mIHRoZSB2ZXJ0aWNhbCBsaW5lLiAqLworICBM aXNwX09iamVjdCBmb3JlZ3JvdW5kID0gRm1ha2VfdmVjdG9yIChtYWtlX251bWJlciAoMyksIFFu aWwpOworICBzdHJ1Y3QgZ2x5cGggKnBoeXNfY3Vyc29yX2dseXBoOworICBlbnVtIGZhY2VfaWQg ZmFjZV9pZCA9ICgocGh5c19jdXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3JfZ2x5cGggKHcp KSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBERUZBVUxUX0ZBQ0VfSUQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGh5c19jdXJzb3JfZ2x5cGgtPmZhY2VfaWQ7 CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q09MT1IgT0YgQ1JPU1NIQUlSUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgIGVudW0gZmFj ZV9pZCBldmVuX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAoZiwgaW50ZXJuICgiKy1ldmVu LW51bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZXZlbl9mYWNl ID0gRkFDRV9GUk9NX0lEIChmLCBldmVuX2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBldmVuX2Nv bG9yID0gZXZlbl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tf U1RSSU5HIChldmVuX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9jb2xvcl92ZWN0b3IgPSBt Y19jb2xvcl92ZWN0b3JfY2FsYyAodywgZXZlbl9jb2xvcik7CisgIGVudW0gZmFjZV9pZCBvZGRf ZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChmLCBpbnRlcm4gKCIrLW9kZC1udW1iZXJlZC1j b2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKm9kZF9mYWNlID0gRkFDRV9GUk9N X0lEIChmLCBvZGRfZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IG9kZF9jb2xvciA9IG9kZF9mYWNl LT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChvZGRfY29s b3IpOworICBMaXNwX09iamVjdCBvZGRfY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2Nh bGMgKHcsIG9kZF9jb2xvcik7CisgIGVudW0gZmFjZV9pZCBmaWxsX2ZhY2VfaWQgPSBsb29rdXBf bmFtZWRfZmFjZSAoZiwgaW50ZXJuICgiKy1iZXlvbmQtZmlsbC1jb2x1bW4tZmFjZSIpLCB0cnVl KTsKKyAgc3RydWN0IGZhY2UgKmZpbGxfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmlsbF9mYWNl X2lkKTsKKyAgTGlzcF9PYmplY3QgZmlsbF9jb2xvciA9IGZpbGxfZmFjZS0+bGZhY2VbTEZBQ0Vf Rk9SRUdST1VORF9JTkRFWF07CisgIENIRUNLX1NUUklORyAoZmlsbF9jb2xvcik7CisgIExpc3Bf T2JqZWN0IGZpbGxfY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGZpbGxf Y29sb3IpOworICAvKiByZWQgKi8KKyAgaWYgKGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAm JiAhZmlsbF9jb2x1bW5fcCkKKyAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAg LyogeWVsbG93ICovCisgIGlmIChjdXJyZW50X2NvbCAlIDIgPT0gMAorICAgICAgJiYgIWZpbGxf Y29sdW1uX3ApCisgICAgZm9yZWdyb3VuZCA9IGV2ZW5fY29sb3JfdmVjdG9yOworICAvKiByZWQg Ki8KKyAgaWYgKGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAmJiBmaWxsX2NvbHVtbl9wCisg ICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxsX2NvbCkKKyAgICBmb3JlZ3JvdW5kID0gb2RkX2Nv bG9yX3ZlY3RvcjsKKyAgLyogeWVsbG93ICovCisgIGlmIChjdXJyZW50X2NvbCAlIDIgPT0gMAor ICAgICAgJiYgZmlsbF9jb2x1bW5fcAorICAgICAgJiYgY3VycmVudF9jb2wgPD0gZmlsbF9jb2wp CisgICAgZm9yZWdyb3VuZCA9IGV2ZW5fY29sb3JfdmVjdG9yOworICAvKiBncmVlbiAqLworICBp ZiAoZmlsbF9jb2x1bW5fcAorICAgICAgJiYgY3VycmVudF9jb2wgPiBmaWxsX2NvbCkKKyAgICBm b3JlZ3JvdW5kID0gZmlsbF9jb2xvcl92ZWN0b3I7CisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAgICAgICAgICAgICAgICAgICAgICBTVEFSVCBESVNQTEFZIEFORCBQUklNRSBJVAorKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisgIC8qIEJlZ2luIHRoZSBqb3VybmV5IGF0IHctPnN0YXJ0LiAq LworICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIgKHN0YXJ0X3RleHRfcG9zaXRpb24sIHctPnN0 YXJ0KTsKKyAgc3RhcnRfZGlzcGxheSAoJml0LCB3LCBzdGFydF90ZXh0X3Bvc2l0aW9uKTsKKyAg Zmlyc3RfeCA9IGl0LmZpcnN0X3Zpc2libGVfeDsKKyAgbGFzdF94ID0gaXQubGFzdF92aXNpYmxl X3g7CisgIGl0X3N0YXJ0ID0gSVRfQ0hBUlBPUyAoaXQpOworICBTQVZFX0lUIChzYXZlZF9pdF9m b3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICAv KiBGaW5pc2ggcHJpbWluZyB0aGUgSVQgZm9yIHBvdGVudGlhbCBsaW5lIG51bWJlcnMuICovCisg IGlmICghTklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKQorICAgICAgJiYgIUVRIChWZGlzcGxh eV9saW5lX251bWJlcnMsIFF2aXN1YWwpKQorICAgIHsKKyAgICAgIGl0LmZpcnN0X3Zpc2libGVf eCA9IDA7CisgICAgICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIDEpOworICAgICAgbG51bV93aWR0 aCA9IGl0LmxudW1fd2lkdGg7CisgICAgICBsbnVtX3BpeGVsX3dpZHRoID0gaXQubG51bV9waXhl bF93aWR0aDsKKyAgICAgIFJFU1RPUkVfSVQgKCZpdCwgJnNhdmVkX2l0X2Zvcl93aW5kb3dfc3Rh cnQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgICAgIGl0LmZpcnN0X3Zpc2li bGVfeCA9IGZpcnN0X3g7CisgICAgICBpdC5sYXN0X3Zpc2libGVfeCA9IGxhc3RfeDsKKyAgICAg IGl0LmxudW1fd2lkdGggPSBsbnVtX3dpZHRoOworICAgICAgaXQubG51bV9waXhlbF93aWR0aCA9 IGxudW1fcGl4ZWxfd2lkdGg7CisgICAgICBTQVZFX0lUIChzYXZlZF9pdF9mb3Jfd2luZG93X3N0 YXJ0LCBpdCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICAgIH0KKyAgLyogVGhp cyBtaWdodCBoYXBwZW4gb24gT1NYIDEwLjExIHdoZW4gcmVzdG9yaW5nIGRlc2t0b3AgYXQgdGhl IGJlZ2lubmluZworICBvZiBhIG5ldyBzZXNzaW9uPyAqLworICBpZiAoaXRfc3RhcnQgPiBvcG9p bnRfcHQpCisgICAgcmV0dXJuOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAg ICAgICAgICAgICAgICAgUkVQTEFDRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworICBlcmFzZV9waHlzX2N1cnNvciAodyk7CisgIGdseXBoX3JvdyA9IE1BVFJJWF9S T1cgKHctPmN1cnJlbnRfbWF0cml4LCBvcG9pbnRfdnBvcyk7CisgIGlmICghY3Vyc29yX2luX2Zy aW5nZV9wKQorICAgIGZsYXZvciA9IFFtY19nbHlwaDsKKyAgICAvKiBUaGlzIGNvbmRpdGlvbiBw cm9iYWJseSBkb2VzIG5vdCBleGlzdCBmb3IgdGhlIHJlYWwgZmFrZSBjdXJzb3IuICovCisgICAg ZWxzZSBpZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgJiYgZ2x5cGhfcm93LT5j b250aW51ZWRfcCkKKyAgICAgIGZsYXZvciA9IFFtY19waWxjcm93OworICAgICAgZWxzZSBpZiAo Y3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAmJiBnbHlwaF9yb3ctPnRydW5jYXRl ZF9vbl9yaWdodF9wKQorICAgICAgICBmbGF2b3IgPSBRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdo dF9hbmdsZTsKKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAg ICAgICAgICYmICFnbHlwaF9yb3ctPmNvbnRpbnVlZF9wCisgICAgICAgICAgICAgICAgICYmICFn bHlwaF9yb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgIGZsYXZvciA9IFFtY19o b2xsb3dfcmVjdGFuZ2xlOworICBtY19jcm9zc2hhaXJzX2hlbHBlciAodywgb3BvaW50X3gsIG9w b2ludF95LCBvcG9pbnRfaHBvcywgb3BvaW50X3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAg ICBIT0xMT1dfQk9YX0NVUlNPUiwgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgZm9yZWdyb3VuZCwgbWNfYmdfY29sb3JfdmVjdG9yICh3LCBmYWNlX2lkKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZsYXZvciwgb3BvaW50X3B0LCAmcmVzdWx0KTsKKyAgbWNfY3Jvc3No YWlyc19oZWxwZXIgKHcsIG9wb2ludF94LCBvcG9pbnRfeSwgb3BvaW50X2hwb3MsIG9wb2ludF92 cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgSE9MTE9XX0JPWF9DVVJTT1IsIGN1cnNvcl93 aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQsIG1jX2JnX2NvbG9yX3Zl Y3RvciAodywgZmFjZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICBRb3ZlcmxheV9hcnJv d19iaXRtYXAsIG9wb2ludF9wdCwgJnJlc3VsdCk7CisgIGlmIChOSUxQIChCVkFSIChiLCBjcm9z c2hhaXJzX2hvcml6b250YWxfcnVsZXIpKSkKKyAgICBnb3RvIHZlcnRpY2FsX3J1bGVyOworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgSE9SSVpPTlRBTCBS VUxFUjogIEdPVE8gTElORSBCRUdJTgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgIC8qIFBs YWNlIHRoZSBJVCBvbiB0aGUgY3VycmVudCBsaW5lIGNvbnRhaW5pbmcgUFQuICovCisgIGludCB2 b2Zmc2V0ID0gKGhlYWRlcl9saW5lX2hlaWdodCA+IDAKKyAgICAgICAgICAgICAgICAgJiYgb3Bv aW50X3Zwb3MgPiAwKQorICAgICAgICAgICAgICAgICAgPyBvcG9pbnRfdnBvcyAtIDEKKyAgICAg ICAgICAgICAgICAgIDogb3BvaW50X3Zwb3M7CisgIGlmICh2b2Zmc2V0ID4gMCkKKyAgICBtb3Zl X2l0X2J5X2xpbmVzICgmaXQsIHZvZmZzZXQpOworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg ICAgICAgICAgICAgICAgSE9SSVpPTlRBTCBSVUxFUjogIEZJUlNUIFggPT4gUEVOVUxUSU1BVEUg RU9MCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgd2hpbGUgKHRydWUpCisgICAgeworICAg ICAgZmxhdm9yID0gKGl0LmMgIT0gJ1x0JykgPyBRbWNfZ2x5cGggOiBRbWNfZ2x5cGhfdGFiOwor ICAgICAgaWYgKGhzY2wpCisgICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94ID0gaXQuY3Vy cmVudF94IC0gKGhzY2xfZmlyc3RfaHBvcyAqIGZyYW1lX2NoYXJfd2lkdGgpOworICAgICAgICAg IGhwb3MgPSBpdC5ocG9zIC0gaHNjbF9maXJzdF9ocG9zOworICAgICAgICB9CisgICAgICAgIGVs c2UKKyAgICAgICAgICB7CisgICAgICAgICAgICByZWxhdGl2ZV94ID0gaXQuY3VycmVudF94IC0g Zmlyc3RfeDsKKyAgICAgICAgICAgIGhwb3MgPSBpdC5ocG9zOworICAgICAgICAgIH0KKyAgICAg IGlmIChoZWFkZXJfbGluZV9oZWlnaHQgPiAwKQorICAgICAgICB2cG9zID0gaXQudnBvcyArIDE7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICB2cG9zID0gaXQudnBvczsKKyAgICAgIGJvb2wgbHB3 X3JlYWNoZWRfcCA9ICgoaHNjbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC5j dXJyZW50X3ggPj0gaHNjbF9maXJzdF94ICsgbG51bV9waXhlbF93aWR0aCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8fCAoIWhzY2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgaXQuY3VycmVudF94ID49IGZpcnN0X3ggKyBsbnVtX3BpeGVsX3dpZHRoKSk7CisgICAg ICBib29sIGZpbmFsX2xvb3BfcCA9IChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QICgmaXQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkp ID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJjID09IE1PVkVfUE9TX01B VENIX09SX1pWKTsKKyAgICAgIGJvb2wgdGFiX2ludmlzaWJsZV9wID0gKGl0LmMgPT0gJ1x0Jyk7 CisgICAgICBib29sIHRhYl92aXNpYmxlX3AgPSAoaXQuYyAhPSAnXHQnCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKSA9PSAnXHQnKTsK KyAgICAgIGJvb2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKG9wb2ludF94ID09IHJlbGF0aXZlX3gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95ID09IGl0LmN1cnJl bnRfeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X2hwb3MgPT0g aHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0g dnBvcyk7CisgICAgICAvKiBpdC5jID09ICdcdCcgd2hlbiBJVCBpcyBhdCBhIHRhYi13aWR0aCBz cGFjZXIgZm9sbG93aW5nIGEKKyAgICAgIGBidWZmZXItZGlzcGxheS10YWJsZScgZ2x5cGggc3Vj aCBhcyDCuy4gIEFub3RoZXIgd2F5IHRvIHRlc3QKKyAgICAgIGZvciB0aGlzIGNvbmRpdGlvbiBp cyB3aGVuIGl0LmMgPT0gRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKS4gKi8KKyAgICAgIGlm ICghcmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAgJiYgbHB3X3JlYWNoZWRfcAorICAgICAg ICAgICYmICF0YWJfaW52aXNpYmxlX3ApCisgICAgICAgIG1jX2Nyb3NzaGFpcnNfaGVscGVyICh3 LCByZWxhdGl2ZV94LCBpdC5jdXJyZW50X3ksIGhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIQkFSX0NVUlNPUiwgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yZWdyb3VuZCwgbWNfYmdfY29sb3JfdmVjdG9yICh3LCBpdC5mYWNl X2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXZvciwgSVRfQ0hBUlBPUyAo aXQpLCAmcmVzdWx0KTsKKyAgICAgIC8qIEZJWE1FOiAgRHJhd2luZyBhIFFtY19nbHlwaCBIQkFS X0NVUlNPUiBvbiBjZXJ0YWluIGxldHRlcnMgKEEsIG0sIE0sIHcsIFcpCisgICAgICBsb2NhdGVk IHRvIHRoZSBpbW1lZGlhdGUgcmlnaHQgb2YgYSB0YWIgc3BhY2VyLCBjYXVzZSB0aGUgUW1jX2ds eXBobGVzcworICAgICAgSEJBUl9DVVJTT1IgdG8gdGhlIGltbWVkaWF0ZSBsZWZ0IHRvIGJlIGVy YXNlZC4gIFRoaXMgaXMgcHJvYmFibHkgYW4KKyAgICAgIG92ZXJoYW5nIHNpdHVhdGlvbi4gIEFu IG9idmlvdXMgd29ya2Fyb3VuZCB3b3VsZCBiZSB0byByZWNvcmQgdGhlCisgICAgICBjb29yZGlu YXRlcyBmb3IgdGhlIFFtY19nbHlwaGxlc3MgY3Vyc29ycyBhbmQgdGhlbiBkcmF3IHRoZW0gYWxs IEFGVEVSIHRoZQorICAgICAgUW1jX2dseXBoIGN1cnNvcnMgaGF2ZSBiZWVuIGxhaWQuICBIb3cg YWJvdXQgcHVzaGluZyBhbGwgdGhlIGNvb3JkaW5hdGVzCisgICAgICB0byB0aGUgY2FjaGUsIGFu ZCB0aGVuIGV4ZWN1dGluZyBhIHZhcmlhdGlvbiBvZiBgbWNfcmVkcmF3X2Nyb3NzaGFpcnMnCisg ICAgICBbd2l0aCBzYWlkIHZlcnNpb24gYmVpbmcgcmV3cml0dGVuXSB0byBsb29wIHR3aWNlIG92 ZXIgdGhlIGxpc3QsIGZpcnN0CisgICAgICBmb3IgUW1jX2dseXBoLCBhbmQgdGhlbiBmb3IgUW1j X2dseXBobGVzcz8gKi8KKyAgICAgIGlmICghcmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAg JiYgbHB3X3JlYWNoZWRfcAorICAgICAgICAgICYmIHRhYl9pbnZpc2libGVfcCkKKyAgICAgICAg eworICAgICAgICAgIGludCBpLCBjb3VudCA9IGl0LnBpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93 aWR0aDsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgbWNfY3Jvc3NoYWlyc19oZWxwZXIgKHcsIHJlbGF0aXZlX3gsIGl0 LmN1cnJlbnRfeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhCQVJfQ1VSU09SLCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3JlZ3JvdW5kLCBtY19iZ19jb2xvcl92ZWN0b3IgKHcsIGl0LmZhY2VfaWQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdm9yLCBJVF9DSEFSUE9T IChpdCksICZyZXN1bHQpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ID0gcmVsYXRpdmVfeCAr IGZyYW1lX2NoYXJfd2lkdGg7CitlbWFjc19hYm9ydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgaWYgKGZpbmFsX2xvb3BfcCkKKyAgICAgICAgYnJlYWs7CisgICAgICByYyA9 IG1jX21vdmVfaXRfaW5fZGlzcGxheV9saW5lICh3LCAmaXQsIGl0LmN1cnJlbnRfeCArIGl0LnBp eGVsX3dpZHRoKTsKKyAgICAgIGlmIChyYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAg ICBicmVhazsKKyAgICAgIHJlbGF0aXZlX3ggPSAoaHNjbCkKKyAgICAgICAgICAgICAgICAgICA/ IGl0LmN1cnJlbnRfeCAtIChoc2NsX2ZpcnN0X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoKQorICAg ICAgICAgICAgICAgICAgIDogaXQuY3VycmVudF94IC0gZmlyc3RfeDsKKyAgICAgIGlmIChyZWxh dGl2ZV94ICsgZnJhbWVfY2hhcl93aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGgpCisgICAgICAgIGJy ZWFrOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgIEhPUklaT05UQUwg UlVMRVI6ICBEUkFXIEZMT0FUSU5HIEdMWVBITEVTUyBMSU5FIChQT1NULUVPTCBUTyBGUklOR0Up CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgaWYgKElURVJBVE9SX0FUX0VORF9PRl9MSU5F X1AgKCZpdCkKKyAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkpID09ICdcbicK KyAgICAgICB8fCByYyA9PSBNT1ZFX1BPU19NQVRDSF9PUl9aVgorICAgICAgIHx8IHJjID09IE1P VkVfTElORV9DT05USU5VRUQpCisgICAgeworICAgICAgLyogV2Ugd2FudCB0byBzdGFydCBkcmF3 aW5nIHRoZSBmbG9hdGluZyBob3Jpem9udGFsIGxpbmUgZnJvbSBqdXN0IGFmdGVyIElUCisgICAg ICAobGluZSBmZWVkOyBaVjsgb3Igc3BhY2Utd29yZF93cmFwKSB1bnRpbCB0aGUgcmlnaHQgZnJp bmdlLiAgV2UgYXJlIE5PVAorICAgICAgdXNpbmcgYGl0LnBpeGVsX3dpZHRoYCBiZWNhdXNlIGl0 cyB2YWx1ZSB3aWxsIGJlIHplcm8gaWYgdGhlcmUgaXMgb25seSBhCisgICAgICBsaW5lIGZlZWQg YXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyOyBlLmcuLCBhIHNpdHVhdGlvbiB3aGVyZSBsaW5lIG51 bWJlcnMKKyAgICAgIGFyZSBpbmhpYml0ZWQsIGJ1dCBAbGF3bGlzdCBwcmVmZXJzIHNlZWluZyBj cm9zc2hhaXJzIGluIHRoYXQgc2l0dWF0aW9uLgorICAgICAgSWYgdGhlIGxpbmUgaXMgZW1wdHkg b3IgaGlkZGVuIGJ5IGhvcml6b250YWwgc2Nyb2xsaW5nLCB0aGVuIGBpdC5jdXJyZW50X3hgCisg ICAgICBtYXkgYmUgc29tZXdoZXJlIGJlZm9yZSBgbG51bV9waXhlbF93aWR0aGAuICBUaGUgcmVh bCBjdXJzb3Igd2lsbCBiZSB0byB0aGUKKyAgICAgIGxlZnQgb2YgYGxudW1fcGl4ZWxfd2lkdGhg IGlmIHdlIGFyZSBob3Jpem9udGFsIHNjcm9sbGluZyBhbmQgcG9pbnQgaXMKKyAgICAgIGhpZGRl biBzb21ld2hlcmUgdG8gdGhlIGxlZnQgdGhlcmVvZi4gKi8KKyAgICAgIGlmICgoaHNjbAorICAg ICAgICAgICAmJiBpdC5jdXJyZW50X3ggPCBoc2NsX2ZpcnN0X3ggKyBsbnVtX3BpeGVsX3dpZHRo KQorICAgICAgICAgIHx8ICghaHNjbAorICAgICAgICAgICAgICAmJiBpdC5jdXJyZW50X3ggPCBm aXJzdF94ICsgbG51bV9waXhlbF93aWR0aCkpCisgICAgICAgIHJlbGF0aXZlX3ggPSBsbnVtX3Bp eGVsX3dpZHRoOworICAgICAgICBlbHNlCisgICAgICAgICAgcmVsYXRpdmVfeCA9IHJlbGF0aXZl X3ggKyBmcmFtZV9jaGFyX3dpZHRoOworICAgICAgLyogQ09STkVSIENBU0VTOgorICAgICAgLSAg V2hlbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhY3RpdmUgcmVnaW9uIGlzIGF0IHRoZSBsaW5lIGZl ZWQgY2hhcmFjdGVyCisgICAgICAgICBvZiBhIGN1cnJlbnQgbGluZSB0aGF0IGlzIGhvcml6b250 YWxseSBzY3JvbGxlZC4gIGl0LmZhY2VfaWQgcmV0dXJucworICAgICAgICAgdGhlIGZvcmVncm91 bmQgb2YgdGhlIGZyYW1lLCBpbnN0ZWFkIG9mIHRoZSBhY3RpdmUgcmVnaW9uLgorICAgICAgLSAg QW4gZW1wdHkgbGluZSBlbmRpbmcgaW4gYSBsaW5lIGZlZWQgY2hhcmFjdGVyIHJldHVybnMgdGhl IGZvcmVncm91bmQKKyAgICAgICAgIG9mIHRoZSBmcmFtZSwgaW5zdGVhZCBvZiB0aGUgYWN0aXZl IHJlZ2lvbi4gIFRoaXMgaGFwcGVucyBiZWNhdXNlIHdlCisgICAgICAgICBkbyBub3QgZm9yY2Ug YG1jX21vdmVfaXRfaW5fZGlzcGxheV9saW5lJyB0byBrZWVwIHRyYXZlbGxpbmcgdG8KKyAgICAg ICAgIGBmaXJzdF94ICsgbG51bV9waXhlbF93aWR0aGAuCisgICAgICAtICBXaGVuIHRoZXJlIGlz IGFuIGltYWdpbmFyeSBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB3aXRoCisg ICAgICAgICBub3RoaW5nIG90aGVyIHRoYW4gWlYsIHdlIHdhbnQgdG8gdXNlIHRoZSBmcmFtZSBk ZWZhdWx0IGZhY2UgaWYgWlYKKyAgICAgICAgIGlzIGF0IHRoZSBlbmQgb2YgYW4gYWN0aXZlIHJl Z2lvbi4gICovCisgICAgICBpZiAoKGhzY2wKKyAgICAgICAgICAgJiYgKElURVJBVE9SX0FUX0VO RF9PRl9MSU5FX1AgKCZpdCkKKyAgICAgICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQ T1MgKGl0KSkgPT0gJ1xuJykKKyAgICAgICAgICAgJiYgaXQuY3VycmVudF94IC0gaHNjbF9maXJz dF94ID09IG9wb2ludF94KQorICAgICAgICAgIHx8CisgICAgICAgICAgKCFoc2NsCisgICAgICAg ICAgICYmIChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QICgmaXQpCisgICAgICAgICAgICAgICB8 fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkpID09ICdcbicpCisgICAgICAgICAgICYmIGl0 LmN1cnJlbnRfeCAtIGZpcnN0X3ggPCBsbnVtX3BpeGVsX3dpZHRoKSkKKyAgICAgICAgaXQuZmFj ZV9pZCA9IGZhY2VfaWQ7CisgICAgICAgIGVsc2UgaWYgKElUX0NIQVJQT1MgKGl0KSA9PSBaVikK KyAgICAgICAgICBpdC5mYWNlX2lkID0gREVGQVVMVF9GQUNFX0lEOworICAgICAgd2hpbGUgKHJl bGF0aXZlX3ggKyBmcmFtZV9jaGFyX3dpZHRoIDwgdGV4dF9hcmVhX3dpZHRoKQorICAgICAgICB7 CisgICAgICAgICAgbWNfY3Jvc3NoYWlyc19oZWxwZXIgKHcsIHJlbGF0aXZlX3gsIGl0LmN1cnJl bnRfeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJBUl9D VVJTT1IsIGN1cnNvcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y ZWdyb3VuZCwgbWNfYmdfY29sb3JfdmVjdG9yICh3LCBpdC5mYWNlX2lkKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUW1jX2dseXBobGVzcywgSVRfQ0hBUlBPUyAoaXQpLCAmcmVz dWx0KTsKKyAgICAgICAgICByZWxhdGl2ZV94ID0gcmVsYXRpdmVfeCArIGZyYW1lX2NoYXJfd2lk dGg7CisgICAgICAgIH0KKyAgICB9CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAg ICAgVkVSVElDQUwgUlVMRVI6ICBDT01CSU5BVElPTiBPRiBHTFlQSCAmIEdMWVBITEVTUyBDVVJT T1JTCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgdmVydGljYWxfcnVsZXI6CisgIGlmIChO SUxQIChCVkFSIChiLCBjcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyKSkpCisgICAgZ290byBjcm9z c2hhaXJzX2ZpbmlzaDsKKyAgUkVTVE9SRV9JVCAoJml0LCAmc2F2ZWRfaXRfZm9yX3dpbmRvd19z dGFydCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICByYyA9IE1PVkVfWF9SRUFD SEVEOworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICByYyA9IG1jX21vdmVfaXRfaW5fZGlz cGxheV9saW5lICh3LCAmaXQsIGZpcnN0X3ggKyBvcG9pbnRfeCk7CisgICAgICByZWxhdGl2ZV94 ID0gaXQuY3VycmVudF94IC0gZmlyc3RfeDsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZGVi dWdfbWV0aG9kX2FkZCAodywgInctPm1pbl9oc2Nyb2xsOiAlZCIsIHctPm1pbl9oc2Nyb2xsKTsK KyNlbmRpZgorKi8KKyAgICAgIC8qIE5vIG5lZWQgdG8gc3BlY2lhbGx5IHNldCBIUE9TLiAgQSBn bHlwaCBjdXJzb3Igd2lsbCByZWx5IHVwb24gYG9wb2ludF94JyBhbmQgYG9wb2ludF9ocG9zJy4K KyAgICAgIEEgZ2x5cGhsZXNzIGN1cnNvciB3aWxsIHJlbHkgdXBvbiBgaXQuaHBvcycgYmVjYXVz ZSBpdCBpcyBiZXlvbmQgYW55IGdseXBoIHRoYXQgbWlnaHQgZXhpc3QuICovCisgICAgICBpZiAo aGVhZGVyX2xpbmVfaGVpZ2h0ID4gMCkKKyAgICAgICAgdnBvcyA9IGl0LnZwb3MgKyAxOworICAg ICAgICBlbHNlCisgICAgICAgICAgdnBvcyA9IGl0LnZwb3M7CisgICAgICBib29sIHJlYWxfZmFr ZV9jdXJzb3JfcCA9IChvcG9pbnRfeSA9PSBpdC5jdXJyZW50X3kKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiB2cG9zID09IG9wb2ludF92cG9zKTsKKyAgICAgIGdseXBoX3JvdyA9 IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgICAgIGlmIChjdXJzb3Jf aW5fZnJpbmdlX3AKKyAgICAgICAgICAmJiBnbHlwaF9yb3ctPnRydW5jYXRlZF9vbl9yaWdodF9w KQorICAgICAgICBmbGF2b3IgPSBRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlOworICAgICAg ICBlbHNlIGlmIChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgJiYgZ2x5cGhf cm93LT5jb250aW51ZWRfcCkKKyAgICAgICAgICBmbGF2b3IgPSBRbWNfdmVydGljYWxfYmFyX2Jh Y2tzbGFzaDsKKyAgICAgICAgICBlbHNlIGlmIChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAg ICAgICAgICAgICAmJiAhZ2x5cGhfcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcAorICAgICAgICAg ICAgICAgICAgICYmICFnbHlwaF9yb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAgICAgZmxhdm9y ID0gUW1jX3ZlcnRpY2FsX2JhcjsKKyAgICAgICAgICAgIGVsc2UgaWYgKChGRVRDSF9CWVRFIChJ VF9CWVRFUE9TIChpdCkpICE9ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUg YXQgYSBsaW5lIGZlZWQgY2hhcmFjdGVyIGFuZCB0aGUgdmVydGljYWwgcnVsZXIgaW50ZXJzZWN0 cy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICB8fCAoRkVUQ0hfQllURSAoSVRfQllURVBPUyAo aXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbGF0aXZlX3ggPT0g b3BvaW50X3gpKQorICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF0IFpWLCB3ZSB3 YW50IHRvIHVzZSBhIGdseXBobGVzcyBjdXJzb3IgYmVjYXVzZSBpdCB3aWxsCisgICAgICAgICAg ICAgICAgICAgICBtb3N0IGxpa2VseSBiZSBmbG9hdGluZyBzb21ld2hlcmUgb2ZmIHRvIHRoZSBy aWdodCBvZiBaVi4gIFdlIGNvdWxkCisgICAgICAgICAgICAgICAgICAgICBwcm9iYWJseSBwbGFj ZSBhIGdseXBoIGN1cnNvciBhdCBleGFjdGx5IFpWIGJ5IGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwK KyAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiBpbiB0aGUgbmV4dCBzZWN0aW9uLCBidXQg aXQgaXMgbm90IHRoYXQgaW1wb3J0YW50LiAqLworICAgICAgICAgICAgICAgICAgICAgJiYgcmMg IT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAgICAgICAgICAgICAgICAgICYmICFyZWFsX2Zh a2VfY3Vyc29yX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGl0LmMgIT0gJ1x0JworICAgICAg ICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCAvIGZyYW1lX2NoYXJfd2lkdGggPj0gbG51bV9w aXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgJiYgcmMgIT0gTU9WRV9MSU5FX0NPTlRJ TlVFRCkKKyAgICAgICAgICAgICAgZmxhdm9yID0gUW1jX2dseXBoOworICAgICAgICAgICAgICBl bHNlIGlmIChpdC5jID09ICdcdCcpCisgICAgICAgICAgICAgICAgZmxhdm9yID0gUW1jX2dseXBo X3RhYjsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmxhdm9y ID0gUW1jX2dseXBobGVzczsKKyAgICAgIC8qIENPUk5FUiBDQVNFUzoKKyAgICAgIC0gIFdoZW4g dGhlIHZlcnRpY2FsIGxpbmUgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHRleHQgYW5kIGp1c3QgdG8g dGhlIHJpZ2h0CisgICAgICAgICBvZiB0aGUgbGluZSBudW1iZXJzLCB3ZSB3YW50IHRoZSBkZWZh dWx0IGZhY2UuCisgICAgICAtICBXaGVuIHRoZXJlIGlzIGFuIGltYWdpbmFyeSBlbXB0eSBsaW5l IGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB3aXRoCisgICAgICAgICBub3RoaW5nIG90aGVyIHRo YW4gWlYsIHdlIHdhbnQgdG8gdXNlIHRoZSBmcmFtZSBkZWZhdWx0IGZhY2UgaWYgWlYKKyAgICAg ICAgIGlzIGF0IHRoZSBlbmQgb2YgYW4gYWN0aXZlIHJlZ2lvbi4gICovCisgICAgICBpZiAoKHJl bGF0aXZlX3ggPD0gbG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4g MCkKKyAgICAgICAgICB8fCBJVF9DSEFSUE9TIChpdCkgPT0gWlYpCisgICAgICAgIGl0LmZhY2Vf aWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICBpZiAoIXJlYWxfZmFrZV9jdXJzb3JfcCkKKyAg ICAgICAgbWNfY3Jvc3NoYWlyc19oZWxwZXIgKHcsIG9wb2ludF94LCBpdC5jdXJyZW50X3ksIGl0 Lmhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQ1VSU09SLCBj dXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kLCBt Y19iZ19jb2xvcl92ZWN0b3IgKHcsIGl0LmZhY2VfaWQpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmxhdm9yLCBJVF9DSEFSUE9TIChpdCksICZyZXN1bHQpOworICAgICAgLyogVGhp cyBjb21iaW5hdGlvbiBvZiBhIFpWIGNoZWNrIGJlZm9yZSBgbW92ZV9pdF9ieV9saW5lcycgZm9s bG93ZWQgYnkgYQorICAgICAgWSBjaGVjayBzdWJzZXF1ZW50IHRoZXJldG8gZ2l2ZXMgdXMgdGhl IEZFQVRVUkUgb2YgaGF2aW5nIGEgdmVydGljYWwgbGluZQorICAgICAgZm9sbG93aW5nIGEgbGlu ZSB0ZXJtaW5hdGluZyB3aXRoIFpWLiAgV2hlcmVhcyBgZGlzcGxheS1saW5lLW51bWJlcnMtbW9k ZScKKyAgICAgIGhhcyBhIEZFQVRVUkUgb2Ygc3VwcHJlc3NpbmcgdGhlIGxpbmUgbnVtYmVycyBp biB0aGlzIHNpdHVhdGlvbiwgd2UgZHJhdworICAgICAgY3Jvc3NoYWlycyBpbiB0aGF0IHNpdHVh dGlvbi4gIGBtY19tb3ZlX2l0X2luX2Rpc3BsYXlfbGluZScgaGFzIGJlZW4KKyAgICAgIGVxdWlw cGVkIHdpdGggYSBjb25kaXRpb24gdG8gdGVzdCBmb3IgWlYgYXQgdGhlIG91dHNldCBhbmQgcmV0 dXJuIGlmIHRydWUsCisgICAgICB3aGljaCBwcmV2ZW50cyBFbWFjcyBmcm9tIGNyYXNoaW5nLiAq LworICAgICAgaWYgKElUX0NIQVJQT1MgKGl0KSA9PSBaVikKKyAgICAgICAgYnJlYWs7CisgICAg ICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIDEpOworICAgICAgaWYgKGl0LmN1cnJlbnRfeSA+PSBp dC5sYXN0X3Zpc2libGVfeSkKKyAgICAgICAgYnJlYWs7CisgICAgfQorLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBUSEUgQ0FDSEUK KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworICBjcm9zc2hhaXJzX2ZpbmlzaDoKKyAgaWYgKCFO SUxQIChyZXN1bHQpKQorICAgIHdzZXRfY3Jvc3NoYWlyc19jYWNoZSAodywgbGlzdG4gKENPTlNU WVBFX0hFQVAsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJldmVy c2UgKHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmNvbnMg KHNlbGVjdGVkX3dpbmRvdywgUW5pbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmNvbnMgKGJ1ZiwgUW5pbCkpKTsKKyAgdy0+bWMuZHJhd19jcm9zc2hhaXJzID0gZmFs c2U7CisgIGJpZGlfdW5zaGVsdmVfY2FjaGUgKGl0ZGF0YSwgZmFsc2UpOworLyoKKyNpZmRlZiBH TFlQSF9ERUJVRworICBlbmQgPSBjbG9jaygpOworICBjcHVfdGltZV91c2VkID0gKChkb3VibGUp IChlbmQgLSBzdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIGR0b2FzdHIgKGJ1Zl90aW1lLCBz aXplb2YgYnVmX3RpbWUsIDAsIDAsIGNwdV90aW1lX3VzZWQpOworICBkZWJ1Z19tZXRob2RfYWRk ICh3LCAibWNfZHJhd19jcm9zc2hhaXJzOiAgVElNRSAoJXMpIiwgYnVmX3RpbWUpOworI2VuZGlm CisqLworfQorCit2b2lkCittY19yZWRyYXdfY3Jvc3NoYWlycyAoc3RydWN0IHdpbmRvdyAqdykK K3sKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBkb3Vi bGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07Cisg IHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyAgTGlzcF9PYmplY3Qgdmxpc3QgPSBRbmls OworICBMaXNwX09iamVjdCBzcGVjcyA9IFFuaWw7CisgIGludCB4LCB5LCBocG9zLCB2cG9zOwor ICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlOworICBpbnQgY3Vyc29yX3dpZHRo OworICBMaXNwX09iamVjdCBmb3JlZ3JvdW5kID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgYmFja2dy b3VuZCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGZsYXZvciA9IFFuaWw7CisgIHB0cmRpZmZfdCBw b3M7CisgIGZvciAodmxpc3QgPSBYQ0FSICh3LT5jcm9zc2hhaXJzX2NhY2hlKTsKKyAgICAgICBD T05TUCAodmxpc3QpOworICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAg IHNwZWNzID0gWENBUiAodmxpc3QpOworICAgICAgeCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVy ICgwKSwgc3BlY3MpKTsKKyAgICAgIHkgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMSksIHNw ZWNzKSk7CisgICAgICBocG9zID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDIpLCBzcGVjcykp OworICAgICAgdnBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgzKSwgc3BlY3MpKTsKKyAg ICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoRm50aCAobWFrZV9udW1i ZXIgKDQpLCBzcGVjcykpOworICAgICAgY3Vyc29yX3dpZHRoID0gWElOVCAoRm50aCAobWFrZV9u dW1iZXIgKDUpLCBzcGVjcykpOworICAgICAgZm9yZWdyb3VuZCA9IEZudGggKG1ha2VfbnVtYmVy ICg2KSwgc3BlY3MpOworICAgICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfbnVtYmVyICg3KSwg c3BlY3MpOworICAgICAgZmxhdm9yID0gRm50aCAobWFrZV9udW1iZXIgKDgpLCBzcGVjcyk7Cisg ICAgICBwb3MgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoOSksIHNwZWNzKSk7CisgICAgICBt Y19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgeSwgaHBvcywgdnBvcywgY3Vyc29yX3R5cGUsIGN1 cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgZmxhdm9yKTsKKyAgICB9CisvKgorI2lmZGVmIEdMWVBI X0RFQlVHCisgIGVuZCA9IGNsb2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGVu ZCAtIHN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3RpbWUsIHNpemVv ZiBidWZfdGltZSwgMCwgMCwgY3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcs ICJtY19yZWRyYXdfY3Jvc3NoYWlyczogIFRJTUUgKCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgor Ki8KK30KKwordm9pZAorbWNfZXJhc2VfY3Jvc3NoYWlycyAoc3RydWN0IHdpbmRvdyAqdywgYm9v bCBkZWxldGVfY2FjaGUpCit7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGNsb2NrX3Qgc3Rh cnQsIGVuZDsKKyAgZG91YmxlIGNwdV90aW1lX3VzZWQ7CisgIGNoYXIgYnVmX3RpbWVbREJMX0JV RlNJWkVfQk9VTkRdOworICBzdGFydCA9IGNsb2NrKCk7CisjZW5kaWYKKyovCisgIExpc3BfT2Jq ZWN0IHZsaXN0ID0gUW5pbDsKKyAgTGlzcF9PYmplY3Qgc3BlY3MgPSBRbmlsOworICBpbnQgeCwg eSwgaHBvcywgdnBvczsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZTsKKyAg aW50IGN1cnNvcl93aWR0aDsKKyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IFFuaWw7CisgIExp c3BfT2JqZWN0IGJhY2tncm91bmQgPSBRbmlsOworICBMaXNwX09iamVjdCBmbGF2b3IgPSBRbmls OworICBwdHJkaWZmX3QgcG9zOworICAvKiBEZXBlbmRpbmcgdXBvbiB0aGUgZGlyZWN0aW9uIG9m IG1vdmVtZW50IGFuZCBkaXN0YW5jZSBmcm9tIHRoZSByZWFsIGN1cnNvciB0aGUgY3VycmVudCBj b21tYW5kCisgIHRha2VzIHVzLCB0aGUgcHJldmlvdXMgcmVhbCBjdXJzb3Igd2lsbCBiZSBsZWZ0 IGJlaGluZC4gIEkgdHJpZWQgcmVzdG9yaW5nIHBvaW50IGFmdGVyIGRyYXcvZXJhc2UsCisgIGJ1 dCB0aGF0IGRpZG4ndCBmaXggdGhlIGlzc3VlLiAgU28gZm9yIG5vdywgd2UganVzdCBlcmFzZSB0 aGUgcmVhbCBjdXJzb3IuICovCisgIG1jX2VyYXNlX2dseXBoX2N1cnNvciAodywgdy0+cGh5c19j dXJzb3IueCwgdy0+cGh5c19jdXJzb3IueSwgdy0+cGh5c19jdXJzb3IuaHBvcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICB3LT5waHlzX2N1cnNvci52cG9zLCB3LT5waHlzX2N1cnNvcl90eXBl KTsKKyAgZm9yICh2bGlzdCA9IFhDQVIgKHctPmNyb3NzaGFpcnNfY2FjaGUpOworICAgICAgIENP TlNQICh2bGlzdCk7CisgICAgICAgdmxpc3QgPSBYQ0RSICh2bGlzdCkpCisgICAgeworICAgICAg c3BlY3MgPSBYQ0FSICh2bGlzdCk7CisgICAgICB4ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIg KDApLCBzcGVjcykpOworICAgICAgeSA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgxKSwgc3Bl Y3MpKTsKKyAgICAgIGhwb3MgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMiksIHNwZWNzKSk7 CisgICAgICB2cG9zID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDMpLCBzcGVjcykpOworICAg ICAgY3Vyc29yX3R5cGUgPSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChGbnRoIChtYWtlX251bWJl ciAoNCksIHNwZWNzKSk7CisgICAgICBjdXJzb3Jfd2lkdGggPSBYSU5UIChGbnRoIChtYWtlX251 bWJlciAoNSksIHNwZWNzKSk7CisgICAgICBmb3JlZ3JvdW5kID0gRm50aCAobWFrZV9udW1iZXIg KDYpLCBzcGVjcyk7CisgICAgICBiYWNrZ3JvdW5kID0gRm50aCAobWFrZV9udW1iZXIgKDcpLCBz cGVjcyk7CisgICAgICBmbGF2b3IgPSBGbnRoIChtYWtlX251bWJlciAoOCksIHNwZWNzKTsKKyAg ICAgIHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICg5KSwgc3BlY3MpKTsKKyAgICAgIGlm IChFUSAoZmxhdm9yLCBRbWNfZ2x5cGgpKQorICAgICAgICBtY19lcmFzZV9nbHlwaF9jdXJzb3Ig KHcsIHgsIHksIGhwb3MsIHZwb3MsIGN1cnNvcl90eXBlKTsKKyAgICAgICAgICBlbHNlCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChFUSAoZmxhdm9yLCBRb3ZlcmxheV9hcnJvd19i aXRtYXApCisgICAgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfaG9sbG93X3JlY3Rh bmdsZV9yaWdodF9hbmdsZSkKKyAgICAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3IsIFFtY19o b2xsb3dfcmVjdGFuZ2xlKQorICAgICAgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX3Zl cnRpY2FsX2Jhcl9yaWdodF9hbmdsZSkKKyAgICAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3Is IFFtY192ZXJ0aWNhbF9iYXIpCisgICAgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNf dmVydGljYWxfYmFyX2JhY2tzbGFzaCkpCisgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUgPSBO T19DVVJTT1I7CisgICAgICAgICAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCB4LCB5LCBo cG9zLCB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBiYWNrZ3JvdW5kLCBmbGF2b3Ip OworICAgICAgICAgICAgfQorICAgIH0KKyAgaWYgKGRlbGV0ZV9jYWNoZSkKKyAgICB3c2V0X2Ny b3NzaGFpcnNfY2FjaGUgKHcsIFFuaWwpOworICB3LT5tYy5lcmFzZV9jcm9zc2hhaXJzID0gZmFs c2U7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGVuZCA9IGNsb2NrKCk7CisgIGNwdV90aW1l X3VzZWQgPSAoKGRvdWJsZSkgKGVuZCAtIHN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRv YXN0ciAoYnVmX3RpbWUsIHNpemVvZiBidWZfdGltZSwgMCwgMCwgY3B1X3RpbWVfdXNlZCk7Cisg IGRlYnVnX21ldGhvZF9hZGQgKHcsICJtY19lcmFzZV9jcm9zc2hhaXJzOiAgVElNRSAoJXMpIiwg YnVmX3RpbWUpOworI2VuZGlmCisqLworfQorCit2b2lkCittY19wb3J0YWwgKHN0cnVjdCB3aW5k b3cgKncsIGJvb2wgY3Vyc29yX29uX3ApCit7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJUExFIENVUlNPUlMKKyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworICBpZiAoIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiB3LT5tYy5l cmFzZV9nbHlwaF9jdXJzb3IKKyAgICAgICYmICFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkKKyAg ICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB3LT5t Y19nbHlwaF9jYWNoZSkpKSkKKyAgICBtY19jYWxjICh3LCAxKTsKKyAgaWYgKHcgPT0gWFdJTkRP VyAoc2VsZWN0ZWRfd2luZG93KQorICAgICAgJiYgV0lORE9XX1ZBTElEX1AgKHNlbGVjdGVkX3dp bmRvdykKKyAgICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgdy0+bWMuZHJhd19n bHlwaF9jdXJzb3IKKyAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IG1jX2dseXBoX2xpc3QpKSkKKyAgICAvKiBEcmF3IGZha2UgY3Vyc29ycyAqLworICAgIG1jX2Nh bGMgKHcsIDApOworICAgIC8qIEZpcnN0IGF0dGVtcHQgYXQgZGVhbGluZyB3aXRoIGEgYHJlZGlz cGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEnIHNpdHVhdGlvbi4gKi8KKyAgICBlbHNlIGlmICghTUlO SV9XSU5ET1dfUCAodykKKyAgICAgICAgICAgICAmJiAhdy0+bWMuZHJhd19nbHlwaF9jdXJzb3IK KyAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19n bHlwaF9saXN0KSkKKyAgICAgICAgICAgICAmJiAhTklMUCAody0+bWNfZ2x5cGhfY2FjaGUpCisg ICAgICAgICAgICAgJiYgRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX251bWJlciAo MiksIHctPm1jX2dseXBoX2NhY2hlKSkpKQorICAgICAgeworICAgICAgICAvKiBSZW1vdmUgZmFr ZSBjdXJzb3JzLiAqLworICAgICAgICBtY19jYWxjICh3LCAxKTsKKyAgICAgICAgLyogRHJhdyBm YWtlIGN1cnNvcnMgKi8KKyAgICAgICAgbWNfY2FsYyAodywgMCk7CisgICAgICB9CisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENST1NTSEFJ UlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICAvKiBSZW1vdmUgY3Jvc3NoYWlycyBhbmQg ZGVsZXRlIHRoZSBjYWNoZSwgYnV0IE9OTFkgaWYgd2UgcGxhbiBvbiByZWRyYXdpbmcgdGhlbS4K KyAgSW4gYSB0aW1lciBzaXR1YXRpb24sIHdlIHdhbnQgdG8gZXJhc2UgYW5kIHJlZHJhdyAtLSB3 ZSBnbyBmcm9tIGBjaGVja3BvaW50XzInCisgIGluIGByZWRpc3BsYXlfaW50ZXJuYWwnIGFuZCBm b3JjZSBvdXIgd2F5IG92ZXIgdG8gYHVwZGF0ZV9mcmFtZScgMiBvZiAzLgorICBFbWFjcyByZWZy ZXNoZXMgdGhlIHNlbGVjdGVkIHdpbmRvdyBhZnRlciBhYm91dCAxIHRvIDIgbWludXRlcyBvZiBu byBhY3Rpdml0eQorICBldmVuIHRob3VnaCB0aGVyZSBpcyBub3RoaW5nIGF0dGFjaGVkIHRvIHRo ZSBgdGltZV9saXN0Jy9gaWRsZV90aW1lcl9saXN0Jy4KKyAgSW4gdGhhdCByZWZyZXNoIG5vLXRp bWVyIHNpdHVhdGlvbiwgd2Ugd2FudCB0byBlcmFzZS9kcmF3IHVzaW5nIHRoZSBjYWNoZS4gKi8K KyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgdy0+bWMuZXJhc2VfY3Jvc3NoYWly cworICAgICAgJiYgdy0+bWMuZHJhd19jcm9zc2hhaXJzCisgICAgICAmJiAhTklMUCAody0+Y3Jv c3NoYWlyc19jYWNoZSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9u dW1iZXIgKDEpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpCisgICAgICAmJiBFUSAody0+Y29udGVu dHMsIFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSkK KyAgICBtY19lcmFzZV9jcm9zc2hhaXJzICh3LCB0cnVlKTsKKyAgaWYgKHcgPT0gWFdJTkRPVyAo c2VsZWN0ZWRfd2luZG93KQorICAgICAgJiYgV0lORE9XX1ZBTElEX1AgKHNlbGVjdGVkX3dpbmRv dykKKyAgICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgKCFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICAgIC8qIEEgcmFyZSBj aXJjdW1zdGFuY2Ugd2hlcmUgY3Jvc3NoYWlycyBtb2RlIGlzIG5vbi1uaWwsIGJ1dCB0aGUKKyAg ICAgICAgICB1c2VyIGhhcyB1bndpdHRpbmdseSBzZXQgYm90aCBgY3Jvc3NoYWlycy1ob3Jpem9u dGFsLXJ1bGVyJyB0byBuaWwgYW5kIGFsc28KKyAgICAgICAgICBzZXQgYGNyb3NzaGFpcnMtdmVy dGljYWwtcnVsZXInIHRvIG5pbCAtLSBpLmUuLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLiAqLwor ICAgICAgICAgICYmICghTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hh aXJzX2hvcml6b250YWxfcnVsZXIpKQorICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyKSkpKQorICAgICAg JiYgdy0+bWMuZHJhd19jcm9zc2hhaXJzKQorICAgIC8qIERyYXcgY3Jvc3NoYWlycy4gKi8KKyAg ICBtY19kcmF3X2Nyb3NzaGFpcnMgKHcpOworICAgIC8qIEEgc2l0dWF0aW9uIHRoYXQgb2NjdXJz IHdpdGggYHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEnLiAqLworICAgIGVsc2UgaWYgKCFN SU5JX1dJTkRPV19QICh3KQorICAgICAgICAgICAgICYmICF3LT5tYy5kcmF3X2Nyb3NzaGFpcnMK KyAgICAgICAgICAgICAmJiAhTklMUCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAgICAgICAg ICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAg ICAgICAgICAgICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgxKSwg dy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgICAgICAgICYmIEVRICh3LT5jb250ZW50cywg WENBUiAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKQorICAg ICAgeworICAgICAgICAvKiBSZW1vdmUgY3Jvc3NoYWlycywgYnV0IGRvIE5PVCBkZWxldGUgdGhl IGNhY2hlLiAqLworICAgICAgICBtY19lcmFzZV9jcm9zc2hhaXJzICh3LCBmYWxzZSk7CisgICAg ICAgIC8qIFJlZHJhdyB0aGUgY3Jvc3NoYWlycyB1c2luZyB0aGUgY2FjaGUuICovCisgICAgICAg IG1jX3JlZHJhd19jcm9zc2hhaXJzICh3KTsKKyAgICAgIH0KKyAgICAgIC8qIENBVENIQUxMOiAg RFJBVyBUSEUgUkVBTCBDVVJTT1IgKG1heWJlKSEgKi8KKyAgICAgIGVsc2UgaWYgKGN1cnNvcl9v bl9wKQorICAgICAgICBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yICh3LCAxLCB3LT5vdXRwdXRfY3Vy c29yLmhwb3MsIHctPm91dHB1dF9jdXJzb3IudnBvcywgdy0+b3V0cHV0X2N1cnNvci54LCB3LT5v dXRwdXRfY3Vyc29yLnkpOworfQorCit2b2lkCittY19yZWNvcmRfeF93c3RhcnRfd2VuZCAoc3Ry dWN0IHdpbmRvdyAqdykKK3sKKyAgLyogUmVjb3JkIHByaW9yIHZhbHVlcyBmb3IgY3Vyc29yIFgs IHdpbmRvdy1zdGFydCBhbmQgd2luZG93LWVuZC4KKyAgVGhlIGdvYWwgaGVyZSBpcyB0byBmYWNp bGl0YXRlIGBtY19jYWxjJyByZWRyYXcgbXVsdGlwbGUgZmFrZQorICBjdXJzb3JzIHVzaW5nIHRo ZSBjYWNoZSBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkLiAqLworICBpZiAoIU1JTklfV0lORE9XX1Ag KHcpCisgICAgICAmJiB3LT5tYy5kcmF3X2dseXBoX2N1cnNvcgorICAgICAgJiYgKCFOSUxQIChC VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2dseXBoX2xpc3QpKQorICAgICAgICAgIHx8 ICFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkpKQorICAgIHsKKyAgICAgIGlmICh3LT5tYy5jdXJy ZW50X3N0YXJ0KQorICAgICAgICB3LT5tYy5wcmV2aW91c19zdGFydCA9IHctPm1jLmN1cnJlbnRf c3RhcnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB3LT5tYy5wcmV2aW91c19zdGFydCA9IC0x OworICAgICAgaWYgKHctPm1jLmN1cnJlbnRfZW5kKQorICAgICAgICB3LT5tYy5wcmV2aW91c19l bmQgPSB3LT5tYy5jdXJyZW50X2VuZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHctPm1jLnBy ZXZpb3VzX2VuZCA9IC0xOworICAgICAgdy0+bWMuY3VycmVudF9zdGFydCA9IG1hcmtlcl9wb3Np dGlvbiAody0+c3RhcnQpOworICAgICAgdy0+bWMuY3VycmVudF9lbmQgPSBCVUZfWiAoWEJVRkZF UiAody0+Y29udGVudHMpKSAtIHctPndpbmRvd19lbmRfcG9zOworICAgICAgLyogVGhlIGFzc3Vt cHRpb24gaXMgdGhhdCBgdy0+b3V0cHV0X2N1cnNvci54YCBpcyB1cGRhdGVkIEFGVEVSIGByZWRp c3BsYXlfd2luZG93Jy4KKyAgICAgIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHVzaW5nIGds eXBobGVzcyBtdWx0aXBsZSBmYWtlIGN1cnNvcnMgYmVjYXVzZSBpdCBpcworICAgICAgcG9zc2li bGUgdGhhdCB0aGUgYnVmZmVyIHBvaW50cyByZW1haW4gdGhlIHNhbWUsIGJ1dCB0aGUgWCBtYXkg aGF2ZSBjaGFuZ2VkLgorICAgICAgQ3Jvc3NoYWlycyBkbyBub3QgdXNlIGB3LT5tYy5wcmV2aW91 c194YC4gIElmIGl0IHR1cm5zIG91dCB0aGF0IGB3LT5vdXRwdXRfY3Vyc29yLnhgCisgICAgICBp cyB1cGRhdGVkIERVUklORyBgcmVkaXNwbGF5X3dpbmRvdycsIHRoZW4gaXQgd2lsbCBiZSBuZWNl c3NhcnkgdG8gY2hhbmdlIHRoaXMKKyAgICAgIHRvIHVzZSBgaXQuY3VycmVudF94JyBhbmQgcGVy aGFwcyBydW4gYHN0YXJ0X2Rpc3BsYXknIHRvIGdldCB0aGF0IHZhbHVlLiAqLworICAgICAgaWYg KHctPm91dHB1dF9jdXJzb3IueCkKKyAgICAgICAgdy0+bWMucHJldmlvdXNfeCA9IHctPm91dHB1 dF9jdXJzb3IueDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB3LT5tYy5wcmV2aW91c194 ID0gLTE7CisgICAgfQorfQorCit2b2lkCittY19yZW1vdmVfZXZlcnl0aGluZyAoc3RydWN0IHdp bmRvdyAqdykKK3sKKyAgLyogUmVtb3ZlIGZha2UgY3Vyc29ycy4gIElmIHdlIHJlbHkgdXBvbiBg dXBkYXRlX2ZyYW1lJyB0byByZW1vdmUgZmFrZSBjdXJzb3JzLAorICB0aGVuIGl0IHdvdWxkIGJl IHRvbyBsYXRlIHRvIHJlbW92ZSBmYWtlIGN1cnNvcnMgZnJvbSBhbGwgYXJlYXMgb2YgdGhlIHZp c2libGUKKyAgd2luZG93IHdoZW4gY3V0dGluZy9wYXN0aW5nIHRleHQgYW5kIHBlcmhhcHMgYSBm ZXcgb3RoZXIgc2l0dWF0aW9ucyB0aGF0IG1heSBleGlzdC4KKyAgRklYTUU6ICBUaGUgdXNlciBj YW4gc2VlIHRoZSBjdXJzb3JzIGJlaW5nIHJlbW92ZWQgYXQgdGhlIG91dHNldCBvZiByZWRpc3Bs YXkuICovCisgIGJvb2wgcmVtb3ZlX2N1cnNvcnMgPSBmYWxzZTsKKyAgYm9vbCByZW1vdmVfY3Jv c3NoYWlycyA9IGZhbHNlOworICBpZiAoIXctPnBzZXVkb193aW5kb3dfcAorICAgICAgJiYgdyA9 PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpCisgICAgICAmJiAhTUlOSV9XSU5ET1dfUCAodykK KyAgICAgICYmICFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkKKyAgICAgICYmIEVRICh3LT5jb250 ZW50cywgWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB3LT5tY19nbHlwaF9jYWNoZSkpKSkK KyAgICByZW1vdmVfY3Vyc29ycyA9IHRydWU7CisgIGlmICghdy0+cHNldWRvX3dpbmRvd19wCisg ICAgICAvKiBUaGUgY3Jvc3NoYWlycyBpbnRlcmZlcmUgd2l0aCB0aGUgYnJvd3NlLWtpbGwtcmlu ZyBsaWJyYXJ5LiAqLworICAgICAgLyogJiYgdyA9PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cp ICovCisgICAgICAmJiAhTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICYmICFOSUxQICh3LT5jcm9z c2hhaXJzX2NhY2hlKQorICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX251 bWJlciAoMSksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAgICAgICYmIEVRICh3LT5jb250ZW50 cywgWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKQor ICAgIHJlbW92ZV9jcm9zc2hhaXJzID0gdHJ1ZTsKKyAgaWYgKHJlbW92ZV9jdXJzb3JzCisgICAg ICB8fCByZW1vdmVfY3Jvc3NoYWlycykKKyAgICB7CisgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKHctPmZyYW1lKTsKKyAgICAgIHVwZGF0ZV9iZWdpbiAoZik7CisgICAgICBibG9ja19p bnB1dCAoKTsKKyAgICAgIGlmIChyZW1vdmVfY3Vyc29ycykKKyAgICAgICAgbWNfY2FsYyAodywg MSk7CisgICAgICAvKiBSZW1vdmUgY3Jvc3NoYWlycyBhbmQgZGVsZXRlIHRoZSBjYWNoZS4gKi8K KyAgICAgIGlmIChyZW1vdmVfY3Jvc3NoYWlycykKKyAgICAgICAgbWNfZXJhc2VfY3Jvc3NoYWly cyAodywgdHJ1ZSk7CisgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgdXBkYXRlX2VuZCAo Zik7CisgICAgfQorfQorCitpbnQKK21jX2Nyb3NzaGFpcnNfcCAoc3RydWN0IHdpbmRvdyAqdykK K3sKKy8qIE1vdmluZyB0aGUgbW91c2UgdHJpZ2dlcnMgYHVwZGF0ZV93aW5kb3dfY3Vyc29yJyB3 aGljaCBjYWxscworYGRpc3BsYXlfYW5kX3NldF9jdXJzb3InIHRoYXQgd291bGQgb3RoZXJ3aXNl IHJlbW92ZSBhIHBvcnRpb24gb2YgdGhlIGhvcml6b250YWwKK3J1bGVyIGF0IHBvaW50IGFuZC9v ciBmcm9tIHBvaW50IGF0IGVuZCBvZiB2aXN1YWwgbGluZSB0byB3aW5kb3cgZWRnZS4gKi8KKyAg aWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIXctPm1jLmRyYXdfY3Jvc3NoYWlycwor ICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAmJiAhTklMUCAoQlZB UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICYmIHcgPT0gWFdJ TkRPVyAoWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDEpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkp CisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgyKSwg dy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4gZmFsc2U7Cit9CisKK2ludAorbWNfd2l0aG91dF91cGRhdGVfZnJhbWUgKHN0cnVj dCB3aW5kb3cgKncpCit7CisvKiBgdGltZXItbGlzdCcgLyBgdGltZXItaWRsZS1saXN0JzogIFRo ZSBib29sZWFuIHN3aXRjaGVzIGFyZSBub3QgYXV0b21hdGljYWxseQordHVybmVkIG9uIHdoZW4g YSBmdW5jdGlvbiBhdHRhY2hlZCB0byBhIHRpbWVyIGlzIGNhbGxlZC4gIFdlIGhhdmUgc3dpdGNo ZXMgdGhhdCBhcmUKK3NldCBpbiBga2V5Ym9hcmQuY2AgZm9yIG11bHRpcGxlIGZha2UgY3Vyc29y cyAoZS5nLiwgYSBrZXlib2FyZCBwcmVzcykuICBXZSBzZXQKK3RoZSBzd2l0Y2hlcyBtYW51YWxs eSBmb3IgYm90aCBtdWx0aXBsZSBjdXJzb3JzIGFuZCBjcm9zc2hhaXJzIGluIGNvbmp1bmN0aW9u IHdpdGgKK3RpbWVyIGZ1bmN0aW9ucy4gIGB1cGRhdGVfZnJhbWUnIG1heSBub3QgYmUgY2FsbGVk IGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZQord2luZG93L2J1ZmZlci4gIFRvIHRlc3Qg dGhpcyB0aGVvcnksIHRocm93IHRoZSBzd2l0Y2hlcyBmb3IgY3Jvc3NoYWlycyBmcm9tIGFuIGlk bGUKK3RpbWVyIHdpdGhvdXQgZHJhd2luZy9lcmFzaW5nIGFueSBvdmVybGF5cyBpbiB0aGUgYnVm ZmVyLiAgYGtiZF9tY19hY3RpdmF0ZV9jdXJzb3JzJworc2V0cyB0aGUgbXVsdGlwbGUgY3Vyc29y cyBib29sZWFuIHN3aXRjaGVzIHRvIGB0cnVlYCB3aGVuZXZlciB0aGVyZSBpcyBhIGtleWJvYXJk Cit0cmlnZ2VyZWQgY29tbWFuZC4gIEhvd2V2ZXIsIHRoYXQgZG9lcyBub3QgbmVjZXNzYXJpbHkg bWVhbiB0aGF0IHdlIG5lZWQgdG8gZHJhdworbXVsdGlwbGUgY3Vyc29ycy4gIEluYXNtdWNoIGFz IHRoZSBtdWx0aXBsZSBjdXJzb3JzIGJvb2xlYW4gc3dpdGNoZXMgbWlnaHQgaGF2ZQorYmVlbiBz ZXQgdGhyb3VnaCBhIHRpbWVyIGZ1bmN0aW9uLCBpdCBpcyBiZXR0ZXIgdG8gY2hlY2sgdGhlIGJ1 ZmZlciBsb2NhbCB2YXJpYWJsZXMKK2FuZCB0aGUgd2luZG93IGNhY2hlcy4gIEluIHRoZSBjYXNl IG9mIGNyb3NzaGFpcnMsIHRoZSBjb3JyZXNwb25kaW5nIGJvb2xlYW4KK3N3aXRjaGVzIGFyZSBv bmx5IHNldCB3aGVuIHdlIHJlYWxseSB3YW50IHRvIGRyYXcgdGhlIGNyb3NzaGFpcnMuCistICBX ZSBhbHNvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHBhcnQgb2YgYHVwZGF0ZV93aW5kb3dfY3Vyc29y JyB3aGVuIG1vdXNpbmcgb3Zlcgorc29tZXRoaW5nIHRoYXQgd291bGQgb3JkaW5hcmlseSBjYXVz ZSB0aGUgcmVhbCBjdXJzb3IgdG8gYmUgcmVkcmF3bi4gKi8KKyAgICAgIGlmICghTklMUCAody0+ bWNfZ2x5cGhfY2FjaGUpCisgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNv bnRlbnRzKSwgbWNfZ2x5cGhfbGlzdCkpCisgICAgICAgICAgfHwgdy0+bWMuZHJhd19jcm9zc2hh aXJzCisgICAgICAgICAgfHwgbWNfY3Jvc3NoYWlyc19wICh3KSkKKyAgICAgICAgeworICAgICAg ICAgIC8qIFdlIGFyZSBieXBhc3NpbmcgYHVwZGF0ZV9mcmFtZScgYW5kIGdvaW5nIHN0cmFpZ2h0 IHRvIGBtY19wb3J0YWwnLiAqLworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAo dy0+ZnJhbWUpOworICAgICAgICAgIHVwZGF0ZV9iZWdpbiAoZik7CisgICAgICAgICAgYmxvY2tf aW5wdXQgKCk7CisgICAgICAgICAgbWNfcG9ydGFsICh3LCB0cnVlKTsKKyAgICAgICAgICB1bmJs b2NrX2lucHV0ICgpOworICAgICAgICAgIHVwZGF0ZV9lbmQgKGYpOworICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gZmFsc2U7 Cit9CisKK0RFRlVOICgibWMtYWN0aXZhdGUtY3Jvc3NoYWlycyIsIEZtY19hY3RpdmF0ZV9jcm9z c2hhaXJzLCBTbWNfYWN0aXZhdGVfY3Jvc3NoYWlycywgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8q IERvYy1zdHJpbmcuICovKQorICAoTGlzcF9PYmplY3Qgd2luZG93KQoreworICBzdHJ1Y3Qgd2lu ZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93ICh3aW5kb3cpOworICB3LT5tYy5kcmF3X2Nyb3Nz aGFpcnMgPSB0cnVlOworICB3LT5tYy5lcmFzZV9jcm9zc2hhaXJzID0gdHJ1ZTsKKyAgcmV0dXJu IFFuaWw7Cit9CisKK0RFRlVOICgibWMtYWN0aXZhdGUtY3Vyc29ycyIsIEZtY19hY3RpdmF0ZV9j dXJzb3JzLCBTbWNfYWN0aXZhdGVfY3Vyc29ycywgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFdo ZW4gdXNpbmcgYSB0aW1lciwgYGtiZF9tY19hY3RpdmF0ZV9jdXJzb3JzJyBpbiBga2V5Ym9hcmQu YycgaXMgbm90IGNhbGxlZC4KK1RoZXJlIGFyZSBhbHNvIHNvbWUgb3RoZXIgY2lyY3Vtc3RhbmNl cyB3aGVyZSBgbWMtYWN0aXZhdGUtY3Vyc29ycycgaXMgaGVscGZ1bC4gKi8pCisgIChMaXNwX09i amVjdCB3aW5kb3cpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cg KHdpbmRvdyk7CisgIHctPm1jLmRyYXdfZ2x5cGhfY3Vyc29yID0gdHJ1ZTsKKyAgdy0+bWMuZXJh c2VfZ2x5cGhfY3Vyc29yID0gdHJ1ZTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK0RFRlVOICgiYnVn LTI4OTM2IiwgRmJ1Z18yODkzNiwgU2J1Z18yODkzNiwgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8q IERlbW9uc3RyYXRlIHRoZSBFbWFjcyBidWcgIyAyODkzNi4gKi8pCisgIChMaXNwX09iamVjdCB3 aW5kb3cpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHdpbmRv dyk7CisgIHN0cnVjdCBpdCBpdDsKKyAgdm9pZCAqaXRkYXRhID0gYmlkaV9zaGVsdmVfY2FjaGUg KCk7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0aW9uOworICBpbnQgdGFyZ2V0 X3g7CisgIGVudW0gbW92ZV9pdF9yZXN1bHQgcmM7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVG RkVSICh3LT5jb250ZW50cyk7CisgIGItPndvcmRfd3JhcF8gPSBRdDsKKyAgU0VUX1RFWFRfUE9T X0ZST01fTUFSS0VSIChzdGFydF90ZXh0X3Bvc2l0aW9uLCB3LT5zdGFydCk7CisgIHN0YXJ0X2Rp c3BsYXkgKCZpdCwgdywgc3RhcnRfdGV4dF9wb3NpdGlvbik7CisgIG1vdmVfaXRfdG8gKCZpdCwg UFQsIGl0Lmxhc3RfdmlzaWJsZV94LCBpdC5sYXN0X3Zpc2libGVfeSAtIDEsIC0xLCBNT1ZFX1RP X1BPUyB8IE1PVkVfVE9fWCB8IE1PVkVfVE9fWSk7CisgIHRhcmdldF94ID0gaXQuY3VycmVudF94 OworICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIDApOworICByYyA9IG1jX21vdmVfaXRfaW5fZGlz cGxheV9saW5lICh3LCAmaXQsIHRhcmdldF94KTsKKyAgYmlkaV91bnNoZWx2ZV9jYWNoZSAoaXRk YXRhLCBmYWxzZSk7CisgIHJldHVybiBtYWtlX251bWJlciAocmMpOworfQorCisvKiBFTkQgbXVs dGlwbGUgY3Vyc29ycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKIAwKIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgpAQCAtMTQxNjIsNiArMTU3MDMsMTkgQEAgcmVkaXNwbGF5X2ludGVybmFsICh2b2lk KQogI2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQogCSAgICAgIHVwZGF0ZV93aW5kb3dfZnJpbmdl cyAodywgZmFsc2UpOwogI2VuZGlmCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVs dGlwbGUgY3Vyc29ycyAqLworCisvKiBOT1RFOiAgQW4gaWRsZS10aW1lciBmdW5jdGlvbiBtYXkg bm90IG5lY2Vzc2FyaWx5IHRyaWdnZXIgYHJlZGlzcGxheV93aW5kb3cnLgorYG9wdGltaXphdGlv biAxYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gdGhlIGZp cnN0IHNjcmVlbgorbGluZSksIGFuZCBgb3B0aW1pemF0aW9uIDNgICh3aGljaCBpbmNsdWRlcyBs ZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVudCBvbiBzY3JlZW4KK2xpbmVzIHN1YnNlcXVlbnQgdG8g dGhlIGZpcnN0IHNjcmVlbiBsaW5lKSwgYnlwYXNzIGByZWRpc3BsYXlfd2luZG93Jy4gKi8KKwor ICAgICAgbWNfcmVtb3ZlX2V2ZXJ5dGhpbmcgKHcpOworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKwogCSAgICAgIGdvdG8gdXBkYXRlOwogCSAgICB9CiAJICBlbHNlCkBAIC0xNDE4NCw2ICsx NTczOCwxNiBAQCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAJCSAgJiYgKHcgPSBYV0lORE9X IChzZWxlY3RlZF93aW5kb3cpKSAhPSBzdykKIAkJZ290byByZXRyeTsKIAorCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgICAgIGlmIChtY193 aXRob3V0X3VwZGF0ZV9mcmFtZSAodykpCisgICAgICAgICBnb3RvIGVuZF9vZl9yZWRpc3BsYXk7 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICAvKiBXZSB1c2VkIHRvIGFs d2F5cyBnb3RvIGVuZF9vZl9yZWRpc3BsYXkgaGVyZSwgYnV0IHRoaXMKIAkJIGlzbid0IGVub3Vn aCBpZiB3ZSBoYXZlIGEgYmxpbmtpbmcgY3Vyc29yLiAgKi8KIAkgICAgICBpZiAody0+Y3Vyc29y X29mZl9wID09IHctPmxhc3RfY3Vyc29yX29mZl9wKQpAQCAtMTQyMjUsNiArMTU3ODksMTkgQEAg cmVkaXNwbGF5X2ludGVybmFsICh2b2lkKQogCQkgICp3LT5kZXNpcmVkX21hdHJpeC0+bWV0aG9k ID0gMDsKIAkJICBkZWJ1Z19tZXRob2RfYWRkICh3LCAib3B0aW1pemF0aW9uIDMiKTsKICNlbmRp ZgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKwor LyogTk9URTogIEFuIGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmln Z2VyIGByZWRpc3BsYXlfd2luZG93Jy4KK2BvcHRpbWl6YXRpb24gMWAgKHdoaWNoIGluY2x1ZGVz IGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3JlZW4KK2xpbmUpLCBh bmQgYG9wdGltaXphdGlvbiAzYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92 ZW1lbnQgb24gc2NyZWVuCitsaW5lcyBzdWJzZXF1ZW50IHRvIHRoZSBmaXJzdCBzY3JlZW4gbGlu ZSksIGJ5cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisKKyAgICAgIG1jX3JlbW92ZV9ldmVy eXRoaW5nICh3KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIAkJICBnb3RvIHVwZGF0 ZTsKIAkJfQogCSAgICAgIGVsc2UKQEAgLTE0MzU4LDYgKzE1OTM1LDE4IEBAIHJlZGlzcGxheV9p bnRlcm5hbCAodm9pZCkKIAkJICAgIHVucmVxdWVzdF9zaWdpbyAoKTsKIAkJICBTVE9QX1BPTExJ Tkc7CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLwor CisgICAgLyogT24gRW1hY3MgZm9yIFdpbmRvd3MsIGNyb3NzaGFpcnMgd2lsbCBub3QgZHJhdyBh dCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIKKyAgICB3aXRob3V0IHRoaXMgY29uZGl0aW9u IHdoZW4gdGhlIGlkbGUtdGltZXIgc3dpdGNoZXMgYXJlIHRvZ2dsZWQuICBUaGlzIG1heSBoYXZl CisgICAgYmVlbiBkdWUgdG8gdGhlIHBhcmVudGhlc2VzIG92ZXJsYXlzIHRoYXQgd2VyZSByZW1v dmVkIGFuZCBkaWQgbm90IG5lZWQgdG8gYmUKKyAgICByZWRyYXduIHNpbmNlIG9wZW5pbmcgcGFy ZW50aGVzZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIGFyZSBub3QgaGlnaGxpZ2h0 ZWQuICovCisgICAgaWYgKHctPm1jLmRyYXdfY3Jvc3NoYWlycykKKyAgICAgIHctPm11c3RfYmVf dXBkYXRlZF9wID0gdHJ1ZTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIAkJICBwZW5k aW5nIHw9IHVwZGF0ZV9mcmFtZSAoZiwgZmFsc2UsIGZhbHNlKTsKIAkJICBmLT5jdXJzb3JfdHlw ZV9jaGFuZ2VkID0gZmFsc2U7CiAJCSAgZi0+dXBkYXRlZF9wID0gdHJ1ZTsKQEAgLTE3NTY0LDYg KzE5MTUzLDIwIEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBq dXN0X3RoaXNfb25lX3ApCiAgIGVsc2UKICAgICBURU1QX1NFVF9QVF9CT1RIIChDSEFSUE9TIChv cG9pbnQpLCBCWVRFUE9TIChvcG9pbnQpKTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBCRUdJTiBtdWx0aXBsZSBjdXJzb3JzICovCisKKy8qIE5PVEU6ICBBbiBpZGxlLXRpbWVyIGZ1 bmN0aW9uIG1heSBub3QgbmVjZXNzYXJpbHkgdHJpZ2dlciBgcmVkaXNwbGF5X3dpbmRvdycuCitg b3B0aW1pemF0aW9uIDFgICh3aGljaCBpbmNsdWRlcyBsZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVu dCBvbiB0aGUgZmlyc3Qgc2NyZWVuCitsaW5lKSwgYW5kIGBvcHRpbWl6YXRpb24gM2AgKHdoaWNo IGluY2x1ZGVzIGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHNjcmVlbgorbGluZXMgc3Vi c2VxdWVudCB0byB0aGUgZmlyc3Qgc2NyZWVuIGxpbmUpLCBieXBhc3MgYHJlZGlzcGxheV93aW5k b3cnLiAqLworCisgIG1jX3JlY29yZF94X3dzdGFydF93ZW5kICh3KTsKKworICBtY19yZW1vdmVf ZXZlcnl0aGluZyAodyk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAgIHNldF9idWZm ZXJfaW50ZXJuYWxfMSAob2xkKTsKICAgLyogQXZvaWQgYW4gYWJvcnQgaW4gVEVNUF9TRVRfUFRf Qk9USCBpZiB0aGUgYnVmZmVyIGhhcyBiZWNvbWUKICAgICAgc2hvcnRlci4gIFRoaXMgY2FuIGJl IGNhdXNlZCBieSBsb2cgdHJ1bmNhdGlvbiBpbiAqTWVzc2FnZXMqLiAgKi8KQEAgLTI0NjA4LDYg KzI2MjExLDI1IEBAIGRlY29kZV9tb2RlX3NwZWMgKHN0cnVjdCB3aW5kb3cgKncsIHJlZ2lzdGVy IGludCBjLCBpbnQgZmllbGRfd2lkdGgsCiAJICByZXR1cm4gIkAiOwogICAgICAgfQogCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgIGNhc2Ug J3cnOgorICAgICAgeworICBwdHJkaWZmX3Qgd2luZG93X3N0YXJ0ID0gbWFya2VyX3Bvc2l0aW9u ICh3LT5zdGFydCk7CisgIHBpbnQyc3RyIChkZWNvZGVfbW9kZV9zcGVjX2J1Ziwgd2lkdGgsIHdp bmRvd19zdGFydCk7CisgIHJldHVybiBkZWNvZGVfbW9kZV9zcGVjX2J1ZjsKKyAgICAgIH0KKwor ICAgIGNhc2UgJ1cnOgorICAgICAgeworICBwdHJkaWZmX3Qgd2luZG93X2VuZCA9IEJVRl9aIChi KSAtIHctPndpbmRvd19lbmRfcG9zOworICBwaW50MnN0ciAoZGVjb2RlX21vZGVfc3BlY19idWYs IHdpZHRoLCB3aW5kb3dfZW5kKTsKKyAgcmV0dXJuIGRlY29kZV9tb2RlX3NwZWNfYnVmOworICAg ICAgfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICAgIGNhc2UgJ3onOgogICAgICAg LyogY29kaW5nLXN5c3RlbSAobm90IGluY2x1ZGluZyBlbmQtb2YtbGluZSBmb3JtYXQpICovCiAg ICAgY2FzZSAnWic6CkBAIC0yOTQ2OCw5ICszMTA5MCwxOSBAQCBkaXNwbGF5X2FuZF9zZXRfY3Vy c29yIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9uLAogICAgICAgdy0+cGh5c19jdXJzb3IudnBv cyA9IHZwb3M7CiAgICAgfQogCi0gIEZSQU1FX1JJRiAoZiktPmRyYXdfd2luZG93X2N1cnNvciAo dywgZ2x5cGhfcm93LCB4LCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5ld19jdXJzb3JfdHlwZSwgbmV3X2N1cnNvcl93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvbiwgYWN0aXZlX2N1cnNvcik7CisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICBMaXNwX09iamVjdCBjb2xvcl92ZWN0 b3IgPSAoRm1ha2VfdmVjdG9yIChtYWtlX251bWJlciAoMyksIFFuaWwpKTsKKyAgQVNFVCAoY29s b3JfdmVjdG9yLCAwLCBtYWtlX2Zsb2F0ICgtMS4wKSk7CisgIEFTRVQgKGNvbG9yX3ZlY3Rvciwg MSwgbWFrZV9mbG9hdCAoLTEuMCkpOworICBBU0VUIChjb2xvcl92ZWN0b3IsIDIsIG1ha2VfZmxv YXQgKC0xLjApKTsKKyAgIEZSQU1FX1JJRiAoZiktPmRyYXdfd2luZG93X2N1cnNvciAodywgZ2x5 cGhfcm93LCB4LCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdf Y3Vyc29yX3R5cGUsIG5ld19jdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb24sIGFjdGl2ZV9jdXJzb3IsIGNvbG9yX3ZlY3RvciwgUW5pbCk7CisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCiB9CiAKIApAQCAtMjk1MDIsMTAgKzMxMTM0LDI4IEBA IHVwZGF0ZV93aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9uKQogICAgICAg aWYgKHJvdy0+cmV2ZXJzZWRfcCAmJiBocG9zID49IHJvdy0+dXNlZFtURVhUX0FSRUFdKQogCWhw b3MgPSByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDE7CiAKLSAgICAgIGJsb2NrX2lucHV0ICgpOwot ICAgICAgZGlzcGxheV9hbmRfc2V0X2N1cnNvciAodywgb24sIGhwb3MsIHZwb3MsCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgICAgLyogTW92 aW5nIHRoZSBtb3VzZSB0cmlnZ2VycyBgdXBkYXRlX3dpbmRvd19jdXJzb3InIHdoaWNoIGNhbGxz CisgICAgICBgZGlzcGxheV9hbmRfc2V0X2N1cnNvcicgdGhhdCB3b3VsZCBvdGhlcndpc2UgcmVt b3ZlIGEgcG9ydGlvbiBvZiB0aGUKKyAgICAgIGhvcml6b250YWwgcnVsZXIgZnJvbSBwb2ludCBh dCBlbmQgb2YgdmlzdWFsIGxpbmUgdG8gd2luZG93IGVkZ2UuICovCisgICAgICBib29sIGNyb3Nz aGFpcnNfcCA9ICghTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmICF3LT5tYy5kcmF3X2Nyb3NzaGFpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm ICFOSUxQICh3LT5jcm9zc2hhaXJzX2NhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZudGggKG1ha2Vf bnVtYmVyICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMiksIHct PmNyb3NzaGFpcnNfY2FjaGUpKSkpOworICAgICAgaWYgKCFjcm9zc2hhaXJzX3ApCisgICAgICAg IHsKKyAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICBkaXNwbGF5X2FuZF9zZXRfY3Vyc29y ICh3LCBvbiwgaHBvcywgdnBvcywKIAkJCSAgICAgIHctPnBoeXNfY3Vyc29yLngsIHctPnBoeXNf Y3Vyc29yLnkpOwotICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICB1bmJsb2NrX2lucHV0 ICgpOworICAgICAgICB9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAgICAgfQogfQog CkBAIC0zMjIxNiw2ICszMzg2NiwyNiBAQCB4X2ludGVyc2VjdF9yZWN0YW5nbGVzIChYUmVjdGFu Z2xlICpyMSwgWFJlY3RhbmdsZSAqcjIsIFhSZWN0YW5nbGUgKnJlc3VsdCkKIHZvaWQKIHN5bXNf b2ZfeGRpc3AgKHZvaWQpCiB7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQkVHSU4g bXVsdGlwbGUgY3Vyc29ycyAqLworCisgIERFRlNZTSAoUW1jX2dseXBoLCAibWMtZ2x5cGgtY3Vy c29yIik7CisgIERFRlNZTSAoUW1jX2dseXBobGVzcywgIm1jLWdseXBsZXNzLWN1cnNvciIpOwor ICBERUZTWU0gKFFtY19nbHlwaF90YWIsICJtYy1nbHlwaC10YWIiKTsKKworICBkZWZzdWJyICgm U21jX2FjdGl2YXRlX2N1cnNvcnMpOworICBERUZTWU0gKFFtY19hY3RpdmF0ZV9jdXJzb3JzLCAi bWMtYWN0aXZhdGUtY3Vyc29ycyIpOworCisgIGRlZnN1YnIgKCZTbWNfYWN0aXZhdGVfY3Jvc3No YWlycyk7CisgIERFRlNZTSAoUW1jX2FjdGl2YXRlX2Nyb3NzaGFpcnMsICJtYy1hY3RpdmF0ZS1j cm9zc2hhaXJzIik7CisKKyAgZGVmc3ViciAoJlNidWdfMjg5MzYpOworICBERUZTWU0gKFFidWdf Mjg5MzYsICJidWctMjg5MzYiKTsKKworLyogRU5EIG11bHRpcGxlIGN1cnNvcnMgKi8KKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCiAgIFZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3RvciA9IFFu aWw7CiAgIHN0YXRpY3BybyAoJlZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rvcik7CiAKZGlmZiAt LWdpdCBhL3NyYy94dGVybS5jIGIvc3JjL3h0ZXJtLmMKaW5kZXggMWI0NWNmMS4uZjJhM2NiNyAx MDA2NDQKLS0tIGEvc3JjL3h0ZXJtLmMKKysrIGIvc3JjL3h0ZXJtLmMKQEAgLTExNjMsMTAgKzEx NjMsMTIgQEAgeF91cGRhdGVfd2luZG93X2VuZCAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBjdXJz b3Jfb25fcCwKICAgICB7CiAgICAgICBibG9ja19pbnB1dCAoKTsKIAotICAgICAgaWYgKGN1cnNv cl9vbl9wKQotCWRpc3BsYXlfYW5kX3NldF9jdXJzb3IgKHcsIHRydWUsCi0JCQkJdy0+b3V0cHV0 X2N1cnNvci5ocG9zLCB3LT5vdXRwdXRfY3Vyc29yLnZwb3MsCi0JCQkJdy0+b3V0cHV0X2N1cnNv ci54LCB3LT5vdXRwdXRfY3Vyc29yLnkpOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBt dWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgIG1jX3BvcnRhbCAodywgY3Vyc29yX29uX3ApOwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KIAogICAgICAgaWYgKGRyYXdfd2luZG93X2ZyaW5n ZXMgKHcsIHRydWUpKQogCXsKQEAgLTE1NTAsMTAgKzE1NTIsMTcgQEAgc3RhdGljIHZvaWQgeF9j aGVja19mb250IChzdHJ1Y3QgZnJhbWUgKiwgc3RydWN0IGZvbnQgKik7CiBzdGF0aWMgdm9pZAog eF9zZXRfY3Vyc29yX2djIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzKQogewotICBpZiAocy0+Zm9u dCA9PSBGUkFNRV9GT05UIChzLT5mKQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0 aXBsZSBjdXJzb3JzICovCisKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRv dyAoc2VsZWN0ZWRfd2luZG93KTsKKyAgaWYgKChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYp CiAgICAgICAmJiBzLT5mYWNlLT5iYWNrZ3JvdW5kID09IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwg KHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5mb3JlZ3JvdW5kID09IEZSQU1FX0ZPUkVHUk9VTkRf UElYRUwgKHMtPmYpCiAgICAgICAmJiAhcy0+Y21wKQorICAgICAgfHwgdy0+bWMuY3Vyc29yX2dj X2RlZmF1bHQpCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogICAgIHMtPmdjID0gcy0+Zi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djOwogICBlbHNlCiAgICAgewpAQCAtOTMxMCw3ICs5MzE5 LDE2IEBAIHhfZHJhd19iYXJfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhf cm93ICpyb3csIGludCB3aWR0aCwgZW51bSB0ZXh0CiAJIGludmlzaWJsZS4gIFVzZSB0aGUgZ2x5 cGgncyBmb3JlZ3JvdW5kIGNvbG9yIGluc3RlYWQgaW4gdGhpcwogCSBjYXNlLCBvbiB0aGUgYXNz dW1wdGlvbiB0aGF0IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUgY2hvc2VuIHNvCiAJIHRoYXQgdGhl IGdseXBoIGlzIGxlZ2libGUuICAqLwotICAgICAgaWYgKGZhY2UtPmJhY2tncm91bmQgPT0gZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsKQorCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgICAgaWYgKGZhY2UtPmJhY2tncm91bmQgPT0g Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsCisgICAgICAgICAgJiYgIXctPm1jLmN1cnNv cl9nY19pbnZpc2libGVfb2theSkKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCXhn Y3YuYmFja2dyb3VuZCA9IHhnY3YuZm9yZWdyb3VuZCA9IGZhY2UtPmZvcmVncm91bmQ7CiAgICAg ICBlbHNlCiAJeGdjdi5iYWNrZ3JvdW5kID0geGdjdi5mb3JlZ3JvdW5kID0gZi0+b3V0cHV0X2Rh dGEueC0+Y3Vyc29yX3BpeGVsOwpAQCAtOTM5OCw3ICs5NDE2LDEzIEBAIHhfY2xlYXJfZnJhbWVf YXJlYSAoc3RydWN0IGZyYW1lICpmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo dCkKIHN0YXRpYyB2b2lkCiB4X2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywg c3RydWN0IGdseXBoX3JvdyAqZ2x5cGhfcm93LCBpbnQgeCwKIAkJICAgICAgaW50IHksIGVudW0g dGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsCi0JCSAgICAgIGludCBjdXJzb3Jfd2lkdGgs IGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog bXVsdGlwbGUgY3Vyc29ycyAqLworCisgIGludCBjdXJzb3Jfd2lkdGgsIGJvb2wgb25fcCwgYm9v bCBhY3RpdmVfcCwKKyAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVjdCBmbGF2 b3IpCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogewogICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKFdJTkRPV19GUkFNRSAodykpOwogCkBAIC05NDE3LDMxICs5NDQxLDEyNCBAQCB4X2Ry YXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqZ2x5 cGhfcm93LCBpbnQgeCwKIAl9CiAgICAgICBlbHNlCiAJewotCSAgc3dpdGNoIChjdXJzb3JfdHlw ZSkKLQkgICAgewotCSAgICBjYXNlIEhPTExPV19CT1hfQ1VSU09SOgotCSAgICAgIHhfZHJhd19o b2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOwotCSAgICAgIGJyZWFrOwogCi0JICAgIGNhc2Ug RklMTEVEX0JPWF9DVVJTT1I6Ci0JICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5 cGhfcm93LCBEUkFXX0NVUlNPUik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBCQVJfQ1VS U09SOgotCSAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0 aCwgQkFSX0NVUlNPUik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBIQkFSX0NVUlNPUjoK LQkgICAgICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEhC QVJfQ1VSU09SKTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIE5PX0NVUlNPUjoKLQkgICAg ICB3LT5waHlzX2N1cnNvcl93aWR0aCA9IDA7Ci0JICAgICAgYnJlYWs7CisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIEJFR0lOIG11bHRpcGxlIGN1cnNvcnMgKi8KKyAgZG91YmxlIHJlZCA9 IFhGTE9BVF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDApKTsKKyAgZG91YmxlIGdyZWVuID0g WEZMT0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMSkpOworICBkb3VibGUgYmx1ZSA9IFhG TE9BVF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDIpKTsKKyAgc3dpdGNoIChjdXJzb3JfdHlw ZSkKKyAgeworICAgIGNhc2UgSE9MTE9XX0JPWF9DVVJTT1I6CisgICAgeworICAgICAgaWYgKHJl ZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICAvKiBUZW1wb3Jhcmls eSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICAqLworICAgICAgICB7 CisgICAgICAgICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsK KyAgICAgICAgICBzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8gPSBGUkFNRV9ESVNQTEFZ X0lORk8gKGYpOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb3JpZ192YWwgPSBmLT5vdXRwdXRf ZGF0YS54LT5jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgaW50IGludF9yZWQgPSByZWQgKiA2NTUz NTsKKyAgICAgICAgICBpbnQgaW50X2dyZWVuID0gZ3JlZW4gKiA2NTUzNTsKKyAgICAgICAgICBp bnQgaW50X2JsdWUgPSBibHVlICogNjU1MzU7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+ Y3Vyc29yX3BpeGVsID0geF9tYWtlX3RydWVjb2xvcl9waXhlbCAoZHB5aW5mbywgaW50X3JlZCwg aW50X2dyZWVuLCBpbnRfYmx1ZSk7CisgICAgICAgICAgeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcs IGdseXBoX3Jvdyk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0g b3JpZ192YWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19ob2xs b3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug RklMTEVEX0JPWF9DVVJTT1I6CisgICAgeworICAgICAgaWYgKHJlZCA+PSAwICYmIGJsdWUgPj0g MCAmJiBncmVlbiA+PSAwKQorICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1 dF9kYXRhLngtPmN1cnNvcl9nYycgYnkgYm9ycm93aW5nIHRoZQorICAgICAgICBmdW5jdGlvbmFs aXR5IG9mIGB4X21ha2VfZ2MnIGluIHhmbnMuYy4gICovCisgICAgICAgIHsKKyAgICAgICAgICBi bG9ja19pbnB1dCAoKTsKKyAgICAgICAgICBMaXNwX09iamVjdCB3aW5kb3cgPSAoc2VsZWN0ZWRf d2luZG93KTsKKyAgICAgICAgICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93 ICh3aW5kb3cpOworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZS QU1FICh3KSk7CisgICAgICAgICAgc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJB TUVfRElTUExBWV9JTkZPIChmKTsKKyAgICAgICAgICBpbnQgaW50X3JlZCA9IHJlZCAqIDY1NTM1 OworICAgICAgICAgIGludCBpbnRfZ3JlZW4gPSBncmVlbiAqIDY1NTM1OworICAgICAgICAgIGlu dCBpbnRfYmx1ZSA9IGJsdWUgKiA2NTUzNTsKKyAgICAgICAgICBYR0NWYWx1ZXMgZ2NfdmFsdWVz OworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dy b3VuZCB8IEdDRmlsbFN0eWxlIHwgR0NMaW5lV2lkdGg7CisgICAgICAgICAgdW5zaWduZWQgbG9u ZyBvcmlnX3ZhbF9hID0gRlJBTUVfQkFDS0dST1VORF9QSVhFTCAoZik7CisgICAgICAgICAgdW5z aWduZWQgbG9uZyBvcmlnX3ZhbF9iID0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsOwor ICAgICAgICAgIGdjX3ZhbHVlcy5saW5lX3dpZHRoID0gMDsgIC8qIE1lYW5zIDEgdXNpbmcgZmFz dCBhbGdvcml0aG0uICAqLworICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gRlJBTUVf QkFDS0dST1VORF9QSVhFTCAoZik7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSB4 X21ha2VfdHJ1ZWNvbG9yX3BpeGVsIChkcHlpbmZvLCBpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9i bHVlKTsKKyAgICAgICAgICBnY192YWx1ZXMuZmlsbF9zdHlsZSA9IEZpbGxPcGFxdWVTdGlwcGxl ZDsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MKKyAgICAgICAgICAgID0g WENyZWF0ZUdDIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBGUkFNRV9YX1dJTkRPVyAoZiksIG1hc2ss ICZnY192YWx1ZXMpOworICAgICAgICAgIC8qIEZvcmNlIGB4X3NldF9jdXJzb3JfZ2MnIHRvIHVz ZSBgcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJy4gICovCisgICAgICAgICAgdy0+bWMu Y3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlOworICAgICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5 cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9n Y19kZWZhdWx0ID0gZmFsc2U7CisgICAgICAgICAgZ2NfdmFsdWVzLmxpbmVfd2lkdGggPSAwOyAg LyogTWVhbnMgMSB1c2luZyBmYXN0IGFsZ29yaXRobS4gICovCisgICAgICAgICAgZ2NfdmFsdWVz LmZvcmVncm91bmQgPSBvcmlnX3ZhbF9hOworICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5k ID0gb3JpZ192YWxfYjsKKyAgICAgICAgICBnY192YWx1ZXMuZmlsbF9zdHlsZSA9IEZpbGxPcGFx dWVTdGlwcGxlZDsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MKKyAgICAg ICAgICAgID0gWENyZWF0ZUdDIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBGUkFNRV9YX1dJTkRPVyAo ZiksIG1hc2ssICZnY192YWx1ZXMpOworICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcs IGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug QkFSX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdy ZWVuID49IDApCisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEu eC0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZnJhbWUg KmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAgICAgICAgIHN0cnVjdCB4X2Rpc3Bs YXlfaW5mbyAqZHB5aW5mbyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAoZik7CisgICAgICAgICAgdW5z aWduZWQgbG9uZyBvcmlnX3ZhbCA9IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbDsKKyAg ICAgICAgICBpbnQgaW50X3JlZCA9IHJlZCAqIDY1NTM1OworICAgICAgICAgIGludCBpbnRfZ3Jl ZW4gPSBncmVlbiAqIDY1NTM1OworICAgICAgICAgIGludCBpbnRfYmx1ZSA9IGJsdWUgKiA2NTUz NTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSB4X21ha2VfdHJ1 ZWNvbG9yX3BpeGVsIChkcHlpbmZvLCBpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9ibHVlKTsKKyAg ICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSB0cnVlOworICAgICAgICAg IHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgQkFSX0NVUlNP Uik7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5ID0gZmFsc2U7Cisg ICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gb3JpZ192YWw7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlw aF9yb3csIGN1cnNvcl93aWR0aCwgQkFSX0NVUlNPUik7CisgICAgICBicmVhazsKKyAgICB9Cisg ICAgY2FzZSBIQkFSX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAocmVkID49IDAgJiYgYmx1ZSA+ PSAwICYmIGdyZWVuID49IDApCisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0 cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1 Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAgICAgICAgIHN0cnVj dCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAoZik7CisgICAg ICAgICAgdW5zaWduZWQgbG9uZyBvcmlnX3ZhbCA9IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9w aXhlbDsKKyAgICAgICAgICBpbnQgaW50X3JlZCA9IHJlZCAqIDY1NTM1OworICAgICAgICAgIGlu dCBpbnRfZ3JlZW4gPSBncmVlbiAqIDY1NTM1OworICAgICAgICAgIGludCBpbnRfYmx1ZSA9IGJs dWUgKiA2NTUzNTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSB4 X21ha2VfdHJ1ZWNvbG9yX3BpeGVsIChkcHlpbmZvLCBpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9i bHVlKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSB0cnVlOwor ICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwg SEJBUl9DVVJTT1IpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9 IGZhbHNlOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9IG9yaWdf dmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB4X2RyYXdfYmFyX2N1cnNv ciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEhCQVJfQ1VSU09SKTsKKyAgICAgIGJyZWFr OworICAgIH0KKyAgICBjYXNlIE5PX0NVUlNPUjoKKyAgICAgIHctPnBoeXNfY3Vyc29yX3dpZHRo ID0gMDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBlbWFjc19hYm9ydCAoKTsK KyAgfQorLyogRU5EIG11bHRpcGxlIGN1cnNvcnMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LwogCi0JICAgIGRlZmF1bHQ6Ci0JICAgICAgZW1hY3NfYWJvcnQgKCk7Ci0JICAgIH0KIAl9CiAK ICNpZmRlZiBIQVZFX1hfSTE4Tgo= --Multipart_Sun_Dec__3_12:56:49_2017-1 Content-Type: application/javascript Content-Disposition: attachment; filename=".scratch" Content-Transfer-Encoding: base64 RG9lcyB0aGlzIGhhcHBlbiBvbmx5IHdoZW4gbGluZSBudW1iZXJzIGFyZSBkaXNwbGF5ZWQ/CgpJ biBhbnkgY2FzZSwgeW91ciBkZXNjcmlwdGlvbiBwcm92aWRlcyBhIGxvdCBvZiBkZXRhaWxzIHRo YXQgYXJlIGhhcmQKdG8gcmVhc29uIGFib3V0LCBiZWNhdXNlIG1vc3Qgb2YgdGhlIGNvZGUgaXMg bm90IHNob3duLiAgT1RPSCwgaWYKaW5kZWVkIHRoZXJlJ3MgYSBidWcgaW4gbW92ZV9pdF9pbl9k aXNwbGF5X2xpbmVfdG8sIHRoZW4gcHJlc2VudGluZwpldmlkZW5jZSBmb3IgaXQgaXMgdmVyeSBz aW1wbGU6IHNob3cgYSBsaW5lIG9mIHRleHQgYW5kIGl0cyBsaW5lCm51bWJlciwgYW5kIHRoZW4g c2hvdyB0aGUgWCBhbmQgSFBPUyB2YWx1ZXMgZm9yIGVhY2ggdGFiIGluIHRoYXQgbGluZQphcyBj YWxjdWxhdGVkIGJ5IG1vdmVfaXRfaW5fZGlzcGxheV9saW5lX3RvIHZzIHRoZSBzYW1lIHZhbHVl cyBpbiBhCmRpc3BsYXllZCBsaW5lLiAgKEZvciB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUg cGdyb3d4IGNvbW1hbmQKZGVmaW5lZCBpbiBzcmMvLmdkYmluaXQsIG9yIG1hbnVhbGx5IGRpc3Bs YXkgdGhlIHZhbHVlcyB1c2luZyB0aGUKZGVidWdnZXIuKQoKSWYgeW91IGRvIHRoYXQsIGFueSBt aXNtYXRjaGVzIGJldHdlZW4gZGlzcGxheWluZyBhIGxpbmUgYW5kIG1vdmluZwp0aHJvdWdoIGl0 IHdpdGggbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8gd2lsbCBiZSBpbW1lZGlhdGVseQphcHBh cmVudCwgYW5kIGl0IHNob3VsZCBiZSBlYXN5IHRvIGZpeCB0aGVtLgoKCiAgICAgICAgICB8MTAg ICAgICAgfDIwICAgICAgIHwzMCAgICAgICB8NDAgICAgICAgfDUwICAgICAgIHw2MCAgICAgICB8 NzAgICAgICAgCjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2 Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CiAgICAgICAgICAJICAgICAgICAJICAg ICAgICAJICAgICAgICAJICAgICAgICAJICAgICAgICAJICAgICAgICAJICAgICAgICAJCnh4eHh4 eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 eHh4eHh4eHh4eHh4eHggeHh4CWhlbGxvLXdvcmxk --Multipart_Sun_Dec__3_12:56:49_2017-1 Content-Type: application/el; type=lawlist-elisp Content-Disposition: attachment; filename="+-mode.el" Content-Transfer-Encoding: base64 KGRlZnVuICstdGltZXItZm4gKCkKIlNpbmNlIHRoaXMgZmlyZXMgZ2xvYmFsbHksIHdlIG11c3Qg Y29udHJvbCB3aGljaCBidWZmZXJzIGNyb3NzaGFpcnMgYXBwZWFyIGluLiIKICAod2hlbiArLW1v ZGUKICAgIChzZXRxIG92ZXJsYXktYXJyb3ctcG9zaXRpb24gbmlsKQogICAgKHNldHEtbG9jYWwg ZmFjZS1yZW1hcHBpbmctYWxpc3QgJygoKy1vdmVybGF5LWFycm93LWZhY2UgKy1sZWZ0LWZyaW5n ZS1jdXJzb3ItYWx0LXR3by1mYWNlKSkpCiAgICAodW5sZXNzIChtZW1xIGxhc3QtY29tbWFuZCAn KG13aGVlbC1zY3JvbGwpKQogICAgICAoKy1wYXJlbnMtZm4pKQogICAgKHdoZW4gdnItdGltZXIK ICAgICAgKHNldHEgdGltZXItaWRsZS1saXN0IChkZWxxIHZyLXRpbWVyIHRpbWVyLWlkbGUtbGlz dCkpCiAgICAgIChzZXRxIHZyLXRpbWVyIG5pbCkpCiAgICAobWMtYWN0aXZhdGUtY3Jvc3NoYWly cyAoc2VsZWN0ZWQtd2luZG93KSkpKQoKKGRlZnVuICstcmVkcmF3LWZvcnRod2l0aCAoKQoiRm9y Y2UgYm90aCBydWxlcyB0byBiZSByZWRyYXduLiIKICAoKy1kcmF3LWhvcml6b250YWwtcnVsZXIg J2ZvcmNlKSkKCihkZWZ1biArLWRyYXctaG9yaXpvbnRhbC1ydWxlciAoJm9wdGlvbmFsIGZvcmNl KQogICh3aGVuICstbW9kZQogICAgKHNldHEtbG9jYWwgZmFjZS1yZW1hcHBpbmctYWxpc3QgJygo Ky1vdmVybGF5LWFycm93LWZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LW9uZS1mYWNlKSkp CiAgICA7OzsgVGhlcmUgaXMgYSBzdWJzdGFudGlhbCBzbG93LWRvd24gd2hlbiBzZXR0aW5nIHRo ZSBvdmVybGF5IGFycm93IGV2ZXJ5CiAgICA7OzsgY29tbWFuZCBsb29wIHdoZW4gdGhlIGJ1ZmZl ciBpcyBkaXNwbGF5ZWQgaW4gbW9yZSB0aGFuIG9uZSB3aW5kb3csCiAgICA7OzsgZXNwZWNpYWxs eSB3aGVuIGluIGRpZmZlcmVudCBmcmFtZXMuICBUaGlzIGNhbiBiZSB2ZXJpZmllZCBieSByZWR1 Y2luZwogICAgOzs7IHRoZSBudW1iZXIgb2Ygd2luZG93cyB0byBqdXN0IHRoZSBvbmUgZGlzcGxh eWluZyB0aGUgb3ZlcmxheSBhcnJvdywKICAgIDs7OyBhbmQgdGhlIHNwZWVkIHJldHVybnMgdG8g YW4gYWNjZXB0YWJsZSBsZXZlbC4gYGJzZXRfcmVkaXNwbGF5JyBjYWxscwogICAgOzs7IGByZWRp c3BsYXlfb3RoZXJfd2luZG93cycgaW4gdGhhdCBzaXR1YXRpb24sIGFuZCB0aGF0IHNsb3dzIHVz IGRvd24uCiAgICAoaWYgKG5vdCAoYW5kIChlb2JwKSAoYm9scCkpKQogICAgICAoc2V0cSBvdmVy bGF5LWFycm93LXBvc2l0aW9uIChjb3B5LW1hcmtlciAobGluZS1iZWdpbm5pbmctcG9zaXRpb24p KSkKICAgICAgKHNldHEgb3ZlcmxheS1hcnJvdy1wb3NpdGlvbiBuaWwpKQogICAgKHdoZW4gdnIt dGltZXIKICAgICAgKHNldHEgdGltZXItaWRsZS1saXN0IChkZWxxIHZyLXRpbWVyIHRpbWVyLWlk bGUtbGlzdCkpCiAgICAgIChzZXRxIHZyLXRpbWVyIG5pbCkpCiAgICAodW5sZXNzIChtZW1xIHRo aXMtY29tbWFuZCAnKG13aGVlbC1zY3JvbGwpKQogICAgICAoKy1kZWxldGUtcGFyZW5zLW92ZXJs YXlzKSkKICAgIChpZiBmb3JjZQogICAgICAocHJvZ24KICAgICAgICAoKy1wYXJlbnMtZm4pCiAg ICAgICAgKG1jLWFjdGl2YXRlLWNyb3NzaGFpcnMgKHNlbGVjdGVkLXdpbmRvdykpKQogICAgICAg IChzZXRxIHZyLXRpbWVyIChydW4td2l0aC1pZGxlLXRpbWVyIDAuNSBuaWwgIycrLXRpbWVyLWZu KSkpKSkKCihkZWZpbmUtbWlub3ItbW9kZSArLW1vZGUKIk1pbm9yIG1vZGUgZm9yIGRpc3BsYXlp bmcgYSBob3Jpem9udGFsIHJ1bGVyLiIKICA6aW5pdC12YWx1ZSBuaWwKICA6bGlnaHRlciAiICsi CiAgOmtleW1hcCBuaWwKICA6Z2xvYmFsIG5pbAogIDpncm91cCAnKy1tb2RlCiAgKGNvbmQKICAg ICgrLW1vZGUKICAgICAgKHNldHEgY3Jvc3NoYWlycyB0KQogICAgICA7OzsgUkVNSU5ERVI6ICBU aGUgdXNlciBjYW4gc3VwcHJlc3MgZWl0aGVyIG9yIGJvdGggb2YgdGhlIHJ1bGVyczoKICAgICAg OzsgKHNldHEgY3Jvc3NoYWlycy1ob3Jpem9udGFsLXJ1bGVyIG5pbCkKICAgICAgOzsgKHNldHEg Y3Jvc3NoYWlycy12ZXJ0aWNhbC1ydWxlciBuaWwpCiAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFy aWFibGUgJystLXNhdmVkLXN0YXRlKSBuaWwpCiAgICAgIDs7IFNhdmUgdGhlIGxvY2FsIHZhbHVl cyBvZiBzb21lIHZhcmlhYmxlcywgdG8gYmUgcmVzdG9yZWQgaWYgdmwtbW9kZSBpcyB0dXJuZWQg b2ZmLgogICAgICAoZG9saXN0ICh2YXIgJygKICAgICAgICAgICAgICAgICAgICAgIHRhYi13aWR0 aAogICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLWRpc3BsYXktdGFibGUKICAgICAgICAgICAg ICAgICAgICAgIGxpbmUtbW92ZS12aXN1YWwKICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRl LXBhcnRpYWwtd2lkdGgtd2luZG93cwogICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGUtbGlu ZXMKICAgICAgICAgICAgICAgICAgICAgIHdvcmQtd3JhcAogICAgICAgICAgICAgICAgICAgICAg ZnJpbmdlLWluZGljYXRvci1hbGlzdCkpCiAgICAgICAgKHdoZW4gKGxvY2FsLXZhcmlhYmxlLXAg dmFyKQogICAgICAgICAgKHB1c2ggKGNvbnMgdmFyIChzeW1ib2wtdmFsdWUgdmFyKSkgKy0tc2F2 ZWQtc3RhdGUpKSkKICAgICAgOzsgKHNldHEgZGlzcGxheS1saW5lLW51bWJlcnMgdCkKICAgICAg KHNldHEtbG9jYWwgYXV0by1oc2Nyb2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKICAgICAgKHNldHEt bG9jYWwgaHNjcm9sbC1zdGVwIDUpCiAgICAgIChzZXRxIHRhYi13aWR0aCAyKQogICAgICAoc2V0 cSBidWZmZXItZGlzcGxheS10YWJsZSArLWJ1ZmZlci1kaXNwbGF5LXRhYmxlKQogICAgICAoc2V0 IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtdmlzdWFsKSB0KQogICAgICAoc2V0ICht YWtlLWxvY2FsLXZhcmlhYmxlICd0cnVuY2F0ZS1wYXJ0aWFsLXdpZHRoLXdpbmRvd3MpIG5pbCkK ICAgICAgKHNldHEgdHJ1bmNhdGUtbGluZXMgbmlsKQogICAgICAoc2V0cSB3b3JkLXdyYXAgdCkK ICAgICAgKHNldHEgaW5kaWNhdGUtZW1wdHktbGluZXMgdCkKICAgICAgKHNldHEgaW5kaWNhdGUt YnVmZmVyLWJvdW5kYXJpZXMgJ2xlZnQpCiAgICAgIChzZXRxIGZyaW5nZS1pbmRpY2F0b3ItYWxp c3QgJygKICAgICAgICAodHJ1bmNhdGlvbiAuICgrLWZyaW5nZS1sZWZ0LWFycm93ICstZnJpbmdl LXJpZ2h0LWFycm93KSkKICAgICAgICAoY29udGludWF0aW9uIC4gKCstZnJpbmdlLWxlZnQtY3Vy bHktYXJyb3cgKy1iYWNrc2xhc2gpKQogICAgICAgIChvdmVybGF5LWFycm93IC4gKy1mcmluZ2Ut cmlnaHQtdHJpYW5nbGUpCiAgICAgICAgKHVwIC4gKy1mcmluZ2UtdXAtYXJyb3cpCiAgICAgICAg KGRvd24gLiArLWZyaW5nZS1kb3duLWFycm93KQogICAgICAgICh0b3AgLiArLWZyaW5nZS10b3At bGVmdC1hbmdsZSkKICAgICAgICAoYm90dG9tIC4gKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xl KQogICAgICAgICh0b3AtYm90dG9tIC4gKCstZnJpbmdlLWxlZnQtYnJhY2tldAogICAgICAgICAg ICAgICAgICAgICAgICstZnJpbmdlLXJpZ2h0LWJyYWNrZXQKICAgICAgICAgICAgICAgICAgICAg ICArLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUKICAgICAgICAgICAgICAgICAgICAgICArLWZyaW5n ZS10b3AtbGVmdC1hbmdsZSkpCiAgICAgICAgKGVtcHR5LWxpbmUgLiArLWZyaW5nZS1lbXB0eS1s aW5lKQogICAgICAgICh1bmtub3duIC4gKy1mcmluZ2UtcXVlc3Rpb24tbWFyaykpKQogICAgICA7 OzsgUkVNQVAgREVGQVVMVCBCRUhBVklPUiAoaWYgdGhlIHVzZXIgd2FudHMgc29tZXRoaW5nIGRp ZmZlcmVudCkuCiAgICAgIChzZXRxIGZyaW5nZS1jdXJzb3ItYWxpc3QgJygoYm94IC4gKy1mcmlu Z2UtbGVmdC10cmlhbmdsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChob2xs b3cgLiArLWhvbGxvdy1yZWN0YW5nbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoYmFyIC4gKy12ZXJ0aWNhbC1iYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaGJhciAuICstZnJpbmdlLWhvcml6b250YWwtYmFyKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGhvbGxvdy1zbWFsbCAuICstZnJpbmdlLWhvbGxvdy1zcXVhcmUpKSkKICAg ICAgKHNldHEgdGFiLXN0b3AtbGlzdCAobnVtYmVyLXNlcXVlbmNlIDAgMTAwMCAyKSkKICAgICAg KHNldHEgZmlsbC1jb2x1bW4gODApCiAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sg JystZHJhdy1ob3Jpem9udGFsLXJ1bGVyICdhcHBlbmQgJ2xvY2FsKQogICAgICAoYWRkLWhvb2sg J3dpbmRvdy1jb25maWd1cmF0aW9uLWNoYW5nZS1ob29rICcrLXJlZHJhdy1mb3J0aHdpdGggbmls ICdsb2NhbCkKICAgICAgKGFkZC1ob29rICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29rICd0dXJuLW9m Zi0rLW1vZGUgbmlsICdsb2NhbCkKICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAg J2FueSkKICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGArLW1vZGUnLiIpKSkKICAgICh0CiAg ICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdjcm9zc2hhaXJzKQogICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnZGlzcGxheS1saW5lLW51bWJlcnMpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxl ICdkaXNwbGF5LWxpbmUtbnVtYmVycy13aWR0aCkKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUg J21jLWdseXBoLWxpc3QpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdtYy1nbHlwaGxlc3Mt bGlzdCkKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RhYi13aWR0aCkKICAgICAgKGtpbGwt bG9jYWwtdmFyaWFibGUgJ2J1ZmZlci1kaXNwbGF5LXRhYmxlKQogICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnbGluZS1tb3ZlLXZpc3VhbCkKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3Ry dW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cykKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUg J3RydW5jYXRlLWxpbmVzKQogICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnd29yZC13cmFwKQog ICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaW5kaWNhdGUtZW1wdHktbGluZXMpCiAgICAgIChr aWxsLWxvY2FsLXZhcmlhYmxlICdpbmRpY2F0ZS1idWZmZXItYm91bmRhcmllcykKICAgICAgKGtp bGwtbG9jYWwtdmFyaWFibGUgJ2ZyaW5nZS1pbmRpY2F0b3ItYWxpc3QpCiAgICAgIChraWxsLWxv Y2FsLXZhcmlhYmxlICdmcmluZ2UtY3Vyc29yLWFsaXN0KQogICAgICAoZG9saXN0IChzYXZlZCAr LS1zYXZlZC1zdGF0ZSkKICAgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlIChjYXIgc2F2 ZWQpKSAoY2RyIHNhdmVkKSkpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICcrLS1zYXZlZC1z dGF0ZSkKICAgICAgKHNldHEtbG9jYWwgZmFjZS1yZW1hcHBpbmctYWxpc3QgbmlsKQogICAgICAo Ky1kZWxldGUtcGFyZW5zLW92ZXJsYXlzKQogICAgICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFu ZC1ob29rICcrLWRyYXctaG9yaXpvbnRhbC1ydWxlciAnbG9jYWwpCiAgICAgIChyZW1vdmUtaG9v ayAnd2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhvb2sgJystcmVkcmF3LWZvcnRod2l0aCAn bG9jYWwpCiAgICAgIChyZW1vdmUtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vayAndHVybi1v ZmYtKy1tb2RlICdsb2NhbCkKICAgICAgKHdoZW4gdnItdGltZXIKICAgICAgICAoc2V0cSB0aW1l ci1pZGxlLWxpc3QgKGRlbHEgdnItdGltZXIgdGltZXItaWRsZS1saXN0KSkKICAgICAgICAoc2V0 cSB2ci10aW1lciBuaWwpKQogICAgICAoc2V0cSBvdmVybGF5LWFycm93LXBvc2l0aW9uIG5pbCkK ICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKICAgICAgICAobWVzc2Fn ZSAiVHVybmVkIE9GRiBgKy1tb2RlJy4iKSkpKSkKCihkZWZ1biB0dXJuLW9mZi0rLW1vZGUgKCkK ICAoKy1tb2RlIC0xKSkKCjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKKGRlZnVuICstcGFyZW5z LWZuICgpCiJEb2Mtc3RyaW5nLiIKICAobGV0KiAoKG9wb2ludCAocG9pbnQpKQogICAgICAgICAo ZnJvbQogICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAoKG1lbXEgbWFqb3ItbW9kZSAnKGMt bW9kZSBvYmpjLW1vZGUpKQogICAgICAgICAgICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAg ICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgICAoYy1iZWdp bm5pbmctb2YtZGVmdW4pCiAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkKICAgICAgICAgICAg ICAgICAgKGVycm9yIChwb2ludC1taW4pKSkpCiAgICAgICAgICAgICAoKGVxIG1ham9yLW1vZGUg J2VsaXNwLW1vZGUpCiAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgICAg ICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgIChiZWdpbm5pbmct b2YtZGVmdW4pCiAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkKICAgICAgICAgICAgICAgICAg KHBvaW50LW1pbikpKQogICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgIChtYXggKHBvaW50 LW1pbikgKC0gb3BvaW50IDIwMDApKSkpKQogICAgICAgICAod2luIChzZWxlY3RlZC13aW5kb3cp KQogICAgICAgICAoaSAwKQogICAgICAgICAocHJlY2VkaW5nLWNoYXIgKHByZWNlZGluZy1jaGFy KSkKICAgICAgICAgKG9jaGFyIChjaGFyLWFmdGVyIG9wb2ludCkpCiAgICAgICAgIChwb3MxCiAg ICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICgoYW5kIG9jaGFyCiAgICAgICAgICAgICAgICAg ICAob3IgOzs7IChjaGFyLXRvLXN0cmluZyA0MCkgPT4gb3BlbmluZyBwYXJlbnRoZXNpcwogICAg ICAgICAgICAgICAgICAgICAgICg9IG9jaGFyIDQwKQogICAgICAgICAgICAgICAgICAgICAgIDs7 OyAoY2hhci10by1zdHJpbmcgOTEpID0+IG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQKICAgICAgICAg ICAgICAgICAgICAgICAoPSBvY2hhciA5MSkKICAgICAgICAgICAgICAgICAgICAgICA7OzsgKGNo YXItdG8tc3RyaW5nIDEyMykgPT4gb3BlbmluZyB3YXZ5IGJyYWNrZXQKICAgICAgICAgICAgICAg ICAgICAgICAoPSBvY2hhciAxMjMpKSkKICAgICAgICAgICAgICAgIChtaW4gKDErIG9wb2ludCkg KHBvaW50LW1heCkpKQogICAgICAgICAgICAgKChvciA7OzsgKGNoYXItdG8tc3RyaW5nIDQxKSA9 PiBjbG9zaW5nIHBhcmVudGhlc2lzCiAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1jaGFy IDQxKQogICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDkzKSA9PiBjbG9zaW5n IHNxdWFyZSBicmFja2V0CiAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1jaGFyIDkzKQog ICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDEyNSkgPT4gY2xvc2luZyB3YXZ5 IGJyYWNrZXQKICAgICAgICAgICAgICAgICAgKD0gcHJlY2VkaW5nLWNoYXIgMTI1KSkKICAgICAg ICAgICAgICAgIChtYXggKHBvaW50LW1pbikgKDEtIG9wb2ludCkpKQogICAgICAgICAgICAgKHQK ICAgICAgICAgICAgICAgIG9wb2ludCkpKQogICAgICAgICBwb3MyCiAgICAgICAgIHNlbGVjdGVk LWZhY2UpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAg ICAgICh3aGlsZSAoc2V0cSBwb3MxIChudGggMSAocGFyc2UtcGFydGlhbC1zZXhwIGZyb20gcG9z MSkpKQogICAgICAgICAgKHNldHEgcG9zMiAoc2Nhbi1zZXhwcyBwb3MxIDEpKQogICAgICAgICAg KGlmICg9IGkgMTApCiAgICAgICAgICAgIChzZXRxIGkgMSkKICAgICAgICAgICAgKGluY2YgaSkp CiAgICAgICAgICAoc2V0cSBzZWxlY3RlZC1mYWNlIChjb25kCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCg9IGkgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcr LXBhcmVucy1vbmUtZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSAy KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXR3by1mYWNlKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDMpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtdGhyZWUtZmFjZSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKD0gaSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JystcGFyZW5zLWZvdXItZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0g aSA1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLWZpdmUtZmFj ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA2KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXNpeC1mYWNlKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgoPSBpIDcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnKy1wYXJlbnMtc2V2ZW4tZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KD0gaSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLWVpZ2h0 LWZhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgOSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1uaW5lLWZhY2UpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCg9IGkgMTApCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnKy1wYXJlbnMtdGVuLWZhY2UpKSkKICAgICAgICAgIChsZXQgKChvdiAobWFrZS1v dmVybGF5IHBvczEgKDErIHBvczEpKSkpCiAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdiAnd2lu ZG93IHdpbikKICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92ICdmYWNlIHNlbGVjdGVkLWZhY2Up KQogICAgICAgICAgKHdoZW4gcG9zMgogICAgICAgICAgICAobGV0ICgob3YgKG1ha2Utb3Zlcmxh eSAoMS0gcG9zMikgcG9zMikpKQogICAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdiAnd2luZG93 IHdpbikKICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2ZhY2Ugc2VsZWN0ZWQtZmFjZSkp KSkKICAgICAgICAoZXJyb3IgbmlsKSkpCiAgICAoc2V0cSArLXBhcmVucy1vdmVybGF5cy1leGlz dC1wIHQpKSkKCihkZWZ1biArLXJlbW92ZS1vdmVybGF5cyAoYmVnIGVuZCBuYW1lIHZhbCkKIlJl bW92ZSB0aGUgb3ZlcmxheXMgdGhhdCBhcmUgYGVxdWFsLWluY2x1ZGluZy1wcm9wZXJ0aWVzYC4K SW5jbHVkZXMgYSB1bmlxdWUgc2l0dWF0aW9uIHdoZW4gYW4gb3ZlcmxheSB3aXRoIGFuIGAnYWZ0 ZXItc3RyaW5nYCBwcm9wZXJ0eQppcyBhdCB0aGUgdmVyeSBlbmQgb2YgYSBuYXJyb3dlZC1idWZm ZXIuIgogIChsZXQqICgKICAgICAgKHBvaW50LW1heCAocG9pbnQtbWF4KSkKICAgICAgKHBvaW50 LW1pbiAocG9pbnQtbWluKSkKICAgICAgKG5hcnJvd2VkLXAgKGJ1ZmZlci1uYXJyb3dlZC1wKSkK ICAgICAgKGJlZyAoaWYgYmVnIGJlZyBwb2ludC1taW4pKQogICAgICAoZW5kCiAgICAgICAgKGNv bmQKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1wKQogICAgICAg ICAgICAgIGVuZCkKICAgICAgICAgICAgZW5kKQogICAgICAgICAgKChhbmQKICAgICAgICAgICAg ICAobm90IG5hcnJvd2VkLXApCiAgICAgICAgICAgICAgKG51bGwgZW5kKSkKICAgICAgICAgICAg cG9pbnQtbWF4KQogICAgICAgICAgKChhbmQKICAgICAgICAgICAgICBuYXJyb3dlZC1wCiAgICAg ICAgICAgICAgZW5kCiAgICAgICAgICAgICAgKDwgZW5kIHBvaW50LW1heCkpCiAgICAgICAgICAg IGVuZCkKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgbmFycm93ZWQtcAogICAgICAgICAg ICAgIGVuZAogICAgICAgICAgICAgICg9IGVuZCBwb2ludC1tYXgpKQogICAgICAgICAgICAoMSsg ZW5kKSkKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgbmFycm93ZWQtcAogICAgICAgICAg ICAgIChudWxsIGVuZCkpCiAgICAgICAgICAgICgxKyBwb2ludC1tYXgpKSApKQogICAgICAob3Zl cmxheXMKICAgICAgICAocHJvZ24KICAgICAgICAgIChvdmVybGF5LXJlY2VudGVyIGVuZCkKICAg ICAgICAgIChvdmVybGF5cy1pbiBiZWcgZW5kKSkpICkKICAgICh3aGVuIChhbmQgYmVnIGVuZCBu YW1lIHZhbCkKICAgICAgKGRvbGlzdCAobyBvdmVybGF5cykKICAgICAgICAoY29uZAogICAgICAg ICAgKChhbmQKICAgICAgICAgICAgICAgIChlcSBuYW1lICdmYWNlKQogICAgICAgICAgICAgICAg KGVxIChvdmVybGF5LWdldCBvIG5hbWUpIHZhbCkpCiAgICAgICAgICAgIDs7IEVpdGhlciBwdXNo IHRoaXMgb3ZlcmxheSBvdXRzaWRlIGJlZy4uLmVuZAogICAgICAgICAgICA7OyBvciBzcGxpdCBp dCB0byBleGNsdWRlIGJlZy4uLmVuZAogICAgICAgICAgICA7OyBvciBkZWxldGUgaXQgZW50aXJl bHkgKGlmIGl0IGlzIGNvbnRhaW5lZCBpbiBiZWcuLi5lbmQpLgogICAgICAgICAgICAoaWYgKDwg KG92ZXJsYXktc3RhcnQgbykgYmVnKQogICAgICAgICAgICAgICAgKGlmICg+IChvdmVybGF5LWVu ZCBvKSBlbmQpCiAgICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAobW92ZS1vdmVy bGF5IChjb3B5LW92ZXJsYXkgbykKICAgICAgICAgICAgICAgICAgKG92ZXJsYXktc3RhcnQgbykg YmVnKQogICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykp KQogICAgICAgICAgICAgICAgICAobW92ZS1vdmVybGF5IG8gKG92ZXJsYXktc3RhcnQgbykgYmVn KSkKICAgICAgICAgICAgICAoaWYgKD4gKG92ZXJsYXktZW5kIG8pIGVuZCkKICAgICAgICAgICAg ICAgICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykpCiAgICAgICAgICAgICAg ICAoZGVsZXRlLW92ZXJsYXkgbykpKSkKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgICAo bm90IChlcSBuYW1lICdmYWNlKSkKICAgICAgICAgICAgICAgIChlcXVhbC1pbmNsdWRpbmctcHJv cGVydGllcyAob3ZlcmxheS1nZXQgbyBuYW1lKSB2YWwpKQogICAgICAgICAgICAoZGVsZXRlLW92 ZXJsYXkgbykpKSkpKSkKCihkZWZ1biArLWRlbGV0ZS1wYXJlbnMtb3ZlcmxheXMgKCkKICAod2hl biArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wCiAgICAoZG9saXN0IChmYWNlICcoCiAgICAgICAg Ky1wYXJlbnMtb25lLWZhY2UKICAgICAgICArLXBhcmVucy10d28tZmFjZQogICAgICAgICstcGFy ZW5zLXRocmVlLWZhY2UKICAgICAgICArLXBhcmVucy1mb3VyLWZhY2UKICAgICAgICArLXBhcmVu cy1maXZlLWZhY2UKICAgICAgICArLXBhcmVucy1zaXgtZmFjZQogICAgICAgICstcGFyZW5zLXNl dmVuLWZhY2UKICAgICAgICArLXBhcmVucy1laWdodC1mYWNlCiAgICAgICAgKy1wYXJlbnMtbmlu ZS1mYWNlCiAgICAgICAgKy1wYXJlbnMtdGVuLWZhY2UpKQogICAgICAoKy1yZW1vdmUtb3Zlcmxh eXMgbmlsIG5pbCAnZmFjZSBmYWNlKSkKICAgIChzZXRxICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0 LXAgbmlsKSkpCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOzsgZmFjZXMKCihkZWZncm91cCAr LW1vZGUgbmlsCiAgIkZhY2VzIGZvciB0aGUgdmVydGljYWwgcnVsZXIuIgogIDpncm91cCAnY29u dmVuaWVuY2UpCgooZGVmZmFjZSArLWZvcm0tZmVlZC1mYWNlCiAgKGNvbmQKICAgICgoZXEgc3lz dGVtLXR5cGUgJ2RhcndpbikKICAgICAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpKQog ICAgKChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkKICAgICAgJygodCAoOmZvcmVncm91bmQg Im1hZ2VudGEiKSkpKSkKICAiRmFjZSBmb3IgYCstZm9ybS1mZWVkLWZhY2UnLiIKICA6Z3JvdXAg JystbW9kZSkKCihkZWZmYWNlICstbmV3bGluZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIiM1 NTU1NTUiKSkpCiAgIkZhY2UgZm9yIGArLW5ld2xpbmUtZmFjZScuIgogIDpncm91cCAnKy1tb2Rl KQoKKGRlZmZhY2UgKy1zcGFjZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIkRhcmtSZWQiKSkp CiAgIkZhY2UgZm9yIGArLXNwYWNlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNl ICstdGFiLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkKICAiRmFjZSBmb3IgYCst dGFiLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstdGFiLXNwYWNlci1mYWNl CiAgJygodCAoOmJhY2tncm91bmQgImdyZXkyNSIpKSkKICAiRmFjZSBmb3IgYCstdGFiLXNwYWNl ci1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXBhcmVucy1vbmUtZmFjZQog ICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdlbnRhIikpKQogICJGYWNlIGZvciBgKy1wYXJlbnMtb25l LWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLXR3by1mYWNlCiAg JygodCAoOmZvcmVncm91bmQgInJlZCIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLXR3by1mYWNl Jy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXBhcmVucy10aHJlZS1mYWNlCiAgJygo dCAoOmZvcmVncm91bmQgInllbGxvdyIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLXRocmVlLWZh Y2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLWZvdXItZmFjZQogICco KHQgKDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLWZvdXItZmFj ZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2UgKy1wYXJlbnMtZml2ZS1mYWNlCiAgJygo dCAoOmZvcmVncm91bmQgImN5YW4iKSkpCiAgIkZhY2UgZm9yIGArLXBhcmVucy1maXZlLWZhY2Un LiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLXNpeC1mYWNlCiAgJygodCAo OmZvcmVncm91bmQgIm9yYW5nZSIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLXNpeC1mYWNlJy4i CiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXBhcmVucy1zZXZlbi1mYWNlCiAgJygodCAo OmZvcmVncm91bmQgInB1cnBsZSIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLXNldmVuLWZhY2Un LiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLWVpZ2h0LWZhY2UKICAnKCh0 ICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLWVpZ2h0LWZhY2Un LiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLW5pbmUtZmFjZQogICcoKHQg KDpmb3JlZ3JvdW5kICJicm93biIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLW5pbmUtZmFjZScu IgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2UgKy1wYXJlbnMtdGVuLWZhY2UKICAnKCh0ICg6 Zm9yZWdyb3VuZCAid2hpdGUiKSkpCiAgIkZhY2UgZm9yIGArLXBhcmVucy10ZW4tZmFjZScuIgog IDpncm91cCAnKy1tb2RlKQoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cjs7ICB2YXJpYWJsZXMK CihkZWZ2YXIgKy0tc2F2ZWQtc3RhdGUgbmlsKQoKKGRlZnZhciArLWJ1ZmZlci1kaXNwbGF5LXRh YmxlCiAgKGxldCogKAogICAgICAoZGlzcGxheS10YWJsZSAobWFrZS1kaXNwbGF5LXRhYmxlKSkK ICAgICAgKGZmLWNoYXIKICAgICAgICAoY29uZAogICAgICAgICAgKChlcSBzeXN0ZW0tdHlwZSAn ZGFyd2luKQogICAgICAgICAgICA/XFUwMDAxRDRENSkKICAgICAgICAgICgoZXEgc3lzdGVtLXR5 cGUgJ3dpbmRvd3MtbnQpCiAgICAgICAgICAgID9cdTAwNDYpKSkKICAgICAgKGdseXBoLWZvcm0t ZmVlZCAobWFrZS1nbHlwaC1jb2RlIGZmLWNoYXIgJystZm9ybS1mZWVkLWZhY2UpKQogICAgICAo Z2x5cGgtcGlsY3JvdyAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjYgJystbmV3bGluZS1mYWNlKSkK ICAgICAgKGdseXBoLXNwYWNlIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCNyAnKy1zcGFjZS1mYWNl KSkKICAgICAgKGdseXBoLXRhYiAobWFrZS1nbHlwaC1jb2RlID9cdTAwQkIgJystdGFiLWZhY2Up KQogICAgICAoZ2x5cGgtdGFiLXNwYWNlciAobWFrZS1nbHlwaC1jb2RlID9cdCAnKy10YWItc3Bh Y2VyLWZhY2UpKSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1xuIGBbLGdseXBoLXBpbGNyb3cg P1xuXSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1xmIGBbLGdseXBoLWZvcm0tZmVlZF0pCiAg ICA7OzsgbWluaW11bSB0YWItd2lkdGggaXMgYDJgCiAgICA7OyAoYXNldCBkaXNwbGF5LXRhYmxl ID9cdCBgWyxnbHlwaC10YWIgP1x0XSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGds eXBoLXRhYiAsZ2x5cGgtdGFiLXNwYWNlcl0pCiAgICA7OzsgdGFiLXdpZHRoIGFsd2F5cyBlcXVh bHMgYDFgCiAgICA7OyAoYXNldCBkaXNwbGF5LXRhYmxlID9cdCBgWyxnbHlwaC10YWJdKQogICAg KGFzZXQgZGlzcGxheS10YWJsZSA/XHMgYFssZ2x5cGgtc3BhY2VdKQogICAgZGlzcGxheS10YWJs ZSkKICAiVGhlIGBidWZmZXItZGlzcGxheS10YWJsZScgdGhhdCBpcyB1c2VkIHdoZW4gYCstbW9k ZScgaXMgYWN0aXZlLiIpCgooZGVmdmFyIHZyLXRpbWVyIG5pbAoiVGltZXIgdXNlZCB0byBoaWdo bGlnaHQgY3VycmVudCBjb2x1bW4gd2hlbmV2ZXIgRW1hY3MgaXMgaWRsZS4iKQoKKGRlZnZhciAr LXBhcmVucy1vdmVybGF5cy1leGlzdC1wIG5pbAoiU2ltcGxlIHRlc3QgdG8gc2VlIHdoZXRoZXIg dGhlIHBhcmVucyBvdmVybGF5cyBoYXZlIGJlZW4gcGxhY2VkLgpUaGlzIGNvdWxkIGJlIGEgZGlm ZmVyZW50IGtpbmQgb2YgdGVzdCAtLSBlLmcuLCBzY2FubmluZyBmb3IgdGhlCnByZXNlbmNlIG9m IHNwZWNpZmljIG92ZXJsYXlzLCBidXQgcGVyaGFwcyB0aGF0IGlzIG92ZXJraWxsLiIpCihtYWtl LXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3QtcCkKCjs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Owo7OyBmcmluZ2UgYml0bWFwcywgZnVuY3Rpb25zIGFuZCBm YWNlcy4KCihkZWZmYWNlICstdmVydGljYWwtYmFyLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAi Y3lhbiIpKSkKICAiRmFjZSBmb3IgYCstdmVydGljYWwtYmFyLWZhY2UnLiIKICA6Z3JvdXAgJyst bW9kZSkKCihkZWZmYWNlICstZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFjZQogICcoKHQgKDpmb3Jl Z3JvdW5kICJ5ZWxsb3ciKSkpCiAgIkZhY2UgZm9yIGArLWV2ZW4tbnVtYmVyZWQtY29sdW1uLWZh Y2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstb2RkLW51bWJlcmVkLWNvbHVtbi1m YWNlCiAgJygodCAoOmZvcmVncm91bmQgInJlZCIpKSkKICAiRmFjZSBmb3IgYCstb2RkLW51bWJl cmVkLWNvbHVtbi1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLWJleW9uZC1m aWxsLWNvbHVtbi1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQogICJGYWNlIGZv ciBgKy1iZXlvbmQtZmlsbC1jb2x1bW4tZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKCihkZWZm YWNlICstb3ZlcmxheS1hcnJvdy1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQog ICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93LWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihk ZWZmYWNlICstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC1vbmUtZmFjZQogICcoKHQgKDpmb3JlZ3Jv dW5kICJibHVlIikpKQogICJGYWNlIGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LW9uZS1m YWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLWxlZnQtZnJpbmdlLWN1cnNvci1h bHQtdHdvLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQogICJGYWNlIGZvciBgKy1s ZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LXR3by1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgo7Ozsg YG92ZXJsYXktYXJyb3ctYml0bWFwJyBpcyBhIHNwZWNpYWwgU1lNQk9MIGRlZmluZWQgaW4geGRp c3AuYy4KCjs7ICAoZGVmdmFyICstbGVmdC1mcmluZ2Utb3ZlcmxheS1wb3NpdGlvbiBuaWwKOzsg ICJUbyBiZSB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBleGFtcGxlOgo7OyAgICAoaWYgKG5vdCAo YW5kIChlb2JwKSAoYm9scCkpKQo7OyAgICAgIChzZXRxICstbGVmdC1mcmluZ2Utb3ZlcmxheS1w b3NpdGlvbiAoY29weS1tYXJrZXIgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkpCjs7ICAgICAg KHNldHEgKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0aW9uICBuaWwpKQoKOzsgIChtYWtlLXZh cmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0aW9uKQoKOzsg IChhZGQtdG8tbGlzdCAnb3ZlcmxheS1hcnJvdy12YXJpYWJsZS1saXN0ICcrLWxlZnQtZnJpbmdl LW92ZXJsYXktcG9zaXRpb24pCgo7OyAgKHB1dCAnKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0 aW9uICdvdmVybGF5LWFycm93LWJpdG1hcCAnKy1yaWdodC1hbmdsZSkKCihwdXQgJ292ZXJsYXkt YXJyb3ctcG9zaXRpb24gJ292ZXJsYXktYXJyb3ctYml0bWFwICcrLXNtaWxleS1mYWNlKQoKKHNl dC1mcmluZ2UtYml0bWFwLWZhY2UgJystc21pbGV5LWZhY2UgJystb3ZlcmxheS1hcnJvdy1mYWNl KQoKOzsgIChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1yaWdodC1hbmdsZSAoKy1mcmluZ2UtaGVs cGVyLWRlY2ltYWwKOzsgICAgIi54eC4uLi4uIgo7OyAgICAiLi54eC4uLi4iCjs7ICAgICIuLi54 eC4uLiIKOzsgICAgIi4uLi54eC4uIgo7OyAgICAiLi4uLi54eC4iCjs7ICAgICIuLi4ueHguLiIK OzsgICAgIi4uLnh4Li4uIgo7OyAgICAiLi54eC4uLi4iCjs7ICAgICIueHguLi4uLiIpIDkgOCAn Y2VudGVyKQoKOzsgIChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy12ZXJ0aWNhbC1iYXItcmlnaHQt YW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgIngu Li4uLi4uIgo7OyAgICAieC4uLi4uLi4iCjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4u Igo7OyAgICAieC4uLi4uLi4iCjs7ICAgICJ4Li54eC4uLiIKOzsgICAgInguLi54eC4uIgo7OyAg ICAieC4uLi54eC4iCjs7ICAgICJ4Lnh4eHh4eCIKOzsgICAgIngueHh4eHh4Igo7OyAgICAieC4u Li54eC4iCjs7ICAgICJ4Li4ueHguLiIKOzsgICAgInguLnh4Li4uIgo7OyAgICAieC4uLi4uLi4i Cjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4iCjs7ICAg ICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIikgbmlsIG5pbCAnY2VudGVyKQoKOzsgICgrLWZy aW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKOzsgICAgInh4eHh4eHh4Igo7OyAgICAieC4uLi4uLngi Cjs7ICAgICJ4Li4uLi4ueCIKOzsgICAgInguLi4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAg ICJ4Li4uLi4ueCIKOzsgICAgInguLnh4Li54Igo7OyAgICAieC4uLnh4LngiCjs7ICAgICJ4Li4u Lnh4eCIKOzsgICAgIngueHh4eHh4Igo7OyAgICAieC54eHh4eHgiCjs7ICAgICJ4Li4uLnh4eCIK OzsgICAgInguLi54eC54Igo7OyAgICAieC4ueHguLngiCjs7ICAgICJ4Li4uLi4ueCIKOzsgICAg InguLi4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4Li4uLi4ueCIKOzsgICAgInguLi4u Li54Igo7OyAgICAieHh4eHh4eHgiKQoKOzsgIChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1ob2xs b3ctcmVjdGFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAo7OyAgICAieHh4eHh4eHgiCjs7 ICAgICJ4Li4uLi4ueCIKOzsgICAgInguLi4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4 Li4uLi4ueCIKOzsgICAgInguLi4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4Li4uLi4u eCIKOzsgICAgInguLi4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4Li4uLi4ueCIKOzsg ICAgInguLi4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4Li4uLi4ueCIKOzsgICAgIngu Li4uLi54Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4Li4uLi4ueCIKOzsgICAgInguLi4uLi54 Igo7OyAgICAieC4uLi4uLngiCjs7ICAgICJ4eHh4eHh4eCIpIG5pbCBuaWwgJ2NlbnRlcikKCihk ZWZmYWNlICstaG9sbG93LXJlY3RhbmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0 cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWhvbGxvdy1yZWN0YW5nbGUtZmFjZScuIgogIDpncm91 cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystaG9sbG93LXJlY3RhbmdsZSAn Ky1ob2xsb3ctcmVjdGFuZ2xlLWZhY2UpCgo7OyAgKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLXZl cnRpY2FsLWJhciAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKOzsgICAgInguLi4uLi4uIgo7OyAg ICAieC4uLi4uLi4iCjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4u Li4uLi4iCjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4i Cjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4iCjs7ICAg ICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4iCjs7ICAgICJ4Li4u Li4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4iCjs7ICAgICJ4Li4uLi4uLiIK OzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4iKSBuaWwgbmlsICdjZW50ZXIpCgoKOzsg IChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1iYWNrc2xhc2ggKCstZnJpbmdlLWhlbHBlci1kZWNp bWFsCjs7ICAgICJ4eC4uLi4uLiIKOzsgICAgInh4Li4uLi4uIgo7OyAgICAiIHh4Li4uLi4iCjs7 ICAgICIueHguLi4uLiIKOzsgICAgIi4ueHguLi4uIgo7OyAgICAiLi54eC4uLi4iCjs7ICAgICIu Li54eC4uLiIKOzsgICAgIi4uLnh4Li4uIgo7OyAgICAiLi4uLnh4Li4iCjs7ICAgICIuLi4ueHgu LiIKOzsgICAgIi4uLi4ueHguIgo7OyAgICAiLi4uLi54eC4iCjs7ICAgICIuLi4uLi54eCIKOzsg ICAgIi4uLi4uLnh4IikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1iYWNrc2xhc2gtZmFj ZQogICcoKHQgKDpmb3JlZ3JvdW5kICJncmV5MjUiKSkpCiAgIkZhY2UgZm9yIGArLWJhY2tzbGFz aC1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1i YWNrc2xhc2ggJystYmFja3NsYXNoLWZhY2UpCgoKOzsgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRl Y2ltYWwKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4uLi4iCjs7ICAgICJ4Li4uLi4uLiIK OzsgICAgInh4Li4uLi4uIgo7OyAgICAieHguLi4uLi4iCjs7ICAgICJ4eHguLi4uLiIKOzsgICAg Inh4eC4uLi4uIgo7OyAgICAieC54eC4uLi4iCjs7ICAgICJ4Lnh4Li4uLiIKOzsgICAgInguLnh4 Li4uIgo7OyAgICAieC4ueHguLi4iCjs7ICAgICJ4Li4ueHguLiIKOzsgICAgInguLi54eC4uIgo7 OyAgICAieC4uLi54eC4iCjs7ICAgICJ4Li4uLnh4LiIKOzsgICAgInguLi4uLnh4Igo7OyAgICAi eC4uLi4ueHgiCjs7ICAgICJ4Li4uLi4uLiIKOzsgICAgInguLi4uLi4uIgo7OyAgICAieC4uLi4u Li4iKQoKOzsgIChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1waWxjcm93ICgrLWZyaW5nZS1oZWxw ZXItZGVjaW1hbAo7OyAgICAiLnh4eHh4eC4iCjs7ICAgICJ4eHh4LnguLiIKOzsgICAgInh4eHgu eC4uIgo7OyAgICAieHh4eC54Li4iCjs7ICAgICIueHh4LnguLiIKOzsgICAgIi4uLngueC4uIgo7 OyAgICAiLi4ueC54Li4iCjs7ICAgICIuLi54LnguLiIKOzsgICAgIi4uLngueC4uIgo7OyAgICAi Li4ueC54Li4iCjs7ICAgICIuLi54LnguLiIpIG5pbCBuaWwgJ2NlbnRlcikKCjs7ICAoZGVmaW5l LWZyaW5nZS1iaXRtYXAgJystcmlnaHQtZG91YmxlLWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVj aW1hbAo7OyAgICAieHgueHguLi4iCjs7ICAgICIueHgueHguLiIKOzsgICAgIi4ueHgueHguIgo7 OyAgICAiLi4ueHgueHgiCjs7ICAgICIuLnh4Lnh4LiIKOzsgICAgIi54eC54eC4uIgo7OyAgICAi eHgueHguLi4iKSBuaWwgbmlsICdjZW50ZXIpCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCjs7 IEFVVEhPUjogIE5pa29sYWogU2NodW1hY2hlciAtLSBodHRwczovL2dpdGh1Yi5jb20vbnNjaHVt L2ZyaW5nZS1oZWxwZXIuZWwKKGRlZnVuICstZnJpbmdlLWhlbHBlci1kZWNpbWFsICgmcmVzdCBz dHJpbmdzKQoiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0b3IgdXNhYmxlIGZvciBgZGVmaW5l LWZyaW5nZS1iaXRtYXAnLgpFYWNoIHN0cmluZyBpbiBTVFJJTkdTIHJlcHJlc2VudHMgYSBsaW5l IG9mIHRoZSBmcmluZ2UgYml0bWFwLgpQZXJpb2RzICguKSBhcmUgYmFja2dyb3VuZC1jb2xvcmVk IHBpeGVsOyBYcyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVkLiBUaGUKZnJpbmdlIGJpdG1hcCBhbHdh eXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYKd2lkdGgs IG9ubHkgdGhlIGxlZnQgNCBwaXhlbHMgb2YgYW4gOCBwaXhlbCBiaXRtYXAgd2lsbCBiZSBzaG93 bi4KRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIGEgZGlhZ29uYWwgbGlu ZS4KXCgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbApcIlhYLi4uLi4uXCIKXCIuLlhYLi4uLlwiClwi Li4uLlhYLi5cIgpcIi4uLi4uLlhYXCJcKSIKICAodW5sZXNzIChjZHIgc3RyaW5ncykKICAgIChz ZXRxIHN0cmluZ3MgKHNwbGl0LXN0cmluZyAoY2FyIHN0cmluZ3MpICJcbiIpKSkKICAoYXBwbHkg J3ZlY3RvcgogICAgKG1hcGNhcgogICAgICAobGFtYmRhIChzdHIpCiAgICAgICAgKGxldCAoKG51 bSAwKSkKICAgICAgICAgIChkb2xpc3QgKGMgKHN0cmluZy10by1saXN0IHN0cikpCiAgICAgICAg ICAgIChzZXRxIG51bSAoKyAoKiBudW0gMikgKGlmIChlcSBjID8uKSAwIDEpKSkpCiAgICAgICAg ICBudW0pKQogICAgICBzdHJpbmdzKSkpCgooZGVmdW4gKy1mcmluZ2UtaGVscGVyLWhleGFkZWNp bWFsICgmcmVzdCBzdHJpbmdzKQoiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0b3IgdXNhYmxl IGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAnLgpFYWNoIHN0cmluZyBpbiBTVFJJTkdTIHJlcHJl c2VudHMgYSBsaW5lIG9mIHRoZSBmcmluZ2UgYml0bWFwLgpQZXJpb2RzICguKSBhcmUgYmFja2dy b3VuZC1jb2xvcmVkIHBpeGVsOyBYcyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVkLiBUaGUKZnJpbmdl IGJpdG1hcCBhbHdheXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFz IGhhbGYKd2lkdGgsIG9ubHkgdGhlIGxlZnQgNCBwaXhlbHMgb2YgYW4gOCBwaXhlbCBiaXRtYXAg d2lsbCBiZSBzaG93bi4KRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIGEg ZGlhZ29uYWwgbGluZS4KXCgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKXCJYWC4uLi4uLlwi ClwiLi5YWC4uLi5cIgpcIi4uLi5YWC4uXCIKXCIuLi4uLi5YWFwiXCkiCiAgKHVubGVzcyAoY2Ry IHN0cmluZ3MpCiAgICAoc2V0cSBzdHJpbmdzIChzcGxpdC1zdHJpbmcgKGNhciBzdHJpbmdzKSAi XG4iKSkpCiAgKGFwcGx5ICd2ZWN0b3IKICAgIChtYXBjYXIKICAgICAgKGxhbWJkYSAoc3RyKQog ICAgICAgIChsZXQgKChudW0gMCkpCiAgICAgICAgICAoZG9saXN0IChjIChzdHJpbmctdG8tbGlz dCBzdHIpKQogICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEgYyA/Likg MCAxKSkpKQogICAgICAgICAgKGZvcm1hdCAiJSMteCIgbnVtKSkpCiAgICAgIHN0cmluZ3MpKSkK Cjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5n ZS1xdWVzdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi54eHh4Li4iCiIueHh4 eHh4LiIKInh4Li4uLnh4IgoieHguLi4ueHgiCiIuLi4ueHguLiIKIi4uLnh4Li4uIgoiLi4ueHgu Li4iCiIuLi4uLi4uLiIKIi4uLnh4Li4uIgoiLi4ueHguLi4iKSBuaWwgbmlsICdjZW50ZXIpCgoo ZGVmZmFjZSArLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAi Z3JlZW4iKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UnLiIKICA6 Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1xdWVzdGlv bi1tYXJrICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0 bWFwICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoi Li4uWFguLi4iCiIuLi5YWC4uLiIKIi4uLlhYLi4uIgoiLi4uWFguLi4iCiIuLi5YWC4uLiIKIi4u LlhYLi4uIgoiLi4uWFguLi4iCiIuLi4uLi4uLiIKIi4uLlhYLi4uIgoiLi4uWFguLi4iKSBuaWwg bmlsICdjZW50ZXIpCgooZGVmZmFjZSArLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrLWZhY2UKICAn KCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWV4Y2xhbWF0 aW9uLW1hcmstZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZh Y2UgJystZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmsgJystZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmst ZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtYXJyb3cgKCstZnJp bmdlLWhlbHBlci1kZWNpbWFsCiIuLi54eC4uLiIKIi4ueHguLi4uIgoiLnh4Li4uLi4iCiJ4eHh4 eHguLiIKInh4eHh4eC4uIgoiLnh4Li4uLi4iCiIuLnh4Li4uLiIKIi4uLnh4Li4uIikgbmlsIG5p bCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1hcnJvdy1mYWNlCiAgJygodCAoOmZv cmVncm91bmQgInB1cnBsZSIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtYXJyb3ctZmFj ZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdl LWxlZnQtYXJyb3cgJystZnJpbmdlLWxlZnQtYXJyb3ctZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1i aXRtYXAgJystZnJpbmdlLXJpZ2h0LWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4u eHguLi4iCiIuLi4ueHguLiIKIi4uLi4ueHguIgoiLi54eHh4eHgiCiIuLnh4eHh4eCIKIi4uLi4u eHguIgoiLi4uLnh4Li4iCiIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICst ZnJpbmdlLXJpZ2h0LWFycm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiT3JhbmdlUmVkIikp KQogICJGYWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtYXJyb3ctZmFjZScuIgogIDpncm91cCAnKy1t b2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXJpZ2h0LWFycm93ICcrLWZy aW5nZS1yaWdodC1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2Ut dXAtYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIuLi54eC4uLiIKIi4ueHh4eC4uIgoi Lnh4eHh4eC4iCiJ4eHh4eHh4eCIKIi4uLnh4Li4uIgoiLi4ueHguLi4iCiIuLi54eC4uLiIKIi4u Lnh4Li4uIikgbmlsIG5pbCAndG9wKQoKKGRlZmZhY2UgKy1mcmluZ2UtdXAtYXJyb3ctZmFjZQog ICcoKHQgKDpmb3JlZ3JvdW5kICJSb3lhbEJsdWUiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS11 cC1hcnJvdy1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFj ZSAnKy1mcmluZ2UtdXAtYXJyb3cgJystZnJpbmdlLXVwLWFycm93LWZhY2UpCgoKKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS1kb3duLWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1h bAoiLi4ueHguLi4iCiIuLi54eC4uLiIKIi4uLnh4Li4uIgoiLi4ueHguLi4iCiJ4eHh4eHh4eCIK Ii54eHh4eHguIgoiLi54eHh4Li4iCiIuLi54eC4uLiIpIG5pbCBuaWwgJ2JvdHRvbSkKCihkZWZm YWNlICstZnJpbmdlLWRvd24tYXJyb3ctZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikp KQogICJGYWNlIGZvciBgKy1mcmluZ2UtZG93bi1hcnJvdy1mYWNlJy4iCiAgOmdyb3VwICcrLW1v ZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZG93bi1hcnJvdyAnKy1mcmlu Z2UtZG93bi1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtbGVm dC1jdXJseS1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4uLnh4eHguIgoiLi54eHh4 eC4iCiIueHguLi4uLiIKIi54eHguLnguIgoiLnh4eHh4eC4iCiIuLnh4eHh4LiIKIi4uLnh4eHgu IgoiLi54eHh4eC4iKSBuaWwgbmlsICdjZW50ZXIpCgooZGVmZmFjZSArLWZyaW5nZS1sZWZ0LWN1 cmx5LWFycm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JleTI1IikpKQogICJGYWNlIGZv ciBgKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgoo c2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdyAnKy1mcmlu Z2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmlu Z2UtcmlnaHQtY3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIueHh4eC4uLiIK Ii54eHh4eC4uIgoiLi4uLi54eC4iCiIueC4ueHh4LiIKIi54eHh4eHguIgoiLnh4eHh4Li4iCiIu eHh4eC4uLiIKIi54eHh4eC4uIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2Ut cmlnaHQtY3VybHktYXJyb3ctZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICIjM2MzYzNjIikpKQog ICJGYWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3ctZmFjZScuIgogIDpncm91cCAn Ky1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXJpZ2h0LWN1cmx5LWFy cm93ICcrLWZyaW5nZS1yaWdodC1jdXJseS1hcnJvdy1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJp dG1hcCAnKy1mcmluZ2UtbGVmdC10cmlhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4u Li4uLnh4IgoiLi4uLnh4eHgiCiIuLi54eHh4eCIKIi4ueHh4eHh4IgoiLi54eHh4eHgiCiIuLi54 eHh4eCIKIi4uLi54eHh4IgoiLi4uLi4ueHgiKSBuaWwgbmlsICdjZW50ZXIpCgooZGVmZmFjZSAr LWZyaW5nZS1sZWZ0LXRyaWFuZ2xlLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQog ICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC10cmlhbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1v ZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC10cmlhbmdsZSAnKy1m cmluZ2UtbGVmdC10cmlhbmdsZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmlu Z2UtcmlnaHQtdHJpYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eC4uLi4uLiIKInh4 eHguLi4uIgoieHh4eHguLi4iCiJ4eHh4eHguLiIKInh4eHh4eC4uIgoieHh4eHguLi4iCiJ4eHh4 Li4uLiIKInh4Li4uLi4uIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2Utcmln aHQtdHJpYW5nbGUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCiAgIkZhY2Ug Zm9yIGArLWZyaW5nZS1yaWdodC10cmlhbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgoo c2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUgJystZnJpbmdl LXJpZ2h0LXRyaWFuZ2xlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10 b3AtbGVmdC1hbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKInh4eHh4eC4uIgoieHh4eHh4 Li4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4u IgoiLi4uLi4uLi4iKSBuaWwgbmlsICd0b3ApCgooZGVmZmFjZSArLWZyaW5nZS10b3AtbGVmdC1h bmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCiAgIkZhY2UgZm9yIGAr LWZyaW5nZS10b3AtbGVmdC1hbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUgJystZnJpbmdlLXRvcC1s ZWZ0LWFuZ2xlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10b3Atcmln aHQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIuLnh4eHh4eCIKIi4ueHh4eHh4Igoi Li4uLi4ueHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIKIi4u Li4uLi4uIikgbmlsIG5pbCAndG9wKQoKKGRlZmZhY2UgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xl LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAib3JhbmdlIikpKQogICJGYWNlIGZvciBgKy1mcmlu Z2UtdG9wLXJpZ2h0LWFuZ2xlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdl LWJpdG1hcC1mYWNlICcrLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUgJystZnJpbmdlLXRvcC1yaWdo dC1hbmdsZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90dG9tLWxl ZnQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoi eHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHh4eHh4Li4iCiJ4eHh4eHguLiIpIG5p bCBuaWwgJ2JvdHRvbSkKCihkZWZmYWNlICstZnJpbmdlLWJvdHRvbS1sZWZ0LWFuZ2xlLWZhY2UK ICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWJv dHRvbS1sZWZ0LWFuZ2xlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJp dG1hcC1mYWNlICcrLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZSAnKy1mcmluZ2UtYm90dG9tLWxl ZnQtYW5nbGUtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWJvdHRvbS1y aWdodC1hbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4uLi4uLnh4IgoiLi4uLi4ueHgi CiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLnh4eHh4eCIKIi4ueHh4eHh4Iikg bmlsIG5pbCAnYm90dG9tKQoKKGRlZmZhY2UgKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlLWZh Y2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdl LWJvdHRvbS1yaWdodC1hbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5n ZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlICcrLWZyaW5nZS1ib3R0 b20tcmlnaHQtYW5nbGUtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxl ZnQtYnJhY2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKInh4eHh4eC4uIgoieHh4eHh4Li4i CiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoi eHguLi4uLi4iCiJ4eHh4eHguLiIKInh4eHh4eC4uIikgbmlsIG5pbCAnY2VudGVyKQo7OwoKKGRl ZmZhY2UgKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVs bG93IikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UnLiIKICA6Z3Jv dXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1sZWZ0LWJyYWNr ZXQgJystZnJpbmdlLWxlZnQtYnJhY2tldC1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAn Ky1mcmluZ2UtcmlnaHQtYnJhY2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4ueHh4eHh4 IgoiLi54eHh4eHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIK Ii4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLnh4eHh4eCIKIi4ueHh4eHh4IikgbmlsIG5pbCAnY2Vu dGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlCiAgJygodCAoOmZvcmVn cm91bmQgImdyZWVuIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNl Jy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2Ut cmlnaHQtYnJhY2tldCAnKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlKQoKCihkZWZpbmUtZnJp bmdlLWJpdG1hcCAnKy1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRl Y2ltYWwKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4 eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHgu IgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQoKKGRl ZmZhY2UgKy1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQg ImNoYXJ0cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZh Y2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5n ZS1maWxsZWQtcmVjdGFuZ2xlICcrLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UpCgoKKGRl ZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlICgrLWZyaW5nZS1oZWxw ZXItZGVjaW1hbAoiLnh4eHh4eC4iCiIueC4uLi54LiIKIi54Li4uLnguIgoiLnguLi4ueC4iCiIu eC4uLi54LiIKIi54eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2Ut aG9sbG93LXNxdWFyZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCiAg IkZhY2UgZm9yIGArLWZyaW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9k ZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlICcrLWZy aW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5n ZS1maWxsZWQtc3F1YXJlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLnh4eHh4eC4iCiIueHh4 eHh4LiIKIi54eHh4eHguIgoiLnh4eHh4eC4iCiIueHh4eHh4LiIKIi54eHh4eHguIikgbmlsIG5p bCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtZmlsbGVkLXNxdWFyZS1mYWNlCiAgJygodCAo OmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQt c3F1YXJlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNl ICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UpCgoK KGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1ob3Jpem9udGFsLWJhciAoKy1mcmluZ2Ut aGVscGVyLWRlY2ltYWwKInh4eHh4eHguIgoieHh4eHh4eC4iKSBuaWwgbmlsICdib3R0b20pCgoo ZGVmZmFjZSArLWZyaW5nZS1ob3Jpem9udGFsLWJhci1mYWNlCiAgJygodCAoOmZvcmVncm91bmQg ImNoYXJ0cmV1c2UiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1ob3Jpem9udGFsLWJhci1mYWNl Jy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2Ut aG9yaXpvbnRhbC1iYXIgJystZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UpCgoKKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS1lbXB0eS1saW5lICgrLWZyaW5nZS1oZWxwZXItZGVjaW1h bAoiLi4uLi4uLi4iCiIuLnh4eHguLiIKIi4uLi4uLi4uIgoiLi4uLi4uLi4iCiIuLnh4eHguLiIK Ii4uLi4uLi4uIikgbmlsIG5pbCAnKHRvcCB0KSkKCihkZWZmYWNlICstZnJpbmdlLWVtcHR5LWxp bmUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJEYXJrR3JlZW4iKSkpCiAgIkZhY2UgZm9yIGAr LWZyaW5nZS1lbXB0eS1saW5lLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdl LWJpdG1hcC1mYWNlICcrLWZyaW5nZS1lbXB0eS1saW5lICcrLWZyaW5nZS1lbXB0eS1saW5lLWZh Y2UpCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCihibGluay1jdXJzb3ItbW9kZSAtMSk= --Multipart_Sun_Dec__3_12:56:49_2017-1--