Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jbNBL-0000ox-1J for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2020 11:46:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jbNBJ-0006Mt-Vy for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2020 11:46:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jbNBI-0006Ml-Tu for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2020 11:46:41 +0000 Received: from [64.147.123.30] (helo=wforward1-smtp.messagingengine.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jbNBD-0003rm-2I for pgsql-hackers@postgresql.org; Wed, 20 May 2020 11:46:40 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailforward.west.internal (Postfix) with ESMTP id 2D446F17 for ; Wed, 20 May 2020 07:46:22 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Wed, 20 May 2020 07:46:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; bh=xAb8bFRviyPqIG3BwJqkHFL9E/1hT iBNAnZq893XVjc=; b=HooW5Byels1S2C706JQ/ZwnsotVm444E39vun84wgfQKs nN1XYgWv7y9hauaaORCjT8jTNEg1hiLKMe55d8Q92sTHChNlgTRJF1wtQ5GVwNSz m1eLkJVlilSXWnodxjLGjLws1YKWGsE+vJOyr1riIERWHMRb3DD1DygI5X6jKqwI gH72wLFN8RDV9SkwoaEt6As5UiAAXWx17teudZ219AuweidDibR28iu1P4q8lQQ6 1LRTDmedJMzmHfvQPolzDjTJ1mr+GE/k/tL8SXEEKqqvX5wSRE8ngQb+u48qus0/ DLaW0C7X6ZEk4jwCP/pcZ5DAacbCHsNuF91/T7HAQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedruddtledggedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhuffvohfkffgfgggtsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomheqnecuggftrfgrthhtvg hrnhepkefhffekffetfeeuffetieevvdeljefgfeevudevgedvgeeuhfefueevfefhjeff necuffhomhgrihhnpedvnhguqhhurggurhgrnhhtrdgtohhmnecukfhppeelfedrvdegfe drkedvrddvgeeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhf rhhomhepphgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqhhurggurhgrnhhtrdgtoh hm X-ME-Proxy: Received: from april.pezone.net (p5df352f6.dip0.t-ipconnect.de [93.243.82.246]) by mail.messagingengine.com (Postfix) with ESMTPA id 8824F328005D for ; Wed, 20 May 2020 07:46:20 -0400 (EDT) From: Peter Eisentraut Subject: SEARCH and CYCLE clauses To: pgsql-hackers Organization: 2ndQuadrant Message-ID: Date: Wed, 20 May 2020 13:46:18 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------00AC1FD2BB845D9F081B7C1F" Content-Language: en-US X-Host-Lookup-Failed: Reverse DNS lookup failed for 64.147.123.30 (deferred) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------00AC1FD2BB845D9F081B7C1F Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit I have implemented the SEARCH and CYCLE clauses. This is standard SQL syntax attached to a recursive CTE to compute a depth- or breadth-first ordering and cycle detection, respectively. This is just convenience syntax for what you can already do manually. The original discussion about recursive CTEs briefly mentioned these as something to do later but then it was never mentioned again. SQL specifies these in terms of syntactic transformations, and so that's how I have implemented them also, mainly in the rewriter. I have successfully tested this against examples I found online that were aimed at DB2. The contained documentation and the code comment in rewriteHandler.c explain the details. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------00AC1FD2BB845D9F081B7C1F Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v1-0001-SEARCH-and-CYCLE-clauses.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-SEARCH-and-CYCLE-clauses.patch" RnJvbSA3ODdhN2U5NDAwZTlkNmVhM2FiM2UzZjM0NDQyMmFmNTYxODQ1NzVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAyMCBNYXkgMjAyMCAxMzowODo0MiArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIFNFQVJDSCBhbmQgQ1lDTEUgY2xhdXNlcwoKLS0tCiBkb2Mvc3JjL3Nn bWwvcXVlcmllcy5zZ21sICAgICAgICAgICAgfCAyMDQgKysrKysrKy0KIGRvYy9zcmMvc2dt bC9yZWYvc2VsZWN0LnNnbWwgICAgICAgICB8ICA0MSArKwogc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMgICAgICAgIHwgIDM5ICsrCiBzcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1 bmNzLmMgICAgICAgfCAgMzUgKysKIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAg ICAgICB8ICAgNiArCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgfCAg MzUgKysKIHNyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jICAgICAgICB8ICA0MyArKwog c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgIHwgIDU2ICsrLQogc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX2N0ZS5jICAgICAgIHwgMTEyICsrKysrCiBzcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyAgfCAgMzAgKy0KIHNyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV90YXJnZXQuYyAgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdy aXRlSGFuZGxlci5jIHwgNjY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgIHwgIDQ3ICsrCiBzcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oICAgICAgIHwgIDI4ICstCiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0Lmgg ICAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRoLm91dCAg IHwgMzA0ICsrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aC5zcWwgICAg ICAgIHwgMTUyICsrKysrKwogMTggZmlsZXMgY2hhbmdlZCwgMTc5NyBpbnNlcnRpb25zKCsp LCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcXVlcmllcy5z Z21sIGIvZG9jL3NyYy9zZ21sL3F1ZXJpZXMuc2dtbAppbmRleCA1NzJlOTY4MjczLi5iY2Iy MTYxYzQyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcXVlcmllcy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9xdWVyaWVzLnNnbWwKQEAgLTE5NzksNiArMTk3OSwxMCBAQCA8dGl0bGU+ PGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPiBpbiA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPjwv dGl0bGU+CiAgICBidXQgd2UnZCBoYXZlIG5lZWRlZCB0d28gbGV2ZWxzIG9mIG5lc3RlZCBz dWItPGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMuICBJdCdzIGEgYml0CiAgICBlYXNpZXIg dG8gZm9sbG93IHRoaXMgd2F5LgogICA8L3BhcmE+CisgPC9zZWN0Mj4KKworIDxzZWN0MiBp ZD0icXVlcmllcy13aXRoLXJlY3Vyc2l2ZSI+CisgIDx0aXRsZT5SZWN1cnNpdmUgUXVlcmll czwvdGl0bGU+CiAKICAgPHBhcmE+CiAgICA8aW5kZXh0ZXJtPgpAQCAtMjA4Miw2ICsyMDg2 LDE0NCBAQCA8dGl0bGU+UmVjdXJzaXZlIFF1ZXJ5IEV2YWx1YXRpb248L3RpdGxlPgogPC9w cm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogCisgIDxzZWN0MyBpZD0icXVlcmllcy13aXRo LXNlYXJjaCI+CisgICA8dGl0bGU+U2VhcmNoIE9yZGVyPC90aXRsZT4KKworICAgPHBhcmE+ CisgICAgV2hlbiBjb21wdXRpbmcgYSB0cmVlIHRyYXZlcnNhbCB1c2luZyBhIHJlY3Vyc2l2 ZSBxdWVyeSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAgICBvcmRlciB0aGUgcmVzdWx0cyBpbiBl aXRoZXIgZGVwdGgtZmlyc3Qgb3IgYnJlYWR0aC1maXJzdCBvcmRlci4gIFRoaXMgY2FuCisg ICAgYmUgZG9uZSBieSBjb21wdXRpbmcgYW4gb3JkZXJpbmcgY29sdW1uIGFsb25nc2lkZSB0 aGUgb3RoZXIgZGF0YSBjb2x1bW5zCisgICAgYW5kIHVzaW5nIHRoYXQgdG8gc29ydCB0aGUg cmVzdWx0cyBhdCB0aGUgZW5kLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKKyAgICBhY3R1 YWxseSBjb250cm9sIGluIHdoaWNoIG9yZGVyIHRoZSBxdWVyeSBldmFsdWF0aW9uIHZpc2l0 cyB0aGUgcm93czsgdGhhdAorICAgIGlzIGFzIGFsd2F5cyBpbiBTUUwgaW1wbGVtZW50YXRp b24tZGVwZW5kZW50LiAgVGhpcyBhcHByb2FjaCBtZXJlbHkKKyAgICBwcm92aWRlcyBhIGNv bnZlbmllbnQgd2F5IHRvIG9yZGVyIHRoZSByZXN1bHRzIGFmdGVyd2FyZHMuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFRvIGNyZWF0ZSBhIGRlcHRoLWZpcnN0IG9yZGVyLCB3 ZSBjb21wdXRlIGZvciBlYWNoIHJlc3VsdCByb3cgYW4gYXJyYXkgb2YKKyAgICByb3dzIHRo YXQgd2UgaGF2ZSB2aXNpdGVkIHNvIGZhci4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUg Zm9sbG93aW5nCisgICAgcXVlcnkgdGhhdCBzZWFyY2hlcyBhIHRhYmxlIDxzdHJ1Y3RuYW1l PnRyZWU8L3N0cnVjdG5hbWU+IHVzaW5nIGEKKyAgICA8c3RydWN0ZmllbGQ+bGluazwvc3Ry dWN0ZmllbGQ+IGZpZWxkOgorCis8cHJvZ3JhbWxpc3Rpbmc+CitXSVRIIFJFQ1VSU0lWRSBz ZWFyY2hfdHJlZShpZCwgbGluaywgZGF0YSkgQVMgKAorICAgIFNFTEVDVCB0LmlkLCB0Lmxp bmssIHQuZGF0YQorICAgIEZST00gdHJlZSB0CisgIFVOSU9OIEFMTAorICAgIFNFTEVDVCB0 LmlkLCB0LmxpbmssIHQuZGF0YQorICAgIEZST00gdHJlZSB0LCBzZWFyY2hfdHJlZSBzdAor ICAgIFdIRVJFIHQuaWQgPSBzdC5saW5rCispCitTRUxFQ1QgKiBGUk9NIHNlYXJjaF90cmVl OworPC9wcm9ncmFtbGlzdGluZz4KKworICAgIFRvIGFkZCBkZXB0aC1maXJzdCBvcmRlcmlu ZyBpbmZvcm1hdGlvbiwgeW91IGNhbiB3cml0ZSB0aGlzOgorCis8cHJvZ3JhbWxpc3Rpbmc+ CitXSVRIIFJFQ1VSU0lWRSBzZWFyY2hfdHJlZShpZCwgbGluaywgZGF0YSwgPGVtcGhhc2lz PnBhdGg8L2VtcGhhc2lzPikgQVMgKAorICAgIFNFTEVDVCB0LmlkLCB0LmxpbmssIHQuZGF0 YSwgPGVtcGhhc2lzPkFSUkFZW3QuaWRdPC9lbXBoYXNpcz4KKyAgICBGUk9NIHRyZWUgdAor ICBVTklPTiBBTEwKKyAgICBTRUxFQ1QgdC5pZCwgdC5saW5rLCB0LmRhdGEsIDxlbXBoYXNp cz5wYXRoIHx8IHQuaWQ8L2VtcGhhc2lzPgorICAgIEZST00gdHJlZSB0LCBzZWFyY2hfdHJl ZSBzdAorICAgIFdIRVJFIHQuaWQgPSBzdC5saW5rCispCitTRUxFQ1QgKiBGUk9NIHNlYXJj aF90cmVlIDxlbXBoYXNpcz5PUkRFUiBCWSBwYXRoPC9lbXBoYXNpcz47Cis8L3Byb2dyYW1s aXN0aW5nPgorICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW4gdGhlIGdlbmVyYWwgY2Fz ZSB3aGVyZSBtb3JlIHRoYW4gb25lIGZpZWxkIG5lZWRzIHRvIGJlIGNoZWNrZWQgdG8KKyAg IHJlY29nbml6ZSBhIGN5Y2xlLCB1c2UgYW4gYXJyYXkgb2Ygcm93cy4gIEZvciBleGFtcGxl LCBpZiB3ZSBuZWVkZWQgdG8KKyAgIHRyYWNrIGZpZWxkcyA8c3RydWN0ZmllbGQ+ZjE8L3N0 cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPmYyPC9zdHJ1Y3RmaWVsZD46CisKKzxwcm9n cmFtbGlzdGluZz4KK1dJVEggUkVDVVJTSVZFIHNlYXJjaF90cmVlKGlkLCBsaW5rLCBkYXRh LCA8ZW1waGFzaXM+cGF0aDwvZW1waGFzaXM+KSBBUyAoCisgICAgU0VMRUNUIHQuaWQsIHQu bGluaywgdC5kYXRhLCA8ZW1waGFzaXM+QVJSQVlbUk9XKGcuZjEsIGcuZjIpXTwvZW1waGFz aXM+CisgICAgRlJPTSB0cmVlIHQKKyAgVU5JT04gQUxMCisgICAgU0VMRUNUIHQuaWQsIHQu bGluaywgdC5kYXRhLCA8ZW1waGFzaXM+cGF0aCB8fCBST1coZy5mMSwgZy5mMik8L2VtcGhh c2lzPgorICAgIEZST00gdHJlZSB0LCBzZWFyY2hfdHJlZSBzdAorICAgIFdIRVJFIHQuaWQg PSBzdC5saW5rCispCitTRUxFQ1QgKiBGUk9NIHNlYXJjaF90cmVlIDxlbXBoYXNpcz5PUkRF UiBCWSBwYXRoPC9lbXBoYXNpcz47Cis8L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisK KyAgPHRpcD4KKyAgIDxwYXJhPgorICAgIE9taXQgdGhlIDxsaXRlcmFsPlJPVygpPC9saXRl cmFsPiBzeW50YXggaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIG9ubHkgb25lCisgICAgZmll bGQgbmVlZHMgdG8gYmUgdHJhY2tlZC4gIFRoaXMgYWxsb3dzIGEgc2ltcGxlIGFycmF5IHJh dGhlciB0aGFuIGEKKyAgICBjb21wb3NpdGUtdHlwZSBhcnJheSB0byBiZSB1c2VkLCBnYWlu aW5nIGVmZmljaWVuY3kuCisgICA8L3BhcmE+CisgIDwvdGlwPgorCisgIDxwYXJhPgorICAg VG8gY3JlYXRlIGEgYnJlYWR0aC1maXJzdCBvcmRlciwgeW91IGNhbiBhZGQgYSBjb2x1bW4g dGhhdCB0cmFja3MgdGhlIGRlcHRoCisgICBvZiB0aGUgc2VhcmNoLCBmb3IgZXhhbXBsZToK KworPHByb2dyYW1saXN0aW5nPgorV0lUSCBSRUNVUlNJVkUgc2VhcmNoX3RyZWUoaWQsIGxp bmssIGRhdGEsIDxlbXBoYXNpcz5sZXZlbDwvZW1waGFzaXM+KSBBUyAoCisgICAgU0VMRUNU IHQuaWQsIHQubGluaywgdC5kYXRhLCA8ZW1waGFzaXM+MDwvZW1waGFzaXM+CisgICAgRlJP TSB0cmVlIHQKKyAgVU5JT04gQUxMCisgICAgU0VMRUNUIHQuaWQsIHQubGluaywgdC5kYXRh LCA8ZW1waGFzaXM+bGV2ZWwgKyAxPC9lbXBoYXNpcz4KKyAgICBGUk9NIHRyZWUgdCwgc2Vh cmNoX3RyZWUgc3QKKyAgICBXSEVSRSB0LmlkID0gc3QubGluaworKQorU0VMRUNUICogRlJP TSBzZWFyY2hfdHJlZSA8ZW1waGFzaXM+T1JERVIgQlkgbGV2ZWw8L2VtcGhhc2lzPjsKKzwv cHJvZ3JhbWxpc3Rpbmc+CisKKyAgIFRvIGdldCBhIHN0YWJsZSBzb3J0LCBhZGQgZGF0YSBj b2x1bW5zIGFzIHNlY29uZGFyeSBzb3J0aW5nIGNvbHVtbnMuCisgIDwvcGFyYT4KKworICA8 dGlwPgorICAgPHBhcmE+CisgICAgVGhlIHJlY3Vyc2l2ZSBxdWVyeSBldmFsdWF0aW9uIGFs Z29yaXRobSBwcm9kdWNlcyBpdHMgb3V0cHV0IGluCisgICAgYnJlYWR0aC1maXJzdCBzZWFy Y2ggb3JkZXIuICBIb3dldmVyLCB0aGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBh bmQKKyAgICBpdCBpcyBwZXJoYXBzIHVuc291bmQgdG8gcmVseSBvbiBpdC4gIFRoZSBvcmRl ciBvZiB0aGUgcm93cyB3aXRoaW4gZWFjaAorICAgIGxldmVsIGlzIGNlcnRhaW5seSB1bmRl ZmluZWQsIHNvIHNvbWUgZXhwbGljaXQgb3JkZXJpbmcgbWlnaHQgYmUgZGVzaXJlZAorICAg IGluIGFueSBjYXNlLgorICAgPC9wYXJhPgorICA8L3RpcD4KKworICA8cGFyYT4KKyAgIFRo ZXJlIGlzIGJ1aWx0LWluIHN5bnRheCB0byBjb21wdXRlIGEgZGVwdGgtIG9yIGJyZWFkdGgt Zmlyc3Qgc29ydCBjb2x1bW4uCisgICBGb3IgZXhhbXBsZToKKworPHByb2dyYW1saXN0aW5n PgorV0lUSCBSRUNVUlNJVkUgc2VhcmNoX3RyZWUoaWQsIGxpbmssIGRhdGEpIEFTICgKKyAg ICBTRUxFQ1QgdC5pZCwgdC5saW5rLCB0LmRhdGEKKyAgICBGUk9NIHRyZWUgdAorICBVTklP TiBBTEwKKyAgICBTRUxFQ1QgdC5pZCwgdC5saW5rLCB0LmRhdGEKKyAgICBGUk9NIHRyZWUg dCwgc2VhcmNoX3RyZWUgc3QKKyAgICBXSEVSRSB0LmlkID0gc3QubGluaworKSA8ZW1waGFz aXM+U0VBUkNIIERFUFRIIEZJUlNUIEJZIGlkIFNFVCBvcmRlcmNvbDwvZW1waGFzaXM+CitT RUxFQ1QgKiBGUk9NIHNlYXJjaF90cmVlIE9SREVSIEJZIG9yZGVyY29sOworCitXSVRIIFJF Q1VSU0lWRSBzZWFyY2hfdHJlZShpZCwgbGluaywgZGF0YSkgQVMgKAorICAgIFNFTEVDVCB0 LmlkLCB0LmxpbmssIHQuZGF0YQorICAgIEZST00gdHJlZSB0CisgIFVOSU9OIEFMTAorICAg IFNFTEVDVCB0LmlkLCB0LmxpbmssIHQuZGF0YQorICAgIEZST00gdHJlZSB0LCBzZWFyY2hf dHJlZSBzdAorICAgIFdIRVJFIHQuaWQgPSBzdC5saW5rCispIDxlbXBoYXNpcz5TRUFSQ0gg QlJFQURUSCBGSVJTVCBCWSBpZCBTRVQgb3JkZXJjb2w8L2VtcGhhc2lzPgorU0VMRUNUICog RlJPTSBzZWFyY2hfdHJlZSBPUkRFUiBCWSBvcmRlcmNvbDsKKzwvcHJvZ3JhbWxpc3Rpbmc+ CisgICBUaGlzIHN5bnRheCBpcyBpbnRlcm5hbGx5IGV4cGFuZGVkIHRvIHNvbWV0aGluZyBz aW1pbGFyIHRvIHRoZSBhYm92ZQorICAgaGFuZC13cml0dGVuIGZvcm1zLiAgVGhlIDxsaXRl cmFsPlNFQVJDSDwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNpZmllcyB3aGV0aGVyCisgICBkZXB0 aC0gb3IgYnJlYWR0aCBmaXJzdCBzZWFyY2ggaXMgd2FudGVkLCB0aGUgbGlzdCBvZiBjb2x1 bW5zIHRvIHRyYWNrIGZvcgorICAgc29ydGluZywgYW5kIGEgY29sdW1uIG5hbWUgdGhhdCB3 aWxsIGNvbnRhaW4gdGhlIHJlc3VsdCBkYXRhIHRoYXQgY2FuIGJlCisgICB1c2VkIGZvciBz b3J0aW5nLiAgVGhhdCBjb2x1bW4gd2lsbCBpbXBsaWNpdGx5IGJlIGFkZGVkIHRvIHRoZSBv dXRwdXQgcm93cworICAgb2YgdGhlIENURS4KKyAgPC9wYXJhPgorICA8L3NlY3QzPgorCisg IDxzZWN0MyBpZD0icXVlcmllcy13aXRoLWN5Y2xlIj4KKyAgIDx0aXRsZT5DeWNsZSBEZXRl Y3Rpb248L3RpdGxlPgorCiAgIDxwYXJhPgogICAgV2hlbiB3b3JraW5nIHdpdGggcmVjdXJz aXZlIHF1ZXJpZXMgaXQgaXMgaW1wb3J0YW50IHRvIGJlIHN1cmUgdGhhdAogICAgdGhlIHJl Y3Vyc2l2ZSBwYXJ0IG9mIHRoZSBxdWVyeSB3aWxsIGV2ZW50dWFsbHkgcmV0dXJuIG5vIHR1 cGxlcywKQEAgLTIxMTIsMTggKzIyNTQsMTggQEAgPHRpdGxlPlJlY3Vyc2l2ZSBRdWVyeSBF dmFsdWF0aW9uPC90aXRsZT4KICAgIDxsaXRlcmFsPlVOSU9OIEFMTDwvbGl0ZXJhbD4gdG8g PGxpdGVyYWw+VU5JT048L2xpdGVyYWw+IHdvdWxkIG5vdCBlbGltaW5hdGUgdGhlIGxvb3Bp bmcuCiAgICBJbnN0ZWFkIHdlIG5lZWQgdG8gcmVjb2duaXplIHdoZXRoZXIgd2UgaGF2ZSBy ZWFjaGVkIHRoZSBzYW1lIHJvdyBhZ2FpbgogICAgd2hpbGUgZm9sbG93aW5nIGEgcGFydGlj dWxhciBwYXRoIG9mIGxpbmtzLiAgV2UgYWRkIHR3byBjb2x1bW5zCi0gICA8c3RydWN0Zmll bGQ+cGF0aDwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+Y3ljbGU8L3N0cnVjdGZp ZWxkPiB0byB0aGUgbG9vcC1wcm9uZSBxdWVyeToKKyAgIDxzdHJ1Y3RmaWVsZD5pc19jeWNs ZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+cGF0aDwvc3RydWN0ZmllbGQ+IHRv IHRoZSBsb29wLXByb25lIHF1ZXJ5OgogCiA8cHJvZ3JhbWxpc3Rpbmc+Ci1XSVRIIFJFQ1VS U0lWRSBzZWFyY2hfZ3JhcGgoaWQsIGxpbmssIGRhdGEsIGRlcHRoLCBwYXRoLCBjeWNsZSkg QVMgKAorV0lUSCBSRUNVUlNJVkUgc2VhcmNoX2dyYXBoKGlkLCBsaW5rLCBkYXRhLCBkZXB0 aCwgaXNfY3ljbGUsIHBhdGgpIEFTICgKICAgICBTRUxFQ1QgZy5pZCwgZy5saW5rLCBnLmRh dGEsIDEsCi0gICAgICBBUlJBWVtnLmlkXSwKLSAgICAgIGZhbHNlCisgICAgICBmYWxzZSwK KyAgICAgIEFSUkFZW2cuaWRdCiAgICAgRlJPTSBncmFwaCBnCiAgIFVOSU9OIEFMTAogICAg IFNFTEVDVCBnLmlkLCBnLmxpbmssIGcuZGF0YSwgc2cuZGVwdGggKyAxLAotICAgICAgcGF0 aCB8fCBnLmlkLAotICAgICAgZy5pZCA9IEFOWShwYXRoKQorICAgICAgZy5pZCA9IEFOWShw YXRoKSwKKyAgICAgIHBhdGggfHwgZy5pZAogICAgIEZST00gZ3JhcGggZywgc2VhcmNoX2dy YXBoIHNnCiAgICAgV0hFUkUgZy5pZCA9IHNnLmxpbmsgQU5EIE5PVCBjeWNsZQogKQpAQCAt MjE0MCwxNSArMjI4MiwxNSBAQCA8dGl0bGU+UmVjdXJzaXZlIFF1ZXJ5IEV2YWx1YXRpb248 L3RpdGxlPgogICAgY29tcGFyZSBmaWVsZHMgPHN0cnVjdGZpZWxkPmYxPC9zdHJ1Y3RmaWVs ZD4gYW5kIDxzdHJ1Y3RmaWVsZD5mMjwvc3RydWN0ZmllbGQ+OgogCiA8cHJvZ3JhbWxpc3Rp bmc+Ci1XSVRIIFJFQ1VSU0lWRSBzZWFyY2hfZ3JhcGgoaWQsIGxpbmssIGRhdGEsIGRlcHRo LCBwYXRoLCBjeWNsZSkgQVMgKAorV0lUSCBSRUNVUlNJVkUgc2VhcmNoX2dyYXBoKGlkLCBs aW5rLCBkYXRhLCBkZXB0aCwgaXNfY3ljbGUsIHBhdGgpIEFTICgKICAgICBTRUxFQ1QgZy5p ZCwgZy5saW5rLCBnLmRhdGEsIDEsCi0gICAgICBBUlJBWVtST1coZy5mMSwgZy5mMildLAot ICAgICAgZmFsc2UKKyAgICAgIGZhbHNlLAorICAgICAgQVJSQVlbUk9XKGcuZjEsIGcuZjIp XQogICAgIEZST00gZ3JhcGggZwogICBVTklPTiBBTEwKICAgICBTRUxFQ1QgZy5pZCwgZy5s aW5rLCBnLmRhdGEsIHNnLmRlcHRoICsgMSwKLSAgICAgIHBhdGggfHwgUk9XKGcuZjEsIGcu ZjIpLAotICAgICAgUk9XKGcuZjEsIGcuZjIpID0gQU5ZKHBhdGgpCisgICAgICBST1coZy5m MSwgZy5mMikgPSBBTlkocGF0aCksCisgICAgICBwYXRoIHx8IFJPVyhnLmYxLCBnLmYyKQog ICAgIEZST00gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCiAgICAgV0hFUkUgZy5pZCA9IHNn LmxpbmsgQU5EIE5PVCBjeWNsZQogKQpAQCAtMjE2NCwxMiArMjMwNiwzOSBAQCA8dGl0bGU+ UmVjdXJzaXZlIFF1ZXJ5IEV2YWx1YXRpb248L3RpdGxlPgogICAgPC9wYXJhPgogICA8L3Rp cD4KIAorICA8cGFyYT4KKyAgIFRoZXJlIGlzIGJ1aWx0LWluIHN5bnRheCB0byBzaW1wbGlm eSBjeWNsZSBkZXRlY3Rpb24uICBUaGUgYWJvdmUgcXVlcnkgY2FuCisgICBhbHNvIGJlIHdy aXR0ZW4gbGlrZSB0aGlzOgorPHByb2dyYW1saXN0aW5nPgorV0lUSCBSRUNVUlNJVkUgc2Vh cmNoX2dyYXBoKGlkLCBsaW5rLCBkYXRhLCBkZXB0aCkgQVMgKAorICAgIFNFTEVDVCBnLmlk LCBnLmxpbmssIGcuZGF0YSwgMQorICAgIEZST00gZ3JhcGggZworICBVTklPTiBBTEwKKyAg ICBTRUxFQ1QgZy5pZCwgZy5saW5rLCBnLmRhdGEsIHNnLmRlcHRoICsgMQorICAgIEZST00g Z3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisgICAgV0hFUkUgZy5pZCA9IHNnLmxpbmsKKykg PGVtcGhhc2lzPkNZQ0xFIGlkLCBsaW5rIFNFVCBpc19jeWNsZSBUTyB0cnVlIERFRkFVTFQg ZmFsc2UgVVNJTkcgcGF0aDwvZW1waGFzaXM+CitTRUxFQ1QgKiBGUk9NIHNlYXJjaF9ncmFw aDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBhbmQgaXQgd2lsbCBiZSBpbnRlcm5hbGx5IHJl d3JpdHRlbiB0byB0aGUgYWJvdmUgZm9ybS4gIFRoZQorICAgPGxpdGVyYWw+Q1lDTEU8L2xp dGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMgZmlyc3QgdGhlIGxpc3Qgb2YgY29sdW1ucyB0bwor ICAgdHJhY2sgZm9yIGN5Y2xlIGRldGVjdGlvbiwgdGhlbiBhIGNvbHVtbiBuYW1lIHRoYXQg d2lsbCBzaG93IHdoZXRoZXIgYQorICAgY3ljbGUgaGFzIGJlZW4gZGV0ZWN0ZWQsIHRoZW4g dHdvIHZhbHVlcyB0byB1c2UgaW4gdGhhdCBjb2x1bW4gZm9yIHRoZSB5ZXMKKyAgIGFuZCBu byBjYXNlcywgYW5kIGZpbmFsbHkgdGhlIG5hbWUgb2YgYW5vdGhlciBjb2x1bW4gdGhhdCB3 aWxsIHRyYWNrIHRoZQorICAgcGF0aC4gIFRoZSBjeWNsZSBhbmQgcGF0aCBjb2x1bW5zIHdp bGwgaW1wbGljaXRseSBiZSBhZGRlZCB0byB0aGUgb3V0cHV0CisgICByb3dzIG9mIHRoZSBD VEUuCisgIDwvcGFyYT4KKwogICA8dGlwPgogICAgPHBhcmE+Ci0gICAgVGhlIHJlY3Vyc2l2 ZSBxdWVyeSBldmFsdWF0aW9uIGFsZ29yaXRobSBwcm9kdWNlcyBpdHMgb3V0cHV0IGluCi0g ICAgYnJlYWR0aC1maXJzdCBzZWFyY2ggb3JkZXIuICBZb3UgY2FuIGRpc3BsYXkgdGhlIHJl c3VsdHMgaW4gZGVwdGgtZmlyc3QKLSAgICBzZWFyY2ggb3JkZXIgYnkgbWFraW5nIHRoZSBv dXRlciBxdWVyeSA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4gYQotICAgIDxxdW90ZT5w YXRoPC9xdW90ZT4gY29sdW1uIGNvbnN0cnVjdGVkIGluIHRoaXMgd2F5LgorICAgIFRoZSBj eWNsZSBwYXRoIGNvbHVtbiBpcyBjb21wdXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGRl cHRoLWZpcnN0CisgICAgb3JkZXJpbmcgY29sdW1uIHNob3cgaW4gdGhlIHByZXZpb3VzIHNl Y3Rpb24uICBBIHF1ZXJ5IGNhbiBoYXZlIGJvdGggYQorICAgIDxsaXRlcmFsPlNFQVJDSDwv bGl0ZXJhbD4gYW5kIGEgPGxpdGVyYWw+Q1lDTEU8L2xpdGVyYWw+IGNsYXVzZSwgYnV0IGEK KyAgICBkZXB0aC1maXJzdCBzZWFyY2ggc3BlY2lmaWNhdGlvbiBhbmQgYSBjeWNsZSBkZXRl Y3Rpb24gc3BlY2lmaWNhdGlvbiB3b3VsZAorICAgIGNyZWF0ZSByZWR1bmRhbnQgY29tcHV0 YXRpb25zLCBzbyBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3QgdXNlIHRoZQorICAgIDxs aXRlcmFsPkNZQ0xFPC9saXRlcmFsPiBjbGF1c2UgYW5kIG9yZGVyIGJ5IHRoZSBwYXRoIGNv bHVtbi4gIElmCisgICAgYnJlYWR0aC1maXJzdCBvcmRlcmluZyBpcyB3YW50ZWQsIHRoZW4g c3BlY2lmeWluZyBib3RoCisgICAgPGxpdGVyYWw+U0VBUkNIPC9saXRlcmFsPiBhbmQgPGxp dGVyYWw+Q1lDTEU8L2xpdGVyYWw+IGNhbiBiZSB1c2VmdWwuCiAgICA8L3BhcmE+CiAgIDwv dGlwPgogCkBAIC0yMTk3LDYgKzIzNjYsMTEgQEAgPHRpdGxlPlJlY3Vyc2l2ZSBRdWVyeSBF dmFsdWF0aW9uPC90aXRsZT4KICAgIG91dGVyIHF1ZXJ5IHdpbGwgdXN1YWxseSB0cnkgdG8g ZmV0Y2ggYWxsIG9mIHRoZSA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiBxdWVyeSdzCiAgICBv dXRwdXQgYW55d2F5LgogICA8L3BhcmE+CisgIDwvc2VjdDM+CisgPC9zZWN0Mj4KKworIDxz ZWN0Mj4KKyAgPHRpdGxlPkNvbW1vbiBUYWJsZSBFeHByZXNzaW9uIE1hdGVyaWFsaXphdGlv bjwvdGl0bGU+CiAKICAgPHBhcmE+CiAgICBBIHVzZWZ1bCBwcm9wZXJ0eSBvZiA8bGl0ZXJh bD5XSVRIPC9saXRlcmFsPiBxdWVyaWVzIGlzIHRoYXQgdGhleSBhcmUKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3NlbGVj dC5zZ21sCmluZGV4IDQ3NTI4MWRkN2IuLjNhNGI5MzE0YzkgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9zZWxlY3Qu c2dtbApAQCAtNzMsNiArNzMsOCBAQAogPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPndpdGhfcXVlcnk8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KIAog ICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53aXRoX3F1ZXJ5X25hbWU8L3Jl cGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9u YW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0gQVMgWyBbIE5PVCBdIE1BVEVSSUFMSVpF RCBdICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNlbGVjdDwvcmVwbGFjZWFi bGU+IHwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlczwvcmVwbGFjZWFi bGU+IHwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluc2VydDwvcmVwbGFjZWFi bGU+IHwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnVwZGF0ZTwvcmVwbGFjZWFi bGU+IHwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRlbGV0ZTwvcmVwbGFjZWFi bGU+ICkKKyAgICAgICAgWyBTRUFSQ0ggeyBCUkVBRFRIIHwgREVQVEggfSBGSVJTVCBCWSA8 cmVwbGFjZWFibGU+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dIFNFVCA8cmVw bGFjZWFibGU+c2VhcmNoX3NlcV9jb2xfbmFtZTwvcmVwbGFjZWFibGU+IF0KKyAgICAgICAg WyBDWUNMRSA8cmVwbGFjZWFibGU+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5d IFNFVCA8cmVwbGFjZWFibGU+Y3ljbGVfbWFya19jb2xfbmFtZTwvcmVwbGFjZWFibGU+IFRP IDxyZXBsYWNlYWJsZT5jeWNsZV9tYXJrX3ZhbHVlPC9yZXBsYWNlYWJsZT4gREVGQVVMVCA8 cmVwbGFjZWFibGU+Y3ljbGVfbWFya19kZWZhdWx0PC9yZXBsYWNlYWJsZT4gVVNJTkcgPHJl cGxhY2VhYmxlPmN5Y2xlX3BhdGhfY29sX25hbWU8L3JlcGxhY2VhYmxlPiBdCiAKIFRBQkxF IFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9y ZXBsYWNlYWJsZT4gWyAqIF0KIDwvc3lub3BzaXM+CkBAIC0yNzYsNiArMjc4LDQ1IEBAIDx0 aXRsZT48bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiBDbGF1c2U8L3RpdGxlPgogICAgIHF1ZXJp ZXMgdGhhdCBkbyBub3QgdXNlIHJlY3Vyc2lvbiBvciBmb3J3YXJkIHJlZmVyZW5jZXMuCiAg ICA8L3BhcmE+CiAKKyAgIDxwYXJhPgorICAgIFRoZSBvcHRpb25hbCA8bGl0ZXJhbD5TRUFS Q0g8L2xpdGVyYWw+IGNsYXVzZSBjb21wdXRlcyBhIDxmaXJzdHRlcm0+c2VhcmNoCisgICAg c2VxdWVuY2UgY29sdW1uPC9maXJzdHRlcm0+IHRoYXQgY2FuIGJlIHVzZWQgZm9yIG9yZGVy aW5nIHRoZSByZXN1bHRzIG9mIGEKKyAgICByZWN1cnNpdmUgcXVlcnkgaW4gZWl0aGVyIGJy ZWFkdGgtZmlyc3Qgb3IgZGVwdGgtZmlyc3Qgb3JkZXIuICBUaGUKKyAgICBzdXBwbGllZCBj b2x1bW4gbmFtZSBsaXN0IHNwZWNpZmllcyB0aGUgcm93IGtleSB0aGF0IGlzIHRvIGJlIHVz ZWQgZm9yCisgICAga2VlcGluZyB0cmFjayBvZiB2aXNpdGVkIHJvd3MuICBBIGNvbHVtbiBu YW1lZAorICAgIDxyZXBsYWNlYWJsZT5zZWFyY2hfc2VxX2NvbF9uYW1lPC9yZXBsYWNlYWJs ZT4gd2lsbCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0CisgICAgY29sdW1uIGxpc3Qgb2YgdGhl IDxsaXRlcmFsPldJVEg8L2xpdGVyYWw+IHF1ZXJ5LiAgVGhpcyBjb2x1bW4gY2FuIGJlCisg ICAgb3JkZXJlZCBieSBpbiB0aGUgb3V0ZXIgcXVlcnkgdG8gYWNoaWV2ZSB0aGUgcmVzcGVj dGl2ZSBvcmRlcmluZy4gIFNlZQorICAgIDx4cmVmIGxpbmtlbmQ9InF1ZXJpZXMtd2l0aC1z ZWFyY2giLz4gZm9yIGV4YW1wbGVzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBU aGUgb3B0aW9uYWwgPGxpdGVyYWw+Q1lDTEU8L2xpdGVyYWw+IGNsYXVzZSBpcyB1c2VkIHRv IGRldGVjdCBjeWNsZXMgaW4KKyAgICByZWN1cnNpdmUgcXVlcmllcy4gIFRoZSBzdXBwbGll ZCBjb2x1bW4gbmFtZSBsaXN0IHNwZWNpZmllcyB0aGUgcm93IGtleQorICAgIHRoYXQgaXMg dG8gYmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB2aXNpdGVkIHJvd3MuICBBIGNvbHVt biBuYW1lZAorICAgIDxyZXBsYWNlYWJsZT5jeWNsZV9tYXJrX2NvbF9uYW1lPC9yZXBsYWNl YWJsZT4gd2lsbCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0CisgICAgY29sdW1uIGxpc3Qgb2Yg dGhlIDxsaXRlcmFsPldJVEg8L2xpdGVyYWw+IHF1ZXJ5LiAgVGhpcyBjb2x1bW4gd2lsbCBi ZSBzZXQKKyAgICB0byA8cmVwbGFjZWFibGU+Y3ljbGVfbWFya192YWx1ZTwvcmVwbGFjZWFi bGU+IHdoZW4gYSBjeWNsZSBoYXMgYmVlbgorICAgIGRldGVjdGVkLCBlbHNlIHRvIDxyZXBs YWNlYWJsZT5jeWNsZV9tYXJrX2RlZmF1bHQ8L3JlcGxhY2VhYmxlPi4KKyAgICBGdXJ0aGVy bW9yZSwgcHJvY2Vzc2luZyBvZiB0aGUgcmVjdXJzaXZlIHVuaW9uIHdpbGwgc3RvcCB3aGVu IGEgY3ljbGUgaGFzCisgICAgYmVlbiBkZXRlY3RlZC4gIDxyZXBsYWNlYWJsZT5jeWNsZV9t YXJrX3ZhbHVlPC9yZXBsYWNlYWJsZT4gYW5kCisgICAgPHJlcGxhY2VhYmxlPmN5Y2xlX21h cmtfZGVmYXVsdDwvcmVwbGFjZWFibGU+IG11c3QgYmUgY29uc3RhbnRzIGFuZCB0aGV5Cisg ICAgbXVzdCBiZSBjb2VyY2libGUgdG8gYSBjb21tb24gZGF0YSB0eXBlLCBhbmQgdGhlIGRh dGEgdHlwZSBtdXN0IGhhdmUgYW4KKyAgICBpbmVxdWFsaXR5IG9wZXJhdG9yLiAgKFRoZSBT UUwgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCB0aGV5IGJlIGNoYXJhY3RlcgorICAgIHN0cmlu Z3MsIGJ1dCBQb3N0Z3JlU1FMIGRvZXMgbm90IHJlcXVpcmUgdGhhdC4pICBGdXJ0aGVybW9y ZSwgYSBjb2x1bW4KKyAgICBuYW1lZCA8cmVwbGFjZWFibGU+Y3ljbGVfcGF0aF9jb2xfbmFt ZTwvcmVwbGFjZWFibGU+IHdpbGwgYmUgYWRkZWQgdG8gdGhlCisgICAgcmVzdWx0IGNvbHVt biBsaXN0IG9mIHRoZSA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiBxdWVyeS4gIFRoaXMgY29s dW1uIGlzCisgICAgdXNlZCBpbnRlcm5hbGx5IGZvciB0cmFja2luZyB2aXNpdGVkIHJvd3Mu ICBTZWUgPHhyZWYKKyAgICBsaW5rZW5kPSJxdWVyaWVzLXdpdGgtY3ljbGUiLz4gZm9yIGV4 YW1wbGVzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBCb3RoIHRoZSA8bGl0ZXJh bD5TRUFSQ0g8L2xpdGVyYWw+IGFuZCB0aGUgPGxpdGVyYWw+Q1lDTEU8L2xpdGVyYWw+IGNs YXVzZQorICAgIGFyZSBvbmx5IHZhbGlkIGZvciByZWN1cnNpdmUgPGxpdGVyYWw+V0lUSDwv bGl0ZXJhbD4gcXVlcmllcy4gIElmIGJvdGgKKyAgICBjbGF1c2VzIGFyZSB1c2VkLCB0aGUg Y29sdW1uIGFkZGVkIGJ5IHRoZSA8bGl0ZXJhbD5TRUFSQ0g8L2xpdGVyYWw+IGNsYXVzZQor ICAgIGFwcGVhciBiZWZvcmUgdGhlIGNvbHVtbnMgYWRkZWQgYnkgdGhlIDxsaXRlcmFsPkNZ Q0xFPC9saXRlcmFsPiBjbGF1c2UuCisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIFRo ZSBwcmltYXJ5IHF1ZXJ5IGFuZCB0aGUgPGxpdGVyYWw+V0lUSDwvbGl0ZXJhbD4gcXVlcmll cyBhcmUgYWxsCiAgICAgKG5vdGlvbmFsbHkpIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUu ICBUaGlzIGltcGxpZXMgdGhhdCB0aGUgZWZmZWN0cyBvZgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3Mu YwppbmRleCA0OTE0NTJhZTJkLi5lNjkyMGQxYWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3Mu YwpAQCAtMjU4OCw2ICsyNTg4LDM3IEBAIF9jb3B5T25Db25mbGljdENsYXVzZShjb25zdCBP bkNvbmZsaWN0Q2xhdXNlICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCitzdGF0aWMg Q1RFU2VhcmNoQ2xhdXNlICoKK19jb3B5Q1RFU2VhcmNoQ2xhdXNlKGNvbnN0IENURVNlYXJj aENsYXVzZSAqZnJvbSkKK3sKKwlDVEVTZWFyY2hDbGF1c2UgKm5ld25vZGUgPSBtYWtlTm9k ZShDVEVTZWFyY2hDbGF1c2UpOworCisJQ09QWV9OT0RFX0ZJRUxEKHNlYXJjaF9jb2xfbGlz dCk7CisJQ09QWV9TQ0FMQVJfRklFTEQoc2VhcmNoX2JyZWFkdGhfZmlyc3QpOworCUNPUFlf U1RSSU5HX0ZJRUxEKHNlYXJjaF9zZXFfY29sdW1uKTsKKwlDT1BZX0xPQ0FUSU9OX0ZJRUxE KGxvY2F0aW9uKTsKKworCXJldHVybiBuZXdub2RlOworfQorCitzdGF0aWMgQ1RFQ3ljbGVD bGF1c2UgKgorX2NvcHlDVEVDeWNsZUNsYXVzZShjb25zdCBDVEVDeWNsZUNsYXVzZSAqZnJv bSkKK3sKKwlDVEVDeWNsZUNsYXVzZSAqbmV3bm9kZSA9IG1ha2VOb2RlKENURUN5Y2xlQ2xh dXNlKTsKKworCUNPUFlfTk9ERV9GSUVMRChjeWNsZV9jb2xfbGlzdCk7CisJQ09QWV9TVFJJ TkdfRklFTEQoY3ljbGVfbWFya19jb2x1bW4pOworCUNPUFlfTk9ERV9GSUVMRChjeWNsZV9t YXJrX3ZhbHVlKTsKKwlDT1BZX05PREVfRklFTEQoY3ljbGVfbWFya19kZWZhdWx0KTsKKwlD T1BZX1NDQUxBUl9GSUVMRChjeWNsZV9tYXJrX3R5cGUpOworCUNPUFlfU0NBTEFSX0ZJRUxE KGN5Y2xlX21hcmtfdHlwbW9kKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChjeWNsZV9tYXJrX2Nv bGxhdGlvbik7CisJQ09QWV9TVFJJTkdfRklFTEQoY3ljbGVfcGF0aF9jb2x1bW4pOworCUNP UFlfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOworCisJcmV0dXJuIG5ld25vZGU7Cit9CisK IHN0YXRpYyBDb21tb25UYWJsZUV4cHIgKgogX2NvcHlDb21tb25UYWJsZUV4cHIoY29uc3Qg Q29tbW9uVGFibGVFeHByICpmcm9tKQogewpAQCAtMjYwNCw2ICsyNjM1LDggQEAgX2NvcHlD b21tb25UYWJsZUV4cHIoY29uc3QgQ29tbW9uVGFibGVFeHByICpmcm9tKQogCUNPUFlfTk9E RV9GSUVMRChjdGVjb2x0eXBlcyk7CiAJQ09QWV9OT0RFX0ZJRUxEKGN0ZWNvbHR5cG1vZHMp OwogCUNPUFlfTk9ERV9GSUVMRChjdGVjb2xjb2xsYXRpb25zKTsKKwlDT1BZX05PREVfRklF TEQoc2VhcmNoX2NsYXVzZSk7CisJQ09QWV9OT0RFX0ZJRUxEKGN5Y2xlX2NsYXVzZSk7CiAK IAlyZXR1cm4gbmV3bm9kZTsKIH0KQEAgLTU2NzMsNiArNTcwNiwxMiBAQCBjb3B5T2JqZWN0 SW1wbChjb25zdCB2b2lkICpmcm9tKQogCQljYXNlIFRfT25Db25mbGljdENsYXVzZToKIAkJ CXJldHZhbCA9IF9jb3B5T25Db25mbGljdENsYXVzZShmcm9tKTsKIAkJCWJyZWFrOworCQlj YXNlIFRfQ1RFU2VhcmNoQ2xhdXNlOgorCQkJcmV0dmFsID0gX2NvcHlDVEVTZWFyY2hDbGF1 c2UoZnJvbSk7CisJCQlicmVhazsKKwkJY2FzZSBUX0NURUN5Y2xlQ2xhdXNlOgorCQkJcmV0 dmFsID0gX2NvcHlDVEVDeWNsZUNsYXVzZShmcm9tKTsKKwkJCWJyZWFrOwogCQljYXNlIFRf Q29tbW9uVGFibGVFeHByOgogCQkJcmV0dmFsID0gX2NvcHlDb21tb25UYWJsZUV4cHIoZnJv bSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwppbmRleCA4NDA4YzI4ZWM2 Li40N2ZiNzFhZjZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0yODMxLDYgKzI4 MzEsMzMgQEAgX2VxdWFsT25Db25mbGljdENsYXVzZShjb25zdCBPbkNvbmZsaWN0Q2xhdXNl ICphLCBjb25zdCBPbkNvbmZsaWN0Q2xhdXNlICpiKQogCXJldHVybiB0cnVlOwogfQogCitz dGF0aWMgYm9vbAorX2VxdWFsQ1RFU2VhcmNoQ2xhdXNlKGNvbnN0IENURVNlYXJjaENsYXVz ZSAqYSwgY29uc3QgQ1RFU2VhcmNoQ2xhdXNlICpiKQoreworCUNPTVBBUkVfTk9ERV9GSUVM RChzZWFyY2hfY29sX2xpc3QpOworCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKHNlYXJjaF9icmVh ZHRoX2ZpcnN0KTsKKwlDT01QQVJFX1NUUklOR19GSUVMRChzZWFyY2hfc2VxX2NvbHVtbik7 CisJQ09NUEFSRV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIGJvb2wKK19lcXVhbENURUN5Y2xlQ2xhdXNlKGNvbnN0IENURUN5Y2xl Q2xhdXNlICphLCBjb25zdCBDVEVDeWNsZUNsYXVzZSAqYikKK3sKKwlDT01QQVJFX05PREVf RklFTEQoY3ljbGVfY29sX2xpc3QpOworCUNPTVBBUkVfU1RSSU5HX0ZJRUxEKGN5Y2xlX21h cmtfY29sdW1uKTsKKwlDT01QQVJFX05PREVfRklFTEQoY3ljbGVfbWFya192YWx1ZSk7CisJ Q09NUEFSRV9OT0RFX0ZJRUxEKGN5Y2xlX21hcmtfZGVmYXVsdCk7CisJQ09NUEFSRV9TQ0FM QVJfRklFTEQoY3ljbGVfbWFya190eXBlKTsKKwlDT01QQVJFX1NDQUxBUl9GSUVMRChjeWNs ZV9tYXJrX3R5cG1vZCk7CisJQ09NUEFSRV9TQ0FMQVJfRklFTEQoY3ljbGVfbWFya19jb2xs YXRpb24pOworCUNPTVBBUkVfU1RSSU5HX0ZJRUxEKGN5Y2xlX3BhdGhfY29sdW1uKTsKKwlD T01QQVJFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKKworCXJldHVybiB0cnVlOworfQor CiBzdGF0aWMgYm9vbAogX2VxdWFsQ29tbW9uVGFibGVFeHByKGNvbnN0IENvbW1vblRhYmxl RXhwciAqYSwgY29uc3QgQ29tbW9uVGFibGVFeHByICpiKQogewpAQCAtMjg0NSw2ICsyODcy LDggQEAgX2VxdWFsQ29tbW9uVGFibGVFeHByKGNvbnN0IENvbW1vblRhYmxlRXhwciAqYSwg Y29uc3QgQ29tbW9uVGFibGVFeHByICpiKQogCUNPTVBBUkVfTk9ERV9GSUVMRChjdGVjb2x0 eXBlcyk7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKGN0ZWNvbHR5cG1vZHMpOwogCUNPTVBBUkVf Tk9ERV9GSUVMRChjdGVjb2xjb2xsYXRpb25zKTsKKwlDT01QQVJFX05PREVfRklFTEQoc2Vh cmNoX2NsYXVzZSk7CisJQ09NUEFSRV9OT0RFX0ZJRUxEKGN5Y2xlX2NsYXVzZSk7CiAKIAly ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3MjUsNiArMzc1NCwxMiBAQCBlcXVhbChjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRfT25Db25mbGljdENsYXVzZToKIAkJCXJl dHZhbCA9IF9lcXVhbE9uQ29uZmxpY3RDbGF1c2UoYSwgYik7CiAJCQlicmVhazsKKwkJY2Fz ZSBUX0NURVNlYXJjaENsYXVzZToKKwkJCXJldHZhbCA9IF9lcXVhbENURVNlYXJjaENsYXVz ZShhLCBiKTsKKwkJCWJyZWFrOworCQljYXNlIFRfQ1RFQ3ljbGVDbGF1c2U6CisJCQlyZXR2 YWwgPSBfZXF1YWxDVEVDeWNsZUNsYXVzZShhLCBiKTsKKwkJCWJyZWFrOwogCQljYXNlIFRf Q29tbW9uVGFibGVFeHByOgogCQkJcmV0dmFsID0gX2VxdWFsQ29tbW9uVGFibGVFeHByKGEs IGIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4IGQ4NWNhOWY3YzUu Ljg4ZDg1ZTE0NTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0xNTI2LDYgKzE1MjYs MTIgQEAgZXhwckxvY2F0aW9uKGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9PbkNvbmZs aWN0Q2xhdXNlOgogCQkJbG9jID0gKChjb25zdCBPbkNvbmZsaWN0Q2xhdXNlICopIGV4cHIp LT5sb2NhdGlvbjsKIAkJCWJyZWFrOworCQljYXNlIFRfQ1RFU2VhcmNoQ2xhdXNlOgorCQkJ bG9jID0gKChjb25zdCBDVEVTZWFyY2hDbGF1c2UgKikgZXhwciktPmxvY2F0aW9uOworCQkJ YnJlYWs7CisJCWNhc2UgVF9DVEVDeWNsZUNsYXVzZToKKwkJCWxvYyA9ICgoY29uc3QgQ1RF Q3ljbGVDbGF1c2UgKikgZXhwciktPmxvY2F0aW9uOworCQkJYnJlYWs7CiAJCWNhc2UgVF9D b21tb25UYWJsZUV4cHI6CiAJCQlsb2MgPSAoKGNvbnN0IENvbW1vblRhYmxlRXhwciAqKSBl eHByKS0+bG9jYXRpb247CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGVi ZjNjZTM3YWEuLjc2YmEzYmEzMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMzA0NSw2 ICszMDQ1LDMzIEBAIF9vdXRXaXRoQ2xhdXNlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBXaXRo Q2xhdXNlICpub2RlKQogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KIAor c3RhdGljIHZvaWQKK19vdXRDVEVTZWFyY2hDbGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IENURVNlYXJjaENsYXVzZSAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIkNURVNFQVJD SENMQVVTRSIpOworCisJV1JJVEVfTk9ERV9GSUVMRChzZWFyY2hfY29sX2xpc3QpOworCVdS SVRFX0JPT0xfRklFTEQoc2VhcmNoX2JyZWFkdGhfZmlyc3QpOworCVdSSVRFX1NUUklOR19G SUVMRChzZWFyY2hfc2VxX2NvbHVtbik7CisJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRp b24pOworfQorCitzdGF0aWMgdm9pZAorX291dENURUN5Y2xlQ2xhdXNlKFN0cmluZ0luZm8g c3RyLCBjb25zdCBDVEVDeWNsZUNsYXVzZSAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUo IkNURUNZQ0xFQ0xBVVNFIik7CisKKwlXUklURV9OT0RFX0ZJRUxEKGN5Y2xlX2NvbF9saXN0 KTsKKwlXUklURV9TVFJJTkdfRklFTEQoY3ljbGVfbWFya19jb2x1bW4pOworCVdSSVRFX05P REVfRklFTEQoY3ljbGVfbWFya192YWx1ZSk7CisJV1JJVEVfTk9ERV9GSUVMRChjeWNsZV9t YXJrX2RlZmF1bHQpOworCVdSSVRFX09JRF9GSUVMRChjeWNsZV9tYXJrX3R5cGUpOworCVdS SVRFX0lOVF9GSUVMRChjeWNsZV9tYXJrX3R5cG1vZCk7CisJV1JJVEVfT0lEX0ZJRUxEKGN5 Y2xlX21hcmtfY29sbGF0aW9uKTsKKwlXUklURV9TVFJJTkdfRklFTEQoY3ljbGVfcGF0aF9j b2x1bW4pOworCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKK30KKwogc3RhdGlj IHZvaWQKIF9vdXRDb21tb25UYWJsZUV4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbW1v blRhYmxlRXhwciAqbm9kZSkKIHsKQEAgLTMwNjEsNiArMzA4OCw4IEBAIF9vdXRDb21tb25U YWJsZUV4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbW1vblRhYmxlRXhwciAqbm9kZSkK IAlXUklURV9OT0RFX0ZJRUxEKGN0ZWNvbHR5cGVzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGN0 ZWNvbHR5cG1vZHMpOwogCVdSSVRFX05PREVfRklFTEQoY3RlY29sY29sbGF0aW9ucyk7CisJ V1JJVEVfTk9ERV9GSUVMRChzZWFyY2hfY2xhdXNlKTsKKwlXUklURV9OT0RFX0ZJRUxEKGN5 Y2xlX2NsYXVzZSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00MjMxLDYgKzQyNjAsMTIgQEAg b3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQogCQkJY2FzZSBUX1dp dGhDbGF1c2U6CiAJCQkJX291dFdpdGhDbGF1c2Uoc3RyLCBvYmopOwogCQkJCWJyZWFrOwor CQkJY2FzZSBUX0NURVNlYXJjaENsYXVzZToKKwkJCQlfb3V0Q1RFU2VhcmNoQ2xhdXNlKHN0 ciwgb2JqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9DVEVDeWNsZUNsYXVzZToKKwkJCQlf b3V0Q1RFQ3ljbGVDbGF1c2Uoc3RyLCBvYmopOworCQkJCWJyZWFrOwogCQkJY2FzZSBUX0Nv bW1vblRhYmxlRXhwcjoKIAkJCQlfb3V0Q29tbW9uVGFibGVFeHByKHN0ciwgb2JqKTsKIAkJ CQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIv c3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggZWIwMTU4NGE1Zi4uNGU5Mjkx Njk1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIv c3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTQwOSw2ICs0MDksNDMgQEAgX3Jl YWRSb3dNYXJrQ2xhdXNlKHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKy8qCisgKiBfcmVh ZENURVNlYXJjaENsYXVzZQorICovCitzdGF0aWMgQ1RFU2VhcmNoQ2xhdXNlICoKK19yZWFk Q1RFU2VhcmNoQ2xhdXNlKHZvaWQpCit7CisJUkVBRF9MT0NBTFMoQ1RFU2VhcmNoQ2xhdXNl KTsKKworCVJFQURfTk9ERV9GSUVMRChzZWFyY2hfY29sX2xpc3QpOworCVJFQURfQk9PTF9G SUVMRChzZWFyY2hfYnJlYWR0aF9maXJzdCk7CisJUkVBRF9TVFJJTkdfRklFTEQoc2VhcmNo X3NlcV9jb2x1bW4pOworCVJFQURfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOworCisJUkVB RF9ET05FKCk7Cit9CisKKy8qCisgKiBfcmVhZENURUN5Y2xlQ2xhdXNlCisgKi8KK3N0YXRp YyBDVEVDeWNsZUNsYXVzZSAqCitfcmVhZENURUN5Y2xlQ2xhdXNlKHZvaWQpCit7CisJUkVB RF9MT0NBTFMoQ1RFQ3ljbGVDbGF1c2UpOworCisJUkVBRF9OT0RFX0ZJRUxEKGN5Y2xlX2Nv bF9saXN0KTsKKwlSRUFEX1NUUklOR19GSUVMRChjeWNsZV9tYXJrX2NvbHVtbik7CisJUkVB RF9OT0RFX0ZJRUxEKGN5Y2xlX21hcmtfdmFsdWUpOworCVJFQURfTk9ERV9GSUVMRChjeWNs ZV9tYXJrX2RlZmF1bHQpOworCVJFQURfT0lEX0ZJRUxEKGN5Y2xlX21hcmtfdHlwZSk7CisJ UkVBRF9JTlRfRklFTEQoY3ljbGVfbWFya190eXBtb2QpOworCVJFQURfT0lEX0ZJRUxEKGN5 Y2xlX21hcmtfY29sbGF0aW9uKTsKKwlSRUFEX1NUUklOR19GSUVMRChjeWNsZV9wYXRoX2Nv bHVtbik7CisJUkVBRF9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CisKKwlSRUFEX0RPTkUo KTsKK30KKwogLyoKICAqIF9yZWFkQ29tbW9uVGFibGVFeHByCiAgKi8KQEAgLTQyOCw2ICs0 NjUsOCBAQCBfcmVhZENvbW1vblRhYmxlRXhwcih2b2lkKQogCVJFQURfTk9ERV9GSUVMRChj dGVjb2x0eXBlcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKGN0ZWNvbHR5cG1vZHMpOwogCVJFQURf Tk9ERV9GSUVMRChjdGVjb2xjb2xsYXRpb25zKTsKKwlSRUFEX05PREVfRklFTEQoc2VhcmNo X2NsYXVzZSk7CisJUkVBRF9OT0RFX0ZJRUxEKGN5Y2xlX2NsYXVzZSk7CiAKIAlSRUFEX0RP TkUoKTsKIH0KQEAgLTI2NTIsNiArMjY5MSwxMCBAQCBwYXJzZU5vZGVTdHJpbmcodm9pZCkK IAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRXaW5kb3dDbGF1c2UoKTsKIAllbHNlIGlmIChNQVRD SCgiUk9XTUFSS0NMQVVTRSIsIDEzKSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRSb3dNYXJr Q2xhdXNlKCk7CisJZWxzZSBpZiAoTUFUQ0goIkNURVNFQVJDSENMQVVTRSIsIDE1KSkKKwkJ cmV0dXJuX3ZhbHVlID0gX3JlYWRDVEVTZWFyY2hDbGF1c2UoKTsKKwllbHNlIGlmIChNQVRD SCgiQ1RFQ1lDTEVDTEFVU0UiLCAxNCkpCisJCXJldHVybl92YWx1ZSA9IF9yZWFkQ1RFQ3lj bGVDbGF1c2UoKTsKIAllbHNlIGlmIChNQVRDSCgiQ09NTU9OVEFCTEVFWFBSIiwgMTUpKQog CQlyZXR1cm5fdmFsdWUgPSBfcmVhZENvbW1vblRhYmxlRXhwcigpOwogCWVsc2UgaWYgKE1B VENIKCJTRVRPUEVSQVRJT05TVE1UIiwgMTYpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggM2M3OGYy ZDFiNS4uMjgxODU5NTNmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC00OTcsNiArNDk3LDcgQEAg c3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExp c3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxsaXN0Pglyb3cgZXhwbGljaXRf cm93IGltcGxpY2l0X3JvdyB0eXBlX2xpc3QgYXJyYXlfZXhwcl9saXN0CiAldHlwZSA8bm9k ZT4JY2FzZV9leHByIGNhc2VfYXJnIHdoZW5fY2xhdXNlIGNhc2VfZGVmYXVsdAogJXR5cGUg PGxpc3Q+CXdoZW5fY2xhdXNlX2xpc3QKKyV0eXBlIDxub2RlPglvcHRfc2VhcmNoX2NsYXVz ZSBvcHRfY3ljbGVfY2xhdXNlCiAldHlwZSA8aXZhbD4Jc3ViX3R5cGUgb3B0X21hdGVyaWFs aXplZAogJXR5cGUgPHZhbHVlPglOdW1lcmljT25seQogJXR5cGUgPGxpc3Q+CU51bWVyaWNP bmx5X2xpc3QKQEAgLTYzMiw3ICs2MzMsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2 ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogCUFTU0VSVElPTiBBU1NJR05NRU5UIEFTWU1NRVRSSUMgQVQgQVRUQUNIIEFUVFJJQlVU RSBBVVRIT1JJWkFUSU9OCiAKIAlCQUNLV0FSRCBCRUZPUkUgQkVHSU5fUCBCRVRXRUVOIEJJ R0lOVCBCSU5BUlkgQklUCi0JQk9PTEVBTl9QIEJPVEggQlkKKwlCT09MRUFOX1AgQk9USCBC UkVBRFRIIEJZCiAKIAlDQUNIRSBDQUxMIENBTExFRCBDQVNDQURFIENBU0NBREVEIENBU0Ug Q0FTVCBDQVRBTE9HX1AgQ0hBSU4gQ0hBUl9QCiAJQ0hBUkFDVEVSIENIQVJBQ1RFUklTVElD UyBDSEVDSyBDSEVDS1BPSU5UIENMQVNTIENMT1NFCkBAIC02NDQsNyArNjQ1LDcgQEAgc3Rh dGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3Qg KmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlDVVJSRU5UX1RJTUUgQ1VSUkVOVF9USU1FU1RB TVAgQ1VSUkVOVF9VU0VSIENVUlNPUiBDWUNMRQogCiAJREFUQV9QIERBVEFCQVNFIERBWV9Q IERFQUxMT0NBVEUgREVDIERFQ0lNQUxfUCBERUNMQVJFIERFRkFVTFQgREVGQVVMVFMKLQlE RUZFUlJBQkxFIERFRkVSUkVEIERFRklORVIgREVMRVRFX1AgREVMSU1JVEVSIERFTElNSVRF UlMgREVQRU5EUyBERVNDCisJREVGRVJSQUJMRSBERUZFUlJFRCBERUZJTkVSIERFTEVURV9Q IERFTElNSVRFUiBERUxJTUlURVJTIERFUEVORFMgREVQVEggREVTQwogCURFVEFDSCBESUNU SU9OQVJZIERJU0FCTEVfUCBESVNDQVJEIERJU1RJTkNUIERPIERPQ1VNRU5UX1AgRE9NQUlO X1AKIAlET1VCTEVfUCBEUk9QCiAKQEAgLTExNTQ5LDggKzExNTUwLDYgQEAgc2ltcGxlX3Nl bGVjdDoKICAqIFdJVEggWyBSRUNVUlNJVkUgXSA8cXVlcnkgbmFtZT4gWyAoPGNvbHVtbj4s Li4uKSBdCiAgKgkJQVMgKHF1ZXJ5KSBbIFNFQVJDSCBvciBDWUNMRSBjbGF1c2UgXQogICoK LSAqIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoZSBTRUFSQ0ggb3IgQ1lDTEUgY2xh dXNlLgotICoKICAqIFJlY29nbml6aW5nIFdJVEhfTEEgaGVyZSBhbGxvd3MgYSBDVEUgdG8g YmUgbmFtZWQgVElNRSBvciBPUkRJTkFMSVRZLgogICovCiB3aXRoX2NsYXVzZToKQEAgLTEx NTgyLDEzICsxMTU4MSwxNSBAQCBjdGVfbGlzdDoKIAkJfCBjdGVfbGlzdCAnLCcgY29tbW9u X3RhYmxlX2V4cHIJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KIAkJOwogCi1jb21tb25f dGFibGVfZXhwcjogIG5hbWUgb3B0X25hbWVfbGlzdCBBUyBvcHRfbWF0ZXJpYWxpemVkICco JyBQcmVwYXJhYmxlU3RtdCAnKScKK2NvbW1vbl90YWJsZV9leHByOiAgbmFtZSBvcHRfbmFt ZV9saXN0IEFTIG9wdF9tYXRlcmlhbGl6ZWQgJygnIFByZXBhcmFibGVTdG10ICcpJyBvcHRf c2VhcmNoX2NsYXVzZSBvcHRfY3ljbGVfY2xhdXNlCiAJCQl7CiAJCQkJQ29tbW9uVGFibGVF eHByICpuID0gbWFrZU5vZGUoQ29tbW9uVGFibGVFeHByKTsKIAkJCQluLT5jdGVuYW1lID0g JDE7CiAJCQkJbi0+YWxpYXNjb2xuYW1lcyA9ICQyOwogCQkJCW4tPmN0ZW1hdGVyaWFsaXpl ZCA9ICQ0OwogCQkJCW4tPmN0ZXF1ZXJ5ID0gJDY7CisJCQkJbi0+c2VhcmNoX2NsYXVzZSA9 IGNhc3ROb2RlKENURVNlYXJjaENsYXVzZSwgJDgpOworCQkJCW4tPmN5Y2xlX2NsYXVzZSA9 IGNhc3ROb2RlKENURUN5Y2xlQ2xhdXNlLCAkOSk7CiAJCQkJbi0+bG9jYXRpb24gPSBAMTsK IAkJCQkkJCA9IChOb2RlICopIG47CiAJCQl9CkBAIC0xMTYwMCw2ICsxMTYwMSw0OSBAQCBv cHRfbWF0ZXJpYWxpemVkOgogCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IENURU1hdGVy aWFsaXplRGVmYXVsdDsgfQogCQk7CiAKK29wdF9zZWFyY2hfY2xhdXNlOgorCQlTRUFSQ0gg REVQVEggRklSU1RfUCBCWSBjb2x1bW5MaXN0IFNFVCBDb2xJZAorCQkJeworCQkJCUNURVNl YXJjaENsYXVzZSAqbiA9IG1ha2VOb2RlKENURVNlYXJjaENsYXVzZSk7CisJCQkJbi0+c2Vh cmNoX2NvbF9saXN0ID0gJDU7CisJCQkJbi0+c2VhcmNoX2JyZWFkdGhfZmlyc3QgPSBmYWxz ZTsKKwkJCQluLT5zZWFyY2hfc2VxX2NvbHVtbiA9ICQ3OworCQkJCW4tPmxvY2F0aW9uID0g QDE7CisJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQl8IFNFQVJDSCBCUkVBRFRIIEZJ UlNUX1AgQlkgY29sdW1uTGlzdCBTRVQgQ29sSWQKKwkJCXsKKwkJCQlDVEVTZWFyY2hDbGF1 c2UgKm4gPSBtYWtlTm9kZShDVEVTZWFyY2hDbGF1c2UpOworCQkJCW4tPnNlYXJjaF9jb2xf bGlzdCA9ICQ1OworCQkJCW4tPnNlYXJjaF9icmVhZHRoX2ZpcnN0ID0gdHJ1ZTsKKwkJCQlu LT5zZWFyY2hfc2VxX2NvbHVtbiA9ICQ3OworCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQl8IC8qRU1QVFkqLworCQkJeworCQkJCSQkID0g TlVMTDsKKwkJCX0KKwkJOworCitvcHRfY3ljbGVfY2xhdXNlOgorCQlDWUNMRSBjb2x1bW5M aXN0IFNFVCBDb2xJZCBUTyBBZXhwckNvbnN0IERFRkFVTFQgQWV4cHJDb25zdCBVU0lORyBD b2xJZAorCQkJeworCQkJCUNURUN5Y2xlQ2xhdXNlICpuID0gbWFrZU5vZGUoQ1RFQ3ljbGVD bGF1c2UpOworCQkJCW4tPmN5Y2xlX2NvbF9saXN0ID0gJDI7CisJCQkJbi0+Y3ljbGVfbWFy a19jb2x1bW4gPSAkNDsKKwkJCQluLT5jeWNsZV9tYXJrX3ZhbHVlID0gJDY7CisJCQkJbi0+ Y3ljbGVfbWFya19kZWZhdWx0ID0gJDg7CisJCQkJbi0+Y3ljbGVfcGF0aF9jb2x1bW4gPSAk MTA7CisJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkkJCA9IChOb2RlICopIG47CisJCQl9 CisJCXwgLypFTVBUWSovCisJCQl7CisJCQkJJCQgPSBOVUxMOworCQkJfQorCQk7CisKIG9w dF93aXRoX2NsYXVzZToKIAkJd2l0aF9jbGF1c2UJCQkJCQkJCXsgJCQgPSAkMTsgfQogCQl8 IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5VTEw7IH0KQEAgLTE1Mjg0LDYgKzE1MzI4LDcg QEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBCQUNLV0FSRAogCQkJfCBCRUZPUkUKIAkJ CXwgQkVHSU5fUAorCQkJfCBCUkVBRFRICiAJCQl8IEJZCiAJCQl8IENBQ0hFCiAJCQl8IENB TEwKQEAgLTE1MzI4LDYgKzE1MzczLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBE RUxJTUlURVIKIAkJCXwgREVMSU1JVEVSUwogCQkJfCBERVBFTkRTCisJCQl8IERFUFRICiAJ CQl8IERFVEFDSAogCQkJfCBESUNUSU9OQVJZCiAJCQl8IERJU0FCTEVfUApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2N0ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2N0ZS5jCmluZGV4IDFmY2E3NDg1Y2EuLjlhYzNjNDYyZjEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jdGUuYworKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfY3RlLmMKQEAgLTE4LDcgKzE4LDEwIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFy c2VyL2FuYWx5emUuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCisjaW5j bHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vf Y3RlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2V4cHIuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCkBAIC0zMzQs NiArMzM3LDExNSBAQCBhbmFseXplQ1RFKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ29tbW9uVGFi bGVFeHByICpjdGUpCiAJCWlmIChsY3R5cCAhPSBOVUxMIHx8IGxjdHlwbW9kICE9IE5VTEwg fHwgbGNjb2xsICE9IE5VTEwpCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KIAkJCWVsb2coRVJS T1IsICJ3cm9uZyBudW1iZXIgb2Ygb3V0cHV0IGNvbHVtbnMgaW4gV0lUSCIpOwogCX0KKwor CWlmIChjdGUtPnNlYXJjaF9jbGF1c2UpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKwkJTGlz dAkgICAqc2VlbiA9IE5JTDsKKworCQlpZiAoIWN0ZS0+Y3RlcmVjdXJzaXZlKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJ CQkgZXJybXNnKCJXSVRIIHF1ZXJ5IGlzIG5vdCByZWN1cnNpdmUiKSwKKwkJCQkJIHBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsIGN0ZS0+bG9jYXRpb24pKSk7CisKKwkJZm9yZWFjaChs YywgY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfY29sX2xpc3QpCisJCXsKKwkJCVZhbHVl CSAgICpjb2xuYW1lID0gbGZpcnN0KGxjKTsKKworCQkJaWYgKCFsaXN0X21lbWJlcihjdGUt PmN0ZWNvbG5hbWVzLCBjb2xuYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygic2VhcmNoIGNv bHVtbiBcIiVzXCIgbm90IGluIFdJVEggcXVlcnkgY29sdW1uIGxpc3QiLAorCQkJCQkJCQlz dHJWYWwoY29sbmFtZSkpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGN0 ZS0+c2VhcmNoX2NsYXVzZS0+bG9jYXRpb24pKSk7CisKKwkJCWlmIChsaXN0X21lbWJlcihz ZWVuLCBjb2xuYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9EVVBMSUNBVEVfQ09MVU1OKSwKKwkJCQkJCSBlcnJtc2coInNlYXJjaCBjb2x1bW4g XCIlc1wiIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIsCisJCQkJCQkJCXN0clZhbChjb2xu YW1lKSksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgY3RlLT5zZWFyY2hf Y2xhdXNlLT5sb2NhdGlvbikpKTsKKwkJCXNlZW4gPSBsYXBwZW5kKHNlZW4sIGNvbG5hbWUp OworCQl9CisKKwkJaWYgKGxpc3RfbWVtYmVyKGN0ZS0+Y3RlY29sbmFtZXMsIG1ha2VTdHJp bmcoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbikpKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVy cm1zZygic2VhcmNoIHNlcXVlbmNlIGNvbHVtbiBuYW1lIFwiJXNcIiBhbHJlYWR5IHVzZWQg aW4gV0lUSCBxdWVyeSBjb2x1bW4gbGlzdCIsCisJCQkJCQkgICBjdGUtPnNlYXJjaF9jbGF1 c2UtPnNlYXJjaF9zZXFfY29sdW1uKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0 ZSwgY3RlLT5zZWFyY2hfY2xhdXNlLT5sb2NhdGlvbikpOworCX0KKworCWlmIChjdGUtPmN5 Y2xlX2NsYXVzZSkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCQlMaXN0CSAgICpzZWVuID0g TklMOworCQlpbnQJCQl0eXBtb2QxOworCQlpbnQJCQl0eXBtb2QyOworCisJCWlmICghY3Rl LT5jdGVyZWN1cnNpdmUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coIldJVEggcXVlcnkgaXMgbm90IHJl Y3Vyc2l2ZSIpLAorCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgY3RlLT5sb2Nh dGlvbikpKTsKKworCQlmb3JlYWNoKGxjLCBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfY29s X2xpc3QpCisJCXsKKwkJCVZhbHVlCSAgICpjb2xuYW1lID0gbGZpcnN0KGxjKTsKKworCQkJ aWYgKCFsaXN0X21lbWJlcihjdGUtPmN0ZWNvbG5hbWVzLCBjb2xuYW1lKSkKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJ CQkJIGVycm1zZygiY3ljbGUgY29sdW1uIFwiJXNcIiBub3QgaW4gV0lUSCBxdWVyeSBjb2x1 bW4gbGlzdCIsCisJCQkJCQkJCXN0clZhbChjb2xuYW1lKSksCisJCQkJCQkgcGFyc2VyX2Vy cnBvc2l0aW9uKHBzdGF0ZSwgY3RlLT5jeWNsZV9jbGF1c2UtPmxvY2F0aW9uKSkpOworCisJ CQlpZiAobGlzdF9tZW1iZXIoc2VlbiwgY29sbmFtZSkpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX0NPTFVNTiksCisJCQkJCQkgZXJy bXNnKCJjeWNsZSBjb2x1bW4gXCIlc1wiIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIsCisJ CQkJCQkJCXN0clZhbChjb2xuYW1lKSksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwgY3RlLT5jeWNsZV9jbGF1c2UtPmxvY2F0aW9uKSkpOworCQkJc2VlbiA9IGxhcHBl bmQoc2VlbiwgY29sbmFtZSk7CisJCX0KKworCQlpZiAobGlzdF9tZW1iZXIoY3RlLT5jdGVj b2xuYW1lcywgbWFrZVN0cmluZyhjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1 bW4pKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCQllcnJtc2coImN5Y2xlIGNvbHVtbiBuYW1lIFwiJXNcIiBhbHJlYWR5 IHVzZWQgaW4gV0lUSCBxdWVyeSBjb2x1bW4gbGlzdCIsCisJCQkJCQkgICBjdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1bW4pLAorCQkJCQlwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCBjdGUtPmN5Y2xlX2NsYXVzZS0+bG9jYXRpb24pKTsKKworCQkvLyBUT0RPOiBu ZWVkcyBuZXcgRVhQUl9LSU5EXyosIG9yIGJ5cGFzcyB0cmFuc2Zvcm1FeHByKCkgYW5kIGNh bGwKKwkJLy8gbWFrZV9jb25zdCgpIGRpcmVjdGx5CisJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5j eWNsZV9tYXJrX3ZhbHVlID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGN0ZS0+Y3ljbGVfY2xh dXNlLT5jeWNsZV9tYXJrX3ZhbHVlLCBFWFBSX0tJTkRfT1RIRVIpOworCQljdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya19kZWZhdWx0ID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGN0 ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQsIEVYUFJfS0lORF9PVEhFUik7 CisJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cGUgPSBzZWxlY3RfY29tbW9u X3R5cGUocHN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCWxpc3RfbWFrZTIoY3RlLT5jeWNsZV9j bGF1c2UtPmN5Y2xlX21hcmtfdmFsdWUsCisJCQkJCQkJCQkJCQkJCQkJCQkgICBjdGUtPmN5 Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19kZWZhdWx0KSwKKwkJCQkJCQkJCQkJCQkJCQkiQ1lD TEUiLCBOVUxMKTsKKwkJY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdmFsdWUgPSBj b2VyY2VfdG9fY29tbW9uX3R5cGUocHN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCQljdGUtPmN5 Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya192YWx1ZSwKKwkJCQkJCQkJCQkJCQkJCQkJY3RlLT5j eWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSwKKwkJCQkJCQkJCQkJCQkJCQkJIkNZQ0xF L1NFVC9UTyIpOworCQljdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19kZWZhdWx0ID0g Y29lcmNlX3RvX2NvbW1vbl90eXBlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCQkJCQkJICBjdGUt PmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19kZWZhdWx0LAorCQkJCQkJCQkJCQkJCQkJCQkg IGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cGUsCisJCQkJCQkJCQkJCQkJCQkJ CSAgIkNZQ0xFL1NFVC9ERUZBVUxUIik7CisKKwkJdHlwbW9kMSA9IGV4cHJUeXBtb2QoY3Rl LT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdmFsdWUpOworCQl0eXBtb2QyID0gZXhwclR5 cG1vZChjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19kZWZhdWx0KTsKKwkJaWYgKHR5 cG1vZDEgPT0gdHlwbW9kMikKKwkJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5 cG1vZCA9IHR5cG1vZDE7CisJCWVsc2UKKwkJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9t YXJrX3R5cG1vZCA9IC0xOworCisJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2Nv bGxhdGlvbiA9IHNlbGVjdF9jb21tb25fY29sbGF0aW9uKHBzdGF0ZSwKKwkJCQkJCQkJCQkJ CQkJCQkJCSAgbGlzdF9tYWtlMihjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya192YWx1 ZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFy a19kZWZhdWx0KSwKKwkJCQkJCQkJCQkJCQkJCQkJCSAgdHJ1ZSk7CisJfQogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMgYi9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwppbmRleCBiODc1YTUwNjQ2Li42N2Ey N2MwYmIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24u YworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwpAQCAtMjIzNyw5 ICsyMjM3LDkgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yQ1RFKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJ2LT5sb2NhdGlvbikpKTsK IAl9CiAKLQlydGUtPmNvbHR5cGVzID0gY3RlLT5jdGVjb2x0eXBlczsKLQlydGUtPmNvbHR5 cG1vZHMgPSBjdGUtPmN0ZWNvbHR5cG1vZHM7Ci0JcnRlLT5jb2xjb2xsYXRpb25zID0gY3Rl LT5jdGVjb2xjb2xsYXRpb25zOworCXJ0ZS0+Y29sdHlwZXMgPSBsaXN0X2NvcHkoY3RlLT5j dGVjb2x0eXBlcyk7CisJcnRlLT5jb2x0eXBtb2RzID0gbGlzdF9jb3B5KGN0ZS0+Y3RlY29s dHlwbW9kcyk7CisJcnRlLT5jb2xjb2xsYXRpb25zID0gbGlzdF9jb3B5KGN0ZS0+Y3RlY29s Y29sbGF0aW9ucyk7CiAKIAlydGUtPmFsaWFzID0gYWxpYXM7CiAJaWYgKGFsaWFzKQpAQCAt MjI2NCw2ICsyMjY0LDMwIEBAIGFkZFJhbmdlVGFibGVFbnRyeUZvckNURShQYXJzZVN0YXRl ICpwc3RhdGUsCiAKIAlydGUtPmVyZWYgPSBlcmVmOwogCisJaWYgKGN0ZS0+c2VhcmNoX2Ns YXVzZSkKKwl7CisJCXJ0ZS0+ZXJlZi0+Y29sbmFtZXMgPSBsYXBwZW5kKHJ0ZS0+ZXJlZi0+ Y29sbmFtZXMsIG1ha2VTdHJpbmcoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2Nv bHVtbikpOworCQlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfYnJlYWR0aF9maXJz dCkKKwkJCXJ0ZS0+Y29sdHlwZXMgPSBsYXBwZW5kX29pZChydGUtPmNvbHR5cGVzLCBSRUNP UkRPSUQpOworCQllbHNlCisJCQlydGUtPmNvbHR5cGVzID0gbGFwcGVuZF9vaWQocnRlLT5j b2x0eXBlcywgUkVDT1JEQVJSQVlPSUQpOworCQlydGUtPmNvbHR5cG1vZHMgPSBsYXBwZW5k X2ludChydGUtPmNvbHR5cG1vZHMsIC0xKTsKKwkJcnRlLT5jb2xjb2xsYXRpb25zID0gbGFw cGVuZF9vaWQocnRlLT5jb2xjb2xsYXRpb25zLCBJbnZhbGlkT2lkKTsKKwl9CisKKwlpZiAo Y3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQlydGUtPmVyZWYtPmNvbG5hbWVzID0gbGFwcGVu ZChydGUtPmVyZWYtPmNvbG5hbWVzLCBtYWtlU3RyaW5nKGN0ZS0+Y3ljbGVfY2xhdXNlLT5j eWNsZV9tYXJrX2NvbHVtbikpOworCQlydGUtPmNvbHR5cGVzID0gbGFwcGVuZF9vaWQocnRl LT5jb2x0eXBlcywgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSk7CisJCXJ0 ZS0+Y29sdHlwbW9kcyA9IGxhcHBlbmRfaW50KHJ0ZS0+Y29sdHlwbW9kcywgY3RlLT5jeWNs ZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwbW9kKTsKKwkJcnRlLT5jb2xjb2xsYXRpb25zID0g bGFwcGVuZF9vaWQocnRlLT5jb2xjb2xsYXRpb25zLCBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3lj bGVfbWFya19jb2xsYXRpb24pOworCisJCXJ0ZS0+ZXJlZi0+Y29sbmFtZXMgPSBsYXBwZW5k KHJ0ZS0+ZXJlZi0+Y29sbmFtZXMsIG1ha2VTdHJpbmcoY3RlLT5jeWNsZV9jbGF1c2UtPmN5 Y2xlX3BhdGhfY29sdW1uKSk7CisJCXJ0ZS0+Y29sdHlwZXMgPSBsYXBwZW5kX29pZChydGUt PmNvbHR5cGVzLCBSRUNPUkRBUlJBWU9JRCk7CisJCXJ0ZS0+Y29sdHlwbW9kcyA9IGxhcHBl bmRfaW50KHJ0ZS0+Y29sdHlwbW9kcywgLTEpOworCQlydGUtPmNvbGNvbGxhdGlvbnMgPSBs YXBwZW5kX29pZChydGUtPmNvbGNvbGxhdGlvbnMsIEludmFsaWRPaWQpOworCX0KKwogCS8q CiAJICogU2V0IGZsYWdzIGFuZCBhY2Nlc3MgcGVybWlzc2lvbnMuCiAJICoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV90YXJnZXQuYwppbmRleCA1NjZjNTE3ODM3Li43MDEyMGJiNTM3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCkBAIC00MDksMTAgKzQwOSwyNSBAQCBtYXJr VGFyZ2V0TGlzdE9yaWdpbihQYXJzZVN0YXRlICpwc3RhdGUsIFRhcmdldEVudHJ5ICp0bGUs CiAJCQl7CiAJCQkJQ29tbW9uVGFibGVFeHByICpjdGUgPSBHZXRDVEVGb3JSVEUocHN0YXRl LCBydGUsIG5ldGxldmVsc3VwKTsKIAkJCQlUYXJnZXRFbnRyeSAqc3RlOworCQkJCUxpc3QJ ICAgKnRsID0gR2V0Q1RFVGFyZ2V0TGlzdChjdGUpOworCQkJCWludAkJCWV4dHJhX2NvbHMg PSAwOworCisJCQkJLyoKKwkJCQkgKiBSVEUgZm9yIENURSB3aWxsIGFscmVhZHkgaGF2ZSB0 aGUgc2VhcmNoIGFuZCBjeWNsZSBjb2x1bW5zCisJCQkJICogYWRkZWQsIGJ1dCB0aGUgc3Vi cXVlcnkgd29uJ3QsIHNvIHNraXAgbG9va2luZyB0aG9zZSB1cC4KKwkJCQkgKi8KKwkJCQlp ZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCQkJCQlleHRyYV9jb2xzICs9IDE7CisJCQkJaWYg KGN0ZS0+Y3ljbGVfY2xhdXNlKQorCQkJCQlleHRyYV9jb2xzICs9IDI7CisJCQkJaWYgKGV4 dHJhX2NvbHMgJiYKKwkJCQkJYXR0bnVtID4gbGlzdF9sZW5ndGgodGwpICYmCisJCQkJCWF0 dG51bSA8PSBsaXN0X2xlbmd0aCh0bCkgKyBleHRyYV9jb2xzKQorCQkJCQlicmVhazsKIAot CQkJCXN0ZSA9IGdldF90bGVfYnlfcmVzbm8oR2V0Q1RFVGFyZ2V0TGlzdChjdGUpLCBhdHRu dW0pOworCQkJCXN0ZSA9IGdldF90bGVfYnlfcmVzbm8odGwsIGF0dG51bSk7CiAJCQkJaWYg KHN0ZSA9PSBOVUxMIHx8IHN0ZS0+cmVzanVuaykKLQkJCQkJZWxvZyhFUlJPUiwgInN1YnF1 ZXJ5ICVzIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVkIiwKKwkJCQkJZWxvZyhFUlJPUiwg IkNURSAlcyBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZSAlZCIsCiAJCQkJCQkgcnRlLT5lcmVm LT5hbGlhc25hbWUsIGF0dG51bSk7CiAJCQkJdGxlLT5yZXNvcmlndGJsID0gc3RlLT5yZXNv cmlndGJsOwogCQkJCXRsZS0+cmVzb3JpZ2NvbCA9IHN0ZS0+cmVzb3JpZ2NvbDsKQEAgLTE2 MDYsNyArMTYyMSw3IEBAIGV4cGFuZFJlY29yZFZhcmlhYmxlKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgVmFyICp2YXIsIGludCBsZXZlbHN1cCkKIAogCQkJCXN0ZSA9IGdldF90bGVfYnlfcmVz bm8oR2V0Q1RFVGFyZ2V0TGlzdChjdGUpLCBhdHRudW0pOwogCQkJCWlmIChzdGUgPT0gTlVM TCB8fCBzdGUtPnJlc2p1bmspCi0JCQkJCWVsb2coRVJST1IsICJzdWJxdWVyeSAlcyBkb2Vz IG5vdCBoYXZlIGF0dHJpYnV0ZSAlZCIsCisJCQkJCWVsb2coRVJST1IsICJDVEUgJXMgZG9l cyBub3QgaGF2ZSBhdHRyaWJ1dGUgJWQiLAogCQkJCQkJIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1l LCBhdHRudW0pOwogCQkJCWV4cHIgPSAoTm9kZSAqKSBzdGUtPmV4cHI7CiAJCQkJaWYgKElz QShleHByLCBWYXIpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRl SGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCmluZGV4 IGZlNzc3YzMxMDMuLjMxNDZlOTM4NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3Jp dGUvcmV3cml0ZUhhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVI YW5kbGVyLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5o IgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5k ZW5jeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3JfZC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNp bmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgpAQCAtMzksOCArNDAsMTAgQEAKICNpbmNsdWRl ICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInJld3JpdGUvcm93c2VjdXJp dHkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2Zt Z3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIAogCiAvKiBXZSB1c2Ug YSBsaXN0IG9mIHRoZXNlIHRvIGRldGVjdCByZWN1cnNpb24gaW4gUmV3cml0ZVF1ZXJ5ICov CkBAIC0zNDQyLDYgKzM0NDUsNjU1IEBAIHJld3JpdGVUYXJnZXRWaWV3KFF1ZXJ5ICpwYXJz ZXRyZWUsIFJlbGF0aW9uIHZpZXcpCiB9CiAKIAorLyotLS0tLS0tLS0tCisgKiBSZXdyaXRl IGEgQ1RFIHdpdGggU0VBUkNIIG9yIENZQ0xFIGNsYXVzZQorICoKKyAqIENvbnNpZGVyIGEg Q1RFIGxpa2UKKyAqCisgKiBXSVRIIFJFQ1VSU0lWRSBjdGVuYW1lIChjb2wxLCBjb2wyLCBj b2wzKSBBUyAoCisgKiAgICAgcXVlcnkxCisgKiAgIFVOSU9OIFtBTExdCisgKiAgICAgU0VM RUNUIHRyb3NsIEZST00gY3RlbmFtZQorICogKQorICoKKyAqIFdpdGggYSBzZWFyY2ggY2xh dXNlCisgKgorICogU0VBUkNIIEJSRUFEVEggRklSU1QgQlkgY29sMSwgY29sMiBTRVQgc3Fj CisgKgorICogdGhlIENURSBpcyByZXdyaXR0ZW4gdG8KKyAqCisgKiBXSVRIIFJFQ1VSU0lW RSBjdGVuYW1lIChjb2wxLCBjb2wyLCBjb2wzLCBzcWMpIEFTICgKKyAqICAgICBTRUxFQ1Qg Y29sMSwgY29sMiwgY29sMywgICAgICAgICAgICAgICAtLSBvcmlnaW5hbCBXSVRIIGNvbHVt biBsaXN0CisgKiAgICAgICAgICAgIFJPVygwLCBjb2wxLCBjb2wyKSAgICAgICAgICAgICAg LS0gaW5pdGlhbCByb3cgb2Ygc2VhcmNoIGNvbHVtbnMKKyAqICAgICAgIEZST00gKHF1ZXJ5 MSkgIipUTE9DUk4qIiAoY29sMSwgY29sMiwgY29sMykKKyAqICAgVU5JT04gW0FMTF0KKyAq ICAgICBTRUxFQ1QgY29sMSwgY29sMiwgY29sMywgICAgICAgICAgICAgICAtLSBzYW1lIGFz IGFib3ZlCisgKiAgICAgICAgICAgIFJPVyhzcWMubGV2ZWwgKyAxLCBjb2wxLCBjb2wyKSAg LS0gY291bnQgbGV2ZWxzCisgKiAgICAgICBGUk9NIChTRUxFQ1QgdHJvc2wsIGN0ZW5hbWUu c3FjIEZST00gY3RlbmFtZSkgIipUUk9DUk4qIiAoY29sMSwgY29sMiwgY29sMywgc3FjKQor ICogKQorICoKKyAqIChUaGlzIGlzbid0IHF1aXRlIGxlZ2FsIFNRTDogc3FjLmxldmVsIGlz IG1lYW50IHRvIHJlZmVyIHRvIHRoZSBmaXJzdAorICogY29sdW1uIG9mIHNxYywgd2hpY2gg aGFzIGEgcm93IHR5cGUsIGJ1dCB0aGUgZmllbGQgbmFtZXMgYXJlIG5vdCBkZWZpbmVkCisg KiBoZXJlLiAgUmVwcmVzZW50aW5nIHRoaXMgcHJvcGVybHkgaW4gU1FMIHdvdWxkIGJlIG1v cmUgY29tcGxpY2F0ZWQgKGFuZCB0aGUKKyAqIFNRTCBzdGFuZGFyZCBhY3R1YWxseSBkb2Vz IGl0IGluIHRoYXQgbW9yZSBjb21wbGljYXRlZCB3YXkpLCBidXQgdGhlCisgKiBpbnRlcm5h bCByZXByZXNlbnRhdGlvbiBhbGxvd3MgdXMgdG8gY29uc3RydWN0IGl0IHRoaXMgd2F5LikK KyAqCisgKiBXaXRoIGEgc2VhcmNoIGNhbHVzZQorICoKKyAqIFNFQVJDSCBERVBUSCBGSVJT VCBCWSBjb2wxLCBjb2wyIFNFVCBzcWMKKyAqCisgKiB0aGUgQ1RFIGlzIHJld3JpdHRlbiB0 bworICoKKyAqIFdJVEggUkVDVVJTSVZFIGN0ZW5hbWUgKGNvbDEsIGNvbDIsIGNvbDMsIHNx YykgQVMgKAorICogICAgIFNFTEVDVCBjb2wxLCBjb2wyLCBjb2wzLCAgICAgICAgICAgICAg IC0tIG9yaWdpbmFsIFdJVEggY29sdW1uIGxpc3QKKyAqICAgICAgICAgICAgQVJSQVlbUk9X KGNvbDEsIGNvbDIpXSAgICAgICAgICAtLSBpbml0aWFsIHJvdyBvZiBzZWFyY2ggY29sdW1u cworICogICAgICAgRlJPTSAocXVlcnkxKSAiKlRMT0NSTioiIChjb2wxLCBjb2wyLCBjb2wz KQorICogICBVTklPTiBbQUxMXQorICogICAgIFNFTEVDVCBjb2wxLCBjb2wyLCBjb2wzLCAg ICAgICAgICAgICAgIC0tIHNhbWUgYXMgYWJvdmUKKyAqICAgICAgICAgICAgc3FjIHx8IEFS UkFZW1JPVyhjb2wxLCBjb2wyKV0gICAtLSByZWNvcmQgcm93cyBzZWVuCisgKiAgICAgICBG Uk9NIChTRUxFQ1QgdHJvc2wsIGN0ZW5hbWUuc3FjIEZST00gY3RlbmFtZSkgIipUUk9DUk4q IiAoY29sMSwgY29sMiwgY29sMywgc3FjKQorICogKQorICoKKyAqIFdpdGggYSBjeWNsZSBj bGF1c2UKKyAqCisgKiBDWUNMRSBjb2wxLCBjb2wyIFNFVCBjbWMgVE8gJ1nigJkgREVGQVVM VCDigJlO4oCZIFVTSU5HIGNwYQorICoKKyAqIChjbWMgPSBjeWNsZSBtYXJrIGNvbHVtbiwg Y3BhID0gY3ljbGUgcGF0aCkgdGhlIENURSBpcyByZXdyaXR0ZW4gdG8KKyAqCisgKiBXSVRI IFJFQ1VSU0lWRSBjdGVuYW1lIChjb2wxLCBjb2wyLCBjb2wzLCBjbWMsIGNwYSkgQVMgKAor ICogICAgIFNFTEVDVCBjb2wxLCBjb2wyLCBjb2wzLCAgICAgICAgICAgICAgIC0tIG9yaWdp bmFsIFdJVEggY29sdW1uIGxpc3QKKyAqICAgICAgICAgICAg4oCZTuKAmSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLS0gY3ljbGUgbWFyayBkZWZhdWx0CisgKiAgICAgICAgICAg IEFSUkFZW1JPVyhjb2wxLCBjb2wyKV0gICAgICAgICAgLS0gaW5pdGlhbCByb3cgb2YgY3lj bGUgY29sdW1ucworICogICAgICAgRlJPTSAocXVlcnkxKSAiKlRMT0NSTioiIChjb2wxLCBj b2wyLCBjb2wzKQorICogICBVTklPTiBbQUxMXQorICogICAgIFNFTEVDVCBjb2wxLCBjb2wy LCBjb2wzLCAgICAgICAgICAgICAgIC0tIHNhbWUgYXMgYWJvdmUKKyAqICAgICAgICAgICAg Q0FTRSBXSEVOIFJPVyhjb2wxLCBjb2wyKSA9IEFOWSAoQVJSQVlbY3BhXSkgVEhFTiAnWScg RUxTRSDigJlO4oCZIEVORCwgIC0tIGNvbXB1dGUgY3ljbGUgbWFyayBjb2x1bW4KKyAqICAg ICAgICAgICAgY3BhIHx8IEFSUkFZW1JPVyhjb2wxLCBjb2wyKV0gICAtLSByZWNvcmQgcm93 cyBzZWVuCisgKiAgICAgICBGUk9NIChTRUxFQ1QgdHJvc2wsIGN0ZW5hbWUuY21jLCBjdGVu YW1lLmNwYSBGUk9NIGN0ZW5hbWUpICIqVFJPQ1JOKiIgKGNvbDEsIGNvbDIsIGNvbDMsIGNt YywgY3BhKQorICogICAgICAgV0hFUkUgY21jIDw+ICdZJworICogKQorICoKKyAqIFRoZSBl eHByZXNzaW9uIHRvIGNvbXB1dGUgdGhlIGN5Y2xlIG1hcmsgY29sdW1uIGluIHRoZSByaWdo dC1oYW5kIHF1ZXJ5IGlzCisgKiB3cml0dGVuIGFzCisgKgorICogQ0FTRSBXSEVOIFJPVyhj b2wxLCBjb2wyKSBJTiAoU0VMRUNUIHAuKiBGUk9NIFRBQkxFKGNwYSkgcCkgVEhFTiBjbXYg RUxTRSBjbWQgRU5ECisgKgorICogaW4gdGhlIFNRTCBzdGFuZGFyZCwgYnV0IGluIFBvc3Rn cmVTUUwgd2UgY2FuIHVzZSB0aGUgc2NhbGFyLWFycmF5IG9wZXJhdG9yCisgKiBleHByZXNz aW9uIHNob3duIGFib3ZlLgorICoKKyAqIEFsc28sIGluIHNvbWUgb2YgdGhlIGNhc2VzIHdo ZXJlIG9wZXJhdG9ycyBhcmUgc2hvd24gYWJvdmUgd2UgYWN0dWFsbHkKKyAqIGRpcmVjdGx5 IHByb2R1Y2UgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiBJZiBib3Ro IGEgc2VhcmNoIGNsYXVzZSBhbmQgYSBjeWNsZSBjbGF1c2UgaXMgc3BlY2lmaWVkLCB0aGVu IHRoZSBzZWFyY2gKKyAqIGNsYXVzZSBjb2x1bW4gaXMgYWRkZWQgYmVmb3JlIHRoZSBjeWNs ZSBjbGF1c2UgY29sdW1ucy4KKyAqLworCisvKgorICogTWFrZSBhIFJvd0V4cHIgZnJvbSB0 aGUgc3BlY2lmaWVkIGNvbHVtbiBuYW1lcywgd2hpY2ggaGF2ZSB0byBiZSBhbW9uZyB0aGUK KyAqIG91dHB1dCBjb2x1bW5zIG9mIHRoZSBDVEUuCisgKgorICogWFhYIFdlIGFscmVhZHkg bG9va2VkIHVwIHRoZSBjb2x1bW5zIGluIHBhcnNlX2N0ZS5jLiAgTWF5YmUgd2Ugc2hvdWxk CisgKiByZWNvcmQgdGhlIHBvc2l0aW9ucyB0aGVyZSBpbnN0ZWFkIG9mIGxvb2tpbmcgdGhl bSB1cCBhZ2FpbiBoZXJlLgorICovCitzdGF0aWMgUm93RXhwciAqCittYWtlX3BhdGhfcm93 ZXhwcihDb21tb25UYWJsZUV4cHIgKmN0ZSwgTGlzdCAqY29sX2xpc3QpCit7CisJUm93RXhw ciAgICAqcm93ZXhwcjsKKwlMaXN0Q2VsbCAgICpsYzsKKworCXJvd2V4cHIgPSBtYWtlTm9k ZShSb3dFeHByKTsKKwlyb3dleHByLT5yb3dfdHlwZWlkID0gUkVDT1JET0lEOworCXJvd2V4 cHItPnJvd19mb3JtYXQgPSBDT0VSQ0VfSU1QTElDSVRfQ0FTVDsKKwlyb3dleHByLT5sb2Nh dGlvbiA9IC0xOworCisJZm9yZWFjaChsYywgY29sX2xpc3QpCisJeworCQljaGFyCSAgICpj b2xuYW1lID0gc3RyVmFsKGxmaXJzdChsYykpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwg bGlzdF9sZW5ndGgoY3RlLT5jdGVjb2xuYW1lcyk7IGkrKykKKwkJeworCQkJY2hhcgkgICAq Y29sbmFtZTIgPSBzdHJWYWwobGlzdF9udGgoY3RlLT5jdGVjb2xuYW1lcywgaSkpOworCisJ CQlpZiAoc3RyY21wKGNvbG5hbWUsIGNvbG5hbWUyKSA9PSAwKQorCQkJeworCQkJCVZhcgkJ ICAgKnZhcjsKKworCQkJCXZhciA9IG1ha2VWYXIoMSwgaSArIDEsCisJCQkJCQkJICBsaXN0 X250aF9vaWQoY3RlLT5jdGVjb2x0eXBlcywgaSksCisJCQkJCQkJICBsaXN0X250aF9pbnQo Y3RlLT5jdGVjb2x0eXBtb2RzLCBpKSwKKwkJCQkJCQkgIGxpc3RfbnRoX29pZChjdGUtPmN0 ZWNvbGNvbGxhdGlvbnMsIGkpLAorCQkJCQkJCSAgMCk7CisJCQkJcm93ZXhwci0+YXJncyA9 IGxhcHBlbmQocm93ZXhwci0+YXJncywgdmFyKTsKKwkJCQlyb3dleHByLT5jb2xuYW1lcyA9 IGxhcHBlbmQocm93ZXhwci0+Y29sbmFtZXMsIG1ha2VTdHJpbmcoY29sbmFtZSkpOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJvd2V4cHI7Cit9CisKKy8qCisg KiBXcmFwIGEgUm93RXhwciBpbiBhbiBBcnJheUV4cHIsIGZvciB0aGUgaW5pdGlhbCBzZWFy Y2ggZGVwdGggZmlyc3Qgb3IgY3ljbGUKKyAqIHJvdy4KKyAqLworc3RhdGljIEV4cHIgKgor bWFrZV9wYXRoX2luaXRpYWxfYXJyYXkoUm93RXhwciAqcm93ZXhwcikKK3sKKwlBcnJheUV4 cHIgICphcnI7CisKKwlhcnIgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCWFyci0+YXJyYXlf dHlwZWlkID0gUkVDT1JEQVJSQVlPSUQ7CisJYXJyLT5lbGVtZW50X3R5cGVpZCA9IFJFQ09S RE9JRDsKKwlhcnItPmxvY2F0aW9uID0gLTE7CisJYXJyLT5lbGVtZW50cyA9IGxpc3RfbWFr ZTEocm93ZXhwcik7CisKKwlyZXR1cm4gKEV4cHIgKikgYXJyOworfQorCisvKgorICogTWFr ZSBhbiBhcnJheSBjYXRlbmF0aW9uIGV4cHJlc3Npb24gbGlrZQorICoKKyAqIGNwYSB8fCBB UlJBWVtST1coY29scyldCisgKgorICogd2hlcmUgdGhlIHZhcmF0dG5vIG9mIGNwYSBpcyBw cm92aWRlZCBhcyBwYXRoX3ZhcmF0dG5vLgorICovCitzdGF0aWMgRXhwciAqCittYWtlX3Bh dGhfY2F0X2V4cHIoUm93RXhwciAqcm93ZXhwciwgQXR0ck51bWJlciBwYXRoX3ZhcmF0dG5v KQoreworCUFycmF5RXhwciAgKmFycjsKKwlGdW5jRXhwciAgICpmZXhwcjsKKworCWFyciA9 IG1ha2VOb2RlKEFycmF5RXhwcik7CisJYXJyLT5hcnJheV90eXBlaWQgPSBSRUNPUkRBUlJB WU9JRDsKKwlhcnItPmVsZW1lbnRfdHlwZWlkID0gUkVDT1JET0lEOworCWFyci0+bG9jYXRp b24gPSAtMTsKKwlhcnItPmVsZW1lbnRzID0gbGlzdF9tYWtlMShyb3dleHByKTsKKworCWZl eHByID0gbWFrZUZ1bmNFeHByKEZfQVJSQVlfQ0FULCBSRUNPUkRBUlJBWU9JRCwKKwkJCQkJ CSBsaXN0X21ha2UyKG1ha2VWYXIoMSwgcGF0aF92YXJhdHRubywgUkVDT1JEQVJSQVlPSUQs IC0xLCAwLCAwKSwKKwkJCQkJCQkJCWFyciksCisJCQkJCQkgSW52YWxpZE9pZCwgSW52YWxp ZE9pZCwgQ09FUkNFX0VYUExJQ0lUX0NBTEwpOworCisJcmV0dXJuIChFeHByICopIGZleHBy OworfQorCisvKgorICogVGhlIHJlYWwgd29yayBoYXBwZW5zIGhlcmUuCisgKi8KK3N0YXRp YyBDb21tb25UYWJsZUV4cHIgKgorcmV3cml0ZVNlYXJjaEFuZEN5Y2xlKENvbW1vblRhYmxl RXhwciAqY3RlKQoreworCVF1ZXJ5CSAgICpjdGVxdWVyeTsKKwlTZXRPcGVyYXRpb25TdG10 ICpzb3M7CisJaW50CQkJcnRpMSwKKwkJCQlydGkyOworCVJhbmdlVGJsRW50cnkgKnJ0ZTEs CisJCQkgICAqcnRlMiwKKwkJCSAgICpuZXdydGU7CisJUXVlcnkJICAgKm5ld3ExLAorCQkJ ICAgKm5ld3EyOworCVF1ZXJ5CSAgICpuZXdzdWJxdWVyeTsKKwlSYW5nZVRibFJlZiAqcnRy OworCU9pZAkJCXNlYXJjaF9zZXFfdHlwZSA9IEludmFsaWRPaWQ7CisJQXR0ck51bWJlcglz cWNfYXR0bm8gPSBJbnZhbGlkQXR0ck51bWJlcjsKKwlBdHRyTnVtYmVyCWNtY19hdHRubyA9 IEludmFsaWRBdHRyTnVtYmVyOworCUF0dHJOdW1iZXIJY3BhX2F0dG5vID0gSW52YWxpZEF0 dHJOdW1iZXI7CisJVGFyZ2V0RW50cnkgKnRsZTsKKwlSb3dFeHByICAgICpjeWNsZV9jb2xf cm93ZXhwciA9IE5VTEw7CisJUm93RXhwciAgICAqc2VhcmNoX2NvbF9yb3dleHByID0gTlVM TDsKKwlMaXN0CSAgICpld2NsOworCWludAkJCWN0ZV9ydGluZGV4ID0gLTE7CisKKwlBc3Nl cnQoY3RlLT5zZWFyY2hfY2xhdXNlIHx8IGN0ZS0+Y3ljbGVfY2xhdXNlKTsKKworCWN0ZSA9 IGNvcHlPYmplY3QoY3RlKTsKKworCWN0ZXF1ZXJ5ID0gY2FzdE5vZGUoUXVlcnksIGN0ZS0+ Y3RlcXVlcnkpOworCisJLyoKKwkgKiBUaGUgdG9wIGxldmVsIG9mIHRoZSBDVEUncyBxdWVy eSBzaG91bGQgYmUgYSBVTklPTi4gIEZpbmQgdGhlIHR3bworCSAqIHN1YnF1ZXJpZXMuCisJ ICovCisJQXNzZXJ0KGN0ZXF1ZXJ5LT5zZXRPcGVyYXRpb25zKTsKKwlzb3MgPSBjYXN0Tm9k ZShTZXRPcGVyYXRpb25TdG10LCBjdGVxdWVyeS0+c2V0T3BlcmF0aW9ucyk7CisJQXNzZXJ0 KHNvcy0+b3AgPT0gU0VUT1BfVU5JT04pOworCisJcnRpMSA9IGNhc3ROb2RlKFJhbmdlVGJs UmVmLCBzb3MtPmxhcmcpLT5ydGluZGV4OworCXJ0aTIgPSBjYXN0Tm9kZShSYW5nZVRibFJl Ziwgc29zLT5yYXJnKS0+cnRpbmRleDsKKworCXJ0ZTEgPSBydF9mZXRjaChydGkxLCBjdGVx dWVyeS0+cnRhYmxlKTsKKwlydGUyID0gcnRfZmV0Y2gocnRpMiwgY3RlcXVlcnktPnJ0YWJs ZSk7CisKKwlBc3NlcnQocnRlMS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkpOworCUFzc2Vy dChydGUyLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSk7CisKKwkvKgorCSAqIFdlJ2xsIG5l ZWQgdGhpcyBhIGZldyB0aW1lcyBsYXRlci4KKwkgKi8KKwlpZiAoY3RlLT5zZWFyY2hfY2xh dXNlKQorCXsKKwkJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZS0+c2VhcmNoX2JyZWFkdGhfZmly c3QpCisJCQlzZWFyY2hfc2VxX3R5cGUgPSBSRUNPUkRPSUQ7CisJCWVsc2UKKwkJCXNlYXJj aF9zZXFfdHlwZSA9IFJFQ09SREFSUkFZT0lEOworCX0KKworCS8qCisJICogQXR0cmlidXRl IG51bWJlcnMgb2YgdGhlIGFkZGVkIGNvbHVtbnMgaW4gdGhlIENURSdzIGNvbHVtbiBsaXN0 CisJICovCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwkJc3FjX2F0dG5vID0gbGlzdF9s ZW5ndGgoY3RlLT5jdGVjb2xuYW1lcykgKyAxOworCWlmIChjdGUtPmN5Y2xlX2NsYXVzZSkK Kwl7CisJCWNtY19hdHRubyA9IGxpc3RfbGVuZ3RoKGN0ZS0+Y3RlY29sbmFtZXMpICsgMTsK KwkJY3BhX2F0dG5vID0gbGlzdF9sZW5ndGgoY3RlLT5jdGVjb2xuYW1lcykgKyAyOworCQlp ZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCQl7CisJCQljbWNfYXR0bm8rKzsKKwkJCWNwYV9h dHRubysrOworCQl9CisJfQorCisJLyoKKwkgKiBNYWtlIG5ldyBsZWZ0IHN1YnF1ZXJ5CisJ ICovCisJbmV3cTEgPSBtYWtlTm9kZShRdWVyeSk7CisJbmV3cTEtPmNvbW1hbmRUeXBlID0g Q01EX1NFTEVDVDsKKwluZXdxMS0+Y2FuU2V0VGFnID0gdHJ1ZTsKKworCW5ld3J0ZSA9IG1h a2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRla2luZCA9IFJURV9TVUJRVUVS WTsKKwluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCIqVExPQ1JOKiIsIGN0ZS0+Y3RlY29s bmFtZXMpOworCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7CisJbmV3cnRlLT5zdWJx dWVyeSA9IHJ0ZTEtPnN1YnF1ZXJ5OworCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCW5l d3ExLT5ydGFibGUgPSBsaXN0X21ha2UxKG5ld3J0ZSk7CisKKwlydHIgPSBtYWtlTm9kZShS YW5nZVRibFJlZik7CisJcnRyLT5ydGluZGV4ID0gMTsKKwluZXdxMS0+am9pbnRyZWUgPSBt YWtlRnJvbUV4cHIobGlzdF9tYWtlMShydHIpLCBOVUxMKTsKKworCS8qCisJICogTWFrZSB0 YXJnZXQgbGlzdAorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9sZW5ndGgoY3Rl LT5jdGVjb2xuYW1lcyk7IGkrKykKKwl7CisJCVZhcgkJICAgKnZhcjsKKworCQl2YXIgPSBt YWtlVmFyKDEsIGkgKyAxLAorCQkJCQkgIGxpc3RfbnRoX29pZChjdGUtPmN0ZWNvbHR5cGVz LCBpKSwKKwkJCQkJICBsaXN0X250aF9pbnQoY3RlLT5jdGVjb2x0eXBtb2RzLCBpKSwKKwkJ CQkJICBsaXN0X250aF9vaWQoY3RlLT5jdGVjb2xjb2xsYXRpb25zLCBpKSwKKwkJCQkJICAw KTsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIHZhciwgaSArIDEsIHN0clZh bChsaXN0X250aChjdGUtPmN0ZWNvbG5hbWVzLCBpKSksIGZhbHNlKTsKKwkJdGxlLT5yZXNv cmlndGJsID0gY2FzdE5vZGUoVGFyZ2V0RW50cnksIGxpc3RfbnRoKHJ0ZTEtPnN1YnF1ZXJ5 LT50YXJnZXRMaXN0LCBpKSktPnJlc29yaWd0Ymw7CisJCXRsZS0+cmVzb3JpZ2NvbCA9IGNh c3ROb2RlKFRhcmdldEVudHJ5LCBsaXN0X250aChydGUxLT5zdWJxdWVyeS0+dGFyZ2V0TGlz dCwgaSkpLT5yZXNvcmlnY29sOworCQluZXdxMS0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQobmV3 cTEtPnRhcmdldExpc3QsIHRsZSk7CisJfQorCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkK Kwl7CisJCUV4cHIJICAgKnRleHByOworCisJCXNlYXJjaF9jb2xfcm93ZXhwciA9IG1ha2Vf cGF0aF9yb3dleHByKGN0ZSwgY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfY29sX2xpc3Qp OworCQlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfYnJlYWR0aF9maXJzdCkKKwkJ eworCQkJc2VhcmNoX2NvbF9yb3dleHByLT5hcmdzID0gbGNvbnMobWFrZUNvbnN0KElOVDhP SUQsIC0xLCBJbnZhbGlkT2lkLCBzaXplb2YoaW50NjQpLAorCQkJCQkJCQkJCQkJCSAgIElu dDY0R2V0RGF0dW0oMCksIGZhbHNlLCBGTE9BVDhQQVNTQllWQUwpLAorCQkJCQkJCQkJCQkg c2VhcmNoX2NvbF9yb3dleHByLT5hcmdzKTsKKwkJCXNlYXJjaF9jb2xfcm93ZXhwci0+Y29s bmFtZXMgPSBsY29ucyhtYWtlU3RyaW5nKCIqTEVWRUwqIiksIHNlYXJjaF9jb2xfcm93ZXhw ci0+Y29sbmFtZXMpOworCQkJdGV4cHIgPSAoRXhwciAqKSBzZWFyY2hfY29sX3Jvd2V4cHI7 CisJCX0KKwkJZWxzZQorCQkJdGV4cHIgPSBtYWtlX3BhdGhfaW5pdGlhbF9hcnJheShzZWFy Y2hfY29sX3Jvd2V4cHIpOworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkodGV4cHIsCisJCQkJ CQkJICBsaXN0X2xlbmd0aChuZXdxMS0+dGFyZ2V0TGlzdCkgKyAxLAorCQkJCQkJCSAgY3Rl LT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbiwKKwkJCQkJCQkgIGZhbHNlKTsK KwkJbmV3cTEtPnRhcmdldExpc3QgPSBsYXBwZW5kKG5ld3ExLT50YXJnZXRMaXN0LCB0bGUp OworCX0KKwlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQl0bGUgPSBtYWtlVGFyZ2V0 RW50cnkoKEV4cHIgKikgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfZGVmYXVsdCwK KwkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5ld3ExLT50YXJnZXRMaXN0KSArIDEsCisJCQkJCQkJ ICBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1bW4sCisJCQkJCQkJICBmYWxz ZSk7CisJCW5ld3ExLT50YXJnZXRMaXN0ID0gbGFwcGVuZChuZXdxMS0+dGFyZ2V0TGlzdCwg dGxlKTsKKwkJY3ljbGVfY29sX3Jvd2V4cHIgPSBtYWtlX3BhdGhfcm93ZXhwcihjdGUsIGN0 ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9jb2xfbGlzdCk7CisJCXRsZSA9IG1ha2VUYXJnZXRF bnRyeShtYWtlX3BhdGhfaW5pdGlhbF9hcnJheShjeWNsZV9jb2xfcm93ZXhwciksCisJCQkJ CQkJICBsaXN0X2xlbmd0aChuZXdxMS0+dGFyZ2V0TGlzdCkgKyAxLAorCQkJCQkJCSAgY3Rl LT5jeWNsZV9jbGF1c2UtPmN5Y2xlX3BhdGhfY29sdW1uLAorCQkJCQkJCSAgZmFsc2UpOwor CQluZXdxMS0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQobmV3cTEtPnRhcmdldExpc3QsIHRsZSk7 CisJfQorCisJcnRlMS0+c3VicXVlcnkgPSBuZXdxMTsKKworCWlmIChjdGUtPnNlYXJjaF9j bGF1c2UpCisJeworCQlydGUxLT5lcmVmLT5jb2xuYW1lcyA9IGxhcHBlbmQocnRlMS0+ZXJl Zi0+Y29sbmFtZXMsIG1ha2VTdHJpbmcoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2Vx X2NvbHVtbikpOworCX0KKwlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQlydGUxLT5l cmVmLT5jb2xuYW1lcyA9IGxhcHBlbmQocnRlMS0+ZXJlZi0+Y29sbmFtZXMsIG1ha2VTdHJp bmcoY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29sdW1uKSk7CisJCXJ0ZTEtPmVy ZWYtPmNvbG5hbWVzID0gbGFwcGVuZChydGUxLT5lcmVmLT5jb2xuYW1lcywgbWFrZVN0cmlu ZyhjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfcGF0aF9jb2x1bW4pKTsKKwl9CisKKwkvKgor CSAqIE1ha2UgbmV3IHJpZ2h0IHN1YnF1ZXJ5CisJICovCisJbmV3cTIgPSBtYWtlTm9kZShR dWVyeSk7CisJbmV3cTItPmNvbW1hbmRUeXBlID0gQ01EX1NFTEVDVDsKKwluZXdxMi0+Y2Fu U2V0VGFnID0gdHJ1ZTsKKworCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwor CW5ld3J0ZS0+cnRla2luZCA9IFJURV9TVUJRVUVSWTsKKwlld2NsID0gY29weU9iamVjdChj dGUtPmN0ZWNvbG5hbWVzKTsKKwlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCXsKKwkJZXdj bCA9IGxhcHBlbmQoZXdjbCwgbWFrZVN0cmluZyhjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJj aF9zZXFfY29sdW1uKSk7CisJfQorCWlmIChjdGUtPmN5Y2xlX2NsYXVzZSkKKwl7CisJCWV3 Y2wgPSBsYXBwZW5kKGV3Y2wsIG1ha2VTdHJpbmcoY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xl X21hcmtfY29sdW1uKSk7CisJCWV3Y2wgPSBsYXBwZW5kKGV3Y2wsIG1ha2VTdHJpbmcoY3Rl LT5jeWNsZV9jbGF1c2UtPmN5Y2xlX3BhdGhfY29sdW1uKSk7CisJfQorCW5ld3J0ZS0+YWxp YXMgPSBtYWtlQWxpYXMoIipUUk9DUk4qIiwgZXdjbCk7CisJbmV3cnRlLT5lcmVmID0gbmV3 cnRlLT5hbGlhczsKKworCW5ld3N1YnF1ZXJ5ID0gY29weU9iamVjdChydGUyLT5zdWJxdWVy eSk7CisKKwkvKgorCSAqIEZpbmQgdGhlIENURSByZWZlcmVuY2UgaW4gdGhlIHJhbmdlIHRh YmxlCisJICovCisJZm9yIChpbnQgcnRpID0gMTsgcnRpIDw9IGxpc3RfbGVuZ3RoKHJ0ZTIt PnN1YnF1ZXJ5LT5ydGFibGUpOyBydGkrKykKKwl7CisJCWlmIChydF9mZXRjaChydGksIHJ0 ZTItPnN1YnF1ZXJ5LT5ydGFibGUpLT5ydGVraW5kID09IFJURV9DVEUpCisJCXsKKwkJCWN0 ZV9ydGluZGV4ID0gcnRpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcnRfZmV0Y2goY3RlX3J0 aW5kZXgsIG5ld3N1YnF1ZXJ5LT5ydGFibGUpLT5jdGVsZXZlbHN1cCsrOworCisJLyoKKwkg KiBBZGQgZXh0cmEgY29sdW1ucyB0byB0YXJnZXQgbGlzdCBvZiBzdWJxdWVyeSBvZiByaWdo dCBzdWJxdWVyeQorCSAqLworCWlmIChjdGUtPnNlYXJjaF9jbGF1c2UpCisJeworCQlWYXIJ CSAgICp2YXI7CisKKwkJLyogY3RlbmFtZS5zcWMgKi8KKwkJdmFyID0gbWFrZVZhcihjdGVf cnRpbmRleCwgc3FjX2F0dG5vLAorCQkJCQkgIHNlYXJjaF9zZXFfdHlwZSwgLTEsIEludmFs aWRPaWQsIDApOworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFyLAorCQkJ CQkJCSAgbGlzdF9sZW5ndGgobmV3c3VicXVlcnktPnRhcmdldExpc3QpICsgMSwKKwkJCQkJ CQkgIGN0ZS0+c2VhcmNoX2NsYXVzZS0+c2VhcmNoX3NlcV9jb2x1bW4sCisJCQkJCQkJICBm YWxzZSk7CisJCW5ld3N1YnF1ZXJ5LT50YXJnZXRMaXN0ID0gbGFwcGVuZChuZXdzdWJxdWVy eS0+dGFyZ2V0TGlzdCwgdGxlKTsKKwl9CisJaWYgKGN0ZS0+Y3ljbGVfY2xhdXNlKQorCXsK KwkJVmFyCQkgICAqdmFyOworCisJCS8qIGN0ZW5hbWUuY21jICovCisJCXZhciA9IG1ha2VW YXIoY3RlX3J0aW5kZXgsIGNtY19hdHRubywKKwkJCQkJICBjdGUtPmN5Y2xlX2NsYXVzZS0+ Y3ljbGVfbWFya190eXBlLAorCQkJCQkgIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJr X3R5cG1vZCwKKwkJCQkJICBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19jb2xsYXRp b24sIDApOworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFyLAorCQkJCQkJ CSAgbGlzdF9sZW5ndGgobmV3c3VicXVlcnktPnRhcmdldExpc3QpICsgMSwKKwkJCQkJCQkg IGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbHVtbiwKKwkJCQkJCQkgIGZhbHNl KTsKKwkJbmV3c3VicXVlcnktPnRhcmdldExpc3QgPSBsYXBwZW5kKG5ld3N1YnF1ZXJ5LT50 YXJnZXRMaXN0LCB0bGUpOworCisJCS8qIGN0ZW5hbWUuY3BhICovCisJCXZhciA9IG1ha2VW YXIoY3RlX3J0aW5kZXgsIGNwYV9hdHRubywKKwkJCQkJICBSRUNPUkRBUlJBWU9JRCwgLTEs IEludmFsaWRPaWQsIDApOworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFy LAorCQkJCQkJCSAgbGlzdF9sZW5ndGgobmV3c3VicXVlcnktPnRhcmdldExpc3QpICsgMSwK KwkJCQkJCQkgIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9wYXRoX2NvbHVtbiwKKwkJCQkJ CQkgIGZhbHNlKTsKKwkJbmV3c3VicXVlcnktPnRhcmdldExpc3QgPSBsYXBwZW5kKG5ld3N1 YnF1ZXJ5LT50YXJnZXRMaXN0LCB0bGUpOworCX0KKworCW5ld3J0ZS0+c3VicXVlcnkgPSBu ZXdzdWJxdWVyeTsKKwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKwluZXdxMi0+cnRhYmxl ID0gbGlzdF9tYWtlMShuZXdydGUpOworCisJcnRyID0gbWFrZU5vZGUoUmFuZ2VUYmxSZWYp OworCXJ0ci0+cnRpbmRleCA9IDE7CisKKwlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJewor CQlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnk7CisJCU9pZAkJCW9wOworCQlPcEV4cHIJICAg Km9wZXhwcjsKKworCQkvKgorCQkgKiBBZGQgY21jIDw+IGNtdiBjb25kaXRpb24KKwkJICov CisKKwkJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZShjdGUtPmN5Y2xlX2NsYXVzZS0+ Y3ljbGVfbWFya190eXBlLCBUWVBFQ0FDSEVfRVFfT1BSKTsKKwkJaWYgKCF0eXBlbnRyeS0+ ZXFfb3ByKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9GVU5DVElPTiksCisJCQkJCWVycm1zZygiY291bGQgbm90IGlkZW50aWZ5IGFuIGVx dWFsaXR5IG9wZXJhdG9yIGZvciB0eXBlICVzIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2Jl KGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cGUpKSk7CisJCW9wID0gZ2V0X25l Z2F0b3IodHlwZW50cnktPmVxX29wcik7CisJCWlmICghb3ApCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0ZVTkNUSU9OKSwKKwkJCQkJZXJy bXNnKCJjb3VsZCBub3QgaWRlbnRpZnkgYW4gaW5lcXVhbGl0eSBvcGVyYXRvciBmb3IgdHlw ZSAlcyIsCisJCQkJCQkgICBmb3JtYXRfdHlwZV9iZShjdGUtPmN5Y2xlX2NsYXVzZS0+Y3lj bGVfbWFya190eXBlKSkpOworCisJCW9wZXhwciA9IG1ha2VOb2RlKE9wRXhwcik7CisJCW9w ZXhwci0+bG9jYXRpb24gPSAtMTsKKwkJb3BleHByLT5vcG5vID0gb3A7CisJCW9wZXhwci0+ b3ByZXN1bHR0eXBlID0gQk9PTE9JRDsKKwkJb3BleHByLT5pbnB1dGNvbGxpZCA9IGN0ZS0+ Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbGxhdGlvbjsKKwkJb3BleHByLT5hcmdzID0g bGlzdF9tYWtlMihtYWtlVmFyKDEsIGNtY19hdHRubywKKwkJCQkJCQkJCQkgIGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cGUsCisJCQkJCQkJCQkJICBjdGUtPmN5Y2xlX2Ns YXVzZS0+Y3ljbGVfbWFya190eXBtb2QsCisJCQkJCQkJCQkJICBjdGUtPmN5Y2xlX2NsYXVz ZS0+Y3ljbGVfbWFya19jb2xsYXRpb24sIDApLAorCQkJCQkJCQkgIGN0ZS0+Y3ljbGVfY2xh dXNlLT5jeWNsZV9tYXJrX3ZhbHVlKTsKKworCQluZXdxMi0+am9pbnRyZWUgPSBtYWtlRnJv bUV4cHIobGlzdF9tYWtlMShydHIpLCAoTm9kZSAqKSBvcGV4cHIpOworCX0KKwllbHNlCisJ CW5ld3EyLT5qb2ludHJlZSA9IG1ha2VGcm9tRXhwcihsaXN0X21ha2UxKHJ0ciksIE5VTEwp OworCisJLyoKKwkgKiBNYWtlIHRhcmdldCBsaXN0CisJICovCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBsaXN0X2xlbmd0aChjdGUtPmN0ZWNvbG5hbWVzKTsgaSsrKQorCXsKKwkJVmFyCQkg ICAqdmFyOworCisJCXZhciA9IG1ha2VWYXIoMSwgaSArIDEsCisJCQkJCSAgbGlzdF9udGhf b2lkKGN0ZS0+Y3RlY29sdHlwZXMsIGkpLAorCQkJCQkgIGxpc3RfbnRoX2ludChjdGUtPmN0 ZWNvbHR5cG1vZHMsIGkpLAorCQkJCQkgIGxpc3RfbnRoX29pZChjdGUtPmN0ZWNvbGNvbGxh dGlvbnMsIGkpLAorCQkJCQkgIDApOworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIg KikgdmFyLCBpICsgMSwgc3RyVmFsKGxpc3RfbnRoKGN0ZS0+Y3RlY29sbmFtZXMsIGkpKSwg ZmFsc2UpOworCQl0bGUtPnJlc29yaWd0YmwgPSBjYXN0Tm9kZShUYXJnZXRFbnRyeSwgbGlz dF9udGgocnRlMi0+c3VicXVlcnktPnRhcmdldExpc3QsIGkpKS0+cmVzb3JpZ3RibDsKKwkJ dGxlLT5yZXNvcmlnY29sID0gY2FzdE5vZGUoVGFyZ2V0RW50cnksIGxpc3RfbnRoKHJ0ZTIt PnN1YnF1ZXJ5LT50YXJnZXRMaXN0LCBpKSktPnJlc29yaWdjb2w7CisJCW5ld3EyLT50YXJn ZXRMaXN0ID0gbGFwcGVuZChuZXdxMi0+dGFyZ2V0TGlzdCwgdGxlKTsKKwl9CisKKwlpZiAo Y3RlLT5zZWFyY2hfY2xhdXNlKQorCXsKKwkJRXhwcgkgICAqdGV4cHI7CisKKwkJaWYgKGN0 ZS0+c2VhcmNoX2NsYXVzZS0+c2VhcmNoX2JyZWFkdGhfZmlyc3QpCisJCXsKKwkJCUZpZWxk U2VsZWN0ICpmczsKKwkJCUZ1bmNFeHByICAgKmZleHByOworCisJCQkvKgorCQkJICogUk9X KHNxYy5sZXZlbCArIDEsIGNvbHMpCisJCQkgKi8KKworCQkJc2VhcmNoX2NvbF9yb3dleHBy ID0gY29weU9iamVjdChzZWFyY2hfY29sX3Jvd2V4cHIpOworCisJCQlmcyA9IG1ha2VOb2Rl KEZpZWxkU2VsZWN0KTsKKwkJCWZzLT5hcmcgPSAoRXhwciAqKSBtYWtlVmFyKDEsIHNxY19h dHRubywgUkVDT1JET0lELCAtMSwgMCwgMCk7CisJCQlmcy0+ZmllbGRudW0gPSAxOworCQkJ ZnMtPnJlc3VsdHR5cGUgPSBJTlQ4T0lEOworCQkJZnMtPnJlc3VsdHR5cG1vZCA9IC0xOwor CisJCQlmZXhwciA9IG1ha2VGdW5jRXhwcihGX0lOVDhJTkMsIElOVDhPSUQsIGxpc3RfbWFr ZTEoZnMpLCBJbnZhbGlkT2lkLCBJbnZhbGlkT2lkLCBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7 CisKKwkJCWxmaXJzdChsaXN0X2hlYWQoc2VhcmNoX2NvbF9yb3dleHByLT5hcmdzKSkgPSBm ZXhwcjsKKworCQkJdGV4cHIgPSAoRXhwciAqKSBzZWFyY2hfY29sX3Jvd2V4cHI7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogc3FjIHx8IEFSUkFZW1JPVyhjb2xzKV0KKwkJ CSAqLworCQkJdGV4cHIgPSBtYWtlX3BhdGhfY2F0X2V4cHIoc2VhcmNoX2NvbF9yb3dleHBy LCBzcWNfYXR0bm8pOworCQl9CisJCXRsZSA9IG1ha2VUYXJnZXRFbnRyeSh0ZXhwciwKKwkJ CQkJCQkgIGxpc3RfbGVuZ3RoKG5ld3EyLT50YXJnZXRMaXN0KSArIDEsCisJCQkJCQkJICBj dGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9zZXFfY29sdW1uLAorCQkJCQkJCSAgZmFsc2Up OworCQluZXdxMi0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQobmV3cTItPnRhcmdldExpc3QsIHRs ZSk7CisJfQorCisJaWYgKGN0ZS0+Y3ljbGVfY2xhdXNlKQorCXsKKwkJU2NhbGFyQXJyYXlP cEV4cHIgKnNhb2U7CisJCUNhc2VFeHByICAgKmNhc2VleHByOworCQlDYXNlV2hlbiAgICpj YXNld2hlbjsKKworCQkvKgorCQkgKiBDQVNFIFdIRU4gUk9XKGNvbHMpID0gQU5ZIChBUlJB WVtjcGFdKSBUSEVOIGNtdiBFTFNFIGNtZCBFTkQKKwkJICovCisKKwkJc2FvZSA9IG1ha2VO b2RlKFNjYWxhckFycmF5T3BFeHByKTsKKwkJc2FvZS0+bG9jYXRpb24gPSAtMTsKKwkJc2Fv ZS0+b3BubyA9IFJFQ09SRF9FUV9PUDsKKwkJc2FvZS0+dXNlT3IgPSB0cnVlOworCQlzYW9l LT5hcmdzID0gbGlzdF9tYWtlMihjeWNsZV9jb2xfcm93ZXhwciwKKwkJCQkJCQkJbWFrZVZh cigxLCBjcGFfYXR0bm8sIFJFQ09SREFSUkFZT0lELCAtMSwgMCwgMCkpOworCisJCWNhc2Vl eHByID0gbWFrZU5vZGUoQ2FzZUV4cHIpOworCQljYXNlZXhwci0+bG9jYXRpb24gPSAtMTsK KwkJY2FzZWV4cHItPmNhc2V0eXBlID0gY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtf dHlwZTsKKwkJY2FzZWV4cHItPmNhc2Vjb2xsaWQgPSBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3lj bGVfbWFya19jb2xsYXRpb247CisJCWNhc2V3aGVuID0gbWFrZU5vZGUoQ2FzZVdoZW4pOwor CQljYXNld2hlbi0+bG9jYXRpb24gPSAtMTsKKwkJY2FzZXdoZW4tPmV4cHIgPSAoRXhwciAq KSBzYW9lOworCQljYXNld2hlbi0+cmVzdWx0ID0gKEV4cHIgKikgY3RlLT5jeWNsZV9jbGF1 c2UtPmN5Y2xlX21hcmtfdmFsdWU7CisJCWNhc2VleHByLT5hcmdzID0gbGlzdF9tYWtlMShj YXNld2hlbik7CisJCWNhc2VleHByLT5kZWZyZXN1bHQgPSAoRXhwciAqKSBjdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya19kZWZhdWx0OworCisJCXRsZSA9IG1ha2VUYXJnZXRFbnRy eSgoRXhwciAqKSBjYXNlZXhwciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5ld3EyLT50YXJn ZXRMaXN0KSArIDEsCisJCQkJCQkJICBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19j b2x1bW4sCisJCQkJCQkJICBmYWxzZSk7CisJCW5ld3EyLT50YXJnZXRMaXN0ID0gbGFwcGVu ZChuZXdxMi0+dGFyZ2V0TGlzdCwgdGxlKTsKKworCQkvKgorCQkgKiBjcGEgfHwgQVJSQVlb Uk9XKGNvbHMpXQorCQkgKi8KKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KG1ha2VfcGF0aF9j YXRfZXhwcihjeWNsZV9jb2xfcm93ZXhwciwgY3BhX2F0dG5vKSwKKwkJCQkJCQkgIGxpc3Rf bGVuZ3RoKG5ld3EyLT50YXJnZXRMaXN0KSArIDEsCisJCQkJCQkJICBjdGUtPmN5Y2xlX2Ns YXVzZS0+Y3ljbGVfcGF0aF9jb2x1bW4sCisJCQkJCQkJICBmYWxzZSk7CisJCW5ld3EyLT50 YXJnZXRMaXN0ID0gbGFwcGVuZChuZXdxMi0+dGFyZ2V0TGlzdCwgdGxlKTsKKwl9CisKKwly dGUyLT5zdWJxdWVyeSA9IG5ld3EyOworCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwl7 CisJCXJ0ZTItPmVyZWYtPmNvbG5hbWVzID0gbGFwcGVuZChydGUyLT5lcmVmLT5jb2xuYW1l cywgbWFrZVN0cmluZyhjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9zZXFfY29sdW1uKSk7 CisJfQorCWlmIChjdGUtPmN5Y2xlX2NsYXVzZSkKKwl7CisJCXJ0ZTItPmVyZWYtPmNvbG5h bWVzID0gbGFwcGVuZChydGUyLT5lcmVmLT5jb2xuYW1lcywgbWFrZVN0cmluZyhjdGUtPmN5 Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1bW4pKTsKKwkJcnRlMi0+ZXJlZi0+Y29sbmFt ZXMgPSBsYXBwZW5kKHJ0ZTItPmVyZWYtPmNvbG5hbWVzLCBtYWtlU3RyaW5nKGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9wYXRoX2NvbHVtbikpOworCX0KKworCS8qCisJICogQWRkIHRo ZSBhZGRpdGlvbmFsIGNvbHVtbnMgdG8gdGhlIFNldE9wZXJhdGlvblN0bXQKKwkgKi8KKwlp ZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCXsKKwkJc29zLT5jb2xUeXBlcyA9IGxhcHBlbmRf b2lkKHNvcy0+Y29sVHlwZXMsIHNlYXJjaF9zZXFfdHlwZSk7CisJCXNvcy0+Y29sVHlwbW9k cyA9IGxhcHBlbmRfaW50KHNvcy0+Y29sVHlwbW9kcywgLTEpOworCQlzb3MtPmNvbENvbGxh dGlvbnMgPSBsYXBwZW5kX29pZChzb3MtPmNvbENvbGxhdGlvbnMsIEludmFsaWRPaWQpOwor CX0KKwlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQlzb3MtPmNvbFR5cGVzID0gbGFw cGVuZF9vaWQoc29zLT5jb2xUeXBlcywgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtf dHlwZSk7CisJCXNvcy0+Y29sVHlwbW9kcyA9IGxhcHBlbmRfaW50KHNvcy0+Y29sVHlwbW9k cywgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwbW9kKTsKKwkJc29zLT5jb2xD b2xsYXRpb25zID0gbGFwcGVuZF9vaWQoc29zLT5jb2xDb2xsYXRpb25zLCBjdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya19jb2xsYXRpb24pOworCisJCXNvcy0+Y29sVHlwZXMgPSBs YXBwZW5kX29pZChzb3MtPmNvbFR5cGVzLCBSRUNPUkRBUlJBWU9JRCk7CisJCXNvcy0+Y29s VHlwbW9kcyA9IGxhcHBlbmRfaW50KHNvcy0+Y29sVHlwbW9kcywgLTEpOworCQlzb3MtPmNv bENvbGxhdGlvbnMgPSBsYXBwZW5kX29pZChzb3MtPmNvbENvbGxhdGlvbnMsIEludmFsaWRP aWQpOworCX0KKworCS8qCisJICogQWRkIHRoZSBhZGRpdGlvbmFsIGNvbHVtbnMgdG8gdGhl IENURSBxdWVyeSdzIHRhcmdldCBsaXN0CisJICovCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVz ZSkKKwl7CisJCWN0ZXF1ZXJ5LT50YXJnZXRMaXN0ID0gbGFwcGVuZChjdGVxdWVyeS0+dGFy Z2V0TGlzdCwKKwkJCQkJCQkJCSAgIG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSBtYWtlVmFy KDEsIHNxY19hdHRubywKKwkJCQkJCQkJCQkJCQkJCQkJCXNlYXJjaF9zZXFfdHlwZSwgLTEs IEludmFsaWRPaWQsIDApLAorCQkJCQkJCQkJCQkJCSAgIGxpc3RfbGVuZ3RoKGN0ZXF1ZXJ5 LT50YXJnZXRMaXN0KSArIDEsCisJCQkJCQkJCQkJCQkJICAgY3RlLT5zZWFyY2hfY2xhdXNl LT5zZWFyY2hfc2VxX2NvbHVtbiwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwlp ZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQljdGVxdWVyeS0+dGFyZ2V0TGlzdCA9IGxh cHBlbmQoY3RlcXVlcnktPnRhcmdldExpc3QsCisJCQkJCQkJCQkgICBtYWtlVGFyZ2V0RW50 cnkoKEV4cHIgKikgbWFrZVZhcigxLCBjbWNfYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJCQlj dGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBlLAorCQkJCQkJCQkJCQkJCQkJCQkJ Y3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwbW9kLAorCQkJCQkJCQkJCQkJCQkJ CQkJY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29sbGF0aW9uLCAwKSwKKwkJCQkJ CQkJCQkJCQkgICBsaXN0X2xlbmd0aChjdGVxdWVyeS0+dGFyZ2V0TGlzdCkgKyAxLAorCQkJ CQkJCQkJCQkJCSAgIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbHVtbiwKKwkJ CQkJCQkJCQkJCQkgICBmYWxzZSkpOworCQljdGVxdWVyeS0+dGFyZ2V0TGlzdCA9IGxhcHBl bmQoY3RlcXVlcnktPnRhcmdldExpc3QsCisJCQkJCQkJCQkgICBtYWtlVGFyZ2V0RW50cnko KEV4cHIgKikgbWFrZVZhcigxLCBjcGFfYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJCQlSRUNP UkRBUlJBWU9JRCwgLTEsIEludmFsaWRPaWQsIDApLAorCQkJCQkJCQkJCQkJCSAgIGxpc3Rf bGVuZ3RoKGN0ZXF1ZXJ5LT50YXJnZXRMaXN0KSArIDEsCisJCQkJCQkJCQkJCQkJICAgY3Rl LT5jeWNsZV9jbGF1c2UtPmN5Y2xlX3BhdGhfY29sdW1uLAorCQkJCQkJCQkJCQkJCSAgIGZh bHNlKSk7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIGFkZGl0aW9uYWwgY29sdW1ucyB0byB0 aGUgQ1RFJ3Mgb3V0cHV0IGNvbHVtbnMKKwkgKi8KKwljdGUtPmN0ZWNvbG5hbWVzID0gZXdj bDsKKwlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCXsKKwkJY3RlLT5jdGVjb2x0eXBlcyA9 IGxhcHBlbmRfb2lkKGN0ZS0+Y3RlY29sdHlwZXMsIHNlYXJjaF9zZXFfdHlwZSk7CisJCWN0 ZS0+Y3RlY29sdHlwbW9kcyA9IGxhcHBlbmRfaW50KGN0ZS0+Y3RlY29sdHlwbW9kcywgLTEp OworCQljdGUtPmN0ZWNvbGNvbGxhdGlvbnMgPSBsYXBwZW5kX29pZChjdGUtPmN0ZWNvbGNv bGxhdGlvbnMsIEludmFsaWRPaWQpOworCX0KKwlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJ eworCQljdGUtPmN0ZWNvbHR5cGVzID0gbGFwcGVuZF9vaWQoY3RlLT5jdGVjb2x0eXBlcywg Y3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSk7CisJCWN0ZS0+Y3RlY29sdHlw bW9kcyA9IGxhcHBlbmRfaW50KGN0ZS0+Y3RlY29sdHlwbW9kcywgY3RlLT5jeWNsZV9jbGF1 c2UtPmN5Y2xlX21hcmtfdHlwbW9kKTsKKwkJY3RlLT5jdGVjb2xjb2xsYXRpb25zID0gbGFw cGVuZF9vaWQoY3RlLT5jdGVjb2xjb2xsYXRpb25zLCBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3lj bGVfbWFya19jb2xsYXRpb24pOworCisJCWN0ZS0+Y3RlY29sdHlwZXMgPSBsYXBwZW5kX29p ZChjdGUtPmN0ZWNvbHR5cGVzLCBSRUNPUkRBUlJBWU9JRCk7CisJCWN0ZS0+Y3RlY29sdHlw bW9kcyA9IGxhcHBlbmRfaW50KGN0ZS0+Y3RlY29sdHlwbW9kcywgLTEpOworCQljdGUtPmN0 ZWNvbGNvbGxhdGlvbnMgPSBsYXBwZW5kX29pZChjdGUtPmN0ZWNvbGNvbGxhdGlvbnMsIElu dmFsaWRPaWQpOworCX0KKworCXJldHVybiBjdGU7Cit9CisKKwogLyoKICAqIFJld3JpdGVR dWVyeSAtCiAgKgkgIHJld3JpdGVzIHRoZSBxdWVyeSBhbmQgYXBwbHkgdGhlIHJ1bGVzIGFn YWluIG9uIHRoZSBxdWVyaWVzIHJld3JpdHRlbgpAQCAtMzQ2MCw2ICs0MTEyLDIyIEBAIFJl d3JpdGVRdWVyeShRdWVyeSAqcGFyc2V0cmVlLCBMaXN0ICpyZXdyaXRlX2V2ZW50cykKIAlM aXN0CSAgICpyZXdyaXR0ZW4gPSBOSUw7CiAJTGlzdENlbGwgICAqbGMxOwogCisJLyoKKwkg KiBaZXJvdGgsIGV4cGFuZCBTRUFSQ0ggYW5kIENZQ0xFIGNsYXVzZXMgaW4gQ1RFcy4KKwkg KgorCSAqIFhYWCBXaGVyZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBwdXQgdGhpcz8KKwkgKi8K Kwlmb3JlYWNoKGxjMSwgcGFyc2V0cmVlLT5jdGVMaXN0KQorCXsKKwkJQ29tbW9uVGFibGVF eHByICpjdGUgPSBsZmlyc3Rfbm9kZShDb21tb25UYWJsZUV4cHIsIGxjMSk7CisKKwkJaWYg KGN0ZS0+c2VhcmNoX2NsYXVzZSB8fCBjdGUtPmN5Y2xlX2NsYXVzZSkKKwkJeworCQkJY3Rl ID0gcmV3cml0ZVNlYXJjaEFuZEN5Y2xlKGN0ZSk7CisJCQlsZmlyc3QobGMxKSA9IGN0ZTsK KwkJfQorCX0KKwogCS8qCiAJICogRmlyc3QsIHJlY3Vyc2l2ZWx5IHByb2Nlc3MgYW55IGlu c2VydC91cGRhdGUvZGVsZXRlIHN0YXRlbWVudHMgaW4gV0lUSAogCSAqIGNsYXVzZXMuICAo V2UgaGF2ZSB0byBkbyB0aGlzIGZpcnN0IGJlY2F1c2UgdGhlIFdJVEggY2xhdXNlcyBtYXkg Z2V0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggMDc2YzNjMDE5Zi4uMjUw Mzk2OTFlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNTE4Miw2ICs1 MTgyLDUzIEBAIGdldF93aXRoX2NsYXVzZShRdWVyeSAqcXVlcnksIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCkKIAkJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCiAJCQlhcHBlbmRD b250ZXh0S2V5d29yZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CiAJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJyknKTsKKworCQlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCQl7CisJ CQlib29sCQlmaXJzdCA9IHRydWU7CisJCQlMaXN0Q2VsbCAgICpsYzsKKworCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgU0VBUkNIICVzIEZJUlNUIEJZICIsCisJCQkJCQkJIGN0ZS0+ c2VhcmNoX2NsYXVzZS0+c2VhcmNoX2JyZWFkdGhfZmlyc3QgPyAiQlJFQURUSCIgOiAiREVQ VEgiKTsKKworCQkJZm9yZWFjaChsYywgY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfY29s X2xpc3QpCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJ CWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLAorCQkJCQkJCQkJICAgcXVvdGVfaWRlbnRpZmll cihzdHJWYWwobGZpcnN0KGxjKSkpKTsKKwkJCX0KKworCQkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIgU0VUICVzIiwgcXVvdGVfaWRlbnRpZmllcihjdGUtPnNlYXJjaF9jbGF1c2UtPnNl YXJjaF9zZXFfY29sdW1uKSk7CisJCX0KKworCQlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJ CXsKKwkJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJCUxpc3RDZWxsICAgKmxjOworCisJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBDWUNMRSAiKTsKKworCQkJZm9yZWFjaChs YywgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX2NvbF9saXN0KQorCQkJeworCQkJCWlmIChm aXJzdCkKKwkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwKKwkJCQkJCQkJCSAgIHF1b3RlX2lkZW50aWZpZXIoc3RyVmFsKGxmaXJzdChsYykpKSk7 CisJCQl9CisKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFNFVCAlcyIsIHF1b3RlX2lk ZW50aWZpZXIoY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29sdW1uKSk7CisJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBUTyAiKTsKKwkJCWdldF9ydWxlX2V4cHIo Y3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdmFsdWUsIGNvbnRleHQsIGZhbHNlKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIERFRkFVTFQgIik7CisJCQlnZXRf cnVsZV9leHByKGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQsIGNvbnRl eHQsIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFVTSU5HICVzIiwgcXVv dGVfaWRlbnRpZmllcihjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfcGF0aF9jb2x1bW4pKTsK KwkJfQorCiAJCXNlcCA9ICIsICI7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCAzODFkODRi NGU0Li4zYzZmNTIxZjg0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTQ3Miw2ICs0NzIsOCBAQCB0 eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfV2l0aENsYXVzZSwKIAlUX0luZmVyQ2xhdXNlLAog CVRfT25Db25mbGljdENsYXVzZSwKKwlUX0NURVNlYXJjaENsYXVzZSwKKwlUX0NURUN5Y2xl Q2xhdXNlLAogCVRfQ29tbW9uVGFibGVFeHByLAogCVRfUm9sZVNwZWMsCiAJVF9UcmlnZ2Vy VHJhbnNpdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCA1ZTFmZmFmYjkxLi5m NGEzZjQ2NmIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNDM0LDkgKzE0MzQs OCBAQCB0eXBlZGVmIHN0cnVjdCBPbkNvbmZsaWN0Q2xhdXNlCiAvKgogICogQ29tbW9uVGFi bGVFeHByIC0KICAqCSAgIHJlcHJlc2VudGF0aW9uIG9mIFdJVEggbGlzdCBlbGVtZW50Ci0g KgotICogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIFNFQVJDSCBvciBDWUNMRSBj bGF1c2UuCiAgKi8KKwogdHlwZWRlZiBlbnVtIENURU1hdGVyaWFsaXplCiB7CiAJQ1RFTWF0 ZXJpYWxpemVEZWZhdWx0LAkJLyogbm8gb3B0aW9uIHNwZWNpZmllZCAqLwpAQCAtMTQ0NCw2 ICsxNDQzLDI5IEBAIHR5cGVkZWYgZW51bSBDVEVNYXRlcmlhbGl6ZQogCUNURU1hdGVyaWFs aXplTmV2ZXIJCQkvKiBOT1QgTUFURVJJQUxJWkVEICovCiB9IENURU1hdGVyaWFsaXplOwog Cit0eXBlZGVmIHN0cnVjdCBDVEVTZWFyY2hDbGF1c2UKK3sKKwlOb2RlVGFnCQl0eXBlOwor CUxpc3QJICAgKnNlYXJjaF9jb2xfbGlzdDsKKwlib29sCQlzZWFyY2hfYnJlYWR0aF9maXJz dDsKKwljaGFyCSAgICpzZWFyY2hfc2VxX2NvbHVtbjsKKwlpbnQJCQlsb2NhdGlvbjsKK30g Q1RFU2VhcmNoQ2xhdXNlOworCit0eXBlZGVmIHN0cnVjdCBDVEVDeWNsZUNsYXVzZQorewor CU5vZGVUYWcJCXR5cGU7CisJTGlzdAkgICAqY3ljbGVfY29sX2xpc3Q7CisJY2hhcgkgICAq Y3ljbGVfbWFya19jb2x1bW47CisJTm9kZQkgICAqY3ljbGVfbWFya192YWx1ZTsKKwlOb2Rl CSAgICpjeWNsZV9tYXJrX2RlZmF1bHQ7CisJT2lkCQkJY3ljbGVfbWFya190eXBlOwkvKiB0 eXBlIG9mIF92YWx1ZSBhbmQgX2RlZmF1bHQgKi8KKwlpbnQJCQljeWNsZV9tYXJrX3R5cG1v ZDsKKwlPaWQJCQljeWNsZV9tYXJrX2NvbGxhdGlvbjsKKwljaGFyCSAgICpjeWNsZV9wYXRo X2NvbHVtbjsKKwlpbnQJCQlsb2NhdGlvbjsKK30gQ1RFQ3ljbGVDbGF1c2U7CisKIHR5cGVk ZWYgc3RydWN0IENvbW1vblRhYmxlRXhwcgogewogCU5vZGVUYWcJCXR5cGU7CkBAIC0xNDYx LDYgKzE0ODMsOCBAQCB0eXBlZGVmIHN0cnVjdCBDb21tb25UYWJsZUV4cHIKIAlMaXN0CSAg ICpjdGVjb2x0eXBlczsJLyogT0lEIGxpc3Qgb2Ygb3V0cHV0IGNvbHVtbiB0eXBlIE9JRHMg Ki8KIAlMaXN0CSAgICpjdGVjb2x0eXBtb2RzOwkvKiBpbnRlZ2VyIGxpc3Qgb2Ygb3V0cHV0 IGNvbHVtbiB0eXBtb2RzICovCiAJTGlzdAkgICAqY3RlY29sY29sbGF0aW9uczsJLyogT0lE IGxpc3Qgb2YgY29sdW1uIGNvbGxhdGlvbiBPSURzICovCisJQ1RFU2VhcmNoQ2xhdXNlICpz ZWFyY2hfY2xhdXNlOworCUNURUN5Y2xlQ2xhdXNlICpjeWNsZV9jbGF1c2U7CiB9IENvbW1v blRhYmxlRXhwcjsKIAogLyogQ29udmVuaWVuY2UgbWFjcm8gdG8gZ2V0IHRoZSBvdXRwdXQg dGxpc3Qgb2YgYSBDVEUncyBxdWVyeSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFy c2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IDA4ZjIy Y2UyMTEuLjVlNWI3NmU2ZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xp c3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTYwLDYgKzYwLDcg QEAgUEdfS0VZV09SRCgiYmluYXJ5IiwgQklOQVJZLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JE KQogUEdfS0VZV09SRCgiYml0IiwgQklULCBDT0xfTkFNRV9LRVlXT1JEKQogUEdfS0VZV09S RCgiYm9vbGVhbiIsIEJPT0xFQU5fUCwgQ09MX05BTUVfS0VZV09SRCkKIFBHX0tFWVdPUkQo ImJvdGgiLCBCT1RILCBSRVNFUlZFRF9LRVlXT1JEKQorUEdfS0VZV09SRCgiYnJlYWR0aCIs IEJSRUFEVEgsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImJ5IiwgQlksIFVO UkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImNhY2hlIiwgQ0FDSEUsIFVOUkVTRVJW RURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImNhbGwiLCBDQUxMLCBVTlJFU0VSVkVEX0tFWVdP UkQpCkBAIC0xMjgsNiArMTI5LDcgQEAgUEdfS0VZV09SRCgiZGVsZXRlIiwgREVMRVRFX1As IFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImRlbGltaXRlciIsIERFTElNSVRF UiwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgiZGVsaW1pdGVycyIsIERFTElN SVRFUlMsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImRlcGVuZHMiLCBERVBF TkRTLCBVTlJFU0VSVkVEX0tFWVdPUkQpCitQR19LRVlXT1JEKCJkZXB0aCIsIERFUFRILCBV TlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJkZXNjIiwgREVTQywgUkVTRVJWRURf S0VZV09SRCkKIFBHX0tFWVdPUkQoImRldGFjaCIsIERFVEFDSCwgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgiZGljdGlvbmFyeSIsIERJQ1RJT05BUlksIFVOUkVTRVJWRURf S0VZV09SRCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0aC5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpdGgub3V0CmluZGV4IDY3ZWFlYjRm M2UuLmEyZWYxNWY2N2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv d2l0aC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRoLm91dApAQCAt NTY4LDYgKzU2OCwxMTggQEAgU0VMRUNUIHQxLmlkLCB0Mi5wYXRoLCB0MiBGUk9NIHQgQVMg dDEgSk9JTiB0IEFTIHQyIE9OCiAgMTYgfCB7Myw3LDExLDE2fSB8ICgxNiwiezMsNywxMSwx Nn0iKQogKDE2IHJvd3MpCiAKKy0tIFNFQVJDSCBjbGF1c2UKK2NyZWF0ZSB0ZW1wIHRhYmxl IGdyYXBoMCggZiBpbnQsIHQgaW50LCBsYWJlbCB0ZXh0ICk7CitpbnNlcnQgaW50byBncmFw aDAgdmFsdWVzCisJKDEsIDIsICdhcmMgMSAtPiAyJyksCisJKDEsIDMsICdhcmMgMSAtPiAz JyksCisJKDIsIDMsICdhcmMgMiAtPiAzJyksCisJKDEsIDQsICdhcmMgMSAtPiA0JyksCisJ KDQsIDUsICdhcmMgNCAtPiA1Jyk7Cit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwg dCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJ c2VsZWN0IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcu ZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorc2VsZWN0 ICogZnJvbSBzZWFyY2hfZ3JhcGggb3JkZXIgYnkgc2VxOworIGYgfCB0IHwgICBsYWJlbCAg ICB8ICAgICAgICBzZXEgICAgICAgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLQorIDEgfCAyIHwgYXJjIDEgLT4gMiB8IHsiKDEsMikifQorIDIgfCAzIHwg YXJjIDIgLT4gMyB8IHsiKDEsMikiLCIoMiwzKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwg eyIoMSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgeyIoMSw0KSJ9CisgNCB8IDUgfCBh cmMgNCAtPiA1IHwgeyIoMSw0KSIsIig0LDUpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCB7 IigyLDMpIn0KKyA0IHwgNSB8IGFyYyA0IC0+IDUgfCB7Iig0LDUpIn0KKyg3IHJvd3MpCisK K3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVj dCAqIGZyb20gZ3JhcGgwIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFw aDAgZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggYnJl YWR0aCBmaXJzdCBieSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBo IG9yZGVyIGJ5IHNlcTsKKyBmIHwgdCB8ICAgbGFiZWwgICAgfCAgIHNlcSAgIAorLS0tKy0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgKDAsMSwy KQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8ICgwLDEsMykKKyAxIHwgNCB8IGFyYyAxIC0+IDQg fCAoMCwxLDQpCisgMiB8IDMgfCBhcmMgMiAtPiAzIHwgKDAsMiwzKQorIDQgfCA1IHwgYXJj IDQgLT4gNSB8ICgwLDQsNSkKKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCAoMSwyLDMpCisgNCB8 IDUgfCBhcmMgNCAtPiA1IHwgKDEsNCw1KQorKDcgcm93cykKKworLS0gdmFyaW91cyBzeW50 YXggZXJyb3JzCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFz ICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgor CWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykg c2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGZvbywgdGFyIHNldCBzZXEKK3NlbGVjdCAqIGZyb20g c2VhcmNoX2dyYXBoOworRVJST1I6ICBzZWFyY2ggY29sdW1uICJmb28iIG5vdCBpbiBXSVRI IHF1ZXJ5IGNvbHVtbiBsaXN0CitMSU5FIDc6ICkgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGZv bywgdGFyIHNldCBzZXEKKyAgICAgICAgICBeCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3Jh cGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24g YWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdo ZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IGxhYmVs CitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKK0VSUk9SOiAgc2VhcmNoIHNlcXVlbmNl IGNvbHVtbiBuYW1lICJsYWJlbCIgYWxyZWFkeSB1c2VkIGluIFdJVEggcXVlcnkgY29sdW1u IGxpc3QKK0xJTkUgNzogKSBzZWFyY2ggZGVwdGggZmlyc3QgYnkgZiwgdCBzZXQgbGFiZWwK KyAgICAgICAgICBeCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwp IGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcu KgorCWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQK Kykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQsIGYgc2V0IHNlcQorc2VsZWN0ICogZnJv bSBzZWFyY2hfZ3JhcGg7CitFUlJPUjogIHNlYXJjaCBjb2x1bW4gImYiIHNwZWNpZmllZCBt b3JlIHRoYW4gb25jZQorTElORSA3OiApIHNlYXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0LCBm IHNldCBzZXEKKyAgICAgICAgICBeCistLSB0ZXN0IHJ1bGV1dGlscworY3JlYXRlIHRlbXAg dmlldyB2X3NlYXJjaCBhcword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxh YmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVj dCBnLioKKwlmcm9tIGdyYXBoMCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBz Zy50CispIHNlYXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0IHNldCBzZXEKK3NlbGVjdCBmLCB0 LCBsYWJlbCBmcm9tIHNlYXJjaF9ncmFwaDsKK1NFTEVDVCBwZ19nZXRfdmlld2RlZigndl9z ZWFyY2gnKTsKKyAgICAgICAgICAgICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgIFdJVEggUkVDVVJTSVZFIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgQVMgKCsKKyAg ICAgICAgICBTRUxFQ1QgZy5mLCAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAg ICAgICAgIGcudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAg ICAgZy5sYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgIEZS T00gZ3JhcGgwIGcgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgVU5JT04gQUxM ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgU0VMRUNUIGcuZiwg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICBnLnQsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIGcubGFiZWwgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICBGUk9NIGdyYXBoMCBnLCAgICAgICAg ICAgICAgICAgICAgICsKKyAgICAgICAgICAgICBzZWFyY2hfZ3JhcGggc2cgICAgICAgICAg ICAgICAgICAgKworICAgICAgICAgICBXSEVSRSAoZy5mID0gc2cudCkgICAgICAgICAgICAg ICAgICArCisgICAgICAgICApIFNFQVJDSCBERVBUSCBGSVJTVCBCWSBmLCB0IFNFVCBzZXEg ICsKKyAgU0VMRUNUIHNlYXJjaF9ncmFwaC5mLCAgICAgICAgICAgICAgICAgICAgICAgKwor ICAgICBzZWFyY2hfZ3JhcGgudCwgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAg IHNlYXJjaF9ncmFwaC5sYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICBGUk9N IHNlYXJjaF9ncmFwaDsKKygxIHJvdykKKwogLS0KIC0tIHRlc3QgY3ljbGUgZGV0ZWN0aW9u CiAtLQpAQCAtNjU0LDYgKzc2NiwxOTggQEAgc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGgg b3JkZXIgYnkgcGF0aDsKICA1IHwgMSB8IGFyYyA1IC0+IDEgfCB7Iig1LDEpIiwiKDEsNCki LCIoNCw1KSIsIig1LDEpIn0gICAgICAgICB8IHQKICgyNSByb3dzKQogCistLSBDWUNMRSBj bGF1c2UKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAor CXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9t IGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgY3ljbGUg ZiwgdCBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgKK3Nl bGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOworIGYgfCB0IHwgICBsYWJlbCAgICB8IGlzX2N5 Y2xlIHwgICAgICAgICAgICAgICAgICAgcGF0aCAgICAgICAgICAgICAgICAgICAgCistLS0r LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAxIHwgMiB8IGFyYyAxIC0+IDIgfCBmICAgICAgICB8IHsi KDEsMikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8IGYgICAgICAgIHwgeyIoMSwzKSJ9Cisg MiB8IDMgfCBhcmMgMiAtPiAzIHwgZiAgICAgICAgfCB7IigyLDMpIn0KKyAxIHwgNCB8IGFy YyAxIC0+IDQgfCBmICAgICAgICB8IHsiKDEsNCkifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8 IGYgICAgICAgIHwgeyIoNCw1KSJ9CisgNSB8IDEgfCBhcmMgNSAtPiAxIHwgZiAgICAgICAg fCB7Iig1LDEpIn0KKyAxIHwgMiB8IGFyYyAxIC0+IDIgfCBmICAgICAgICB8IHsiKDUsMSki LCIoMSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgZiAgICAgICAgfCB7Iig1LDEpIiwi KDEsMykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8IGYgICAgICAgIHwgeyIoNSwxKSIsIigx LDQpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCBmICAgICAgICB8IHsiKDEsMikiLCIoMiwz KSJ9CisgNCB8IDUgfCBhcmMgNCAtPiA1IHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSki fQorIDUgfCAxIHwgYXJjIDUgLT4gMSB8IGYgICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIn0K KyAxIHwgMiB8IGFyYyAxIC0+IDIgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIsIigx LDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwx KSIsIigxLDMpIn0KKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCBmICAgICAgICB8IHsiKDQsNSki LCIoNSwxKSIsIigxLDQpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCBmICAgICAgICB8IHsi KDUsMSkiLCIoMSwyKSIsIigyLDMpIn0KKyA0IHwgNSB8IGFyYyA0IC0+IDUgfCBmICAgICAg ICB8IHsiKDUsMSkiLCIoMSw0KSIsIig0LDUpIn0KKyA1IHwgMSB8IGFyYyA1IC0+IDEgfCBm ICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIn0KKyAxIHwgMiB8IGFyYyAxIC0+ IDIgfCBmICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMikifQorIDEg fCAzIHwgYXJjIDEgLT4gMyB8IGYgICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSki LCIoMSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgdCAgICAgICAgfCB7IigxLDQpIiwi KDQsNSkiLCIoNSwxKSIsIigxLDQpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCBmICAgICAg ICB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDIpIiwiKDIsMykifQorIDQgfCA1IHwgYXJjIDQg LT4gNSB8IHQgICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsNCkiLCIoNCw1KSJ9Cisg NSB8IDEgfCBhcmMgNSAtPiAxIHwgdCAgICAgICAgfCB7Iig1LDEpIiwiKDEsNCkiLCIoNCw1 KSIsIig1LDEpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCBmICAgICAgICB8IHsiKDEsNCki LCIoNCw1KSIsIig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9CisoMjUgcm93cykKKworLS0gc2Vh cmNoK2N5Y2xlCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFz ICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJ ZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNl YXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0IHNldCBzZXEKKyAgY3ljbGUgZiwgdCBzZXQgaXNf Y3ljbGUgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20g c2VhcmNoX2dyYXBoOworIGYgfCB0IHwgICBsYWJlbCAgICB8ICAgICAgICAgICAgICAgICAg ICBzZXEgICAgICAgICAgICAgICAgICAgIHwgaXNfY3ljbGUgfCAgICAgICAgICAgICAgICAg ICBwYXRoICAgICAgICAgICAgICAgICAgICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSB8IDIgfCBhcmMg MSAtPiAyIHwgeyIoMSwyKSJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBm ICAgICAgICB8IHsiKDEsMikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8IHsiKDEsMykifSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZiAgICAgICAgfCB7IigxLDMpIn0K KyAyIHwgMyB8IGFyYyAyIC0+IDMgfCB7IigyLDMpIn0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IGYgICAgICAgIHwgeyIoMiwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0 IHwgeyIoMSw0KSJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAg ICB8IHsiKDEsNCkifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IHsiKDQsNSkifSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZiAgICAgICAgfCB7Iig0LDUpIn0KKyA1IHwg MSB8IGFyYyA1IC0+IDEgfCB7Iig1LDEpIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IGYgICAgICAgIHwgeyIoNSwxKSJ9CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgeyIo NSwxKSIsIigxLDIpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsi KDUsMSkiLCIoMSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgeyIoNSwxKSIsIigxLDMp In0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSwz KSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgeyIoNSwxKSIsIigxLDQpIn0gICAgICAgICAg ICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSw0KSJ9CisgMiB8IDMg fCBhcmMgMiAtPiAzIHwgeyIoMSwyKSIsIigyLDMpIn0gICAgICAgICAgICAgICAgICAgICAg ICAgfCBmICAgICAgICB8IHsiKDEsMikiLCIoMiwzKSJ9CisgNCB8IDUgfCBhcmMgNCAtPiA1 IHwgeyIoMSw0KSIsIig0LDUpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAg ICB8IHsiKDEsNCkiLCIoNCw1KSJ9CisgNSB8IDEgfCBhcmMgNSAtPiAxIHwgeyIoNCw1KSIs Iig1LDEpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDQsNSki LCIoNSwxKSJ9CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEs MikifSAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIsIigx LDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSwzKSJ9 ICAgICAgICAgICAgICAgICB8IGYgICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsMyki fQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDQpIn0gICAg ICAgICAgICAgICAgIHwgZiAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSw0KSJ9Cisg MiB8IDMgfCBhcmMgMiAtPiAzIHwgeyIoNSwxKSIsIigxLDIpIiwiKDIsMykifSAgICAgICAg ICAgICAgICAgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSwyKSIsIigyLDMpIn0KKyA0IHwg NSB8IGFyYyA0IC0+IDUgfCB7Iig1LDEpIiwiKDEsNCkiLCIoNCw1KSJ9ICAgICAgICAgICAg ICAgICB8IGYgICAgICAgIHwgeyIoNSwxKSIsIigxLDQpIiwiKDQsNSkifQorIDUgfCAxIHwg YXJjIDUgLT4gMSB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIn0gICAgICAgICAgICAgICAg IHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSJ9CisgMSB8IDIgfCBhcmMg MSAtPiAyIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSwyKSJ9ICAgICAgICAgfCBm ICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMikifQorIDEgfCAzIHwg YXJjIDEgLT4gMyB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMykifSAgICAgICAg IHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSIsIigxLDMpIn0KKyAxIHwg NCB8IGFyYyAxIC0+IDQgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSIsIigxLDQpIn0gICAg ICAgICB8IHQgICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSw0KSJ9Cisg MiB8IDMgfCBhcmMgMiAtPiAzIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9 ICAgICAgICAgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDIpIiwiKDIsMyki fQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDQpIiwiKDQs NSkifSAgICAgICAgIHwgdCAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSw0KSIsIig0 LDUpIn0KKyA1IHwgMSB8IGFyYyA1IC0+IDEgfCB7Iig1LDEpIiwiKDEsNCkiLCIoNCw1KSIs Iig1LDEpIn0gICAgICAgICB8IHQgICAgICAgIHwgeyIoNSwxKSIsIigxLDQpIiwiKDQsNSki LCIoNSwxKSJ9CisgMiB8IDMgfCBhcmMgMiAtPiAzIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUs MSkiLCIoMSwyKSIsIigyLDMpIn0gfCBmICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1 LDEpIiwiKDEsMikiLCIoMiwzKSJ9CisoMjUgcm93cykKKword2l0aCByZWN1cnNpdmUgc2Vh cmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaCBnCisJ dW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNn CisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggYnJlYWR0aCBmaXJzdCBieSBmLCB0IHNl dCBzZXEKKyAgY3ljbGUgZiwgdCBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNl IHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOworIGYgfCB0IHwgICBs YWJlbCAgICB8ICAgc2VxICAgfCBpc19jeWNsZSB8ICAgICAgICAgICAgICAgICAgIHBhdGgg ICAgICAgICAgICAgICAgICAgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IDEgfCAyIHwgYXJjIDEgLT4gMiB8ICgwLDEsMikgfCBmICAgICAgICB8IHsiKDEsMikifQor IDEgfCAzIHwgYXJjIDEgLT4gMyB8ICgwLDEsMykgfCBmICAgICAgICB8IHsiKDEsMykifQor IDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgwLDIsMykgfCBmICAgICAgICB8IHsiKDIsMykifQor IDEgfCA0IHwgYXJjIDEgLT4gNCB8ICgwLDEsNCkgfCBmICAgICAgICB8IHsiKDEsNCkifQor IDQgfCA1IHwgYXJjIDQgLT4gNSB8ICgwLDQsNSkgfCBmICAgICAgICB8IHsiKDQsNSkifQor IDUgfCAxIHwgYXJjIDUgLT4gMSB8ICgwLDUsMSkgfCBmICAgICAgICB8IHsiKDUsMSkifQor IDEgfCAyIHwgYXJjIDEgLT4gMiB8ICgxLDEsMikgfCBmICAgICAgICB8IHsiKDUsMSkiLCIo MSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgKDEsMSwzKSB8IGYgICAgICAgIHwgeyIo NSwxKSIsIigxLDMpIn0KKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCAoMSwxLDQpIHwgZiAgICAg ICAgfCB7Iig1LDEpIiwiKDEsNCkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgxLDIsMykg fCBmICAgICAgICB8IHsiKDEsMikiLCIoMiwzKSJ9CisgNCB8IDUgfCBhcmMgNCAtPiA1IHwg KDEsNCw1KSB8IGYgICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIn0KKyA1IHwgMSB8IGFyYyA1 IC0+IDEgfCAoMSw1LDEpIHwgZiAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkifQorIDEgfCAy IHwgYXJjIDEgLT4gMiB8ICgyLDEsMikgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIs IigxLDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCAoMiwxLDMpIHwgZiAgICAgICAgfCB7 Iig0LDUpIiwiKDUsMSkiLCIoMSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgKDIsMSw0 KSB8IGYgICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsNCkifQorIDIgfCAzIHwgYXJj IDIgLT4gMyB8ICgyLDIsMykgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSwyKSIsIigyLDMp In0KKyA0IHwgNSB8IGFyYyA0IC0+IDUgfCAoMiw0LDUpIHwgZiAgICAgICAgfCB7Iig1LDEp IiwiKDEsNCkiLCIoNCw1KSJ9CisgNSB8IDEgfCBhcmMgNSAtPiAxIHwgKDIsNSwxKSB8IGYg ICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkifQorIDEgfCAyIHwgYXJjIDEgLT4g MiB8ICgzLDEsMikgfCBmICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEs MikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8ICgzLDEsMykgfCBmICAgICAgICB8IHsiKDEs NCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8ICgz LDEsNCkgfCB0ICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsNCkifQor IDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgzLDIsMykgfCBmICAgICAgICB8IHsiKDQsNSkiLCIo NSwxKSIsIigxLDIpIiwiKDIsMykifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8ICgzLDQsNSkg fCB0ICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDQpIiwiKDQsNSkifQorIDUgfCAx IHwgYXJjIDUgLT4gMSB8ICgzLDUsMSkgfCB0ICAgICAgICB8IHsiKDUsMSkiLCIoMSw0KSIs Iig0LDUpIiwiKDUsMSkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICg0LDIsMykgfCBmICAg ICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9CisoMjUg cm93cykKKworLS0gdmFyaW91cyBzeW50YXggZXJyb3JzCit3aXRoIHJlY3Vyc2l2ZSBzZWFy Y2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1 bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cK Kwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGZvbywgdGFyIHNldCBpc19jeWNsZSB0byB0 cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3Jh cGg7CitFUlJPUjogIGN5Y2xlIGNvbHVtbiAiZm9vIiBub3QgaW4gV0lUSCBxdWVyeSBjb2x1 bW4gbGlzdAorTElORSA3OiApIGN5Y2xlIGZvbywgdGFyIHNldCBpc19jeWNsZSB0byB0cnVl IGRlZmF1bHQgZmFsc2UgdXNpbmcgcGEuLi4KKyAgICAgICAgICBeCit3aXRoIHJlY3Vyc2l2 ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBo IGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3Jh cGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRv IHRydWUgZGVmYXVsdCA1NSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFw aDsKK0VSUk9SOiAgQ1lDTEUgdHlwZXMgYm9vbGVhbiBhbmQgaW50ZWdlciBjYW5ub3QgYmUg bWF0Y2hlZAorTElORSA3OiApIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVm YXVsdCA1NSB1c2luZyBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBs YWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFsbAorCXNlbGVj dCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNn LnQKKykgY3ljbGUgZiwgdCBzZXQgZiB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0 aAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CitFUlJPUjogIGN5Y2xlIGNvbHVtbiBu YW1lICJmIiBhbHJlYWR5IHVzZWQgaW4gV0lUSCBxdWVyeSBjb2x1bW4gbGlzdAorTElORSA3 OiApIGN5Y2xlIGYsIHQgc2V0IGYgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgK KyAgICAgICAgICBeCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwp IGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4q CisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50Cisp IGN5Y2xlIGYsIHQsIGYgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVmYXVsdCBmYWxzZSB1c2lu ZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKK0VSUk9SOiAgY3ljbGUgY29s dW1uICJmIiBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKK0xJTkUgNzogKSBjeWNsZSBmLCB0 LCBmIHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0Li4uCisg ICAgICAgICAgXgorLS0gdGVzdCBydWxldXRpbHMKK2NyZWF0ZSB0ZW1wIHZpZXcgdl9jeWNs ZSBhcword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJ c2VsZWN0ICogZnJvbSBncmFwaCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20g Z3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBjeWNsZSBm LCB0IHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2Vs ZWN0IGYsIHQsIGxhYmVsIGZyb20gc2VhcmNoX2dyYXBoOworU0VMRUNUIHBnX2dldF92aWV3 ZGVmKCd2X2N5Y2xlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdmll d2RlZiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV0lU SCBSRUNVUlNJVkUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBBUyAoICAgICAgICAgICAg ICAgICAgICArCisgICAgICAgICAgU0VMRUNUIGcuZiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIGcudCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAg ICBnLmxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgICAgICBGUk9NIGdyYXBoIGcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKworICAgICAgICAgVU5JT04gQUxMICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICBTRUxFQ1Qg Zy5mLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgICAgICAgICAgZy50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKworICAgICAgICAgICAgIGcubGFiZWwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgIEZST00gZ3JhcGgg ZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgc2VhcmNoX2dyYXBoIHNnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICAgICBXSEVSRSAoZy5mID0gc2cudCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICkgQ1lDTEUgZiwgdCBTRVQgaXNf Y3ljbGUgVE8gdHJ1ZSBERUZBVUxUIGZhbHNlIFVTSU5HIHBhdGgrCisgIFNFTEVDVCBzZWFy Y2hfZ3JhcGguZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICBzZWFyY2hfZ3JhcGgudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgc2VhcmNoX2dyYXBoLmxhYmVsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgRlJPTSBzZWFyY2hfZ3Jh cGg7CisoMSByb3cpCisKIC0tCiAtLSB0ZXN0IG11bHRpcGxlIFdJVEggcXVlcmllcwogLS0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGguc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvd2l0aC5zcWwKaW5kZXggZjg1NjQ1ZWZkZS4uZTU5ZDg5ODYwZiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aC5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvd2l0aC5zcWwKQEAgLTI5NSw2ICsyOTUsNzYgQEAgQ1JFQVRFIFRFTVBP UkFSWSBUQUJMRSB0cmVlKAogU0VMRUNUIHQxLmlkLCB0Mi5wYXRoLCB0MiBGUk9NIHQgQVMg dDEgSk9JTiB0IEFTIHQyIE9OCiAodDEuaWQ9dDIuaWQpOwogCistLSBTRUFSQ0ggY2xhdXNl CisKK2NyZWF0ZSB0ZW1wIHRhYmxlIGdyYXBoMCggZiBpbnQsIHQgaW50LCBsYWJlbCB0ZXh0 ICk7CisKK2luc2VydCBpbnRvIGdyYXBoMCB2YWx1ZXMKKwkoMSwgMiwgJ2FyYyAxIC0+IDIn KSwKKwkoMSwgMywgJ2FyYyAxIC0+IDMnKSwKKwkoMiwgMywgJ2FyYyAyIC0+IDMnKSwKKwko MSwgNCwgJ2FyYyAxIC0+IDQnKSwKKwkoNCwgNSwgJ2FyYyA0IC0+IDUnKTsKKword2l0aCBy ZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJv bSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBz ZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBkZXB0aCBmaXJz dCBieSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5 IHNlcTsKKword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAo CisJc2VsZWN0ICogZnJvbSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlm cm9tIGdyYXBoMCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNl YXJjaCBicmVhZHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorc2VsZWN0ICogZnJvbSBzZWFy Y2hfZ3JhcGggb3JkZXIgYnkgc2VxOworCistLSB2YXJpb3VzIHN5bnRheCBlcnJvcnMKK3dp dGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAq IGZyb20gZ3JhcGgwIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaDAg Zywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggZGVwdGgg Zmlyc3QgYnkgZm9vLCB0YXIgc2V0IHNlcQorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7 CisKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNl bGVjdCAqIGZyb20gZ3JhcGgwIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBn cmFwaDAgZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2gg ZGVwdGggZmlyc3QgYnkgZiwgdCBzZXQgbGFiZWwKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dy YXBoOworCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgK KwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZy b20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2Vh cmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQsIGYgc2V0IHNlcQorc2VsZWN0ICogZnJvbSBzZWFy Y2hfZ3JhcGg7CisKKy0tIHRlc3QgcnVsZXV0aWxzCitjcmVhdGUgdGVtcCB2aWV3IHZfc2Vh cmNoIGFzCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgK KwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZy b20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2Vh cmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorc2VsZWN0IGYsIHQsIGxhYmVsIGZy b20gc2VhcmNoX2dyYXBoOworCitTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoJ3Zfc2VhcmNoJyk7 CisKIC0tCiAtLSB0ZXN0IGN5Y2xlIGRldGVjdGlvbgogLS0KQEAgLTMyNyw2ICszOTcsODgg QEAgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0cmVlKAogKQogc2VsZWN0ICogZnJvbSBzZWFy Y2hfZ3JhcGggb3JkZXIgYnkgcGF0aDsKIAorLS0gQ1lDTEUgY2xhdXNlCisKK3dpdGggcmVj dXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20g Z3JhcGggZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJj aF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgaXNfY3lj bGUgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2Vh cmNoX2dyYXBoOworCistLSBzZWFyY2grY3ljbGUKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9n cmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9u IGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdo ZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQor ICBjeWNsZSBmLCB0IHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcg cGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CisKK3dpdGggcmVjdXJzaXZlIHNl YXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZwor CXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBz ZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGJyZWFkdGggZmlyc3QgYnkgZiwgdCBz ZXQgc2VxCisgIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVmYXVsdCBmYWxz ZSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKKworLS0gdmFyaW91 cyBzeW50YXggZXJyb3JzCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFi ZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3Qg Zy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50 CispIGN5Y2xlIGZvbywgdGFyIHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2Ug dXNpbmcgcGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CisKK3dpdGggcmVjdXJz aXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3Jh cGggZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9n cmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgaXNfY3ljbGUg dG8gdHJ1ZSBkZWZhdWx0IDU1IHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dy YXBoOworCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgK KwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJv bSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xl IGYsIHQgc2V0IGYgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgKK3NlbGVjdCAq IGZyb20gc2VhcmNoX2dyYXBoOworCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwg dCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlz ZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYg PSBzZy50CispIGN5Y2xlIGYsIHQsIGYgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVmYXVsdCBm YWxzZSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKKworLS0gdGVz dCBydWxldXRpbHMKK2NyZWF0ZSB0ZW1wIHZpZXcgdl9jeWNsZSBhcword2l0aCByZWN1cnNp dmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFw aCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dy YXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBjeWNsZSBmLCB0IHNldCBpc19jeWNsZSB0 byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2VsZWN0IGYsIHQsIGxhYmVsIGZy b20gc2VhcmNoX2dyYXBoOworCitTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoJ3ZfY3ljbGUnKTsK KwogLS0KIC0tIHRlc3QgbXVsdGlwbGUgV0lUSCBxdWVyaWVzCiAtLQoKYmFzZS1jb21taXQ6 IDc5NjZiNzk4MDEzOGViY2VlN2FlOTg2ZWJjYzM5M2FlYTM4YTM1YzAKLS0gCjIuMjYuMgoK --------------00AC1FD2BB845D9F081B7C1F--