Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xOMC7-000000006I5-0V8a for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Nov 2026 21:37:30 +0000 Received: from localhost ([127.0.0.1]:52326 helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1xOMB6-00000002JgY-3yPH for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Nov 2026 21:36:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]:40204) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xOMB5-00000002JgP-2eB1 for pgsql-hackers@lists.postgresql.org; Tue, 03 Nov 2026 21:36:24 +0000 Received: from mail-106105.protonmail.ch ([79.135.106.105]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xOMAx-000000004pB-24Ow for pgsql-hackers@lists.postgresql.org; Tue, 03 Nov 2026 21:36:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; s=protonmail; t=1793741770; x=1794000970; bh=wJdaq5MeXeFm6n5xYxKx61hlRc94XwEFAwqzCJzFWTA=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=RohwY+K5N3Y1TORPGxPx4qbfBkD8W4GrRI1rz3GI1oSZPiatlbCkLk573IH5D+WMR ExYIjdWDDuqYQLIqNqJFT0ZnGqNjo4O5KL0zULuysx/vy6U8k4oVsiIDkdvuogZzaX 8xae1GpJLKyrZjSN+Vo4uNp7/F5zhL3wdLNEOdG3AO3jwVfYzgDBAiGP67Qfuu6KgB IihSBIyhac23TgzbWIZc7vq5eThZMzQu1kXRxS9nD+uTTIunc1Mt/lBbAEJJXik5s+ 8HFWdIu8x0E1mEv1bE2f2wCBCGaJuI5yGEu16TipyhdPSW9uSLTFAFcmCZ0bXFzulM 33CznbZCmI1hw== Date: Tue, 03 Nov 2026 21:36:04 +0000 To: pgsql-hackers@lists.postgresql.org From: Greg Burd Cc: fengyao0087@gmail.com, pg@bowt.ie Subject: Re: nbtree: opt-in leaf key prefix compression Message-ID: In-Reply-To: References: Feedback-ID: 2668248:user:proton X-Pm-Message-ID: 8b77367a8c293633fbb227e9c24446296e2c6fa9 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_Yd913Pt5kxjjNanz8J7C4bCHbVrrRKFxOfdpD5RA" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b1=_Yd913Pt5kxjjNanz8J7C4bCHbVrrRKFxOfdpD5RA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello again, v8 attached. This is the skip-decode follow-up I promised Yao, now implemented and measured on bare metal. Recap of the idea: a prefix leaf stores each data item's first key column front-coded against a per-page prefix, and a scan decodes it through _bt_getitem() on the way past. Yao pointed out (citing the SIGMOD 2024 front-coding paper) that the decode CPU is the read-side cost, and that a scan which only needs the heap TID (a plain IndexScan, a BitmapIndexScan, COUNT(*)) shouldn't have to pay it. I agreed, with one caveat: the tuple copy is already skipped for those scans, so the cost that's actually left is the key *check*, and you can only skip that where the scan keys are already known satisfied for the whole page. What v8 does: _bt_readpage() now skips both the decode and the _bt_checkkeys() call for a data item when all three hold: - the scan is not an index-only scan (so->currTuples =3D=3D NULL), so we never materialize the tuple and need only its heap TID / posting list -- both of which the coding leaves in place on the page; and - every scan key is already proven satisfied for the whole page (_bt_set_startikey advanced startikey to the end of the keys); and - the scan has no array keys (array-key advancement reads the key regardless of startikey). In that state _bt_checkkeys()'s comparison loop starts past the last key and reads nothing from the tuple, so the item is a guaranteed match and continuescan is unchanged. We can take the TID straight from the on-page tuple with no decode. I skip the whole _bt_checkkeys() call, not just the decode: in an assert build it re-runs _bt_check_compare from the first key to verify the startikey optimization, which would read the still-coded key. Index-only scans still decode, because they have to return the key. This speeds up the "walking a known-matching run without returning the tuple" case, not all scans. Bare metal this time (c7i.metal-24xl, Xeon 8488C, performance governor, turbo off, pinned to one core, THP off), 3M distinct keys sharing a 67-byte prefix, prefix index fully cached so this isolates decode CPU. A/B is the same source built twice, once with the skip-decode gate and once with it forced off, best-of-15 over two independent runs: scan skip off skip on delta ------------------------ ---------- ---------- ------ bitmap index scan + count 304 ms 260 ms -14.6% index scan + heap fetch 302 ms 241 ms -19.9% index-only scan + count 277 ms 282 ms ~0 (gate off) So it recovers most of the ~6-7% traversal cost I measured in the v5 read-side numbers, on exactly the scans that only want the TID, and the index-only-scan path is unchanged within noise, the gate correctly never fires there. Yao's other two points (multi-column keys, and more than one prefix per page for a leaf that straddles two groups) I still think are a separate, larger piece of work. I'd rather land the first-column single-prefix case first. No change to that position here. best. -greg --b1=_Yd913Pt5kxjjNanz8J7C4bCHbVrrRKFxOfdpD5RA Content-Type: text/plain; charset=us-ascii; name=v8-0001-nbtree-opt-in-leaf-key-prefix-compression.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0001-nbtree-opt-in-leaf-key-prefix-compression.patch RnJvbSA4MTEzOWJkYTI5MWZmZmNiZDZiZmU5MWQ1MTZhZjNjYjg2ZjdhZTg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+DQpEYXRlOiBNb24s IDI2IE9jdCAyMDI2IDE1OjI1OjU4IC0wNDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjhdIG5idHJlZTog b3B0LWluIGxlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbg0KDQpBZGQgbGVhZiBrZXkgcHJlZml4 IGNvbXByZXNzaW9uIHRvIG5idHJlZSwgY29udHJvbGxlZCBieSBhIG5ldw0KcGVyLWluZGV4IHN0 b3JhZ2UgcGFyYW1ldGVyLCBwcmVmaXhfY29tcHJlc3Npb24sIHRoYXQgaXMgb2ZmIGJ5IGRlZmF1 bHQuDQoNCldoZW4gYSBsZWFmIHBhZ2UgaXMgd3JpdHRlbiBhcyBhIHdob2xlIC0tIGR1cmluZyBh biBpbmRleCBidWlsZCwgYXMgYQ0Kc3BsaXQgaGFsZiwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIGRl ZHVwbGljYXRpb24gcGFzcyAtLSBhbmQgaXRzIGRhdGENCml0ZW1zIHNoYXJlIGEgbGVhZGluZyBi eXRlLXByZWZpeCBvZiB0aGVpciBmaXJzdCBrZXkgY29sdW1uLCB0aGUgcGFnZSBpcw0KcmVidWls dCBpbiB0aGUgQlRQX1BSRUZJWCBmb3JtYXQ6IGEgc2luZ2xlIFBSRUZJWCBpdGVtIGFmdGVyIHRo ZSBoaWdoDQprZXkgaG9sZHMgdGhlIHNoYXJlZCBieXRlcywgYW5kIGVhY2ggZGF0YSBpdGVtIGlz IHN0b3JlZCAiY29kZWQiIChpdHMNCmNvcHkgb2YgdGhlIHNoYXJlZCBwcmVmaXggcmVwbGFjZWQg YnkgYSBvbmUtYnl0ZSBsZW5ndGgpLiAgUmVhZHMgb2YgYQ0KbGVhZiBkYXRhIGl0ZW0gZnVubmVs IHRocm91Z2ggX2J0X2dldGl0ZW0oKSwgd2hpY2ggZGVjb2RlcyBvbiBkZW1hbmQ7DQpoaWdoIGtl eXMgYW5kIGludGVybmFsLXBhZ2UgZG93bmxpbmtzIGFyZSBuZXZlciBjb2RlZCBhbmQgYXJlIHJl YWQgd2l0aA0KdGhlIGV4aXN0aW5nIFBhZ2VHZXRJdGVtKCkuDQoNClRoZSBmZWF0dXJlIGlzIGRl bGliZXJhdGVseSBhIHBlci1wYWdlIG9wdC1pbiB3aXRoIG5vIG9uLWRpc2sgdmVyc2lvbg0KY2hh bmdlOiBCVFJFRV9WRVJTSU9OIGFuZCB0aGUgY2F0YWxvZyB2ZXJzaW9uIGFyZSB1bnRvdWNoZWQu ICBBIHBhZ2UgaXMNCmNvbnZlcnRlZCBvbmx5IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xl LCBuZXZlciBieSBhbiBpbnNlcnQsIFZBQ1VVTQ0Kb3Iga2V5LXJhbmdlIGNoYW5nZSwgc28gY29t cHJlc3Npb24gImZhdWx0cyBmb3J3YXJkIiBvbiBhbiBleGlzdGluZw0KaW5kZXguICBPbGQtZm9y bWF0IGFuZCBuZXctZm9ybWF0IHBhZ2VzIGNvZXhpc3QgaW4gdGhlIHNhbWUgaW5kZXgsIHdoaWNo DQprZWVwcyBwZ191cGdyYWRlLCBwaHlzaWNhbCByZXBsaWNhdGlvbiwgYW5kIHN0YW5kYnlzIHdv cmtpbmcgd2l0aCBubw0KUkVJTkRFWDogYSByZXBsaWNhIHRoYXQgaGFzIG5vdCB5ZXQgc2VlbiBh IHBhZ2UncyBjb252ZXJzaW9uIHN0aWxsIHJlYWRzDQppdCBjb3JyZWN0bHksIGFuZCB0dXJuaW5n IHRoZSBwYXJhbWV0ZXIgb2ZmIChBTFRFUiBJTkRFWCAuLi4gU0VUKSBzdG9wcw0KbmV3IGNvbnZl cnNpb25zIHdoaWxlIGxlYXZpbmcgZXhpc3RpbmcgY29kZWQgcGFnZXMgcmVhZGFibGUuDQoNClBy ZWZpeCBjb21wcmVzc2lvbiBpcyBhIHNlcGFyYXRlIG1lY2hhbmlzbSBmcm9tIGRlZHVwbGljYXRp b24sIG5vdCBhbg0KZXh0ZW5zaW9uIG9mIGl0OiBkZWR1cGxpY2F0aW9uIGNvbGxhcHNlcyB0dXBs ZXMgd2hvc2Ugd2hvbGUga2V5IGlzDQplcXVhbCwgd2hpbGUgcHJlZml4IGNvbXByZXNzaW9uIGZh Y3RvcnMgb3V0IGEgbGVhZGluZyBydW4gc2hhcmVkIGJ5DQpkaXN0aW5jdCBrZXlzIChhIFVSTCBv ciBqc29uYi1wYXRoIGNvbHVtbiBpcyB0aGUgbW90aXZhdGluZyBjYXNlLCB3aGVyZQ0KZGVkdXBs aWNhdGlvbiBkb2VzIG5vdCBoZWxwKS4gIFRoZSB0d28gY29tcG9zZSBvbiBvbmUgcGFnZSAtLSBh IGJ1aWxkDQpkZWR1cGxpY2F0ZXMgZmlyc3QgYW5kIHRoZW4gY29kZXMgdGhlIHN1cnZpdm9ycywg c28gYSBkdXBsaWNhdGUtaGVhdnkNCnByZWZpeCBpbmRleCBpcyBubyBsYXJnZXIgdGhhbiBhIHBs YWluIG9uZS4gIEJvdHRvbS11cCBpbmRleCBkZWxldGlvbg0KcnVucyBvbiBjb2RlZCBwYWdlcyB1 bmNoYW5nZWQsIHNpbmNlIGl0IG9ubHkgcmVtb3ZlcyBpdGVtcy4gIEEgcnVudGltZQ0KZGVkdXBs aWNhdGlvbiBwYXNzIG9uIGEgY29kZWQgcGFnZSBkZWNvZGVzIGZpcnN0LCBhbmQgYmVjYXVzZSBh IGNvZGVkDQpwYWdlIGNhbiBob2xkIG1vcmUgbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbiwg dGhlIHBhc3MgYWJvcnRzIGNsZWFubHkNCmFuZCB0aGUgcGFnZSBzcGxpdHMgaW5zdGVhZCB3aGVu IHRoZSBkZWNvZGVkIHNldCB3b3VsZCBvdmVyZmxvdy4NCg0KV0FMIHJlcGxheSByZXByb2R1Y2Vz IHRoZSBjb2RlZCBieXRlcyB3aXRob3V0IHJlc29ydGluZyB0byBmdWxsLXBhZ2UNCmltYWdlcyBp biB0aGUgY29tbW9uIHBhdGhzLiAgQSBSZWxhdGlvbi1mcmVlIGxheW91dCByb3V0aW5lLA0KX2J0 X3NwbGl0X2xlYWZfbGF5b3V0KCksIHRvZ2V0aGVyIHdpdGggYSBzaW5nbGUgaXRlbS1jb2xsZWN0 aW9uIHJvdXRpbmUsDQpfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KCksIGFyZSBzaGFyZWQgYnkgdGhl IHByaW1hcnkgKF9idF9zcGxpdCkgYW5kIHJlZG8NCihidHJlZV94bG9nX3NwbGl0KSBzbyBib3Ro IGRlcml2ZSB0aGUgc2FtZSBwbGFpbiBpdGVtIHNlcXVlbmNlIGFuZCBjb2RlDQppdCBhZ2FpbnN0 IHRoZSBzYW1lIGxvZ2dlZCBwcmVmaXgsIGVtaXR0aW5nIGlkZW50aWNhbCBieXRlcy4gIEFuDQpp bi1wbGFjZSBpbnNlcnQgbG9ncyB0aGUgY29kZWQgdHVwbGU7IGEgc3BsaXQgbG9ncyBlYWNoIGhh bGYncyBjaG9zZW4NCnByZWZpeCBwbHVzIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXM7IGEg cHJlZml4IGRlZHVwbGljYXRpb24gbG9ncw0KdGhlIGNob3NlbiBwcmVmaXggcGx1cyB0aGUgZGVk dXBlZCBwbGFpbiBpdGVtcy4gIEEgYm91bmRlZCBmYWxsYmFjaw0KY2FycmllcyB0aGUgcGFnZSBh cyBhIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2Ugb25seSB3aGVuIGEgcGF0aG9sb2dpY2FsbHkNCmNv bXByZXNzaWJsZSBwYWdlJ3MgcGxhaW4gcGF5bG9hZCB3b3VsZCBleGNlZWQgb25lIGJsb2NrOyBy ZWFsaXN0aWMgZGF0YQ0KbmV2ZXIgcmVhY2hlcyB0aGF0IHRocmVzaG9sZCwgc28gdGhlIG5idHJl ZS1wcmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24NCnBvaW50IGFuZCBhIGRlZGljYXRlZCB0ZXN0 IGluIHNyYy90ZXN0L21vZHVsZXMvbmJ0cmVlIGV4ZXJjaXNlIHRoZQ0KZmFsbGJhY2sgZGV0ZXJt aW5pc3RpY2FsbHkuDQoNCkEgc2NhbiByZWFkaW5nIGEgY29kZWQgbGVhZiBwYWdlIHNraXBzIGRl Y29kaW5nIChhbmQgdGhlIGtleSBjb21wYXJpc29uDQp0aGF0IHdvdWxkIHJlYWQgdGhlIGtleSkg Zm9yIGFueSBkYXRhIGl0ZW0gd2hvc2Uga2V5IGl0IGRvZXMgbm90IG5lZWQ6DQp3aGVuIHRoZSBz Y2FuIGlzIG5vdCBhbiBpbmRleC1vbmx5IHNjYW4gYW5kIGV2ZXJ5IHNjYW4ga2V5IGlzIGFscmVh ZHkNCmtub3duIHNhdGlzZmllZCBmb3IgdGhlIHdob2xlIHBhZ2UsIF9idF9yZWFkcGFnZSgpIHRh a2VzIHRoZSBoZWFwIFRJRA0KKGFuZCBwb3N0aW5nIGxpc3QsIGJvdGggc3RvcmVkIHVuY29kZWQp IHN0cmFpZ2h0IGZyb20gdGhlIG9uLXBhZ2UgdHVwbGUuDQpUaGlzIHJlY292ZXJzIG1vc3Qgb2Yg dGhlIGRlY29kaW5nIGNvc3QgdGhhdCBwcmVmaXggY29tcHJlc3Npb24gYWRkcyB0bw0KYml0bWFw IGluZGV4IHNjYW5zIGFuZCBwbGFpbiBpbmRleCBzY2FucyBvdmVyIGEgbWF0Y2hpbmcgcmFuZ2Ug KC0xNSUgdG8NCi0yMCUgb24gYSBjYWNoZWQgM00tcm93IGluZGV4IG9mIGRpc3RpbmN0IGxvbmct cHJlZml4ZWQga2V5cyk7DQppbmRleC1vbmx5IHNjYW5zLCB3aGljaCBtdXN0IHJldHVybiB0aGUg a2V5LCBkZWNvZGUgYXMgYmVmb3JlLg0KDQphbWNoZWNrIGRlY29kZXMgZXZlcnkgbGVhZiBkYXRh IGl0ZW0sIGluY2x1ZGluZyB1bmRlciBoZWFwYWxsaW5kZXhlZCwNCmFuZCBjaGVja3MgdGhlIEJU UF9QUkVGSVggc3RydWN0dXJhbCBpbnZhcmlhbnRzIChmbGFnIG9ubHkgb24gbGVhZg0KcGFnZXMs IGEgd2VsbC1mb3JtZWQgUFJFRklYIGl0ZW0gYXQgdGhlIGV4cGVjdGVkIG9mZnNldCk7IGl0cyB0 ZXN0IHN1aXRlDQpjb3ZlcnMgYSBwcmVmaXgtY29tcHJlc3NlZCBpbmRleC4gIFRoZSBjcmVhdGVf aW5kZXggZG9jdW1lbnRhdGlvbiBhbmQNCnRoZSBuYnRyZWUgUkVBRE1FIGRlc2NyaWJlIHRoZSBw YXJhbWV0ZXIsIHRoZSBvbi1kaXNrIGZvcm1hdCwgYW5kIHRoZQ0KcmVsYXRpb25zaGlwIHRvIGRl ZHVwbGljYXRpb24uICBUZXN0ZWQgd2l0aCB3YWxfY29uc2lzdGVuY3lfY2hlY2tpbmc9YWxsDQpv biBhIHByaW1hcnkgYW5kIGEgc3RyZWFtaW5nIHN0YW5kYnkgYWNyb3NzIGluc2VydCwgc3BsaXQs IGRlZHVwbGljYXRpb24NCihpbmNsdWRpbmcgdGhlIGZvcmNlZC1pbWFnZSBmYWxsYmFjayksIGRl bGV0ZSBhbmQgdmFjdXVtIHdvcmtsb2FkcywNCnRocm91Z2ggY3Jhc2ggcmVjb3ZlcnksIGFuZCBh Y3Jvc3MgYSBwZ191cGdyYWRlIHRoYXQgY2FycmllcyBib3RoIHBhZ2UNCmZvcm1hdHMuDQotLS0N CiBjb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnRyZWUub3V0ICAgICAgfCAgMjcgKw0K IGNvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnRyZWUuc3FsICAgICAgICAgICB8ICAxOCArDQog Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwgMTIwICsrLQ0K IGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICAgICB8ICAzNSArDQog c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgICAgICAgIHwgIDEwICsNCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKw0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICA5NyArKysNCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKw0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYyAgICAgICAgICB8IDI2OSArKysrKy0N CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jICAgICAgICAgfCAzNzggKysr KysrLS0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAg MzEgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jICAgICAgICAgfCA4 MTQgKysrKysrKysrKysrKysrKysrDQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFk cGFnZS5jICAgICAgIHwgMTExICsrLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMgICAgICAgICAgICB8ICAgNiArLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgICAgICAgICB8ICAgMyArLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29y dC5jICAgICAgICAgICB8ICA1NCArLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3Bs aXRsb2MuYyAgICAgICB8ICA4NCArLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRp bHMuYyAgICAgICAgICB8ICAgNCArLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxv Zy5jICAgICAgICAgICB8IDMxMyArKysrKystDQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5o ICAgICAgICAgICAgICAgICAgIHwgMTQ3ICsrKy0NCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxv Zy5oICAgICAgICAgICAgICAgICAgfCAgNDQgKy0NCiBzcmMvdGVzdC9tb2R1bGVzL25idHJlZS9N YWtlZmlsZSAgICAgICAgICAgICAgfCAgIDMgKy0NCiAuLi4vbmJ0cmVlL2V4cGVjdGVkL25idHJl ZV9wcmVmaXhfcmZwaS5vdXQgICAgfCAgNzcgKysNCiBzcmMvdGVzdC9tb2R1bGVzL25idHJlZS9t ZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEgKw0KIC4uLi9tb2R1bGVzL25idHJlZS9zcWwvbmJ0 cmVlX3ByZWZpeF9yZnBpLnNxbCB8ICA1OSArKw0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YnRyZWVfaW5kZXgub3V0ICAgICB8IDI1NiArKysrKysNCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9i dHJlZV9pbmRleC5zcWwgICAgICAgICAgfCAxNjcgKysrKw0KIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArDQogMjggZmlsZXMgY2hhbmdlZCwgMzAw MyBpbnNlcnRpb25zKCspLCAxMjkgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cHJlZml4LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvZXhwZWN0ZWQvbmJ0cmVlX3ByZWZpeF9yZnBpLm91dA0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL25idHJlZS9zcWwvbmJ0cmVlX3By ZWZpeF9yZnBpLnNxbA0KDQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL2V4cGVjdGVkL2No ZWNrX2J0cmVlLm91dCBiL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19idHJlZS5vdXQN CmluZGV4IDRmY2VlNWRhNDYzLi44OTZkOGJmYmIwZSAxMDA2NDQNCi0tLSBhL2NvbnRyaWIvYW1j aGVjay9leHBlY3RlZC9jaGVja19idHJlZS5vdXQNCisrKyBiL2NvbnRyaWIvYW1jaGVjay9leHBl Y3RlZC9jaGVja19idHJlZS5vdXQNCkBAIC0yODMsNiArMjgzLDMyIEBAIFNFTEVDVCBidF9pbmRl eF9jaGVjaygndmFybGVuYV9idWdfaWR4JywgdHJ1ZSk7DQogIA0KICgxIHJvdykNCiANCistLSBD aGVjayBhIHByZWZpeC1jb21wcmVzc2VkIChwcmVmaXhfY29tcHJlc3Npb249b24pIGluZGV4OiB0 aGUgZGF0YSBpdGVtcyBhcmUNCistLSBzdG9yZWQgY29kZWQgYWdhaW5zdCBhIHBlci1wYWdlIFBS RUZJWCBpdGVtLCBzbyBhbWNoZWNrIG11c3QgZGVjb2RlIHRoZW0gYW5kDQorLS0gdmFsaWRhdGUg dGhlIEJUUF9QUkVGSVggc3RydWN0dXJhbCBpbnZhcmlhbnRzLiAgVXNlIGtleXMgd2l0aCBhIGxv bmcgc2hhcmVkDQorLS0gbGVhZGluZyBwcmVmaXggKHNvIHBhZ2VzIGFjdHVhbGx5IGNvbXByZXNz KSBwbHVzIHNvbWUgdGhhdCBzaGFyZSBub3RoaW5nIGFuZA0KKy0tIGEgTlVMTCAoc3RvcmVkIHVu Y29kZWQpLCBhbmQgZW5vdWdoIHJvd3MgdG8gZm9yY2Ugc3BsaXRzIGFuZCBkZWR1cGxpY2F0aW9u Lg0KK0NSRUFURSBUQUJMRSBwcmVmaXhfYnVnICh2IHRleHQgQ09MTEFURSAiQyIpOw0KK0lOU0VS VCBJTlRPIHByZWZpeF9idWcNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3Rv L3Jlc291cmNlLycgfHwgbHBhZChnOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAyMDAwMCkgZzsNCitJTlNFUlQgSU5UTyBwcmVmaXhfYnVnDQorICBTRUxFQ1QgJ2h0 dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAxMDApOjp0 ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsNCitJTlNF UlQgSU5UTyBwcmVmaXhfYnVnIFZBTFVFUyAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JyksIChOVUxM KTsNCitDUkVBVEUgSU5ERVggcHJlZml4X2J1Z19pZHggT04gcHJlZml4X2J1ZyAodikgV0lUSCAo cHJlZml4X2NvbXByZXNzaW9uID0gb24pOw0KK1NFTEVDVCBidF9pbmRleF9jaGVjaygncHJlZml4 X2J1Z19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlKTsNCisgYnRfaW5kZXhfY2hlY2sgDQor LS0tLS0tLS0tLS0tLS0tLQ0KKyANCisoMSByb3cpDQorDQorU0VMRUNUIGJ0X2luZGV4X3BhcmVu dF9jaGVjaygncHJlZml4X2J1Z19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCByb290ZGVz Y2VuZCA9PiB0cnVlKTsNCisgYnRfaW5kZXhfcGFyZW50X2NoZWNrIA0KKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQorIA0KKygxIHJvdykNCisNCiAtLSBjbGVhbnVwDQogRFJPUCBUQUJMRSBidHRl c3RfYTsNCiBEUk9QIFRBQkxFIGJ0dGVzdF9iOw0KQEAgLTI5NCwzICszMjAsNCBAQCBEUk9QIFRB QkxFIGJ0dGVzdF91bmlxdWVfbnVsbHM7DQogRFJPUCBPV05FRCBCWSByZWdyZXNzX2J0dGVzdF9y b2xlOyAtLSBwZXJtaXNzaW9ucw0KIERST1AgUk9MRSByZWdyZXNzX2J0dGVzdF9yb2xlOw0KIERS T1AgVEFCTEUgdmFybGVuYV9idWc7DQorRFJPUCBUQUJMRSBwcmVmaXhfYnVnOw0KZGlmZiAtLWdp dCBhL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnRyZWUuc3FsIGIvY29udHJpYi9hbWNoZWNr L3NxbC9jaGVja19idHJlZS5zcWwNCmluZGV4IGE1NTg1MDg1ZmFkLi43ZDJjNmE4ZThmZiAxMDA2 NDQNCi0tLSBhL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnRyZWUuc3FsDQorKysgYi9jb250 cmliL2FtY2hlY2svc3FsL2NoZWNrX2J0cmVlLnNxbA0KQEAgLTE4Myw2ICsxODMsMjMgQEAgSU5T RVJUIElOVE8gdmFybGVuYV9idWcgVkFMVUVTIChyZXBlYXQoJ1Rlc3QnLCAyNTApKTsNCiBBTFRF UiBUQUJMRSB2YXJsZW5hX2J1ZyBBTFRFUiBDT0xVTU4gdiBTRVQgU1RPUkFHRSBleHRlbmRlZDsN CiBTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ3ZhcmxlbmFfYnVnX2lkeCcsIHRydWUpOw0KIA0KKy0t IENoZWNrIGEgcHJlZml4LWNvbXByZXNzZWQgKHByZWZpeF9jb21wcmVzc2lvbj1vbikgaW5kZXg6 IHRoZSBkYXRhIGl0ZW1zIGFyZQ0KKy0tIHN0b3JlZCBjb2RlZCBhZ2FpbnN0IGEgcGVyLXBhZ2Ug UFJFRklYIGl0ZW0sIHNvIGFtY2hlY2sgbXVzdCBkZWNvZGUgdGhlbSBhbmQNCistLSB2YWxpZGF0 ZSB0aGUgQlRQX1BSRUZJWCBzdHJ1Y3R1cmFsIGludmFyaWFudHMuICBVc2Uga2V5cyB3aXRoIGEg bG9uZyBzaGFyZWQNCistLSBsZWFkaW5nIHByZWZpeCAoc28gcGFnZXMgYWN0dWFsbHkgY29tcHJl c3MpIHBsdXMgc29tZSB0aGF0IHNoYXJlIG5vdGhpbmcgYW5kDQorLS0gYSBOVUxMIChzdG9yZWQg dW5jb2RlZCksIGFuZCBlbm91Z2ggcm93cyB0byBmb3JjZSBzcGxpdHMgYW5kIGRlZHVwbGljYXRp b24uDQorQ1JFQVRFIFRBQkxFIHByZWZpeF9idWcgKHYgdGV4dCBDT0xMQVRFICJDIik7DQorSU5T RVJUIElOVE8gcHJlZml4X2J1Zw0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgv dG8vcmVzb3VyY2UvJyB8fCBscGFkKGc6OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDIwMDAwKSBnOw0KK0lOU0VSVCBJTlRPIHByZWZpeF9idWcNCisgIFNFTEVDVCAn aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDEwMCk6 OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnOw0KK0lO U0VSVCBJTlRPIHByZWZpeF9idWcgVkFMVUVTICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSwgKE5V TEwpOw0KK0NSRUFURSBJTkRFWCBwcmVmaXhfYnVnX2lkeCBPTiBwcmVmaXhfYnVnICh2KSBXSVRI IChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQorU0VMRUNUIGJ0X2luZGV4X2NoZWNrKCdwcmVm aXhfYnVnX2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUpOw0KK1NFTEVDVCBidF9pbmRleF9w YXJlbnRfY2hlY2soJ3ByZWZpeF9idWdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgcm9v dGRlc2NlbmQgPT4gdHJ1ZSk7DQorDQogLS0gY2xlYW51cA0KIERST1AgVEFCTEUgYnR0ZXN0X2E7 DQogRFJPUCBUQUJMRSBidHRlc3RfYjsNCkBAIC0xOTQsMyArMjExLDQgQEAgRFJPUCBUQUJMRSBi dHRlc3RfdW5pcXVlX251bGxzOw0KIERST1AgT1dORUQgQlkgcmVncmVzc19idHRlc3Rfcm9sZTsg LS0gcGVybWlzc2lvbnMNCiBEUk9QIFJPTEUgcmVncmVzc19idHRlc3Rfcm9sZTsNCiBEUk9QIFRB QkxFIHZhcmxlbmFfYnVnOw0KK0RST1AgVEFCTEUgcHJlZml4X2J1ZzsNCmRpZmYgLS1naXQgYS9j b250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9u YnRyZWUuYw0KaW5kZXggOTdjNTE5YjQ3ZjUuLjE4NTUxNDgzZTg4IDEwMDY0NA0KLS0tIGEvY29u dHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYw0KKysrIGIvY29udHJpYi9hbWNoZWNrL3Zlcmlm eV9uYnRyZWUuYw0KQEAgLTE1OCw3ICsxNTgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQnRyZWVMYXN0 VmlzaWJsZUVudHJ5DQogCU9mZnNldE51bWJlciBvZmZzZXQ7CQkvKiBPZmZzZXQgb24gaW5kZXgg YmxvY2sgKi8NCiAJaW50CQkJcG9zdGluZ0luZGV4OwkvKiBOdW1iZXIgaW4gdGhlIHBvc3Rpbmcg bGlzdCAoLTEgZm9yDQogCQkJCQkJCQkgKiBub24tZGVkdXBsaWNhdGVkIHR1cGxlcykgKi8NCi0J SXRlbVBvaW50ZXIgdGlkOwkJCS8qIEhlYXAgdGlkICovDQorCUl0ZW1Qb2ludGVyIHRpZDsJCQkv KiBIZWFwIHRpZCwgb3IgTlVMTDsgcG9pbnRzIGF0IHRpZGRhdGEgKi8NCisJSXRlbVBvaW50ZXJE YXRhIHRpZGRhdGE7CS8qIE93biBzdG9yYWdlIGZvciAqdGlkOiBhIHByZWZpeC1jb2RlZCBsZWFm DQorCQkJCQkJCQkgKiB0dXBsZSBpcyBkZWNvZGVkIGludG8gYSBzY3JhdGNoIGJ1ZmZlciB0aGF0 DQorCQkJCQkJCQkgKiBpcyByZXVzZWQgb24gdGhlIG5leHQgbG9vcCBpdGVyYXRpb24sIHNvIHdl DQorCQkJCQkJCQkgKiBtdXN0IGtlZXAgdGhlIGhlYXAgVElEIGJ5IHZhbHVlLCBub3QgcG9pbnQN CisJCQkJCQkJCSAqIGludG8gdGhlICh0cmFuc2llbnQpIGRlY29kZWQgdHVwbGUgKi8NCiB9IEJ0 cmVlTGFzdFZpc2libGVFbnRyeTsNCiANCiAvKg0KQEAgLTkzNSw3ICs5NDAsOCBAQCBidF9lbnRy eV91bmlxdWVfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5kZXhUdXBsZSBpdHVwLA0K IAkJCQlsVmlzLT5ibGtubyA9IHRhcmdldGJsb2NrOw0KIAkJCQlsVmlzLT5vZmZzZXQgPSBvZmZz ZXQ7DQogCQkJCWxWaXMtPnBvc3RpbmdJbmRleCA9IGk7DQotCQkJCWxWaXMtPnRpZCA9IHRpZDsN CisJCQkJSXRlbVBvaW50ZXJDb3B5KHRpZCwgJmxWaXMtPnRpZGRhdGEpOw0KKwkJCQlsVmlzLT50 aWQgPSAmbFZpcy0+dGlkZGF0YTsNCiAJCQl9DQogCQl9DQogCX0NCkBAIC05NjEsNyArOTY3LDgg QEAgYnRfZW50cnlfdW5pcXVlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVw bGUgaXR1cCwNCiANCiAJCQlsVmlzLT5ibGtubyA9IHRhcmdldGJsb2NrOw0KIAkJCWxWaXMtPm9m ZnNldCA9IG9mZnNldDsNCi0JCQlsVmlzLT50aWQgPSB0aWQ7DQorCQkJSXRlbVBvaW50ZXJDb3B5 KHRpZCwgJmxWaXMtPnRpZGRhdGEpOw0KKwkJCWxWaXMtPnRpZCA9ICZsVmlzLT50aWRkYXRhOw0K IAkJCWxWaXMtPnBvc3RpbmdJbmRleCA9IC0xOw0KIAkJfQ0KIAl9DQpAQCAtMTIyOSw2ICsxMjM2 LDE2IEBAIGJ0X3RhcmdldF9wYWdlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUpDQogCU9m ZnNldE51bWJlciBtYXg7DQogCUJUUGFnZU9wYXF1ZSB0b3BhcXVlOw0KIA0KKwkvKg0KKwkgKiBT Y3JhdGNoIHNwYWNlIGZvciBkZWNvZGluZyBwcmVmaXgtY29kZWQgbGVhZiB0dXBsZXMgKF9idF9n ZXRpdGVtKS4NCisJICogaXR1cGJ1ZiBiYWNrcyB0aGUgY3VycmVudCBsb29wIGl0ZW07IGNyb3Nz YnVmIGJhY2tzIHRoZSByaWdodCBzaWJsaW5nJ3MNCisJICogZmlyc3QgaXRlbSBpbiB0aGUgY3Jv c3MtcGFnZSB1bmlxdWUgY2hlY2ssIHdoaWNoIG11c3QgY29leGlzdCB3aXRoIHRoZQ0KKwkgKiBj dXJyZW50IGl0ZW0ncyBzdGF0ZS4gIEEgcGl2b3QsIGhpZ2gga2V5IG9yIG5vbi1wcmVmaXggbGVh ZiBpdGVtIGlzDQorCSAqIHJldHVybmVkIGJ5IF9idF9nZXRpdGVtIHVuY2hhbmdlZCAoYnVmZmVy IHVudXNlZCkuDQorCSAqLw0KKwlCVEl0ZW1CdWYJaXR1cGJ1ZjsNCisJQlRJdGVtQnVmCWNyb3Nz YnVmOw0KKw0KIAkvKiBMYXN0IHZpc2libGUgZW50cnkgaW5mbyBmb3IgY2hlY2tpbmcgaW5kZXhl cyB3aXRoIHVuaXF1ZSBjb25zdHJhaW50ICovDQogCUJ0cmVlTGFzdFZpc2libGVFbnRyeSBsVmlz ID0ge0ludmFsaWRCbG9ja051bWJlciwgSW52YWxpZE9mZnNldE51bWJlciwgLTEsIE5VTEx9Ow0K IA0KQEAgLTEyNjYsNiArMTI4Myw1NCBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNr U3RhdGUgKnN0YXRlKQ0KIAkJfQ0KIAl9DQogDQorCS8qDQorCSAqIFN0cnVjdHVyYWwgY2hlY2tz IGZvciBhIHByZWZpeC1jb21wcmVzc2VkIChCVFBfUFJFRklYKSBsZWFmLiAgQSByZWFkZXINCisJ ICogdHJ1c3RzIHRoaXMgZm9ybWF0IGltcGxpY2l0bHksIHNvIHZhbGlkYXRlIHRoZSBwYXJ0cyB0 aGF0IGFuIG91dC1vZi0NCisJICogcGxhY2UgZGVjb2RlIHdvdWxkIG90aGVyd2lzZSByZWFkIGFz IGdhcmJhZ2U6IHRoZSBmbGFnIGFwcGVhcnMgb25seSBvbg0KKwkgKiBsZWFmIHBhZ2VzLCBhbmQg dGhlIFBSRUZJWCBpdGVtIHNpdHMgYXQgdGhlIGV4cGVjdGVkIG9mZnNldCB3aXRoIGENCisJICog bGVuZ3RoIGluIHRoZSBsZWdhbCByYW5nZS4gIFRoZSBwZXItaXRlbSBrZXkvY29udGVudCBjaGVj a3MgYmVsb3cgcnVuDQorCSAqIG9uIHRoZSBkZWNvZGVkIHR1cGxlIGZyb20gX2J0X2dldGl0ZW0s IHdoaWNoIGZhaWxzIG9uIGEgbWFsZm9ybWVkIGNvZGVkDQorCSAqIGl0ZW0sIHNvIGl0ZW0tbGV2 ZWwgY29kaW5nIGlzIGNvdmVyZWQgdGhlcmUuDQorCSAqLw0KKwlpZiAoUF9IQVNQUkVGSVgodG9w YXF1ZSkpDQorCXsNCisJCUl0ZW1JZAkJcGl0ZW1pZDsNCisJCUluZGV4VHVwbGUJcGl0dXA7DQor CQlTaXplCQlwcmVmaXhsZW47DQorCQlPZmZzZXROdW1iZXIgcHJlZml4b2ZmID0gQlRQYWdlR2V0 UHJlZml4T2ZmKHRvcGFxdWUpOw0KKw0KKwkJaWYgKCFQX0lTTEVBRih0b3BhcXVlKSkNCisJCQll cmVwb3J0KEVSUk9SLA0KKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLA0K KwkJCQkJIGVycm1zZygicHJlZml4IGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIG5vbi1sZWFmIHBh Z2UgaW4gaW5kZXggXCIlc1wiIiwNCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3Rh dGUtPnJlbCkpLA0KKwkJCQkJIGVycmRldGFpbF9pbnRlcm5hbCgiSW5kZXggYmxvY2s9JXUgcGFn ZSBsc249JVgvJTA4WC4iLA0KKwkJCQkJCQkJCQlzdGF0ZS0+dGFyZ2V0YmxvY2ssDQorCQkJCQkJ CQkJCUxTTl9GT1JNQVRfQVJHUyhzdGF0ZS0+dGFyZ2V0bHNuKSkpKTsNCisNCisJCWlmIChwcmVm aXhvZmYgPiBtYXgpDQorCQkJZXJlcG9ydChFUlJPUiwNCisJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5ERVhfQ09SUlVQVEVEKSwNCisJCQkJCSBlcnJtc2coInByZWZpeC1jb21wcmVzc2VkIHBhZ2Ug aGFzIG5vIFBSRUZJWCBpdGVtIGluIGluZGV4IFwiJXNcIiIsDQorCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSwNCisJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIklu ZGV4IGJsb2NrPSV1IHByZWZpeCBvZmZzZXQ9JXUgbWF4IG9mZnNldD0ldSBwYWdlIGxzbj0lWC8l MDhYLiIsDQorCQkJCQkJCQkJCXN0YXRlLT50YXJnZXRibG9jaywgcHJlZml4b2ZmLCBtYXgsDQor CQkJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhzdGF0ZS0+dGFyZ2V0bHNuKSkpKTsNCisNCisJCXBp dGVtaWQgPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgc3RhdGUtPnRhcmdldGJsb2NrLA0K KwkJCQkJCQkJCSAgIHN0YXRlLT50YXJnZXQsIHByZWZpeG9mZik7DQorCQlwaXR1cCA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+dGFyZ2V0LCBwaXRlbWlkKTsNCisJCXByZWZpeGxl biA9IEluZGV4VHVwbGVTaXplKHBpdHVwKSAtIHNpemVvZihJbmRleFR1cGxlRGF0YSk7DQorCQlp ZiAocHJlZml4bGVuIDwgMSB8fCBwcmVmaXhsZW4gPiBCVFJFRV9QUkVGSVhfTUFYKQ0KKwkJCWVy ZXBvcnQoRVJST1IsDQorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksDQor CQkJCQkgZXJybXNnKCJQUkVGSVggaXRlbSBoYXMgaW52YWxpZCBsZW5ndGggaW4gaW5kZXggXCIl c1wiIiwNCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpLA0KKwkJ CQkJIGVycmRldGFpbF9pbnRlcm5hbCgiSW5kZXggYmxvY2s9JXUgcHJlZml4IGxlbmd0aD0lenUg cGFnZSBsc249JVgvJTA4WC4iLA0KKwkJCQkJCQkJCQlzdGF0ZS0+dGFyZ2V0YmxvY2ssIHByZWZp eGxlbiwNCisJCQkJCQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHN0YXRlLT50YXJnZXRsc24pKSkpOw0K Kwl9DQorDQogCS8qDQogCSAqIExvb3Agb3ZlciBwYWdlIGl0ZW1zLCBzdGFydGluZyBmcm9tIGZp cnN0IG5vbi1oaWdoa2V5IGl0ZW0sIG5vdCBoaWdoDQogCSAqIGtleSAoaWYgYW55KS4gIE1vc3Qg dGVzdHMgYXJlIG5vdCBwZXJmb3JtZWQgZm9yIHRoZSAibmVnYXRpdmUgaW5maW5pdHkiDQpAQCAt MTI5Myw4ICsxMzU4LDE1IEBAIGJ0X3RhcmdldF9wYWdlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAq c3RhdGUpDQogDQogCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgc3RhdGUt PnRhcmdldGJsb2NrLA0KIAkJCQkJCQkJCSAgc3RhdGUtPnRhcmdldCwgb2Zmc2V0KTsNCi0JCWl0 dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsNCi0J CXR1cHNpemUgPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsNCisNCisJCS8qDQorCQkgKiBscF9sZW4g YW5kIHRoZSB0dXBsZSBzaXplIGxpbWl0IGFyZSBwaHlzaWNhbCBwcm9wZXJ0aWVzIG9mIHRoZSBp dGVtDQorCQkgKiBhcyBzdG9yZWQsIHNvIHRoZXkgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgcmF3 IG9uLXBhZ2UgdHVwbGUgKGNvZGVkLA0KKwkJICogb24gYSBCVFBfUFJFRklYIGxlYWYpLiAgRXZl cnkga2V5L2NvbnRlbnQgY2hlY2sgYmVsb3cgaW5zdGVhZCB1c2VzDQorCQkgKiB0aGUgZGVjb2Rl ZCB0dXBsZSByZXR1cm5lZCBieSBfYnRfZ2V0aXRlbS4NCisJCSAqLw0KKwkJdHVwc2l6ZSA9IElu ZGV4VHVwbGVTaXplKChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+dGFyZ2V0LCBpdGVt aWQpKTsNCisJCWl0dXAgPSBfYnRfZ2V0aXRlbShzdGF0ZS0+dGFyZ2V0LCBvZmZzZXQsICZpdHVw YnVmKTsNCiANCiAJCS8qDQogCQkgKiBscF9sZW4gc2hvdWxkIG1hdGNoIHRoZSBJbmRleFR1cGxl IHJlcG9ydGVkIGxlbmd0aCBleGFjdGx5LCBzaW5jZQ0KQEAgLTE2MDYsNyArMTY3OCw3IEBAIGJ0 X3RhcmdldF9wYWdlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUpDQogCQkJaXRlbWlkID0g UGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9jaywNCiAJCQkJCQkJ CQkJICBzdGF0ZS0+dGFyZ2V0LA0KIAkJCQkJCQkJCQkgIE9mZnNldE51bWJlck5leHQob2Zmc2V0 KSk7DQotCQkJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+dGFyZ2V0LCBp dGVtaWQpOw0KKwkJCWl0dXAgPSBfYnRfZ2V0aXRlbShzdGF0ZS0+dGFyZ2V0LCBPZmZzZXROdW1i ZXJOZXh0KG9mZnNldCksICZpdHVwYnVmKTsNCiAJCQl0aWQgPSBCVHJlZVR1cGxlR2V0UG9pbnRz VG9USUQoaXR1cCk7DQogCQkJbmh0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsDQogCQkJCQkJCSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyTm9DaGVjayh0aWQpLA0KQEAgLTE3OTMsNyArMTg2NSw3 IEBAIGJ0X3RhcmdldF9wYWdlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUpDQogCQkJCQlp dGVtaWQgPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgcmlnaHRibG9ja19udW1iZXIsDQog CQkJCQkJCQkJCQkJICByaWdodHBhZ2UsDQogCQkJCQkJCQkJCQkJICByaWdodGZpcnN0b2Zmc2V0 KTsNCi0JCQkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocmlnaHRwYWdlLCBpdGVt aWQpOw0KKwkJCQkJaXR1cCA9IF9idF9nZXRpdGVtKHJpZ2h0cGFnZSwgcmlnaHRmaXJzdG9mZnNl dCwgJmNyb3NzYnVmKTsNCiANCiAJCQkJCWJ0X2VudHJ5X3VuaXF1ZV9jaGVjayhzdGF0ZSwgaXR1 cCwgcmlnaHRibG9ja19udW1iZXIsIHJpZ2h0Zmlyc3RvZmZzZXQsICZsVmlzKTsNCiANCkBAIC0x ODU3LDYgKzE5MjksOCBAQCBidF9yaWdodF9wYWdlX2NoZWNrX3NjYW5rZXkoQnRyZWVDaGVja1N0 YXRlICpzdGF0ZSwgT2Zmc2V0TnVtYmVyICpyaWdodGZpcnN0b2Zmcw0KIAlCbG9ja051bWJlciB0 YXJnZXRuZXh0Ow0KIAlQYWdlCQlyaWdodHBhZ2U7DQogCU9mZnNldE51bWJlciBubGluZTsNCisJ T2Zmc2V0TnVtYmVyIHJpZ2h0b2Zmc2V0Ow0KKwlCVEl0ZW1CdWYJZmlyc3RidWY7DQogDQogCS8q IERldGVybWluZSB0YXJnZXQncyBuZXh0IGJsb2NrIG51bWJlciAqLw0KIAlvcGFxdWUgPSBCVFBh Z2VHZXRPcGFxdWUoc3RhdGUtPnRhcmdldCk7DQpAQCAtMjAxNiw2ICsyMDkwLDcgQEAgYnRfcmln aHRfcGFnZV9jaGVja19zY2Fua2V5KEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIE9mZnNldE51bWJl ciAqcmlnaHRmaXJzdG9mZnMNCiAJCS8qIFJldHVybiBmaXJzdCBkYXRhIGl0ZW0gKGlmIGFueSkg Ki8NCiAJCXJpZ2h0aXRlbSA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlLCB0YXJnZXRuZXh0 LCByaWdodHBhZ2UsDQogCQkJCQkJCQkJCSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpKTsNCisJCXJp Z2h0b2Zmc2V0ID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsNCiAJCSpyaWdodGZpcnN0b2Zmc2V0 ID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsNCiAJfQ0KIAllbHNlIGlmICghUF9JU0xFQUYob3Bh cXVlKSAmJg0KQEAgLTIwMjcsNiArMjEwMiw3IEBAIGJ0X3JpZ2h0X3BhZ2VfY2hlY2tfc2Nhbmtl eShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1iZXIgKnJpZ2h0Zmlyc3RvZmZzDQog CQkgKi8NCiAJCXJpZ2h0aXRlbSA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlLCB0YXJnZXRu ZXh0LCByaWdodHBhZ2UsDQogCQkJCQkJCQkJCSBPZmZzZXROdW1iZXJOZXh0KFBfRklSU1REQVRB S0VZKG9wYXF1ZSkpKTsNCisJCXJpZ2h0b2Zmc2V0ID0gT2Zmc2V0TnVtYmVyTmV4dChQX0ZJUlNU REFUQUtFWShvcGFxdWUpKTsNCiAJfQ0KIAllbHNlDQogCXsNCkBAIC0yMDQ2LDkgKzIxMjIsMTkg QEAgYnRfcmlnaHRfcGFnZV9jaGVja19zY2Fua2V5KEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIE9m ZnNldE51bWJlciAqcmlnaHRmaXJzdG9mZnMNCiAJLyoNCiAJICogUmV0dXJuIGZpcnN0IHJlYWwg aXRlbSBzY2Fua2V5LiAgTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIHJpZ2h0IHBhZ2UNCiAJICog bWVtb3J5IHJlbWFpbmluZyBhbGxvY2F0ZWQuDQorCSAqDQorCSAqIE9uIGEgQlRQX1BSRUZJWCBs ZWFmIHRoZSBmaXJzdCBkYXRhIGl0ZW0gaXMgcHJlZml4LWNvZGVkLCBzbyBkZWNvZGUgaXQ7DQor CSAqIGJlY2F1c2UgdGhlIHJldHVybmVkIHNjYW5rZXkgKGJ1aWx0IGJ5IF9idF9ta3NjYW5rZXkp IHJlZmVyZW5jZXMgdGhlDQorCSAqIHR1cGxlJ3Mgb3duIHN0b3JhZ2UsIGFuZCBfYnRfZ2V0aXRl bSBkZWNvZGVzIGludG8gYSBidWZmZXIgbG9jYWwgdG8NCisJICogdGhpcyBmdW5jdGlvbiwgY29w eSB0aGUgZGVjb2RlZCB0dXBsZSBpbnRvIHRoZSBjYWxsZXItcmVzZXQgbWVtb3J5DQorCSAqIGNv bnRleHQgc28gaXQgb3V0bGl2ZXMgdGhlIGNhbGwuICBBIHBpdm90IG9yIG5vbi1wcmVmaXggaXRl bSBpcw0KKwkgKiByZXR1cm5lZCBieSBfYnRfZ2V0aXRlbSB1bmNoYW5nZWQgKGl0IGxpdmVzIGlu IHRoZSByaWdodCBwYWdlLCB3aGljaA0KKwkgKiByZW1haW5zIGFsbG9jYXRlZCksIHNvIG5vIGNv cHkgaXMgbmVlZGVkIHRoZW4uDQogCSAqLw0KLQlmaXJzdGl0dXAgPSAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocmlnaHRwYWdlLCByaWdodGl0ZW0pOw0KLQlyZXR1cm4gYnRfbWtzY2Fua2V5X3Bp dm90c2VhcmNoKHN0YXRlLT5yZWwsIGZpcnN0aXR1cCk7DQorCWZpcnN0aXR1cCA9IF9idF9nZXRp dGVtKHJpZ2h0cGFnZSwgcmlnaHRvZmZzZXQsICZmaXJzdGJ1Zik7DQorCWlmIChmaXJzdGl0dXAg PT0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHJpZ2h0cGFnZSwgcmlnaHRpdGVtKSkNCisJCXJl dHVybiBidF9ta3NjYW5rZXlfcGl2b3RzZWFyY2goc3RhdGUtPnJlbCwgZmlyc3RpdHVwKTsNCisJ cmV0dXJuIGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChzdGF0ZS0+cmVsLCBDb3B5SW5kZXhUdXBs ZShmaXJzdGl0dXApKTsNCiB9DQogDQogLyoNCkBAIC0zMDk1LDE0ICszMTgxLDEzIEBAIHN0YXRp YyBpbmxpbmUgYm9vbA0KIGludmFyaWFudF9sX29mZnNldChCdHJlZUNoZWNrU3RhdGUgKnN0YXRl LCBCVFNjYW5JbnNlcnQga2V5LA0KIAkJCQkgICBPZmZzZXROdW1iZXIgdXBwZXJib3VuZCkNCiB7 DQotCUl0ZW1JZAkJaXRlbWlkOw0KIAlpbnQzMgkJY21wOw0KIA0KIAlBc3NlcnQoIWtleS0+bmV4 dGtleSAmJiBrZXktPmJhY2t3YXJkKTsNCiANCiAJLyogVmVyaWZ5IGxpbmUgcG9pbnRlciBiZWZv cmUgY2hlY2tpbmcgdHVwbGUgKi8NCi0JaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3Rh dGUsIHN0YXRlLT50YXJnZXRibG9jaywgc3RhdGUtPnRhcmdldCwNCi0JCQkJCQkJCSAgdXBwZXJi b3VuZCk7DQorCSh2b2lkKSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgc3RhdGUtPnRhcmdl dGJsb2NrLCBzdGF0ZS0+dGFyZ2V0LA0KKwkJCQkJCQkJdXBwZXJib3VuZCk7DQogCS8qIHBnX3Vw Z3JhZGUnZCBpbmRleGVzIG1heSBsZWdhbGx5IGhhdmUgZXF1YWwgc2libGluZyB0dXBsZXMgKi8N CiAJaWYgKCFrZXktPmhlYXBrZXlzcGFjZSkNCiAJCXJldHVybiBpbnZhcmlhbnRfbGVxX29mZnNl dChzdGF0ZSwga2V5LCB1cHBlcmJvdW5kKTsNCkBAIC0zMTIyLDExICszMjA3LDEyIEBAIGludmFy aWFudF9sX29mZnNldChCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBCVFNjYW5JbnNlcnQga2V5LA0K IAl7DQogCQlCVFBhZ2VPcGFxdWUgdG9wYXF1ZTsNCiAJCUluZGV4VHVwbGUJcml0dXA7DQorCQlC VEl0ZW1CdWYJcml0dXBidWY7DQogCQlpbnQJCQl1cHBua2V5YXR0czsNCiAJCUl0ZW1Qb2ludGVy IHJoZWFwdGlkOw0KIAkJYm9vbAkJbm9ucGl2b3Q7DQogDQotCQlyaXR1cCA9IChJbmRleFR1cGxl KSBQYWdlR2V0SXRlbShzdGF0ZS0+dGFyZ2V0LCBpdGVtaWQpOw0KKwkJcml0dXAgPSBfYnRfZ2V0 aXRlbShzdGF0ZS0+dGFyZ2V0LCB1cHBlcmJvdW5kLCAmcml0dXBidWYpOw0KIAkJdG9wYXF1ZSA9 IEJUUGFnZUdldE9wYXF1ZShzdGF0ZS0+dGFyZ2V0KTsNCiAJCW5vbnBpdm90ID0gUF9JU0xFQUYo dG9wYXF1ZSkgJiYgdXBwZXJib3VuZCA+PSBQX0ZJUlNUREFUQUtFWSh0b3BhcXVlKTsNCiANCkBA IC0zMjE4LDE0ICszMzA0LDEzIEBAIGludmFyaWFudF9sX25vbnRhcmdldF9vZmZzZXQoQnRyZWVD aGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5zZXJ0IGtleSwNCiAJCQkJCQkJIEJsb2NrTnVtYmVy IG5vbnRhcmdldGJsb2NrLCBQYWdlIG5vbnRhcmdldCwNCiAJCQkJCQkJIE9mZnNldE51bWJlciB1 cHBlcmJvdW5kKQ0KIHsNCi0JSXRlbUlkCQlpdGVtaWQ7DQogCWludDMyCQljbXA7DQogDQogCUFz c2VydCgha2V5LT5uZXh0a2V5ICYmIGtleS0+YmFja3dhcmQpOw0KIA0KIAkvKiBWZXJpZnkgbGlu ZSBwb2ludGVyIGJlZm9yZSBjaGVja2luZyB0dXBsZSAqLw0KLQlpdGVtaWQgPSBQYWdlR2V0SXRl bUlkQ2FyZWZ1bChzdGF0ZSwgbm9udGFyZ2V0YmxvY2ssIG5vbnRhcmdldCwNCi0JCQkJCQkJCSAg dXBwZXJib3VuZCk7DQorCSh2b2lkKSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgbm9udGFy Z2V0YmxvY2ssIG5vbnRhcmdldCwNCisJCQkJCQkJCXVwcGVyYm91bmQpOw0KIAljbXAgPSBfYnRf Y29tcGFyZShzdGF0ZS0+cmVsLCBrZXksIG5vbnRhcmdldCwgdXBwZXJib3VuZCk7DQogDQogCS8q IHBnX3VwZ3JhZGUnZCBpbmRleGVzIG1heSBsZWdhbGx5IGhhdmUgZXF1YWwgc2libGluZyB0dXBs ZXMgKi8NCkBAIC0zMjM2LDEyICszMzIxLDEzIEBAIGludmFyaWFudF9sX25vbnRhcmdldF9vZmZz ZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5zZXJ0IGtleSwNCiAJaWYgKGNtcCA9 PSAwKQ0KIAl7DQogCQlJbmRleFR1cGxlCWNoaWxkOw0KKwkJQlRJdGVtQnVmCWNoaWxkYnVmOw0K IAkJaW50CQkJdXBwbmtleWF0dHM7DQogCQlJdGVtUG9pbnRlciBjaGlsZGhlYXB0aWQ7DQogCQlC VFBhZ2VPcGFxdWUgY29wYXF1ZTsNCiAJCWJvb2wJCW5vbnBpdm90Ow0KIA0KLQkJY2hpbGQgPSAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0obm9udGFyZ2V0LCBpdGVtaWQpOw0KKwkJY2hpbGQgPSBf YnRfZ2V0aXRlbShub250YXJnZXQsIHVwcGVyYm91bmQsICZjaGlsZGJ1Zik7DQogCQljb3BhcXVl ID0gQlRQYWdlR2V0T3BhcXVlKG5vbnRhcmdldCk7DQogCQlub25waXZvdCA9IFBfSVNMRUFGKGNv cGFxdWUpICYmIHVwcGVyYm91bmQgPj0gUF9GSVJTVERBVEFLRVkoY29wYXF1ZSk7DQogDQpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX2luZGV4LnNnbWwNCmluZGV4IGJiNzUwNWQxNzFiLi43ZTY2NzY1YzNkMyAx MDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwNCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwNCkBAIC00NzcsNiArNDc3LDQxIEBAIENS RUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9DQogICAgIDwvbm90ZT4NCiAgICAgPC9saXN0aXRlbT4NCiAg ICA8L3Zhcmxpc3RlbnRyeT4NCisNCisgICA8dmFybGlzdGVudHJ5IGlkPSJpbmRleC1yZWxvcHRp b24tcHJlZml4LWNvbXByZXNzaW9uIiB4cmVmbGFiZWw9InByZWZpeF9jb21wcmVzc2lvbiI+DQor ICAgIDx0ZXJtPjxsaXRlcmFsPnByZWZpeF9jb21wcmVzc2lvbjwvbGl0ZXJhbD4gKDx0eXBlPmJv b2xlYW48L3R5cGU+KQ0KKyAgICAgPGluZGV4dGVybT4NCisgICAgICA8cHJpbWFyeT48dmFybmFt ZT5wcmVmaXhfY29tcHJlc3Npb248L3Zhcm5hbWU+IHN0b3JhZ2UgcGFyYW1ldGVyPC9wcmltYXJ5 Pg0KKyAgICAgPC9pbmRleHRlcm0+DQorICAgIDwvdGVybT4NCisgICAgPGxpc3RpdGVtPg0KKyAg ICA8cGFyYT4NCisgICAgICBDb250cm9scyBsZWFmIGtleSBwcmVmaXggY29tcHJlc3Npb24uICBX aGVuIHNldCB0bw0KKyAgICAgIDxsaXRlcmFsPk9OPC9saXRlcmFsPiwgYW5kIHRoZSBpbmRleCdz IGZpcnN0IGtleSBjb2x1bW4gaXMgb2YgYQ0KKyAgICAgIHZhcmlhYmxlLWxlbmd0aCB0eXBlLCBh IGxlYWYgcGFnZSBtYXkgc3RvcmUgYSBzaGFyZWQgcHJlZml4IG9mIHRoYXQNCisgICAgICBjb2x1 bW4gb25jZSBhbmQgcmVjb3JkIG9ubHkgZWFjaCB0dXBsZSdzIHVuc2hhcmVkIHJlbWFpbmRlciwg d2hpY2ggY2FuDQorICAgICAgc3Vic3RhbnRpYWxseSBzaHJpbmsgaW5kZXhlcyBvbiBrZXlzIHRo YXQgc2hhcmUgbG9uZyBsZWFkaW5nIGJ5dGVzDQorICAgICAgKGZvciBleGFtcGxlIFVSTHMgb3Ig PHR5cGU+anNvbmI8L3R5cGU+IGtleXMgd2l0aCBjb21tb24gcGF0aHMpLiAgU2V0DQorICAgICAg dG8gPGxpdGVyYWw+T048L2xpdGVyYWw+IG9yIDxsaXRlcmFsPk9GRjwvbGl0ZXJhbD4gdG8gZW5h YmxlIG9yIGRpc2FibGUNCisgICAgICB0aGUgb3B0aW1pemF0aW9uLiAgVGhlIGRlZmF1bHQgaXMg PGxpdGVyYWw+T0ZGPC9saXRlcmFsPi4NCisgICAgPC9wYXJhPg0KKw0KKyAgICA8bm90ZT4NCisg ICAgIDxwYXJhPg0KKyAgICAgIFByZWZpeCBjb21wcmVzc2lvbiBvbmx5IGNoYW5nZXMgaG93IGtl eXMgYXJlIHN0b3JlZDsgY29tcGFyaXNvbnMgYWx3YXlzDQorICAgICAgc2VlIHRoZSBvcmlnaW5h bCBrZXkgdmFsdWVzLCBzbyBldmVyeSBjb2xsYXRpb24gYW5kIG9wZXJhdG9yIGNsYXNzDQorICAg ICAgYmVoYXZlcyBpZGVudGljYWxseSB3aXRoIGl0IG9uIG9yIG9mZi4gIEEgbGVhZiBhZG9wdHMg YSBwcmVmaXggb25seSB3aGVuDQorICAgICAgaXQgaXMgd3JpdHRlbiBhcyBhIHdob2xlIChkdXJp bmcgYW4gaW5kZXggYnVpbGQsIG9yIGVpdGhlciBoYWxmIG9mIGENCisgICAgICBwYWdlIHNwbGl0 KSwgc28gdHVybmluZyA8bGl0ZXJhbD5wcmVmaXhfY29tcHJlc3Npb248L2xpdGVyYWw+IG9uIG9y IG9mZg0KKyAgICAgIHZpYSA8Y29tbWFuZD5BTFRFUiBJTkRFWDwvY29tbWFuZD4gZG9lcyBub3Qg cmV3cml0ZSB0aGUgaW5kZXg6IGV4aXN0aW5nDQorICAgICAgcGFnZXMgYXJlIGxlZnQgYXMgdGhl eSBhcmUgYW5kIGFyZSBjb252ZXJ0ZWQgdGhlIG5leHQgdGltZSB0aGV5IGFyZQ0KKyAgICAgIHdy aXR0ZW4gd2hvbGUuICBObyA8Y29tbWFuZD5SRUlOREVYPC9jb21tYW5kPiBpcyByZXF1aXJlZCwg YW5kIGluZGV4ZXMNCisgICAgICB1cGdyYWRlZCB3aXRoIDxhcHBsaWNhdGlvbj5wZ191cGdyYWRl PC9hcHBsaWNhdGlvbj4ga2VlcCB3b3JraW5nDQorICAgICAgdW5jaGFuZ2VkLg0KKyAgICAgPC9w YXJhPg0KKyAgICA8L25vdGU+DQorICAgIDwvbGlzdGl0ZW0+DQorICAgPC92YXJsaXN0ZW50cnk+ DQogICAgPC92YXJpYWJsZWxpc3Q+DQogDQogICAgPHBhcmE+DQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3JlbG9wdGlvbnMuYw0KaW5kZXggZWE5YTA0MTc5MDkuLmJlMWZjZDlhMTViIDEwMDY0NA0K LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMNCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jDQpAQCAtMTUzLDYgKzE1MywxNiBAQCBz dGF0aWMgcmVsb3B0X2Jvb2wgYm9vbFJlbE9wdHNbXSA9DQogCQl9LA0KIAkJdHJ1ZQ0KIAl9LA0K Kwl7DQorCQl7DQorCQkJInByZWZpeF9jb21wcmVzc2lvbiIsDQorCQkJIkVuYWJsZXMgbGVhZiBr ZXkgcHJlZml4IGNvbXByZXNzaW9uIGZvciB0aGlzIGJ0cmVlIGluZGV4IiwNCisJCQlSRUxPUFRf S0lORF9CVFJFRSwNCisJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sJLyogc2luY2UgaXQgYXBw bGllcyBvbmx5IHRvIGxhdGVyDQorCQkJCQkJCQkJCSAqIHdob2xlLXBhZ2Ugd3JpdGVzICovDQor CQl9LA0KKwkJZmFsc2UNCisJfSwNCiAJLyogbGlzdCB0ZXJtaW5hdG9yICovDQogCXt7TlVMTH19 DQogfTsNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZQ0KaW5kZXggMGRhZjY0MGFmOTYuLjAw NDRkNzdmNTQ4IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmls ZQ0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZQ0KQEAgLTE4LDYgKzE4 LDcgQEAgT0JKUyA9IFwNCiAJbmJ0aW5zZXJ0Lm8gXA0KIAluYnRwYWdlLm8gXA0KIAluYnRwcmVw cm9jZXNza2V5cy5vIFwNCisJbmJ0cHJlZml4Lm8gXA0KIAluYnRyZWFkcGFnZS5vIFwNCiAJbmJ0 cmVlLm8gXA0KIAluYnRzZWFyY2gubyBcDQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQ0KaW5kZXgg ZjM4Njc1NDc2OTEuLjU5NmU1OTVmMjBiIDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9SRUFETUUNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FDQpA QCAtMTA4MSwzICsxMDgxLDEwMCBAQCBpdGVtIGlzIGlycmVsZXZhbnQsIGFuZCBuZWVkIG5vdCBi ZSBzdG9yZWQgYXQgYWxsLiAgVGhpcyBhcnJhbmdlbWVudA0KIGNvcnJlc3BvbmRzIHRvIHRoZSBm YWN0IHRoYXQgYW4gTCZZIG5vbi1sZWFmIHBhZ2UgaGFzIG9uZSBtb3JlIHBvaW50ZXINCiB0aGFu IGtleS4gIFN1ZmZpeCB0cnVuY2F0aW9uJ3MgbmVnYXRpdmUgaW5maW5pdHkgYXR0cmlidXRlcyBi ZWhhdmUgaW4NCiB0aGUgc2FtZSB3YXkuDQorDQorTm90ZXMgYWJvdXQgbGVhZiBrZXkgcHJlZml4 IGNvbXByZXNzaW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Kw0KK1dpdGggdGhlIHByZWZpeF9jb21wcmVzc2lvbiBzdG9yYWdlIHBhcmFtZXRlciAoZGVmYXVs dCBvZmYpIGEgbGVhZiBwYWdlIG1heQ0KK2Zyb250LWNvZGUgdGhlIGZpcnN0IGtleSBjb2x1bW4g b2YgZWFjaCBvZiBpdHMgZGF0YSB0dXBsZXMgYWdhaW5zdCBhIHBlci1wYWdlDQorcHJlZml4LCB3 aGljaCBzaHJpbmtzIGluZGV4ZXMgb24ga2V5cyB0aGF0IHNoYXJlIGxvbmcgbGVhZGluZyBieXRl cyAoVVJMcywNCitqc29uYiBrZXlzIHdpdGggY29tbW9uIHBhdGhzLCB6ZXJvLXBhZGRlZCBjb2Rl cykuICBMaWtlIGRlZHVwbGljYXRpb24sIHRoaXMNCithbHRlcnMgdGhlIHBoeXNpY2FsIHJlcHJl c2VudGF0aW9uIG9mIHR1cGxlcyB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2dpY2FsDQorY29udGVu dHMgb2YgdGhlIGluZGV4LCBhbmQgY29tcGFyaXNvbnMgYWx3YXlzIG9wZXJhdGUgb24gdGhlIHJl Y29uc3RydWN0ZWQNCitvcmlnaW5hbCB2YWx1ZXMsIHNvIGV2ZXJ5IGNvbGxhdGlvbiBhbmQgb3Bl cmF0b3IgY2xhc3MgaXMgdW5hZmZlY3RlZC4NCisNCitBIGxlYWYgdGhhdCB1c2VzIHRoZSB0ZWNo bmlxdWUgY2FycmllcyB0aGUgQlRQX1BSRUZJWCBwYWdlIGZsYWcgYW5kIG9uZSBleHRyYQ0KK2l0 ZW0sIHRoZSBQUkVGSVggaXRlbSwgYXQgdGhlIG9mZnNldCB3aGVyZSBpdHMgZmlyc3QgZGF0YSBp dGVtIHdvdWxkIG90aGVyd2lzZQ0KK2JlIChQX0hJS0VZIG9uIGEgcmlnaHRtb3N0IHBhZ2UsIFBf RklSU1RLRVkgb3RoZXJ3aXNlKTsgZGF0YSBpdGVtcyBiZWdpbiBvbmUNCitvZmZzZXQgbGF0ZXIs IHdoaWNoIFBfRklSU1REQVRBS0VZKCkgYWNjb3VudHMgZm9yLiAgVGhlIFBSRUZJWCBpdGVtIGlz IGFuDQorSW5kZXhUdXBsZURhdGEgaGVhZGVyIGZvbGxvd2VkIGJ5IDEuLkJUUkVFX1BSRUZJWF9N QVggcHJlZml4IGJ5dGVzLCBzaGFwZWQgc28NCit0aGF0IGNvZGUgd2hpY2ggd2Fsa3MgYSBwYWdl J3MgaXRlbXMgYnkgSW5kZXhUdXBsZVNpemUgKHN1Y2ggYXMNCitfYnRfcmVzdG9yZV9wYWdlKSBz dGVwcyBvdmVyIGl0LiAgT24gc3VjaCBhIHBhZ2UgZXZlcnkgbm9uLXBpdm90IHR1cGxlIChwbGFp bg0KK29yIHBvc3RpbmcpIHdob3NlIGZpcnN0IGtleSBjb2x1bW4gaXMgbm90IE5VTEwgc3RvcmVz IHRoYXQgY29sdW1uIGFzIGEgdmFybGVuYQ0KK3dob3NlIHBheWxvYWQgYmVnaW5zIHdpdGggYSBv bmUtYnl0ZSBjb3VudCBvZiBob3cgbWFueSBsZWFkaW5nIGJ5dGVzIGl0IHNoYXJlcw0KK3dpdGgg dGhlIHBhZ2UgcHJlZml4LCBmb2xsb3dlZCBieSB0aGUgdW5zaGFyZWQgcmVtYWluZGVyIChvciwg Zm9yIGEgdmFsdWUgd2hvc2UNCitoZWFkZXIgaXMgbm90IHRoZSBmb3JtIGluZGV4X2Zvcm1fdHVw bGUgd291bGQgcmVwcm9kdWNlLCB0aGUgd2hvbGUgdmFsdWUgYWZ0ZXINCithIHNlbnRpbmVsIGNv dW50KS4gIFRyYWlsaW5nIGtleSBjb2x1bW5zLCBJTkNMVURFIGNvbHVtbnMsIGEgcG9zdGluZyBs aXN0IGFuZA0KK2FsaWdubWVudCBwYWRkaW5nIGZvbGxvdywgbW92ZWQgdG8gcHJlc2VydmUgYWxp Z25tZW50OyBwYWRkaW5nIHRoYXQgaXMgb25seSB0aGUNCitrZXkncyBjbG9zaW5nIHplcm9zIGlz IGRyb3BwZWQgYW5kIHJlc3RvcmVkIG9uIGRlY29kZS4gIFBpdm90cywgTlVMTCBmaXJzdA0KK2Nv bHVtbnMgYW5kIHRoZSBoaWdoIGtleSBhcmUgYWx3YXlzIHN0b3JlZCB1bmNvbXByZXNzZWQuICBD b2RpbmcgYW5kIGRlY29kaW5nDQorZGVwZW5kIG9ubHkgb24gdGhlIHBhZ2UgcHJlZml4IGFuZCB0 aGUgdHVwbGUsIG5ldmVyIHRoZSBjYXRhbG9nLCBzbyBXQUwgcmVkbw0KK3JlcHJvZHVjZXMgdGhl bSBhbmQgZGVjb2RpbmcgeWllbGRzIHRoZSBvcmlnaW5hbCB0dXBsZSBieXRlIGZvciBieXRlLiAg QWxsIG9mDQorbmJ0cHJlZml4LmMgaW1wbGVtZW50cyB0aGlzOyBfYnRfZ2V0aXRlbSgpIGlzIHRo ZSBvbmUgYWNjZXNzb3IgdGhyb3VnaCB3aGljaA0KK3JlYWRlcnMgb2J0YWluIGEgZGVjb2RlZCBs ZWFmIGRhdGEgdHVwbGUuDQorDQorQSBwYWdlIGFkb3B0cyBhIHByZWZpeCBvbmx5IHdoZW4gaXQg aXMgd3JpdHRlbiBhcyBhIHdob2xlOiBhIGZpbmlzaGVkIGxlYWYNCitkdXJpbmcgYW4gaW5kZXgg YnVpbGQsIG9yIGVpdGhlciBoYWxmIG9mIGEgbGVhZiBwYWdlIHNwbGl0IChidWlsdCBjb2RlZCBm cm9tDQordGhlIHN0YXJ0IGJ5IF9idF9zcGxpdF9sZWFmX2hhbGYsIHNpbmNlIGEgY29tcHJlc3Nl ZCBsZWFmIGNhbiBob2xkIG1vcmUgbG9naWNhbA0KK2RhdGEgdGhhbiBmaXRzIG9uIGEgcGxhaW4g cGFnZSwgY2hvb3NpbmcgZWFjaCBoYWxmJ3Mgb3duIHByZWZpeCBhbmQgZmFsbGluZw0KK2JhY2sg dG8gYSBwbGFpbiBsYXlvdXQgb3IgdGhlIG9yaWdpbmFsIHBhZ2UncyBwcmVmaXggaWYgaXRzIG93 biBkb2VzIG5vdCBmaXQpLg0KK0NydWNpYWxseSwgbm8gaW5zZXJ0LCBWQUNVVU0sIGRlZHVwbGlj YXRpb24gb3IgY2hhbmdlIG9mIGEgcGFnZSdzIGtleSByYW5nZQ0KK2V2ZXIgcmV3cml0ZXMgYSBw YWdlIHRvIGtlZXAgaXRzIHByZWZpeCB2YWxpZDogYSB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gc2hh cmUNCitmZXdlciBieXRlcyBzaW1wbHkgcmVjb3JkcyBhIHNtYWxsZXIgc2hhcmVkIGNvdW50LiAg QmVjYXVzZSB0aGUgZm9ybWF0IGlzIGENCitwZXItcGFnZSBvcHQtaW4gZmxhZyB3aXRoIG5vIGJ0 cmVlIHZlcnNpb24gY2hhbmdlLCBwYWdlcyB3aXRob3V0IHRoZSBmbGFnIGFyZQ0KK3JlYWQgZXhh Y3RseSBhcyBiZWZvcmUsIHNvIHBnX3VwZ3JhZGUgYW5kIHBoeXNpY2FsL2xvZ2ljYWwgcmVwbGlj YXRpb24ga2VlcA0KK3dvcmtpbmcgYW5kIGV4aXN0aW5nIGluZGV4ZXMgY29udGludWUgdG8gd29y ayB3aXRoIG5vIFJFSU5ERVguICBUdXJuaW5nIHRoZQ0KK3BhcmFtZXRlciBvbiB3aXRoIEFMVEVS IElOREVYIGRvZXMgbm90IHJld3JpdGUgYW55dGhpbmc7IGVhY2ggbGVhZiBpcyBjb252ZXJ0ZWQN Cit0aGUgbmV4dCB0aW1lIGl0IGlzIHdyaXR0ZW4gd2hvbGUsIGFuZCBjb21wcmVzc2VkIGFuZCB1 bmNvbXByZXNzZWQgbGVhdmVzDQorY29leGlzdCBpbiB0aGUgc2FtZSBpbmRleCBpbmRlZmluaXRl bHkuICBUdXJuaW5nIGl0IG9mZiBsaWtld2lzZSByZXdyaXRlcw0KK25vdGhpbmc6IGV4aXN0aW5n IEJUUF9QUkVGSVggbGVhdmVzIGtlZXAgdGhlaXIgY29kZWQgZm9ybSAodGhlIGZsYWcgaXMgY2xl YXJlZA0KK29ubHkgd2hlbiBhIHBhZ2UgaXMgc3BsaXQsIGVtcHRpZWQgb3IgZGVkdXAtcmV3cml0 dGVuKSBhbmQgYXJlIHN0aWxsIHJlYWQgYmFjaw0KK2NvcnJlY3RseSB3aXRoIHRoZSBwYXJhbWV0 ZXIgb2ZmLCBzaW5jZSBldmVyeSByZWFkZXIgZGVjb2RlcyBiYXNlZCBvbiB0aGUgcGFnZQ0KK2Zs YWcsIG5vdCBvbiB0aGUgY3VycmVudCByZWxvcHRpb24uICBTY2FuLXRpbWUgd29ya3NwYWNlIHRo YXQgbXVzdCBob2xkIGRlY29kZWQNCit0dXBsZXMgKHRoZSBpbmRleC1vbmx5LXNjYW4gY3VyclR1 cGxlcy9tYXJrVHVwbGVzIGJ1ZmZlcnMsIHNlZQ0KK0JUVHVwbGVTdG9yYWdlU2l6ZSkgaXMgdGhl cmVmb3JlIHNpemVkIGZvciBhIGRlY29kZWQgcGFnZSBvbiBldmVyeSBidHJlZSBpbmRleCwNCitu b3QganVzdCB0aG9zZSB3aG9zZSBwYXJhbWV0ZXIgaXMgY3VycmVudGx5IG9uLg0KKw0KK0xlYWYg Y2hhbmdlcyB0byBhIHByZWZpeCBwYWdlIGFyZSByZXBsYXllZCB3aXRob3V0IGEgZnVsbC1wYWdl IGltYWdlIGluIHRoZQ0KK2NvbW1vbiBjYXNlLiAgUmVkbyBjYW5ub3QgcnVuIHRoZSBwcmVmaXgt Y2hvb3NpbmcgaGV1cmlzdGljIChpdCBoYXMgbm8NCityZWxjYWNoZSksIHNvIHRoZSBwcmltYXJ5 IGxvZ3MgdGhlIHByZWZpeCBpdCBjaG9zZSBhbmQgYm90aCBzaWRlcyBsYXkgdGhlDQorcGFnZSBv dXQgdGhyb3VnaCBvbmUgUmVsYXRpb24tZnJlZSByb3V0aW5lLCBfYnRfc3BsaXRfbGVhZl9sYXlv dXQoKSwgZmVkIGJ5DQorb25lIGl0ZW0tY29sbGVjdGlvbiByb3V0aW5lLCBfYnRfc3BsaXRfbGVh Zl9jb2xsZWN0KCksIHRoYXQgdGhlIHByaW1hcnkNCisoX2J0X3NwbGl0KSBhbmQgcmVkbyAoYnRy ZWVfeGxvZ19zcGxpdCkgYm90aCBjYWxsLiAgQmVjYXVzZSB0aGUgdHdvIGRlcml2ZQ0KK3RoZSBw bGFpbiBpdGVtIHNlcXVlbmNlIHRoZSBzYW1lIHdheSBhbmQgY29kZSBpdCBhZ2FpbnN0IHRoZSBz YW1lIGxvZ2dlZA0KK3ByZWZpeCwgdGhleSBwcm9kdWNlIGJ5dGUtaWRlbnRpY2FsIHBhZ2VzLiAg QW4gaW4tcGxhY2UgaW5zZXJ0IGxvZ3MgdGhlIGNvZGVkDQordHVwbGUgKHN0YW5kYXJkIGluc2Vy dCByZWRvIGFkZHMgaXQgdmVyYmF0aW0pOyBhIHNwbGl0IGxvZ3MgZWFjaCBoYWxmJ3MNCitjaG9z ZW4gcHJlZml4IHBsdXMgdGhlIHJpZ2h0IGhhbGYncyBwbGFpbiBpdGVtczsgYSBkZWR1cGxpY2F0 aW9uIGxvZ3MgdGhlDQorY2hvc2VuIHByZWZpeCBwbHVzIHRoZSBkZWR1cGVkIHBsYWluIGl0ZW1z LiAgQSBib3VuZGVkIGZhbGxiYWNrIGZvcmNlcyBhDQorZnVsbC1wYWdlIGltYWdlIG9ubHkgd2hl biBhIHBhdGhvbG9naWNhbGx5IGNvbXByZXNzaWJsZSBwYWdlJ3MgcGxhaW4gcGF5bG9hZA0KK3dv dWxkIGV4Y2VlZCBCTENLU1ogKHNvIHRoZSBsb2dnZWQgcGF5bG9hZCBjYW4gbmV2ZXIgZXhjZWVk IG9uZSBibG9jayk7IHJlZG8NCit0aGVuIHJlc3RvcmVzIHRoZSBpbWFnZSB2aWEgQkxLX1JFU1RP UkVELiAgV2hlbiBWQUNVVU0gb3IgcGFnZSBkZWxldGlvbg0KK2VtcHRpZXMgYSBwcmVmaXggbGVh ZiwgdGhlIFBSRUZJWCBpdGVtIGlzIHJlbW92ZWQgYW5kIHRoZSBmbGFnIGNsZWFyZWQgc28gdGhh dA0KK3RoZSBpbnZhcmlhbnQgdGhhdCBhbiBlbXB0aWVkIGxlYWYgaG9sZHMgb25seSBpdHMgaGln aCBrZXkgKHJlbGllZCBvbiBieSBwYWdlDQorZGVsZXRpb24pIHN0aWxsIGhvbGRzLg0KKw0KK0Rl ZHVwbGljYXRpb24gYW5kIGJvdHRvbS11cCBpbmRleCBkZWxldGlvbiBib3RoIHJ1biBvbiBCVFBf UFJFRklYIHBhZ2VzLg0KK0JvdHRvbS11cCBkZWxldGlvbiBvbmx5IHJlbW92ZXMgaXRlbXMgYW5k IG5ldmVyIHJld3JpdGVzIHN1cnZpdm9ycywgc28gaXQgaXMNCitzYWZlIG9uIGNvZGVkIHBhZ2Vz IHVuY2hhbmdlZC4gIEEgZGVkdXBsaWNhdGlvbiBwYXNzIGRlY29kZXMgdGhlIHBhZ2UncyBpdGVt cywNCittZXJnZXMgZHVwbGljYXRlcyBpbnRvIHBvc3RpbmcgbGlzdHMgYW5kIHJlLWNvbXByZXNz ZXMgdGhlIHJlc3VsdCBhcyBhIHdob2xlOw0KK2JlY2F1c2UgYSBjb2RlZCBwYWdlIGNhbiBob2xk IG1vcmUgbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbiwgaWYgdGhlDQorZGVjb2RlZCBzZXQg d291bGQgb3ZlcmZsb3cgYSBwbGFpbiBwYWdlIHRoZSBwYXNzIGFib3J0cyBjbGVhbmx5IGFuZCB0 aGUgcGFnZQ0KK3NwbGl0cyBpbnN0ZWFkLCBzbyBubyBpbi1wbGFjZSByZXdyaXRlIGlzIGV2ZXIg Zm9yY2VkIHRvIGZhaWwuICBBbiBpbmRleCBidWlsZA0KK2RlZHVwbGljYXRlcyBiZWZvcmUgY29k aW5nIHRoZSBmaW5pc2hlZCBwYWdlLCBzbyBhIGR1cGxpY2F0ZS1oZWF2eSBwcmVmaXgNCitpbmRl eCBpcyBubyBsYXJnZXIgdGhhbiBhIHBsYWluIG9uZS4NCisNCitQcmVmaXggY29tcHJlc3Npb24g aXMgYSBzZXBhcmF0ZSBtZWNoYW5pc20gZnJvbSBkZWR1cGxpY2F0aW9uIHJhdGhlciB0aGFuIGFu DQorZXh0ZW5zaW9uIG9mIGl0IGJlY2F1c2UgdGhlIHR3byBhdHRhY2sgZGlmZmVyZW50IHJlZHVu ZGFuY3kuICBEZWR1cGxpY2F0aW9uDQorY29sbGFwc2VzIHR1cGxlcyB3aG9zZSB3aG9sZSBrZXkg aXMgKmVxdWFsKiBpbnRvIG9uZSBwb3N0aW5nIGxpc3QgdHVwbGU7IGl0DQorZG9lcyBub3RoaW5n IGZvciBrZXlzIHRoYXQgYXJlIGFsbCBkaXN0aW5jdC4gIFByZWZpeCBjb21wcmVzc2lvbiBmYWN0 b3JzIG91dCBhDQorbGVhZGluZyBieXRlIHJ1biBzaGFyZWQgYnkgKmRpc3RpbmN0KiBrZXlzIGFu ZCBsZWF2ZXMgdGhlaXIgZGlmZmVyaW5nIHN1ZmZpeGVzDQorYWxvbmU7IGl0IGRvZXMgbm90aGlu ZyBmb3IgZXhhY3QgZHVwbGljYXRlcyB0aGF0IGEgcG9zdGluZyBsaXN0IGFscmVhZHkNCitjb2xs YXBzZXMuICBUaGUgY29tbW9uIGNhc2UgdGhpcyB0YXJnZXRzIC0tIGEgVVJMIG9yIGpzb25iLXBh dGggY29sdW1uIHdob3NlDQordmFsdWVzIGFyZSBkaXN0aW5jdCBidXQgc2hhcmUgYSBsb25nIHBy ZWZpeCAtLSBpcyBleGFjdGx5IHdoZXJlIGRlZHVwbGljYXRpb24NCitkb2VzIG5vdCBoZWxwLiAg VGhlIHR3byBjb21wb3NlIG9uIG9uZSBwYWdlIChkZWR1cGxpY2F0ZSBmaXJzdCwgdGhlbiBjb2Rl IHRoZQ0KK3N1cnZpdm9ycyksIHdoaWNoIGlzIHdoeSBhIGJ1aWxkIGFwcGxpZXMgYm90aC4gIFJl dXNpbmcgdGhlIHBvc3RpbmctbGlzdA0KK2Zvcm1hdCB0byBjYXJyeSBhIHNoYXJlZCBwcmVmaXgg d2FzIGNvbnNpZGVyZWQgYW5kIHJlamVjdGVkOiBhIHBvc3RpbmcgbGlzdA0KK3N0b3JlcyBvbmUg a2V5IHBsdXMgbWFueSBUSURzLCB3aGVyZWFzIHByZWZpeCBjb2Rpbmcgc3RvcmVzIG1hbnkga2V5 cyB0aGF0DQorc2hhcmUgYSBwcmVmaXgsIHNvIHRoZSB0d28gd291bGQgbmVlZCBkaWZmZXJlbnQg cGVyLWl0ZW0gbGF5b3V0cyBhbnl3YXksIGFuZA0KK292ZXJsb2FkaW5nIHBvc3RpbmcgbGlzdHMg d291bGQgZW50YW5nbGUgdGhlIGRlZHVwbGljYXRpb24gYW5kIGNvbXByZXNzaW9uDQorcGF0aHMg dGhhdCBhcmUga2VwdCBzZXBhcmF0ZSBoZXJlIG9uIHB1cnBvc2UuDQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbWVzb24uYnVpbGQNCmluZGV4IDgxMmYwNjdlNzEwLi5jYmQzNDIwMTMyOCAxMDA2NDQN Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQNCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQNCkBAIC02LDYgKzYsNyBAQCBiYWNrZW5k X3NvdXJjZXMgKz0gZmlsZXMoDQogICAnbmJ0aW5zZXJ0LmMnLA0KICAgJ25idHBhZ2UuYycsDQog ICAnbmJ0cHJlcHJvY2Vzc2tleXMuYycsDQorICAnbmJ0cHJlZml4LmMnLA0KICAgJ25idHJlYWRw YWdlLmMnLA0KICAgJ25idHJlZS5jJywNCiAgICduYnRzZWFyY2guYycsDQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRkZWR1cC5jDQppbmRleCBhZjdhZmZkZjQwOS4uZTRiOWJjNDdmOTAgMTAwNjQ0 DQotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMNCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYw0KQEAgLTE5LDYgKzE5LDcgQEANCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlYW0uaCINCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIN CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiDQorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2lu dC5oIg0KICNpbmNsdWRlICJ1dGlscy9yZWwuaCINCiANCiBzdGF0aWMgdm9pZCBfYnRfYm90dG9t dXBkZWxfZmluaXNoX3BlbmRpbmcoUGFnZSBwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUsDQpAQCAt NjksNyArNzAsMTkgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJ bmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIAlTaXplCQlwYWdlc2F2aW5nIFBH X1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IDA7DQogCWJvb2wJCXNpbmdsZXZhbHN0cmF0ID0gZmFs c2U7DQogCWludAkJCW5rZXlhdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmli dXRlcyhyZWwpOw0KKwlib29sCQlwYWdlcHJlZml4ID0gUF9IQVNQUkVGSVgob3BhcXVlKTsNCisJ QlRJdGVtQnVmCWN1cmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgdGhlIGxvb3AncyBjdXJy ZW50IGl0ZW0gKi8NCisJQlRJdGVtQnVmCWJhc2VidWY7CQkvKiBkZWNvZGUgc2NyYXRjaCBrZXB0 IGZvciB0aGUgcGVuZGluZyBiYXNlICovDQogCVhMb2dSZWNQdHIJcmVjcHRyOw0KKwlJbmRleFR1 cGxlICpkZWR1cF9wbGFpbiA9IE5VTEw7CS8qIGRlZHVwZWQgcGxhaW4gaXRlbXMsIGZvciBwcmVm aXggV0FMICovDQorCWludAkJCWRlZHVwX25wbGFpbiA9IDA7DQorCUluZGV4VHVwbGUJZGVkdXBf aGlrZXkgPSBOVUxMOw0KKwljaGFyCQlkZWR1cF9wcmVmaXhbQlRSRUVfUFJFRklYX01BWF07DQor CVNpemUJCWRlZHVwX3ByZWZpeGxlbiA9IDA7DQorCWJvb2wJCWRlZHVwX2lzbG9ncHJlZml4ID0g ZmFsc2U7CS8qIHBhZ2UgZW5kZWQgdXAgcHJlZml4LWNvZGVkICovDQorCWNoYXIJICAgKmRlZHVw X3dhbGJ1ZiA9IE5VTEw7CS8qIHBhY2tlZCBwcmVmaXgtZGVkdXAgV0FMIHBheWxvYWQgKi8NCisJ U2l6ZQkJZGVkdXBfd2FsYnVmbGVuID0gMDsNCisJYm9vbAkJZGVkdXBfcmZwaSA9IGZhbHNlOwkv KiBmYWxsIGJhY2sgdG8gYSBmb3JjZWQgZnVsbC1wYWdlIGltYWdlICovDQogDQogCS8qIFBhc3Nl ZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBsaW5lIHBv aW50ZXIgKi8NCiAJbmV3aXRlbXN6ICs9IHNpemVvZihJdGVtSWREYXRhKTsNCkBAIC0xMjAsNyAr MTMzLDE2IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhU dXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiAJbmV3cGFnZSA9IFBhZ2VHZXRUZW1wUGFn ZUNvcHlTcGVjaWFsKHBhZ2UpOw0KIAlQYWdlU2V0TFNOKG5ld3BhZ2UsIFBhZ2VHZXRMU04ocGFn ZSkpOw0KIA0KLQkvKiBDb3B5IGhpZ2gga2V5LCBpZiBhbnkgKi8NCisJLyoNCisJICogVGhlIHJl YnVpbHQgcGFnZSBpcyBsYWlkIG91dCBwbGFpbiBoZXJlIChjbGVhciBhbnkgaW5oZXJpdGVkIEJU UF9QUkVGSVg7DQorCSAqIFBhZ2VHZXRUZW1wUGFnZUNvcHlTcGVjaWFsIGNvcGllcyB0aGUgc3Bl Y2lhbCBhcmVhIGJ1dCBub3QgdGhlIFBSRUZJWA0KKwkgKiBpdGVtKS4gIElmIHRoZSBwYWdlIHdh cyBwcmVmaXgtY29tcHJlc3NlZCBpdCBpcyByZS1jb21wcmVzc2VkIGFzIGEgd2hvbGUNCisJICog YmVsb3csIGFmdGVyIGRlZHVwbGljYXRpb24sIGhvbm91cmluZyBTdHJhdGVneSAxLg0KKwkgKi8N CisJaWYgKHBhZ2VwcmVmaXgpDQorCQlCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSktPmJ0cG9fZmxh Z3MgJj0gfkJUUF9QUkVGSVg7DQorDQorCS8qIENvcHkgaGlnaCBrZXksIGlmIGFueSAoYSBwaXZv dCwgc3RvcmVkIHBsYWluIG9uIGFueSBwYWdlKSAqLw0KIAlpZiAoIVBfUklHSFRNT1NUKG9wYXF1 ZSkpDQogCXsNCiAJCUl0ZW1JZAkJaGl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgUF9ISUtF WSk7DQpAQCAtMTQwLDEyICsxNjIsMjIgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIA0KIAkJQXNz ZXJ0KCFJdGVtSWRJc0RlYWQoaXRlbWlkKSk7DQogDQorCQkvKiBEZWNvZGUgb24gYSBwcmVmaXgg cGFnZSBzbyBrZXlzL3Bvc3RpbmcgbGlzdHMgYXJlIHRoZSByZWFsIG9uZXMuICovDQorCQlpZiAo cGFnZXByZWZpeCkNCisJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwgaXR1cCwgJmN1 cmJ1Zik7DQorDQogCQlpZiAob2ZmbnVtID09IG1pbm9mZikNCiAJCXsNCiAJCQkvKg0KIAkJCSAq IE5vIHByZXZpb3VzL2Jhc2UgdHVwbGUgZm9yIHRoZSBkYXRhIGl0ZW0gLS0gdXNlIHRoZSBkYXRh IGl0ZW0NCi0JCQkgKiBhcyBiYXNlIHR1cGxlIG9mIHBlbmRpbmcgcG9zdGluZyBsaXN0DQorCQkJ ICogYXMgYmFzZSB0dXBsZSBvZiBwZW5kaW5nIHBvc3RpbmcgbGlzdC4gIE9uIGEgcHJlZml4IHBh Z2UgdGhlDQorCQkJICogYmFzZSBtdXN0IHN1cnZpdmUgdGhlIHdob2xlIG1lcmdlIHJ1biAoaXQg aXMga2VwdCBhcyBhIHBvaW50ZXINCisJCQkgKiBpbiBzdGF0ZSBhbmQgcmVhZCBieSBfYnRfZGVk dXBfZmluaXNoX3BlbmRpbmcpLCBzbyBrZWVwIGl0IGluIGENCisJCQkgKiBkZWRpY2F0ZWQgYnVm ZmVyIHJhdGhlciB0aGFuIHRoZSBwZXItaXRlcmF0aW9uIGN1cmJ1Zi4NCiAJCQkgKi8NCisJCQlp ZiAocGFnZXByZWZpeCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkgJmJhc2VidWYp Ow0KIAkJCV9idF9kZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJ fQ0KIAkJZWxzZSBpZiAoc3RhdGUtPmRlZHVwbGljYXRlICYmDQpAQCAtMTcwLDcgKzIwMiwyMCBA QCBfYnRfZGVkdXBfcGFzcyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3 aXRlbSwgU2l6ZSBuZXdpdGVtc3osDQogCQkJICogZm9ybSBuZXcgcG9zdGluZyB0dXBsZSBhbmQg YWRkIGl0IHRvIG91ciB0ZW1wIHBhZ2UgKG5ld3BhZ2UpLg0KIAkJCSAqIEVsc2UgYWRkIHBlbmRp bmcgaW50ZXJ2YWwncyBiYXNlIHR1cGxlIHRvIHRoZSB0ZW1wIHBhZ2UgYXMtaXMuDQogCQkJICov DQotCQkJcGFnZXNhdmluZyArPSBfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcobmV3cGFnZSwgc3Rh dGUpOw0KKwkJCS8qDQorCQkJICogT24gYSBwcmVmaXggcGFnZSB0aGUgZGVkdXBlZCBpdGVtcyBh cmUgbGFpZCBvdXQgcGxhaW4gaGVyZTsgdGhlDQorCQkJICogZGVjb2RlZCBzZXQgY2FuIGV4Y2Vl ZCBvbmUgcGFnZSBldmVuIHdoZW4gdGhlIGNvZGVkIGZvcm0gZml0LCBzbw0KKwkJCSAqIHRvbGVy YXRlIGFuIG92ZXJmbG93IGFuZCBhYm9ydCB0aGUgd2hvbGUgcGFzcyAodGhlIGNhbGxlciB0aGVu DQorCQkJICogc3BsaXRzIHRoZSBwYWdlIGluc3RlYWQgb2YgZGVkdXBsaWNhdGluZyBpdCkuDQor CQkJICovDQorCQkJew0KKwkJCQlTaXplCQlzYXZlZCA9IF9idF9kZWR1cF9maW5pc2hfcGVuZGlu ZyhuZXdwYWdlLCBzdGF0ZSwNCisJCQkJCQkJCQkJCQkJCQkJcGFnZXByZWZpeCk7DQorDQorCQkJ CWlmIChwYWdlcHJlZml4ICYmIHNhdmVkID09IChTaXplKSAtMSkNCisJCQkJCWdvdG8gZGVkdXBf b3ZlcmZsb3c7DQorCQkJCXBhZ2VzYXZpbmcgKz0gc2F2ZWQ7DQorCQkJfQ0KIA0KIAkJCWlmIChz aW5nbGV2YWxzdHJhdCkNCiAJCQl7DQpAQCAtMTk4LDEyICsyNDMsMjIgQEAgX2J0X2RlZHVwX3Bh c3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3 aXRlbXN6LA0KIAkJCX0NCiANCiAJCQkvKiBpdHVwIHN0YXJ0cyBuZXcgcGVuZGluZyBwb3N0aW5n IGxpc3QgKi8NCisJCQlpZiAocGFnZXByZWZpeCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVj b2RlKHBhZ2UsDQorCQkJCQkJCQkJCSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgUGFn ZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pKSwNCisJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQlf YnRfZGVkdXBfc3RhcnRfcGVuZGluZyhzdGF0ZSwgaXR1cCwgb2ZmbnVtKTsNCiAJCX0NCiAJfQ0K IA0KIAkvKiBIYW5kbGUgdGhlIGxhc3QgaXRlbSAqLw0KLQlwYWdlc2F2aW5nICs9IF9idF9kZWR1 cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSk7DQorCXsNCisJCVNpemUJCXNhdmVkID0g X2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlLCBwYWdlcHJlZml4KTsNCisN CisJCWlmIChwYWdlcHJlZml4ICYmIHNhdmVkID09IChTaXplKSAtMSkNCisJCQlnb3RvIGRlZHVw X292ZXJmbG93Ow0KKwkJcGFnZXNhdmluZyArPSBzYXZlZDsNCisJfQ0KIA0KIAkvKg0KIAkgKiBJ ZiBubyBpdGVtcyBzdWl0YWJsZSBmb3IgZGVkdXBsaWNhdGlvbiB3ZXJlIGZvdW5kLCBuZXdwYWdl IG11c3QgYmUNCkBAIC0yMzgsNiArMjkzLDExMyBAQCBfYnRfZGVkdXBfcGFzcyhSZWxhdGlvbiBy ZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3aXRlbSwgU2l6ZSBuZXdpdGVtc3osDQogCQlu b3BhcXVlLT5idHBvX2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7DQogCX0NCiANCisJLyoNCisJ ICogUmUtYXBwbHkgcHJlZml4IGNvbXByZXNzaW9uIHRvIHRoZSByZWJ1aWx0IChwbGFpbikgcGFn ZSBhcyBhIHdob2xlDQorCSAqIChTdHJhdGVneSAxKSwgYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0 aW9uIHNpbmNlIGl0IGFsbG9jYXRlcyBhIHNjcmF0Y2gNCisJICogcGFnZS4gIEZpcnN0IGNhcHR1 cmUgdGhlIGRlZHVwZWQgcGxhaW4gaXRlbXMgYW5kIGhpZ2gga2V5OiBpZiB0aGUgcGFnZQ0KKwkg KiBkb2VzIGJlY29tZSBwcmVmaXgtY29tcHJlc3NlZCwgcmVkbyByZWJ1aWxkcyBpdHMgY29kZWQg Ynl0ZXMgZnJvbSB0aGVzZQ0KKwkgKiBwbHVzIHRoZSBjaG9zZW4gcHJlZml4ICh2aWEgX2J0X3Nw bGl0X2xlYWZfbGF5b3V0KSwgdGhlIHNhbWUgd2F5IGEgcHJlZml4DQorCSAqIGxlYWYgc3BsaXQg aXMgcmVwbGF5ZWQgLS0gbm8gZnVsbC1wYWdlIGltYWdlIG5lZWRlZC4NCisJICovDQorCWlmIChw YWdlcHJlZml4KQ0KKwl7DQorCQlCVFBhZ2VPcGFxdWUgbm9wcSA9IEJUUGFnZUdldE9wYXF1ZShu ZXdwYWdlKTsNCisJCU9mZnNldE51bWJlciBubWluID0gUF9GSVJTVERBVEFLRVkobm9wcSk7DQor CQlPZmZzZXROdW1iZXIgbm1heCA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIobmV3cGFnZSk7DQor DQorCQlkZWR1cF9ucGxhaW4gPSAobm1heCA+PSBubWluKSA/IChpbnQpIG5tYXggLSAoaW50KSBu bWluICsgMSA6IDA7DQorCQlpZiAoZGVkdXBfbnBsYWluID4gMCkNCisJCXsNCisJCQlkZWR1cF9w bGFpbiA9IHBhbGxvYyhkZWR1cF9ucGxhaW4gKiBzaXplb2YoSW5kZXhUdXBsZSkpOw0KKwkJCWZv ciAoaW50IGkgPSAwOyBpIDwgZGVkdXBfbnBsYWluOyBpKyspDQorCQkJCWRlZHVwX3BsYWluW2ld ID0gQ29weUluZGV4VHVwbGUoKEluZGV4VHVwbGUpDQorCQkJCQkJCQkJCQkJUGFnZUdldEl0ZW0o bmV3cGFnZSwNCisJCQkJCQkJCQkJCQkJCQlQYWdlR2V0SXRlbUlkKG5ld3BhZ2UsIG5taW4gKyBp KSkpOw0KKwkJfQ0KKwkJaWYgKCFQX1JJR0hUTU9TVChub3BxKSkNCisJCXsNCisJCQlJdGVtSWQJ CWhpaSA9IFBhZ2VHZXRJdGVtSWQobmV3cGFnZSwgUF9ISUtFWSk7DQorDQorCQkJZGVkdXBfaGlr ZXkgPSBDb3B5SW5kZXhUdXBsZSgoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0obmV3cGFnZSwgaGlp KSk7DQorCQl9DQorDQorCQlfYnRfcHJlZml4X2NvbXByZXNzX3BhZ2UocmVsLCBuZXdwYWdlKTsN CisNCisJCS8qIERpZCBpdCBhY3R1YWxseSBjb21wcmVzcz8gIChJdCBnaXZlcyB1cCBpZiBhIGNv ZGVkIGl0ZW0gd29uJ3QgZml0LikgKi8NCisJCWlmIChQX0hBU1BSRUZJWChCVFBhZ2VHZXRPcGFx dWUobmV3cGFnZSkpKQ0KKwkJew0KKwkJCWNvbnN0IGNoYXIgKnBmeCA9IF9idF9wYWdlX2dldF9w cmVmaXgobmV3cGFnZSwgJmRlZHVwX3ByZWZpeGxlbik7DQorDQorCQkJaWYgKGRlZHVwX3ByZWZp eGxlbiA+IDApDQorCQkJCW1lbWNweShkZWR1cF9wcmVmaXgsIHBmeCwgZGVkdXBfcHJlZml4bGVu KTsNCisJCQlkZWR1cF9pc2xvZ3ByZWZpeCA9IHRydWU7DQorCQl9DQorCX0NCisNCisJLyoNCisJ ICogUGFjayB0aGUgcHJlZml4LWRlZHVwIFdBTCBwYXlsb2FkIG5vdywgYmVmb3JlIHRoZSBjcml0 aWNhbCBzZWN0aW9uDQorCSAqIChwYWxsb2MgaXMgZGlzYWxsb3dlZCBpbnNpZGUgaXQpOiB0aGUg Y2hvc2VuIHByZWZpeCBieXRlcywgdGhlbiB0aGUgaGlnaA0KKwkgKiBrZXkgKHVubGVzcyByaWdo dG1vc3QpLCB0aGVuIHRoZSBkZWR1cGVkIHBsYWluIGl0ZW1zLCBlYWNoIE1BWEFMSUdOJ2QsDQor CSAqIGluIG9uZSBjb250aWd1b3VzIGJ1ZmZlciBsb2dnZWQgd2l0aCBhIHNpbmdsZSByZGF0YSBz bG90Lg0KKwkgKi8NCisJaWYgKGRlZHVwX2lzbG9ncHJlZml4KQ0KKwl7DQorCQlTaXplCQlvZmYg PSBNQVhBTElHTihkZWR1cF9wcmVmaXhsZW4pOw0KKw0KKwkJaWYgKGRlZHVwX2hpa2V5ICE9IE5V TEwpDQorCQkJb2ZmICs9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGRlZHVwX2hpa2V5KSk7DQor CQlmb3IgKGludCBpID0gMDsgaSA8IGRlZHVwX25wbGFpbjsgaSsrKQ0KKwkJCW9mZiArPSBNQVhB TElHTihJbmRleFR1cGxlU2l6ZShkZWR1cF9wbGFpbltpXSkpOw0KKw0KKwkJLyoNCisJCSAqIEEg cGF0aG9sb2dpY2FsbHkgY29tcHJlc3NpYmxlIHBhZ2UgY2FuIGhvbGQgbW9yZSBwbGFpbiBkYXRh IHRoYW4NCisJCSAqIGZpdHMgaW4gb25lIHBhZ2U7IGlmIHRoZSBwYXlsb2FkIHdvdWxkIGJlIHRo YXQgbGFyZ2UsIGZhbGwgYmFjayB0bw0KKwkJICogYSBmb3JjZWQgZnVsbC1wYWdlIGltYWdlIG9m IHRoZSBjb2RlZCBwYWdlIChib3VuZGVkIGF0IEJMQ0tTWikuDQorCQkgKi8NCisJCWlmIChvZmYg PiBCTENLU1opDQorCQkJZGVkdXBfcmZwaSA9IHRydWU7DQorI2lmZGVmIFVTRV9JTkpFQ1RJT05f UE9JTlRTDQorCQkvKiBMZXQgYSB0ZXN0IGZvcmNlIHRoZSBvdGhlcndpc2UtcmFyZSBmdWxsLXBh Z2UtaW1hZ2UgZmFsbGJhY2suICovDQorCQlpZiAoSVNfSU5KRUNUSU9OX1BPSU5UX0FUVEFDSEVE KCJuYnRyZWUtcHJlZml4LWZvcmNlLXJmcGkiKSkNCisJCQlkZWR1cF9yZnBpID0gdHJ1ZTsNCisj ZW5kaWYNCisJCWlmIChkZWR1cF9yZnBpKQ0KKwkJCSA7CQkJCQkvKiBpbWFnZSBmb3JjZWQ7IG5v IHBheWxvYWQgYnVmZmVyIGJ1aWx0ICovDQorCQllbHNlDQorCQl7DQorCQkJZGVkdXBfd2FsYnVm bGVuID0gb2ZmOw0KKwkJCWRlZHVwX3dhbGJ1ZiA9IHBhbGxvYyhNYXgob2ZmLCAxKSk7DQorDQor CQkJb2ZmID0gMDsNCisJCQlpZiAoZGVkdXBfcHJlZml4bGVuID4gMCkNCisJCQl7DQorCQkJCW1l bWNweShkZWR1cF93YWxidWYsIGRlZHVwX3ByZWZpeCwgZGVkdXBfcHJlZml4bGVuKTsNCisJCQkJ aWYgKE1BWEFMSUdOKGRlZHVwX3ByZWZpeGxlbikgIT0gZGVkdXBfcHJlZml4bGVuKQ0KKwkJCQkJ bWVtc2V0KGRlZHVwX3dhbGJ1ZiArIGRlZHVwX3ByZWZpeGxlbiwgMCwNCisJCQkJCQkgICBNQVhB TElHTihkZWR1cF9wcmVmaXhsZW4pIC0gZGVkdXBfcHJlZml4bGVuKTsNCisJCQkJb2ZmICs9IE1B WEFMSUdOKGRlZHVwX3ByZWZpeGxlbik7DQorCQkJfQ0KKwkJCWlmIChkZWR1cF9oaWtleSAhPSBO VUxMKQ0KKwkJCXsNCisJCQkJU2l6ZQkJaHN6ID0gSW5kZXhUdXBsZVNpemUoZGVkdXBfaGlrZXkp Ow0KKw0KKwkJCQltZW1jcHkoZGVkdXBfd2FsYnVmICsgb2ZmLCBkZWR1cF9oaWtleSwgaHN6KTsN CisJCQkJaWYgKE1BWEFMSUdOKGhzeikgIT0gaHN6KQ0KKwkJCQkJbWVtc2V0KGRlZHVwX3dhbGJ1 ZiArIG9mZiArIGhzeiwgMCwgTUFYQUxJR04oaHN6KSAtIGhzeik7DQorCQkJCW9mZiArPSBNQVhB TElHTihoc3opOw0KKwkJCX0NCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGRlZHVwX25wbGFpbjsg aSsrKQ0KKwkJCXsNCisJCQkJU2l6ZQkJc3ogPSBJbmRleFR1cGxlU2l6ZShkZWR1cF9wbGFpbltp XSk7DQorDQorCQkJCW1lbWNweShkZWR1cF93YWxidWYgKyBvZmYsIGRlZHVwX3BsYWluW2ldLCBz eik7DQorCQkJCWlmIChNQVhBTElHTihzeikgIT0gc3opDQorCQkJCQltZW1zZXQoZGVkdXBfd2Fs YnVmICsgb2ZmICsgc3osIDAsIE1BWEFMSUdOKHN6KSAtIHN6KTsNCisJCQkJb2ZmICs9IE1BWEFM SUdOKHN6KTsNCisJCQl9DQorCQl9DQorCX0NCisNCiAJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7DQog DQogCVBhZ2VSZXN0b3JlVGVtcFBhZ2UobmV3cGFnZSwgcGFnZSk7DQpAQCAtMjQ4LDE5ICs0MTAs MzggQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxl IG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIAl7DQogCQl4bF9idHJlZV9kZWR1cCB4bHJlY19k ZWR1cDsNCiANCi0JCXhscmVjX2RlZHVwLm5pbnRlcnZhbHMgPSBzdGF0ZS0+bmludGVydmFsczsN CisJCXhscmVjX2RlZHVwLm5pbnRlcnZhbHMgPSBkZWR1cF9pc2xvZ3ByZWZpeCA/IDAgOiBzdGF0 ZS0+bmludGVydmFsczsNCisJCXhscmVjX2RlZHVwLnByZWZpeGxlbiA9ICh1aW50OCkgZGVkdXBf cHJlZml4bGVuOw0KKwkJeGxyZWNfZGVkdXAuZmxhZ3MgPSAoZGVkdXBfaGlrZXkgIT0gTlVMTCkg PyBYTEhfREVEVVBfTk9UX1JJR0hUTU9TVCA6IDA7DQorCQlpZiAoZGVkdXBfcmZwaSkNCisJCQl4 bHJlY19kZWR1cC5mbGFncyB8PSBYTEhfREVEVVBfUkZQSTsNCiANCiAJCVhMb2dCZWdpbkluc2Vy dCgpOw0KLQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZiwgUkVHQlVGX1NUQU5EQVJEKTsNCisJ CVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWYsDQorCQkJCQkJICAgUkVHQlVGX1NUQU5EQVJEIHwN CisJCQkJCQkgICAoZGVkdXBfcmZwaSA/IFJFR0JVRl9GT1JDRV9JTUFHRSA6IDApKTsNCiAJCVhM b2dSZWdpc3RlckRhdGEoJnhscmVjX2RlZHVwLCBTaXplT2ZCdHJlZURlZHVwKTsNCiANCi0JCS8q DQotCQkgKiBUaGUgaW50ZXJ2YWxzIGFycmF5IGlzIG5vdCBpbiB0aGUgYnVmZmVyLCBidXQgcHJl dGVuZCB0aGF0IGl0IGlzLg0KLQkJICogV2hlbiBYTG9nSW5zZXJ0IHN0b3JlcyB0aGUgd2hvbGUg YnVmZmVyLCB0aGUgYXJyYXkgbmVlZCBub3QgYmUNCi0JCSAqIHN0b3JlZCB0b28uDQotCQkgKi8N Ci0JCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgc3RhdGUtPmludGVydmFscywNCi0JCQkJCQkJc3Rh dGUtPm5pbnRlcnZhbHMgKiBzaXplb2YoQlREZWR1cEludGVydmFsKSk7DQorCQlpZiAoZGVkdXBf aXNsb2dwcmVmaXgpDQorCQl7DQorCQkJLyoNCisJCQkgKiBQcmVmaXgtZGVkdXA6IGNhcnJ5IHRo ZSBjaG9zZW4gcHJlZml4IGFuZCB0aGUgZGVkdXBlZCBwbGFpbg0KKwkJCSAqIGl0ZW1zIHNvIHJl ZG8gY2FuIGxheSBvdXQgdGhlIGNvZGVkIHBhZ2U7IG5vIGZ1bGwtcGFnZSBpbWFnZQ0KKwkJCSAq ICh1bmxlc3MgdGhlIHBheWxvYWQgd2FzIHRvbyBsYXJnZSwgaGFuZGxlZCBieSB0aGUgZm9yY2Vk IGltYWdlKS4NCisJCQkgKi8NCisJCQlpZiAoIWRlZHVwX3JmcGkgJiYgZGVkdXBfd2FsYnVmbGVu ID4gMCkNCisJCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBkZWR1cF93YWxidWYsIGRlZHVwX3dh bGJ1Zmxlbik7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJLyoNCisJCQkgKiBUaGUgaW50ZXJ2 YWxzIGFycmF5IGlzIG5vdCBpbiB0aGUgYnVmZmVyLCBidXQgcHJldGVuZCB0aGF0IGl0DQorCQkJ ICogaXMuICBXaGVuIFhMb2dJbnNlcnQgc3RvcmVzIHRoZSB3aG9sZSBidWZmZXIsIHRoZSBhcnJh eSBuZWVkIG5vdA0KKwkJCSAqIGJlIHN0b3JlZCB0b28uDQorCQkJICovDQorCQkJWExvZ1JlZ2lz dGVyQnVmRGF0YSgwLCBzdGF0ZS0+aW50ZXJ2YWxzLA0KKwkJCQkJCQkJc3RhdGUtPm5pbnRlcnZh bHMgKiBzaXplb2YoQlREZWR1cEludGVydmFsKSk7DQorCQl9DQogDQogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX0RFRFVQKTsNCiAJfQ0KQEAgLTI3Nyw2ICs0 NTgsMjAgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1 cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIAkvKiBjYW5ub3QgbGVhayBtZW1vcnkgaGVy ZSAqLw0KIAlwZnJlZShzdGF0ZS0+aHRpZHMpOw0KIAlwZnJlZShzdGF0ZSk7DQorCXJldHVybjsN CisNCitkZWR1cF9vdmVyZmxvdzoNCisNCisJLyoNCisJICogQSBwcmVmaXggcGFnZSdzIGRlZHVw ZWQgaXRlbXMgZGlkIG5vdCBmaXQgd2hlbiBsYWlkIG91dCBwbGFpbi4gIExlYXZlDQorCSAqIHRo ZSBvcmlnaW5hbCBwYWdlIHVudG91Y2hlZCBhbmQgcmV0dXJuIHdpdGhvdXQgd3JpdGluZyBhbnl0 aGluZzsgdGhlDQorCSAqIGNhbGxlciBmYWxscyB0aHJvdWdoIHRvIHNwbGl0IHRoZSBwYWdlLiAg Tm8gY3JpdGljYWwgc2VjdGlvbiB3YXMNCisJICogZW50ZXJlZCBhbmQgdGhlIGJ1ZmZlciB3YXMg bm90IG1hcmtlZCBkaXJ0eSwgc28gdGhlIHBhZ2UgaXMgdW5jaGFuZ2VkLg0KKwkgKi8NCisJQXNz ZXJ0KHBhZ2VwcmVmaXgpOw0KKwlwZnJlZShuZXdwYWdlKTsNCisJcGZyZWUoc3RhdGUtPmh0aWRz KTsNCisJcGZyZWUoc3RhdGUpOw0KIH0NCiANCiAvKg0KQEAgLTMxOCw2ICs1MTMsOSBAQCBfYnRf Ym90dG9tdXBkZWxfcGFzcyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIFJlbGF0aW9uIGhlYXBS ZWwsDQogCVRNX0luZGV4RGVsZXRlT3AgZGVsc3RhdGU7DQogCWJvb2wJCW5ldmVyZGVkdXA7DQog CWludAkJCW5rZXlhdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhy ZWwpOw0KKwlib29sCQlwYWdlcHJlZml4ID0gUF9IQVNQUkVGSVgob3BhcXVlKTsNCisJQlRJdGVt QnVmCWN1cmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgdGhlIGxvb3AncyBjdXJyZW50IGl0 ZW0gKi8NCisJQlRJdGVtQnVmCWJhc2VidWY7CQkvKiBkZWNvZGUgc2NyYXRjaCBrZXB0IGZvciB0 aGUgcGVuZGluZyBiYXNlICovDQogDQogCS8qIFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJ R05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBsaW5lIHBvaW50ZXIgKi8NCiAJbmV3aXRlbXN6ICs9 IHNpemVvZihJdGVtSWREYXRhKTsNCkBAIC0zNzEsOSArNTY5LDI0IEBAIF9idF9ib3R0b211cGRl bF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwNCiANCiAJ CUFzc2VydCghSXRlbUlkSXNEZWFkKGl0ZW1pZCkpOw0KIA0KKwkJLyoNCisJCSAqIE9uIGEgcHJl Zml4LWNvbXByZXNzZWQgcGFnZSBkZWNvZGUgdGhlIGl0ZW0gc28gX2J0X2tlZXBfbmF0dHNfZmFz dA0KKwkJICogc2VlcyB0aGUgcmVhbCBrZXkuICBUaGUgYmFzZSBvZiBhIHBlbmRpbmcgaW50ZXJ2 YWwgbXVzdCBzdXJ2aXZlIHRoZQ0KKwkJICogd2hvbGUgcnVuIChpdCBpcyBjb21wYXJlZCBhZ2Fp bnN0IGVhY2ggZm9sbG93aW5nIGl0ZW0pLCBzbyBrZWVwIGl0DQorCQkgKiBpbiBpdHMgb3duIGJ1 ZmZlcjsgdGhlIGN1cnJlbnQgaXRlbSB1c2VzIGEgcmV1c2VkIGJ1ZmZlci4gIEhlYXAgVElEcw0K KwkJICogYW5kIHBvc3RpbmcgbGlzdHMgYXJlIHByZXNlcnZlZCBieSBjb2RpbmcsIHNvIF9idF9k ZWR1cF9zdGFydF9wZW5kaW5nDQorCQkgKiBhbmQgX2J0X2JvdHRvbXVwZGVsX2ZpbmlzaF9wZW5k aW5nICh3aGljaCByZWFkIG9ubHkgVElEcy9zaXplcywgYnkNCisJCSAqIHBhZ2Ugb2Zmc2V0KSBu ZWVkIG5vIGRlY29kZS4NCisJCSAqLw0KKwkJaWYgKHBhZ2VwcmVmaXgpDQorCQkJaXR1cCA9IF9i dF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZjdXJidWYpOw0KKw0KIAkJaWYgKG9mZm51bSA9 PSBtaW5vZmYpDQogCQl7DQogCQkJLyogaXR1cCBzdGFydHMgZmlyc3QgcGVuZGluZyBpbnRlcnZh bCAqLw0KKwkJCWlmIChwYWdlcHJlZml4KQ0KKwkJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUo cGFnZSwgKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0ZW1pZCksDQorCQkJCQkJCQkJ CSAmYmFzZWJ1Zik7DQogCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9m Zm51bSk7DQogCQl9DQogCQllbHNlIGlmIChfYnRfa2VlcF9uYXR0c19mYXN0KHJlbCwgc3RhdGUt PmJhc2UsIGl0dXApID4gbmtleWF0dHMgJiYNCkBAIC0zODcsNiArNjAwLDkgQEAgX2J0X2JvdHRv bXVwZGVsX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBSZWxhdGlvbiBoZWFwUmVsLA0K IAkJCV9idF9ib3R0b211cGRlbF9maW5pc2hfcGVuZGluZyhwYWdlLCBzdGF0ZSwgJmRlbHN0YXRl KTsNCiANCiAJCQkvKiBpdHVwIHN0YXJ0cyBuZXcgcGVuZGluZyBpbnRlcnZhbCAqLw0KKwkJCWlm IChwYWdlcHJlZml4KQ0KKwkJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwgKEluZGV4 VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0ZW1pZCksDQorCQkJCQkJCQkJCSAmYmFzZWJ1Zik7 DQogCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7DQogCQl9 DQogCX0NCkBAIC01NTQsNyArNzcwLDcgQEAgX2J0X2RlZHVwX3NhdmVfaHRpZChCVERlZHVwU3Rh dGUgc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkNCiAgKiB3aGVyZSBubyBkZWR1cGxpY2F0aW9uIHdh cyBwb3NzaWJsZS4NCiAgKi8NCiBTaXplDQotX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKFBhZ2Ug bmV3cGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlKQ0KK19idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQ YWdlIG5ld3BhZ2UsIEJURGVkdXBTdGF0ZSBzdGF0ZSwgYm9vbCBvdmVyZmxvd29rKQ0KIHsNCiAJ T2Zmc2V0TnVtYmVyIHR1cG9mZjsNCiAJU2l6ZQkJdHVwbGVzejsNCkBAIC01NzIsNyArNzg4LDEx IEBAIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5ld3BhZ2UsIEJURGVkdXBTdGF0ZSBz dGF0ZSkNCiAJCUFzc2VydCh0dXBsZXN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKHN0YXRl LT5iYXNlKSkpOw0KIAkJQXNzZXJ0KHR1cGxlc3ogPD0gQlRNYXhJdGVtU2l6ZSk7DQogCQlpZiAo UGFnZUFkZEl0ZW0obmV3cGFnZSwgc3RhdGUtPmJhc2UsIHR1cGxlc3osIHR1cG9mZiwgZmFsc2Us IGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJew0KKwkJCWlmIChvdmVyZmxvd29r KQ0KKwkJCQlyZXR1cm4gKFNpemUpIC0xOw0KIAkJCWVsb2coRVJST1IsICJkZWR1cGxpY2F0aW9u IGZhaWxlZCB0byBhZGQgdHVwbGUgdG8gcGFnZSIpOw0KKwkJfQ0KIA0KIAkJc3BhY2VzYXZpbmcg PSAwOw0KIAl9DQpAQCAtNTkxLDEzICs4MTEsMjYgQEAgX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5n KFBhZ2UgbmV3cGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlKQ0KIAkJQXNzZXJ0KHR1cGxlc3ogPT0g TUFYQUxJR04oSW5kZXhUdXBsZVNpemUoZmluYWwpKSk7DQogCQlBc3NlcnQodHVwbGVzeiA8PSBC VE1heEl0ZW1TaXplKTsNCiAJCWlmIChQYWdlQWRkSXRlbShuZXdwYWdlLCBmaW5hbCwgdHVwbGVz eiwgdHVwb2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1iZXIpDQorCQl7DQor CQkJcGZyZWUoZmluYWwpOw0KKwkJCWlmIChvdmVyZmxvd29rKQ0KKwkJCQlyZXR1cm4gKFNpemUp IC0xOw0KIAkJCWVsb2coRVJST1IsICJkZWR1cGxpY2F0aW9uIGZhaWxlZCB0byBhZGQgdHVwbGUg dG8gcGFnZSIpOw0KKwkJfQ0KIA0KIAkJcGZyZWUoZmluYWwpOw0KIAkJc3BhY2VzYXZpbmcgPSBz dGF0ZS0+cGh5c3R1cHNpemUgLSAodHVwbGVzeiArIHNpemVvZihJdGVtSWREYXRhKSk7DQogCQkv KiBJbmNyZW1lbnQgbmludGVydmFscywgc2luY2Ugd2Ugd3JvdGUgYSBuZXcgcG9zdGluZyBsaXN0 IHR1cGxlICovDQogCQlzdGF0ZS0+bmludGVydmFscysrOw0KLQkJQXNzZXJ0KHNwYWNlc2F2aW5n ID4gMCAmJiBzcGFjZXNhdmluZyA8IEJMQ0tTWik7DQorDQorCQkvKg0KKwkJICogT24gYW4gb3Jk aW5hcnkgcGFnZSB0aGUgbWVyZ2VkIGludGVydmFsJ3MgdHVwbGVzIHdlcmUgYWxsIHBoeXNpY2Fs bHkNCisJCSAqIHByZXNlbnQgb24gb25lIHBhZ2UsIHNvIHRoZSBzYXZpbmcgaXMgYm91bmRlZCBi eSBCTENLU1ouICBPbiBhIHByZWZpeA0KKwkJICogcGFnZSAob3ZlcmZsb3dvaykgcGh5c3R1cHNp emUgaXMgdGhlIERFQ09ERUQgc2l6ZSBvZiB0aG9zZSB0dXBsZXMsDQorCQkgKiB3aGljaCBjYW4g ZXhjZWVkIGEgcGFnZSAoYSBjb2RlZCBwYWdlIGhvbGRzIG1vcmUgbG9naWNhbCBkYXRhIHRoYW4N CisJCSAqIGZpdHMgcGxhaW4pLCBzbyBvbmx5IHJlcXVpcmUgdGhlIHNhdmluZyB0byBiZSBwb3Np dGl2ZSB0aGVyZS4NCisJCSAqLw0KKwkJQXNzZXJ0KHNwYWNlc2F2aW5nID4gMCAmJiAob3ZlcmZs b3dvayB8fCBzcGFjZXNhdmluZyA8IEJMQ0tTWikpOw0KIAl9DQogDQogCS8qIFJlc2V0IHN0YXRl IGZvciBuZXh0IHBlbmRpbmcgcG9zdGluZyBsaXN0ICovDQpAQCAtNzgzLDE2ICsxMDE2LDIyIEBA IF9idF9kb19zaW5nbGV2YWwoUmVsYXRpb24gcmVsLCBQYWdlIHBhZ2UsIEJURGVkdXBTdGF0ZSBz dGF0ZSwNCiAJCQkJIE9mZnNldE51bWJlciBtaW5vZmYsIEluZGV4VHVwbGUgbmV3aXRlbSkNCiB7 DQogCWludAkJCW5rZXlhdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRl cyhyZWwpOw0KKwlib29sCQlwYWdlcHJlZml4ID0gUF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVl KHBhZ2UpKTsNCiAJSXRlbUlkCQlpdGVtaWQ7DQogCUluZGV4VHVwbGUJaXR1cDsNCisJQlRJdGVt QnVmCWJ1ZjsNCiANCiAJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBtaW5vZmYpOw0KIAlp dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0ZW1pZCk7DQorCWlmIChwYWdl cHJlZml4KQ0KKwkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZidWYpOw0K IA0KIAlpZiAoX2J0X2tlZXBfbmF0dHNfZmFzdChyZWwsIG5ld2l0ZW0sIGl0dXApID4gbmtleWF0 dHMpDQogCXsNCiAJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgUGFnZUdldE1heE9mZnNl dE51bWJlcihwYWdlKSk7DQogCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2Us IGl0ZW1pZCk7DQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNv ZGUocGFnZSwgaXR1cCwgJmJ1Zik7DQogDQogCQlpZiAoX2J0X2tlZXBfbmF0dHNfZmFzdChyZWws IG5ld2l0ZW0sIGl0dXApID4gbmtleWF0dHMpDQogCQkJcmV0dXJuIHRydWU7DQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMNCmluZGV4IGQ1ZDk2NDMwMWMxLi5iMTg3ZDE4OTZkNiAx MDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMNCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMNCkBAIC0zNDgsOCArMzQ4LDgg QEAgX2J0X3NlYXJjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVElu c2VydFN0YXRlIGluc2VydHN0YXRlKQ0KIAkJCQlQX0lTTEVBRihvcGFxdWUpICYmDQogCQkJCSFQ X0lHTk9SRShvcGFxdWUpICYmDQogCQkJCVBhZ2VHZXRGcmVlU3BhY2UocGFnZSkgPiBpbnNlcnRz dGF0ZS0+aXRlbXN6ICYmDQotCQkJCVBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkgPj0gUF9I SUtFWSAmJg0KLQkJCQlfYnRfY29tcGFyZShyZWwsIGluc2VydHN0YXRlLT5pdHVwX2tleSwgcGFn ZSwgUF9ISUtFWSkgPiAwKQ0KKwkJCQlQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID49IFBf RklSU1REQVRBS0VZKG9wYXF1ZSkgJiYNCisJCQkJX2J0X2NvbXBhcmUocmVsLCBpbnNlcnRzdGF0 ZS0+aXR1cF9rZXksIHBhZ2UsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSkpID4gMCkNCiAJCQl7DQog CQkJCS8qDQogCQkJCSAqIENhbGxlciBjYW4gdXNlIHRoZSBmYXN0cGF0aCBvcHRpbWl6YXRpb24g YmVjYXVzZSBjYWNoZWQNCkBAIC0xMTM1LDYgKzExMzUsMTEgQEAgX2J0X2luc2VydG9ucGcoUmVs YXRpb24gcmVsLA0KIAlJbmRleFR1cGxlCW9wb3N0aW5nID0gTlVMTDsNCiAJSW5kZXhUdXBsZQlv cmlnaXR1cCA9IE5VTEw7DQogCUluZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOw0KKwlJbmRleFR1 cGxlCWNvZGVkaXR1cDsJCS8qIGl0dXAgY29kZWQgZm9yIHRoZSBwYWdlLCBvciBpdHVwICovDQor CVNpemUJCWNvZGVkaXRlbXN6OwkvKiBpdHMgTUFYQUxJR05lZCBzaXplICovDQorCUluZGV4VHVw bGUJY29kZWRucG9zdGluZyA9IE5VTEw7CS8qIG5wb3N0aW5nIGNvZGVkIGZvciB0aGUgcGFnZSAq Lw0KKwlCVEl0ZW1CdWYJb3Bvc3RidWY7CQkvKiBkZWNvZGUgd29ya3NwYWNlIGZvciBhbiBleGlz dGluZyBwb3N0aW5nICovDQorCWJvb2wJCXBhZ2VwcmVmaXg7CQkvKiB0YXJnZXQgcGFnZSBpcyBC VFBfUFJFRklYICovDQogCVhMb2dSZWNQdHIJcmVjcHRyOw0KIA0KIAlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWYpOw0KQEAgLTExNDMsNiArMTE0OCw3IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9u IHJlbCwNCiAJaXNyb290ID0gUF9JU1JPT1Qob3BhcXVlKTsNCiAJaXNyaWdodG1vc3QgPSBQX1JJ R0hUTU9TVChvcGFxdWUpOw0KIAlpc29ubHkgPSBQX0xFRlRNT1NUKG9wYXF1ZSkgJiYgUF9SSUdI VE1PU1Qob3BhcXVlKTsNCisJcGFnZXByZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQogDQog CS8qIGNoaWxkIGJ1ZmZlciBtdXN0IGJlIGdpdmVuIGlmZiBpbnNlcnRpbmcgb24gYW4gaW50ZXJu YWwgcGFnZSAqLw0KIAlBc3NlcnQoaXNsZWFmID09ICFCdWZmZXJJc1ZhbGlkKGNidWYpKTsNCkBA IC0xMTgyLDYgKzExODgsOSBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCQkgKi8N CiAJCUFzc2VydChpc2xlYWYgJiYgaXR1cF9rZXktPmhlYXBrZXlzcGFjZSAmJiBpdHVwX2tleS0+ YWxsZXF1YWxpbWFnZSk7DQogCQlvcG9zdGluZyA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShw YWdlLCBpdGVtaWQpOw0KKwkJLyogT24gYSBwcmVmaXggcGFnZSB0aGUgZXhpc3RpbmcgcG9zdGlu ZyBpcyBjb2RlZDsgZGVjb2RlIGZvciB0aGUgc3dhcC4gKi8NCisJCWlmIChwYWdlcHJlZml4KQ0K KwkJCW9wb3N0aW5nID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwgb3Bvc3RpbmcsICZvcG9zdGJ1 Zik7DQogDQogCQkvKg0KIAkJICogcG9zdGluZ29mZiB2YWx1ZSBjb21lcyBmcm9tIGVhcmxpZXIg Y2FsbCB0byBfYnRfYmluc3JjaF9wb3N0aW5nKCkuDQpAQCAtMTIxMywxOSArMTIyMiw1MCBAQCBf YnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCQluZXdpdGVtb2ZmID0gT2Zmc2V0TnVtYmVy TmV4dChuZXdpdGVtb2ZmKTsNCiAJfQ0KIA0KKwkvKg0KKwkgKiBPbiBhIHByZWZpeC1jb21wcmVz c2VkIHBhZ2UgdGhlIG5ldyBpdGVtIGlzIHN0b3JlZCBjb2RlZCwgd2hpY2ggaXMgYXQNCisJICog bW9zdCBNQVhBTElHTiBsYXJnZXIgdGhhbiBwbGFpbiBhbmQgdXN1YWxseSBtdWNoIHNtYWxsZXIu ICBTaXplIHRoZSBmaXQNCisJICogdGVzdCBhbmQgdGhlIHBsYWNlbWVudCBieSB0aGUgY29kZWQg c2l6ZS4gIChTcGxpdCBpcyBoYW5kbGVkIG9uIHBsYWluDQorCSAqIHR1cGxlczsgX2J0X3NwbGl0 IHJlLWNvbXByZXNzZXMgZWFjaCBoYWxmIGl0c2VsZi4pDQorCSAqLw0KKwlpZiAocGFnZXByZWZp eCkNCisJew0KKwkJY29kZWRpdHVwID0gX2J0X3ByZWZpeF9lbmNvZGUocGFnZSwgaXR1cCk7DQor CQljb2RlZGl0ZW1zeiA9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGNvZGVkaXR1cCkpOw0KKwkJ LyoNCisJCSAqIEEgcG9zdGluZy1saXN0IHNwbGl0IHJlcGxhY2VzIHRoZSBleGlzdGluZyBjb2Rl ZCBwb3N0aW5nIHdpdGggYQ0KKwkJICogcmUtY29kZWQgb25lOyBlbmNvZGUgaXQgaGVyZSwgYmVm b3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBzaW5jZQ0KKwkJICogX2J0X3ByZWZpeF9lbmNvZGUo KSBhbGxvY2F0ZXMuDQorCQkgKi8NCisJCWlmIChucG9zdGluZyAhPSBOVUxMKQ0KKwkJCWNvZGVk bnBvc3RpbmcgPSBfYnRfcHJlZml4X2VuY29kZShwYWdlLCBucG9zdGluZyk7DQorCX0NCisJZWxz ZQ0KKwl7DQorCQljb2RlZGl0dXAgPSBpdHVwOw0KKwkJY29kZWRpdGVtc3ogPSBpdGVtc3o7DQor CX0NCisNCiAJLyoNCiAJICogRG8gd2UgbmVlZCB0byBzcGxpdCB0aGUgcGFnZSB0byBmaXQgdGhl IGl0ZW0gb24gaXQ/DQogCSAqDQogCSAqIE5vdGU6IFBhZ2VHZXRGcmVlU3BhY2UoKSBzdWJ0cmFj dHMgc2l6ZW9mKEl0ZW1JZERhdGEpIGZyb20gaXRzIHJlc3VsdCwNCiAJICogc28gdGhpcyBjb21w YXJpc29uIGlzIGNvcnJlY3QgZXZlbiB0aG91Z2ggd2UgYXBwZWFyIHRvIGJlIGFjY291bnRpbmcN Ci0JICogb25seSBmb3IgdGhlIGl0ZW0gYW5kIG5vdCBmb3IgaXRzIGxpbmUgcG9pbnRlci4NCisJ ICogb25seSBmb3IgdGhlIGl0ZW0gYW5kIG5vdCBmb3IgaXRzIGxpbmUgcG9pbnRlci4gIFRoZSBj b2RlZCBpdGVtIHNpemUgaXMNCisJICogdXNlZDsgYSBwb3N0aW5nLWxpc3Qgc3BsaXQgYWRkaXRp b25hbGx5IGNoYW5nZXMgdGhlIHBvc3RpbmcgdHVwbGUncw0KKwkgKiBzaXplLCBidXQgdGhhdCBj YW4gb25seSBzaHJpbmsgb3Iga2VlcCBmcmVlIHNwYWNlICh0aGUgbmV3IHBvc3RpbmcgaGFzDQor CSAqIG9uZSBmZXdlciBUSUQncyB3b3J0aCBvZiByb29tIHJldXNlZCBieSBuZXdpdGVtKSwgc28g dGhlIGl0ZW0gZml0IHRlc3QNCisJICogcmVtYWlucyBhIHNhZmUgdXBwZXIgYm91bmQuDQogCSAq Lw0KLQlpZiAoUGFnZUdldEZyZWVTcGFjZShwYWdlKSA8IGl0ZW1zeikNCisJaWYgKFBhZ2VHZXRG cmVlU3BhY2UocGFnZSkgPCBjb2RlZGl0ZW1zeikNCiAJew0KIAkJQnVmZmVyCQlyYnVmOw0KIA0K IAkJQXNzZXJ0KCFzcGxpdF9vbmx5X3BhZ2UpOw0KIA0KKwkJaWYgKGNvZGVkaXR1cCAhPSBpdHVw KQ0KKwkJCXBmcmVlKGNvZGVkaXR1cCk7DQorDQogCQkvKiBzcGxpdCB0aGUgYnVmZmVyIGludG8g bGVmdCBhbmQgcmlnaHQgaGFsdmVzICovDQogCQlyYnVmID0gX2J0X3NwbGl0KHJlbCwgaGVhcHJl bCwgaXR1cF9rZXksIGJ1ZiwgY2J1ZiwgbmV3aXRlbW9mZiwgaXRlbXN6LA0KIAkJCQkJCSBpdHVw LCBvcmlnaXR1cCwgbnBvc3RpbmcsIHBvc3RpbmdvZmYpOw0KQEAgLTEyOTUsOSArMTMzNSwyNSBA QCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsN CiANCiAJCWlmIChwb3N0aW5nb2ZmICE9IDApDQotCQkJbWVtY3B5KG9wb3N0aW5nLCBucG9zdGlu ZywgTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobnBvc3RpbmcpKSk7DQorCQl7DQorCQkJaWYgKHBh Z2VwcmVmaXgpDQorCQkJew0KKwkJCQkvKg0KKwkJCQkgKiBUaGUgZXhpc3RpbmcgcG9zdGluZyBp cyBzdG9yZWQgY29kZWQ7IHJlcGxhY2UgaXRzIHNsb3QgKGF0DQorCQkJCSAqIHRoZSBvZmZzZXQg anVzdCBiZWZvcmUgbmV3aXRlbW9mZiwgc2luY2UgbmV3aXRlbW9mZiB3YXMNCisJCQkJICogYWR2 YW5jZWQgcGFzdCBpdCBhYm92ZSkgd2l0aCB0aGUgY29kZWQgbmV3IHBvc3RpbmcgKGVuY29kZWQN CisJCQkJICogYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uKSwgd2hvc2Ugc2l6ZSBtYXkgZGlm ZmVyLg0KKwkJCQkgKi8NCisJCQkJaWYgKCFQYWdlSW5kZXhUdXBsZU92ZXJ3cml0ZShwYWdlLCBP ZmZzZXROdW1iZXJQcmV2KG5ld2l0ZW1vZmYpLA0KKwkJCQkJCQkJCQkJIGNvZGVkbnBvc3Rpbmcs IEluZGV4VHVwbGVTaXplKGNvZGVkbnBvc3RpbmcpKSkNCisJCQkJCWVsb2coUEFOSUMsICJmYWls ZWQgdG8gb3ZlcndyaXRlIHBvc3RpbmcgbGlzdCBpbiBibG9jayAldSBpbiBpbmRleCBcIiVzXCIi LA0KKwkJCQkJCSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpLCBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCQltZW1jcHkob3Bvc3RpbmcsIG5wb3N0 aW5nLCBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShucG9zdGluZykpKTsNCisJCX0NCiANCi0JCWlm IChQYWdlQWRkSXRlbShwYWdlLCBpdHVwLCBpdGVtc3osIG5ld2l0ZW1vZmYsIGZhbHNlLCBmYWxz ZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCisJCWlmIChQYWdlQWRkSXRlbShwYWdlLCBjb2Rl ZGl0dXAsIGNvZGVkaXRlbXN6LCBuZXdpdGVtb2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRP ZmZzZXROdW1iZXIpDQogCQkJZWxvZyhQQU5JQywgImZhaWxlZCB0byBhZGQgbmV3IGl0ZW0gdG8g YmxvY2sgJXUgaW4gaW5kZXggXCIlc1wiIiwNCiAJCQkJIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 ZiksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KIA0KQEAgLTEzODEsOCArMTQzNywz MCBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCQkJCX0NCiAJCQl9DQogDQotCQkJ WExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZiwgUkVHQlVGX1NUQU5EQVJEKTsNCi0JCQlpZiAocG9z dGluZ29mZiA9PSAwKQ0KKwkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWYsDQorCQkJCQkJCSAg IFJFR0JVRl9TVEFOREFSRCB8DQorCQkJCQkJCSAgICgocGFnZXByZWZpeCAmJiBwb3N0aW5nb2Zm ICE9IDApID8gUkVHQlVGX0ZPUkNFX0lNQUdFIDogMCkpOw0KKwkJCWlmIChwYWdlcHJlZml4ICYm IHBvc3RpbmdvZmYgIT0gMCkNCisJCQl7DQorCQkJCS8qDQorCQkJCSAqIEEgcG9zdGluZy1saXN0 IHNwbGl0IG9uIGEgcHJlZml4IHBhZ2UgcmV3cml0ZXMgYW4gZXhpc3RpbmcNCisJCQkJICogY29k ZWQgcG9zdGluZyBhbmQgYWRkcyBhIGNvZGVkIGl0ZW07IHJhdGhlciB0aGFuIHRlYWNoIHJlZG8g dG8NCisJCQkJICogcmUtY29kZSBib3RoLCBmb3JjZSBhIGZ1bGwtcGFnZSBpbWFnZSAodGhpcyBp cyBhIHJhcmUgY2FzZSkuDQorCQkJCSAqIHBvc3RpbmdvZmYgaXMgc3RpbGwgcmVjb3JkZWQgZm9y IHRoZSByZWNvcmQgZm9ybWF0Lg0KKwkJCQkgKi8NCisJCQkJdXBvc3RpbmdvZmYgPSBwb3N0aW5n b2ZmOw0KKwkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZ1cG9zdGluZ29mZiwgc2l6ZW9mKHVp bnQxNikpOw0KKwkJCX0NCisJCQllbHNlIGlmIChwYWdlcHJlZml4KQ0KKwkJCXsNCisJCQkJLyoN CisJCQkJICogU2ltcGxlIGluc2VydCBvbiBhIHByZWZpeCBwYWdlOiBsb2cgdGhlIENPREVEIGl0 ZW0gYnl0ZXMgYXMNCisJCQkJICogdGhleSB3ZXJlIHBsYWNlZCBvbiB0aGUgcGFnZSwgc28gcmVk byBhZGRzIHRoZW0gdmVyYmF0aW0gYXQNCisJCQkJICogbmV3aXRlbW9mZiAtLSBubyBmdWxsLXBh Z2UgaW1hZ2UgbmVlZGVkLCBhbmQgYnl0ZS1pZGVudGljYWwuDQorCQkJCSAqLw0KKwkJCQlYTG9n UmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopIGNvZGVkaXR1cCwgSW5kZXhUdXBsZVNpemUoY29k ZWRpdHVwKSk7DQorCQkJfQ0KKwkJCWVsc2UgaWYgKHBvc3RpbmdvZmYgPT0gMCkNCiAJCQl7DQog CQkJCS8qIEp1c3QgbG9nIGl0dXAgZnJvbSBjYWxsZXIgKi8NCiAJCQkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7DQpAQCAtMTQxOCw2ICsxNDk2LDEx IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwNCiANCiAJCUVORF9DUklUX1NFQ1RJT04o KTsNCiANCisJCWlmIChjb2RlZGl0dXAgIT0gaXR1cCkNCisJCQlwZnJlZShjb2RlZGl0dXApOw0K KwkJaWYgKGNvZGVkbnBvc3RpbmcgIT0gTlVMTCAmJiBjb2RlZG5wb3N0aW5nICE9IG5wb3N0aW5n KQ0KKwkJCXBmcmVlKGNvZGVkbnBvc3RpbmcpOw0KKw0KIAkJLyogUmVsZWFzZSBzdWJzaWRpYXJ5 IGJ1ZmZlcnMgKi8NCiAJCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQ0KIAkJCV9idF9yZWxi dWYocmVsLCBtZXRhYnVmKTsNCkBAIC0xNTA2LDYgKzE1ODksMjIgQEAgX2J0X3NwbGl0KFJlbGF0 aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIg YnVmLA0KIAlJdGVtSWQJCWl0ZW1pZDsNCiAJSW5kZXhUdXBsZQlmaXJzdHJpZ2h0LA0KIAkJCQls ZWZ0aGlnaGtleTsNCisJQlRJdGVtQnVmCWZyYnVmOwkJCS8qIGRlY29kZSBzY3JhdGNoIGZvciBm aXJzdHJpZ2h0ICovDQorCUJUSXRlbUJ1ZglsbGJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3Ig bGFzdGxlZnQgKi8NCisJSW5kZXhUdXBsZSAqbGVmdGl0ZW1zID0gTlVMTDsJLyogbGVhZjogcGxh aW4gaXRlbXMgZm9yIHRoZSBsZWZ0IGhhbGYgKi8NCisJSW5kZXhUdXBsZSAqcmlnaHRpdGVtcyA9 IE5VTEw7CS8qIGxlYWY6IHBsYWluIGl0ZW1zIGZvciB0aGUgcmlnaHQgaGFsZiAqLw0KKwlpbnQJ CQlubGVmdCA9IDA7DQorCWludAkJCW5yaWdodCA9IDA7DQorCUluZGV4VHVwbGUJcmlnaHRoaWdo a2V5ID0gTlVMTDsJLyogbGVhZiByaWdodCBoYWxmJ3MgaGlnaCBrZXkgKE5VTEw9cmlnaHRtb3N0 KSAqLw0KKwljb25zdCBjaGFyICpvcmlncHJlZml4ID0gTlVMTDsNCisJU2l6ZQkJb3JpZ3ByZWZp eGxlbiA9IDA7DQorCWNoYXIJCWxlZnRwcmVmaXhbQlRSRUVfUFJFRklYX01BWF07CS8qIGNob3Nl biBwcmVmaXggb2YgZWFjaCBsZWFmIGhhbGYgKi8NCisJY2hhcgkJcmlnaHRwcmVmaXhbQlRSRUVf UFJFRklYX01BWF07DQorCVNpemUJCWxlZnRwcmVmaXhsZW4gPSAwOw0KKwlTaXplCQlyaWdodHBy ZWZpeGxlbiA9IDA7DQorCWNoYXIJICAgKnJpZ2h0d2FsYnVmID0gTlVMTDsJLyogcGFja2VkIHJp Z2h0LXBhZ2UgV0FMIHBheWxvYWQgKi8NCisJU2l6ZQkJcmlnaHR3YWxidWZsZW4gPSAwOw0KKwli b29sCQlmb3JjZV9yZnBpID0gZmFsc2U7CS8qIGNhcnJ5IHRoZSByaWdodCBwYWdlIGFzIGEgZm9y Y2VkIGltYWdlICovDQogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0b2ZmOw0KIAlPZmZzZXROdW1i ZXIgYWZ0ZXJsZWZ0b2ZmLA0KIAkJCQlhZnRlcnJpZ2h0b2ZmLA0KQEAgLTE1NzUsNyArMTY3NCw3 IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2Vy dCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJICogYW5kIEhBU19HQVJCQUdFIGZsYWdzLg0KIAkg Ki8NCiAJbG9wYXF1ZS0+YnRwb19mbGFncyA9IG9vcGFxdWUtPmJ0cG9fZmxhZ3M7DQotCWxvcGFx dWUtPmJ0cG9fZmxhZ3MgJj0gfihCVFBfUk9PVCB8IEJUUF9TUExJVF9FTkQgfCBCVFBfSEFTX0dB UkJBR0UpOw0KKwlsb3BhcXVlLT5idHBvX2ZsYWdzICY9IH4oQlRQX1JPT1QgfCBCVFBfU1BMSVRf RU5EIHwgQlRQX0hBU19HQVJCQUdFIHwgQlRQX1BSRUZJWCk7DQogCS8qIHNldCBmbGFnIGluIGxl ZnRwYWdlIGluZGljYXRpbmcgdGhhdCByaWdodHBhZ2UgaGFzIG5vIGRvd25saW5rIHlldCAqLw0K IAlsb3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9JTkNPTVBMRVRFX1NQTElUOw0KIAlsb3BhcXVl LT5idHBvX3ByZXYgPSBvb3BhcXVlLT5idHBvX3ByZXY7DQpAQCAtMTY1MCw2ICsxNzQ5LDggQEAg X2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0 dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwg Zmlyc3RyaWdodG9mZik7DQogCQlpdGVtc3ogPSBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKTsNCiAJ CWZpcnN0cmlnaHQgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7 DQorCQlpZiAoUF9IQVNQUkVGSVgob29wYXF1ZSkpDQorCQkJZmlyc3RyaWdodCA9IF9idF9wcmVm aXhfZGVjb2RlKG9yaWdwYWdlLCBmaXJzdHJpZ2h0LCAmZnJidWYpOw0KIAkJaWYgKGZpcnN0cmln aHRvZmYgPT0gb3JpZ3BhZ2Vwb3N0aW5nb2ZmKQ0KIAkJCWZpcnN0cmlnaHQgPSBucG9zdGluZzsN CiAJfQ0KQEAgLTE2NzMsNiArMTc3NCw4IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJCQlBc3Nl cnQobGFzdGxlZnRvZmYgPj0gUF9GSVJTVERBVEFLRVkob29wYXF1ZSkpOw0KIAkJCWl0ZW1pZCA9 IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIGxhc3RsZWZ0b2ZmKTsNCiAJCQlsYXN0bGVmdCA9IChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsNCisJCQlpZiAoUF9IQVNQ UkVGSVgob29wYXF1ZSkpDQorCQkJCWxhc3RsZWZ0ID0gX2J0X3ByZWZpeF9kZWNvZGUob3JpZ3Bh Z2UsIGxhc3RsZWZ0LCAmbGxidWYpOw0KIAkJCWlmIChsYXN0bGVmdG9mZiA9PSBvcmlncGFnZXBv c3RpbmdvZmYpDQogCQkJCWxhc3RsZWZ0ID0gbnBvc3Rpbmc7DQogCQl9DQpAQCAtMTcxMiw3ICsx ODE1LDExIEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nh bkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJfQ0KIA0KIAkvKg0KLQkgKiBBZGQgbmV3 IGhpZ2gga2V5IHRvIGxlZnRwYWdlDQorCSAqIEFkZCBuZXcgaGlnaCBrZXkgdG8gbGVmdHBhZ2Uu ICBGb3IgYSBsZWFmIHNwbGl0IHRoZSBsZWZ0IGhhbGYgaXMgYnVpbHQNCisJICogYXMgYSB3aG9s ZSBiZWxvdyAoc28gaXQgY2FuIGJlIHByZWZpeC1jb21wcmVzc2VkIGZyb20gdGhlIHN0YXJ0LCB3 aGljaA0KKwkgKiBhIHBsYWluIGluY3JlbWVudGFsIGJ1aWxkIGNhbm5vdCByZXByZXNlbnQgd2hl biB0aGUgcGFnZSBob2xkcyBtb3JlDQorCSAqIGxvZ2ljYWwgZGF0YSB0aGFuIGZpdHMgcGxhaW4p OyB0aGUgaGlnaCBrZXkgaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyDQorCSAqIHRoZW4uICBJbnRl cm5hbCBoYWx2ZXMgYXJlIGJ1aWx0IGluY3JlbWVudGFsbHkgaGVyZSBhcyBiZWZvcmUuDQogCSAq Lw0KIAlhZnRlcmxlZnRvZmYgPSBQX0hJS0VZOw0KIA0KQEAgLTE3MjAsMTEgKzE4MjcsMjMgQEAg X2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0 dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAlBc3NlcnQoQlRyZWVUdXBsZUdldE5BdHRzKGxlZnRoaWdo a2V5LCByZWwpIDw9DQogCQkgICBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVz KHJlbCkpOw0KIAlBc3NlcnQoaXRlbXN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGxlZnRo aWdoa2V5KSkpOw0KLQlpZiAoUGFnZUFkZEl0ZW0obGVmdHBhZ2UsIGxlZnRoaWdoa2V5LCBpdGVt c3osIGFmdGVybGVmdG9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0K LQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgaGlnaCBrZXkgdG8gdGhlIGxlZnQgc2libGlu ZyINCi0JCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwNCi0J CQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KLQlhZnRl cmxlZnRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVybGVmdG9mZik7DQorCWlmIChpc2xlYWYp DQorCXsNCisJCS8qIFRoZSBidWlsZGVyIG5lZWRzIGEgc3RhYmxlIGNvcHk7IGxlZnRoaWdoa2V5 IHBvaW50cyBpbnRvIHdvcmtzcGFjZS4gKi8NCisJCWxlZnRoaWdoa2V5ID0gQ29weUluZGV4VHVw bGUobGVmdGhpZ2hrZXkpOw0KKwkJbGVmdGl0ZW1zID0gcGFsbG9jX2FycmF5KEluZGV4VHVwbGUs IG1heG9mZiArIDIpOw0KKwkJcmlnaHRpdGVtcyA9IHBhbGxvY19hcnJheShJbmRleFR1cGxlLCBt YXhvZmYgKyAyKTsNCisJCWlmIChQX0hBU1BSRUZJWChvb3BhcXVlKSkNCisJCQlvcmlncHJlZml4 ID0gX2J0X3BhZ2VfZ2V0X3ByZWZpeChvcmlncGFnZSwgJm9yaWdwcmVmaXhsZW4pOw0KKwl9DQor CWVsc2UNCisJew0KKwkJaWYgKFBhZ2VBZGRJdGVtKGxlZnRwYWdlLCBsZWZ0aGlnaGtleSwgaXRl bXN6LCBhZnRlcmxlZnRvZmYsIGZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikN CisJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBoaWdoIGtleSB0byB0aGUgbGVmdCBzaWJs aW5nIg0KKwkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwN CisJCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCisJ CWFmdGVybGVmdG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJsZWZ0b2ZmKTsNCisJfQ0KIA0K IAkvKg0KIAkgKiBBY3F1aXJlIGEgbmV3IHJpZ2h0IHBhZ2UgdG8gc3BsaXQgaW50bywgbm93IHRo YXQgbGVmdCBwYWdlIGhhcyBhIG5ldw0KQEAgLTE3NjUsNyArMTg4NCw3IEBAIF9idF9zcGxpdChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVm ZmVyIGJ1ZiwNCiAJICogYW5kIEhBU19HQVJCQUdFIGZsYWdzLg0KIAkgKi8NCiAJcm9wYXF1ZS0+ YnRwb19mbGFncyA9IG9vcGFxdWUtPmJ0cG9fZmxhZ3M7DQotCXJvcGFxdWUtPmJ0cG9fZmxhZ3Mg Jj0gfihCVFBfUk9PVCB8IEJUUF9TUExJVF9FTkQgfCBCVFBfSEFTX0dBUkJBR0UpOw0KKwlyb3Bh cXVlLT5idHBvX2ZsYWdzICY9IH4oQlRQX1JPT1QgfCBCVFBfU1BMSVRfRU5EIHwgQlRQX0hBU19H QVJCQUdFIHwgQlRQX1BSRUZJWCk7DQogCXJvcGFxdWUtPmJ0cG9fcHJldiA9IG9yaWdwYWdlbnVt YmVyOw0KIAlyb3BhcXVlLT5idHBvX25leHQgPSBvb3BhcXVlLT5idHBvX25leHQ7DQogCXJvcGFx dWUtPmJ0cG9fbGV2ZWwgPSBvb3BhcXVlLT5idHBvX2xldmVsOw0KQEAgLTE3ODIsMjEgKzE5MDEs MjUgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIA0KIAlpZiAoIWlzcmlnaHRtb3N0KQ0KIAl7DQot CQlJbmRleFR1cGxlCXJpZ2h0aGlnaGtleTsNCisJCUl0ZW1JZAkJaGlpdGVtaWQgPSBQYWdlR2V0 SXRlbUlkKG9yaWdwYWdlLCBQX0hJS0VZKTsNCisJCVNpemUJCWhpaXRlbXN6ID0gSXRlbUlkR2V0 TGVuZ3RoKGhpaXRlbWlkKTsNCisJCUluZGV4VHVwbGUJaGlrZXkgPSAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ob3JpZ3BhZ2UsIGhpaXRlbWlkKTsNCiANCi0JCWl0ZW1pZCA9IFBhZ2VHZXRJdGVt SWQob3JpZ3BhZ2UsIFBfSElLRVkpOw0KLQkJaXRlbXN6ID0gSXRlbUlkR2V0TGVuZ3RoKGl0ZW1p ZCk7DQotCQlyaWdodGhpZ2hrZXkgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2Us IGl0ZW1pZCk7DQotCQlBc3NlcnQoQlRyZWVUdXBsZUdldE5BdHRzKHJpZ2h0aGlnaGtleSwgcmVs KSA+IDApOw0KLQkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhyaWdodGhpZ2hrZXksIHJlbCkg PD0NCisJCUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHMoaGlrZXksIHJlbCkgPiAwKTsNCisJCUFz c2VydChCVHJlZVR1cGxlR2V0TkF0dHMoaGlrZXksIHJlbCkgPD0NCiAJCQkgICBJbmRleFJlbGF0 aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKHJlbCkpOw0KLQkJaWYgKFBhZ2VBZGRJdGVtKHJp Z2h0cGFnZSwgcmlnaHRoaWdoa2V5LCBpdGVtc3osIGFmdGVycmlnaHRvZmYsIGZhbHNlLCBmYWxz ZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCisJCWlmIChpc2xlYWYpDQorCQkJcmlnaHRoaWdo a2V5ID0gQ29weUluZGV4VHVwbGUoaGlrZXkpOwkvKiBzdGFibGU6IG9yaWdwYWdlIGlzDQorCQkJ CQkJCQkJCQkJCQkgKiBvdmVyd3JpdHRlbiBieSB0aGUgbGVmdA0KKwkJCQkJCQkJCQkJCQkJICog aGFsZiBiZWZvcmUgV0FMIGxvZ2dpbmcgKi8NCisJCWVsc2UNCiAJCXsNCi0JCQllbG9nKEVSUk9S LCAiZmFpbGVkIHRvIGFkZCBoaWdoIGtleSB0byB0aGUgcmlnaHQgc2libGluZyINCi0JCQkJICIg d2hpbGUgc3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQotCQkJCSBvcmlncGFn ZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQorCQkJaWYgKFBhZ2VBZGRJ dGVtKHJpZ2h0cGFnZSwgaGlrZXksIGhpaXRlbXN6LCBhZnRlcnJpZ2h0b2ZmLCBmYWxzZSwgZmFs c2UpID09IEludmFsaWRPZmZzZXROdW1iZXIpDQorCQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8g YWRkIGhpZ2gga2V5IHRvIHRoZSByaWdodCBzaWJsaW5nIg0KKwkJCQkJICIgd2hpbGUgc3BsaXR0 aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQorCQkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KKwkJCWFmdGVycmlnaHRvZmYgPSBPZmZzZXRO dW1iZXJOZXh0KGFmdGVycmlnaHRvZmYpOw0KIAkJfQ0KLQkJYWZ0ZXJyaWdodG9mZiA9IE9mZnNl dE51bWJlck5leHQoYWZ0ZXJyaWdodG9mZik7DQogCX0NCiANCiAJLyoNCkBAIC0xODEzLDcgKzE5 MzYsMjEgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2Fu SW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkgKg0KIAkgKiBOb3RlOiB3ZSAqbXVzdCog aW5zZXJ0IGF0IGxlYXN0IHRoZSByaWdodCBwYWdlJ3MgaXRlbXMgaW4gaXRlbS1udW1iZXINCiAJ ICogb3JkZXIsIGZvciB0aGUgYmVuZWZpdCBvZiBfYnRfcmVzdG9yZV9wYWdlKCkuDQorCSAqDQor CSAqIEEgbGVhZiBzcGxpdCBidWlsZHMgZWFjaCBoYWxmIGFzIGEgd2hvbGUgcGFnZSBiZWxvdyAo c28gaXQgY2FuIGJlDQorCSAqIHByZWZpeC1jb21wcmVzc2VkIGZyb20gdGhlIHN0YXJ0KSwgd2hp Y2ggcmVkbyBtdXN0IHJlcHJvZHVjZSBieXRlIGZvcg0KKwkgKiBieXRlLiAgVG8ga2VlcCB0aGUg cHJpbWFyeSBhbmQgcmVkbyBpbiBsb2NrIHN0ZXAsIGJvdGggZGVyaXZlIHRoZQ0KKwkgKiBzcGxp dCdzIHBsYWluIGl0ZW0gYXJyYXlzIGZyb20gdGhlIG9yaWdpbmFsIHBhZ2UgdGhyb3VnaCB0aGUg c2luZ2xlDQorCSAqIHNoYXJlZCByb3V0aW5lIF9idF9zcGxpdF9sZWFmX2NvbGxlY3QoKTsgdGhl IGluY3JlbWVudGFsIGxvb3AgaGVyZQ0KKwkgKiBoYW5kbGVzIG9ubHkgdGhlIGludGVybmFsICgh aXNsZWFmKSBjYXNlLg0KIAkgKi8NCisJaWYgKGlzbGVhZikNCisJew0KKwkJX2J0X3NwbGl0X2xl YWZfY29sbGVjdChvcmlncGFnZSwgZmlyc3RyaWdodG9mZiwgbmV3aXRlbW9mZiwgbmV3aXRlbSwN CisJCQkJCQkJICAgbmV3aXRlbW9ubGVmdCwgb3JpZ3BhZ2Vwb3N0aW5nb2ZmLCBucG9zdGluZywN CisJCQkJCQkJICAgbGVmdGl0ZW1zLCAmbmxlZnQsIHJpZ2h0aXRlbXMsICZucmlnaHQpOw0KKwl9 DQorCWVsc2UNCiAJZm9yIChpID0gUF9GSVJTVERBVEFLRVkob29wYXF1ZSk7IGkgPD0gbWF4b2Zm OyBpID0gT2Zmc2V0TnVtYmVyTmV4dChpKSkNCiAJew0KIAkJSW5kZXhUdXBsZQlkYXRhaXRlbTsN CkBAIC0xODM3LDI0ICsxOTc0LDIwIEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9u IGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJCQl7DQogCQkJ CUFzc2VydChuZXdpdGVtb2ZmIDw9IGZpcnN0cmlnaHRvZmYpOw0KIAkJCQlpZiAoIV9idF9wZ2Fk ZHR1cChsZWZ0cGFnZSwgbmV3aXRlbXN6LCBuZXdpdGVtLCBhZnRlcmxlZnRvZmYsDQotCQkJCQkJ CQkgIGZhbHNlKSkNCi0JCQkJew0KKwkJCQkJCQkJCSAgIGZhbHNlKSkNCiAJCQkJCWVsb2coRVJS T1IsICJmYWlsZWQgdG8gYWRkIG5ldyBpdGVtIHRvIHRoZSBsZWZ0IHNpYmxpbmciDQogCQkJCQkJ ICIgd2hpbGUgc3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQogCQkJCQkJIG9y aWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCi0JCQkJfQ0KIAkJ CQlhZnRlcmxlZnRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVybGVmdG9mZik7DQogCQkJfQ0K IAkJCWVsc2UNCiAJCQl7DQogCQkJCUFzc2VydChuZXdpdGVtb2ZmID49IGZpcnN0cmlnaHRvZmYp Ow0KIAkJCQlpZiAoIV9idF9wZ2FkZHR1cChyaWdodHBhZ2UsIG5ld2l0ZW1zeiwgbmV3aXRlbSwg YWZ0ZXJyaWdodG9mZiwNCi0JCQkJCQkJCSAgYWZ0ZXJyaWdodG9mZiA9PSBtaW51c2luZm9mZikp DQotCQkJCXsNCisJCQkJCQkJCQkgICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2ZmKSkNCiAJ CQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIG5ldyBpdGVtIHRvIHRoZSByaWdodCBzaWJs aW5nIg0KIAkJCQkJCSAiIHdoaWxlIHNwbGl0dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIi LA0KIAkJCQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7 DQotCQkJCX0NCiAJCQkJYWZ0ZXJyaWdodG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJyaWdo dG9mZik7DQogCQkJfQ0KIAkJfQ0KQEAgLTE4NjMsMjggKzE5OTYsMjQgQEAgX2J0X3NwbGl0KFJl bGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZm ZXIgYnVmLA0KIAkJaWYgKGkgPCBmaXJzdHJpZ2h0b2ZmKQ0KIAkJew0KIAkJCWlmICghX2J0X3Bn YWRkdHVwKGxlZnRwYWdlLCBpdGVtc3osIGRhdGFpdGVtLCBhZnRlcmxlZnRvZmYsIGZhbHNlKSkN Ci0JCQl7DQogCQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIG9sZCBpdGVtIHRvIHRoZSBs ZWZ0IHNpYmxpbmciDQogCQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXgg XCIlc1wiIiwNCiAJCQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSk7DQotCQkJfQ0KIAkJCWFmdGVybGVmdG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJs ZWZ0b2ZmKTsNCiAJCX0NCiAJCWVsc2UNCiAJCXsNCiAJCQlpZiAoIV9idF9wZ2FkZHR1cChyaWdo dHBhZ2UsIGl0ZW1zeiwgZGF0YWl0ZW0sIGFmdGVycmlnaHRvZmYsDQotCQkJCQkJCSAgYWZ0ZXJy aWdodG9mZiA9PSBtaW51c2luZm9mZikpDQotCQkJew0KKwkJCQkJCQkJICAgYWZ0ZXJyaWdodG9m ZiA9PSBtaW51c2luZm9mZikpDQogCQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIG9sZCBp dGVtIHRvIHRoZSByaWdodCBzaWJsaW5nIg0KIAkJCQkJICIgd2hpbGUgc3BsaXR0aW5nIGJsb2Nr ICV1IG9mIGluZGV4IFwiJXNcIiIsDQogCQkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpOw0KLQkJCX0NCiAJCQlhZnRlcnJpZ2h0b2ZmID0gT2Zmc2V0TnVt YmVyTmV4dChhZnRlcnJpZ2h0b2ZmKTsNCiAJCX0NCiAJfQ0KIA0KLQkvKiBIYW5kbGUgY2FzZSB3 aGVyZSBuZXdpdGVtIGdvZXMgYXQgdGhlIGVuZCBvZiByaWdodHBhZ2UgKi8NCi0JaWYgKGkgPD0g bmV3aXRlbW9mZikNCisJLyogSGFuZGxlIGNhc2Ugd2hlcmUgbmV3aXRlbSBnb2VzIGF0IHRoZSBl bmQgb2YgcmlnaHRwYWdlIChpbnRlcm5hbCBvbmx5KSAqLw0KKwlpZiAoIWlzbGVhZiAmJiBpIDw9 IG5ld2l0ZW1vZmYpDQogCXsNCiAJCS8qDQogCQkgKiBDYW4ndCBoYXZlIG5ld2l0ZW1vbmxlZnQg aGVyZTsgdGhhdCB3b3VsZCBpbXBseSB3ZSB3ZXJlIHRvbGQgdG8gcHV0DQpAQCAtMTg5MywxNSAr MjAyMiw5MyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNj YW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQkgKi8NCiAJCUFzc2VydCghbmV3aXRl bW9ubGVmdCAmJiBuZXdpdGVtb2ZmID09IG1heG9mZiArIDEpOw0KIAkJaWYgKCFfYnRfcGdhZGR0 dXAocmlnaHRwYWdlLCBuZXdpdGVtc3osIG5ld2l0ZW0sIGFmdGVycmlnaHRvZmYsDQotCQkJCQkJ ICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2ZmKSkNCi0JCXsNCisJCQkJCQkJICAgYWZ0ZXJy aWdodG9mZiA9PSBtaW51c2luZm9mZikpDQogCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQg bmV3IGl0ZW0gdG8gdGhlIHJpZ2h0IHNpYmxpbmciDQogCQkJCSAiIHdoaWxlIHNwbGl0dGluZyBi bG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KIAkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KLQkJfQ0KIAkJYWZ0ZXJyaWdodG9mZiA9IE9mZnNldE51 bWJlck5leHQoYWZ0ZXJyaWdodG9mZik7DQogCX0NCiANCisJLyoNCisJICogTGVhZiBoYWx2ZXMg YXJlIGJ1aWx0IGFzIHdob2xlIHBhZ2VzIG5vdywgc28gdGhleSBjYW4gYmUgcHJlZml4LQ0KKwkg KiBjb21wcmVzc2VkIGZyb20gdGhlIHN0YXJ0IChTdHJhdGVneSAxOiBhIHBhZ2UgaXMgZmF1bHRl ZCBpbnRvIHRoZQ0KKwkgKiBCVFBfUFJFRklYIGZvcm1hdCBvbmx5IHdoZW4gaXQgaXMgd3JpdHRl biB3aG9sZSkuICBUaGUgcGxhaW4gaXRlbSBhcnJheXMNCisJICogd2VyZSBjb2xsZWN0ZWQgYWJv dmUgYnkgX2J0X3NwbGl0X2xlYWZfY29sbGVjdCgpLCB0aGUgc2FtZSByb3V0aW5lIHJlZG8NCisJ ICogdXNlcywgc28gdGhlIHByaW1hcnkgYW5kIHJlZG8gbGF5IG91dCBpZGVudGljYWwgYnl0ZXMu DQorCSAqLw0KKwlpZiAoaXNsZWFmKQ0KKwl7DQorCQlfYnRfc3BsaXRfbGVhZl9oYWxmKHJlbCwg bGVmdHBhZ2UsIGxlZnRoaWdoa2V5LCBsZWZ0aXRlbXMsIG5sZWZ0LA0KKwkJCQkJCQlvcmlncHJl Zml4LCBvcmlncHJlZml4bGVuLA0KKwkJCQkJCQlsZWZ0cHJlZml4LCAmbGVmdHByZWZpeGxlbik7 DQorCQlfYnRfc3BsaXRfbGVhZl9oYWxmKHJlbCwgcmlnaHRwYWdlLCByaWdodGhpZ2hrZXksIHJp Z2h0aXRlbXMsIG5yaWdodCwNCisJCQkJCQkJb3JpZ3ByZWZpeCwgb3JpZ3ByZWZpeGxlbiwNCisJ CQkJCQkJcmlnaHRwcmVmaXgsICZyaWdodHByZWZpeGxlbik7DQorDQorCQkvKg0KKwkJICogQnVp bGQgdGhlIHJpZ2h0IHBhZ2UncyBXQUwgcGF5bG9hZCBub3csIGJlZm9yZSB0aGUgY3JpdGljYWwg c2VjdGlvbg0KKwkJICogKHBhbGxvYyBpcyBkaXNhbGxvd2VkIGluc2lkZSBpdCk6IHRoZSByaWdo dCBwcmVmaXggYnl0ZXMsIHRoZW4gdGhlDQorCQkgKiByaWdodCBoaWdoIGtleSAodW5sZXNzIHJp Z2h0bW9zdCksIHRoZW4gdGhlIHJpZ2h0IGhhbGYncyBwbGFpbiBpdGVtcywNCisJCSAqIGVhY2gg TUFYQUxJR04nZCwgaW4gb25lIGNvbnRpZ3VvdXMgYnVmZmVyIGxvZ2dlZCB3aXRoIGEgc2luZ2xl IHJkYXRhDQorCQkgKiBzbG90LiAgQSB2ZXJ5IGNvbXByZXNzaWJsZSByaWdodCBoYWxmIHdob3Nl IHBsYWluIGl0ZW1zIHdvdWxkIGV4Y2VlZA0KKwkJICogYSBwYWdlIGlzIGluc3RlYWQgY2Fycmll ZCBhcyBhIGZ1bGwtcGFnZSBpbWFnZSAoc2V0IGJlbG93KSwgc28gdGhpcw0KKwkJICogYnVmZmVy IGlzIGJvdW5kZWQuDQorCQkgKi8NCisJCWlmIChsZWZ0cHJlZml4bGVuID4gMCB8fCByaWdodHBy ZWZpeGxlbiA+IDAgfHwgb3JpZ3ByZWZpeGxlbiA+IDApDQorCQl7DQorCQkJU2l6ZQkJcm9mZiA9 IE1BWEFMSUdOKHJpZ2h0cHJlZml4bGVuKTsNCisNCisJCQlpZiAocmlnaHRoaWdoa2V5ICE9IE5V TEwpDQorCQkJCXJvZmYgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUocmlnaHRoaWdoa2V5KSk7 DQorCQkJZm9yIChpbnQgcmkgPSAwOyByaSA8IG5yaWdodDsgcmkrKykNCisJCQkJcm9mZiArPSBN QVhBTElHTihJbmRleFR1cGxlU2l6ZShyaWdodGl0ZW1zW3JpXSkpOw0KKwkJCXJpZ2h0d2FsYnVm ID0gcGFsbG9jKE1heChyb2ZmLCAxKSk7DQorCQkJcmlnaHR3YWxidWZsZW4gPSByb2ZmOw0KKw0K KwkJCS8qDQorCQkJICogRGVjaWRlIChiZWZvcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIHNpbmNl IHRoZSBpbmplY3Rpb24tcG9pbnQNCisJCQkgKiBjYWNoZSBsb2FkIGNhbiBhbGxvY2F0ZSkgd2hl dGhlciB0byBjYXJyeSB0aGUgcmlnaHQgcGFnZSBhcyBhDQorCQkJICogZm9yY2VkIGZ1bGwtcGFn ZSBpbWFnZTogbm9ybWFsbHkgb25seSB3aGVuIGl0cyBwbGFpbiBwYXlsb2FkDQorCQkJICogd291 bGQgZXhjZWVkIGEgYmxvY2ssIGJ1dCBhIHRlc3QgY2FuIGZvcmNlIHRoZSBvdGhlcndpc2UtcmFy ZQ0KKwkJCSAqIHBhdGggd2l0aCB0aGUgbmJ0cmVlLXByZWZpeC1mb3JjZS1yZnBpIGluamVjdGlv biBwb2ludC4NCisJCQkgKi8NCisJCQlpZiAocmlnaHR3YWxidWZsZW4gPiBCTENLU1opDQorCQkJ CWZvcmNlX3JmcGkgPSB0cnVlOw0KKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUw0KKwkJCWVs c2UgaWYgKElTX0lOSkVDVElPTl9QT0lOVF9BVFRBQ0hFRCgibmJ0cmVlLXByZWZpeC1mb3JjZS1y ZnBpIikpDQorCQkJCWZvcmNlX3JmcGkgPSB0cnVlOw0KKyNlbmRpZg0KKw0KKwkJCXJvZmYgPSAw Ow0KKwkJCWlmIChyaWdodHByZWZpeGxlbiA+IDApDQorCQkJew0KKwkJCQltZW1jcHkocmlnaHR3 YWxidWYsIHJpZ2h0cHJlZml4LCByaWdodHByZWZpeGxlbik7DQorCQkJCWlmIChNQVhBTElHTihy aWdodHByZWZpeGxlbikgIT0gcmlnaHRwcmVmaXhsZW4pDQorCQkJCQltZW1zZXQocmlnaHR3YWxi dWYgKyByaWdodHByZWZpeGxlbiwgMCwNCisJCQkJCQkgICBNQVhBTElHTihyaWdodHByZWZpeGxl bikgLSByaWdodHByZWZpeGxlbik7DQorCQkJCXJvZmYgKz0gTUFYQUxJR04ocmlnaHRwcmVmaXhs ZW4pOw0KKwkJCX0NCisJCQlpZiAocmlnaHRoaWdoa2V5ICE9IE5VTEwpDQorCQkJew0KKwkJCQlT aXplCQloc3ogPSBJbmRleFR1cGxlU2l6ZShyaWdodGhpZ2hrZXkpOw0KKw0KKwkJCQltZW1jcHko cmlnaHR3YWxidWYgKyByb2ZmLCByaWdodGhpZ2hrZXksIGhzeik7DQorCQkJCWlmIChNQVhBTElH Tihoc3opICE9IGhzeikNCisJCQkJCW1lbXNldChyaWdodHdhbGJ1ZiArIHJvZmYgKyBoc3osIDAs IE1BWEFMSUdOKGhzeikgLSBoc3opOw0KKwkJCQlyb2ZmICs9IE1BWEFMSUdOKGhzeik7DQorCQkJ fQ0KKwkJCWZvciAoaW50IHJpID0gMDsgcmkgPCBucmlnaHQ7IHJpKyspDQorCQkJew0KKwkJCQlT aXplCQlyc3ogPSBJbmRleFR1cGxlU2l6ZShyaWdodGl0ZW1zW3JpXSk7DQorDQorCQkJCW1lbWNw eShyaWdodHdhbGJ1ZiArIHJvZmYsIHJpZ2h0aXRlbXNbcmldLCByc3opOw0KKwkJCQlpZiAoTUFY QUxJR04ocnN6KSAhPSByc3opDQorCQkJCQltZW1zZXQocmlnaHR3YWxidWYgKyByb2ZmICsgcnN6 LCAwLCBNQVhBTElHTihyc3opIC0gcnN6KTsNCisJCQkJcm9mZiArPSBNQVhBTElHTihyc3opOw0K KwkJCX0NCisJCX0NCisJfQ0KKw0KIAkvKg0KIAkgKiBXZSBoYXZlIHRvIGdyYWIgdGhlIG9yaWdp bmFsIHJpZ2h0IHNpYmxpbmcgKGlmIGFueSkgYW5kIHVwZGF0ZSBpdHMgcHJldg0KIAkgKiBsaW5r LiAgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGlzIGRlYWRsb2NrLWZyZWUsIHNpbmNlIHdl IGNvdXBsZQ0KQEAgLTIwMDUsMTcgKzIyMTIsNzEgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwg UmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJ aWYgKHBvc3RpbmdvZmYgIT0gMCAmJiBvcmlncGFnZXBvc3RpbmdvZmYgPCBmaXJzdHJpZ2h0b2Zm KQ0KIAkJCXhscmVjLnBvc3RpbmdvZmYgPSBwb3N0aW5nb2ZmOw0KIA0KKwkJLyoNCisJCSAqIEEg bGVhZiBzcGxpdCB0aGF0IGludm9sdmVzIHByZWZpeCBjb21wcmVzc2lvbiAoZWl0aGVyIGhhbGYg ZW5kcyB1cA0KKwkJICogY29tcHJlc3NlZCwgb3IgdGhlIHByZS1zcGxpdCBwYWdlIHdhcyBjb21w cmVzc2VkIHNvIGl0cyBpdGVtcyBhcmUNCisJCSAqIGNvZGVkKSBpcyByZXBsYXllZCBieSByZWJ1 aWxkaW5nIGJvdGggaGFsdmVzIGZyb20gdGhlIHByZS1zcGxpdCBwYWdlLA0KKwkJICogZXhhY3Rs eSBhcyB0aGUgcHJpbWFyeSBkaWQsIHJhdGhlciB0aGFuIGJ5IHJlcGxheWluZyBsb2dnZWQgdHVw bGVzIC0tDQorCQkgKiB0aGUgY29kZWQgcGh5c2ljYWwgbGF5b3V0IHdvdWxkIG5vdCBtYXRjaCBf YnRfcmVzdG9yZV9wYWdlLiAgTm8NCisJCSAqIGZ1bGwtcGFnZSBpbWFnZSBpcyBuZWVkZWQ7IHJl ZG8gcmVjb25zdHJ1Y3RzIHRoZSBwbGFpbiBpdGVtcyBmcm9tIHRoZQ0KKwkJICogb3JpZ2luYWwg cGFnZSAoYmxvY2sgMCkgYW5kIGxheXMgZWFjaCBoYWxmIG91dCBjb2RlZCBhZ2FpbnN0IHRoZQ0K KwkJICogY2hvc2VuIHByZWZpeCwgd2hvc2UgbGVuZ3RoIGFuZCBieXRlcyBhcmUgY2FycmllZCBp biB0aGUgcmVjb3JkLg0KKwkJICovDQorCQl4bHJlYy5mbGFncyA9IDA7DQorCQl4bHJlYy5sZWZ0 cHJlZml4bGVuID0gMDsNCisJCXhscmVjLnJpZ2h0cHJlZml4bGVuID0gMDsNCisJCWlmIChpc2xl YWYgJiYgKGxlZnRwcmVmaXhsZW4gPiAwIHx8IHJpZ2h0cHJlZml4bGVuID4gMCB8fCBvcmlncHJl Zml4bGVuID4gMCkpDQorCQl7DQorCQkJeGxyZWMuZmxhZ3MgfD0gWExIX1NQTElUX0xFQUZQUkVG SVg7DQorCQkJeGxyZWMubGVmdHByZWZpeGxlbiA9ICh1aW50OCkgbGVmdHByZWZpeGxlbjsNCisJ CQl4bHJlYy5yaWdodHByZWZpeGxlbiA9ICh1aW50OCkgcmlnaHRwcmVmaXhsZW47DQorDQorCQkJ LyoNCisJCQkgKiBUaGUgcmlnaHQgaGFsZiBpcyBub3JtYWxseSBjYXJyaWVkIGFzIGl0cyBwYWNr ZWQgcGxhaW4gcGF5bG9hZA0KKwkJCSAqIChyZWRvIGxheXMgaXQgb3V0IGNvZGVkKSwgZmFyIGNo ZWFwZXIgdGhhbiBhIGZ1bGwtcGFnZSBpbWFnZS4NCisJCQkgKiBCdXQgYSB2ZXJ5IGNvbXByZXNz aWJsZSBwYWdlIGNhbiBob2xkIG1vcmUgcGxhaW4gZGF0YSB0aGFuIGZpdHMNCisJCQkgKiBpbiBv bmUgcGFnZTsgZm9yY2VfcmZwaSAoZGVjaWRlZCBiZWZvcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24p DQorCQkJICogY2FycmllcyB0aGUgY29kZWQgcmlnaHQgcGFnZSBhcyBhIGJvdW5kZWQgZnVsbC1w YWdlIGltYWdlIGluc3RlYWQuDQorCQkJICovDQorCQkJaWYgKGZvcmNlX3JmcGkpDQorCQkJCXhs cmVjLmZsYWdzIHw9IFhMSF9TUExJVF9SRlBJOw0KKwkJfQ0KKw0KIAkJWExvZ0JlZ2luSW5zZXJ0 KCk7DQogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mQnRyZWVTcGxpdCk7DQogDQog CQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwgYnVmLCBSRUdCVUZfU1RBTkRBUkQpOw0KLQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDEsIHJidWYsIFJFR0JVRl9XSUxMX0lOSVQpOw0KKwkJLyoNCisJCSAqIFRo ZSByaWdodCBwYWdlIGlzIHJlYnVpbHQgZnJvbSBzY3JhdGNoIGluIHJlZG8uICBPcmRpbmFyaWx5 IHRoYXQgaXMNCisJCSAqIGZyb20gdGhlIGxvZ2dlZCB0dXBsZSByZWdpb24gKFJFR0JVRl9XSUxM X0lOSVQpLiAgQSBwcmVmaXgtbGVhZiBzcGxpdA0KKwkJICogaW5zdGVhZCByZWJ1aWxkcyBpdCBm cm9tIGl0cyBsb2dnZWQgcGxhaW4gaXRlbXMsIHVubGVzcyB0aG9zZSB3b3VsZA0KKwkJICogb3Zl cmZsb3cgdGhlIHJlY29yZCAoWExIX1NQTElUX1JGUEkpLCBpbiB3aGljaCBjYXNlIHRoZSBjb2Rl ZCBwYWdlIGlzDQorCQkgKiBjYXJyaWVkIGFzIGEgZm9yY2VkIGZ1bGwtcGFnZSBpbWFnZS4NCisJ CSAqLw0KKwkJWExvZ1JlZ2lzdGVyQnVmZmVyKDEsIHJidWYsDQorCQkJCQkJICAgKHhscmVjLmZs YWdzICYgWExIX1NQTElUX1JGUEkpID8NCisJCQkJCQkgICAoUkVHQlVGX1NUQU5EQVJEIHwgUkVH QlVGX0ZPUkNFX0lNQUdFKSA6IFJFR0JVRl9XSUxMX0lOSVQpOw0KIAkJLyogTG9nIG9yaWdpbmFs IHJpZ2h0IHNpYmxpbmcsIHNpbmNlIHdlJ3ZlIGNoYW5nZWQgaXRzIHByZXYtcG9pbnRlciAqLw0K IAkJaWYgKCFpc3JpZ2h0bW9zdCkNCiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMiwgc2J1ZiwgUkVH QlVGX1NUQU5EQVJEKTsNCiAJCWlmICghaXNsZWFmKQ0KIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigz LCBjYnVmLCBSRUdCVUZfU1RBTkRBUkQpOw0KIA0KKwkJLyoNCisJCSAqIEZvciBhIHByZWZpeCBs ZWFmIHNwbGl0LCBjYXJyeSBlYWNoIGhhbGYncyBjaG9zZW4gcHJlZml4IGJ5dGVzLCBhbmQNCisJ CSAqICh1bmxlc3MgdGhlIHJpZ2h0IHBhZ2UgaXMgY2FycmllZCBhcyBhIGZ1bGwtcGFnZSBpbWFn ZSkgdGhlIHJpZ2h0DQorCQkgKiBoaWdoIGtleSBhbmQgdGhlIHJpZ2h0IGhhbGYncyBQTEFJTiBp dGVtcyBvbiBibG9jayAxLCBzbyByZWRvIGNhbiBsYXkNCisJCSAqIHRoZSByaWdodCBwYWdlIG91 dCBjb2RlZCB3aXRob3V0IGRlcGVuZGluZyBvbiBibG9jayAwJ3Mgc3RhdGUgKGJsb2NrDQorCQkg KiAwIG1heSBiZSByZXN0b3JlZCBmcm9tIGFuIGF1dG9tYXRpYyBmdWxsLXBhZ2UgaW1hZ2UpLiAg VGhlIGxlZnQgaGFsZg0KKwkJICogaXMgcmVidWlsdCBpbiByZWRvIGZyb20gdGhlIG9yaWdpbmFs IHBhZ2UgKGJsb2NrIDApIHdoZW4gaXQgbmVlZHMNCisJCSAqIHJlZG8sIG9yIGZyb20gaXRzIG93 biBGUEkgb3RoZXJ3aXNlLCBzbyB0aGUgbGVmdCBpdGVtcyBhcmUgbm90IGxvZ2dlZC4NCisJCSAq Lw0KKwkJaWYgKHhscmVjLmZsYWdzICYgWExIX1NQTElUX0xFQUZQUkVGSVgpDQorCQl7DQorCQkJ aWYgKCEoeGxyZWMuZmxhZ3MgJiBYTEhfU1BMSVRfUkZQSSkgJiYgcmlnaHR3YWxidWZsZW4gPiAw KQ0KKwkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDEsIHJpZ2h0d2FsYnVmLCByaWdodHdhbGJ1Zmxl bik7DQorCQl9DQorDQogCQkvKg0KIAkJICogTG9nIHRoZSBuZXcgaXRlbSwgaWYgaXQgd2FzIGlu c2VydGVkIG9uIHRoZSBsZWZ0IHBhZ2UuIChJZiBpdCB3YXMNCiAJCSAqIHB1dCBvbiB0aGUgcmln aHQgcGFnZSwgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IFdBTCBsb2cgaXQNCkBAIC0yMDYz LDYgKzIzMjQsMTQgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwg QlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJWExvZ1JlZ2lzdGVyQnVmRGF0 YSgwLCBsZWZ0aGlnaGtleSwNCiAJCQkJCQkJTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVmdGhp Z2hrZXkpKSk7DQogDQorCQkvKg0KKwkJICogRm9yIGEgcHJlZml4IGxlYWYgc3BsaXQsIHRoZSBs ZWZ0IGhhbGYncyBjaG9zZW4gcHJlZml4IGJ5dGVzIGZvbGxvdw0KKwkJICogdGhlIGhpZ2gga2V5 IG9uIGJsb2NrIDAgKHJlZG8gcmVhZHMgbmV3aXRlbS9vcmlnbmV3aXRlbSwgdGhlbiB0aGUNCisJ CSAqIGhpZ2gga2V5LCB0aGVuIHRoaXMgcHJlZml4KS4NCisJCSAqLw0KKwkJaWYgKCh4bHJlYy5m bGFncyAmIFhMSF9TUExJVF9MRUFGUFJFRklYKSAmJiBsZWZ0cHJlZml4bGVuID4gMCkNCisJCQlY TG9nUmVnaXN0ZXJCdWZEYXRhKDAsIGxlZnRwcmVmaXgsIGxlZnRwcmVmaXhsZW4pOw0KKw0KIAkJ LyoNCiAJCSAqIExvZyB0aGUgY29udGVudHMgb2YgdGhlIHJpZ2h0IHBhZ2UgaW4gdGhlIGZvcm1h dCB1bmRlcnN0b29kIGJ5DQogCQkgKiBfYnRfcmVzdG9yZV9wYWdlKCkuICBUaGUgd2hvbGUgcmln aHQgcGFnZSB3aWxsIGJlIHJlY3JlYXRlZC4NCkBAIC0yMDcxLDExICsyMzQwLDE0IEBAIF9idF9z cGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tl eSwgQnVmZmVyIGJ1ZiwNCiAJCSAqIHNvbWUgbmV3IGZ1bmMgaW4gcGFnZSBBUEkuICBOb3RlIHdl IG9ubHkgc3RvcmUgdGhlIHR1cGxlcw0KIAkJICogdGhlbXNlbHZlcywga25vd2luZyB0aGF0IHRo ZXkgd2VyZSBpbnNlcnRlZCBpbiBpdGVtLW51bWJlciBvcmRlcg0KIAkJICogYW5kIHNvIHRoZSBs aW5lIHBvaW50ZXJzIGNhbiBiZSByZWNvbnN0cnVjdGVkLiAgU2VlIGNvbW1lbnRzIGZvcg0KLQkJ ICogX2J0X3Jlc3RvcmVfcGFnZSgpLg0KKwkJICogX2J0X3Jlc3RvcmVfcGFnZSgpLiAgQSBwcmVm aXgtY29tcHJlc3NlZCBsZWFmIHNwbGl0IGluc3RlYWQgcmVidWlsZHMNCisJCSAqIHRoZSByaWdo dCBwYWdlIGZyb20gdGhlIG9yaWdpbmFsIHBhZ2UgaW4gcmVkbyAoc2VlIFhMSF9TUExJVF9MRUFG UFJFRklYKSwNCisJCSAqIHNvIGl0cyB0dXBsZSByZWdpb24gaXMgbm90IGxvZ2dlZC4NCiAJCSAq Lw0KLQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgxLA0KLQkJCQkJCQkoY2hhciAqKSByaWdodHBhZ2Ug KyAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3VwcGVyLA0KLQkJCQkJCQkoKFBhZ2VIZWFk ZXIpIHJpZ2h0cGFnZSktPnBkX3NwZWNpYWwgLSAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBk X3VwcGVyKTsNCisJCWlmICghKHhscmVjLmZsYWdzICYgWExIX1NQTElUX0xFQUZQUkVGSVgpKQ0K KwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwNCisJCQkJCQkJCShjaGFyICopIHJpZ2h0cGFnZSAr ICgoUGFnZUhlYWRlcikgcmlnaHRwYWdlKS0+cGRfdXBwZXIsDQorCQkJCQkJCQkoKFBhZ2VIZWFk ZXIpIHJpZ2h0cGFnZSktPnBkX3NwZWNpYWwgLSAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBk X3VwcGVyKTsNCiANCiAJCXhsaW5mbyA9IG5ld2l0ZW1vbmxlZnQgPyBYTE9HX0JUUkVFX1NQTElU X0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7DQogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVF X0lELCB4bGluZm8pOw0KQEAgLTI4MjAsNyArMzA5MiwxNSBAQCBfYnRfZGVsZXRlX29yX2RlZHVw X29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcFJlbCwNCiAJCV9idF9ib3R0b211 cGRlbF9wYXNzKHJlbCwgYnVmZmVyLCBoZWFwUmVsLCBpbnNlcnRzdGF0ZS0+aXRlbXN6KSkNCiAJ CXJldHVybjsNCiANCi0JLyogUGVyZm9ybSBkZWR1cGxpY2F0aW9uIHBhc3MgKHdoZW4gZW5hYmxl ZCBhbmQgaW5kZXgtaXMtYWxsZXF1YWxpbWFnZSkgKi8NCisJLyoNCisJICogUGVyZm9ybSBkZWR1 cGxpY2F0aW9uIHBhc3MgKHdoZW4gZW5hYmxlZCBhbmQgaW5kZXgtaXMtYWxsZXF1YWxpbWFnZSku DQorCSAqDQorCSAqIE9uIGEgcHJlZml4LWNvbXByZXNzZWQgcGFnZSB0aGUgcGFzcyBkZWNvZGVz IGl0ZW1zIGFuZCBsYXlzIHRoZSBkZWR1cGVkDQorCSAqIHJlc3VsdCBvdXQgcGxhaW4gYmVmb3Jl IHJlLWNvZGluZyBpdDsgdGhlIGRlY29kZWQgc2V0IGNhbiBleGNlZWQgb25lDQorCSAqIHBhZ2Ug ZXZlbiB3aGVuIHRoZSBjb2RlZCBmb3JtIGZpdCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFzcyBhYm9y dHMgd2l0aG91dA0KKwkgKiB0b3VjaGluZyB0aGUgcGFnZSBhbmQgd2UgZmFsbCB0aHJvdWdoIHRv IHNwbGl0IGl0LiAgV2hlbiBpdCBkb2VzIGZpdCwgdGhlDQorCSAqIHJlY29tcHJlc3NlZCBwYWdl J3MgV0FMIHJlcGxheXMgd2l0aG91dCBhIGZ1bGwtcGFnZSBpbWFnZS4NCisJICovDQogCWlmIChC VEdldERlZHVwbGljYXRlSXRlbXMocmVsKSAmJiBpdHVwX2tleS0+YWxsZXF1YWxpbWFnZSkNCiAJ CV9idF9kZWR1cF9wYXNzKHJlbCwgYnVmZmVyLCBpbnNlcnRzdGF0ZS0+aXR1cCwgaW5zZXJ0c3Rh dGUtPml0ZW1zeiwNCiAJCQkJCSAgIChpbmRleFVuY2hhbmdlZCB8fCB1bmlxdWVkdXApKTsNCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jDQppbmRleCA4M2Q2ZDM2N2Y4MS4uYzc1NWVmYzgx YjAgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYw0KKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMNCkBAIC0xMjEyLDExICsxMjEy LDI2IEBAIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLA0KIAlp ZiAobmRlbGV0YWJsZSA+IDApDQogCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFi bGUsIG5kZWxldGFibGUpOw0KIA0KKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQor DQorCS8qDQorCSAqIElmIFZBQ1VVTSBlbXB0aWVkIGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBv ZiBhbGwgaXRzIGRhdGEgaXRlbXMsIGRyb3ANCisJICogdGhlIFBSRUZJWCBpdGVtIHRvbyBhbmQg Y2xlYXIgQlRQX1BSRUZJWDogYW4gZW1wdHkgcGFnZSBjYXJyaWVzIG5vDQorCSAqIHByZWZpeCwg YW5kIHBhZ2UgZGVsZXRpb24gcmVsaWVzIG9uIGFuIGVtcHRpZWQgbGVhZiBob2xkaW5nIG9ubHkg aXRzDQorCSAqIGhpZ2gga2V5IChuYnRwYWdlLmMncyBfYnRfbWFya19wYWdlX2hhbGZkZWFkKS4g IFJlY29yZGVkIGluIHRoZSB2YWN1dW0NCisJICogcmVjb3JkIHNvIHJlZG8gZG9lcyB0aGUgc2Ft ZS4NCisJICovDQorCWlmIChQX0hBU1BSRUZJWChvcGFxdWUpICYmDQorCQlQYWdlR2V0TWF4T2Zm c2V0TnVtYmVyKHBhZ2UpID09IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwl7DQorCQlQ YWdlSW5kZXhUdXBsZURlbGV0ZShwYWdlLCBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSk7DQor CQlvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorCX0NCisNCiAJLyoNCiAJICog V2UgY2FuIGNsZWFyIHRoZSB2YWN1dW0gY3ljbGUgSUQgc2luY2UgdGhpcyBwYWdlIGhhcyBjZXJ0 YWlubHkgYmVlbg0KIAkgKiBwcm9jZXNzZWQgYnkgdGhlIGN1cnJlbnQgdmFjdXVtIHNjYW4uDQog CSAqLw0KLQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQogCW9wYXF1ZS0+YnRwb19j eWNsZWlkID0gMDsNCiANCiAJLyoNCkBAIC0yMjQ1LDYgKzIyNjAsMjAgQEAgX2J0X21hcmtfcGFn ZV9oYWxmZGVhZChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsZWFmYnVm LA0KIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQogCW9wYXF1ZS0+YnRwb19mbGFn cyB8PSBCVFBfSEFMRl9ERUFEOw0KIA0KKwkvKg0KKwkgKiBBIHByZWZpeC1jb21wcmVzc2VkIGxl YWYgYmVpbmcgZGVsZXRlZCBtYXkgc3RpbGwgY2FycnkgaXRzIFBSRUZJWCBpdGVtDQorCSAqIChl LmcuIGVtcHRpZWQgYnkgc2ltcGxlIGRlbGV0aW9uLCB3aGljaCBkb2VzIG5vdCBkcm9wIGl0KS4g IFJlbW92ZSBpdA0KKwkgKiBhbmQgY2xlYXIgQlRQX1BSRUZJWCBzbyB0aGUgcGFnZSBob2xkcyBv bmx5IGl0cyBoaWdoIGtleSwgYXMgdGhlDQorCSAqIGhhbGYtZGVhZCB0cmFuc2l0aW9uIGJlbG93 IHJlcXVpcmVzLiAgUmVkbyAoYnRyZWVfeGxvZ19tYXJrX3BhZ2VfaGFsZmRlYWQpDQorCSAqIHJl aW5pdGlhbGl6ZXMgdGhlIHBhZ2UsIHNvIGl0IG5lZWRzIG5vIHNlcGFyYXRlIGhhbmRsaW5nLg0K KwkgKi8NCisJaWYgKFBfSEFTUFJFRklYKG9wYXF1ZSkgJiYNCisJCVBhZ2VHZXRNYXhPZmZzZXRO dW1iZXIocGFnZSkgPT0gQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1ZSkpDQorCXsNCisJCVBhZ2VJ bmRleFR1cGxlRGVsZXRlKHBhZ2UsIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKTsNCisJCW9w YXF1ZS0+YnRwb19mbGFncyAmPSB+QlRQX1BSRUZJWDsNCisJfQ0KKw0KIAlBc3NlcnQoUGFnZUdl dE1heE9mZnNldE51bWJlcihwYWdlKSA9PSBQX0hJS0VZKTsNCiAJTWVtU2V0KCZ0cnVuY3R1cGxl LCAwLCBzaXplb2YoSW5kZXhUdXBsZURhdGEpKTsNCiAJdHJ1bmN0dXBsZS50X2luZm8gPSBzaXpl b2YoSW5kZXhUdXBsZURhdGEpOw0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cHJlZml4LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLmM3MjVmNzVjZDkyDQotLS0g L2Rldi9udWxsDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQpA QCAtMCwwICsxLDgxNCBAQA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqDQorICogbmJ0cHJlZml4 LmMNCisgKgkgIExlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbiBmb3IgUG9zdGdyZXMgYnRyZWVz Lg0KKyAqDQorICogQSBsZWFmIHBhZ2Ugb2YgYW4gaW5kZXggd2hvc2UgcHJlZml4X2NvbXByZXNz aW9uIHJlbG9wdGlvbiBpcyBvbiwgYW5kIHdob3NlDQorICogZmlyc3Qga2V5IGNvbHVtbiBpcyBv ZiBhIHZhcmxlbmEgdHlwZSwgbWF5IGJlIGZsYWdnZWQgQlRQX1BSRUZJWC4gIFN1Y2ggYQ0KKyAq IHBhZ2UgZnJvbnQtY29kZXMgdGhlIGZpcnN0IGtleSBjb2x1bW4gb2YgZWFjaCBub24tcGl2b3Qg dHVwbGUgYWdhaW5zdCBhDQorICogcGVyLXBhZ2UgUFJFRklYIGl0ZW0sIHNvIHRoYXQgYSBsb25n IGtleSB0aGF0IHJlcGVhdHMgb24gYSBwYWdlIGNvc3RzDQorICogbGl0dGxlIG1vcmUgdGhhbiBp dHMgdW5zaGFyZWQgdGFpbC4gIFRoZSBvbi1kaXNrIGZvcm1hdCBpcyBkb2N1bWVudGVkIGF0DQor ICogQlRQX1BSRUZJWCBpbiBuYnRyZWUuaDsgdGhpcyBmaWxlIGlzIHRoZSBlbmNvZGVyLCBkZWNv ZGVyLCBhbmQgdGhlIHBvbGljeQ0KKyAqIHRoYXQgY2hvb3NlcyBhIHBhZ2UncyBwcmVmaXguDQor ICoNCisgKiBDb2RpbmcgYW5kIGRlY29kaW5nIGRlcGVuZCBvbmx5IG9uIHRoZSBwYWdlJ3MgcHJl Zml4IGFuZCB0aGUgdHVwbGUsIG5vdCBvbg0KKyAqIHRoZSBjYXRhbG9nLCBzbyBXQUwgcmVkbyBy ZXBlYXRzIHRoZW0sIGFuZCBkZWNvZGluZyByZXByb2R1Y2VzIHRoZSBwbGFpbg0KKyAqIHR1cGxl IGJ5dGUgZm9yIGJ5dGUuICBBIHR1cGxlIGluc2VydGVkIGxhdGVyIHRoYXQgc2hhcmVzIGxlc3Mg b2YgdGhlIHByZWZpeA0KKyAqIGp1c3Qgc3RvcmVzIGEgc21hbGxlciBgc2hhcmVkJyBjb3VudCwg c28gbm8gaW5zZXJ0LCBWQUNVVU0sIGRlZHVwbGljYXRpb24NCisgKiBvciBjaGFuZ2Ugb2YgdGhl IHBhZ2UncyBrZXkgcmFuZ2UgZXZlciBoYXMgdG8gcmV3cml0ZSB0aGUgcGFnZSB0byBrZWVwIHRo ZQ0KKyAqIHByZWZpeCB2YWxpZC4gIFRoZSBwcmVmaXggaXMgY2hvc2VuIG9ubHkgd2hlbiBhIHBh Z2UgaXMgd3JpdHRlbiBhcyBhIHdob2xlDQorICogKENSRUFURSBJTkRFWCwgb3IgYSBoYWxmIG9m IGEgc3BsaXQpLg0KKyAqDQorICogVGhpcyBpcyBtb2RlbGVkIG9uIHRoZSBsZWFmIHByZWZpeCBj b21wcmVzc2lvbiBvZiB0aGUgQkFSSyBhY2Nlc3MgbWV0aG9kDQorICogKHNyYy9iYWNrZW5kL2Fj Y2Vzcy9iYXJrL2Jhcmt1dGlscy5jKS4NCisgKg0KKyAqDQorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwDQorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWENCisgKg0KKyAqIElERU5USUZJQ0FUSU9ODQorICoJICBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQorICoNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8N CisjaW5jbHVkZSAicG9zdGdyZXMuaCINCisNCisjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCINCisj aW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIg0KKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIN CisjaW5jbHVkZSAidXRpbHMvcmVsLmgiDQorDQorLyoNCisgKiBXaGVyZSBlYWNoIHBhcnQgb2Yg YSB0dXBsZSBnb2VzIGluIGl0cyBjb2RlZCBmb3JtLiAgQ29kaW5nIGFuZCBkZWNvZGluZw0KKyAq IGJvdGggbGF5IHRoZSB0dXBsZSBvdXQgZnJvbSB0aGlzLCBzbyB0aGUgdHdvIGNhbm5vdCBkaXNh Z3JlZS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCBCVFByZWZpeFBsYW4NCit7DQorCVNpemUJCWhv ZmY7CQkJLyogZGF0YSBvZmZzZXQ6IGhlYWRlciBhbmQgbnVsbCBiaXRtYXAgKi8NCisJU2l6ZQkJ YzE7CQkJCS8qIHBsYWluIGZpcnN0IGNvbHVtbidzIHNpemUsIHdpdGggaGVhZGVyICovDQorCVNp emUJCWtleWVuZDsJCQkvKiBlbmQgb2YgdGhlIHBsYWluIGtleSAocG9zdGluZyBvZmZzZXQpICov DQorCXVpbnQ4CQljb2RlOwkJCS8qIGZpcnN0IHBheWxvYWQgYnl0ZSBvZiB0aGUgY29kZWQgY29s dW1uICovDQorCWNvbnN0IGNoYXIgKnN1ZmZpeDsJCQkvKiBieXRlcyBzdG9yZWQgYWZ0ZXIgaXQg Ki8NCisJU2l6ZQkJc3VmZml4bGVuOw0KKwlTaXplCQl2c2l6ZTsJCQkvKiBjb2RlZCBjb2x1bW4n cyBzaXplLCB3aXRoIGhlYWRlciAqLw0KKwlTaXplCQljb2RlZGtleWVuZDsJLyogZW5kIG9mIHRo ZSBjb2RlZCBrZXkgKi8NCisJU2l6ZQkJdG90YWw7CQkJLyogc2l6ZSBvZiB0aGUgY29kZWQgdHVw bGUgKi8NCit9IEJUUHJlZml4UGxhbjsNCisNCisvKg0KKyAqIElzIGBpdHVwJyBzdG9yZWQgY29k ZWQgb24gYSBCVFBfUFJFRklYIHBhZ2U/ICBPbmx5IGEgbm9uLXBpdm90IHR1cGxlIChwbGFpbg0K KyAqIG9yIHBvc3RpbmcpIHdob3NlIGZpcnN0IGNvbHVtbiBpcyBub3QgTlVMTDsgYSBwaXZvdCAo aGlnaCBrZXksIGRvd25saW5rKQ0KKyAqIGlzIHN0b3JlZCBhcyBpdCBpcy4NCisgKi8NCitzdGF0 aWMgYm9vbA0KK19idF9wcmVmaXhfY29kYWJsZShJbmRleFR1cGxlIGl0dXApDQorew0KKwlpZiAo QlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpDQorCQlyZXR1cm4gZmFsc2U7DQorCXJldHVybiAhSW5k ZXhUdXBsZUhhc051bGxzKGl0dXApIHx8DQorCQkhYXR0X2lzbnVsbCgwLCAodWludDggKikgaXR1 cCArIHNpemVvZihJbmRleFR1cGxlRGF0YSkpOw0KK30NCisNCisvKg0KKyAqIERvZXMgdGhlIHZh cmxlbmEgYHZhbCcgaGF2ZSB0aGUgaGVhZGVyIGRlY29kaW5nIHdvdWxkIGdpdmUgaXQgYmFjazog dGhlDQorICogMS1ieXRlIGhlYWRlciBpZiBpdHMgZGF0YSBmaXQgb25lLCBlbHNlIGFuIHVuY29t cHJlc3NlZCA0LWJ5dGUgaGVhZGVyPw0KKyAqLw0KK3N0YXRpYyBib29sDQorX2J0X3ByZWZpeF9j YW5vbmljYWwoY29uc3QgY2hhciAqdmFsKQ0KK3sNCisJaWYgKFZBUkFUVF9JU19TSE9SVCh2YWwp KQ0KKwkJcmV0dXJuICFWQVJBVFRfSVNfRVhURVJOQUwodmFsKTsNCisJcmV0dXJuICFWQVJBVFRf SVNfRVhURU5ERUQodmFsKSAmJg0KKwkJVkFSU0laRSh2YWwpIC0gVkFSSERSU1ogKyBWQVJIRFJT Wl9TSE9SVCA+IFZBUkFUVF9TSE9SVF9NQVg7DQorfQ0KKw0KKy8qDQorICogRW5kIG9mIGEgbGVh ZiB0dXBsZSdzIGtleTogdGhlIHBvc3RpbmctbGlzdCBvZmZzZXQgZm9yIGEgcG9zdGluZyB0dXBs ZSwgdGhlDQorICogd2hvbGUgdHVwbGUgc2l6ZSBvdGhlcndpc2UuICBUaGUgYnl0ZXMgYWZ0ZXIg dGhlIGtleSAoYSBwb3N0aW5nIGxpc3QpIGFyZQ0KKyAqIG1vdmVkIGFzIHRoZXkgYXJlLg0KKyAq Lw0KK3N0YXRpYyBTaXplDQorX2J0X3ByZWZpeF9rZXllbmQoSW5kZXhUdXBsZSBpdHVwKQ0KK3sN CisJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpDQorCQlyZXR1cm4gQlRyZWVUdXBsZUdl dFBvc3RpbmdPZmZzZXQoaXR1cCk7DQorCXJldHVybiBJbmRleFR1cGxlU2l6ZShpdHVwKTsNCit9 DQorDQorLyoNCisgKiBUaGUgc2l6ZSBvZiBhIGNvZGVkIGZpcnN0IGNvbHVtbiB3aG9zZSBwYXls b2FkIGlzIGBwYXlsb2FkJyBieXRlczogYQ0KKyAqIHZhcmxlbmEgd2l0aCBhIDEtYnl0ZSBoZWFk ZXIgd2hlbiBpdCBmaXRzIG9uZS4NCisgKi8NCitzdGF0aWMgaW5saW5lIFNpemUNCitfYnRfcHJl Zml4X3ZzaXplKFNpemUgcGF5bG9hZCkNCit7DQorCWlmIChwYXlsb2FkICsgVkFSSERSU1pfU0hP UlQgPD0gVkFSQVRUX1NIT1JUX01BWCkNCisJCXJldHVybiBwYXlsb2FkICsgVkFSSERSU1pfU0hP UlQ7DQorCXJldHVybiBwYXlsb2FkICsgVkFSSERSU1o7DQorfQ0KKw0KKy8qDQorICogT2Zmc2V0 IGF0IHdoaWNoIHRoZSBieXRlcyBhZnRlciB0aGUgZmlyc3QgY29sdW1uIGdvIGluIGEgY29kZWQg dHVwbGUgd2hvc2UNCisgKiBjb2RlZCBjb2x1bW4gZW5kcyBhdCBgdmVuZCcsIHdoZW4gaW4gdGhl IHBsYWluIHR1cGxlIHRoZXkgc3RhcnQgYXQNCisgKiBgcmVzdG9yaWcnOiB0aGUgZmlyc3Qgb2Zm c2V0IGF0IG9yIGFmdGVyIGB2ZW5kJyB0aGF0IGlzIHRoZSBzYW1lIGRpc3RhbmNlDQorICogcGFz dCBhIE1BWEFMSUdOIGJvdW5kYXJ5Lg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgU2l6ZQ0KK19idF9w cmVmaXhfcmVzdG9mZihTaXplIHZlbmQsIFNpemUgcmVzdG9yaWcpDQorew0KKwlyZXR1cm4gdmVu ZCArIChNQVhJTVVNX0FMSUdOT0YgKyByZXN0b3JpZyAlIE1BWElNVU1fQUxJR05PRiAtDQorCQkJ CSAgIHZlbmQgJSBNQVhJTVVNX0FMSUdOT0YpICUgTUFYSU1VTV9BTElHTk9GOw0KK30NCisNCisv KiBQbGFuIHRoZSBjb2Rpbmcgb2YgdGhlIGNvZGFibGUgdHVwbGUgYGl0dXAnIGFnYWluc3QgYHBy ZWZpeCcuICovDQorc3RhdGljIHZvaWQNCitfYnRfcHJlZml4X3BsYW4oY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIHByZWZpeGxlbiwgSW5kZXhUdXBsZSBpdHVwLA0KKwkJCQlCVFByZWZpeFBsYW4g KnBsYW4pDQorew0KKwljb25zdCBjaGFyICp2YWw7DQorCVNpemUJCXJlc3RvcmlnOw0KKwlib29s CQlzdG9yZXJlc3Q7DQorDQorCXBsYW4tPmhvZmYgPSBJbmRleEluZm9GaW5kRGF0YU9mZnNldChp dHVwLT50X2luZm8pOw0KKwl2YWwgPSAoY29uc3QgY2hhciAqKSBpdHVwICsgcGxhbi0+aG9mZjsN CisJcGxhbi0+YzEgPSBWQVJTSVpFX0FOWSh2YWwpOw0KKwlwbGFuLT5rZXllbmQgPSBfYnRfcHJl Zml4X2tleWVuZChpdHVwKTsNCisNCisJaWYgKF9idF9wcmVmaXhfY2Fub25pY2FsKHZhbCkpDQor CXsNCisJCWNvbnN0IGNoYXIgKmRhdGEgPSBWQVJEQVRBX0FOWSh2YWwpOw0KKwkJU2l6ZQkJZGF0 YWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKHZhbCk7DQorCQlTaXplCQlsaW1pdCA9IE1pbihwcmVm aXhsZW4sIGRhdGFsZW4pOw0KKwkJU2l6ZQkJc2hhcmVkID0gMDsNCisNCisJCXdoaWxlIChzaGFy ZWQgPCBsaW1pdCAmJiBwcmVmaXhbc2hhcmVkXSA9PSBkYXRhW3NoYXJlZF0pDQorCQkJc2hhcmVk Kys7DQorCQlwbGFuLT5jb2RlID0gKHVpbnQ4KSBzaGFyZWQ7DQorCQlwbGFuLT5zdWZmaXggPSBk YXRhICsgc2hhcmVkOw0KKwkJcGxhbi0+c3VmZml4bGVuID0gZGF0YWxlbiAtIHNoYXJlZDsNCisJ fQ0KKwllbHNlDQorCXsNCisJCXBsYW4tPmNvZGUgPSBCVFJFRV9QUkVGSVhfUkFXOw0KKwkJcGxh bi0+c3VmZml4ID0gdmFsOw0KKwkJcGxhbi0+c3VmZml4bGVuID0gcGxhbi0+YzE7DQorCX0NCisJ cGxhbi0+dnNpemUgPSBfYnRfcHJlZml4X3ZzaXplKDEgKyBwbGFuLT5zdWZmaXhsZW4pOw0KKw0K KwkvKg0KKwkgKiBUaGUgYnl0ZXMgYWZ0ZXIgdGhlIGZpcnN0IGNvbHVtbiBjYW4gYmUgbGVmdCBv dXQgd2hlbiB0aGV5IGFyZSBqdXN0IHRoZQ0KKwkgKiB6ZXJvIHBhZGRpbmcgdGhhdCBlbmRzIHRo ZSBrZXkuDQorCSAqLw0KKwlyZXN0b3JpZyA9IHBsYW4tPmhvZmYgKyBwbGFuLT5jMTsNCisJc3Rv cmVyZXN0ID0gcGxhbi0+a2V5ZW5kICE9IE1BWEFMSUdOKHJlc3RvcmlnKTsNCisJZm9yIChTaXpl IGkgPSByZXN0b3JpZzsgIXN0b3JlcmVzdCAmJiBpIDwgcGxhbi0+a2V5ZW5kOyBpKyspDQorCQlz dG9yZXJlc3QgPSAoKGNvbnN0IGNoYXIgKikgaXR1cClbaV0gIT0gMDsNCisNCisJaWYgKHN0b3Jl cmVzdCkNCisJew0KKwkJcGxhbi0+Y29kZSB8PSBCVFJFRV9QUkVGSVhfUkVTVDsNCisJCXBsYW4t PmNvZGVka2V5ZW5kID0gX2J0X3ByZWZpeF9yZXN0b2ZmKHBsYW4tPmhvZmYgKyBwbGFuLT52c2l6 ZSwNCisJCQkJCQkJCQkJCSAgIHJlc3RvcmlnKSArDQorCQkJKHBsYW4tPmtleWVuZCAtIHJlc3Rv cmlnKTsNCisJfQ0KKwllbHNlDQorCQlwbGFuLT5jb2RlZGtleWVuZCA9IE1BWEFMSUdOKHBsYW4t PmhvZmYgKyBwbGFuLT52c2l6ZSk7DQorCXBsYW4tPnRvdGFsID0gcGxhbi0+Y29kZWRrZXllbmQg KyAoSW5kZXhUdXBsZVNpemUoaXR1cCkgLSBwbGFuLT5rZXllbmQpOw0KK30NCisNCisvKg0KKyAq IENvcHkgbiBieXRlcywgYXMgbWVtY3B5LiAgRGVjb2RpbmcgbW92ZXMgYSBmZXcgc2hvcnQgcnVu cyBvZiBieXRlcyBwZXINCisgKiB0dXBsZTsgZWlnaHQgYnl0ZXMgYXQgYSB0aW1lIGlzIHNldmVy YWwgdGltZXMgZmFzdGVyIHRoYW4gYSBsaWJjIG1lbWNweQ0KKyAqIGZvciBydW5zIHRoaXMgc2hv cnQgKHRoZSBzdHJpbmctbW92ZSBzdGFydHVwIGNvc3QgZG9taW5hdGVzIG90aGVyd2lzZSkuDQor ICovDQorc3RhdGljIGlubGluZSB2b2lkDQorX2J0X3ByZWZpeF9jb3B5KGNoYXIgKmRzdCwgY29u c3QgY2hhciAqc3JjLCBTaXplIG4pDQorew0KKwl3aGlsZSAobiA+PSBzaXplb2YodWludDY0KSkN CisJew0KKwkJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2YodWludDY0KSk7DQorCQlkc3QgKz0gc2l6 ZW9mKHVpbnQ2NCk7DQorCQlzcmMgKz0gc2l6ZW9mKHVpbnQ2NCk7DQorCQluIC09IHNpemVvZih1 aW50NjQpOw0KKwl9DQorCXdoaWxlIChuLS0gPiAwKQ0KKwkJKmRzdCsrID0gKnNyYysrOw0KK30N CisNCisvKiBUaGUgcHJlZml4IG9mIGEgQlRQX1BSRUZJWCBwYWdlLCBhbmQgaXRzIGxlbmd0aCBp biAqbGVuLiAqLw0KK2NvbnN0IGNoYXIgKg0KK19idF9wYWdlX2dldF9wcmVmaXgoUGFnZSBwYWdl LCBTaXplICpsZW4pDQorew0KKwlCVFBhZ2VPcGFxdWUgb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVl KHBhZ2UpOw0KKwlJbmRleFR1cGxlCWl0ZW07DQorDQorCUFzc2VydChQX0hBU1BSRUZJWChvcGFx dWUpKTsNCisJaXRlbSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLA0KKwkJCQkJCQkJ CVBhZ2VHZXRJdGVtSWQocGFnZSwNCisJCQkJCQkJCQkJCQkgIEJUUGFnZUdldFByZWZpeE9mZihv cGFxdWUpKSk7DQorCSpsZW4gPSBJbmRleFR1cGxlU2l6ZShpdGVtKSAtIHNpemVvZihJbmRleFR1 cGxlRGF0YSk7DQorCXJldHVybiAoY29uc3QgY2hhciAqKSBpdGVtICsgc2l6ZW9mKEluZGV4VHVw bGVEYXRhKTsNCit9DQorDQorLyoNCisgKiBHaXZlIGBwYWdlJywgYSBsZWFmIGhvbGRpbmcgbm90 aGluZyB5ZXQgYnV0IGl0cyBoaWdoIGtleSAoaWYgaXQgaGFzIG9uZSksDQorICogdGhlIHByZWZp eCBgcHJlZml4JyBvZiBgbGVuJyBieXRlczogYWRkIHRoZSBQUkVGSVggaXRlbSBhbmQgc2V0IEJU UF9QUkVGSVguDQorICogSXRzIHBhZGRpbmcgY29tZXMgZnJvbSB0aGUgcGFnZSdzIGZyZWUgc3Bh Y2UsIHdoaWNoIF9idF9wYWdlaW5pdCB6ZXJvZWQsIHNvDQorICogYSBwYWdlIHJlYnVpbHQgaW4g cmVkbyBpcyB0aGUgc2FtZS4NCisgKi8NCit2b2lkDQorX2J0X3BhZ2Vfc2V0X3ByZWZpeChQYWdl IHBhZ2UsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBsZW4pDQorew0KKwlCVFBhZ2VPcGFxdWUg b3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KKwl1bmlvbg0KKwl7DQorCQlJbmRleFR1 cGxlRGF0YSBoZHI7DQorCQljaGFyCQlkYXRhW3NpemVvZihJbmRleFR1cGxlRGF0YSkgKyBCVFJF RV9QUkVGSVhfTUFYXTsNCisJfQkJCWl0ZW07DQorDQorCUFzc2VydChQX0lTTEVBRihvcGFxdWUp ICYmICFQX0hBU1BSRUZJWChvcGFxdWUpKTsNCisJQXNzZXJ0KGxlbiA+PSAxICYmIGxlbiA8PSBC VFJFRV9QUkVGSVhfTUFYKTsNCisJQXNzZXJ0KFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkg PT0gQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1ZSkgLSAxKTsNCisNCisJbWVtc2V0KCZpdGVtLmhk ciwgMCwgc2l6ZW9mKEluZGV4VHVwbGVEYXRhKSk7DQorCWl0ZW0uaGRyLnRfaW5mbyA9ICh1bnNp Z25lZCBzaG9ydCkgKHNpemVvZihJbmRleFR1cGxlRGF0YSkgKyBsZW4pOw0KKwltZW1jcHkoaXRl bS5kYXRhICsgc2l6ZW9mKEluZGV4VHVwbGVEYXRhKSwgcHJlZml4LCBsZW4pOw0KKwlpZiAoUGFn ZUFkZEl0ZW0ocGFnZSwgaXRlbS5kYXRhLCBzaXplb2YoSW5kZXhUdXBsZURhdGEpICsgbGVuLA0K KwkJCQkJQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1ZSksIGZhbHNlLCBmYWxzZSkgPT0NCisJCUlu dmFsaWRPZmZzZXROdW1iZXIpDQorCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBwcmVmaXgg aXRlbSB0byBidHJlZSBwYWdlIik7DQorCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfUFJFRklY Ow0KK30NCisNCisvKg0KKyAqIFRoZSBjb2RlZCBmb3JtIG9mIHRoZSBsZWFmIHR1cGxlIGBpdHVw JyBmb3IgYHBhZ2UnLCBwYWxsb2MnZDsgYGl0dXAnIGl0c2VsZg0KKyAqIHdoZW4gdGhlIHBhZ2Ug aGFzIG5vIHByZWZpeCBvciB0aGUgdHVwbGUgaXMgc3RvcmVkIHBsYWluLg0KKyAqLw0KK0luZGV4 VHVwbGUNCitfYnRfcHJlZml4X2VuY29kZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCkNCit7 DQorCWNvbnN0IGNoYXIgKnByZWZpeDsNCisJU2l6ZQkJcHJlZml4bGVuOw0KKwlCVFByZWZpeFBs YW4gcGxhbjsNCisJY2hhcgkgICAqY29kZWQ7DQorCWNoYXIJICAgKnY7DQorCWNoYXIJICAgKnBh eWxvYWQ7DQorDQorCWlmICghUF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSB8fA0K KwkJIV9idF9wcmVmaXhfY29kYWJsZShpdHVwKSkNCisJCXJldHVybiBpdHVwOw0KKw0KKwlwcmVm aXggPSBfYnRfcGFnZV9nZXRfcHJlZml4KHBhZ2UsICZwcmVmaXhsZW4pOw0KKwlfYnRfcHJlZml4 X3BsYW4ocHJlZml4LCBwcmVmaXhsZW4sIGl0dXAsICZwbGFuKTsNCisJQXNzZXJ0KHBsYW4udG90 YWwgPD0gSU5ERVhfU0laRV9NQVNLKTsNCisNCisJY29kZWQgPSBwYWxsb2MwKHBsYW4udG90YWwp Ow0KKwltZW1jcHkoY29kZWQsIGl0dXAsIHBsYW4uaG9mZik7DQorCXYgPSBjb2RlZCArIHBsYW4u aG9mZjsNCisJaWYgKHBsYW4udnNpemUgPD0gVkFSQVRUX1NIT1JUX01BWCkNCisJew0KKwkJU0VU X1ZBUlNJWkVfU0hPUlQodiwgcGxhbi52c2l6ZSk7DQorCQlwYXlsb2FkID0gdiArIFZBUkhEUlNa X1NIT1JUOw0KKwl9DQorCWVsc2UNCisJew0KKwkJU0VUX1ZBUlNJWkUodiwgcGxhbi52c2l6ZSk7 DQorCQlwYXlsb2FkID0gdiArIFZBUkhEUlNaOw0KKwl9DQorCXBheWxvYWRbMF0gPSAoY2hhcikg cGxhbi5jb2RlOw0KKwltZW1jcHkocGF5bG9hZCArIDEsIHBsYW4uc3VmZml4LCBwbGFuLnN1ZmZp eGxlbik7DQorCWlmIChwbGFuLmNvZGUgJiBCVFJFRV9QUkVGSVhfUkVTVCkNCisJew0KKwkJU2l6 ZQkJcmVzdG9yaWcgPSBwbGFuLmhvZmYgKyBwbGFuLmMxOw0KKw0KKwkJbWVtY3B5KGNvZGVkICsg X2J0X3ByZWZpeF9yZXN0b2ZmKHBsYW4uaG9mZiArIHBsYW4udnNpemUsIHJlc3RvcmlnKSwNCisJ CQkgICAoY2hhciAqKSBpdHVwICsgcmVzdG9yaWcsIHBsYW4ua2V5ZW5kIC0gcmVzdG9yaWcpOw0K Kwl9DQorCW1lbWNweShjb2RlZCArIHBsYW4uY29kZWRrZXllbmQsIChjaGFyICopIGl0dXAgKyBw bGFuLmtleWVuZCwNCisJCSAgIEluZGV4VHVwbGVTaXplKGl0dXApIC0gcGxhbi5rZXllbmQpOw0K Kw0KKwkoKEluZGV4VHVwbGUpIGNvZGVkKS0+dF9pbmZvID0NCisJCShpdHVwLT50X2luZm8gJiB+ SU5ERVhfU0laRV9NQVNLKSB8ICh1bnNpZ25lZCBzaG9ydCkgcGxhbi50b3RhbDsNCisJaWYgKEJU cmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpDQorCQlCVHJlZVR1cGxlU2V0UG9zdGluZygoSW5kZXhU dXBsZSkgY29kZWQsIEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKSwNCisJCQkJCQkJIHBsYW4u Y29kZWRrZXllbmQpOw0KKw0KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HDQorCXsNCisJCUJU SXRlbUJ1ZgljaGVjazsNCisJCUluZGV4VHVwbGUJZGVjb2RlZCA9IF9idF9wcmVmaXhfZGVjb2Rl KHBhZ2UsIChJbmRleFR1cGxlKSBjb2RlZCwNCisJCQkJCQkJCQkJCQkmY2hlY2spOw0KKw0KKwkJ QXNzZXJ0KEluZGV4VHVwbGVTaXplKGRlY29kZWQpID09IEluZGV4VHVwbGVTaXplKGl0dXApICYm DQorCQkJICAgbWVtY21wKGRlY29kZWQsIGl0dXAsIEluZGV4VHVwbGVTaXplKGl0dXApKSA9PSAw KTsNCisJfQ0KKyNlbmRpZg0KKw0KKwlyZXR1cm4gKEluZGV4VHVwbGUpIGNvZGVkOw0KK30NCisN CisvKiBUaGUgTUFYQUxJR05lZCBzaXplIGBpdHVwJyB0YWtlcyBvbiBgcGFnZScsIGNvZGVkIGlm IHRoZSBwYWdlIGNvZGVzIGl0LiAqLw0KK1NpemUNCitfYnRfcHJlZml4X2NvZGVkX3NpemUoUGFn ZSBwYWdlLCBJbmRleFR1cGxlIGl0dXApDQorew0KKwljb25zdCBjaGFyICpwcmVmaXg7DQorCVNp emUJCXByZWZpeGxlbjsNCisJQlRQcmVmaXhQbGFuIHBsYW47DQorDQorCWlmICghUF9IQVNQUkVG SVgoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSB8fA0KKwkJIV9idF9wcmVmaXhfY29kYWJsZShpdHVw KSkNCisJCXJldHVybiBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShpdHVwKSk7DQorDQorCXByZWZp eCA9IF9idF9wYWdlX2dldF9wcmVmaXgocGFnZSwgJnByZWZpeGxlbik7DQorCV9idF9wcmVmaXhf cGxhbihwcmVmaXgsIHByZWZpeGxlbiwgaXR1cCwgJnBsYW4pOw0KKwlyZXR1cm4gTUFYQUxJR04o cGxhbi50b3RhbCk7DQorfQ0KKw0KKy8qDQorICogRGVjb2RlIHRoZSBpdGVtIGBpdHVwJyBvZiB0 aGUgQlRQX1BSRUZJWCBwYWdlIGBwYWdlJyBpbnRvIGBidWYnLCBhbmQgcmV0dXJuDQorICogaXQ7 IGFuIGl0ZW0gc3RvcmVkIHBsYWluIGlzIHJldHVybmVkIGFzIGl0IGlzLiAgVGhlIGludmVyc2Ug b2YNCisgKiBfYnRfcHJlZml4X2VuY29kZSwgYnl0ZSBmb3IgYnl0ZS4gIEFuIGl0ZW0gdGhhdCBk b2VzIG5vdCBkZWNvZGUgd2l0aGluIGl0cw0KKyAqIG93biBib3VuZHMsIG9yIGNsYWltcyBtb3Jl IG9mIHRoZSBwcmVmaXggdGhhbiB0aGUgcGFnZSBoYXMsIGlzIHJlcG9ydGVkIGFzDQorICogY29y cnVwdGlvbi4NCisgKi8NCitJbmRleFR1cGxlDQorX2J0X3ByZWZpeF9kZWNvZGUoUGFnZSBwYWdl LCBJbmRleFR1cGxlIGl0dXAsIEJUSXRlbUJ1ZiAqYnVmKQ0KK3sNCisJY29uc3QgY2hhciAqcHJl Zml4Ow0KKwlTaXplCQlwcmVmaXhsZW47DQorCVNpemUJCXNpemUgPSBJbmRleFR1cGxlU2l6ZShp dHVwKTsNCisJU2l6ZQkJaG9mZjsNCisJU2l6ZQkJY29kZWRrZXllbmQ7DQorCWNvbnN0IGNoYXIg KnY7DQorCVNpemUJCXZzaXplID0gMDsNCisJY29uc3QgY2hhciAqcGF5bG9hZDsNCisJU2l6ZQkJ cGF5bGVuID0gMDsNCisJdWludDgJCWNvZGU7DQorCVNpemUJCXNoYXJlZDsNCisJY2hhcgkgICAq b3V0ID0gYnVmLT5kYXRhOw0KKwljaGFyCSAgICp2YWwgPSBOVUxMOw0KKwlTaXplCQljMTsNCisJ U2l6ZQkJcmVzdG9yaWc7DQorCVNpemUJCWtleWVuZDsNCisNCisJaWYgKCFfYnRfcHJlZml4X2Nv ZGFibGUoaXR1cCkpDQorCQlyZXR1cm4gaXR1cDsNCisNCisJcHJlZml4ID0gX2J0X3BhZ2VfZ2V0 X3ByZWZpeChwYWdlLCAmcHJlZml4bGVuKTsNCisJaG9mZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zm c2V0KGl0dXAtPnRfaW5mbyk7DQorCWNvZGVka2V5ZW5kID0gX2J0X3ByZWZpeF9rZXllbmQoaXR1 cCk7DQorCXYgPSAoY29uc3QgY2hhciAqKSBpdHVwICsgaG9mZjsNCisJaWYgKGhvZmYgPj0gY29k ZWRrZXllbmQgfHwgY29kZWRrZXllbmQgPiBzaXplIHx8DQorCQkodnNpemUgPSBWQVJTSVpFX0FO WSh2KSkgPiBjb2RlZGtleWVuZCAtIGhvZmYgfHwNCisJCShwYXlsZW4gPSBWQVJTSVpFX0FOWV9F WEhEUih2KSkgPCAxKQ0KKwkJZ290byBjb3JydXB0Ow0KKwlwYXlsb2FkID0gVkFSREFUQV9BTlko dik7DQorCWNvZGUgPSAodWludDgpIHBheWxvYWRbMF07DQorCXNoYXJlZCA9IGNvZGUgJiBCVFJF RV9QUkVGSVhfU0hBUkVEX01BU0s7DQorDQorCV9idF9wcmVmaXhfY29weShvdXQsIChjb25zdCBj aGFyICopIGl0dXAsIGhvZmYpOw0KKwl2YWwgPSBvdXQgKyBob2ZmOw0KKwlpZiAoc2hhcmVkID09 IEJUUkVFX1BSRUZJWF9SQVcpDQorCXsNCisJCWMxID0gcGF5bGVuIC0gMTsNCisJCV9idF9wcmVm aXhfY29weSh2YWwsIHBheWxvYWQgKyAxLCBjMSk7DQorCQlpZiAoYzEgPCBWQVJIRFJTWl9TSE9S VCB8fCBWQVJTSVpFX0FOWSh2YWwpICE9IGMxKQ0KKwkJCWdvdG8gY29ycnVwdDsNCisJfQ0KKwll bHNlDQorCXsNCisJCVNpemUJCWRhdGFsZW4gPSBzaGFyZWQgKyBwYXlsZW4gLSAxOw0KKwkJY2hh cgkgICAqZGF0YTsNCisNCisJCWlmIChob2ZmICsgVkFSSERSU1ogKyBkYXRhbGVuID4gc2l6ZW9m KEJUSXRlbUJ1ZikpDQorCQkJZ290byBjb3JydXB0Ow0KKwkJaWYgKHNoYXJlZCA+IHByZWZpeGxl bikNCisJCQllcmVwb3J0KEVSUk9SLA0KKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JS VVBURUQpLA0KKwkJCQkJIGVycm1zZ19pbnRlcm5hbCgiYnRyZWUgbGVhZiB0dXBsZSBzaGFyZXMg JXp1IGJ5dGVzIG9mIGEgJXp1LWJ5dGUgcGFnZSBwcmVmaXgiLA0KKwkJCQkJCQkJCSBzaGFyZWQs IHByZWZpeGxlbikpKTsNCisJCWlmIChkYXRhbGVuICsgVkFSSERSU1pfU0hPUlQgPD0gVkFSQVRU X1NIT1JUX01BWCkNCisJCXsNCisJCQljMSA9IGRhdGFsZW4gKyBWQVJIRFJTWl9TSE9SVDsNCisJ CQlTRVRfVkFSU0laRV9TSE9SVCh2YWwsIGMxKTsNCisJCQlkYXRhID0gdmFsICsgVkFSSERSU1pf U0hPUlQ7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJYzEgPSBkYXRhbGVuICsgVkFSSERSU1o7 DQorCQkJU0VUX1ZBUlNJWkUodmFsLCBjMSk7DQorCQkJZGF0YSA9IHZhbCArIFZBUkhEUlNaOw0K KwkJfQ0KKwkJX2J0X3ByZWZpeF9jb3B5KGRhdGEsIHByZWZpeCwgc2hhcmVkKTsNCisJCV9idF9w cmVmaXhfY29weShkYXRhICsgc2hhcmVkLCBwYXlsb2FkICsgMSwgcGF5bGVuIC0gMSk7DQorCX0N CisNCisJcmVzdG9yaWcgPSBob2ZmICsgYzE7DQorCWlmIChjb2RlICYgQlRSRUVfUFJFRklYX1JF U1QpDQorCXsNCisJCVNpemUJCXJlc3RvZmYgPSBfYnRfcHJlZml4X3Jlc3RvZmYoaG9mZiArIHZz aXplLCByZXN0b3JpZyk7DQorDQorCQlpZiAocmVzdG9mZiA+IGNvZGVka2V5ZW5kKQ0KKwkJCWdv dG8gY29ycnVwdDsNCisJCWtleWVuZCA9IHJlc3RvcmlnICsgKGNvZGVka2V5ZW5kIC0gcmVzdG9m Zik7DQorCQlpZiAoa2V5ZW5kICsgKHNpemUgLSBjb2RlZGtleWVuZCkgPiBzaXplb2YoQlRJdGVt QnVmKSkNCisJCQlnb3RvIGNvcnJ1cHQ7DQorCQlfYnRfcHJlZml4X2NvcHkob3V0ICsgcmVzdG9y aWcsIChjb25zdCBjaGFyICopIGl0dXAgKyByZXN0b2ZmLA0KKwkJCQkJCWNvZGVka2V5ZW5kIC0g cmVzdG9mZik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlrZXllbmQgPSBNQVhBTElHTihyZXN0b3Jp Zyk7DQorCQlpZiAoa2V5ZW5kICsgKHNpemUgLSBjb2RlZGtleWVuZCkgPiBzaXplb2YoQlRJdGVt QnVmKSkNCisJCQlnb3RvIGNvcnJ1cHQ7DQorCQltZW1zZXQob3V0ICsgcmVzdG9yaWcsIDAsIGtl eWVuZCAtIHJlc3RvcmlnKTsNCisJfQ0KKwlfYnRfcHJlZml4X2NvcHkob3V0ICsga2V5ZW5kLCAo Y29uc3QgY2hhciAqKSBpdHVwICsgY29kZWRrZXllbmQsDQorCQkJCQlzaXplIC0gY29kZWRrZXll bmQpOw0KKw0KKwkoKEluZGV4VHVwbGUpIG91dCktPnRfaW5mbyA9IChpdHVwLT50X2luZm8gJiB+ SU5ERVhfU0laRV9NQVNLKSB8DQorCQkodW5zaWduZWQgc2hvcnQpIChrZXllbmQgKyAoc2l6ZSAt IGNvZGVka2V5ZW5kKSk7DQorCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQ0KKwkJQlRy ZWVUdXBsZVNldFBvc3RpbmcoKEluZGV4VHVwbGUpIG91dCwgQlRyZWVUdXBsZUdldE5Qb3N0aW5n KGl0dXApLA0KKwkJCQkJCQkga2V5ZW5kKTsNCisJcmV0dXJuIChJbmRleFR1cGxlKSBvdXQ7DQor DQorY29ycnVwdDoNCisJZXJlcG9ydChFUlJPUiwNCisJCQkoZXJyY29kZShFUlJDT0RFX0lOREVY X0NPUlJVUFRFRCksDQorCQkJIGVycm1zZ19pbnRlcm5hbCgiYnRyZWUgbGVhZiB0dXBsZSBpcyBu b3QgYSB2YWxpZCBwcmVmaXgtY29kZWQgdHVwbGUiKSkpOw0KKwlyZXR1cm4gTlVMTDsJCQkJLyog a2VlcCBjb21waWxlciBxdWlldCAqLw0KK30NCisNCisvKg0KKyAqIFRoZSBieXRlcyBvZiBgaXR1 cCcncyBmaXJzdCBjb2x1bW4gYSBwYWdlIHByZWZpeCBtYXkgYmUgdGFrZW4gZnJvbSwgYW5kIGhv dw0KKyAqIG1hbnkgKGF0IG1vc3QgQlRSRUVfUFJFRklYX01BWCkgaW4gKmxlbjsgTlVMTCB3aGVu IHRoZSB0dXBsZSBoYXMgbm9uZTogaXQNCisgKiBpcyBub3QgY29kYWJsZSwgaXRzIHZhbHVlIGlz IGVtcHR5LCBvciBpdCB3b3VsZCBiZSBzdG9yZWQgcmF3Lg0KKyAqLw0KK2NvbnN0IGNoYXIgKg0K K19idF9wcmVmaXhfY2FuZGlkYXRlKEluZGV4VHVwbGUgaXR1cCwgU2l6ZSAqbGVuKQ0KK3sNCisJ Y29uc3QgY2hhciAqdmFsOw0KKw0KKwlpZiAoIV9idF9wcmVmaXhfY29kYWJsZShpdHVwKSkNCisJ CXJldHVybiBOVUxMOw0KKwl2YWwgPSAoY29uc3QgY2hhciAqKSBpdHVwICsgSW5kZXhJbmZvRmlu ZERhdGFPZmZzZXQoaXR1cC0+dF9pbmZvKTsNCisJaWYgKCFfYnRfcHJlZml4X2Nhbm9uaWNhbCh2 YWwpIHx8IFZBUlNJWkVfQU5ZX0VYSERSKHZhbCkgPT0gMCkNCisJCXJldHVybiBOVUxMOw0KKwkq bGVuID0gTWluKFZBUlNJWkVfQU5ZX0VYSERSKHZhbCksIEJUUkVFX1BSRUZJWF9NQVgpOw0KKwly ZXR1cm4gVkFSREFUQV9BTlkodmFsKTsNCit9DQorDQorLyoNCisgKiBIb3cgbWFueSBieXRlcyBv ZiBgcHJlZml4JyB0aGUgZmlyc3QgY29sdW1uIG9mIGBpdHVwJyB3b3VsZCBzaGFyZSBvbiBhIHBh Z2UNCisgKiB3aXRoIHRoYXQgcHJlZml4OiAtMSB3aGVuIHRoZSB0dXBsZSB3b3VsZCBub3QgYmUg Y29kZWQsIDAgd2hlbiBpdCB3b3VsZCBiZQ0KKyAqIHN0b3JlZCByYXcuDQorICovDQoraW50DQor X2J0X3ByZWZpeF9zaGFyZWQoY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHByZWZpeGxlbiwgSW5k ZXhUdXBsZSBpdHVwKQ0KK3sNCisJQlRQcmVmaXhQbGFuIHBsYW47DQorDQorCWlmICghX2J0X3By ZWZpeF9jb2RhYmxlKGl0dXApKQ0KKwkJcmV0dXJuIC0xOw0KKwlfYnRfcHJlZml4X3BsYW4ocHJl Zml4LCBwcmVmaXhsZW4sIGl0dXAsICZwbGFuKTsNCisJaWYgKChwbGFuLmNvZGUgJiBCVFJFRV9Q UkVGSVhfU0hBUkVEX01BU0spID09IEJUUkVFX1BSRUZJWF9SQVcpDQorCQlyZXR1cm4gMDsNCisJ cmV0dXJuIHBsYW4uY29kZSAmIEJUUkVFX1BSRUZJWF9TSEFSRURfTUFTSzsNCit9DQorDQorLyoN CisgKiBNYXkgdGhlIGxlYXZlcyBvZiBgaW5kZXgnIGhhdmUgYSBwcmVmaXg/ICBPbmx5IHdoZW4g dGhlIHByZWZpeF9jb21wcmVzc2lvbg0KKyAqIHJlbG9wdGlvbiBpcyBvbiBhbmQgdGhlIGZpcnN0 IGtleSBjb2x1bW4gaXMgb2YgYSB2YXJsZW5hIHR5cGUuDQorICovDQorYm9vbA0KK19idF9wcmVm aXhfZW5hYmxlZChSZWxhdGlvbiBpbmRleCkNCit7DQorCXJldHVybiBCVEdldFByZWZpeENvbXBy ZXNzaW9uKGluZGV4KSAmJg0KKwkJVHVwbGVEZXNjQXR0cihSZWxhdGlvbkdldERlc2NyKGluZGV4 KSwgMCktPmF0dGxlbiA9PSAtMTsNCit9DQorDQorLyoNCisgKiBDaG9vc2UgdGhlIHByZWZpeCBm b3IgYSBsZWFmIGFib3V0IHRvIGJlIGJ1aWx0IGZyb20gdGhlIGBuJyB0dXBsZXMgYGl0ZW1zJywN CisgKiBpbiBrZXkgb3JkZXI6IHRoZSBmaXJzdCB0dXBsZSdzIGZpcnN0LWNvbHVtbiBieXRlcywg Y3V0IHRvIHRoZSBsb25nZXN0IHJ1bg0KKyAqIGFueSBsYXRlciB0dXBsZSBzaGFyZXMsIHByb3Zp ZGVkIHRoZSB0dXBsZXMgc2hhcmUgYXQgbGVhc3QNCisgKiBCVFJFRV9QUkVGSVhfTUlOX1NIQVJF RCBieXRlcyBvZiBpdCBvbiBhdmVyYWdlLiAgUmV0dXJucyB0aGUgcHJlZml4J3MNCisgKiBsZW5n dGgsIHdpdGggKnByZWZpeCBwb2ludGluZyBpbnRvIGl0ZW1zWzBdLCBvciAwIGZvciBubyBwcmVm aXguDQorICovDQorU2l6ZQ0KK19idF9wcmVmaXhfY2hvb3NlKFJlbGF0aW9uIGluZGV4LCBJbmRl eFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJCSAgY29uc3QgY2hhciAqKnByZWZpeCkNCit7DQor CWNvbnN0IGNoYXIgKmNhbmQ7DQorCVNpemUJCWNhbmRsZW47DQorCVNpemUJCWxvbmdlc3QgPSAw Ow0KKwlTaXplCQl0b3RhbCA9IDA7DQorCWludAkJCW5jb2RlZCA9IDA7DQorDQorCWlmICghX2J0 X3ByZWZpeF9lbmFibGVkKGluZGV4KSB8fA0KKwkJKGNhbmQgPSBfYnRfcHJlZml4X2NhbmRpZGF0 ZShpdGVtc1swXSwgJmNhbmRsZW4pKSA9PSBOVUxMKQ0KKwkJcmV0dXJuIDA7DQorCWlmIChuID09 IDEpDQorCXsNCisJCSpwcmVmaXggPSBjYW5kOw0KKwkJcmV0dXJuIGNhbmRsZW47DQorCX0NCisJ Zm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspDQorCXsNCisJCWludAkJCXNoYXJlZCA9IF9idF9w cmVmaXhfc2hhcmVkKGNhbmQsIGNhbmRsZW4sIGl0ZW1zW2ldKTsNCisNCisJCWlmIChzaGFyZWQg PCAwKQ0KKwkJCWNvbnRpbnVlOw0KKwkJdG90YWwgKz0gc2hhcmVkOw0KKwkJbmNvZGVkKys7DQor CQlsb25nZXN0ID0gTWF4KGxvbmdlc3QsIChTaXplKSBzaGFyZWQpOw0KKwl9DQorCWlmIChsb25n ZXN0ID09IDAgfHwgdG90YWwgPCAoU2l6ZSkgQlRSRUVfUFJFRklYX01JTl9TSEFSRUQgKiBuY29k ZWQpDQorCQlyZXR1cm4gMDsNCisJKnByZWZpeCA9IGNhbmQ7DQorCXJldHVybiBsb25nZXN0Ow0K K30NCisNCisvKg0KKyAqIEZhdWx0IGEgZnJlc2hseSBmaW5pc2hlZCBsZWFmIGBwYWdlJyBmb3J3 YXJkIGludG8gdGhlIEJUUF9QUkVGSVggZm9ybWF0IGlmDQorICogYSBwcmVmaXggcGF5cyBvZmYg KFN0cmF0ZWd5IDE6IGNvbXByZXNzIGEgcGFnZSBvbmx5IHdoZW4gaXQgaXMgd3JpdHRlbiBhcyBh DQorICogd2hvbGUgLS0gQ1JFQVRFIElOREVYIHBhZ2UgZmluaXNoLCBhIHNwbGl0IGhhbGYsIGEg ZGVkdXAgcmV3cml0ZSAtLSBzbyB0aGF0DQorICogbm8gaW5zZXJ0LCBWQUNVVU0gb3Iga2V5LXJh bmdlIGNoYW5nZSBldmVyIGZvcmNlcyBhIHBhZ2UgcmV3cml0ZSwgYW5kIGFuDQorICogb2xkLWZv cm1hdCBwYWdlIGlzIGNvbnZlcnRlZCBvbmx5IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xl KS4NCisgKg0KKyAqIE9uIGVudHJ5IGBwYWdlJyBpcyBhIGNvbXBsZXRlIGxlYWY6IGl0cyBoaWdo IGtleSBhdCBQX0hJS0VZIGlmIGl0IGlzIG5vdA0KKyAqIHJpZ2h0bW9zdCwgdGhlbiBpdHMgZGF0 YSBpdGVtcywgbm9uZSBvZiB0aGVtIGNvZGVkICh0aGUgcGFnZSBkb2VzIG5vdCB5ZXQNCisgKiBo YXZlIEJUUF9QUkVGSVgpLiAgSWYgdGhlIGRhdGEgaXRlbXMgc2hhcmUgZW5vdWdoIG9mIGEgY29t bW9uIGZpcnN0LWNvbHVtbg0KKyAqIHByZWZpeCwgdGhlIHBhZ2UgaXMgcmVidWlsdCBpbiBwbGFj ZSB3aXRoIHRoZSBQUkVGSVggaXRlbSBpbnNlcnRlZCBhZnRlcg0KKyAqIHRoZSBoaWdoIGtleSBh bmQgZXZlcnkgZGF0YSBpdGVtIGNvZGVkIGFnYWluc3QgaXQ7IG90aGVyd2lzZSB0aGUgcGFnZSBp cw0KKyAqIGxlZnQgdW5jaGFuZ2VkLiAgSXRlbSBvcmRlciBhbmQgdGhlIGhpZ2gga2V5IGFyZSBw cmVzZXJ2ZWQuDQorICoNCisgKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwYWdlJ3MgYnVmZmVyIGV4 Y2x1c2l2ZWx5IChvciBvd24gdGhlIHBhZ2Ugb3V0cmlnaHQsDQorICogYXMgdGhlIGJ1aWxkIGFu ZCBzcGxpdCBwYXRocyBkbyB3aXRoIGEgdGVtcCBwYWdlKS4gIE5vIFdBTCBpcyB3cml0dGVuIGhl cmU6DQorICogY2FsbGVycyBsb2cgdGhlIHJlc3VsdGluZyBwYWdlIChhIGJ1aWxkIHdyaXRlcyBp dCB3aG9sZTsgYSBzcGxpdCBsb2dzIGVhY2gNCisgKiBoYWxmIHdob2xlIG9yIGJ5IGZ1bGwtcGFn ZSBpbWFnZSksIGFuZCByZWRvIHJlYWNoZXMgdGhlIHNhbWUgYnl0ZXMgYnkNCisgKiBydW5uaW5n IF9idF9wcmVmaXhfZW5jb2RlIGFnYWluc3QgdGhlIHNhbWUgcHJlZml4Lg0KKyAqLw0KK3ZvaWQN CitfYnRfcHJlZml4X2NvbXByZXNzX3BhZ2UoUmVsYXRpb24gaW5kZXgsIFBhZ2UgcGFnZSkNCit7 DQorCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorCU9mZnNl dE51bWJlciBtaW5vZmY7DQorCU9mZnNldE51bWJlciBtYXhvZmY7DQorCWludAkJCW47DQorCUlu ZGV4VHVwbGUgKml0ZW1zOw0KKwlTaXplCQlwcmVmaXhsZW47DQorCWNvbnN0IGNoYXIgKnByZWZp eDsNCisJUGFnZQkJdG1wOw0KKwlPZmZzZXROdW1iZXIgbzsNCisJSW5kZXhUdXBsZQloaWtleSA9 IE5VTEw7DQorCVNpemUJCWhpa2V5c3ogPSAwOw0KKw0KKwlBc3NlcnQoUF9JU0xFQUYob3BhcXVl KSAmJiAhUF9IQVNQUkVGSVgob3BhcXVlKSk7DQorDQorCWlmICghX2J0X3ByZWZpeF9lbmFibGVk KGluZGV4KSkNCisJCXJldHVybjsNCisNCisJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVl KTsNCisJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsNCisJbiA9IChpbnQp IG1heG9mZiAtIChpbnQpIG1pbm9mZiArIDE7DQorCWlmIChuIDw9IDApDQorCQlyZXR1cm47DQor DQorCWl0ZW1zID0gKEluZGV4VHVwbGUgKikgcGFsbG9jKG4gKiBzaXplb2YoSW5kZXhUdXBsZSkp Ow0KKwlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykNCisJCWl0ZW1zW2ldID0gKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKHBhZ2UsDQorCQkJCQkJCQkJCQlQYWdlR2V0SXRlbUlkKHBhZ2UsIG1p bm9mZiArIGkpKTsNCisNCisJcHJlZml4bGVuID0gX2J0X3ByZWZpeF9jaG9vc2UoaW5kZXgsIGl0 ZW1zLCBuLCAmcHJlZml4KTsNCisJaWYgKHByZWZpeGxlbiA9PSAwKQ0KKwl7DQorCQlwZnJlZShp dGVtcyk7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyogVGhlIGhpZ2gga2V5IChpZiBhbnkpIHN0 YXlzIGF0IFBfSElLRVksIHVuY29kZWQuICovDQorCWlmICghUF9SSUdIVE1PU1Qob3BhcXVlKSkN CisJew0KKwkJSXRlbUlkCQloaWkgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIFBfSElLRVkpOw0KKw0K KwkJaGlrZXlzeiA9IEl0ZW1JZEdldExlbmd0aChoaWkpOw0KKwkJaGlrZXkgPSAoSW5kZXhUdXBs ZSkgUGFnZUdldEl0ZW0ocGFnZSwgaGlpKTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBSZWJ1aWxkIGlu dG8gYSB0ZW1wIHBhZ2U6IGhpZ2gga2V5IChpZiBhbnkpLCBQUkVGSVggaXRlbSwgdGhlbiBlYWNo DQorCSAqIGRhdGEgaXRlbSBjb2RlZC4gIFRoZSBjb2RlZCBmb3JtIGNhbiBiZSB1cCB0byBNQVhB TElHTiBsYXJnZXIgdGhhbiB0aGUNCisJICogcGxhaW4gb25lLCBidXQgdGhlIFBSRUZJWCBpdGVt IHJlcGxhY2VzIGZhciBtb3JlIHNoYXJlZCBieXRlcyB0aGFuIGl0DQorCSAqIGFkZHMsIHNvIGEg cGFnZSB0aGF0IHdhcyBub3Qgb3ZlcmZ1bGwgc3RheXMgd2l0aGluIGJvdW5kczsgaWYgYSBjb2Rl ZA0KKwkgKiBpdGVtIHNvbWVob3cgZG9lcyBub3QgZml0LCBsZWF2ZSB0aGUgcGFnZSB1bmNvbXBy ZXNzZWQgKGFsd2F5cyB2YWxpZCkuDQorCSAqLw0KKwl0bXAgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5 U3BlY2lhbChwYWdlKTsNCisJQlRQYWdlR2V0T3BhcXVlKHRtcCktPmJ0cG9fZmxhZ3MgJj0gfkJU UF9QUkVGSVg7DQorCWlmIChoaWtleSAhPSBOVUxMICYmDQorCQlQYWdlQWRkSXRlbSh0bXAsIChj aGFyICopIGhpa2V5LCBoaWtleXN6LCBQX0hJS0VZLCBmYWxzZSwgZmFsc2UpID09DQorCQlJbnZh bGlkT2Zmc2V0TnVtYmVyKQ0KKwkJZ290byBnaXZldXA7DQorCV9idF9wYWdlX3NldF9wcmVmaXgo dG1wLCBwcmVmaXgsIHByZWZpeGxlbik7DQorCW8gPSBPZmZzZXROdW1iZXJOZXh0KFBhZ2VHZXRN YXhPZmZzZXROdW1iZXIodG1wKSk7DQorCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQ0KKwl7 DQorCQlJbmRleFR1cGxlCWNvZGVkID0gX2J0X3ByZWZpeF9lbmNvZGUodG1wLCBpdGVtc1tpXSk7 DQorCQlib29sCQlvazsNCisNCisJCW9rID0gUGFnZUFkZEl0ZW0odG1wLCAoY2hhciAqKSBjb2Rl ZCwgSW5kZXhUdXBsZVNpemUoY29kZWQpLCBvKyssDQorCQkJCQkJIGZhbHNlLCBmYWxzZSkgIT0g SW52YWxpZE9mZnNldE51bWJlcjsNCisJCWlmIChjb2RlZCAhPSBpdGVtc1tpXSkNCisJCQlwZnJl ZShjb2RlZCk7DQorCQlpZiAoIW9rKQ0KKwkJCWdvdG8gZ2l2ZXVwOw0KKwl9DQorDQorCW1lbWNw eShwYWdlLCB0bXAsIEJMQ0tTWik7DQorCXBmcmVlKHRtcCk7DQorCXBmcmVlKGl0ZW1zKTsNCisJ cmV0dXJuOw0KKw0KK2dpdmV1cDoNCisJcGZyZWUodG1wKTsNCisJcGZyZWUoaXRlbXMpOw0KK30N CisNCisvKg0KKyAqIExheSBvdXQgb25lIGhhbGYgb2YgYSBsZWFmIHNwbGl0IG9uIGBwYWdlJywg d2hpY2ggdGhlIGNhbGxlciBoYXMNCisgKiBpbml0aWFsaXplZCAoZmxhZ3MsIGxpbmtzKSBhbmQg bGVmdCBlbXB0eTogdGhlIGhpZ2gga2V5IGBoaWtleScgKE5VTEwgZm9yDQorICogYSByaWdodG1v c3QgaGFsZiksIHRoZW4gdGhlIGBuJyBwbGFpbiB0dXBsZXMgYGl0ZW1zJyBpbiBrZXkgb3JkZXIu DQorICoNCisgKiBUaGUgaGFsZiBpcyBmb3JtZWQgYXMgYSB3aG9sZSwgc28gaXQgbWF5IHRha2Ug YSBwcmVmaXggb2YgaXRzIG93bjogaXRzDQorICogZmlyc3QgaXRlbSdzIGxlYWRpbmcgYnl0ZXMs IGlmIHRoZSBpdGVtcyBzaGFyZSBlbm91Z2ggKF9idF9wcmVmaXhfY2hvb3NlKS4NCisgKiBCZWNh dXNlIGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBjYW4gaG9sZCBtb3JlIGxvZ2ljYWwgZGF0YSB0 aGFuIGZpdHMgaW4gYQ0KKyAqIHBsYWluIHBhZ2UsIHRoZSBoYWxmIGlzIGxhaWQgb3V0IGNvZGVk IGZyb20gdGhlIHN0YXJ0IHJhdGhlciB0aGFuIGJ1aWx0DQorICogcGxhaW4gYW5kIGNvbXByZXNz ZWQgYWZ0ZXJ3YXJkcy4gIFdoZW4gdGhlIGhhbGYgZG9lcyBub3QgZml0IHdpdGggaXRzIG93bg0K KyAqIHByZWZpeCAob3Igc2hhcmVzIHRvbyBsaXR0bGUgdG8gdGFrZSBvbmUpIGl0IGlzIGxhaWQg b3V0IHBsYWluLCBhbmQgaWYgdGhhdA0KKyAqIGRvZXMgbm90IGZpdCBlaXRoZXIsIHdpdGggYG9y aWdwcmVmaXgnICh0aGUgc3BsaXR0aW5nIHBhZ2UncyBwcmVmaXgsIHplcm8NCisgKiBsZW5ndGgg d2hlbiBpdCBoYWQgbm9uZSksIGFnYWluc3Qgd2hpY2ggaXQgZml0cyBieSBjb25zdHJ1Y3Rpb246 IHRoZSBpdGVtcw0KKyAqIGtlZXAgdGhlIHNoYXJlcyB0aGV5IGhhZCBvbiB0aGUgb3JpZ2luYWwg cGFnZS4NCisgKg0KKyAqIE1pcnJvcnMgQkFSSydzIGJhcmtfc3BsaXRfbGVhZl9oYWxmLiAgQ2Fs bGVyczogX2J0X3NwbGl0IChib3RoIGhhbHZlcykuDQorICovDQordm9pZA0KK19idF9zcGxpdF9s ZWFmX2hhbGYoUmVsYXRpb24gaW5kZXgsIFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBoaWtleSwNCisJ CQkJCUluZGV4VHVwbGUgKml0ZW1zLCBpbnQgbiwNCisJCQkJCWNvbnN0IGNoYXIgKm9yaWdwcmVm aXgsIFNpemUgb3JpZ3ByZWZpeGxlbiwNCisJCQkJCWNoYXIgKmNob3NlbnByZWZpeCwgU2l6ZSAq Y2hvc2VucHJlZml4bGVuKQ0KK3sNCisJQlRQYWdlT3BhcXVlRGF0YSBzYXZlZCA9ICpCVFBhZ2VH ZXRPcGFxdWUocGFnZSk7DQorCWNvbnN0IGNoYXIgKnByZWZpeFszXTsNCisJU2l6ZQkJcHJlZml4 bGVuWzNdOw0KKwlpbnQJCQludHJpZXMgPSAwOw0KKw0KKwlBc3NlcnQoUF9JU0xFQUYoJnNhdmVk KSAmJiAhUF9IQVNQUkVGSVgoJnNhdmVkKSk7DQorDQorCS8qIENhbmRpZGF0ZSBwcmVmaXhlcyB0 byB0cnksIGluIG9yZGVyOiBvd24sIG5vbmUsIHRoZSBvcmlnIHBhZ2Uncy4gKi8NCisJaWYgKF9i dF9wcmVmaXhfZW5hYmxlZChpbmRleCkpDQorCXsNCisJCXByZWZpeGxlbltudHJpZXNdID0gX2J0 X3ByZWZpeF9jaG9vc2UoaW5kZXgsIGl0ZW1zLCBuLCAmcHJlZml4W250cmllc10pOw0KKwkJaWYg KHByZWZpeGxlbltudHJpZXNdID4gMCkNCisJCQludHJpZXMrKzsNCisJfQ0KKwlwcmVmaXhbbnRy aWVzXSA9IE5VTEw7DQorCXByZWZpeGxlbltudHJpZXMrK10gPSAwOw0KKwlpZiAob3JpZ3ByZWZp eGxlbiA+IDApDQorCXsNCisJCXByZWZpeFtudHJpZXNdID0gb3JpZ3ByZWZpeDsNCisJCXByZWZp eGxlbltudHJpZXMrK10gPSBvcmlncHJlZml4bGVuOw0KKwl9DQorDQorCWZvciAoaW50IHQgPSAw OyB0IDwgbnRyaWVzOyB0KyspDQorCXsNCisJCWlmIChfYnRfc3BsaXRfbGVhZl9sYXlvdXQocGFn ZSwgaGlrZXksIGl0ZW1zLCBuLCBwcmVmaXhbdF0sIHByZWZpeGxlblt0XSkpDQorCQl7DQorCQkJ LyogUmVwb3J0IHRoZSBwcmVmaXggdGhhdCB3b24sIHNvIHRoZSBzcGxpdCBjYW4gbG9nIGl0IGZv ciByZWRvLiAqLw0KKwkJCWlmIChjaG9zZW5wcmVmaXhsZW4gIT0gTlVMTCkNCisJCQl7DQorCQkJ CSpjaG9zZW5wcmVmaXhsZW4gPSBwcmVmaXhsZW5bdF07DQorCQkJCWlmIChwcmVmaXhsZW5bdF0g PiAwKQ0KKwkJCQkJbWVtY3B5KGNob3NlbnByZWZpeCwgcHJlZml4W3RdLCBwcmVmaXhsZW5bdF0p Ow0KKwkJCX0NCisJCQlyZXR1cm47DQorCQl9DQorCQkvKiByZXN0b3JlIHRoZSBlbXB0eS1wYWdl IHN0YXRlIGZvciB0aGUgbmV4dCBhdHRlbXB0ICovDQorCQlfYnRfcGFnZWluaXQocGFnZSwgQkxD S1NaKTsNCisJCSpCVFBhZ2VHZXRPcGFxdWUocGFnZSkgPSBzYXZlZDsNCisJfQ0KKwllbG9nKEVS Uk9SLCAiZmFpbGVkIHRvIGxheSBvdXQgYSBzcGxpdCBoYWxmIG9mIGluZGV4IFwiJXNcIiIsDQor CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kZXgpKTsNCit9DQorDQorLyoNCisgKiBMYXkg b3V0IG9uZSBsZWFmIHNwbGl0IGhhbGYgb24gdGhlIGNhbGxlci1pbml0aWFsaXplZCBlbXB0eSBg cGFnZScgdXNpbmcgYQ0KKyAqIEdJVkVOIHByZWZpeCAoYHByZWZpeGxlbicgMCBmb3Igbm9uZSk6 IHRoZSBoaWdoIGtleSBgaGlrZXknIChOVUxMIGZvciBhDQorICogcmlnaHRtb3N0IGhhbGYpLCB0 aGUgUFJFRklYIGl0ZW0sIHRoZW4gdGhlIGBuJyBwbGFpbiB0dXBsZXMgYGl0ZW1zJyBjb2RlZA0K KyAqIGFnYWluc3QgdGhlIHByZWZpeC4gIFJldHVybnMgZmFsc2UgaWYgdGhleSBkbyBub3QgZml0 IChjYWxsZXIgdHJpZXMgYW5vdGhlcg0KKyAqIHByZWZpeCkuICBUaGlzIGlzIFJlbGF0aW9uLWZy ZWUgYW5kIGRldGVybWluaXN0aWMgaW4gKGhpa2V5LCBpdGVtcywgcHJlZml4KSwNCisgKiBzbyBX QUwgcmVkbyBjYWxscyBpdCB3aXRoIHRoZSBsb2dnZWQgcHJlZml4IHRvIHJlcHJvZHVjZSB0aGUg cHJpbWFyeSdzIHBhZ2UNCisgKiBieXRlIGZvciBieXRlLg0KKyAqLw0KK2Jvb2wNCitfYnRfc3Bs aXRfbGVhZl9sYXlvdXQoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGhpa2V5LCBJbmRleFR1cGxlICpp dGVtcywgaW50IG4sDQorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBwcmVmaXhsZW4p DQorew0KKwlPZmZzZXROdW1iZXIgbyA9IFBfSElLRVk7DQorCWJvb2wJCWZpdCA9IHRydWU7DQor DQorCUFzc2VydChQX0lTTEVBRihCVFBhZ2VHZXRPcGFxdWUocGFnZSkpICYmICFQX0hBU1BSRUZJ WChCVFBhZ2VHZXRPcGFxdWUocGFnZSkpKTsNCisJaWYgKGhpa2V5ICE9IE5VTEwgJiYNCisJCVBh Z2VBZGRJdGVtKHBhZ2UsIChjaGFyICopIGhpa2V5LCBNQVhBTElHTihJbmRleFR1cGxlU2l6ZSho aWtleSkpLA0KKwkJCQkJbysrLCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1iZXIp DQorCQlyZXR1cm4gZmFsc2U7DQorCWlmIChwcmVmaXhsZW4gPiAwKQ0KKwl7DQorCQlfYnRfcGFn ZV9zZXRfcHJlZml4KHBhZ2UsIHByZWZpeCwgcHJlZml4bGVuKTsNCisJCW8rKzsNCisJfQ0KKwlm b3IgKGludCBpID0gMDsgaSA8IG47IGkrKykNCisJew0KKwkJSW5kZXhUdXBsZQljb2RlZCA9IF9i dF9wcmVmaXhfZW5jb2RlKHBhZ2UsIGl0ZW1zW2ldKTsNCisNCisJCWlmIChQYWdlQWRkSXRlbShw YWdlLCAoY2hhciAqKSBjb2RlZCwgSW5kZXhUdXBsZVNpemUoY29kZWQpLA0KKwkJCQkJCW8rKywg ZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJCWZpdCA9IGZhbHNlOw0K KwkJaWYgKGNvZGVkICE9IGl0ZW1zW2ldKQ0KKwkJCXBmcmVlKGNvZGVkKTsNCisJCWlmICghZml0 KQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HDQor CWlmIChQX0hBU1BSRUZJWChCVFBhZ2VHZXRPcGFxdWUocGFnZSkpKQ0KKwl7DQorCQlPZmZzZXRO dW1iZXIgbXggPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOw0KKwkJT2Zmc2V0TnVtYmVy IG9mZjsNCisNCisJCWZvciAob2ZmID0gUF9GSVJTVERBVEFLRVkoQlRQYWdlR2V0T3BhcXVlKHBh Z2UpKTsgb2ZmIDw9IG14OyBvZmYrKykNCisJCXsNCisJCQlCVEl0ZW1CdWYJdmI7DQorDQorCQkJ KHZvaWQpIF9idF9nZXRpdGVtKHBhZ2UsIG9mZiwgJnZiKTsNCisJCX0NCisJfQ0KKyNlbmRpZg0K KwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorLyoNCisgKiBDb2xsZWN0IHRoZSBwbGFpbiAoZGVjb2Rl ZCkgZGF0YSBpdGVtcyBvZiBhIGxlYWYgc3BsaXQgaW50byB0aGUgbGVmdCBhbmQNCisgKiByaWdo dCBhcnJheXMsIGluIHRoZSBleGFjdCBvcmRlciBhbmQgd2l0aCB0aGUgZXhhY3Qgc3Vic3RpdHV0 aW9ucyB0aGF0IHRoZQ0KKyAqIHNwbGl0IHBlcmZvcm1zOiB0aGUgb3JpZ2luYWwgcGFnZSdzIGRh dGEgaXRlbXMgc3BsaXQgYXQgYGZpcnN0cmlnaHRvZmYnLA0KKyAqIHdpdGggYG5ld2l0ZW0nIGlu c2VydGVkIGF0IGBuZXdpdGVtb2ZmJyBvbiB0aGUgc2lkZSBnaXZlbiBieSBgbmV3aXRlbW9ubGVm dCcNCisgKiBhbmQsIGZvciBhIHBvc3RpbmctbGlzdCBzcGxpdCwgdGhlIHBvc3RpbmcgYXQgYG9y aWdwYWdlcG9zdGluZ29mZicgcmVwbGFjZWQNCisgKiBieSBgbnBvc3RpbmcnLiAgYG9yaWdwYWdl JyBpcyB0aGUgcHJlLXNwbGl0IHBhZ2UgKGl0cyBpdGVtcyBhcmUgZGVjb2RlZCB3aGVuDQorICog aXQgaXMgYSBCVFBfUFJFRklYIHBhZ2UpLiAgVGhlIGFycmF5cyByZWNlaXZlIHBvaW50ZXJzIHRo YXQgYXJlIHZhbGlkIHVudGlsDQorICogdGhlIGNhbGxlciBpcyBkb25lIGxheWluZyBvdXQgdGhl IGhhbHZlczsgaXRlbXMgdGFrZW4gZnJvbSB0aGUgcGFnZSBhcmUNCisgKiBjb3BpZWQsIHNvIHRo ZSBjYWxsZXIgb3ducyBhbmQgc2hvdWxkIHJlc2V0IHRoZSBzdXJyb3VuZGluZyBtZW1vcnkgY29u dGV4dC4NCisgKg0KKyAqIEJvdGggdGhlIHByaW1hcnkgKF9idF9zcGxpdCkgYW5kIFdBTCByZWRv IChidHJlZV94bG9nX3NwbGl0KSBjb2xsZWN0IGl0ZW1zDQorICogdGhpcyB3YXkgYW5kIHRoZW4g bGF5IG91dCBlYWNoIGhhbGYgd2l0aCBfYnRfc3BsaXRfbGVhZl9oYWxmLCBzbyB0aGUgdHdvDQor ICogcHJvZHVjZSBieXRlLWlkZW50aWNhbCBjb2RlZCBwYWdlcyB3aXRob3V0IGxvZ2dpbmcgYSBm dWxsLXBhZ2UgaW1hZ2UuDQorICovDQordm9pZA0KK19idF9zcGxpdF9sZWFmX2NvbGxlY3QoUGFn ZSBvcmlncGFnZSwgT2Zmc2V0TnVtYmVyIGZpcnN0cmlnaHRvZmYsDQorCQkJCQkgICBPZmZzZXRO dW1iZXIgbmV3aXRlbW9mZiwgSW5kZXhUdXBsZSBuZXdpdGVtLA0KKwkJCQkJICAgYm9vbCBuZXdp dGVtb25sZWZ0LCBPZmZzZXROdW1iZXIgb3JpZ3BhZ2Vwb3N0aW5nb2ZmLA0KKwkJCQkJICAgSW5k ZXhUdXBsZSBucG9zdGluZywNCisJCQkJCSAgIEluZGV4VHVwbGUgKmxlZnRpdGVtcywgaW50ICpu bGVmdCwNCisJCQkJCSAgIEluZGV4VHVwbGUgKnJpZ2h0aXRlbXMsIGludCAqbnJpZ2h0KQ0KK3sN CisJQlRQYWdlT3BhcXVlIG9vcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUob3JpZ3BhZ2UpOw0KKwlP ZmZzZXROdW1iZXIgbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihvcmlncGFnZSk7DQor CWJvb2wJCWhhc3ByZWZpeCA9IFBfSEFTUFJFRklYKG9vcGFxdWUpOw0KKwlPZmZzZXROdW1iZXIg aTsNCisNCisJKm5sZWZ0ID0gMDsNCisJKm5yaWdodCA9IDA7DQorCWZvciAoaSA9IFBfRklSU1RE QVRBS0VZKG9vcGFxdWUpOyBpIDw9IG1heG9mZjsgaSA9IE9mZnNldE51bWJlck5leHQoaSkpDQor CXsNCisJCUl0ZW1JZAkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgaSk7DQorCQlJ bmRleFR1cGxlCWRhdGFpdGVtID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBp dGVtaWQpOw0KKwkJQlRJdGVtQnVmCWRpYnVmOw0KKw0KKwkJaWYgKGhhc3ByZWZpeCkNCisJCQlk YXRhaXRlbSA9IF9idF9wcmVmaXhfZGVjb2RlKG9yaWdwYWdlLCBkYXRhaXRlbSwgJmRpYnVmKTsN CisNCisJCWlmIChpID09IG9yaWdwYWdlcG9zdGluZ29mZikNCisJCQlkYXRhaXRlbSA9IG5wb3N0 aW5nOw0KKwkJZWxzZSBpZiAoaSA9PSBuZXdpdGVtb2ZmKQ0KKwkJew0KKwkJCWlmIChuZXdpdGVt b25sZWZ0KQ0KKwkJCQlsZWZ0aXRlbXNbKCpubGVmdCkrK10gPSBuZXdpdGVtOw0KKwkJCWVsc2UN CisJCQkJcmlnaHRpdGVtc1soKm5yaWdodCkrK10gPSBuZXdpdGVtOw0KKwkJfQ0KKw0KKwkJaWYg KGkgPCBmaXJzdHJpZ2h0b2ZmKQ0KKwkJCWxlZnRpdGVtc1soKm5sZWZ0KSsrXSA9IENvcHlJbmRl eFR1cGxlKGRhdGFpdGVtKTsNCisJCWVsc2UNCisJCQlyaWdodGl0ZW1zWygqbnJpZ2h0KSsrXSA9 IENvcHlJbmRleFR1cGxlKGRhdGFpdGVtKTsNCisJfQ0KKwlpZiAoaSA8PSBuZXdpdGVtb2ZmKQ0K KwkJcmlnaHRpdGVtc1soKm5yaWdodCkrK10gPSBuZXdpdGVtOw0KK30NCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlYWRwYWdlLmMNCmluZGV4IDU1NzIyZmQ4NzkxLi4xYzcxYzliZDk5NyAx MDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYw0KKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jDQpAQCAtMTMwLDYgKzEz MCw0MCBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhT Y2FuRGVzYyBzY2FuKTsNCiAgKg0KICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRl bXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuDQogICovDQorDQorLyoNCisgKiBD YW4gdGhpcyBzY2FuIHNraXAgZGVjb2RpbmcgdGhlIHByZWZpeC1jb2RlZCBrZXkgb2YgYSBkYXRh IGl0ZW0sIGFuZCB0aGUNCisgKiBfYnRfY2hlY2trZXlzIGNhbGwgdGhhdCB3b3VsZCByZWFkIGl0 Pw0KKyAqDQorICogT24gYSBCVFBfUFJFRklYIGxlYWYgX2J0X2dldGl0ZW0oKSBkZWNvZGVzIHRo ZSBmcm9udC1jb2RlZCBmaXJzdCBrZXkgY29sdW1uDQorICogb2YgZXZlcnkgZGF0YSBpdGVtLCB3 aGljaCBpcyBwdXJlIENQVSB3b3JrLiAgVGhhdCB3b3JrIC0tIGFuZCB0aGUNCisgKiBfYnRfY2hl Y2trZXlzIGNhbGwgaXQgZmVlZHMgLS0gaXMgd2FzdGVkIHdoZW46DQorICoNCisgKiAgIChhKSB0 aGlzIGlzIG5vdCBhbiBpbmRleC1vbmx5IHNjYW4gKHNvLT5jdXJyVHVwbGVzID09IE5VTEwpLCBz byB3ZSBuZXZlcg0KKyAqICAgICAgIGNvcHkgdGhlIHR1cGxlIG91dCBhbmQgbmVlZCBvbmx5IGl0 cyBoZWFwIFRJRCAvIHBvc3RpbmcgbGlzdCwgYm90aCBvZg0KKyAqICAgICAgIHdoaWNoIGNvZGlu ZyBsZWF2ZXMgaW4gcGxhY2UgaW4gdGhlIG9uLXBhZ2UgdHVwbGU7IGFuZA0KKyAqICAgKGIpIF9i dF9jaGVja2tleXMgd291bGQgcmVhZCBubyBrZXkgYXR0cmlidXRlIGFueXdheTogZXZlcnkgc2Nh biBrZXkgaXMNCisgKiAgICAgICBhbHJlYWR5IHByb3ZlbiBzYXRpc2ZpZWQgZm9yIHRoZSB3aG9s ZSBwYWdlIChzdGFydGlrZXkgcmVhY2hlZCB0aGUNCisgKiAgICAgICBlbmQgb2YgdGhlIHNjYW4g a2V5cykgYW5kIHRoZSBzY2FuIGhhcyBubyBhcnJheSBrZXlzIChhcnJheS1rZXkNCisgKiAgICAg ICBhZHZhbmNlbWVudCByZWFkcyB0aGUga2V5IHJlZ2FyZGxlc3Mgb2Ygc3RhcnRpa2V5KS4NCisg Kg0KKyAqIEluIHRoYXQgc3RhdGUgX2J0X2NoZWNra2V5cycgX2J0X2NoZWNrX2NvbXBhcmUgbG9v cCB3b3VsZCBzdGFydCBhdA0KKyAqIGlrZXkgPT0gbnVtYmVyT2ZLZXlzIGFuZCBjb21wYXJlIG5v dGhpbmcsIHJldHVybmluZyAicGFzc2VzLCBjb250aW51ZSINCisgKiB3aXRob3V0IHRvdWNoaW5n IHRoZSB0dXBsZS4gIFNvIHRoZSBjYWxsZXIgY2FuIHRyZWF0IHRoZSB0dXBsZSBhcyBhIG1hdGNo LA0KKyAqIGxlYXZlIGNvbnRpbnVlc2NhbiB0cnVlLCBhbmQgcmVhZCB0aGUgaGVhcCBUSUQgLyBw b3N0aW5nIGxpc3Qgc3RyYWlnaHQgZnJvbQ0KKyAqIHRoZSBvbi1wYWdlIHR1cGxlIC0tIG5vIGRl Y29kZSwgbm8gX2J0X2NoZWNra2V5cyBjYWxsLg0KKyAqDQorICogKFdlIG11c3Qgc2tpcCB0aGUg X2J0X2NoZWNra2V5cyBjYWxsLCBub3QganVzdCB0aGUgZGVjb2RlOiBpbiBjYXNzZXJ0DQorICog YnVpbGRzIF9idF9jaGVja2tleXMgcmUtcnVucyBfYnRfY2hlY2tfY29tcGFyZSBmcm9tIGlrZXkg MCB0byB2ZXJpZnkgdGhlDQorICogc3RhcnRpa2V5IG9wdGltaXphdGlvbiwgd2hpY2ggd291bGQg cmVhZCB0aGUgc3RpbGwtY29kZWQga2V5LikNCisgKi8NCitzdGF0aWMgaW5saW5lIGJvb2wNCitf YnRfc2Nhbl9za2lwX2tleShCVFNjYW5PcGFxdWUgc28sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRl LCBib29sIGFycmF5S2V5cykNCit7DQorCXJldHVybiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMICYm ICFhcnJheUtleXMgJiYNCisJCXBzdGF0ZS0+c3RhcnRpa2V5ID49IHNvLT5udW1iZXJPZktleXM7 DQorfQ0KKw0KIGJvb2wNCiBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwNCiAJCQkgYm9vbCBmaXJzdHBhZ2UpDQpA QCAtMTQ1LDYgKzE3OSw4IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLA0KIAkJCQlpZ25vcmVfa2lsbGVkX3R1 cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzOw0KIAlpbnQJCQlpdGVtSW5kZXgsDQog CQkJCWluZG5hdHRzOw0KKwlCVEl0ZW1CdWYJaXR1cGJ1ZjsJCQkvKiBkZWNvZGUgd29ya3NwYWNl IGZvciBhIGxvb3AncyBjdXJyZW50IGl0ZW0gKi8NCisJQlRJdGVtQnVmCWZpbmFsYnVmOwkJLyog ZGVjb2RlIHdvcmtzcGFjZSBmb3IgYSBiYWNrd2FyZCBmaW5hbHR1cCAqLw0KIA0KIAkvKiBzYXZl IHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlu a3MgKi8NCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsNCkBAIC0yNTIs MTIgKzI4OCwyNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwNCiAJCQkJY29udGludWU7DQogCQkJfQ0KIA0K LQkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsNCi0JCQlBc3Nl cnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsNCisJCQlpZiAoX2J0X3NjYW5fc2tpcF9rZXko c28sICZwc3RhdGUsIGFycmF5S2V5cykpDQorCQkJew0KKwkJCQkvKg0KKwkJCQkgKiBBbGwgc2Nh biBrZXlzIHNhdGlzZmllZCBwYWdlLXdpZGUgYW5kIHdlIG5lZWQgb25seSB0aGUgaGVhcA0KKwkJ CQkgKiBUSUQ6IHJlYWQgdGhlIG9uLXBhZ2UgdHVwbGUgd2l0aG91dCBkZWNvZGluZywgc2tpcCB0 aGUNCisJCQkJICoga2V5IGNoZWNrLCBhbmQgdHJlYXQgaXQgYXMgYSBtYXRjaCAoY29udGludWVz Y2FuIHN0YXlzIHNldCkuDQorCQkJCSAqLw0KKwkJCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VH ZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKSk7DQorCQkJCUFzc2VydCgh QlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KKwkJCQlwc3RhdGUub2ZmbnVtID0gb2ZmbnVtOw0K KwkJCQlwYXNzZXNfcXVhbHMgPSB0cnVlOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlp dHVwID0gX2J0X2dldGl0ZW0ocGFnZSwgb2ZmbnVtLCAmaXR1cGJ1Zik7DQorCQkJCUFzc2VydCgh QlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KIA0KLQkJCXBzdGF0ZS5vZmZudW0gPSBvZmZudW07 DQotCQkJcGFzc2VzX3F1YWxzID0gX2J0X2NoZWNra2V5cyhzY2FuLCAmcHN0YXRlLCBhcnJheUtl eXMsDQotCQkJCQkJCQkJCSBpdHVwLCBpbmRuYXR0cyk7DQorCQkJCXBzdGF0ZS5vZmZudW0gPSBv ZmZudW07DQorCQkJCXBhc3Nlc19xdWFscyA9IF9idF9jaGVja2tleXMoc2NhbiwgJnBzdGF0ZSwg YXJyYXlLZXlzLA0KKwkJCQkJCQkJCQkJIGl0dXAsIGluZG5hdHRzKTsNCisJCQl9DQogDQogCQkJ LyoNCiAJCQkgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHNraXAgYWhlYWQgdG8gYSBsYXRlciB0dXBs ZSAob25seSBwb3NzaWJsZQ0KQEAgLTM1Myw5ICs0MDQsNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwNCiAJ CXsNCiAJCQlpZiAobWlub2ZmIDw9IG1heG9mZiAmJiAhUF9MRUZUTU9TVChvcGFxdWUpKQ0KIAkJ CXsNCi0JCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9mZik7DQotDQot CQkJCXBzdGF0ZS5maW5hbHR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQp Ow0KKwkJCQlwc3RhdGUuZmluYWx0dXAgPSBfYnRfZ2V0aXRlbShwYWdlLCBtaW5vZmYsICZmaW5h bGJ1Zik7DQogDQogCQkJCWlmICh1bmxpa2VseShzby0+c2NhbkJlaGluZCkgJiYNCiAJCQkJCSFf YnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQ0KQEAg LTQxNSwxOSArNDY0LDMwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLA0KIAkJCWVsc2UNCiAJCQkJdHVwbGVf YWxpdmUgPSB0cnVlOw0KIA0KLQkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFn ZSwgaWlkKTsNCi0JCQlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsNCi0NCi0JCQlw c3RhdGUub2ZmbnVtID0gb2ZmbnVtOw0KLQkJCWlmIChhcnJheUtleXMgJiYgb2ZmbnVtID09IG1p bm9mZiAmJiBwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCkNCisJCQlpZiAoX2J0X3NjYW5fc2tpcF9r ZXkoc28sICZwc3RhdGUsIGFycmF5S2V5cykpDQogCQkJew0KLQkJCQkvKiBSZXNldCBhcnJheXMs IHBlciBfYnRfc2V0X3N0YXJ0aWtleSBjb250cmFjdCAqLw0KLQkJCQlwc3RhdGUuZm9yY2Vub25y ZXF1aXJlZCA9IGZhbHNlOw0KLQkJCQlwc3RhdGUuc3RhcnRpa2V5ID0gMDsNCi0JCQkJX2J0X3N0 YXJ0X2FycmF5X2tleXMoc2NhbiwgZGlyKTsNCisJCQkJLyogc2VlIG1hdGNoaW5nIGNvbW1lbnQg aW4gdGhlIGZvcndhcmQgbG9vcCBhYm92ZSAqLw0KKwkJCQlpdHVwID0gKEluZGV4VHVwbGUpIFBh Z2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKSk7DQorCQkJCUFzc2Vy dCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KKwkJCQlwc3RhdGUub2ZmbnVtID0gb2ZmbnVt Ow0KKwkJCQlwYXNzZXNfcXVhbHMgPSB0cnVlOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJ CQlpdHVwID0gX2J0X2dldGl0ZW0ocGFnZSwgb2ZmbnVtLCAmaXR1cGJ1Zik7DQorCQkJCUFzc2Vy dCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KKw0KKwkJCQlwc3RhdGUub2ZmbnVtID0gb2Zm bnVtOw0KKwkJCQlpZiAoYXJyYXlLZXlzICYmIG9mZm51bSA9PSBtaW5vZmYgJiYgcHN0YXRlLmZv cmNlbm9ucmVxdWlyZWQpDQorCQkJCXsNCisJCQkJCS8qIFJlc2V0IGFycmF5cywgcGVyIF9idF9z ZXRfc3RhcnRpa2V5IGNvbnRyYWN0ICovDQorCQkJCQlwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCA9 IGZhbHNlOw0KKwkJCQkJcHN0YXRlLnN0YXJ0aWtleSA9IDA7DQorCQkJCQlfYnRfc3RhcnRfYXJy YXlfa2V5cyhzY2FuLCBkaXIpOw0KKwkJCQl9DQorCQkJCXBhc3Nlc19xdWFscyA9IF9idF9jaGVj a2tleXMoc2NhbiwgJnBzdGF0ZSwgYXJyYXlLZXlzLA0KKwkJCQkJCQkJCQkJIGl0dXAsIGluZG5h dHRzKTsNCiAJCQl9DQotCQkJcGFzc2VzX3F1YWxzID0gX2J0X2NoZWNra2V5cyhzY2FuLCAmcHN0 YXRlLCBhcnJheUtleXMsDQotCQkJCQkJCQkJCSBpdHVwLCBpbmRuYXR0cyk7DQogDQogCQkJaWYg KGFycmF5S2V5cyAmJiBzby0+c2NhbkJlaGluZCkNCiAJCQl7DQpAQCAtNTk2LDkgKzY1NiwxMCBA QCBfYnRfc2V0X3N0YXJ0aWtleShJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAq cHN0YXRlKQ0KIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 DQogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247DQogCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOw0KLQlJdGVtSWQJCWlpZDsNCiAJSW5kZXhUdXBs ZQlmaXJzdHR1cCwNCiAJCQkJbGFzdHR1cDsNCisJQlRJdGVtQnVmCWZpcnN0YnVmLA0KKwkJCQls YXN0YnVmOw0KIAlpbnQJCQlzdGFydGlrZXkgPSAwLA0KIAkJCQlhcnJheWlkeCA9IDAsDQogCQkJ CWZpcnN0Y2hhbmdpbmdhdHRudW07DQpAQCAtNjE2LDEyICs2NzcsMTAgQEAgX2J0X3NldF9zdGFy dGlrZXkoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSkNCiAJCXJl dHVybjsNCiANCiAJLyogbWlub2ZmIGlzIGFuIG9mZnNldCB0byB0aGUgbG93ZXN0IG5vbi1waXZv dCB0dXBsZSBvbiB0aGUgcGFnZSAqLw0KLQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBzdGF0ZS0+cGFn ZSwgcHN0YXRlLT5taW5vZmYpOw0KLQlmaXJzdHR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRl bShwc3RhdGUtPnBhZ2UsIGlpZCk7DQorCWZpcnN0dHVwID0gX2J0X2dldGl0ZW0ocHN0YXRlLT5w YWdlLCBwc3RhdGUtPm1pbm9mZiwgJmZpcnN0YnVmKTsNCiANCiAJLyogbWF4b2ZmIGlzIGFuIG9m ZnNldCB0byB0aGUgaGlnaGVzdCBub24tcGl2b3QgdHVwbGUgb24gdGhlIHBhZ2UgKi8NCi0JaWlk ID0gUGFnZUdldEl0ZW1JZChwc3RhdGUtPnBhZ2UsIHBzdGF0ZS0+bWF4b2ZmKTsNCi0JbGFzdHR1 cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwc3RhdGUtPnBhZ2UsIGlpZCk7DQorCWxhc3R0 dXAgPSBfYnRfZ2V0aXRlbShwc3RhdGUtPnBhZ2UsIHBzdGF0ZS0+bWF4b2ZmLCAmbGFzdGJ1Zik7 DQogDQogCS8qIERldGVybWluZSB0aGUgZmlyc3QgYXR0cmlidXRlIHdob3NlIHZhbHVlcyBjaGFu Z2Ugb24gY2FsbGVyJ3MgcGFnZSAqLw0KIAlmaXJzdGNoYW5naW5nYXR0bnVtID0gX2J0X2tlZXBf bmF0dHNfZmFzdChyZWwsIGZpcnN0dHVwLCBsYXN0dHVwKTsNCkBAIC0yMDUzLDYgKzIxMTIsNyBA QCBfYnRfY2hlY2trZXlzX2xvb2tfYWhlYWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdl U3RhdGUgKnBzdGF0ZSwNCiAJU2NhbkRpcmVjdGlvbiBkaXIgPSBwc3RhdGUtPmRpcjsNCiAJT2Zm c2V0TnVtYmVyIGFoZWFkb2ZmbnVtOw0KIAlJbmRleFR1cGxlCWFoZWFkOw0KKwlCVEl0ZW1CdWYJ YWhlYWRidWY7CQkvKiBkZWNvZGUgd29ya3NwYWNlIGZvciB0aGUgbG9vay1haGVhZCB0dXBsZSAq Lw0KIA0KIAlBc3NlcnQoIXBzdGF0ZS0+Zm9yY2Vub25yZXF1aXJlZCk7DQogDQpAQCAtMjA4OCw4 ICsyMTQ4LDcgQEAgX2J0X2NoZWNra2V5c19sb29rX2FoZWFkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsDQogCQlhaGVhZG9mZm51bSA9IE1heCgoaW50KSBwc3Rh dGUtPm1pbm9mZiwNCiAJCQkJCQkgIChpbnQpIHBzdGF0ZS0+b2ZmbnVtIC0gcHN0YXRlLT50YXJn ZXRkaXN0YW5jZSk7DQogDQotCWFoZWFkID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBzdGF0 ZS0+cGFnZSwNCi0JCQkJCQkJCQkgUGFnZUdldEl0ZW1JZChwc3RhdGUtPnBhZ2UsIGFoZWFkb2Zm bnVtKSk7DQorCWFoZWFkID0gX2J0X2dldGl0ZW0ocHN0YXRlLT5wYWdlLCBhaGVhZG9mZm51bSwg JmFoZWFkYnVmKTsNCiAJaWYgKF9idF90dXBsZV9iZWZvcmVfYXJyYXlfc2tleXMoc2NhbiwgZGly LCBhaGVhZCwgdHVwZGVzYywgdHVwbmF0dHMsDQogCQkJCQkJCQkJIGZhbHNlLCAwLCBOVUxMKSkN CiAJew0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jDQppbmRleCAwYWJkZDdiNDlmNS4uYjhi OGVjMDE4ZjMgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5j DQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jDQpAQCAtNDM1LDggKzQz NSwxMCBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywNCiAJICovDQogCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJU dXBsZXMgPT0gTlVMTCkNCiAJew0KLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2Mo QkxDS1NaICogMik7DQotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1Na Ow0KKwkJU2l6ZQkJaGFsZiA9IEJUVHVwbGVTdG9yYWdlU2l6ZShzY2FuLT5pbmRleFJlbGF0aW9u KTsNCisNCisJCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKGhhbGYgKiAyKTsNCisJ CXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBoYWxmOw0KIAl9DQogDQogCS8qDQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMNCmluZGV4IDYxZjYzMjUxYzZmLi5mOTMy Y2EzM2MzYSAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMNCkBAIC02OTYs NiArNjk2LDcgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLA0KIAlUdXBsZURlc2MJaXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7DQogCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSBCVFBh Z2VHZXRPcGFxdWUocGFnZSk7DQogCUluZGV4VHVwbGUJaXR1cDsNCisJQlRJdGVtQnVmCWl0dXBi dWY7DQogCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7DQogCVNjYW5LZXkJCXNjYW5rZXk7DQogCWludAkJ CW5jbXBrZXk7DQpAQCAtNzEzLDcgKzcxNCw3IEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwN CiAJaWYgKCFQX0lTTEVBRihvcGFxdWUpICYmIG9mZm51bSA9PSBQX0ZJUlNUREFUQUtFWShvcGFx dWUpKQ0KIAkJcmV0dXJuIDE7DQogDQotCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0o cGFnZSwgUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pKTsNCisJaXR1cCA9IF9idF9nZXRpdGVt KHBhZ2UsIG9mZm51bSwgJml0dXBidWYpOw0KIAludHVwYXR0cyA9IEJUcmVlVHVwbGVHZXROQXR0 cyhpdHVwLCByZWwpOw0KIA0KIAkvKg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0c29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMNCmlu ZGV4IDc1NmRmYTNkY2Y0Li45YThiMzcyMDMzZSAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c29ydC5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNvcnQuYw0KQEAgLTI0MSw2ICsyNDEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRQYWdlU3RhdGUN CiAJU2l6ZQkJYnRwc19sYXN0ZXh0cmE7IC8qIGxhc3QgaXRlbSdzIGV4dHJhIHBvc3RpbmcgbGlz dCBzcGFjZSAqLw0KIAl1aW50MzIJCWJ0cHNfbGV2ZWw7CQkvKiB0cmVlIGxldmVsICgwID0gbGVh ZikgKi8NCiAJU2l6ZQkJYnRwc19mdWxsOwkJLyogImZ1bGwiIGlmIGxlc3MgdGhhbiB0aGlzIG11 Y2ggZnJlZSBzcGFjZSAqLw0KKwkvKiBMZWFmIHByZWZpeCBjb21wcmVzc2lvbjogdGhlIGNhbmRp ZGF0ZSBwcmVmaXggb2YgdGhlIHBhZ2UgYmVpbmcgZmlsbGVkICovDQorCWNvbnN0IGNoYXIgKmJ0 cHNfcHJlZml4OwkvKiBpbnRvIHRoZSBwYWdlJ3MgZmlyc3QgZGF0YSBpdGVtLCBvciBOVUxMICov DQorCVNpemUJCWJ0cHNfcHJlZml4bGVuOyAvKiBpdHMgbGVuZ3RoICgwID0gbm8gY2FuZGlkYXRl KSAqLw0KKwlTaXplCQlidHBzX2NvZGVkc2F2ZWQ7CS8qIGJ5dGVzIHRoZSBwYWdlJ3MgaXRlbXMg d291bGQgc2F2ZSBjb2RlZCAqLw0KIAlzdHJ1Y3QgQlRQYWdlU3RhdGUgKmJ0cHNfbmV4dDsJLyog bGluayB0byBwYXJlbnQgbGV2ZWwsIGlmIGFueSAqLw0KIH0gQlRQYWdlU3RhdGU7DQogDQpAQCAt ODU2LDcgKzg2MCw4IEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdl U3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsDQogCSAqLw0KIAlBc3NlcnQobGFzdF90cnVu Y2V4dHJhID09IDAgfHwgaXNsZWFmKTsNCiAJaWYgKHBnc3BjIDwgaXR1cHN6ICsgKGlzbGVhZiA/ IE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSA6IDApIHx8DQotCQkocGdzcGMgKyBs YXN0X3RydW5jZXh0cmEgPCBzdGF0ZS0+YnRwc19mdWxsICYmIGxhc3Rfb2ZmID4gUF9GSVJTVEtF WSkpDQorCQkocGdzcGMgKyBsYXN0X3RydW5jZXh0cmEgKyBzdGF0ZS0+YnRwc19jb2RlZHNhdmVk IDwgc3RhdGUtPmJ0cHNfZnVsbCAmJg0KKwkJIGxhc3Rfb2ZmID4gUF9GSVJTVEtFWSkpDQogCXsN CiAJCS8qDQogCQkgKiBGaW5pc2ggb2ZmIHRoZSBwYWdlIGFuZCB3cml0ZSBpdCBvdXQuDQpAQCAt OTgwLDYgKzk4NSwxNSBAQCBfYnRfYnVpbGRhZGQoQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFn ZVN0YXRlICpzdGF0ZSwgSW5kZXhUdXBsZSBpdHVwLA0KIAkJCW5vcGFxdWUtPmJ0cG9fbmV4dCA9 IFBfTk9ORTsJLyogcmVkdW5kYW50ICovDQogCQl9DQogDQorCQkvKg0KKwkJICogVGhlIG9sZCBs ZWFmIHBhZ2UgaXMgY29tcGxldGU6IGZhdWx0IGl0IGZvcndhcmQgaW50byB0aGUNCisJCSAqIEJU UF9QUkVGSVggZm9ybWF0IGlmIGEgcHJlZml4IHBheXMgb2ZmLiAgRG9uZSBhZnRlciBidHBzX2xv d2tleQ0KKwkJICogKHRoZSBkb3dubGluaywgYSBjb3B5IG9mIHRoZSB1bmNvZGVkIGhpZ2gga2V5 KSBpcyBzYXZlZCwgc2luY2UNCisJCSAqIGNvbXByZXNzaW9uIHJld3JpdGVzIG9wYWdlIGluIHBs YWNlLg0KKwkJICovDQorCQlpZiAoaXNsZWFmKQ0KKwkJCV9idF9wcmVmaXhfY29tcHJlc3NfcGFn ZSh3c3RhdGUtPmluZGV4LCBvcGFnZSk7DQorDQogCQkvKg0KIAkJICogV3JpdGUgb3V0IHRoZSBv bGQgcGFnZS4gX2J0X2Jsd3JpdGVwYWdlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUNCiAJCSAqICdv cGFnZScgYnVmZmVyLg0KQEAgLTk5MCw2ICsxMDA0LDExIEBAIF9idF9idWlsZGFkZChCVFdyaXRl U3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsDQogCQkg KiBSZXNldCBsYXN0X29mZiB0byBwb2ludCB0byBuZXcgcGFnZQ0KIAkJICovDQogCQlsYXN0X29m ZiA9IFBfRklSU1RLRVk7DQorDQorCQkvKiBUaGUgbmV3IHBhZ2Ugc3RhcnRzIHdpdGggbm8gcHJl Zml4IGNhbmRpZGF0ZSBhbmQgbm8gc2F2aW5ncyB5ZXQuICovDQorCQlzdGF0ZS0+YnRwc19wcmVm aXggPSBOVUxMOw0KKwkJc3RhdGUtPmJ0cHNfcHJlZml4bGVuID0gMDsNCisJCXN0YXRlLT5idHBz X2NvZGVkc2F2ZWQgPSAwOw0KIAl9DQogDQogCS8qDQpAQCAtMTAxNyw2ICsxMDM2LDM0IEBAIF9i dF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRl eFR1cGxlIGl0dXAsDQogCV9idF9zb3J0YWRkdHVwKG5wYWdlLCBpdHVwc3osIGl0dXAsIGxhc3Rf b2ZmLA0KIAkJCQkgICAhaXNsZWFmICYmIGxhc3Rfb2ZmID09IFBfRklSU1RLRVkpOw0KIA0KKwkv Kg0KKwkgKiBMZWFmIHByZWZpeCBjb21wcmVzc2lvbiBhY2NvdW50aW5nIChTdHJhdGVneSAxKTog dGhlIHBhZ2UncyBldmVudHVhbA0KKwkgKiBwcmVmaXggaXMgaXRzIGZpcnN0IGRhdGEgaXRlbSdz IGZpcnN0LWNvbHVtbiBieXRlczsgZXN0aW1hdGUgaG93IG11Y2gNCisJICogcm9vbSBjb2Rpbmcg dGhpcyBwYWdlJ3MgaXRlbXMgd291bGQgZnJlZSwgc28gdGhlIGZpbGxmYWN0b3IgdGVzdCBhYm92 ZQ0KKwkgKiBjYW4gcGFjayBtb3JlIHBsYWluIGl0ZW1zIG9udG8gYSBwYWdlIHRoYXQgd2lsbCBz aHJpbmsgd2hlbiBpdCBpcw0KKwkgKiBjb21wcmVzc2VkIGF0IGZpbmlzaC4gIEl0ZW1zIGFyZSBz dGlsbCBwbGFjZWQgcGxhaW4gaGVyZTsgdGhlIGVzdGltYXRlDQorCSAqIG9ubHkgcmVsYXhlcyB0 aGUgc29mdCBsaW1pdCwgbmV2ZXIgdGhlIGhhcmQgZml0IGNoZWNrLg0KKwkgKi8NCisJaWYgKGlz bGVhZiAmJiBfYnRfcHJlZml4X2VuYWJsZWQod3N0YXRlLT5pbmRleCkpDQorCXsNCisJCWlmIChz dGF0ZS0+YnRwc19wcmVmaXggPT0gTlVMTCkNCisJCQlzdGF0ZS0+YnRwc19wcmVmaXggPSBfYnRf cHJlZml4X2NhbmRpZGF0ZShpdHVwLA0KKwkJCQkJCQkJCQkJCQkgICZzdGF0ZS0+YnRwc19wcmVm aXhsZW4pOw0KKwkJZWxzZQ0KKwkJew0KKwkJCWludAkJCXNoYXJlZCA9IF9idF9wcmVmaXhfc2hh cmVkKHN0YXRlLT5idHBzX3ByZWZpeCwNCisJCQkJCQkJCQkJCSAgIHN0YXRlLT5idHBzX3ByZWZp eGxlbiwgaXR1cCk7DQorDQorCQkJLyoNCisJCQkgKiBBIGNvZGVkIGl0ZW0gZHJvcHMgYHNoYXJl ZCcgdmFsdWUgYnl0ZXMgYnV0IGtlZXBzIGEgMS1ieXRlDQorCQkJICogc2hhcmUgY291bnQ7IGNv dW50IHRoZSBuZXQgTUFYQUxJR04tcm91bmRlZCBzYXZpbmcuDQorCQkJICovDQorCQkJaWYgKHNo YXJlZCA+IDEpDQorCQkJCXN0YXRlLT5idHBzX2NvZGVkc2F2ZWQgKz0NCisJCQkJCU1BWEFMSUdO KGl0dXBzeikgLSBNQVhBTElHTihpdHVwc3ogLSAoc2hhcmVkIC0gMSkpOw0KKwkJfQ0KKwl9DQor DQogCXN0YXRlLT5idHBzX2J1ZiA9IG5idWY7DQogCXN0YXRlLT5idHBzX2Jsa25vID0gbmJsa25v Ow0KIAlzdGF0ZS0+YnRwc19sYXN0b2ZmID0gbGFzdF9vZmY7DQpAQCAtMTExNSw2ICsxMTYyLDEx IEBAIF9idF91cHBlcnNodXRkb3duKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAq c3RhdGUpDQogCQkgKiBiYWNrIG9uZSBzbG90LiAgVGhlbiB3ZSBjYW4gZHVtcCBvdXQgdGhlIHBh Z2UuDQogCQkgKi8NCiAJCV9idF9zbGlkZWxlZnQoKFBhZ2UpIHMtPmJ0cHNfYnVmKTsNCisNCisJ CS8qIEZhdWx0IHRoZSBmaW5pc2hlZCByaWdodG1vc3QgbGVhZiBmb3J3YXJkIGludG8gQlRQX1BS RUZJWCBpZiBpdCBwYXlzLiAqLw0KKwkJaWYgKHMtPmJ0cHNfbGV2ZWwgPT0gMCkNCisJCQlfYnRf cHJlZml4X2NvbXByZXNzX3BhZ2Uod3N0YXRlLT5pbmRleCwgKFBhZ2UpIHMtPmJ0cHNfYnVmKTsN CisNCiAJCV9idF9ibHdyaXRlcGFnZSh3c3RhdGUsIHMtPmJ0cHNfYnVmLCBzLT5idHBzX2Jsa25v KTsNCiAJCXMtPmJ0cHNfYnVmID0gTlVMTDsJCS8qIHdyaXRlcGFnZSB0b29rIG93bmVyc2hpcCBv ZiB0aGUgYnVmZmVyICovDQogCX0NCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNwbGl0bG9jLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9j LmMNCmluZGV4IGRlOWVjYTNjOGIyLi4xNGJlZTU2OGU0NSAxMDA2NDQNCi0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzcGxpdGxvYy5jDQpAQCAtNTIsNiArNTIsOSBAQCB0eXBlZGVmIHN0cnVjdA0K IAlpbnQJCQlyaWdodHNwYWNlOwkJLyogc3BhY2UgYXZhaWxhYmxlIGZvciBpdGVtcyBvbiByaWdo dCBwYWdlICovDQogCWludAkJCW9sZGRhdGFpdGVtc3RvdGFsOwkvKiBzcGFjZSB0YWtlbiBieSBv bGQgaXRlbXMgKi8NCiAJU2l6ZQkJbWluZmlyc3RyaWdodHN6OwkvKiBzbWFsbGVzdCBmaXJzdHJp Z2h0IHNpemUgKi8NCisJYm9vbAkJaGFzcHJlZml4OwkJLyogb3JpZ3BhZ2UgaXMgcHJlZml4LWNv bXByZXNzZWQgKEJUUF9QUkVGSVgpICovDQorCUJUSXRlbUJ1ZglsYnVmOwkJCS8qIGRlY29kZSBz Y3JhdGNoIGZvciBfYnRfc3BsaXRfbGFzdGxlZnQgKi8NCisJQlRJdGVtQnVmCXJidWY7CQkJLyog ZGVjb2RlIHNjcmF0Y2ggZm9yIF9idF9zcGxpdF9maXJzdHJpZ2h0ICovDQogDQogCS8qIGNhbmRp ZGF0ZSBzcGxpdCBwb2ludCBkYXRhICovDQogCWludAkJCW1heHNwbGl0czsJCS8qIG1heGltdW0g bnVtYmVyIG9mIHNwbGl0cyAqLw0KQEAgLTE3Miw2ICsxNzUsMjMgQEAgX2J0X2ZpbmRzcGxpdGxv YyhSZWxhdGlvbiByZWwsDQogCW9sZGRhdGFpdGVtc3RvdGFsID0gcmlnaHRzcGFjZSAtIChpbnQp IFBhZ2VHZXRFeGFjdEZyZWVTcGFjZShvcmlncGFnZSk7DQogCWxlYWZmaWxsZmFjdG9yID0gQlRH ZXRGaWxsRmFjdG9yKHJlbCk7DQogDQorCS8qDQorCSAqIE9uIGEgcHJlZml4LWNvbXByZXNzZWQg bGVhZiB0aGUgcGFnZSBjYXJyaWVzIGFuIGV4dHJhIFBSRUZJWCBpdGVtIHRoYXQNCisJICogaXMg bm90IGEgZGF0YSBpdGVtLiAgVGhlIHNwbGl0IGlzIHJlYXNvbmVkIGFib3V0IGluIENPREVEIChv bi1wYWdlKQ0KKwkgKiBieXRlcyAtLSB0aGUgcGh5c2ljYWwgcmVhbGl0eSBvZiB0aGUgcGFnZSBh bmQgb2YgZWFjaCByZWNvbXByZXNzZWQgaGFsZg0KKwkgKiAtLSBzbyBzdWJ0cmFjdCBvbmx5IHRo ZSBQUkVGSVggaXRlbSdzIHNwYWNlIGZyb20gb2xkZGF0YWl0ZW1zdG90YWwgYW5kDQorCSAqIHVz ZSB0aGUgb24tcGFnZSAoY29kZWQpIGl0ZW0gc2l6ZXMgaW4gdGhlIHNjYW4gYmVsb3cuICAoUGxh aW4tc2l6ZQ0KKwkgKiBhY2NvdW50aW5nIGlzIG5vdCB1c2FibGUgaGVyZTogYSBjb21wcmVzc2Vk IGxlYWYgY2FuIGhvbGQgZmFyIG1vcmUNCisJICogbG9naWNhbCBkYXRhIHRoYW4gdHdvIHBsYWlu IHBhZ2VzLCBzbyBhIHBsYWluIHNwbGl0IGNhbiBiZSBpbmZlYXNpYmxlLikNCisJICovDQorCWlm IChQX0hBU1BSRUZJWChvcGFxdWUpKQ0KKwl7DQorCQlJdGVtSWQJCXBpaSA9IFBhZ2VHZXRJdGVt SWQob3JpZ3BhZ2UsIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKTsNCisNCisJCW9sZGRhdGFp dGVtc3RvdGFsIC09IChpbnQpIChNQVhBTElHTihJdGVtSWRHZXRMZW5ndGgocGlpKSkgKw0KKwkJ CQkJCQkJCXNpemVvZihJdGVtSWREYXRhKSk7DQorCX0NCisNCiAJLyogUGFzc2VkLWluIG5ld2l0 ZW1zeiBpcyBNQVhBTElHTkVEIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIGxpbmUgcG9pbnRlciAqLw0K IAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERhdGEpOw0KIAlzdGF0ZS5yZWwgPSByZWw7DQpA QCAtMTg1LDYgKzIwNSw3IEBAIF9idF9maW5kc3BsaXRsb2MoUmVsYXRpb24gcmVsLA0KIAlzdGF0 ZS5vbGRkYXRhaXRlbXN0b3RhbCA9IG9sZGRhdGFpdGVtc3RvdGFsOw0KIAlzdGF0ZS5taW5maXJz dHJpZ2h0c3ogPSBTSVpFX01BWDsNCiAJc3RhdGUubmV3aXRlbW9mZiA9IG5ld2l0ZW1vZmY7DQor CXN0YXRlLmhhc3ByZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQogDQogCS8qIG5ld2l0ZW0g Y2Fubm90IGJlIGEgcG9zdGluZyBsaXN0IGl0ZW0gKi8NCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQ b3N0aW5nKG5ld2l0ZW0pKTsNCkBAIC00NjMsNiArNDg0LDE5IEBAIF9idF9yZWNzcGxpdGxvYyhG aW5kU3BsaXREYXRhICpzdGF0ZSwNCiAJbmV3aXRlbWlzZmlyc3RyaWdodCA9IChmaXJzdHJpZ2h0 b2ZmID09IHN0YXRlLT5uZXdpdGVtb2ZmICYmDQogCQkJCQkJICAgIW5ld2l0ZW1vbmxlZnQpOw0K IA0KKwkvKg0KKwkgKiBSZWplY3QgYSBzcGxpdCB0aGF0IHdvdWxkIGxlYXZlIHRoZSBsZWZ0IHBh Z2Ugd2l0aCBubyBkYXRhIGl0ZW1zIGF0IGFsbA0KKwkgKiAoZmlyc3RyaWdodG9mZiBhdCB0aGUg Zmlyc3QgZGF0YSBrZXksIHdpdGggbmV3aXRlbSBub3Qgb24gdGhlIGxlZnQpLg0KKwkgKiBVcHN0 cmVhbSdzIHNwbGl0LXBvaW50IGhldXJpc3RpY3MgbmV2ZXIgY2hvb3NlIHN1Y2ggYSBwb2ludCBm b3IgYSBwbGFpbg0KKwkgKiBwYWdlOyBvbiBhIHByZWZpeC1jb21wcmVzc2VkIHBhZ2UgdGhlIGNv ZGVkLXNpemUgYWNjb3VudGluZyBjYW4gbWFrZSBpdA0KKwkgKiBsb29rIGF0dHJhY3RpdmUsIGFu ZCBfYnRfc3BsaXQgY2Fubm90IGZvcm0gYSBsZWZ0IGhpZ2gga2V5IGZyb20gYQ0KKwkgKiBub25l eGlzdGVudCBsYXN0bGVmdC4NCisJICovDQorCWlmIChzdGF0ZS0+aGFzcHJlZml4ICYmDQorCQlm aXJzdHJpZ2h0b2ZmID09IFBfRklSU1REQVRBS0VZKEJUUGFnZUdldE9wYXF1ZShzdGF0ZS0+b3Jp Z3BhZ2UpKSAmJg0KKwkJIW5ld2l0ZW1vbmxlZnQpDQorCQlyZXR1cm47DQorDQogCWlmIChuZXdp dGVtaXNmaXJzdHJpZ2h0KQ0KIAkJZmlyc3RyaWdodHN6ID0gc3RhdGUtPm5ld2l0ZW1zejsNCiAJ ZWxzZQ0KQEAgLTY4Niw4ICs3MjAsMTIgQEAgX2J0X2FmdGVybmV3aXRlbW9mZihGaW5kU3BsaXRE YXRhICpzdGF0ZSwgT2Zmc2V0TnVtYmVyIG1heG9mZiwNCiAJICovDQogCWlmIChzdGF0ZS0+bmV3 aXRlbW9mZiA+IG1heG9mZikNCiAJew0KKwkJQlRJdGVtQnVmCXRidWY7DQorDQogCQlpdGVtaWQg PSBQYWdlR2V0SXRlbUlkKHN0YXRlLT5vcmlncGFnZSwgbWF4b2ZmKTsNCiAJCXR1cCA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCk7DQorCQlpZiAoc3Rh dGUtPmhhc3ByZWZpeCkNCisJCQl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShzdGF0ZS0+b3JpZ3Bh Z2UsIHR1cCwgJnRidWYpOw0KIAkJa2VlcG5hdHRzID0gX2J0X2tlZXBfbmF0dHNfZmFzdChzdGF0 ZS0+cmVsLCB0dXAsIHN0YXRlLT5uZXdpdGVtKTsNCiANCiAJCWlmIChrZWVwbmF0dHMgPiAxICYm IGtlZXBuYXR0cyA8PSBua2V5YXR0cykNCkBAIC03MTQsMTIgKzc1MiwyMCBAQCBfYnRfYWZ0ZXJu ZXdpdGVtb2ZmKEZpbmRTcGxpdERhdGEgKnN0YXRlLCBPZmZzZXROdW1iZXIgbWF4b2ZmLA0KIAkg Ki8NCiAJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3BhZ2UsIE9mZnNldE51bWJl clByZXYoc3RhdGUtPm5ld2l0ZW1vZmYpKTsNCiAJdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJ dGVtKHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKTsNCi0JLyogRG8gY2hlYXBlciB0ZXN0IGZpcnN0 ICovDQorCS8qIERvIGNoZWFwZXIgdGVzdCBmaXJzdCAodF90aWQgYW5kIHRoZSBwb3N0aW5nIGJp dCBzdXJ2aXZlIGNvZGluZykgKi8NCiAJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcodHVwKSB8fA0K IAkJIV9idF9hZGphY2VudGh0aWQoJnR1cC0+dF90aWQsICZzdGF0ZS0+bmV3aXRlbS0+dF90aWQp KQ0KIAkJcmV0dXJuIGZhbHNlOw0KIAkvKiBDaGVjayBzYW1lIGNvbmRpdGlvbnMgYXMgcmlnaHRt b3N0IGl0ZW0gY2FzZSwgdG9vICovDQotCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzX2Zhc3Qo c3RhdGUtPnJlbCwgdHVwLCBzdGF0ZS0+bmV3aXRlbSk7DQorCWlmIChzdGF0ZS0+aGFzcHJlZml4 KQ0KKwl7DQorCQlCVEl0ZW1CdWYJdGJ1ZjsNCisNCisJCXR1cCA9IF9idF9wcmVmaXhfZGVjb2Rl KHN0YXRlLT5vcmlncGFnZSwgdHVwLCAmdGJ1Zik7DQorCQlrZWVwbmF0dHMgPSBfYnRfa2VlcF9u YXR0c19mYXN0KHN0YXRlLT5yZWwsIHR1cCwgc3RhdGUtPm5ld2l0ZW0pOw0KKwl9DQorCWVsc2UN CisJCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzX2Zhc3Qoc3RhdGUtPnJlbCwgdHVwLCBzdGF0 ZS0+bmV3aXRlbSk7DQogDQogCWlmIChrZWVwbmF0dHMgPiAxICYmIGtlZXBuYXR0cyA8PSBua2V5 YXR0cykNCiAJew0KQEAgLTExNjAsMTIgKzEyMDYsMzggQEAgc3RhdGljIGlubGluZSBJbmRleFR1 cGxlDQogX2J0X3NwbGl0X2xhc3RsZWZ0KEZpbmRTcGxpdERhdGEgKnN0YXRlLCBTcGxpdFBvaW50 ICpzcGxpdCkNCiB7DQogCUl0ZW1JZAkJaXRlbWlkOw0KKwlPZmZzZXROdW1iZXIgb2ZmOw0KIA0K IAlpZiAoc3BsaXQtPm5ld2l0ZW1vbmxlZnQgJiYgc3BsaXQtPmZpcnN0cmlnaHRvZmYgPT0gc3Rh dGUtPm5ld2l0ZW1vZmYpDQogCQlyZXR1cm4gc3RhdGUtPm5ld2l0ZW07DQogDQotCWl0ZW1pZCA9 IFBhZ2VHZXRJdGVtSWQoc3RhdGUtPm9yaWdwYWdlLA0KLQkJCQkJCSAgIE9mZnNldE51bWJlclBy ZXYoc3BsaXQtPmZpcnN0cmlnaHRvZmYpKTsNCisJb2ZmID0gT2Zmc2V0TnVtYmVyUHJldihzcGxp dC0+Zmlyc3RyaWdodG9mZik7DQorDQorCS8qDQorCSAqIE9uIGEgcHJlZml4LWNvbXByZXNzZWQg bGVhZiB0aGUgUFJFRklYIGl0ZW0gc2l0cyBqdXN0IGJlZm9yZSB0aGUgZmlyc3QNCisJICogZGF0 YSBpdGVtLiAgV2hlbiB0aGUgc3BsaXQgYm91bmRhcnkgaXMgYXQgdGhlIGZpcnN0IGRhdGEga2V5 LCB0aGUgZGF0YQ0KKwkgKiBwcmVkZWNlc3NvciBpcyB0aGUgaGlnaCBrZXkgb24gYSBwbGFpbiBw YWdlIChhIHBpdm90LCByZWFkIHBsYWluKTsgYQ0KKwkgKiByaWdodG1vc3QgcGFnZSBoYXMgbm9u ZSwgc28gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBkYXRhIGl0ZW0gKHRoaXMgb25seQ0KKwkgKiBm ZWVkcyBwZW5hbHR5IGVzdGltYXRpb24sIG5ldmVyIHBsYWNlbWVudCkuICBOZXZlciByZWFkIHRo ZSBQUkVGSVggaXRlbQ0KKwkgKiBhcyBhIGRhdGEgdHVwbGUuDQorCSAqLw0KKwlpZiAoc3RhdGUt Pmhhc3ByZWZpeCkNCisJew0KKwkJQlRQYWdlT3BhcXVlIG9wID0gQlRQYWdlR2V0T3BhcXVlKHN0 YXRlLT5vcmlncGFnZSk7DQorDQorCQlpZiAob2ZmID09IEJUUGFnZUdldFByZWZpeE9mZihvcCkp DQorCQl7DQorCQkJaWYgKCFQX1JJR0hUTU9TVChvcCkpDQorCQkJCXJldHVybiAoSW5kZXhUdXBs ZSkgUGFnZUdldEl0ZW0oc3RhdGUtPm9yaWdwYWdlLA0KKwkJCQkJCQkJCQkJCVBhZ2VHZXRJdGVt SWQoc3RhdGUtPm9yaWdwYWdlLCBQX0hJS0VZKSk7DQorCQkJb2ZmID0gUF9GSVJTVERBVEFLRVko b3ApOw0KKwkJfQ0KKwkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3BhZ2UsIG9m Zik7DQorCQlyZXR1cm4gX2J0X3ByZWZpeF9kZWNvZGUoc3RhdGUtPm9yaWdwYWdlLA0KKwkJCQkJ CQkJIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCksDQor CQkJCQkJCQkgJnN0YXRlLT5sYnVmKTsNCisJfQ0KKwlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHN0 YXRlLT5vcmlncGFnZSwgb2ZmKTsNCiAJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShz dGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCk7DQogfQ0KIA0KQEAgLTExODEsNSArMTI1Myw5IEBAIF9i dF9zcGxpdF9maXJzdHJpZ2h0KEZpbmRTcGxpdERhdGEgKnN0YXRlLCBTcGxpdFBvaW50ICpzcGxp dCkNCiAJCXJldHVybiBzdGF0ZS0+bmV3aXRlbTsNCiANCiAJaXRlbWlkID0gUGFnZUdldEl0ZW1J ZChzdGF0ZS0+b3JpZ3BhZ2UsIHNwbGl0LT5maXJzdHJpZ2h0b2ZmKTsNCisJaWYgKHN0YXRlLT5o YXNwcmVmaXgpDQorCQlyZXR1cm4gX2J0X3ByZWZpeF9kZWNvZGUoc3RhdGUtPm9yaWdwYWdlLA0K KwkJCQkJCQkJIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1p ZCksDQorCQkJCQkJCQkgJnN0YXRlLT5yYnVmKTsNCiAJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCk7DQogfQ0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYw0KaW5kZXggODVjMWI2MzI1MjIuLjVkYzJiMmYzMDUwIDEwMDY0NA0KLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jDQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMNCkBAIC02MDIsNyArNjAyLDkgQEAgYnRvcHRpb25z KERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpDQogCQl7InZhY3V1bV9jbGVhbnVwX2lu ZGV4X3NjYWxlX2ZhY3RvciIsIFJFTE9QVF9UWVBFX1JFQUwsDQogCQlvZmZzZXRvZihCVE9wdGlv bnMsIHZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxlX2ZhY3Rvcil9LA0KIAkJeyJkZWR1cGxpY2F0 ZV9pdGVtcyIsIFJFTE9QVF9UWVBFX0JPT0wsDQotCQlvZmZzZXRvZihCVE9wdGlvbnMsIGRlZHVw bGljYXRlX2l0ZW1zKX0NCisJCW9mZnNldG9mKEJUT3B0aW9ucywgZGVkdXBsaWNhdGVfaXRlbXMp fSwNCisJCXsicHJlZml4X2NvbXByZXNzaW9uIiwgUkVMT1BUX1RZUEVfQk9PTCwNCisJCW9mZnNl dG9mKEJUT3B0aW9ucywgcHJlZml4X2NvbXByZXNzaW9uKX0NCiAJfTsNCiANCiAJcmV0dXJuIChi eXRlYSAqKSBidWlsZF9yZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRlLA0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR4bG9nLmMNCmluZGV4IGRmZjdkMjg2ZmM4Li4xZTU4MjUxOTIzNyAxMDA2 NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jDQorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYw0KQEAgLTI0Myw2ICsyNDMsMjExIEBAIGJ0 cmVlX3hsb2dfaW5zZXJ0KGJvb2wgaXNsZWFmLCBib29sIGlzbWV0YSwgYm9vbCBwb3N0aW5nLA0K IAkJX2J0X3Jlc3RvcmVfbWV0YShyZWNvcmQsIDIpOw0KIH0NCiANCisvKg0KKyAqIFJlcGxheSBh IHByZWZpeC1jb21wcmVzc2VkIGxlYWYgcGFnZSBzcGxpdC4NCisgKg0KKyAqIFJhdGhlciB0aGFu IHJlcGxheSBsb2dnZWQgdHVwbGVzICh3aG9zZSBjb2RlZCBwaHlzaWNhbCBsYXlvdXQNCisgKiBf YnRfcmVzdG9yZV9wYWdlIGNvdWxkIG5vdCByZXByb2R1Y2UpLCByZWJ1aWxkIGJvdGggaGFsdmVz IHRoZSB3YXkgdGhlDQorICogcHJpbWFyeSBkaWQ6IGNvbGxlY3QgdGhlIHNwbGl0J3MgcGxhaW4g aXRlbXMgZnJvbSB0aGUgcHJlLXNwbGl0IG9yaWdpbmFsDQorICogcGFnZSAoYmxvY2sgMCkgd2l0 aCBfYnRfc3BsaXRfbGVhZl9jb2xsZWN0LCB0aGVuIGxheSBlYWNoIGhhbGYgb3V0IGNvZGVkDQor ICogYWdhaW5zdCBpdHMgY2hvc2VuIHByZWZpeCAoY2FycmllZCBpbiB0aGUgcmVjb3JkKSB3aXRo IF9idF9zcGxpdF9sZWFmX2xheW91dC4NCisgKiBUaGUgcmVzdWx0IGlzIGJ5dGUtaWRlbnRpY2Fs IHRvIHRoZSBwcmltYXJ5LCBzbyBubyBmdWxsLXBhZ2UgaW1hZ2UgaXMNCisgKiBuZWVkZWQuICBU aGUgcmVjb3JkJ3MgYmxvY2stMCBkYXRhIGNhcnJpZXMsIGluIG9yZGVyOiBuZXdpdGVtICh3aGVu IGl0IHdlbnQNCisgKiBvbiB0aGUgbGVmdCwgb3IgZm9yIGEgcG9zdGluZyBzcGxpdCksIHRoZSBs ZWZ0IGhpZ2gga2V5LCBhbmQgdGhlIGxlZnQgaGFsZidzDQorICogcHJlZml4IGJ5dGVzOyBibG9j ay0xIGRhdGEgY2FycmllcyB0aGUgcmlnaHQgaGFsZidzIHByZWZpeCBieXRlcy4NCisgKi8NCitz dGF0aWMgdm9pZA0KK2J0cmVlX3hsb2dfc3BsaXRfcHJlZml4KFhMb2dSZWFkZXJTdGF0ZSAqcmVj b3JkLCBCbG9ja051bWJlciBvcmlncGFnZW51bWJlciwNCisJCQkJCQlCbG9ja051bWJlciByaWdo dHBhZ2VudW1iZXIsIEJsb2NrTnVtYmVyIHNwYWdlbnVtYmVyLA0KKwkJCQkJCWJvb2wgbmV3aXRl bW9ubGVmdCkNCit7DQorCVhMb2dSZWNQdHIJbHNuID0gcmVjb3JkLT5FbmRSZWNQdHI7DQorCXhs X2J0cmVlX3NwbGl0ICp4bHJlYyA9ICh4bF9idHJlZV9zcGxpdCAqKSBYTG9nUmVjR2V0RGF0YShy ZWNvcmQpOw0KKwlCdWZmZXIJCXJidWY7DQorCUJ1ZmZlcgkJb3JpZ2J1ZjsNCisJUGFnZQkJb3Jp Z3BhZ2U7DQorCUJUUGFnZU9wYXF1ZSBvb3BhcXVlOw0KKwljaGFyCSAgICpkYXRhcG9zOw0KKwlT aXplCQlkYXRhbGVuOw0KKwlJbmRleFR1cGxlCW5ld2l0ZW0gPSBOVUxMOw0KKwlJbmRleFR1cGxl CWxlZnRfaGlrZXk7DQorCUluZGV4VHVwbGUJcmlnaHRfaGlrZXkgPSBOVUxMOw0KKwlJbmRleFR1 cGxlCW5wb3N0aW5nID0gTlVMTDsNCisJU2l6ZQkJbmV3aXRlbXN6ID0gMDsNCisJY29uc3QgY2hh ciAqbGVmdHByZWZpeCA9IE5VTEw7DQorCWNvbnN0IGNoYXIgKnJpZ2h0cHJlZml4ID0gTlVMTDsN CisJSW5kZXhUdXBsZQlyaWdodGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07DQorCWludAkJ CW5yaWdodCA9IDA7DQorCVBhZ2UJCXJpZ2h0cGFnZTsNCisJQlRQYWdlT3BhcXVlIHJvcGFxdWU7 DQorCVhMb2dSZWRvQWN0aW9uIG9yaWdhY3Rpb247DQorDQorCS8qDQorCSAqIFRoZSByaWdodCAo bmV3KSBwYWdlIGlzIHJlYnVpbHQgZW50aXJlbHkgZnJvbSBkYXRhIGxvZ2dlZCB3aXRoIHRoZQ0K KwkgKiByZWNvcmQsIGluZGVwZW5kZW50IG9mIGJsb2NrIDAsIGJlY2F1c2UgYmxvY2sgMCBtYXkg YmUgcmVzdG9yZWQgZnJvbSBhbg0KKwkgKiBhdXRvbWF0aWMgZnVsbC1wYWdlIGltYWdlIChzbyBp dHMgbGl2ZSBjb250ZW50cyBhZnRlciByZWRvIGFyZSB0aGUgbGVmdA0KKwkgKiBoYWxmLCBub3Qg dGhlIHByZS1zcGxpdCBwYWdlKS4gIEJsb2NrLTEgZGF0YSBpcywgaW4gb3JkZXI6IHRoZSByaWdo dA0KKwkgKiBoYWxmJ3MgY2hvc2VuIHByZWZpeCBieXRlcyAocmlnaHRwcmVmaXhsZW4pLCB0aGUg cmlnaHQgaGlnaCBrZXkgd2hlbiB0aGUNCisJICogc3BsaXQgaXMgbm90IHJpZ2h0bW9zdCAoc3Bh Z2VudW1iZXIgIT0gUF9OT05FKSwgdGhlbiB0aGUgcmlnaHQgaGFsZidzDQorCSAqIHBsYWluIGRh dGEgaXRlbXMgaW4gb2Zmc2V0IG9yZGVyIChzZWxmLWRlc2NyaWJpbmcgYnkgSW5kZXhUdXBsZVNp emUpLg0KKwkgKi8NCisJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAxLCAm ZGF0YWxlbik7DQorCWlmICh4bHJlYy0+ZmxhZ3MgJiBYTEhfU1BMSVRfUkZQSSkNCisJew0KKwkJ LyoNCisJCSAqIFRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXMgd291bGQgaGF2ZSBvdmVyZmxv d2VkIHRoZSBXQUwgcmVjb3JkLA0KKwkJICogc28gdGhlIHByaW1hcnkgY2FycmllZCB0aGUgY29k ZWQgcmlnaHQgcGFnZSBhcyBhIGZvcmNlZCBmdWxsLXBhZ2UNCisJCSAqIGltYWdlLiAgUmVzdG9y ZSBpdCBmcm9tIHRoYXQgaW1hZ2UuDQorCQkgKi8NCisJCWlmIChYTG9nUmVhZEJ1ZmZlckZvclJl ZG8ocmVjb3JkLCAxLCAmcmJ1ZikgIT0gQkxLX1JFU1RPUkVEKQ0KKwkJCWVsb2coRVJST1IsICJw cmVmaXggbGVhZiBzcGxpdCByaWdodCBwYWdlIGxhY2tzIGl0cyBmdWxsLXBhZ2UgaW1hZ2UiKTsN CisJfQ0KKwllbHNlDQorCXsNCisJCWlmICh4bHJlYy0+cmlnaHRwcmVmaXhsZW4gPiAwKQ0KKwkJ ew0KKwkJCXJpZ2h0cHJlZml4ID0gZGF0YXBvczsNCisJCQlkYXRhcG9zICs9IE1BWEFMSUdOKHhs cmVjLT5yaWdodHByZWZpeGxlbik7DQorCQkJZGF0YWxlbiAtPSBNQVhBTElHTih4bHJlYy0+cmln aHRwcmVmaXhsZW4pOw0KKwkJfQ0KKwkJaWYgKHNwYWdlbnVtYmVyICE9IFBfTk9ORSkNCisJCXsN CisJCQlyaWdodF9oaWtleSA9IChJbmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCWRhdGFwb3MgKz0g TUFYQUxJR04oSW5kZXhUdXBsZVNpemUocmlnaHRfaGlrZXkpKTsNCisJCQlkYXRhbGVuIC09IE1B WEFMSUdOKEluZGV4VHVwbGVTaXplKHJpZ2h0X2hpa2V5KSk7DQorCQl9DQorCQl3aGlsZSAoZGF0 YWxlbiA+IDApDQorCQl7DQorCQkJSW5kZXhUdXBsZQlpdCA9IChJbmRleFR1cGxlKSBkYXRhcG9z Ow0KKwkJCVNpemUJCXN6ID0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXQpKTsNCisNCisJCQlB c3NlcnQobnJpZ2h0IDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsNCisJCQlyaWdodGl0ZW1zW25y aWdodCsrXSA9IGl0Ow0KKwkJCWRhdGFwb3MgKz0gc3o7DQorCQkJZGF0YWxlbiAtPSBzejsNCisJ CX0NCisJCUFzc2VydChkYXRhbGVuID09IDApOw0KKw0KKwkJcmJ1ZiA9IFhMb2dJbml0QnVmZmVy Rm9yUmVkbyhyZWNvcmQsIDEpOw0KKwkJcmlnaHRwYWdlID0gQnVmZmVyR2V0UGFnZShyYnVmKTsN CisJCV9idF9wYWdlaW5pdChyaWdodHBhZ2UsIEJ1ZmZlckdldFBhZ2VTaXplKHJidWYpKTsNCisJ CXJvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocmlnaHRwYWdlKTsNCisJCXJvcGFxdWUtPmJ0cG9f cHJldiA9IG9yaWdwYWdlbnVtYmVyOw0KKwkJcm9wYXF1ZS0+YnRwb19uZXh0ID0gc3BhZ2VudW1i ZXI7DQorCQlyb3BhcXVlLT5idHBvX2xldmVsID0geGxyZWMtPmxldmVsOw0KKwkJcm9wYXF1ZS0+ YnRwb19mbGFncyA9IEJUUF9MRUFGOw0KKwkJcm9wYXF1ZS0+YnRwb19jeWNsZWlkID0gMDsNCisJ CWlmICghX2J0X3NwbGl0X2xlYWZfbGF5b3V0KHJpZ2h0cGFnZSwgcmlnaHRfaGlrZXksIHJpZ2h0 aXRlbXMsIG5yaWdodCwNCisJCQkJCQkJCSAgIHJpZ2h0cHJlZml4LCB4bHJlYy0+cmlnaHRwcmVm aXhsZW4pKQ0KKwkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcmVwbGF5IHJpZ2h0IGhhbGYgb2Yg YSBwcmVmaXggbGVhZiBzcGxpdCIpOw0KKwkJUGFnZVNldExTTihyaWdodHBhZ2UsIGxzbik7DQor CX0NCisJTWFya0J1ZmZlckRpcnR5KHJidWYpOw0KKw0KKwkvKg0KKwkgKiBSZWJ1aWxkIHRoZSBs ZWZ0IChvcmlnaW5hbCkgcGFnZSBmcm9tIHRoZSBwcmUtc3BsaXQgcGFnZSwgdW5sZXNzIGl0IHdh cw0KKwkgKiByZXN0b3JlZCBmcm9tIGEgZnVsbC1wYWdlIGltYWdlICh0aGVuIGl0IGlzIGFscmVh ZHkgdGhlIGZpbmFsIGxlZnQNCisJICogaGFsZikuICBCbG9jay0wIGRhdGEgaXM6IFtuZXdpdGVt IChsZWZ0L3Bvc3RpbmcpXSBbbGVmdCBoaWdoIGtleV0NCisJICogW2xlZnQgcHJlZml4XS4gIFRo ZSBsZWZ0IHBsYWluIGl0ZW1zIGNvbWUgZnJvbSB0aGUgcHJlLXNwbGl0IHBhZ2UuDQorCSAqLw0K KwlvcmlnYWN0aW9uID0gWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29yZCwgMCwgJm9yaWdidWYp Ow0KKwlvcmlncGFnZSA9IEJ1ZmZlckdldFBhZ2Uob3JpZ2J1Zik7DQorDQorCWlmIChvcmlnYWN0 aW9uID09IEJMS19ORUVEU19SRURPKQ0KKwl7DQorCQlJbmRleFR1cGxlICpsZWZ0aXRlbXM7DQor CQlpbnQJCQlubGVmdDsNCisJCU9mZnNldE51bWJlciBvcmlncGFnZXBvc3RpbmdvZmYgPSBJbnZh bGlkT2Zmc2V0TnVtYmVyOw0KKwkJUGFnZQkJbGVmdHBhZ2U7DQorCQlCVFBhZ2VPcGFxdWUgbG9w YXF1ZTsNCisNCisJCW9vcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUob3JpZ3BhZ2UpOw0KKw0KKwkJ ZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxlbik7DQorCQlp ZiAobmV3aXRlbW9ubGVmdCB8fCB4bHJlYy0+cG9zdGluZ29mZiAhPSAwKQ0KKwkJew0KKwkJCW5l d2l0ZW0gPSAoSW5kZXhUdXBsZSkgZGF0YXBvczsNCisJCQluZXdpdGVtc3ogPSBNQVhBTElHTihJ bmRleFR1cGxlU2l6ZShuZXdpdGVtKSk7DQorCQkJZGF0YXBvcyArPSBuZXdpdGVtc3o7DQorCQkJ ZGF0YWxlbiAtPSBuZXdpdGVtc3o7DQorCQl9DQorCQlsZWZ0X2hpa2V5ID0gKEluZGV4VHVwbGUp IGRhdGFwb3M7DQorCQlkYXRhcG9zICs9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGxlZnRfaGlr ZXkpKTsNCisJCWRhdGFsZW4gLT0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVmdF9oaWtleSkp Ow0KKwkJaWYgKHhscmVjLT5sZWZ0cHJlZml4bGVuID4gMCkNCisJCXsNCisJCQlsZWZ0cHJlZml4 ID0gZGF0YXBvczsNCisJCQlkYXRhcG9zICs9IHhscmVjLT5sZWZ0cHJlZml4bGVuOw0KKwkJCWRh dGFsZW4gLT0geGxyZWMtPmxlZnRwcmVmaXhsZW47DQorCQl9DQorCQlBc3NlcnQoZGF0YWxlbiA9 PSAwKTsNCisNCisJCWlmICh4bHJlYy0+cG9zdGluZ29mZiAhPSAwKQ0KKwkJew0KKwkJCUl0ZW1J ZAkJaXRlbWlkOw0KKwkJCUluZGV4VHVwbGUJb3Bvc3Rpbmc7DQorCQkJQlRJdGVtQnVmCW9idWY7 DQorDQorCQkJb3JpZ3BhZ2Vwb3N0aW5nb2ZmID0gT2Zmc2V0TnVtYmVyUHJldih4bHJlYy0+bmV3 aXRlbW9mZik7DQorCQkJbmV3aXRlbSA9IENvcHlJbmRleFR1cGxlKG5ld2l0ZW0pOw0KKwkJCWl0 ZW1pZCA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIG9yaWdwYWdlcG9zdGluZ29mZik7DQorCQkJ b3Bvc3RpbmcgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7DQor CQkJaWYgKFBfSEFTUFJFRklYKG9vcGFxdWUpKQ0KKwkJCQlvcG9zdGluZyA9IF9idF9wcmVmaXhf ZGVjb2RlKG9yaWdwYWdlLCBvcG9zdGluZywgJm9idWYpOw0KKwkJCW5wb3N0aW5nID0gX2J0X3N3 YXBfcG9zdGluZyhuZXdpdGVtLCBvcG9zdGluZywgeGxyZWMtPnBvc3RpbmdvZmYpOw0KKwkJfQ0K Kw0KKwkJbGVmdGl0ZW1zID0gcGFsbG9jX2FycmF5KEluZGV4VHVwbGUsIFBhZ2VHZXRNYXhPZmZz ZXROdW1iZXIob3JpZ3BhZ2UpICsgMik7DQorCQlyaWdodGl0ZW1zWzBdID0gTlVMTDsJLyogbm90 IHJldXNlZCBiZWxvdyAqLw0KKwkJew0KKwkJCUluZGV4VHVwbGUJZHVtbXlyaWdodFtNYXhJbmRl eFR1cGxlc1BlclBhZ2VdOw0KKwkJCWludAkJCWR1bW15bnI7DQorDQorCQkJX2J0X3NwbGl0X2xl YWZfY29sbGVjdChvcmlncGFnZSwgeGxyZWMtPmZpcnN0cmlnaHRvZmYsDQorCQkJCQkJCQkgICB4 bHJlYy0+bmV3aXRlbW9mZiwgbmV3aXRlbSwgbmV3aXRlbW9ubGVmdCwNCisJCQkJCQkJCSAgIG9y aWdwYWdlcG9zdGluZ29mZiwgbnBvc3RpbmcsDQorCQkJCQkJCQkgICBsZWZ0aXRlbXMsICZubGVm dCwgZHVtbXlyaWdodCwgJmR1bW15bnIpOw0KKwkJfQ0KKw0KKwkJbGVmdHBhZ2UgPSBQYWdlR2V0 VGVtcFBhZ2VDb3B5U3BlY2lhbChvcmlncGFnZSk7DQorCQlsb3BhcXVlID0gQlRQYWdlR2V0T3Bh cXVlKGxlZnRwYWdlKTsNCisJCWxvcGFxdWUtPmJ0cG9fZmxhZ3MgPSBCVFBfTEVBRiB8IEJUUF9J TkNPTVBMRVRFX1NQTElUOw0KKwkJbG9wYXF1ZS0+YnRwb19wcmV2ID0gb29wYXF1ZS0+YnRwb19w cmV2Ow0KKwkJbG9wYXF1ZS0+YnRwb19uZXh0ID0gcmlnaHRwYWdlbnVtYmVyOw0KKwkJbG9wYXF1 ZS0+YnRwb19sZXZlbCA9IHhscmVjLT5sZXZlbDsNCisJCWxvcGFxdWUtPmJ0cG9fY3ljbGVpZCA9 IDA7DQorCQlpZiAoIV9idF9zcGxpdF9sZWFmX2xheW91dChsZWZ0cGFnZSwgbGVmdF9oaWtleSwg bGVmdGl0ZW1zLCBubGVmdCwNCisJCQkJCQkJCSAgIGxlZnRwcmVmaXgsIHhscmVjLT5sZWZ0cHJl Zml4bGVuKSkNCisJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHJlcGxheSBsZWZ0IGhhbGYgb2Yg YSBwcmVmaXggbGVhZiBzcGxpdCIpOw0KKwkJUGFnZVJlc3RvcmVUZW1wUGFnZShsZWZ0cGFnZSwg b3JpZ3BhZ2UpOw0KKwkJUGFnZVNldExTTihvcmlncGFnZSwgbHNuKTsNCisJCU1hcmtCdWZmZXJE aXJ0eShvcmlnYnVmKTsNCisJCXBmcmVlKGxlZnRpdGVtcyk7DQorCX0NCisNCisJLyogRml4IGxl ZnQtbGluayBvZiB0aGUgcGFnZSB0byB0aGUgcmlnaHQgb2YgdGhlIG5ldyByaWdodCBzaWJsaW5n LiAqLw0KKwlpZiAoc3BhZ2VudW1iZXIgIT0gUF9OT05FKQ0KKwl7DQorCQlCdWZmZXIJCXNidWY7 DQorDQorCQlpZiAoWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29yZCwgMiwgJnNidWYpID09IEJM S19ORUVEU19SRURPKQ0KKwkJew0KKwkJCVBhZ2UJCXNwYWdlID0gQnVmZmVyR2V0UGFnZShzYnVm KTsNCisJCQlCVFBhZ2VPcGFxdWUgc3BhZ2VvcCA9IEJUUGFnZUdldE9wYXF1ZShzcGFnZSk7DQor DQorCQkJc3BhZ2VvcC0+YnRwb19wcmV2ID0gcmlnaHRwYWdlbnVtYmVyOw0KKwkJCVBhZ2VTZXRM U04oc3BhZ2UsIGxzbik7DQorCQkJTWFya0J1ZmZlckRpcnR5KHNidWYpOw0KKwkJfQ0KKwkJaWYg KEJ1ZmZlcklzVmFsaWQoc2J1ZikpDQorCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihzYnVmKTsNCisJ fQ0KKw0KKwlVbmxvY2tSZWxlYXNlQnVmZmVyKHJidWYpOw0KKwlpZiAoQnVmZmVySXNWYWxpZChv cmlnYnVmKSkNCisJCVVubG9ja1JlbGVhc2VCdWZmZXIob3JpZ2J1Zik7DQorfQ0KKw0KIHN0YXRp YyB2b2lkDQogYnRyZWVfeGxvZ19zcGxpdChib29sIG5ld2l0ZW1vbmxlZnQsIFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQ0KIHsNCkBAIC0yNjQsNiArNDY5LDE4IEBAIGJ0cmVlX3hsb2dfc3BsaXQo Ym9vbCBuZXdpdGVtb25sZWZ0LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJaWYgKCFYTG9n UmVjR2V0QmxvY2tUYWdFeHRlbmRlZChyZWNvcmQsIDIsIE5VTEwsIE5VTEwsICZzcGFnZW51bWJl ciwgTlVMTCkpDQogCQlzcGFnZW51bWJlciA9IFBfTk9ORTsNCiANCisJLyoNCisJICogQSBwcmVm aXgtY29tcHJlc3NlZCBsZWFmIHNwbGl0IGlzIHJlcGxheWVkIGJ5IHJlYnVpbGRpbmcgYm90aCBo YWx2ZXMNCisJICogZnJvbSB0aGUgcHJlLXNwbGl0IG9yaWdpbmFsIHBhZ2UsIGV4YWN0bHkgYXMg dGhlIHByaW1hcnkgZGlkLCBzbyB0aGUNCisJICogY29kZWQgcGFnZXMgY29tZSBvdXQgYnl0ZS1p ZGVudGljYWwgd2l0aG91dCBhIGZ1bGwtcGFnZSBpbWFnZS4NCisJICovDQorCWlmICh4bHJlYy0+ ZmxhZ3MgJiBYTEhfU1BMSVRfTEVBRlBSRUZJWCkNCisJew0KKwkJYnRyZWVfeGxvZ19zcGxpdF9w cmVmaXgocmVjb3JkLCBvcmlncGFnZW51bWJlciwgcmlnaHRwYWdlbnVtYmVyLA0KKwkJCQkJCQkJ c3BhZ2VudW1iZXIsIG5ld2l0ZW1vbmxlZnQpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQogCS8qDQog CSAqIENsZWFyIHRoZSBpbmNvbXBsZXRlIHNwbGl0IGZsYWcgb24gdGhlIGFwcHJvcHJpYXRlIGNo aWxkIHBhZ2Ugb25lIGxldmVsDQogCSAqIGRvd24gd2hlbiBvcmlncGFnZS9idWYgaXMgYW4gaW50 ZXJuYWwgcGFnZSAodGhlcmUgbXVzdCBoYXZlIGJlZW4NCkBAIC0yODAsNyArNDk3LDcgQEAgYnRy ZWVfeGxvZ19zcGxpdChib29sIG5ld2l0ZW1vbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KQ0KIAlpZiAoIWlzbGVhZikNCiAJCV9idF9jbGVhcl9pbmNvbXBsZXRlX3NwbGl0KHJlY29yZCwg Myk7DQogDQotCS8qIFJlY29uc3RydWN0IHJpZ2h0IChuZXcpIHNpYmxpbmcgcGFnZSBmcm9tIHNj cmF0Y2ggKi8NCisJLyogUmVjb25zdHJ1Y3QgcmlnaHQgKG5ldykgc2libGluZyBwYWdlIGZyb20g dGhlIGxvZ2dlZCB0dXBsZXMuICovDQogCXJidWYgPSBYTG9nSW5pdEJ1ZmZlckZvclJlZG8ocmVj b3JkLCAxKTsNCiAJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAxLCAmZGF0 YWxlbik7DQogCXJwYWdlID0gQnVmZmVyR2V0UGFnZShyYnVmKTsNCkBAIC00NjgsNiArNjg1LDU2 IEBAIGJ0cmVlX3hsb2dfZGVkdXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQlCVERlZHVw U3RhdGUgc3RhdGU7DQogCQlCVERlZHVwSW50ZXJ2YWwgKmludGVydmFsczsNCiAJCVBhZ2UJCW5l d3BhZ2U7DQorCQlib29sCQlwYWdlcHJlZml4OwkJLyogc291cmNlIHBhZ2UgaXMgQlRQX1BSRUZJ WCAqLw0KKwkJQlRJdGVtQnVmCWN1cmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgdGhlIGN1 cnJlbnQgaXRlbSAqLw0KKwkJQlRJdGVtQnVmCWJhc2VidWY7CQkvKiBkZWNvZGUgc2NyYXRjaCBr ZXB0IGZvciB0aGUgcGVuZGluZyBiYXNlICovDQorDQorCQlpZiAoeGxyZWMtPnByZWZpeGxlbiA+ IDApDQorCQl7DQorCQkJLyoNCisJCQkgKiBQcmVmaXgtZGVkdXA6IHRoZSBkZWR1cGVkIHJlc3Vs dCB3YXMgY2FycmllZCBhcyB0aGUgY2hvc2VuIHByZWZpeA0KKwkJCSAqIGJ5dGVzLCB0aGVuICh1 bmxlc3MgcmlnaHRtb3N0KSB0aGUgaGlnaCBrZXksIHRoZW4gdGhlIGRlZHVwZWQNCisJCQkgKiBw bGFpbiBpdGVtcy4gIFJlYnVpbGQgdGhlIGNvZGVkIHBhZ2UgYnl0ZS1mb3ItYnl0ZSB0aGUgd2F5 IHRoZQ0KKwkJCSAqIHByaW1hcnkgZGlkLCB1c2luZyB0aGUgc2FtZSBsYXlvdXQgcm91dGluZSBh cyBhIHByZWZpeCBsZWFmIHNwbGl0Lg0KKwkJCSAqLw0KKwkJCVNpemUJCWRhdGFsZW47DQorCQkJ Y2hhcgkgICAqZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxl bik7DQorCQkJY29uc3QgY2hhciAqcHJlZml4ID0gZGF0YXBvczsNCisJCQlJbmRleFR1cGxlCWhp a2V5ID0gTlVMTDsNCisJCQlJbmRleFR1cGxlCWl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07 DQorCQkJaW50CQkJbml0ZW1zID0gMDsNCisNCisJCQlkYXRhcG9zICs9IE1BWEFMSUdOKHhscmVj LT5wcmVmaXhsZW4pOw0KKwkJCWRhdGFsZW4gLT0gTUFYQUxJR04oeGxyZWMtPnByZWZpeGxlbik7 DQorCQkJaWYgKHhscmVjLT5mbGFncyAmIFhMSF9ERURVUF9OT1RfUklHSFRNT1NUKQ0KKwkJCXsN CisJCQkJaGlrZXkgPSAoSW5kZXhUdXBsZSkgZGF0YXBvczsNCisJCQkJZGF0YXBvcyArPSBNQVhB TElHTihJbmRleFR1cGxlU2l6ZShoaWtleSkpOw0KKwkJCQlkYXRhbGVuIC09IE1BWEFMSUdOKElu ZGV4VHVwbGVTaXplKGhpa2V5KSk7DQorCQkJfQ0KKwkJCXdoaWxlIChkYXRhbGVuID4gMCkNCisJ CQl7DQorCQkJCUluZGV4VHVwbGUJaXQgPSAoSW5kZXhUdXBsZSkgZGF0YXBvczsNCisJCQkJU2l6 ZQkJc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShpdCkpOw0KKw0KKwkJCQlBc3NlcnQobml0 ZW1zIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsNCisJCQkJaXRlbXNbbml0ZW1zKytdID0gaXQ7 DQorCQkJCWRhdGFwb3MgKz0gc3o7DQorCQkJCWRhdGFsZW4gLT0gc3o7DQorCQkJfQ0KKwkJCUFz c2VydChkYXRhbGVuID09IDApOw0KKw0KKwkJCW5ld3BhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5 U3BlY2lhbChwYWdlKTsNCisJCQlCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSktPmJ0cG9fZmxhZ3Mg Jj0gfihCVFBfUFJFRklYIHwgQlRQX0hBU19HQVJCQUdFKTsNCisJCQlpZiAoIV9idF9zcGxpdF9s ZWFmX2xheW91dChuZXdwYWdlLCBoaWtleSwgaXRlbXMsIG5pdGVtcywNCisJCQkJCQkJCQkgICBw cmVmaXgsIHhscmVjLT5wcmVmaXhsZW4pKQ0KKwkJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHJl cGxheSBwcmVmaXggZGVkdXBsaWNhdGlvbiIpOw0KKwkJCVBhZ2VSZXN0b3JlVGVtcFBhZ2UobmV3 cGFnZSwgcGFnZSk7DQorCQkJUGFnZVNldExTTihwYWdlLCBsc24pOw0KKwkJCU1hcmtCdWZmZXJE aXJ0eShidWYpOw0KKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsNCisJCQlyZXR1cm47DQor CQl9DQogDQogCQlzdGF0ZSA9IHBhbGxvY19vYmplY3QoQlREZWR1cFN0YXRlRGF0YSk7DQogCQlz dGF0ZS0+ZGVkdXBsaWNhdGUgPSB0cnVlOwkvKiB1bnVzZWQgKi8NCkBAIC00ODcsNiArNzU0LDE5 IEBAIGJ0cmVlX3hsb2dfZGVkdXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQltYXhvZmYg PSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOw0KIAkJbmV3cGFnZSA9IFBhZ2VHZXRUZW1w UGFnZUNvcHlTcGVjaWFsKHBhZ2UpOw0KIA0KKwkJLyoNCisJCSAqIFRoZSBzb3VyY2UgcGFnZSBt YXkgYmUgcHJlZml4LWNvbXByZXNzZWQgZXZlbiBvbiB0aGUgb3JkaW5hcnkNCisJCSAqIChub24t cHJlZml4KSBkZWR1cCBwYXRoOiB0aGF0IGhhcHBlbnMgd2hlbiB0aGUgcHJpbWFyeSBkZWR1cGxp Y2F0ZWQNCisJCSAqIGEgcHJlZml4IHBhZ2UgYnV0IHJlLWNvbXByZXNzaW9uIG9mIHRoZSByZXN1 bHQgZGVjbGluZWQsIGxlYXZpbmcgYQ0KKwkJICogcGxhaW4gcGFnZSAocHJlZml4bGVuID09IDAs IG5vIGZ1bGwtcGFnZSBpbWFnZSkuICBSZXByb2R1Y2UgdGhlDQorCQkgKiBwcmltYXJ5OiBsYXkg dGhlIHJlc3VsdCBvdXQgcGxhaW4gYW5kIGRlY29kZSBlYWNoIGNvZGVkIGRhdGEgaXRlbQ0KKwkJ ICogYmVmb3JlIGZlZWRpbmcgaXQgdG8gdGhlIGRlZHVwIHN0YXRlIG1hY2hpbmUuICBUaGUgaGln aCBrZXkgaXMgYQ0KKwkJICogcGl2b3QgYW5kIGlzIG5ldmVyIGNvZGVkLg0KKwkJICovDQorCQlw YWdlcHJlZml4ID0gUF9IQVNQUkVGSVgob3BhcXVlKTsNCisJCWlmIChwYWdlcHJlZml4KQ0KKwkJ CUJUUGFnZUdldE9wYXF1ZShuZXdwYWdlKS0+YnRwb19mbGFncyAmPSB+QlRQX1BSRUZJWDsNCisN CiAJCWlmICghUF9SSUdIVE1PU1Qob3BhcXVlKSkNCiAJCXsNCiAJCQlJdGVtSWQJCWl0ZW1pZCA9 IFBhZ2VHZXRJdGVtSWQocGFnZSwgUF9ISUtFWSk7DQpAQCAtNTA1LDggKzc4NSwxOCBAQCBidHJl ZV94bG9nX2RlZHVwKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQ0KIAkJCUl0ZW1JZAkJaXRlbWlk ID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOw0KIAkJCUluZGV4VHVwbGUJaXR1cCA9IChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOw0KIA0KKwkJCS8qIERlY29kZSBv biBhIHByZWZpeCBzb3VyY2Ugc28ga2V5cy9wb3N0aW5nIGxpc3RzIGFyZSByZWFsLiAqLw0KKwkJ CWlmIChwYWdlcHJlZml4KQ0KKwkJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwgaXR1 cCwgJmN1cmJ1Zik7DQorDQogCQkJaWYgKG9mZm51bSA9PSBtaW5vZmYpDQorCQkJew0KKwkJCQkv KiBiYXNlIG11c3Qgc3Vydml2ZSB0aGUgd2hvbGUgcnVuOyBrZWVwIGl0IGluIGl0cyBvd24gYnVm ZmVyICovDQorCQkJCWlmIChwYWdlcHJlZml4KQ0KKwkJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVj b2RlKHBhZ2UsIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJ CQkJCQkJICZiYXNlYnVmKTsNCiAJCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0 dXAsIG9mZm51bSk7DQorCQkJfQ0KIAkJCWVsc2UgaWYgKHN0YXRlLT5uaW50ZXJ2YWxzIDwgeGxy ZWMtPm5pbnRlcnZhbHMgJiYNCiAJCQkJCSBzdGF0ZS0+YmFzZW9mZiA9PSBpbnRlcnZhbHNbc3Rh dGUtPm5pbnRlcnZhbHNdLmJhc2VvZmYgJiYNCiAJCQkJCSBzdGF0ZS0+bml0ZW1zIDwgaW50ZXJ2 YWxzW3N0YXRlLT5uaW50ZXJ2YWxzXS5uaXRlbXMpDQpAQCAtNTE2LDEyICs4MDYsMTUgQEAgYnRy ZWVfeGxvZ19kZWR1cChYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJCQl9DQogCQkJZWxzZQ0K IAkJCXsNCi0JCQkJX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlKTsNCisJ CQkJX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlLCBmYWxzZSk7DQorCQkJ CWlmIChwYWdlcHJlZml4KQ0KKwkJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkJICZiYXNl YnVmKTsNCiAJCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7 DQogCQkJfQ0KIAkJfQ0KIA0KLQkJX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0 YXRlKTsNCisJCV9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSwgZmFsc2Up Ow0KIAkJQXNzZXJ0KHN0YXRlLT5uaW50ZXJ2YWxzID09IHhscmVjLT5uaW50ZXJ2YWxzKTsNCiAJ CUFzc2VydChtZW1jbXAoc3RhdGUtPmludGVydmFscywgaW50ZXJ2YWxzLA0KIAkJCQkJICBzdGF0 ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50ZXJ2YWwpKSA9PSAwKTsNCkBAIC02MjEs MTEgKzkxNCwyMyBAQCBidHJlZV94bG9nX3ZhY3V1bShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkN CiAJCWlmICh4bHJlYy0+bmRlbGV0ZWQgPiAwKQ0KIAkJCVBhZ2VJbmRleE11bHRpRGVsZXRlKHBh Z2UsIChPZmZzZXROdW1iZXIgKikgcHRyLCB4bHJlYy0+bmRlbGV0ZWQpOw0KIA0KKwkJb3BhcXVl ID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KKw0KKwkJLyoNCisJCSAqIE1pcnJvciB0aGUgcHJp bWFyeTogYW4gZW1wdGllZCBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIGRyb3BzIGl0cw0KKwkJICog UFJFRklYIGl0ZW0gYW5kIHRoZSBCVFBfUFJFRklYIGZsYWcgKHNlZSBfYnRfZGVsaXRlbXNfdmFj dXVtKS4NCisJCSAqLw0KKwkJaWYgKFBfSEFTUFJFRklYKG9wYXF1ZSkgJiYNCisJCQlQYWdlR2V0 TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID09IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwkJ ew0KKwkJCVBhZ2VJbmRleFR1cGxlRGVsZXRlKHBhZ2UsIEJUUGFnZUdldFByZWZpeE9mZihvcGFx dWUpKTsNCisJCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorCQl9DQorDQog CQkvKg0KIAkJICogQ2xlYXIgdGhlIHZhY3V1bSBjeWNsZSBJRCwgYW5kIG1hcmsgdGhlIHBhZ2Ug YXMgbm90IGNvbnRhaW5pbmcgYW55DQogCQkgKiBMUF9ERUFEIGl0ZW1zDQogCQkgKi8NCi0JCW9w YXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsNCiAJCW9wYXF1ZS0+YnRwb19jeWNsZWlkID0g MDsNCiAJCW9wYXF1ZS0+YnRwb19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOw0KIA0KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaA0KaW5kZXggMzA5N2U5YmIxYWYuLmNhN2U2ODUyNTQyIDEwMDY0NA0KLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL25idHJlZS5oDQorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgNCkBAIC04Myw2ICs4Myw4IEBAIHR5cGVkZWYgQlRQYWdlT3BhcXVlRGF0YSAqQlRQYWdlT3Bh cXVlOw0KICNkZWZpbmUgQlRQX0hBU19HQVJCQUdFICgxIDw8IDYpCS8qIHBhZ2UgaGFzIExQX0RF QUQgdHVwbGVzIChkZXByZWNhdGVkKSAqLw0KICNkZWZpbmUgQlRQX0lOQ09NUExFVEVfU1BMSVQg KDEgPDwgNykJLyogcmlnaHQgc2libGluZydzIGRvd25saW5rIGlzIG1pc3NpbmcgKi8NCiAjZGVm aW5lIEJUUF9IQVNfRlVMTFhJRAkoMSA8PCA4KQkvKiBjb250YWlucyBCVERlbGV0ZWRQYWdlRGF0 YSAqLw0KKyNkZWZpbmUgQlRQX1BSRUZJWAkJKDEgPDwgOSkJLyogbGVhZiBrZXlzIGNvZGVkIGFn YWluc3QgYSBwYWdlIHByZWZpeA0KKwkJCQkJCQkJCSAqIChzZWUgbmJ0cHJlZml4LmMpICovDQog DQogLyoNCiAgKiBUaGUgbWF4IGFsbG93ZWQgdmFsdWUgb2YgYSBjeWNsZSBJRCBpcyBhIGJpdCBs ZXNzIHRoYW4gNjRLLiAgVGhpcyBpcw0KQEAgLTM2Nyw3ICszNjksNjEgQEAgdHlwZWRlZiBzdHJ1 Y3QgQlRWYWNTdGF0ZQ0KIA0KICNkZWZpbmUgUF9ISUtFWQkJCQkoKE9mZnNldE51bWJlcikgMSkN CiAjZGVmaW5lIFBfRklSU1RLRVkJCQkoKE9mZnNldE51bWJlcikgMikNCi0jZGVmaW5lIFBfRklS U1REQVRBS0VZKG9wYXF1ZSkJKFBfUklHSFRNT1NUKG9wYXF1ZSkgPyBQX0hJS0VZIDogUF9GSVJT VEtFWSkNCisNCisvKg0KKyAqIExlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbiAoc2VlIG5idHBy ZWZpeC5jIGZvciB0aGUgZm9ybWF0IGFuZCBjb2RlKS4NCisgKg0KKyAqIEEgbGVhZiBvZiBhbiBp bmRleCB3aG9zZSBwcmVmaXhfY29tcHJlc3Npb24gcmVsb3B0aW9uIGlzIG9uLCBhbmQgd2hvc2UN CisgKiBmaXJzdCBrZXkgY29sdW1uIGlzIG9mIGEgdmFybGVuYSB0eXBlLCBtYXkgYmUgZmxhZ2dl ZCBCVFBfUFJFRklYLiAgU3VjaCBhDQorICogcGFnZSBob2xkcyBvbmUgZXh0cmEgaXRlbSwgdGhl IFBSRUZJWCBpdGVtLCBhdCBCVFBhZ2VHZXRQcmVmaXhPZmYgKHdoZXJlDQorICogaXRzIGZpcnN0 IGRhdGEgaXRlbSB3b3VsZCBvdGhlcndpc2UgYmUpOyBpdHMgZGF0YSBpdGVtcyBzdGFydCBvbmUg b2Zmc2V0DQorICogbGF0ZXIsIHNvIFBfRklSU1REQVRBS0VZIC0tIHdoaWNoIGV2ZXJ5IGxvb3Ag b3ZlciBhIHBhZ2UncyBkYXRhIGl0ZW1zDQorICogc3RhcnRzIGZyb20gLS0gYWNjb3VudHMgZm9y IHRoZSBmbGFnLiAgVGhlIFBSRUZJWCBpdGVtIGlzIGFuDQorICogSW5kZXhUdXBsZURhdGEgaGVh ZGVyICh0X3RpZCB6ZXJvLCB0X2luZm8gaXRzIHNpemUgYW5kIG5vdGhpbmcgZWxzZSwgc28NCisg KiB0aGF0IGNvZGUgd2Fsa2luZyBhIHBhZ2UncyBpdGVtcyBieSBJbmRleFR1cGxlU2l6ZSwgc3Vj aCBhcyBzcGxpdCByZWRvLA0KKyAqIHN0ZXBzIG92ZXIgaXQpIGZvbGxvd2VkIGJ5IDEuLkJUUkVF X1BSRUZJWF9NQVggcHJlZml4IGJ5dGVzLiAgVGhlIHByZWZpeCBpcw0KKyAqIGNob3NlbiBvbmx5 IHdoZW4gYSBwYWdlIGlzIHdyaXR0ZW4gd2hvbGUgKENSRUFURSBJTkRFWCwgb3IgYSBoYWxmIG9m IGENCisgKiBzcGxpdCkgYW5kIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgdGhhdDsgYSBwYWdlJ3MgaGln aCBrZXksIHdoaWNoIGZpeGVzIHRoZQ0KKyAqIHByZWZpeCBpdGVtJ3Mgb2Zmc2V0LCBhbHNvIGNo YW5nZXMgb25seSBpbiBhIHNwbGl0Lg0KKyAqDQorICogT24gYSBCVFBfUFJFRklYIHBhZ2UsIGV2 ZXJ5IG5vbi1waXZvdCB0dXBsZSAocGxhaW4gb3IgcG9zdGluZykgd2hvc2UgZmlyc3QNCisgKiBr ZXkgY29sdW1uIGlzIG5vdCBOVUxMIHN0b3JlcyB0aGF0IGNvbHVtbiBjb2RlZCwgYXMgYSB2YXJs ZW5hICgxLWJ5dGUNCisgKiBoZWFkZXIgd2hlbiBpdCBmaXRzIG9uZSwgZWxzZSA0LWJ5dGUpIHdo b3NlIHBheWxvYWQgc3RhcnRzIHdpdGggYSB1aW50OA0KKyAqIGBzaGFyZWQnOg0KKyAqDQorICog ICBzaGFyZWQgPD0gQlRSRUVfUFJFRklYX01BWDogdGhlIHZhbHVlJ3MgZGF0YSBieXRlcyBhcmUg dGhlIHBhZ2UgcHJlZml4J3MNCisgKgkJCQlmaXJzdCBgc2hhcmVkJyBieXRlcyBmb2xsb3dlZCBi eSB0aGUgcmVzdCBvZiB0aGUgcGF5bG9hZC4NCisgKgkJCQlUaGUgdmFsdWUncyBvd24gdmFybGVu YSBoZWFkZXIgaXMgcmVjb21wdXRlZCBvbiBkZWNvZGUgKHRoZQ0KKyAqCQkJCWZvcm0gaW5kZXhf Zm9ybV90dXBsZSBnaXZlcyBpdDogMS1ieXRlIHdoZW4gaXQgZml0cywgZWxzZQ0KKyAqCQkJCTQt Ynl0ZSB1bmNvbXByZXNzZWQpLg0KKyAqICAgc2hhcmVkID09IEJUUkVFX1BSRUZJWF9SQVc6IHRo ZSByZXN0IG9mIHRoZSBwYXlsb2FkIGlzIHRoZSB2YWx1ZSBleGFjdGx5DQorICoJCQkJYXMgc3Rv cmVkLCBoZWFkZXIgaW5jbHVkZWQuICBVc2VkIGZvciBhIHZhbHVlIGNvbXByZXNzZWQNCisgKgkJ CQlpbmxpbmUsIG9yIHdob3NlIGhlYWRlciBpcyBub3QgdGhlIGNhbm9uaWNhbCBmb3JtIGFib3Zl Lg0KKyAqDQorICogVGhlIGJ5dGVzIGFmdGVyIHRoZSBmaXJzdCBjb2x1bW4gKGxhdGVyIGtleSBj b2x1bW5zLCBJTkNMVURFIGNvbHVtbnMsIHRoZQ0KKyAqIHBvc3RpbmcgbGlzdCwgYW5kIGFsaWdu bWVudCBwYWRkaW5nKSBhcmUga2VwdCBhcyB0aGV5IGFyZSwgbW92ZWQgdG8ga2VlcA0KKyAqIHRo ZWlyIGFsaWdubWVudCwgb3IgbGVmdCBvdXQgd2hlbiB0aGV5IGFyZSBvbmx5IHRoZSBrZXkncyBj bG9zaW5nIHplcm8NCisgKiBwYWRkaW5nIChkZWNvZGUgcHV0cyB0aGVtIGJhY2spLiAgQSBwb3N0 aW5nIGxpc3QgZm9sbG93cyB0aGUga2V5IGF0IHRoZSBuZXcNCisgKiBrZXkgZW5kLCBhbmQgdGhl IHBvc3Rpbmcgb2Zmc2V0IGluIHRfdGlkIGlzIGNoYW5nZWQgdG8gbWF0Y2guICBQaXZvdHMsIE5V TEwNCisgKiBmaXJzdCBjb2x1bW5zLCBhbmQgdGhlIGhpZ2gga2V5IGFyZSBzdG9yZWQgYXMgb24g YW55IG90aGVyIHBhZ2UuDQorICoNCisgKiBDb2RpbmcgYW5kIGRlY29kaW5nIGRlcGVuZCBvbmx5 IG9uIHRoZSBwYWdlJ3MgcHJlZml4IGFuZCB0aGUgdHVwbGUsIG5vdCBvbg0KKyAqIHRoZSBjYXRh bG9nLCBzbyBXQUwgcmVkbyBjYW4gcmVwZWF0IHRoZW0sIGFuZCBkZWNvZGluZyBnaXZlcyBiYWNr IHRoZSBwbGFpbg0KKyAqIHR1cGxlIGJ5dGUgZm9yIGJ5dGUuDQorICovDQorI2RlZmluZSBCVFJF RV9QUkVGSVhfTUFYCQkxMjYNCisjZGVmaW5lIEJUUkVFX1BSRUZJWF9SQVcJCTEyNwkvKiBzaGFy ZWQgY291bnQgb2YgYSByYXcgdmFsdWUgKi8NCisjZGVmaW5lIEJUUkVFX1BSRUZJWF9TSEFSRURf TUFTSyAweDdGCS8qIHNoYXJlZCBjb3VudCBiaXRzICovDQorI2RlZmluZSBCVFJFRV9QUkVGSVhf UkVTVAkJMHg4MAkvKiBieXRlcyBhZnRlciB0aGUgY29sdW1uIGZvbGxvdyAqLw0KKw0KKy8qIEEg bGVhZiB3aG9zZSB0dXBsZXMgc2hhcmUgbGVzcyBvZiBpdHMgcHJlZml4IHRoYW4gdGhpcywgb24g YXZlcmFnZSwgaGFzIG5vbmUuICovDQorI2RlZmluZSBCVFJFRV9QUkVGSVhfTUlOX1NIQVJFRAk0 DQorDQorI2RlZmluZSBQX0hBU1BSRUZJWChvcGFxdWUpCQkoKChvcGFxdWUpLT5idHBvX2ZsYWdz ICYgQlRQX1BSRUZJWCkgIT0gMCkNCisjZGVmaW5lIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUp IFwNCisJKFBfUklHSFRNT1NUKG9wYXF1ZSkgPyBQX0hJS0VZIDogUF9GSVJTVEtFWSkNCisjZGVm aW5lIFBfRklSU1REQVRBS0VZKG9wYXF1ZSkgXA0KKwkoQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1 ZSkgKyAoUF9IQVNQUkVGSVgob3BhcXVlKSA/IDEgOiAwKSkNCiANCiAvKg0KICAqIE5vdGVzIG9u IEItVHJlZSB0dXBsZSBmb3JtYXQsIGFuZCBrZXkgYW5kIG5vbi1rZXkgYXR0cmlidXRlczoNCkBA IC02NzYsNiArNzMyLDM2IEBAIEJUcmVlVHVwbGVHZXRNYXhIZWFwVElEKEluZGV4VHVwbGUgaXR1 cCkNCiAJcmV0dXJuICZpdHVwLT50X3RpZDsNCiB9DQogDQorLyoNCisgKiBMZWFmIGtleSBwcmVm aXggY29tcHJlc3Npb24gKHNlZSBuYnRwcmVmaXguYyBmb3IgdGhlIGZvcm1hdCkuDQorICoNCisg KiBXb3Jrc3BhY2UgZm9yIF9idF9nZXRpdGVtLiAgRXZlcnkgcmVhZCBvZiBhIGxlYWYgREFUQSBp dGVtIChhbnkgaXRlbSBidXQNCisgKiB0aGUgaGlnaCBrZXkgb3IgYSBwaXZvdCkgdGhhdCBjb3Vs ZCBiZSBvbiBhIEJUUF9QUkVGSVggcGFnZSBnb2VzIHRocm91Z2gNCisgKiB0aGF0IGZ1bmN0aW9u IHJhdGhlciB0aGFuIGJhcmUgUGFnZUdldEl0ZW0sIHNvIGRlY29kaW5nIGhhcyBvbmUgaG9tZS4g IFRoZQ0KKyAqIHdvcmtzcGFjZSBob2xkcyBhIGRlY29kZWQgY29weTsgdGhlIHJldHVybmVkIHR1 cGxlIGlzIHZhbGlkIHVudGlsIHRoZQ0KKyAqIHdvcmtzcGFjZSBpcyByZXVzZWQgb3IgdGhlIHBh Z2UgaXMgdW5sb2NrZWQuICBIaWdoIGtleXMgYW5kIHBpdm90cywgYW5kDQorICogaXRlbXMgYSBj YWxsZXIgY2hhbmdlcyBpbiBwbGFjZSwgYXJlIHJlYWQgd2l0aCBQYWdlR2V0SXRlbS4NCisgKi8N Cit0eXBlZGVmIFBHQWxpZ25lZEJsb2NrIEJUSXRlbUJ1ZjsNCisNCitleHRlcm4gSW5kZXhUdXBs ZSBfYnRfcHJlZml4X2RlY29kZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCwgQlRJdGVtQnVm ICpidWYpOw0KKw0KKy8qDQorICogUmV0dXJuIHRoZSBkYXRhIGl0ZW0gYXQgYG9mZm51bScgb24g YHBhZ2UnIGFzIGEgcGxhaW4gSW5kZXhUdXBsZTogb24gYQ0KKyAqIEJUUF9QUkVGSVggcGFnZSwg dGhlIHR1cGxlIGRlY29kZWQgaW50byBgYnVmJzsgb3RoZXJ3aXNlIHRoZSBvbi1wYWdlIHR1cGxl LA0KKyAqIGFuZCBgYnVmJyBpcyBub3QgdXNlZC4gIENhbGxlcnMgbXVzdCBub3Qgd3JpdGUgdGhy b3VnaCB0aGUgcmVzdWx0Lg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgSW5kZXhUdXBsZQ0KK19idF9n ZXRpdGVtKFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgQlRJdGVtQnVmICpidWYpDQor ew0KKwlJbmRleFR1cGxlCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgUGFn ZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pKTsNCisJQlRQYWdlT3BhcXVlIG9wYXF1ZSA9IEJUUGFn ZUdldE9wYXF1ZShwYWdlKTsNCisNCisJaWYgKHVubGlrZWx5KFBfSEFTUFJFRklYKG9wYXF1ZSkp ICYmIG9mZm51bSA+IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwkJcmV0dXJuIF9idF9w cmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsIGJ1Zik7DQorCXJldHVybiBpdHVwOw0KK30NCisNCiAv Kg0KICAqCU9wZXJhdG9yIHN0cmF0ZWd5IG51bWJlcnMgZm9yIEItdHJlZSBoYXZlIGJlZW4gbW92 ZWQgdG8gYWNjZXNzL3N0cmF0bnVtLmgsDQogICoJYmVjYXVzZSBtYW55IHBsYWNlcyBuZWVkIHRv IHVzZSB0aGVtIGluIFNjYW5LZXlJbml0KCkgY2FsbHMuDQpAQCAtMTEyMiw2ICsxMjA4LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQlRPcHRpb25zDQogCWludAkJCWZpbGxmYWN0b3I7CQkvKiBwYWdlIGZp bGwgZmFjdG9yIGluIHBlcmNlbnQgKDAuLjEwMCkgKi8NCiAJZmxvYXQ4CQl2YWN1dW1fY2xlYW51 cF9pbmRleF9zY2FsZV9mYWN0b3I7CS8qIGRlcHJlY2F0ZWQgKi8NCiAJYm9vbAkJZGVkdXBsaWNh dGVfaXRlbXM7CS8qIFRyeSB0byBkZWR1cGxpY2F0ZSBpdGVtcz8gKi8NCisJYm9vbAkJcHJlZml4 X2NvbXByZXNzaW9uOyAvKiBDb2RlIGxlYWYga2V5cyBhZ2FpbnN0IGEgcGFnZSBwcmVmaXg/ICov DQogfSBCVE9wdGlvbnM7DQogDQogI2RlZmluZSBCVEdldEZpbGxGYWN0b3IocmVsYXRpb24pIFwN CkBAIC0xMTM3LDYgKzEyMjQsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRPcHRpb25zDQogCQkJCSBy ZWxhdGlvbi0+cmRfcmVsLT5yZWxhbSA9PSBCVFJFRV9BTV9PSUQpLCBcDQogCSgocmVsYXRpb24p LT5yZF9vcHRpb25zID8gXA0KIAkgKChCVE9wdGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9u cyktPmRlZHVwbGljYXRlX2l0ZW1zIDogdHJ1ZSkpDQorI2RlZmluZSBCVEdldFByZWZpeENvbXBy ZXNzaW9uKHJlbGF0aW9uKSBcDQorCShBc3NlcnRNYWNybyhyZWxhdGlvbi0+cmRfcmVsLT5yZWxr aW5kID09IFJFTEtJTkRfSU5ERVggJiYgXA0KKwkJCQkgcmVsYXRpb24tPnJkX3JlbC0+cmVsYW0g PT0gQlRSRUVfQU1fT0lEKSwgXA0KKwkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwNCisJICgo QlRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlvbnMpLT5wcmVmaXhfY29tcHJlc3Npb24g OiBmYWxzZSkpDQorDQorLyoNCisgKiBTaXplIG9mIG9uZSBoYWxmIChjdXJyVHVwbGVzIG9yIG1h cmtUdXBsZXMpIG9mIGFuIGluZGV4LW9ubHkgc2NhbidzIHR1cGxlDQorICogc3RvcmFnZS4gIEEg cGxhaW4gbGVhZidzIGxpdmUgbm9uLXBpdm90IHR1cGxlcyBmaXQgaW4gb25lIHBhZ2UsIHNvIEJM Q0tTWg0KKyAqIHdvdWxkIHN1ZmZpY2UgZm9yIHRoZW0uICBBIHByZWZpeC1jb21wcmVzc2VkIChC VFBfUFJFRklYKSBsZWFmIGNhbiBob2xkIG1vcmUNCisgKiBsb2dpY2FsIGRhdGEgdGhhbiBmaXRz IHBsYWluOiB3aGVuIGl0cyB0dXBsZXMgYXJlIGRlY29kZWQgZm9yIHRoZSBzY2FuIHRoZXkNCisg KiBjYW4gZXhjZWVkIEJMQ0tTWi4gIEJlY2F1c2UgX2J0X2dldGl0ZW0oKSBkZWNvZGVzIGJhc2Vk IG9uIHRoZSBwYWdlIGZsYWcsDQorICogbm90IG9uIHRoZSBjdXJyZW50IHJlbG9wdGlvbiwgYW5k IGEgQlRQX1BSRUZJWCBwYWdlIGNhbiBwZXJzaXN0IGFmdGVyDQorICogcHJlZml4X2NvbXByZXNz aW9uIGlzIHR1cm5lZCBvZmYgKHRoZSBmbGFnIGlzIGNsZWFyZWQgb25seSB3aGVuIGEgcGFnZSBp cw0KKyAqIHNwbGl0LCBlbXB0aWVkIG9yIGRlZHVwLXJld3JpdHRlbiAtLSBuZXZlciBieSBBTFRF UiBJTkRFWCksIEFOWSBidHJlZSBpbmRleA0KKyAqIG1heSBjb250YWluIHN1Y2ggYSBwYWdlLiAg VGhlIGJ1ZmZlciBtdXN0IHRoZXJlZm9yZSBhbHdheXMgcmVzZXJ2ZSB0aGUgc2xhY2sNCisgKiBm b3IgYSBkZWNvZGVkIHBhZ2UsIGluZGVwZW5kZW50IG9mIHRoZSBsaXZlIHJlbG9wdGlvbjsgc2l6 aW5nIGl0IG9uIHRoZQ0KKyAqIG9wdGlvbiB3b3VsZCBvdmVyZmxvdyBjdXJyVHVwbGVzL21hcmtU dXBsZXMgb24gYSBzdXJ2aXZpbmcgcHJlZml4IGxlYWYuDQorICoNCisgKiBUaGUgYm91bmQgaXMg dGhlIG1vc3QgZGlzdGluY3QgaW5kZXggdHVwbGVzIGEgbGVhZiBjYW4gaG9sZCAoZWFjaCBhdCBs ZWFzdCBhDQorICogbGluZSBwb2ludGVyIHBsdXMgYSBtaW5pbWFsbHkgY29kZWQgdHVwbGUpIHRp bWVzIHRoZSBtb3N0IGEgc2luZ2xlIGZpcnN0DQorICogY29sdW1uIGNhbiByZWdhaW4gb24gZGVj b2RlICh0aGUgcGFnZSBwcmVmaXgsIGF0IG1vc3QgQlRSRUVfUFJFRklYX01BWA0KKyAqIGJ5dGVz LCBNQVhBTElHTmVkKS4NCisgKi8NCisjZGVmaW5lIEJUVHVwbGVTdG9yYWdlU2l6ZShyZWxhdGlv bikgXA0KKwkoQkxDS1NaICsgKEJMQ0tTWiAvIChpbnQpIE1BWEFMSUdOKHNpemVvZihJbmRleFR1 cGxlRGF0YSkgKyAyKSkgKiBcDQorCSAoaW50KSBNQVhBTElHTihCVFJFRV9QUkVGSVhfTUFYKSkN CiANCiAvKg0KICAqIENvbnN0YW50IGRlZmluaXRpb24gZm9yIHByb2dyZXNzIHJlcG9ydGluZy4g IFBoYXNlIG51bWJlcnMgbXVzdCBtYXRjaA0KQEAgLTEyMDIsNyArMTMxNiw4IEBAIGV4dGVybiBi b29sIF9idF9ib3R0b211cGRlbF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRp b24gaGVhcFJlbCwNCiBleHRlcm4gdm9pZCBfYnRfZGVkdXBfc3RhcnRfcGVuZGluZyhCVERlZHVw U3RhdGUgc3RhdGUsIEluZGV4VHVwbGUgYmFzZSwNCiAJCQkJCQkJCQlPZmZzZXROdW1iZXIgYmFz ZW9mZik7DQogZXh0ZXJuIGJvb2wgX2J0X2RlZHVwX3NhdmVfaHRpZChCVERlZHVwU3RhdGUgc3Rh dGUsIEluZGV4VHVwbGUgaXR1cCk7DQotZXh0ZXJuIFNpemUgX2J0X2RlZHVwX2ZpbmlzaF9wZW5k aW5nKFBhZ2UgbmV3cGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlKTsNCitleHRlcm4gU2l6ZSBfYnRf ZGVkdXBfZmluaXNoX3BlbmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUsDQor CQkJCQkJCQkJYm9vbCBvdmVyZmxvd29rKTsNCiBleHRlcm4gSW5kZXhUdXBsZSBfYnRfZm9ybV9w b3N0aW5nKEluZGV4VHVwbGUgYmFzZSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpodGlkcywNCiAJ CQkJCQkJCSAgIGludCBuaHRpZHMpOw0KIGV4dGVybiB2b2lkIF9idF91cGRhdGVfcG9zdGluZyhC VFZhY3V1bVBvc3RpbmcgdmFjcG9zdGluZyk7DQpAQCAtMTMxNSw2ICsxNDMwLDM0IEBAIGV4dGVy biB2b2lkIF9idF9jaGVja190aGlyZF9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcCwN CiAJCQkJCQkJCSBib29sIG5lZWRoZWFwdGlkc3BhY2UsIFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBu ZXd0dXApOw0KIGV4dGVybiBib29sIF9idF9hbGxlcXVhbGltYWdlKFJlbGF0aW9uIHJlbCwgYm9v bCBkZWJ1Z21lc3NhZ2UpOw0KIA0KKy8qDQorICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGlu IG5idHByZWZpeC5jDQorICovDQorZXh0ZXJuIGNvbnN0IGNoYXIgKl9idF9wYWdlX2dldF9wcmVm aXgoUGFnZSBwYWdlLCBTaXplICpsZW4pOw0KK2V4dGVybiB2b2lkIF9idF9wYWdlX3NldF9wcmVm aXgoUGFnZSBwYWdlLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbGVuKTsNCitleHRlcm4gSW5k ZXhUdXBsZSBfYnRfcHJlZml4X2VuY29kZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCk7DQor ZXh0ZXJuIFNpemUgX2J0X3ByZWZpeF9jb2RlZF9zaXplKFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBp dHVwKTsNCitleHRlcm4gYm9vbCBfYnRfcHJlZml4X2VuYWJsZWQoUmVsYXRpb24gaW5kZXgpOw0K K2V4dGVybiBjb25zdCBjaGFyICpfYnRfcHJlZml4X2NhbmRpZGF0ZShJbmRleFR1cGxlIGl0dXAs IFNpemUgKmxlbik7DQorZXh0ZXJuIGludAlfYnRfcHJlZml4X3NoYXJlZChjb25zdCBjaGFyICpw cmVmaXgsIFNpemUgcHJlZml4bGVuLCBJbmRleFR1cGxlIGl0dXApOw0KK2V4dGVybiBTaXplIF9i dF9wcmVmaXhfY2hvb3NlKFJlbGF0aW9uIGluZGV4LCBJbmRleFR1cGxlICppdGVtcywgaW50IG4s DQorCQkJCQkJCSAgY29uc3QgY2hhciAqKnByZWZpeCk7DQorZXh0ZXJuIHZvaWQgX2J0X3ByZWZp eF9jb21wcmVzc19wYWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIHBhZ2UpOw0KK2V4dGVybiB2b2lk IF9idF9zcGxpdF9sZWFmX2hhbGYoUmVsYXRpb24gaW5kZXgsIFBhZ2UgcGFnZSwgSW5kZXhUdXBs ZSBoaWtleSwNCisJCQkJCQkJCUluZGV4VHVwbGUgKml0ZW1zLCBpbnQgbiwNCisJCQkJCQkJCWNv bnN0IGNoYXIgKm9yaWdwcmVmaXgsIFNpemUgb3JpZ3ByZWZpeGxlbiwNCisJCQkJCQkJCWNoYXIg KmNob3NlbnByZWZpeCwgU2l6ZSAqY2hvc2VucHJlZml4bGVuKTsNCitleHRlcm4gYm9vbCBfYnRf c3BsaXRfbGVhZl9sYXlvdXQoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGhpa2V5LA0KKwkJCQkJCQkJ ICBJbmRleFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBwcmVmaXhsZW4pOw0KK2V4dGVybiB2b2lkIF9idF9zcGxpdF9sZWFmX2NvbGxlY3Qo UGFnZSBvcmlncGFnZSwgT2Zmc2V0TnVtYmVyIGZpcnN0cmlnaHRvZmYsDQorCQkJCQkJCQkgICBP ZmZzZXROdW1iZXIgbmV3aXRlbW9mZiwgSW5kZXhUdXBsZSBuZXdpdGVtLA0KKwkJCQkJCQkJICAg Ym9vbCBuZXdpdGVtb25sZWZ0LA0KKwkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9yaWdwYWdlcG9z dGluZ29mZiwNCisJCQkJCQkJCSAgIEluZGV4VHVwbGUgbnBvc3RpbmcsDQorCQkJCQkJCQkgICBJ bmRleFR1cGxlICpsZWZ0aXRlbXMsIGludCAqbmxlZnQsDQorCQkJCQkJCQkgICBJbmRleFR1cGxl ICpyaWdodGl0ZW1zLCBpbnQgKm5yaWdodCk7DQorDQogLyoNCiAgKiBwcm90b3R5cGVzIGZvciBm dW5jdGlvbnMgaW4gbmJ0dmFsaWRhdGUuYw0KICAqLw0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9uYnR4bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oDQppbmRleCAz YTc4ZWMyN2ZlOC4uMjg1ZWFjNmYxYWEgMTAwNjQ0DQotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0eGxvZy5oDQorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oDQpAQCAtMTU2LDI1 ICsxNTYsNTkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfc3BsaXQNCiAJT2Zmc2V0TnVtYmVy IGZpcnN0cmlnaHRvZmY7IC8qIGZpcnN0IG9yaWdwYWdlIGl0ZW0gb24gcmlnaHRwYWdlICovDQog CU9mZnNldE51bWJlciBuZXdpdGVtb2ZmOwkvKiBuZXcgaXRlbSdzIG9mZnNldCAqLw0KIAl1aW50 MTYJCXBvc3RpbmdvZmY7CQkvKiBvZmZzZXQgaW5zaWRlIG9yaWcgcG9zdGluZyB0dXBsZSAqLw0K Kwl1aW50MTYJCWZsYWdzOwkJCS8qIFhMSF9TUExJVF8qIGJlbG93ICovDQorCXVpbnQ4CQlsZWZ0 cHJlZml4bGVuOwkvKiBsZWFmOiBsZWZ0IGhhbGYncyBwcmVmaXggbGVuZ3RoICgwIG5vbmUpICov DQorCXVpbnQ4CQlyaWdodHByZWZpeGxlbjsgLyogbGVhZjogcmlnaHQgaGFsZidzIHByZWZpeCBs ZW5ndGggKDAgbm9uZSkgKi8NCiB9IHhsX2J0cmVlX3NwbGl0Ow0KIA0KLSNkZWZpbmUgU2l6ZU9m QnRyZWVTcGxpdAkob2Zmc2V0b2YoeGxfYnRyZWVfc3BsaXQsIHBvc3RpbmdvZmYpICsgc2l6ZW9m KHVpbnQxNikpDQorI2RlZmluZSBTaXplT2ZCdHJlZVNwbGl0CShvZmZzZXRvZih4bF9idHJlZV9z cGxpdCwgcmlnaHRwcmVmaXhsZW4pICsgc2l6ZW9mKHVpbnQ4KSkNCisNCisvKg0KKyAqIHhsX2J0 cmVlX3NwbGl0IGZsYWcgYml0cy4NCisgKg0KKyAqIEEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBz cGxpdCBsb2dzIG5vIGZ1bGwtcGFnZSBpbWFnZSBpbiB0aGUgY29tbW9uIGNhc2U6DQorICogcmVk byByZWJ1aWxkcyBlYWNoIGhhbGYgdGhlIHdheSB0aGUgcHJpbWFyeSBkaWQuICBUaGUgbGVmdCBo YWxmIGlzDQorICogcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSBwcmUtc3BsaXQgb3JpZ2luYWwgcGFn ZSAoYmxvY2sgMCkgdG9nZXRoZXIgd2l0aCB0aGUNCisgKiBsb2dnZWQgbmV3IGl0ZW0gYW5kIGhp Z2gga2V5OyB0aGUgcmlnaHQgaGFsZiBpcyByZWNvbnN0cnVjdGVkIGZyb20gaXRzIHBsYWluDQor ICogZGF0YSBpdGVtcywgd2hpY2ggYXJlIGxvZ2dlZCBhcyBibG9jay0xIGRhdGEuICBFYWNoIGhh bGYncyBjaG9zZW4gcHJlZml4DQorICogYnl0ZXMgYXJlIGxvZ2dlZCB0b28gKGJsb2NrIDAgZm9y IHRoZSBsZWZ0IGhhbGYsIGJsb2NrIDEgZm9yIHRoZSByaWdodCksIGFuZA0KKyAqIGFwcGxpZWQg d2l0aCBfYnRfc3BsaXRfbGVhZl9sYXlvdXQoKTsgcmVkbyBjYW5ub3QgcnVuIHRoZSBwcmVmaXgt Y2hvb3NpbmcNCisgKiBoZXVyaXN0aWMgaXRzZWxmLCBzbyB0aGUgcHJpbWFyeSBsb2dzIHRoZSBw cmVmaXggaXQgY2hvc2UuDQorICogbGVmdHByZWZpeGxlbi9yaWdodHByZWZpeGxlbiBnaXZlIHRo ZSBsZW5ndGhzICgwIG1lYW5zIHRoZSBoYWxmIGlzIG5vdA0KKyAqIHByZWZpeC1jb21wcmVzc2Vk KS4gIFhMSF9TUExJVF9MRUFGUFJFRklYIG1hcmtzIGEgbGVhZiBzcGxpdCB0aGF0IHVzZXMgdGhp cw0KKyAqIHBhdGggYXQgYWxsIChzbyByZWRvIHJlYnVpbGRzIGNvZGVkIHJhdGhlciB0aGFuIHJl cGxheWluZyBpdGVtcykuDQorICovDQorI2RlZmluZSBYTEhfU1BMSVRfTEVBRlBSRUZJWAkweDAx CS8qIGxlYWYgc3BsaXQsIHJlYnVpbGQgaGFsdmVzIGNvZGVkICovDQorI2RlZmluZSBYTEhfU1BM SVRfUkZQSQkJCTB4MDgJLyogcmlnaHQgaGFsZiBjYXJyaWVkIGJ5IGEgZnVsbC1wYWdlIGltYWdl DQorCQkJCQkJCQkJCSAqIChpdHMgcGxhaW4gaXRlbXMgd291bGQgb3ZlcmZsb3cgdGhlIFdBTA0K KwkJCQkJCQkJCQkgKiByZWNvcmQpOyByZWRvIHJlc3RvcmVzIGl0IGZyb20gdGhlIGltYWdlICov DQogDQogLyoNCiAgKiBXaGVuIHBhZ2UgaXMgZGVkdXBsaWNhdGVkLCBjb25zZWN1dGl2ZSBncm91 cHMgb2YgdHVwbGVzIHdpdGggZXF1YWwga2V5cyBhcmUNCiAgKiBtZXJnZWQgdG9nZXRoZXIgaW50 byBwb3N0aW5nIGxpc3QgdHVwbGVzLg0KICAqDQotICogVGhlIFdBTCByZWNvcmQgcmVwcmVzZW50 cyBhIGRlZHVwbGljYXRpb24gcGFzcyBmb3IgYSBsZWFmIHBhZ2UuICBBbiBhcnJheQ0KLSAqIG9m IEJURGVkdXBJbnRlcnZhbCBzdHJ1Y3RzIGZvbGxvd3MuDQorICogVGhlIFdBTCByZWNvcmQgcmVw cmVzZW50cyBhIGRlZHVwbGljYXRpb24gcGFzcyBmb3IgYSBsZWFmIHBhZ2UuICBOb3JtYWxseQ0K KyAqIChwcmVmaXhsZW4gPT0gMCkgYW4gYXJyYXkgb2YgQlREZWR1cEludGVydmFsIHN0cnVjdHMg Zm9sbG93cyBhbmQgcmVkbw0KKyAqIHJlcGxheXMgdGhlbSBhZ2FpbnN0IHRoZSBvbGQgcGFnZS4g IFdoZW4gdGhlIHBhZ2UgaXMgcHJlZml4LWNvbXByZXNzZWQNCisgKiAocHJlZml4bGVuID4gMCkg dGhlIGRlZHVwZWQgcmVzdWx0IGlzIGluc3RlYWQgY2FycmllZCBhcyB0aGUgY2hvc2VuIHByZWZp eA0KKyAqIGJ5dGVzIChwcmVmaXhsZW4pIGZvbGxvd2VkIGJ5LCB3aGVuIG5vdCByaWdodG1vc3Qs IHRoZSBoaWdoIGtleSwgdGhlbiB0aGUNCisgKiBkZWR1cGVkIHBsYWluIGRhdGEgaXRlbXMgLS0g ZWFjaCBNQVhBTElHTidkIC0tIGFuZCByZWRvIGxheXMgdGhlbSBvdXQgY29kZWQNCisgKiB3aXRo IF9idF9zcGxpdF9sZWFmX2xheW91dCgpLCBhdm9pZGluZyBhIGZ1bGwtcGFnZSBpbWFnZS4NCiAg Ki8NCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9kZWR1cA0KIHsNCiAJdWludDE2CQluaW50ZXJ2 YWxzOw0KKwl1aW50OAkJcHJlZml4bGVuOwkJLyogPjA6IHByZWZpeC1kZWR1cCBwYXlsb2FkLCBz ZWUgYWJvdmUgKi8NCisJdWludDgJCWZsYWdzOwkJCS8qIFhMSF9ERURVUF8qICovDQogDQotCS8q IERFRFVQTElDQVRJT04gSU5URVJWQUxTIEZPTExPVyAqLw0KKwkvKiBERURVUExJQ0FUSU9OIElO VEVSVkFMUyBvciBQUkVGSVggUEFZTE9BRCBGT0xMT1cgKi8NCiB9IHhsX2J0cmVlX2RlZHVwOw0K IA0KLSNkZWZpbmUgU2l6ZU9mQnRyZWVEZWR1cCAJKG9mZnNldG9mKHhsX2J0cmVlX2RlZHVwLCBu aW50ZXJ2YWxzKSArIHNpemVvZih1aW50MTYpKQ0KKyNkZWZpbmUgU2l6ZU9mQnRyZWVEZWR1cCAJ KG9mZnNldG9mKHhsX2J0cmVlX2RlZHVwLCBmbGFncykgKyBzaXplb2YodWludDgpKQ0KKw0KKy8q IHhsX2J0cmVlX2RlZHVwIGZsYWcgYml0cyAqLw0KKyNkZWZpbmUgWExIX0RFRFVQX05PVF9SSUdI VE1PU1QJMHgwMQkvKiBwcmVmaXggcGF5bG9hZCBpbmNsdWRlcyBhIGhpZ2gga2V5ICovDQorI2Rl ZmluZSBYTEhfREVEVVBfUkZQSQkJCTB4MDIJLyogcHJlZml4IHBhZ2UgY2FycmllZCBhcyBhIGZv cmNlZCBpbWFnZSAqLw0KIA0KIC8qDQogICogVGhpcyBpcyB3aGF0IHdlIG5lZWQgdG8ga25vdyBh Ym91dCBwYWdlIHJldXNlIHdpdGhpbiBidHJlZS4gIFRoaXMgcmVjb3JkDQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJl ZS9NYWtlZmlsZQ0KaW5kZXggMjBhMWNhNmE5MmIuLmNhMDc3OWU5YjU3IDEwMDY0NA0KLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvTWFrZWZpbGUNCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv bmJ0cmVlL01ha2VmaWxlDQpAQCAtMyw3ICszLDggQEANCiBFWFRSQV9JTlNUQUxMID0gc3JjL3Rl c3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzIGNvbnRyaWIvYW1jaGVjaw0KIA0KIFJFR1JFU1Mg PSBuYnRyZWVfaGFsZl9kZWFkX3BhZ2VzIFwNCi0JbmJ0cmVlX2luY29tcGxldGVfc3BsaXRzDQor CW5idHJlZV9pbmNvbXBsZXRlX3NwbGl0cyBcDQorCW5idHJlZV9wcmVmaXhfcmZwaQ0KIA0KIElT T0xBVElPTiA9IGJhY2t3YXJkcy1zY2FuLWNvbmN1cnJlbnQtc3BsaXRzIFwNCiAJcHJlZGljYXRl LWVtcHR5LWluZGV4DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvZXhwZWN0 ZWQvbmJ0cmVlX3ByZWZpeF9yZnBpLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvbmJ0cmVlL2V4cGVj dGVkL25idHJlZV9wcmVmaXhfcmZwaS5vdXQNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAw MDAwMDAwMDAwMC4uMTYxNGFkMDE4NmINCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvbmJ0cmVlL2V4cGVjdGVkL25idHJlZV9wcmVmaXhfcmZwaS5vdXQNCkBAIC0wLDAgKzEs NzcgQEANCistLQ0KKy0tIFRlc3QgdGhlIGZvcmNlZCBmdWxsLXBhZ2UtaW1hZ2UgZmFsbGJhY2sg Zm9yIHByZWZpeC1jb21wcmVzc2VkIGxlYXZlcy4NCistLQ0KKy0tIEEgcHJlZml4LWNvbXByZXNz ZWQgbGVhZiBjYW4sIGluIHByaW5jaXBsZSwgaG9sZCBtb3JlIGxvZ2ljYWwgKGRlY29kZWQpDQor LS0gZGF0YSB0aGFuIGZpdHMgb24gYSBwbGFpbiBwYWdlLiAgV2hlbiBhIHNwbGl0J3MgcmlnaHQg aGFsZiBvciBhDQorLS0gZGVkdXBsaWNhdGlvbiByZXdyaXRlIHdvdWxkIGhhdmUgdG8gbG9nIG1v cmUgdGhhbiBvbmUgcGFnZSBvZiBwbGFpbg0KKy0tIGl0ZW1zLCB0aGUgV0FMIHJlY29yZCBpbnN0 ZWFkIGNhcnJpZXMgdGhlIGNvZGVkIHBhZ2UgYXMgYSBmb3JjZWQNCistLSBmdWxsLXBhZ2UgaW1h Z2UgKFhMSF9TUExJVF9SRlBJIC8gWExIX0RFRFVQX1JGUEkpLiAgUmVhbGlzdGljIGRhdGEgbmV2 ZXINCistLSByZWFjaGVzIHRoYXQgdGhyZXNob2xkIC0tIHRoZSBzcGxpdC1wb2ludCBiYWxhbmNl IGtlZXBzIGEgaGFsZiB3ZWxsIHVuZGVyDQorLS0gYSBwYWdlIC0tIHNvIHRoZSBvbmx5IHdheSB0 byBleGVyY2lzZSB0aGUgcGF0aCBkZXRlcm1pbmlzdGljYWxseSBpcyB0aGUNCistLSBuYnRyZWUt cHJlZml4LWZvcmNlLXJmcGkgaW5qZWN0aW9uIHBvaW50LCB3aGljaCBmb3JjZXMgdGhlIGZhbGxi YWNrIGZvcg0KKy0tIGV2ZXJ5IHByZWZpeCBzcGxpdCBhbmQgZGVkdXBsaWNhdGlvbiByZWdhcmRs ZXNzIG9mIHNpemUuDQorLS0NCistLSBUaGlzIHZlcmlmaWVzIHRoZSBwcmltYXJ5IHByb2R1Y2Vz IGEgdmFsaWQgaW5kZXggb24gdGhhdCBwYXRoOyBieXRlLWZvci0NCistLSBieXRlIHJlZG8gb2Yg dGhlIGZvcmNlZCBpbWFnZSBpcyBjb3ZlcmVkIGJ5IHRoZSByZWNvdmVyeS9zdHJlYW1pbmcgdGVz dHMNCistLSBydW4gd2l0aCB3YWxfY29uc2lzdGVuY3lfY2hlY2tpbmcuDQorLS0NCitzZXQgY2xp ZW50X21pbl9tZXNzYWdlcyBUTyAnd2FybmluZyc7DQorY3JlYXRlIGV4dGVuc2lvbiBpZiBub3Qg ZXhpc3RzIGluamVjdGlvbl9wb2ludHM7DQorY3JlYXRlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3Rz IGFtY2hlY2s7DQorcmVzZXQgY2xpZW50X21pbl9tZXNzYWdlczsNCistLSBMb2NhbCB0byB0aGlz IHByb2Nlc3MsIHNvIGEgY29uY3VycmVudCBiYWNrZW5kIGlzIHVuYWZmZWN0ZWQuDQorU0VMRUNU IGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsKCk7DQorIGluamVjdGlvbl9wb2ludHNfc2V0X2xv Y2FsIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgDQorKDEgcm93KQ0KKw0KK1NF TEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnbmJ0cmVlLXByZWZpeC1mb3JjZS1yZnBpJywg J25vdGljZScpOw0KKyBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCANCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQorIA0KKygxIHJvdykNCisNCistLSBLZXlzIHdpdGggYSBsb25nIHNoYXJlZCBs ZWFkaW5nIHByZWZpeCBzbyB0aGUgbGVhdmVzIGNvbXByZXNzIGFuZCBzcGxpdC4NCitjcmVhdGUg dGFibGUgbmJ0cmVlX3ByZWZpeF9yZnBpKHUgdGV4dCBjb2xsYXRlICJDIikgd2l0aCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gb2ZmKTsNCitjcmVhdGUgaW5kZXggbmJ0cmVlX3ByZWZpeF9yZnBpX3Vf aWR4IG9uIG5idHJlZV9wcmVmaXhfcmZwaSAodSkNCisgIHdpdGggKHByZWZpeF9jb21wcmVzc2lv biA9IG9uKTsNCistLSBEaXN0aW5jdCBrZXlzOiBtYW55IHNwbGl0cywgZWFjaCByaWdodCBoYWxm IGNhcnJpZWQgYXMgYSBmb3JjZWQgaW1hZ2UuDQoraW5zZXJ0IGludG8gbmJ0cmVlX3ByZWZpeF9y ZnBpDQorICBzZWxlY3QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8 IGxwYWQoZzo6dGV4dCwgOCwgJzAnKQ0KKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDAp IGc7DQorLS0gRHVwbGljYXRlLWhlYXZ5IGtleXM6IHJ1bnRpbWUgZGVkdXBsaWNhdGlvbiwgcmUt Y29kZWQgcGFnZSBhcyBhIGZvcmNlZCBpbWFnZS4NCitpbnNlcnQgaW50byBuYnRyZWVfcHJlZml4 X3JmcGkNCisgIHNlbGVjdCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycg fHwgbHBhZCgoZyAlIDIwMCk6OnRleHQsIDgsICcwJykNCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDIwMDAwKSBnOw0KKy0tIFRoZSBpbmRleCBtdXN0IGJlIHN0cnVjdHVyYWxseSB2YWxpZCBh bmQgYWdyZWUgd2l0aCB0aGUgaGVhcC4NCitTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2NoZWNrKCdu YnRyZWVfcHJlZml4X3JmcGlfdV9pZHgnOjpyZWdjbGFzcywgdHJ1ZSwgdHJ1ZSk7DQorIGJ0X2lu ZGV4X3BhcmVudF9jaGVjayANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyANCisoMSByb3cp DQorDQorLS0gQW4gaW5kZXgtb25seSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1YWwg dGhlIGluZGVwZW5kZW50IG9yYWNsZS4NCitzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VM RUNUIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIG5idHJl ZV9wcmVmaXhfcmZwaSkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkg eCkpIEFTIGZvcmNlZF9yZnBpX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5j b20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAg ICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnDQorICAgICAgICBVTklPTiBB TEwNCisgICAgICAgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNl LycgfHwgbHBhZCgoZyAlIDIwMCk6OnRleHQsIDgsICcwJykNCisgICAgICAgICAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMjAwMDApIGcpIG9yYWNsZTsNCisgZm9yY2VkX3JmcGlfb2sgDQorLS0t LS0tLS0tLS0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KK3Jlc2V0IGVuYWJsZV9zZXFzY2FuOw0K K1NFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnbmJ0cmVlLXByZWZpeC1mb3JjZS1yZnBp Jyk7DQorIGluamVjdGlvbl9wb2ludHNfZGV0YWNoIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCisgDQorKDEgcm93KQ0KKw0KK2Ryb3AgdGFibGUgbmJ0cmVlX3ByZWZpeF9yZnBpOw0KK2Ry b3AgZXh0ZW5zaW9uIGFtY2hlY2s7DQorZHJvcCBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50czsN CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9tZXNvbi5idWlsZCBiL3NyYy90 ZXN0L21vZHVsZXMvbmJ0cmVlL21lc29uLmJ1aWxkDQppbmRleCBiNWRjMDI2MzkyZS4uZDZhMzRl MjY1YmUgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9tZXNvbi5idWlsZA0K KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvbWVzb24uYnVpbGQNCkBAIC0xMiw2ICsxMiw3 IEBAIHRlc3RzICs9IHsNCiAgICAgJ3NxbCc6IFsNCiAgICAgICAnbmJ0cmVlX2hhbGZfZGVhZF9w YWdlcycsDQogICAgICAgJ25idHJlZV9pbmNvbXBsZXRlX3NwbGl0cycsDQorICAgICAgJ25idHJl ZV9wcmVmaXhfcmZwaScsDQogICAgIF0sDQogICB9LA0KICAgJ2lzb2xhdGlvbic6IHsNCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9zcWwvbmJ0cmVlX3ByZWZpeF9yZnBpLnNx bCBiL3NyYy90ZXN0L21vZHVsZXMvbmJ0cmVlL3NxbC9uYnRyZWVfcHJlZml4X3JmcGkuc3FsDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLjQ1ODk5ZTU3OTZmDQotLS0g L2Rldi9udWxsDQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9zcWwvbmJ0cmVlX3ByZWZp eF9yZnBpLnNxbA0KQEAgLTAsMCArMSw1OSBAQA0KKy0tDQorLS0gVGVzdCB0aGUgZm9yY2VkIGZ1 bGwtcGFnZS1pbWFnZSBmYWxsYmFjayBmb3IgcHJlZml4LWNvbXByZXNzZWQgbGVhdmVzLg0KKy0t DQorLS0gQSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIGNhbiwgaW4gcHJpbmNpcGxlLCBob2xkIG1v cmUgbG9naWNhbCAoZGVjb2RlZCkNCistLSBkYXRhIHRoYW4gZml0cyBvbiBhIHBsYWluIHBhZ2Uu ICBXaGVuIGEgc3BsaXQncyByaWdodCBoYWxmIG9yIGENCistLSBkZWR1cGxpY2F0aW9uIHJld3Jp dGUgd291bGQgaGF2ZSB0byBsb2cgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIHBsYWluDQorLS0gaXRl bXMsIHRoZSBXQUwgcmVjb3JkIGluc3RlYWQgY2FycmllcyB0aGUgY29kZWQgcGFnZSBhcyBhIGZv cmNlZA0KKy0tIGZ1bGwtcGFnZSBpbWFnZSAoWExIX1NQTElUX1JGUEkgLyBYTEhfREVEVVBfUkZQ SSkuICBSZWFsaXN0aWMgZGF0YSBuZXZlcg0KKy0tIHJlYWNoZXMgdGhhdCB0aHJlc2hvbGQgLS0g dGhlIHNwbGl0LXBvaW50IGJhbGFuY2Uga2VlcHMgYSBoYWxmIHdlbGwgdW5kZXINCistLSBhIHBh Z2UgLS0gc28gdGhlIG9ubHkgd2F5IHRvIGV4ZXJjaXNlIHRoZSBwYXRoIGRldGVybWluaXN0aWNh bGx5IGlzIHRoZQ0KKy0tIG5idHJlZS1wcmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24gcG9pbnQs IHdoaWNoIGZvcmNlcyB0aGUgZmFsbGJhY2sgZm9yDQorLS0gZXZlcnkgcHJlZml4IHNwbGl0IGFu ZCBkZWR1cGxpY2F0aW9uIHJlZ2FyZGxlc3Mgb2Ygc2l6ZS4NCistLQ0KKy0tIFRoaXMgdmVyaWZp ZXMgdGhlIHByaW1hcnkgcHJvZHVjZXMgYSB2YWxpZCBpbmRleCBvbiB0aGF0IHBhdGg7IGJ5dGUt Zm9yLQ0KKy0tIGJ5dGUgcmVkbyBvZiB0aGUgZm9yY2VkIGltYWdlIGlzIGNvdmVyZWQgYnkgdGhl IHJlY292ZXJ5L3N0cmVhbWluZyB0ZXN0cw0KKy0tIHJ1biB3aXRoIHdhbF9jb25zaXN0ZW5jeV9j aGVja2luZy4NCistLQ0KK3NldCBjbGllbnRfbWluX21lc3NhZ2VzIFRPICd3YXJuaW5nJzsNCitj cmVhdGUgZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMgaW5qZWN0aW9uX3BvaW50czsNCitjcmVhdGUg ZXh0ZW5zaW9uIGlmIG5vdCBleGlzdHMgYW1jaGVjazsNCityZXNldCBjbGllbnRfbWluX21lc3Nh Z2VzOw0KKw0KKy0tIExvY2FsIHRvIHRoaXMgcHJvY2Vzcywgc28gYSBjb25jdXJyZW50IGJhY2tl bmQgaXMgdW5hZmZlY3RlZC4NCitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zZXRfbG9jYWwoKTsN CitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ25idHJlZS1wcmVmaXgtZm9yY2UtcmZw aScsICdub3RpY2UnKTsNCisNCistLSBLZXlzIHdpdGggYSBsb25nIHNoYXJlZCBsZWFkaW5nIHBy ZWZpeCBzbyB0aGUgbGVhdmVzIGNvbXByZXNzIGFuZCBzcGxpdC4NCitjcmVhdGUgdGFibGUgbmJ0 cmVlX3ByZWZpeF9yZnBpKHUgdGV4dCBjb2xsYXRlICJDIikgd2l0aCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gb2ZmKTsNCitjcmVhdGUgaW5kZXggbmJ0cmVlX3ByZWZpeF9yZnBpX3VfaWR4IG9uIG5i dHJlZV9wcmVmaXhfcmZwaSAodSkNCisgIHdpdGggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsN CisNCistLSBEaXN0aW5jdCBrZXlzOiBtYW55IHNwbGl0cywgZWFjaCByaWdodCBoYWxmIGNhcnJp ZWQgYXMgYSBmb3JjZWQgaW1hZ2UuDQoraW5zZXJ0IGludG8gbmJ0cmVlX3ByZWZpeF9yZnBpDQor ICBzZWxlY3QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQo Zzo6dGV4dCwgOCwgJzAnKQ0KKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7DQor DQorLS0gRHVwbGljYXRlLWhlYXZ5IGtleXM6IHJ1bnRpbWUgZGVkdXBsaWNhdGlvbiwgcmUtY29k ZWQgcGFnZSBhcyBhIGZvcmNlZCBpbWFnZS4NCitpbnNlcnQgaW50byBuYnRyZWVfcHJlZml4X3Jm cGkNCisgIHNlbGVjdCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwg bHBhZCgoZyAlIDIwMCk6OnRleHQsIDgsICcwJykNCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEs IDIwMDAwKSBnOw0KKw0KKy0tIFRoZSBpbmRleCBtdXN0IGJlIHN0cnVjdHVyYWxseSB2YWxpZCBh bmQgYWdyZWUgd2l0aCB0aGUgaGVhcC4NCitTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2NoZWNrKCdu YnRyZWVfcHJlZml4X3JmcGlfdV9pZHgnOjpyZWdjbGFzcywgdHJ1ZSwgdHJ1ZSk7DQorDQorLS0g QW4gaW5kZXgtb25seSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1YWwgdGhlIGluZGVw ZW5kZW50IG9yYWNsZS4NCitzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxF Q1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIG5idHJlZV9wcmVmaXhf cmZwaSkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGZv cmNlZF9yZnBpX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90 by9yZXNvdXJjZS8nIHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnDQorICAgICAgICBVTklPTiBBTEwNCisgICAg ICAgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBh ZCgoZyAlIDIwMCk6OnRleHQsIDgsICcwJykNCisgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMjAwMDApIGcpIG9yYWNsZTsNCityZXNldCBlbmFibGVfc2Vxc2NhbjsNCisNCitTRUxF Q1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ25idHJlZS1wcmVmaXgtZm9yY2UtcmZwaScpOw0K K2Ryb3AgdGFibGUgbmJ0cmVlX3ByZWZpeF9yZnBpOw0KK2Ryb3AgZXh0ZW5zaW9uIGFtY2hlY2s7 DQorZHJvcCBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50czsNCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYnRyZWVfaW5kZXgub3V0DQppbmRleCA3YzUzZDU5ODY0OS4uYzFkYWU0YjU1YWQgMTAw NjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4Lm91dA0KKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9pbmRleC5vdXQNCkBAIC04OTEsMyAr ODkxLDI1OSBAQCBBTFRFUiBJTkRFWCBidHJlZV9wYXJ0X2lkeCBBTFRFUiBDT0xVTU4gaWQgU0VU IChuX2Rpc3RpbmN0PTEwMCk7DQogRVJST1I6ICBBTFRFUiBhY3Rpb24gQUxURVIgQ09MVU1OIC4u LiBTRVQgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiByZWxhdGlvbiAiYnRyZWVfcGFydF9pZHgiDQog REVUQUlMOiAgVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgcGFydGl0aW9uZWQg aW5kZXhlcy4NCiBEUk9QIFRBQkxFIGJ0cmVlX3BhcnQ7DQorLS0NCistLSBMZWFmIGtleSBwcmVm aXggY29tcHJlc3Npb24gKHByZWZpeF9jb21wcmVzc2lvbiByZWxvcHRpb24pLg0KKy0tDQorLS0g Q29ycmVjdG5lc3MgaXMgY2hlY2tlZCBhZ2FpbnN0IGFuIGluZGVwZW5kZW50IG9yYWNsZTogYSBm b3JjZWQgaW5kZXggc2Nhbg0KKy0tIG92ZXIgYSBwcmVmaXgtY29tcHJlc3NlZCBpbmRleCBtdXN0 IHJldHVybiBleGFjdGx5IHRoZSByb3dzIGEgc2VxdWVudGlhbA0KKy0tIHNjYW4gb2YgdGhlIHNh bWUgZGF0YSByZXR1cm5zLCBhY3Jvc3MgYnVpbGQsIHJldGFpbCBpbnNlcnQvc3BsaXQsIGRlbGV0 ZQ0KKy0tIGFuZCBWQUNVVU0sIGZvciBlcXVhbGl0eSwgcmFuZ2UsIGJhY2t3YXJkLCBpbmRleC1v bmx5IGFuZCBOVUxMIHF1ZXJpZXMuDQorLS0gVGhlIGtleSBjb2x1bW4gdXNlcyB0aGUgQyBjb2xs YXRpb24gc28gdGhlIHJlY29yZGVkIG91dHB1dCBpcyBkZXRlcm1pbmlzdGljDQorLS0gYWNyb3Nz IHBsYXRmb3Jtcy4gIFRoZSBwYWdlIGZvcm1hdCBpcyBleGVyY2lzZWQgYnkga2V5cyB0aGF0IHNo YXJlIGEgbG9uZw0KKy0tIHByZWZpeCAoVVJMLWxpa2UpLCBieSBrZXlzIHNoYXJpbmcgZXhhY3Rs eSAxMjUvMTI2LzEyNyBieXRlcyAodGhlIGJvdW5kYXJ5DQorLS0gd2hlcmUgdGhlIG9uZS1ieXRl IHNoYXJlZCBjb3VudCBzYXR1cmF0ZXM6IEJUUkVFX1BSRUZJWF9NQVggaXMgMTI2LA0KKy0tIEJU UkVFX1BSRUZJWF9SQVcgaXMgMTI3KSwgYnkga2V5cyB0aGF0IHNoYXJlIG5vdGhpbmcsIGFuZCBi eSBhIE5VTEwga2V5Lg0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3ByZWZpeCAodSB0ZXh0IENP TExBVEUgIkMiKTsNCistLSBCdWlsZC1wYXRoIHBhZ2VzIChDUkVBVEUgSU5ERVggd3JpdGVzIHdo b2xlIGxlYXZlcykuICBBIHNoYXJlZCA0MC1ieXRlDQorLS0gcHJlZml4LCBwbHVzIGV4cGxpY2l0 IHJvd3MgYXQgdGhlIDEyNS8xMjYvMTI3IHNoYXJlZC1ieXRlIGJvdW5kYXJ5Lg0KK0lOU0VSVCBJ TlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8v cmVzb3VyY2UvJyB8fCBscGFkKChnICUgMjAwMDApOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXgNCisg IFNFTEVDVCByZXBlYXQoJ2EnLCA0MCkgfHwgcmVwZWF0KCdiJywgbikgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoODUsIDkwKSBuOw0KK0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeCBWQUxVRVMNCisgIChy ZXBlYXQoJ2EnLCAxMjUpKSwgKHJlcGVhdCgnYScsIDEyNikpLCAocmVwZWF0KCdhJywgMTI3KSks IChyZXBlYXQoJ2EnLCAzMDApKSwNCisgICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSwgKE5VTEwp Ow0KK0NSRUFURSBJTkRFWCBidHJlZV9wcmVmaXhfb24gT04gYnRyZWVfcHJlZml4ICh1KSBXSVRI IChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQorLS0gQ29uZmlybSB0aGUgaW5kZXggcmVhbGx5 IGlzIHVzZWQgKGFuZCBpcyBwcmVmaXgtY29tcHJlc3NlZCksIHNvIHRoZSBxdWVyaWVzDQorLS0g YmVsb3cgZXhlcmNpc2UgdGhlIGNvZGVkIHBhZ2UgZm9ybWF0IHJhdGhlciB0aGFuIHNpbGVudGx5 IGZhbGxpbmcgYmFjay4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9i aXRtYXBzY2FuID0gb2ZmOw0KK0VYUExBSU4gKGNvc3RzIG9mZikNCisgIFNFTEVDVCB1IEZST00g YnRyZWVfcHJlZml4IFdIRVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291 cmNlLzAwMDEyMzQ1JzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CisgSW5kZXggT25seSBTY2FuIHVzaW5nIGJ0cmVlX3ByZWZpeF9vbiBvbiBidHJlZV9wcmVmaXgN CisgICBJbmRleCBDb25kOiAodSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3Vy Y2UvMDAwMTIzNDUnOjp0ZXh0KQ0KKygyIHJvd3MpDQorDQorLS0gRXF1YWxpdHksIHJhbmdlIGFu ZCBiYWNrd2FyZCBzY2FucyBmb3JjZWQgdGhyb3VnaCB0aGUgcHJlZml4IGluZGV4LiAgVGhlaXIN CistLSByZXN1bHRzIGFyZSByZWNvcmRlZCBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LCB3aGljaCBp cyBpdHNlbGYgdGhlIG9yYWNsZTogYQ0KKy0tIGRlY29kZSByZWdyZXNzaW9uIGNoYW5nZXMgdGhl c2Ugcm93cy4gIChUaGUgaW5kZXgtb25seSBkaWdlc3QgYmVsb3cgYWRkcyBhbg0KKy0tIG9yYWNs ZSB0aGF0IGRvZXMgbm90IHJlYWQgdGhlIGluZGV4IGF0IGFsbC4pDQorU0VMRUNUIGNvdW50KCop IEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0 aC90by9yZXNvdXJjZS8wMDAxMjM0NSc7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAgIDENCiso MSByb3cpDQorDQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1 IEJFVFdFRU4gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAwMDEwMCcN CisgICAgICAgICAgICAgQU5EICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2Uv MDAwMDA5MDAnOw0KKyBjb3VudCANCistLS0tLS0tDQorICAgODAxDQorKDEgcm93KQ0KKw0KK1NF TEVDVCB1IEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1ID4gJ2h0dHBzOi8vZXhhbXBsZS5j b20vcGF0aC90by9yZXNvdXJjZS8wMDAxOTk5NicgT1JERVIgQlkgdSBERVNDOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgdSAgICAgICAgICAgICAgICAgICAgICAgDQorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgenp6LW5vLXNoYXJlZC1wcmVmaXgN CisgaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDE5OTk5DQorIGh0dHBz Oi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAxOTk5OA0KKyBodHRwczovL2V4YW1w bGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTk5OTcNCisoNCByb3dzKQ0KKw0KKy0tIEJvdW5k YXJ5IGFuZCBvdmVyc2l6ZWQga2V5cyByb3VuZC10cmlwIHRvIHRoZWlyIGV4YWN0IHN0b3JlZCB2 YWx1ZXMuDQorU0VMRUNUIHUgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBMSUtFICdhYWFhJScg T1JERVIgQlkgdTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIGFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhDQorIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhDQorIGFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYQ0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYg0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmINCisgYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg0KKyBh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYg0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmINCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg0KKygx MCByb3dzKQ0KKw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1ID0g cmVwZWF0KCdhJywgMzAwKTsNCisgY291bnQgDQorLS0tLS0tLQ0KKyAgICAgMQ0KKygxIHJvdykN CisNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOVUxMOw0K KyBjb3VudCANCistLS0tLS0tDQorICAgICAxDQorKDEgcm93KQ0KKw0KKy0tIEluZGV4LW9ubHkg c2NhbiBvdmVyIHRoZSBwcmVmaXggaW5kZXgsIGNvbXBhcmVkIHRvIHRoZSBsaXRlcmFsIHZhbHVl cyB0aGF0DQorLS0gd2VyZSBpbnNlcnRlZCAoYW4gb3JhY2xlIHRoYXQgZG9lcyBub3QgaXRzZWxm IHJlYWQgdGhlIGluZGV4KS4NCitTRUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcg T1JERVIgQlkgdSkpDQorICAgICAgICAgIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgSVMgTk9U IE5VTEwpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZIHgpKSBBUyBp b3Nfb2sNCisgIEZST00gKA0KKyAgICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90 by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDAwMCk6OnRleHQsIDgsICcwJykgQVMgeA0KKyAg ICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnDQorICAgIFVOSU9OIEFMTCBTRUxF Q1QgcmVwZWF0KCdhJywgNDApIHx8IHJlcGVhdCgnYicsIG4pIEZST00gZ2VuZXJhdGVfc2VyaWVz KDg1LCA5MCkgbg0KKyAgICBVTklPTiBBTEwgU0VMRUNUIHYgRlJPTSAoVkFMVUVTIChyZXBlYXQo J2EnLDEyNSkpLChyZXBlYXQoJ2EnLDEyNikpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChyZXBlYXQoJ2EnLDEyNykpLChyZXBlYXQoJ2EnLDMwMCkpLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSkgdCh2 KQ0KKyAgKSBvcmFjbGU7DQorIGlvc19vayANCistLS0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0K Ky0tIFJldGFpbCBpbnNlcnRzIGNhdXNlIHNwbGl0cyB0aGF0IGZhdWx0IHBhZ2VzIGZvcndhcmQg aW50byB0aGUgY29kZWQgZm9ybWF0Ow0KKy0tIGFuIGluZGV4LW9ubHkgc2NhbiBtdXN0IHN0aWxs IGFncmVlIHdpdGggdGhlIGluZGVwZW5kZW50IG9yYWNsZSBhZnRlcndhcmRzLg0KK0lOU0VSVCBJ TlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL290aGVyLycg fHwgbHBhZChnOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAw MCkgZzsNCistLSBEZWxldGUgdGhlbiBWQUNVVU0sIHRoZW4gcmUtaW5zZXJ0IGludG8gZnJlZWQg c3BhY2UuICBUaGUgZGVsZXRlIHRhcmdldHMNCistLSBvbmx5IHBhcnQgb2YgdGhlIFVSTCBuYW1l c3BhY2Ugc28gdGhlIGJvdW5kYXJ5IGtleXMgKGFhYWEuLi4venp6Li4uKSBzdXJ2aXZlDQorLS0g Zm9yIHRoZSBjaGVja3MgYmVsb3cuDQorREVMRVRFIEZST00gYnRyZWVfcHJlZml4DQorICBXSEVS RSB1ID49ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDAwMDAnDQor ICAgIEFORCB1IDwgICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDUw MDAnOw0KK1ZBQ1VVTSBidHJlZV9wcmVmaXg7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQor ICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQo KGcgJSA1MDAwKTo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAw MCkgZzsNCistLSBBZnRlciB0aGUgY2h1cm4sIGFuIGluZGV4LW9ubHkgc2NhbiBvZiB0aGUgbGl2 ZSBrZXlzIG11c3QgZXF1YWwgdGhlIHNhbWUNCistLSBrZXlzIGZldGNoZWQgZnJvbSB0aGUgaGVh cCBieSBhIHNlcXVlbnRpYWwgc2NhbiAoYW4gaW5kZXBlbmRlbnQgcGF0aCk6IGlmDQorLS0gZGVj b2RpbmcgdGhlIGNvZGVkIGxlYXZlcyB3ZXJlIHdyb25nLCB0aGUgdHdvIGRpZ2VzdHMgd291bGQg ZGlmZmVyLg0KK1NFVCBlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uOw0KK1NFTEVDVCBtZDUoc3Ry aW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEFTIGlvc19kaWdlc3QNCisgIEZST00gYnRyZWVf cHJlZml4IFdIRVJFIHUgSVMgTk9UIE5VTEwgXGdzZXQNCitTRVQgZW5hYmxlX2luZGV4c2NhbiA9 IG9mZjsNCitTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9zZXFz Y2FuID0gb247DQorU0VMRUNUIDonaW9zX2RpZ2VzdCcgPQ0KKyAgICAgICAoU0VMRUNUIG1kNShz dHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJ UyBOT1QgTlVMTCkNCisgICAgICAgQVMgcG9zdF9jaHVybl9vazsNCisgcG9zdF9jaHVybl9vayAN CistLS0tLS0tLS0tLS0tLS0NCisgdA0KKygxIHJvdykNCisNCitTRVQgZW5hYmxlX2luZGV4c2Nh biA9IG9uOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2Fu Ow0KKy0tIFRoZSByZWxvcHRpb24gcm91bmQtdHJpcHMgYW5kIGNhbiBiZSB0b2dnbGVkIHdpdGhv dXQgYSByZXdyaXRlLg0KK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVs bmFtZSA9ICdidHJlZV9wcmVmaXhfb24nOw0KKyAgICAgICByZWxvcHRpb25zICAgICAgICANCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIHtwcmVmaXhfY29tcHJlc3Npb249b259DQorKDEg cm93KQ0KKw0KK0FMVEVSIElOREVYIGJ0cmVlX3ByZWZpeF9vbiBTRVQgKHByZWZpeF9jb21wcmVz c2lvbiA9IG9mZik7DQorU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxu YW1lID0gJ2J0cmVlX3ByZWZpeF9vbic7DQorICAgICAgICByZWxvcHRpb25zICAgICAgICANCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyB7cHJlZml4X2NvbXByZXNzaW9uPW9mZn0NCiso MSByb3cpDQorDQorLS0gUmVhZGluZyBiYWNrIHdpdGggdGhlIG9wdGlvbiBvZmYgc3RpbGwgcmV0 dXJucyBjb3JyZWN0IHJvd3M6IGV4aXN0aW5nDQorLS0gQlRQX1BSRUZJWCBsZWF2ZXMga2VlcCB0 aGVpciBjb2RlZCBmb3JtIGFuZCBkZWNvZGUgb24gdGhlIHBhZ2UgZmxhZy4NCitTRVQgZW5hYmxl X3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4IFdIRVJF IHUgPSByZXBlYXQoJ2EnLCAxMjYpOw0KKyBjb3VudCANCistLS0tLS0tDQorICAgICAxDQorKDEg cm93KQ0KKw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KKy0tIEEgbm9uLXZhcmxlbmEgZmlyc3Qg Y29sdW1uIGlzIGxlZ2FsIGFuZCBzaWxlbnRseSBzdG9yZXMgbm8gcHJlZml4OyB2ZXJpZnkgYQ0K Ky0tIHNjYW4gb3ZlciBzdWNoIGFuIGluZGV4IHJldHVybnMgY29ycmVjdCByb3dzLg0KK0NSRUFU RSBJTkRFWCBidHJlZV9wcmVmaXhfaW50IE9OIGJ0cmVlX3ByZWZpeCAoKGxlbmd0aCh1KSkpIFdJ VEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7 DQorU0VMRUNUIGxlbmd0aCh1KSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSBsZW5ndGgodSkgPSAz MDA7DQorIGxlbmd0aCANCistLS0tLS0tLQ0KKyAgICAzMDANCisoMSByb3cpDQorDQorUkVTRVQg ZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVmaXg7DQorLS0NCistLSBCb3R0 b20tdXAgaW5kZXggZGVsZXRpb24gb24gcHJlZml4LWNvbXByZXNzZWQgcGFnZXMuDQorLS0NCist LSBBbiBVUERBVEUgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGluZGV4ZWQgY29sdW1uIG1hcmtz IHRoZSByZXN1bHRpbmcgaW5kZXgNCistLSBpbnNlcnQgImxvZ2ljYWxseSB1bmNoYW5nZWQiLCB3 aGljaCBsZXRzIG5idHJlZSBydW4gYSBib3R0b20tdXAgZGVsZXRpb24NCistLSBwYXNzIGJlZm9y ZSBzcGxpdHRpbmcgYSBsZWFmLiAgVGhhdCBwYXNzIHJlYWRzIGFuZCAob25seSkgcmVtb3ZlcyBp dGVtczsgaXQNCistLSBtdXN0IHdvcmsgb24gY29kZWQgcGFnZXMgdG9vLiAgSGVyZSB3ZSBleGVy Y2lzZSB0aGUgcGF0aCBhbmQgdmVyaWZ5IHRoZQ0KKy0tIGluZGV4IHN0YXlzIGNvcnJlY3Q7IGNv bW1pdHRlZCB1cGRhdGUgYmF0Y2hlcyBiZXR3ZWVuIFZBQ1VVTXMgbGVhdmUNCistLSByZW1vdmFi bGUgZHVwbGljYXRlcyBmb3IgdGhlIHBhc3MgdG8gZmluZC4gIChCbG9hdCBpcyBxdWFudGlmaWVk IGluIHRoZQ0KKy0tIHBlcmZvcm1hbmNlIGJlbmNobWFyaywgbm90IGhlcmUsIHNpbmNlIHJlbW92 YWJpbGl0eSBpcyB0aW1pbmctZGVwZW5kZW50LikNCistLQ0KK0NSRUFURSBUQUJMRSBidHJlZV9w cmVmaXhfYnUgKGlkIGludCBQUklNQVJZIEtFWSwgdSB0ZXh0IENPTExBVEUgIkMiLCBmaWxsZXIg dGV4dCk7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4X2J1DQorICBTRUxFQ1QgZywgJ2h0dHBz Oi8vZXhhbXBsZS5jb20vcGF0aC8nIHx8IGxwYWQoKGcgJSA1MDApOjp0ZXh0LCA4LCAnMCcpLCBy ZXBlYXQoJ3gnLCA0MCkNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDApIGc7DQorQ1JF QVRFIElOREVYIGJ0cmVlX3ByZWZpeF9idV91IE9OIGJ0cmVlX3ByZWZpeF9idSAodSkgV0lUSCAo cHJlZml4X2NvbXByZXNzaW9uID0gb24pOw0KKy0tIFNldmVyYWwgY29tbWl0dGVkIG5vbi1rZXkg VVBEQVRFIGJhdGNoZXMgKHZlcnNpb24gY2h1cm4gb24gdGhlIHByZWZpeCBpbmRleCkuDQorVVBE QVRFIGJ0cmVlX3ByZWZpeF9idSBTRVQgZmlsbGVyID0gcmVwZWF0KCd5JywgNDApOw0KK1VQREFU RSBidHJlZV9wcmVmaXhfYnUgU0VUIGZpbGxlciA9IHJlcGVhdCgneicsIDQwKTsNCitVUERBVEUg YnRyZWVfcHJlZml4X2J1IFNFVCBmaWxsZXIgPSByZXBlYXQoJ3cnLCA0MCk7DQorLS0gQ29ycmVj dG5lc3MgYWZ0ZXIgdGhlIGNodXJuOiBhbiBpbmRleC1vbmx5IHNjYW4gb2YgdGhlIGtleSBjb2x1 bW4gbXVzdCBlcXVhbA0KKy0tIHRoZSBpbmRlcGVuZGVudCBvcmFjbGUgKHRoZSBsaXRlcmFsIGtl eXMpLCBwcm92aW5nIG5vIGRlY29kZS9kZWxldGlvbiBkYW1hZ2UuDQorU0VUIGVuYWJsZV9zZXFz Y2FuID0gb2ZmOw0KK1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBC WSB1KSkgRlJPTSBidHJlZV9wcmVmaXhfYnUpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwg J3wnIE9SREVSIEJZIHgpKSBBUyBib3R0b211cF9vaw0KKyAgRlJPTSAoU0VMRUNUICdodHRwczov L2V4YW1wbGUuY29tL3BhdGgvJyB8fCBscGFkKChnICUgNTAwKTo6dGV4dCwgOCwgJzAnKSBBUyB4 DQorICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDApIGcpIG9yYWNsZTsNCisg Ym90dG9tdXBfb2sgDQorLS0tLS0tLS0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeF9idQ0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1w bGUuY29tL3BhdGgvJyB8fCBscGFkKCc3JywgOCwgJzAnKTsNCisgY291bnQgDQorLS0tLS0tLQ0K KyAgICAgOA0KKygxIHJvdykNCisNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitEUk9QIFRBQkxF IGJ0cmVlX3ByZWZpeF9idTsNCistLQ0KKy0tIFJ1bnRpbWUgZGVkdXBsaWNhdGlvbiBvbiBhIHBy ZWZpeC1jb21wcmVzc2VkIHBhZ2UuICBEdXBsaWNhdGUga2V5cyBpbnNlcnRlZA0KKy0tIG9uZSBh dCBhIHRpbWUgaW50byBhbiBleGlzdGluZyBwcmVmaXggaW5kZXggZmlsbCBhIGxlYWY7IGJlZm9y ZSBpdCBzcGxpdHMsDQorLS0gdGhlIGRlZHVwbGljYXRpb24gcGFzcyBkZWNvZGVzIHRoZSBjb2Rl ZCBpdGVtcywgbWVyZ2VzIHRoZSBkdXBsaWNhdGUgVElEcw0KKy0tIGludG8gcG9zdGluZyBsaXN0 cyBhbmQgcmUtY29kZXMgdGhlIHBhZ2UuICBUaGUgZGVjb2RlZCBzZXQgY2FuIGV4Y2VlZCBvbmUN CistLSBwYWdlIGV2ZW4gd2hlbiB0aGUgY29kZWQgZm9ybSBmaXQsIGluIHdoaWNoIGNhc2UgdGhl IHBhc3MgYWJvcnRzIGFuZCB0aGUNCistLSBwYWdlIHNwbGl0cyBpbnN0ZWFkOyBlaXRoZXIgd2F5 IHRoZSByZXN1bHQgbXVzdCBiZSBjb3JyZWN0Lg0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3By ZWZpeF9kZCAodSB0ZXh0IENPTExBVEUgIkMiKTsNCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4 X2RkX3UgT04gYnRyZWVfcHJlZml4X2RkICh1KSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBv bik7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4X2RkDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDApOjp0ZXh0LCA4LCAn MCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwMCkgZzsNCitTRVQgZW5hYmxlX3Nl cXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVS IEJZIHUpKSBGUk9NIGJ0cmVlX3ByZWZpeF9kZCkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4 LCAnfCcgT1JERVIgQlkgeCkpIEFTIHJ1bnRpbWVfZGVkdXBfb2sNCisgIEZST00gKFNFTEVDVCAn aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMCk6 OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0 MDAwMCkgZykgb3JhY2xlOw0KKyBydW50aW1lX2RlZHVwX29rIA0KKy0tLS0tLS0tLS0tLS0tLS0t LQ0KKyB0DQorKDEgcm93KQ0KKw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeF9k ZA0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8 fCBscGFkKCc0MicsIDgsICcwJyk7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAyMDANCisoMSBy b3cpDQorDQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVmaXhf ZGQ7DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsDQppbmRleCA2OTkwZDc4MThkYS4u NmNkMDUzYTE1OTYgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRl eC5zcWwNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNxbA0KQEAgLTUy MCwzICs1MjAsMTcwIEBAIENSRUFURSBUQUJMRSBidHJlZV9wYXJ0IChpZCBpbnQ0KSBQQVJUSVRJ T04gQlkgUkFOR0UgKGlkKTsNCiBDUkVBVEUgSU5ERVggYnRyZWVfcGFydF9pZHggT04gYnRyZWVf cGFydChpZCk7DQogQUxURVIgSU5ERVggYnRyZWVfcGFydF9pZHggQUxURVIgQ09MVU1OIGlkIFNF VCAobl9kaXN0aW5jdD0xMDApOw0KIERST1AgVEFCTEUgYnRyZWVfcGFydDsNCisNCistLQ0KKy0t IExlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbiAocHJlZml4X2NvbXByZXNzaW9uIHJlbG9wdGlv bikuDQorLS0NCistLSBDb3JyZWN0bmVzcyBpcyBjaGVja2VkIGFnYWluc3QgYW4gaW5kZXBlbmRl bnQgb3JhY2xlOiBhIGZvcmNlZCBpbmRleCBzY2FuDQorLS0gb3ZlciBhIHByZWZpeC1jb21wcmVz c2VkIGluZGV4IG11c3QgcmV0dXJuIGV4YWN0bHkgdGhlIHJvd3MgYSBzZXF1ZW50aWFsDQorLS0g c2NhbiBvZiB0aGUgc2FtZSBkYXRhIHJldHVybnMsIGFjcm9zcyBidWlsZCwgcmV0YWlsIGluc2Vy dC9zcGxpdCwgZGVsZXRlDQorLS0gYW5kIFZBQ1VVTSwgZm9yIGVxdWFsaXR5LCByYW5nZSwgYmFj a3dhcmQsIGluZGV4LW9ubHkgYW5kIE5VTEwgcXVlcmllcy4NCistLSBUaGUga2V5IGNvbHVtbiB1 c2VzIHRoZSBDIGNvbGxhdGlvbiBzbyB0aGUgcmVjb3JkZWQgb3V0cHV0IGlzIGRldGVybWluaXN0 aWMNCistLSBhY3Jvc3MgcGxhdGZvcm1zLiAgVGhlIHBhZ2UgZm9ybWF0IGlzIGV4ZXJjaXNlZCBi eSBrZXlzIHRoYXQgc2hhcmUgYSBsb25nDQorLS0gcHJlZml4IChVUkwtbGlrZSksIGJ5IGtleXMg c2hhcmluZyBleGFjdGx5IDEyNS8xMjYvMTI3IGJ5dGVzICh0aGUgYm91bmRhcnkNCistLSB3aGVy ZSB0aGUgb25lLWJ5dGUgc2hhcmVkIGNvdW50IHNhdHVyYXRlczogQlRSRUVfUFJFRklYX01BWCBp cyAxMjYsDQorLS0gQlRSRUVfUFJFRklYX1JBVyBpcyAxMjcpLCBieSBrZXlzIHRoYXQgc2hhcmUg bm90aGluZywgYW5kIGJ5IGEgTlVMTCBrZXkuDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJl Zml4ICh1IHRleHQgQ09MTEFURSAiQyIpOw0KKy0tIEJ1aWxkLXBhdGggcGFnZXMgKENSRUFURSBJ TkRFWCB3cml0ZXMgd2hvbGUgbGVhdmVzKS4gIEEgc2hhcmVkIDQwLWJ5dGUNCistLSBwcmVmaXgs IHBsdXMgZXhwbGljaXQgcm93cyBhdCB0aGUgMTI1LzEyNi8xMjcgc2hhcmVkLWJ5dGUgYm91bmRh cnkuDQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBs ZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDAwMCk6OnRleHQsIDgsICcw JykNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnOw0KK0lOU0VSVCBJTlRPIGJ0 cmVlX3ByZWZpeA0KKyAgU0VMRUNUIHJlcGVhdCgnYScsIDQwKSB8fCByZXBlYXQoJ2InLCBuKSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg4NSwgOTApIG47DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4 IFZBTFVFUw0KKyAgKHJlcGVhdCgnYScsIDEyNSkpLCAocmVwZWF0KCdhJywgMTI2KSksIChyZXBl YXQoJ2EnLCAxMjcpKSwgKHJlcGVhdCgnYScsIDMwMCkpLA0KKyAgKCd6enotbm8tc2hhcmVkLXBy ZWZpeCcpLCAoTlVMTCk7DQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9vbiBPTiBidHJlZV9w cmVmaXggKHUpIFdJVEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCisNCistLSBDb25maXJt IHRoZSBpbmRleCByZWFsbHkgaXMgdXNlZCAoYW5kIGlzIHByZWZpeC1jb21wcmVzc2VkKSwgc28g dGhlIHF1ZXJpZXMNCistLSBiZWxvdyBleGVyY2lzZSB0aGUgY29kZWQgcGFnZSBmb3JtYXQgcmF0 aGVyIHRoYW4gc2lsZW50bHkgZmFsbGluZyBiYWNrLg0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9m ZjsNCitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7DQorRVhQTEFJTiAoY29zdHMgb2ZmKQ0K KyAgU0VMRUNUIHUgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUu Y29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTIzNDUnOw0KKw0KKy0tIEVxdWFsaXR5LCByYW5nZSBh bmQgYmFja3dhcmQgc2NhbnMgZm9yY2VkIHRocm91Z2ggdGhlIHByZWZpeCBpbmRleC4gIFRoZWly DQorLS0gcmVzdWx0cyBhcmUgcmVjb3JkZWQgaW4gdGhlIGV4cGVjdGVkIG91dHB1dCwgd2hpY2gg aXMgaXRzZWxmIHRoZSBvcmFjbGU6IGENCistLSBkZWNvZGUgcmVncmVzc2lvbiBjaGFuZ2VzIHRo ZXNlIHJvd3MuICAoVGhlIGluZGV4LW9ubHkgZGlnZXN0IGJlbG93IGFkZHMgYW4NCistLSBvcmFj bGUgdGhhdCBkb2VzIG5vdCByZWFkIHRoZSBpbmRleCBhdCBhbGwuKQ0KK1NFTEVDVCBjb3VudCgq KSBGUk9NIGJ0cmVlX3ByZWZpeA0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3Bh dGgvdG8vcmVzb3VyY2UvMDAwMTIzNDUnOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3By ZWZpeA0KKyAgV0hFUkUgdSBCRVRXRUVOICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVz b3VyY2UvMDAwMDAxMDAnDQorICAgICAgICAgICAgIEFORCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9w YXRoL3RvL3Jlc291cmNlLzAwMDAwOTAwJzsNCitTRUxFQ1QgdSBGUk9NIGJ0cmVlX3ByZWZpeA0K KyAgV0hFUkUgdSA+ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTk5 OTYnIE9SREVSIEJZIHUgREVTQzsNCistLSBCb3VuZGFyeSBhbmQgb3ZlcnNpemVkIGtleXMgcm91 bmQtdHJpcCB0byB0aGVpciBleGFjdCBzdG9yZWQgdmFsdWVzLg0KK1NFTEVDVCB1IEZST00gYnRy ZWVfcHJlZml4IFdIRVJFIHUgTElLRSAnYWFhYSUnIE9SREVSIEJZIHU7DQorU0VMRUNUIGNvdW50 KCopIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgPSByZXBlYXQoJ2EnLCAzMDApOw0KK1NFTEVD VCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5VTEw7DQorDQorLS0gSW5k ZXgtb25seSBzY2FuIG92ZXIgdGhlIHByZWZpeCBpbmRleCwgY29tcGFyZWQgdG8gdGhlIGxpdGVy YWwgdmFsdWVzIHRoYXQNCistLSB3ZXJlIGluc2VydGVkIChhbiBvcmFjbGUgdGhhdCBkb2VzIG5v dCBpdHNlbGYgcmVhZCB0aGUgaW5kZXgpLg0KK1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdfYWdn KHUsICd8JyBPUkRFUiBCWSB1KSkNCisgICAgICAgICAgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUg dSBJUyBOT1QgTlVMTCkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkg eCkpIEFTIGlvc19vaw0KKyAgRlJPTSAoDQorICAgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNv bS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMDAwKTo6dGV4dCwgOCwgJzAnKSBB UyB4DQorICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGcNCisgICAgVU5JT04g QUxMIFNFTEVDVCByZXBlYXQoJ2EnLCA0MCkgfHwgcmVwZWF0KCdiJywgbikgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoODUsIDkwKSBuDQorICAgIFVOSU9OIEFMTCBTRUxFQ1QgdiBGUk9NIChWQUxVRVMg KHJlcGVhdCgnYScsMTI1KSksKHJlcGVhdCgnYScsMTI2KSksDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHJlcGVhdCgnYScsMTI3KSksKHJlcGVhdCgnYScsMzAwKSksDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd6enotbm8tc2hhcmVkLXByZWZp eCcpKSB0KHYpDQorICApIG9yYWNsZTsNCisNCistLSBSZXRhaWwgaW5zZXJ0cyBjYXVzZSBzcGxp dHMgdGhhdCBmYXVsdCBwYWdlcyBmb3J3YXJkIGludG8gdGhlIGNvZGVkIGZvcm1hdDsNCistLSBh biBpbmRleC1vbmx5IHNjYW4gbXVzdCBzdGlsbCBhZ3JlZSB3aXRoIHRoZSBpbmRlcGVuZGVudCBv cmFjbGUgYWZ0ZXJ3YXJkcy4NCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXgNCisgIFNFTEVDVCAn aHR0cHM6Ly9leGFtcGxlLmNvbS9vdGhlci8nIHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKQ0KKyAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGc7DQorLS0gRGVsZXRlIHRoZW4gVkFDVVVN LCB0aGVuIHJlLWluc2VydCBpbnRvIGZyZWVkIHNwYWNlLiAgVGhlIGRlbGV0ZSB0YXJnZXRzDQor LS0gb25seSBwYXJ0IG9mIHRoZSBVUkwgbmFtZXNwYWNlIHNvIHRoZSBib3VuZGFyeSBrZXlzIChh YWFhLi4uL3p6ei4uLikgc3Vydml2ZQ0KKy0tIGZvciB0aGUgY2hlY2tzIGJlbG93Lg0KK0RFTEVU RSBGUk9NIGJ0cmVlX3ByZWZpeA0KKyAgV0hFUkUgdSA+PSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9w YXRoL3RvL3Jlc291cmNlLzAwMDAwMDAwJw0KKyAgICBBTkQgdSA8ICAnaHR0cHM6Ly9leGFtcGxl LmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDA1MDAwJzsNCitWQUNVVU0gYnRyZWVfcHJlZml4Ow0K K0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29t L3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgNTAwMCk6OnRleHQsIDgsICcwJykNCisg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIGc7DQorLS0gQWZ0ZXIgdGhlIGNodXJuLCBh biBpbmRleC1vbmx5IHNjYW4gb2YgdGhlIGxpdmUga2V5cyBtdXN0IGVxdWFsIHRoZSBzYW1lDQor LS0ga2V5cyBmZXRjaGVkIGZyb20gdGhlIGhlYXAgYnkgYSBzZXF1ZW50aWFsIHNjYW4gKGFuIGlu ZGVwZW5kZW50IHBhdGgpOiBpZg0KKy0tIGRlY29kaW5nIHRoZSBjb2RlZCBsZWF2ZXMgd2VyZSB3 cm9uZywgdGhlIHR3byBkaWdlc3RzIHdvdWxkIGRpZmZlci4NCitTRVQgZW5hYmxlX2luZGV4b25s eXNjYW4gPSBvbjsNCitTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBB UyBpb3NfZGlnZXN0DQorICBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5PVCBOVUxMIFxn c2V0DQorU0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9pbmRleG9ubHlz Y2FuID0gb2ZmOw0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9uOw0KK1NFTEVDVCA6J2lvc19kaWdl c3QnID0NCisgICAgICAgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkp IEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgSVMgTk9UIE5VTEwpDQorICAgICAgIEFTIHBvc3Rf Y2h1cm5fb2s7DQorU0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvbjsNCitSRVNFVCBlbmFibGVfc2Vx c2NhbjsNCitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsNCisNCistLSBUaGUgcmVsb3B0aW9uIHJv dW5kLXRyaXBzIGFuZCBjYW4gYmUgdG9nZ2xlZCB3aXRob3V0IGEgcmV3cml0ZS4NCitTRUxFQ1Qg cmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAnYnRyZWVfcHJlZml4X29u JzsNCitBTFRFUiBJTkRFWCBidHJlZV9wcmVmaXhfb24gU0VUIChwcmVmaXhfY29tcHJlc3Npb24g PSBvZmYpOw0KK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9 ICdidHJlZV9wcmVmaXhfb24nOw0KKy0tIFJlYWRpbmcgYmFjayB3aXRoIHRoZSBvcHRpb24gb2Zm IHN0aWxsIHJldHVybnMgY29ycmVjdCByb3dzOiBleGlzdGluZw0KKy0tIEJUUF9QUkVGSVggbGVh dmVzIGtlZXAgdGhlaXIgY29kZWQgZm9ybSBhbmQgZGVjb2RlIG9uIHRoZSBwYWdlIGZsYWcuDQor U0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3By ZWZpeCBXSEVSRSB1ID0gcmVwZWF0KCdhJywgMTI2KTsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsN CisNCistLSBBIG5vbi12YXJsZW5hIGZpcnN0IGNvbHVtbiBpcyBsZWdhbCBhbmQgc2lsZW50bHkg c3RvcmVzIG5vIHByZWZpeDsgdmVyaWZ5IGENCistLSBzY2FuIG92ZXIgc3VjaCBhbiBpbmRleCBy ZXR1cm5zIGNvcnJlY3Qgcm93cy4NCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4X2ludCBPTiBi dHJlZV9wcmVmaXggKChsZW5ndGgodSkpKSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7 DQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCBsZW5ndGgodSkgRlJPTSBidHJl ZV9wcmVmaXggV0hFUkUgbGVuZ3RoKHUpID0gMzAwOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0K K0RST1AgVEFCTEUgYnRyZWVfcHJlZml4Ow0KKw0KKy0tDQorLS0gQm90dG9tLXVwIGluZGV4IGRl bGV0aW9uIG9uIHByZWZpeC1jb21wcmVzc2VkIHBhZ2VzLg0KKy0tDQorLS0gQW4gVVBEQVRFIHRo YXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbmRleGVkIGNvbHVtbiBtYXJrcyB0aGUgcmVzdWx0aW5n IGluZGV4DQorLS0gaW5zZXJ0ICJsb2dpY2FsbHkgdW5jaGFuZ2VkIiwgd2hpY2ggbGV0cyBuYnRy ZWUgcnVuIGEgYm90dG9tLXVwIGRlbGV0aW9uDQorLS0gcGFzcyBiZWZvcmUgc3BsaXR0aW5nIGEg bGVhZi4gIFRoYXQgcGFzcyByZWFkcyBhbmQgKG9ubHkpIHJlbW92ZXMgaXRlbXM7IGl0DQorLS0g bXVzdCB3b3JrIG9uIGNvZGVkIHBhZ2VzIHRvby4gIEhlcmUgd2UgZXhlcmNpc2UgdGhlIHBhdGgg YW5kIHZlcmlmeSB0aGUNCistLSBpbmRleCBzdGF5cyBjb3JyZWN0OyBjb21taXR0ZWQgdXBkYXRl IGJhdGNoZXMgYmV0d2VlbiBWQUNVVU1zIGxlYXZlDQorLS0gcmVtb3ZhYmxlIGR1cGxpY2F0ZXMg Zm9yIHRoZSBwYXNzIHRvIGZpbmQuICAoQmxvYXQgaXMgcXVhbnRpZmllZCBpbiB0aGUNCistLSBw ZXJmb3JtYW5jZSBiZW5jaG1hcmssIG5vdCBoZXJlLCBzaW5jZSByZW1vdmFiaWxpdHkgaXMgdGlt aW5nLWRlcGVuZGVudC4pDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJlZml4X2J1IChpZCBp bnQgUFJJTUFSWSBLRVksIHUgdGV4dCBDT0xMQVRFICJDIiwgZmlsbGVyIHRleHQpOw0KK0lOU0VS VCBJTlRPIGJ0cmVlX3ByZWZpeF9idQ0KKyAgU0VMRUNUIGcsICdodHRwczovL2V4YW1wbGUuY29t L3BhdGgvJyB8fCBscGFkKChnICUgNTAwKTo6dGV4dCwgOCwgJzAnKSwgcmVwZWF0KCd4JywgNDAp DQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwKSBnOw0KK0NSRUFURSBJTkRFWCBidHJl ZV9wcmVmaXhfYnVfdSBPTiBidHJlZV9wcmVmaXhfYnUgKHUpIFdJVEggKHByZWZpeF9jb21wcmVz c2lvbiA9IG9uKTsNCistLSBTZXZlcmFsIGNvbW1pdHRlZCBub24ta2V5IFVQREFURSBiYXRjaGVz ICh2ZXJzaW9uIGNodXJuIG9uIHRoZSBwcmVmaXggaW5kZXgpLg0KK1VQREFURSBidHJlZV9wcmVm aXhfYnUgU0VUIGZpbGxlciA9IHJlcGVhdCgneScsIDQwKTsNCitVUERBVEUgYnRyZWVfcHJlZml4 X2J1IFNFVCBmaWxsZXIgPSByZXBlYXQoJ3onLCA0MCk7DQorVVBEQVRFIGJ0cmVlX3ByZWZpeF9i dSBTRVQgZmlsbGVyID0gcmVwZWF0KCd3JywgNDApOw0KKy0tIENvcnJlY3RuZXNzIGFmdGVyIHRo ZSBjaHVybjogYW4gaW5kZXgtb25seSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1YWwN CistLSB0aGUgaW5kZXBlbmRlbnQgb3JhY2xlICh0aGUgbGl0ZXJhbCBrZXlzKSwgcHJvdmluZyBu byBkZWNvZGUvZGVsZXRpb24gZGFtYWdlLg0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitT RUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEZST00gYnRy ZWVfcHJlZml4X2J1KSA9DQorICAgICAgIG1kNShzdHJpbmdfYWdnKHgsICd8JyBPUkRFUiBCWSB4 KSkgQVMgYm90dG9tdXBfb2sNCisgIEZST00gKFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9w YXRoLycgfHwgbHBhZCgoZyAlIDUwMCk6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAgICBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwKSBnKSBvcmFjbGU7DQorU0VMRUNUIGNvdW50KCop IEZST00gYnRyZWVfcHJlZml4X2J1DQorICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20v cGF0aC8nIHx8IGxwYWQoJzcnLCA4LCAnMCcpOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KK0RS T1AgVEFCTEUgYnRyZWVfcHJlZml4X2J1Ow0KKw0KKy0tDQorLS0gUnVudGltZSBkZWR1cGxpY2F0 aW9uIG9uIGEgcHJlZml4LWNvbXByZXNzZWQgcGFnZS4gIER1cGxpY2F0ZSBrZXlzIGluc2VydGVk DQorLS0gb25lIGF0IGEgdGltZSBpbnRvIGFuIGV4aXN0aW5nIHByZWZpeCBpbmRleCBmaWxsIGEg bGVhZjsgYmVmb3JlIGl0IHNwbGl0cywNCistLSB0aGUgZGVkdXBsaWNhdGlvbiBwYXNzIGRlY29k ZXMgdGhlIGNvZGVkIGl0ZW1zLCBtZXJnZXMgdGhlIGR1cGxpY2F0ZSBUSURzDQorLS0gaW50byBw b3N0aW5nIGxpc3RzIGFuZCByZS1jb2RlcyB0aGUgcGFnZS4gIFRoZSBkZWNvZGVkIHNldCBjYW4g ZXhjZWVkIG9uZQ0KKy0tIHBhZ2UgZXZlbiB3aGVuIHRoZSBjb2RlZCBmb3JtIGZpdCwgaW4gd2hp Y2ggY2FzZSB0aGUgcGFzcyBhYm9ydHMgYW5kIHRoZQ0KKy0tIHBhZ2Ugc3BsaXRzIGluc3RlYWQ7 IGVpdGhlciB3YXkgdGhlIHJlc3VsdCBtdXN0IGJlIGNvcnJlY3QuDQorLS0NCitDUkVBVEUgVEFC TEUgYnRyZWVfcHJlZml4X2RkICh1IHRleHQgQ09MTEFURSAiQyIpOw0KK0NSRUFURSBJTkRFWCBi dHJlZV9wcmVmaXhfZGRfdSBPTiBidHJlZV9wcmVmaXhfZGQgKHUpIFdJVEggKHByZWZpeF9jb21w cmVzc2lvbiA9IG9uKTsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXhfZGQNCisgIFNFTEVDVCAn aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMCk6 OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDAwKSBnOw0KK1NF VCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1 LCAnfCcgT1JERVIgQlkgdSkpIEZST00gYnRyZWVfcHJlZml4X2RkKSA9DQorICAgICAgIG1kNShz dHJpbmdfYWdnKHgsICd8JyBPUkRFUiBCWSB4KSkgQVMgcnVudGltZV9kZWR1cF9vaw0KKyAgRlJP TSAoU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFk KChnICUgMjAwKTo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDQwMDAwKSBnKSBvcmFjbGU7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVf cHJlZml4X2RkDQorICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNv dXJjZS8nIHx8IGxwYWQoJzQyJywgOCwgJzAnKTsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitE Uk9QIFRBQkxFIGJ0cmVlX3ByZWZpeF9kZDsNCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0DQppbmRl eCA1NTMxNjJjMDgxMC4uMWY5NTgzMTIxMTAgMTAwNjQ0DQotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdA0KKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QN CkBAIC0yMTUsNiArMjE1LDcgQEAgQlREZWxldGVkUGFnZURhdGENCiBCVEluZGV4U3RhdA0KIEJU SW5zZXJ0U3RhdGUNCiBCVEluc2VydFN0YXRlRGF0YQ0KK0JUSXRlbUJ1Zg0KIEJUTGVhZGVyDQog QlRNZXRhUGFnZURhdGENCiBCVE9uZVZhY0luZm8NCkBAIC0yMjYsNiArMjI3LDcgQEAgQlRQYWdl U3RhdA0KIEJUUGFnZVN0YXRlDQogQlRQYXJhbGxlbFNjYW5EZXNjDQogQlRQZW5kaW5nRlNNDQor QlRQcmVmaXhQbGFuDQogQlRSZWFkUGFnZVN0YXRlDQogQlRTY2FuSW5zZXJ0DQogQlRTY2FuSW5z ZXJ0RGF0YQ0KLS0gDQoyLjU0LjANCg0K --b1=_Yd913Pt5kxjjNanz8J7C4bCHbVrrRKFxOfdpD5RA--