From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B2FAD42E9E for ; Thu, 12 May 2022 06:07:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C8DB968B468; Thu, 12 May 2022 09:07:02 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 58A4968B02F for ; Thu, 12 May 2022 09:06:56 +0300 (EEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220512060655euoutp018656ba6ca03bd7b07e046cd9e4bf8c8e~uRnz4QLEM1043310433euoutp01S for ; Thu, 12 May 2022 06:06:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220512060655euoutp018656ba6ca03bd7b07e046cd9e4bf8c8e~uRnz4QLEM1043310433euoutp01S DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652335615; bh=sf1X7JbDvp9Sbcah51t0UEa8udAJTcjGUxUlb6SZEMQ=; h=From:To:In-Reply-To:Subject:Date:References:From; b=tcjq+olP2kdi+OL2YsWmoXY4mg/IpkHDUF1cOVMAbkN4NR9Cil3aGJWAGAkUdXnEz UaPnR/lKa30ITPdGWd/XAmq70ola0s8OQ3KIsXkJUQDHj49qb2UPUiBv8Te70u+2IZ r2uq8xgvSQVYHLg2sDvcSWmvJNtwbjtewAcFE5AI= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220512060655eucas1p1d0e6734892eacb003260779e96252ba0~uRnzsXgB50259702597eucas1p1f for ; Thu, 12 May 2022 06:06:55 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 8C.38.10009.FF3AC726; Thu, 12 May 2022 07:06:55 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220512060655eucas1p107450d841b69cac5f359e3c3ebc9fc55~uRnzUZVLE0263402634eucas1p1e for ; Thu, 12 May 2022 06:06:55 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220512060655eusmtrp212d1009426a185704570b53fb727a3e3~uRnzTsPMG2638926389eusmtrp2j for ; Thu, 12 May 2022 06:06:55 +0000 (GMT) X-AuditID: cbfec7f2-e95ff70000002719-7a-627ca3ff5687 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id CC.29.09522.FF3AC726; Thu, 12 May 2022 07:06:55 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20220512060654eusmtip165f60e7c669e0c97b3595993115ae9f4~uRny3nzj02910829108eusmtip1n for ; Thu, 12 May 2022 06:06:54 +0000 (GMT) From: =?UTF-8?Q?Dawid_Kozinski/Robot_SDK_=28PLT=29_/?= =?UTF-8?Q?SRPOL/Staff_Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= To: "'FFmpeg development discussions and patches'" In-Reply-To: Date: Thu, 12 May 2022 08:06:54 +0200 Message-ID: <020901d865c6$7af50e80$70df2b80$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Content-Language: pl Thread-Index: AQJtVRiY12yP+UBaNusv0RKMFnfq0gKSg7DpAm9Brrurx2ChMA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrFIsWRmVeSWpSXmKPExsWy7djP87r/F9ckGbzoVrL49ukMswOjx59F m1kCGKO4bFJSczLLUov07RK4Mo6+289U8PYzZ8Wx3evYGxgnTuPsYuTkkBAwkfh34ytjFyMX h5DACkaJrfvuQjmTmCRe9V5ihXAmMkkcXrmFDaZl1d5rbBCJ5YwSRyd2QLW0MUn8vbWBBcRh E5jJKPH+yEZGkBYRAR+J7vXrgWZxcHAKJEl8vuABYgoLpEh0Pw0DqWARUJU4OnkO2AJeAUuJ 4/dmskPYghInZz5hAbGZBbQlli18zQxxhILEz6fLWCHiIhI3HrVAbXKSeL7/IDvICRICEzkk Vn3/wgLR4CLR+fYU1AfCEq+Ob2GHsGUk/u+czwRyj4RAscShfgcIs0bi0I90iApribeNxxlB wswCmhLrd+lDhB0lHjw/xAhRzSdx460gxDF8EpO2TWeGCPNKdLQJQZgqEn2dYhCNUhJPl81h nsCoNAvJh7OQfDgLyVezENYuYGRZxSieWlqcm55abJiXWq5XnJhbXJqXrpecn7uJEZgcTv87 /mkH49xXH/UOMTJxMB5ilOBgVhLhrWmuSRLiTUmsrEotyo8vKs1JLT7EKM3BoiTOm5y5IVFI ID2xJDU7NbUgtQgmy8TBKdXAJFYZd+m29RmFlPKWnaJWxR63vmueU/oZvaVXan1Slpbcpk49 O/eJExWe2K/833PheXXp/iamFxVuYptqpu3fxTDz7/IjpSETJgR79m9N3+TAm7Iyh0tBt3bS s6eyer/tVVu3T2iYdfS1bVTojIfGRw/cD2j8HBoYUzA1uuBK0mVjlsn/Xb9xbv/tV8NuKle/ ed6khwVhCgu0bxtGGiesvZT1r3jKBgax2tXxDbGCE+Z6mlYopHzqm/76jJzs5J2R7B4sL7yu lynZ2duKifoX751x6DpPa8SKfPZzzaWJ3OXSe7TS5qjodVkXtitPSDx+Ie/B02X3fVbWqh22 e+B+wXzezy9hP1PbE/6wiOoosRRnJBpqMRcVJwIAJPrxk30DAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkkeLIzCtJLcpLzFFi42I5/e/4Xd3/i2uSDJ5dZrf49ukMswOjx59F m1kCGKP0bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxMlfTtbFJSczLLUov07RL0 Mu7MmMlScOUNW8X/38fZGhj7m1i7GDk5JARMJFbtvcYGYgsJLGWU6N2mCRGXkli6dBEjhC0s 8edaF1ANF1BNC5PEkRfnGUEcNoHpjBL/l39iAqkSEfCR6F6/nhWi6iGjxPxbPUAtHBycAkkS ny94gNQIg5hLNoHVswioShydPAdsM6+ApcTxezPZIWxBiZMzn7CA2MwC2hK9D1sZYexlC18z Q1ykIPHz6TJWiLiIxI1HLYwQNzhJPN9/kH0Co9AsJKNmIRk1C8moWUjaFzCyrGIUSS0tzk3P LTbUK07MLS7NS9dLzs/dxAiMi23Hfm7ewTjv1Ue9Q4xMHIyHGCU4mJVEeGuaa5KEeFMSK6tS i/Lji0pzUosPMZoC/TaRWUo0OR8YmXkl8YZmBqaGJmaWBqaWZsZK4ryeBR2JQgLpiSWp2amp BalFMH1MHJxSDUxrr5ycW3nzzzLebfMfrb7RczFr1RuuWV8OH/EKYXHz7xQMNu3uv1JiK75G 379s0oaI147ZOzNO3Phx6LRBnOQR4UT5wgPl60R38ZQWdBkd8D9v8+ixiO+st/+4vq3+bKke nNbQbPjqpHHOql9XzmWtXpDUdMs0dFlX7ywe/fh+n1k554X+Rp1vaFuYrf5uVY76E66NlxM2 PNzV4zzxqpzi1Yu8E0IakqN6Zl0NnixvsPDY3+m6yxSS+pIZ//wVfPXw2d65022eMcS9Nl4o /zzlRqBLs3rZuQZl+/cVRzN2mbw2CN4RMe2e4Ua5ksMLX3wwFZP/dXXtK5ewyX9+TSx/f+nc 4obMrA8Ruef7zaqZlFiKMxINtZiLihMBDiYThxQDAAA= X-CMS-MailID: 20220512060655eucas1p107450d841b69cac5f359e3c3ebc9fc55 X-Msg-Generator: CA X-RootMTR: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 References: <006701d8481f$9ccdf900$d669eb00$@samsung.com> Subject: Re: [FFmpeg-devel] [PATCH] Provided support for MPEG-5 EVC (Essential Video Coding) codec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhhbmsgeW91IGZvciB5b3VyIHJldmlldy4gQWxsIHlvdXIgc3VnZ2VzdGlvbnMgaGF2ZSBiZWVu IHRha2VuIGludG8gYWNjb3VudCBhbmQgbmV3IHBhdGNoZXMgaGF2ZSBqdXN0IGJlZW4gcHV0IG9u IHRoZSBtYWlsaW5nIGxpc3QuCgotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQpGcm9tOiBmZm1w ZWctZGV2ZWwgPGZmbXBlZy1kZXZlbC1ib3VuY2VzQGZmbXBlZy5vcmc+IE9uIEJlaGFsZiBPZiBB bmRyZWFzIFJoZWluaGFyZHQKU2VudDogVHVlc2RheSwgQXByaWwgNSwgMjAyMiA3OjM3IFBNClRv OiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpTdWJqZWN0OiBSZTogW0ZGbXBlZy1kZXZlbF0gW1BB VENIXSBQcm92aWRlZCBzdXBwb3J0IGZvciBNUEVHLTUgRVZDIChFc3NlbnRpYWwgVmlkZW8gQ29k aW5nKSBjb2RlYwoKRGF3aWQgS296aW5za2k6Cj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCj4gMS4gR2VuYXJhbCBpbmZvCj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCj4gCj4gVGhlIHBhdGNoIHByb3ZpZGVkIGJlbG93IGNvbnRhaW5zIGlu dGVncmF0aW9uIGxheWVyIGJldHdlZW4gZmZtcGVnIGZyYW1ld29yayBhbmQgRVZDIGNvZGVjIGlt cGxlbWVudGF0aW9uLgo+IEluIG51dHNoZWxsIGl0IGVuYWJsZSB1c2luZyBFVkMgY29kZWMgKGVu Y29kaW5nLCBkZWNvZGluZykgIGJ5IHRoZSBtZWFucyBvZiBmZm1wZWcgQVBJLiAKPiBJJ2QgbGlr ZSB0byBlbXBoYXNpemUgb25lIG1vcmUgdGltZSwgdGhhdCAoYXMgbWVudGlvbmVkIGJlZm9yZSkg dGhhdCBpdCBpc24ndCBjb2RlYyBpbXBsZW1lbnRhdGlvbi4gVGhlIHByb3ZpZGVkIGltcGxlbWVu dGF0aW9uIHNlcnZlcyBhcyBpbnRlZ3JhdGlvbiBsYXllciBiZXR3ZWVuIGZmbXBlZyBmcmFtZXdv cmsgYW5kIEVWQyBjb2RlYy4KPiAKPiBFVkMgY29kZWMgaGFzIGJlZW4gcHVibGlzaGVkIGFzIHR3 byBzZXBhcmF0ZSBsaWJyYXJpZXMuIAo+IFRoZSBmaXJzdCBvbmUgY2FsbGVkIFhFVkUgKGVYdHJh LWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXIpIGlzIGFuIG9wZW5zb3VyY2UgTVBFRy01IEVW QyBlbmNvZGVyLgo+IFRoZSBzZWNvbmQgb25lIGNhbGxlZCBYRVZEIChlWHRyYS1mYXN0IEVzc2Vu dGlhbCBWaWRlbyBEZWNvZGVyICkgaXMgYW4gb3BlbnNvdXJjZSBNUEVHLTUgRVZDIGRlY29kZXIu Cj4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYm90aCBsaWJyYXJpZXMgcGxlYXNlIGZvbGxvdyB0 aGUgbGlua3MgYmVsb3c6Cj4gKiBodHRwczovL3Byb3RlY3QyLmZpcmVleWUuY29tL3YxL3VybD9r PTM3ZDI4ODc0LTU2NTk5ZDRkLTM3ZDMwMzNiLTAwMGJhYmZmYWUxMC1kYjAxMjI2ZWU0YTI4YjMw JnE9MSZlPWExZWNhY2VmLWI0MmEtNDJiOC04YjBmLTZkZWJhY2U1ZGRhYiZ1PWh0dHBzJTNBJTJG JTJGZ2l0aHViLmNvbSUyRm1wZWc1JTJGeGV2ZSAKPiAqIGh0dHBzOi8vcHJvdGVjdDIuZmlyZWV5 ZS5jb20vdjEvdXJsP2s9YTVjNDY5NGMtYzQ0ZjdjNzUtYTVjNWUyMDMtMDAwYmFiZmZhZTEwLWI0 YjQ2MWQwZjczZjA0ODkmcT0xJmU9YTFlY2FjZWYtYjQyYS00MmI4LThiMGYtNmRlYmFjZTVkZGFi JnU9aHR0cHMlM0ElMkYlMkZnaXRodWIuY29tJTJGbXBlZzUlMkZ4ZXZkIAoKUGF0Y2hlcyBmb3Ig ZGVjb2RlciBhbmQgZW5jb2RlciBzaG91bGQgYmUgc2VwYXJhdGVkOyBhbmQgdGhlIGNoYW5nZXMg dG8KbGliYXZmb3JtYXQgc2hvdWxkIGFsc28gYmUgaW4gYSBzZXBhcmF0ZSBwYXRjaCAob3IgZXZl biBwYXRjaGVzKS4KClNQTElUCgo+IAo+IFRoZSBwYXRjaCBwcm92aWRlZCBiZWxvdyBzaG91bGQg YmUgYXBwbHkgdG8gRkZtcGVnIDUuMCByZWxlYXNlIChjb21taXQgOTExZDdmMTY3YzMwZjI3YTA0 MmI4NTU4ZGZjZjAxMmIzYzIwZTg1OCByZWxlYXNlLzUuMCkKClRoZXJlIGlzIHplcm8gY2hhbmNl IHRoYXQgbmV3IGNvbXBvbmVudHMgYXJlIGFkZGVkIHRvIGFuIGFscmVhZHkKcmVsZWFzZWQgYnJh bmNoLiBZb3UgbmVlZCB0byByZWJhc2UgdGhpcyBwYXRjaCBvbiB0b3Agb2YgbWFzdGVyIGlmIHlv dQp3YW50IGl0IG1haW5saW5lZC4KCk5ldyBwYXRjaCB3aWxsIGJlZW4gcmViYXNlZCBvbiB0aGUg dG9wIG9mIG1hc3RlcgoKPiAKPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKPiAyLiBCdWlsZGluZwo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Iwo+IAo+IDMuMS4gRG93bmxvYWQsIGJ1aWxkIGFuZCBpbnN0YWxsIGRlcGVuZGVuY2llcwoKVGhl cmUgaXMgbm8gbmVlZCB0byBkdXBsaWNhdGUgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgZXh0 ZXJuYWwKbGlicmFyaWVzIGluIHRoaXMgY29tbWl0IG1lc3NhZ2U7IHByb3ZpZGluZyB0aGUgbGlu ayB0byB3aGVyZSB0aGUKbGlicmFyeSBjYW4gYmUgZm91bmQgaXMgZW5vdWdoLiAoVGhpcyBpcyBu b3QgbWFya2VkIGFzIFdJUCwgc28gSSBhbQpyZXZpZXdpbmcgdGhpcyBhcyBpZiB5b3Ugd2FudGVk IHRoaXMgdG8gYmUgYXBwbGllZCBhcyBpcyAod2l0aCB0aGlzCmNvbW1pdCBtZXNzYWdlKTsgaWYg dGhpcyBpcyBub3QgdGhlIGludGVudGlvbiBvZiB0aGlzIHN1Ym1pc3Npb24gYW5kIHlvdQpuZXZl ciBpbnRlbmRlZCBmb3IgdGhpcyB0byBiZSBwYXJ0IG9mIHRoZSBhY3R1YWxseSBhcHBsaWVkIGNv bW1pdAptZXNzYWdlLCB5b3UgY2FuIGlnbm9yZSB0aGlzIGNvbW1lbnQgYW5kIHRoZSBuZXh0IGNv bW1lbnRzLikKCkl0IHdhc24ndCBteSBpbnRlbnRpb24gdG8gYWRkIHRoaXMgaW5zdHJ1Y3Rpb24g dG8gdGhlIGNvbW1pdCBtZXNzYWdlIGFzIGlzLgpUaGUgaW5zdHJ1Y3Rpb24gaGFzIG5vdGhpbmcg Y29tbW9uIHRvIGNvbW1pdCBtZXNzYWdlLgpTaG91bGQgSSBtYXJrIGl0IHVzaW5nIGFueSBzcGVj aWFsIG1hcmtlcj8gV2hhdCBXSVAgc3RhbmRzIGZvcj8gCklmIHRoZSBpbnN0cnVjdGlvbiBpcyB0 cmVhdGVkIGFzIGNvbW1pdCBtZXNzYWdlIEkgd2lsbCByZW1vdmUgaXQuCgo+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IDIuMi4gQnVpbGQgZmZtcGVnIHdpdGggbGli eGV2ZSBhbmQgbGlieGV2ZAo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+IEl0IGlzIHJlcXVpcmVkIGZmbXBlZyB0byBiZSBjb25maWdmdXJlZCB3aXRoIC0tZW5hYmxl LWxpYnhldmUgYW5kIC0tZW5hYmxlLWxpYnhldmQKCk1lbnRpb25pbmcgdGhpcyBpbiB0aGUgY29t bWl0IG1lc3NhZ2UgaXMgdW5uZWNlc3NhcnkgKHRoZSByZWFkZXIgb2YKZmZtcGVnIGNvbW1pdCBt ZXNzYWdlcyBpcyBzdXBwb3NlZCB0byBrbm93IGEgYml0IGFib3V0IGZmbXBlZykuCgpJdCB3YXNu J3QgbXkgaW50ZW50aW9uIHRvIGFkZCB0aGlzIGluc3RydWN0aW9uIHRvIHRoZSBjb21taXQgbWVz c2FnZSBhcyBpcy4KVGhlIGluc3RydWN0aW9uIGhhcyBub3RoaW5nIGNvbW1vbiB0byBjb21taXQg bWVzc2FnZS4KU2hvdWxkIEkgbWFyayBpdCB1c2luZyBhbnkgc3BlY2lhbCBtYXJrZXI/IFdoYXQg V0lQIHN0YW5kcyBmb3I/IApJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgdHJlYXRlZCBhcyBjb21taXQg bWVzc2FnZSBJIHdpbGwgcmVtb3ZlIGl0LgoKPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKPiAzLiBFeGFtcGxlcwo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwo+IAo+IFBsZWFzZSBmaW5kIGJlbG93IGV4YW1wbGVzIG9uIGhvdyB0byB1c2Ug RVZDIGNvZGVkIHdpdGggZmZtcGVnIGNvbW1hbmRsaW5lIHRvb2wuCj4gCj4gKEFsbCBzYW1wbGVz IGFyZSBhdmFpbGFibGUgaW4gaHR0cHM6Ly9wcm90ZWN0Mi5maXJlZXllLmNvbS92MS91cmw/az05 MzhmNjQ5MS1mMjA0NzFhOC05MzhlZWZkZS0wMDBiYWJmZmFlMTAtMTU3YWVlZjZlMzU0Mjg3MiZx PTEmZT1hMWVjYWNlZi1iNDJhLTQyYjgtOGIwZi02ZGViYWNlNWRkYWImdT1odHRwcyUzQSUyRiUy RmRyaXZlLmdvb2dsZS5jb20lMkZkcml2ZSUyRmZvbGRlcnMlMkYxWXRDTGxTdVRBanBMemlUS0lf UUJ1UXJJT20yc3M5TEIlM0Z1c3AlM0RzaGFyaW5nICkKPiAKPiAjIS9iaW4vYmFzaAo+ICM9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAjKFlVVjQyMFApIC0+IChFVkMp Cj4gIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtZiBy YXd2aWRlbyAtcGl4X2ZtdCB5dXY0MjBwIC1zOnYgMzUyeDI4OCAtciAzMCAtaSBUZXN0X1ZpZGVv X2NpZi55dXYgLWM6diBsaWJ4ZXZlIC1mIHJhd3ZpZGVvIFRlc3RfVmlkZW9fY2lmLnl1di5ldmMK PiBmZnBsYXkgLWF1dG9leGl0IFRlc3RfVmlkZW9fY2lmLnl1di5ldmMKClRoZXNlIGV4YW1wbGVz IGFyZSBleGNlc3NpdmU7IGFuZCB0aGV5IGFyZSBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5LCBhcwp0 aGV5IGRvbid0IHJlYWxseSBwcm92aWRlIGFueXRoaW5nIHVzZWZ1bCBnaXZlbiB0aGF0IGEgcmVh ZGVyIG9mCmZmbXBlZydzIGNvbW1pdCBtZXNzYWdlcyBpcyBzdXBwb3NlZCB0byBrbm93IHRyaXZp YWwgZmZtcGVnIGNvbW1hbmQgbGluZQp1c2FnZS4KCk9LLiBJIGNhbiBkaXNwb3NlIG9mIHRoZSBm b2xsb3dpbmcgZXhhbXBsZXMsIGFuZCBhcyBJIG1lbnRpb25lZCBhYm92ZSBpZiBpdCBpcyB0cmVh dGVkIGFzIGNvbW1pdCBtZXNzYWdlIEkgd2lsbCByZW1vdmUgaXQuCgoKPiAKPiAjPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyhZVVY0MjBQMTBMRSkgLT4gKEVWQykK PiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gZmZtcGVnIC1mIHJh d3ZpZGVvIC1waXhfZm10IHl1djQyMHAxMGxlIC1zOnYgMzUyeDI4OCAtciAzMCAtaSBUZXN0X1Zp ZGVvX2NpZl8xMGxlLnl1diAtYzp2IGxpYnhldmUgLWYgcmF3dmlkZW8gVGVzdF9WaWRlb19jaWZf MTBsZS55dXYuZXZjCj4gZmZwbGF5IC1hdXRvZXhpdCBUZXN0X1ZpZGVvX2NpZl8xMGxlLnl1di5l dmMKPiAKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyhFVkMp IC0+IChZVVY0MjBQKQo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiBmZm1wZWcgLWkgVGVzdF9WaWRlb19jaWYueXV2LmV2YyAtcGl4X2ZtdCB5dXY0MjBwIFRlc3Rf VmlkZW9fY2lmLmV2Yy55dXYKPiBmZnBsYXkgLWF1dG9leGl0IC1mIHJhd3ZpZGVvIC1waXhlbF9m b3JtYXQgeXV2NDIwcCAtdmlkZW9fc2l6ZSAzNTJ4Mjg4ICBUZXN0X1ZpZGVvX2NpZi5ldmMueXV2 Cj4gCj4gIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICMoRVZDKSAt PiAoWVVWNDIwUGkxMExFKQo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KPiBmZm1wZWcgLWkgVGVzdF9WaWRlb19jaWZfMTBsZS55dXYuZXZjIC1waXhfZm10IHl1djQy MHAxMGxlIFRlc3RfVmlkZW9fY2lmXzEwbGUuZXZjLnl1dgo+IGZmcGxheSAtYXV0b2V4aXQgLWYg cmF3dmlkZW8gLXBpeGVsX2Zvcm1hdCB5dXY0MjBwMTBsZSAtdmlkZW9fc2l6ZSAzNTJ4Mjg4ICBU ZXN0X1ZpZGVvX2NpZl8xMGxlLmV2Yy55dXYKPiAKPiAjPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cj4gIyhZVVY0MjBQKSAtPiAoTVA0KQo+ICM9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiBmZm1wZWcgLWYgcmF3dmlkZW8gLXBpeF9mbXQgeXV2 NDIwcCAtczp2IDM1MngyODggLXIgMzAgLWkgVGVzdF9WaWRlb19jaWYueXV2IC1jOnYgbGlieGV2 ZSAtZiByYXd2aWRlbyBUZXN0X1ZpZGVvX2NpZi55dXYubXA0Cj4gZmZwbGF5IC1hdXRvZXhpdCBU ZXN0X1ZpZGVvX2NpZi55dXYubXA0Cj4gCj4gIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQo+ICMoWVVWNDIwUDEwTEUpIC0+IChNUDQpCj4gIz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtZiByYXd2aWRlbyAtcGl4X2ZtdCB5dXY0 MjBwMTBsZSAtczp2IDM1MngyODggLXIgMzAgLWkgVGVzdF9WaWRlb19jaWZfMTBsZS55dXYgLWM6 diBsaWJ4ZXZlIC1mIHJhd3ZpZGVvIFRlc3RfVmlkZW9fY2lmXzEwbGUueXV2Lm1wNAo+IGZmcGxh eSAtYXV0b2V4aXQgVGVzdF9WaWRlb19jaWZfMTBsZS55dXYubXA0Cj4gCj4gIz09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICMoTVA0KSAtPiAoWVVWNDIwUCkKPiAjPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gZmZtcGVnIC1pIFRlc3RfVmlk ZW9fY2lmLnl1di5tcDQgLWYgcmF3dmlkZW8gLXBpeF9mbXQgeXV2NDIwcCBUZXN0X1ZpZGVvX2Np Zi5tcDQueXV2Cj4gZmZwbGF5IC1hdXRvZXhpdCAtZiByYXd2aWRlbyAtcGl4ZWxfZm9ybWF0IHl1 djQyMHAgLXZpZGVvX3NpemUgMzUyeDI4OCBUZXN0X1ZpZGVvX2NpZi5tcDQueXV2Cj4gCj4gIz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICMoTVA0KSAtPiAgKFlVVjQy MFAxMExFKQo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiBmZm1w ZWcgLWkgVGVzdF9WaWRlb19jaWZfMTBsZS55dXYubXA0IC1mIHJhd3ZpZGVvIC1waXhfZm10IHl1 djQyMHAxMGxlIFRlc3RfVmlkZW9fY2lmXzEwbGUubXA0Lnl1dgo+IGZmcGxheSAtYXV0b2V4aXQg LWYgcmF3dmlkZW8gLXBpeGVsX2Zvcm1hdCB5dXY0MjBwMTBsZSAtdmlkZW9fc2l6ZSAzNTJ4Mjg4 IFRlc3RfVmlkZW9fY2lmXzEwbGUubXA0Lnl1dgo+IAo+ICM9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KPiAjKEVWQykgLT4gIChNUDQpCj4gIz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtaSBUZXN0X1ZpZGVvX2NpZi55dXYuZXZj IC1jOnYgY29weSBUZXN0X1ZpZGVvX2NpZi5ldmMubXA0Cj4gZmZwbGF5IC1hdXRvZXhpdCBUZXN0 X1ZpZGVvX2NpZi5ldmMubXA0Cj4gCj4gIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQo+ICMoTVA0KSAtPiAgKEVWQykKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Cj4gZmZtcGVnIC1pIFRlc3RfVmlkZW9fY2lmLmV2Yy5tcDQgLXZjb2RlYyBj b3B5IC1hbiAtZiByYXd2aWRlbyBUZXN0X1ZpZGVvX2NpZi5ldmMubXA0LmV2Ywo+IGZmcGxheSAt YXV0b2V4aXQgVGVzdF9WaWRlb19jaWYuZXZjLm1wNC5ldmMKPiAKPiAjPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyhNUDQgW2gyNjQsYWFjXSkgLT4gIChNUDQgW2V2 YyxhYWNdKQo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiBmZm1w ZWcgLWkgVGVzdF9WaWRlb19jaWYubXA0IC1jOnYgbGlieGV2ZSBUZXN0X1ZpZGVvX2NpZl9ldmMu bXA0Cj4gZmZwbGF5IC1hdXRvZXhpdCBUZXN0X1ZpZGVvX2NpZl9ldmMubXA0Cj4gCj4gU2lnbmVk LW9mZi1ieTogRGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+Cj4gLS0tCj4g IENoYW5nZWxvZyAgICAgICAgICAgICAgICB8ICAgIDMgKy0KPiAgY29uZmlndXJlICAgICAgICAg ICAgICAgIHwgICAxMCArCj4gIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICB8ICAgIDQgKwo+ICBs aWJhdmNvZGVjL2FsbGNvZGVjcy5jICAgfCAgICAyICsKPiAgbGliYXZjb2RlYy9hdmNvZGVjLmgg ICAgIHwgICAgMyArCj4gIGxpYmF2Y29kZWMvY29kZWNfZGVzYy5jICB8ICAgIDggKwo+ICBsaWJh dmNvZGVjL2NvZGVjX2lkLmggICAgfCAgICAxICsKPiAgbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMg IHwgIDQ1MiArKysrKysrKysrKysrKysKPiAgbGliYXZjb2RlYy9saWJ4ZXZkLmMgICAgIHwgIDcy NCArKysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWJhdmNvZGVjL2xpYnhldmUuYyAgICAgfCAx MTg1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYmF2Y29kZWMv cGFyc2Vycy5jICAgICB8ICAgIDEgKwo+ICBsaWJhdmNvZGVjL3Byb2ZpbGVzLmMgICAgfCAgICA2 ICsKPiAgbGliYXZjb2RlYy9wcm9maWxlcy5oICAgIHwgICAgMSArCj4gIGxpYmF2Y29kZWMvdmVy c2lvbi5oICAgICB8ICAgIDIgKy0KPiAgbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgIHwgICAgMiAr Cj4gIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAgIDIgKwo+ICBsaWJhdmZvcm1hdC9ldmNk ZWMuYyAgICAgfCAgMTM2ICsrKysrCj4gIGxpYmF2Zm9ybWF0L2lzb21fdGFncy5jICB8ICAgIDIg Kwo+ICBsaWJhdmZvcm1hdC9tb3YuYyAgICAgICAgfCAgICAyICstCj4gIGxpYmF2Zm9ybWF0L21v dmVuYy5jICAgICB8ICAgMzAgKwo+ICBsaWJhdmZvcm1hdC9yYXdlbmMuYyAgICAgfCAgIDE0ICsK PiAgMjEgZmlsZXMgY2hhbmdlZCwgMjU4NyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlieGV2ZC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL2xpYnhldmUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZXZjZGVj LmMKPiAKPiBkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCj4gaW5kZXggNWEzMmNm MGQ1Yy4uMjFlYmMxMWZmNCAxMDA2NDQKPiAtLS0gYS9DaGFuZ2Vsb2cKPiArKysgYi9DaGFuZ2Vs b2cKPiBAQCAtMTA2LDcgKzEwNiw4IEBAIHZlcnNpb24gNS4wOgo+ICAtIFZpZGVvVG9vbGJveCBQ cm9SZXMgZW5jb2Rlcgo+ICAtIGFubG1mIGF1ZGlvIGZpbHRlcgo+ICAtIElNRiBkZW11eGVyIChl eHBlcmltZW50YWwpCj4gLQo+ICstIGVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXIg KFhFVkUpCj4gKy0gZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRGVjb2RlciAoWEVWRCkKPiAg Cj4gIHZlcnNpb24gNC40Ogo+ICAtIEF1ZGlvVG9vbGJveCBvdXRwdXQgZGV2aWNlCj4gZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDdhNjJmMGMyNDguLjc0OTFkM2Fm NmIgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTI4OSw2 ICsyODksOCBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gICAgLS1lbmFibGUtbGlid2Vi cCAgICAgICAgIGVuYWJsZSBXZWJQIGVuY29kaW5nIHZpYSBsaWJ3ZWJwIFtub10KPiAgICAtLWVu YWJsZS1saWJ4MjY0ICAgICAgICAgZW5hYmxlIEguMjY0IGVuY29kaW5nIHZpYSB4MjY0IFtub10K PiAgICAtLWVuYWJsZS1saWJ4MjY1ICAgICAgICAgZW5hYmxlIEhFVkMgZW5jb2RpbmcgdmlhIHgy NjUgW25vXQo+ICsgIC0tZW5hYmxlLWxpYnhldmUgICAgICAgICBlbmFibGUgWEVWRSBlbmNvZGlu ZyB2aWEgeGV2ZSBbbm9dCj4gKyAgLS1lbmFibGUtbGlieGV2ZCAgICAgICAgIGVuYWJsZSBYRVZE IGRlY29kaW5nIHZpYSB4ZXZkIFtub10KPiAgICAtLWVuYWJsZS1saWJ4YXZzICAgICAgICAgZW5h YmxlIEFWUyBlbmNvZGluZyB2aWEgeGF2cyBbbm9dCj4gICAgLS1lbmFibGUtbGlieGF2czIgICAg ICAgIGVuYWJsZSBBVlMyIGVuY29kaW5nIHZpYSB4YXZzMiBbbm9dCj4gICAgLS1lbmFibGUtbGli eGNiICAgICAgICAgIGVuYWJsZSBYMTEgZ3JhYmJpbmcgdXNpbmcgWENCIFthdXRvZGV0ZWN0XQo+ IEBAIC0xODgwLDYgKzE4ODIsOCBAQCBFWFRFUk5BTF9MSUJSQVJZX0xJU1Q9Igo+ICAgICAgb3Bl bnNzbAo+ICAgICAgcG9ja2V0c3BoaW54Cj4gICAgICB2YXBvdXJzeW50aAo+ICsgICAgbGlieGV2 ZQo+ICsgICAgbGlieGV2ZAoKS2VlcCB0aGUgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCgpE T05FCgo+ICAiCj4gIAo+ICBIV0FDQ0VMX0FVVE9ERVRFQ1RfTElCUkFSWV9MSVNUPSIKPiBAQCAt MjQ1Myw2ICsyNDU3LDcgQEAgQ09ORklHX0VYVFJBPSIKPiAgICAgIGgyNjRwcmVkCj4gICAgICBo MjY0cXBlbAo+ICAgICAgaGV2Y3BhcnNlCj4gKyAgICBldmNwYXJzZQoKS2VlcCB0aGUgbGlzdCBp biBhbHBoYWJldGljYWwgb3JkZXIuCgpET05FCgo+ICAgICAgaHBlbGRzcAo+ICAgICAgaHVmZm1h bgo+ICAgICAgaHVmZnl1dmRzcAo+IEBAIC0zMjUyLDYgKzMyNTcsNyBAQCBtcGVnYXVkaW9fcGFy c2VyX3NlbGVjdD0ibXBlZ2F1ZGlvaGVhZGVyIgo+ICBtcGVndmlkZW9fcGFyc2VyX3NlbGVjdD0i bXBlZ3ZpZGVvIgo+ICBtcGVnNHZpZGVvX3BhcnNlcl9zZWxlY3Q9ImgyNjNkc3AgbXBlZ3ZpZGVv IHFwZWxkc3AiCj4gIHZjMV9wYXJzZXJfc2VsZWN0PSJ2YzFkc3AiCj4gK2V2Y19wYXJzZXJfc2Vs ZWN0PSJldmNwYXJzZSIKCktlZXAgdGhlIGFscGhhYmV0aWNhbCBvcmRlci4KCgpET05FCgo+ICAK PiAgIyBiaXRzdHJlYW1fZmlsdGVycwo+ICBhYWNfYWR0c3RvYXNjX2JzZl9zZWxlY3Q9ImFkdHNf aGVhZGVyIG1wZWc0YXVkaW8iCj4gQEAgLTMzNzcsNiArMzM4Myw4IEBAIGxpYngyNjRfZW5jb2Rl cl9zZWxlY3Q9ImF0c2NfYTUzIgo+ICBsaWJ4MjY0cmdiX2VuY29kZXJfZGVwcz0ibGlieDI2NCIK PiAgbGlieDI2NHJnYl9lbmNvZGVyX3NlbGVjdD0ibGlieDI2NF9lbmNvZGVyIgo+ICBsaWJ4MjY1 X2VuY29kZXJfZGVwcz0ibGlieDI2NSIKPiArbGlieGV2ZV9lbmNvZGVyX2RlcHM9ImxpYnhldmUi Cj4gK2xpYnhldmRfZGVjb2Rlcl9kZXBzPSJsaWJ4ZXZkIgoKQWxwaGFiZXRpY2FsIG9yZGVyLgoK RE9ORQoKPiAgbGlieGF2c19lbmNvZGVyX2RlcHM9ImxpYnhhdnMiCj4gIGxpYnhhdnMyX2VuY29k ZXJfZGVwcz0ibGlieGF2czIiCj4gIGxpYnh2aWRfZW5jb2Rlcl9kZXBzPSJsaWJ4dmlkIgo+IEBA IC02NjU5LDYgKzY2NjcsOCBAQCBlbmFibGVkIGxpYngyNjQgICAgICAgICAgICYmIHsgY2hlY2tf cGtnX2NvbmZpZyBsaWJ4MjY0IHgyNjQgInN0ZGludC5oIHgyNjQuaCIgeAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoZWNrX2NwcF9jb25kaXRpb24gbGlieDI2MiB4MjY0LmggIlgy NjRfTVBFRzIiCj4gIGVuYWJsZWQgbGlieDI2NSAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29u ZmlnIGxpYngyNjUgeDI2NSB4MjY1LmggeDI2NV9hcGlfZ2V0ICYmCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVxdWlyZV9jcHBfY29uZGl0aW9uIGxpYngyNjUgeDI2NS5oICJYMjY1 X0JVSUxEID49IDcwIgo+ICtlbmFibGVkIGxpYnhldmUgICAgICAgICAgICYmIHJlcXVpcmVfcGtn X2NvbmZpZyBsaWJ4ZXZlICJ4ZXZlID49IDEuMC4wIiAieGV2ZS5oIiB4ZXZlX2VuY29kZQo+ICtl bmFibGVkIGxpYnhldmQgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4ZXZkICJ4 ZXZkID49IDEuMC4wIiAieGV2ZC5oIiB4ZXZkX2RlY29kZQoKRGl0dG8uCgpET05FCgo+ICBlbmFi bGVkIGxpYnhhdnMgICAgICAgICAgICYmIHJlcXVpcmUgbGlieGF2cyAic3RkaW50LmggeGF2cy5o IiB4YXZzX2VuY29kZXJfZW5jb2RlICItbHhhdnMgJHB0aHJlYWRzX2V4dHJhbGlicyAkbGlibV9l eHRyYWxpYnMiCj4gIGVuYWJsZWQgbGlieGF2czIgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29u ZmlnIGxpYnhhdnMyICJ4YXZzMiA+PSAxLjMuMCIgInN0ZGludC5oIHhhdnMyLmgiIHhhdnMyX2Fw aV9nZXQKPiAgZW5hYmxlZCBsaWJ4dmlkICAgICAgICAgICAmJiByZXF1aXJlIGxpYnh2aWQgeHZp ZC5oIHh2aWRfZ2xvYmFsIC1seHZpZGNvcmUKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtl ZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBpbmRleCAzYWRmMTUzNmQ4Li5hYjM4YjAxMjdm IDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiArKysgYi9saWJhdmNvZGVjL01h a2VmaWxlCj4gQEAgLTEwODcsNiArMTA4Nyw4IEBAIE9CSlMtJChDT05GSUdfTElCV0VCUF9BTklN X0VOQ09ERVIpICAgICAgICs9IGxpYndlYnBlbmNfY29tbW9uLm8gbGlid2VicGVuY19hbmltCj4g IE9CSlMtJChDT05GSUdfTElCWDI2Ml9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngyNjQubwo+ ICBPQkpTLSQoQ09ORklHX0xJQlgyNjRfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJ4MjY0Lm8K PiAgT0JKUy0kKENPTkZJR19MSUJYMjY1X0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieDI2NS5v Cj4gK09CSlMtJChDT05GSUdfTElCWEVWRV9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYnhldmUu bwo+ICtPQkpTLSQoQ09ORklHX0xJQlhFVkRfREVDT0RFUikgICAgICAgICAgICArPSBsaWJ4ZXZk Lm8KCkRpdHRvLgoKRE9ORQoKPiAgT0JKUy0kKENPTkZJR19MSUJYQVZTX0VOQ09ERVIpICAgICAg ICAgICAgKz0gbGlieGF2cy5vCj4gIE9CSlMtJChDT05GSUdfTElCWEFWUzJfRU5DT0RFUikgICAg ICAgICAgICs9IGxpYnhhdnMyLm8KPiAgT0JKUy0kKENPTkZJR19MSUJYVklEX0VOQ09ERVIpICAg ICAgICAgICAgKz0gbGlieHZpZC5vCj4gQEAgLTExNTIsNiArMTE1NCw4IEBAIE9CSlMtJChDT05G SUdfVlA5X1BBUlNFUikgICAgICAgICAgICAgICs9IHZwOV9wYXJzZXIubwo+ICBPQkpTLSQoQ09O RklHX1dFQlBfUEFSU0VSKSAgICAgICAgICAgICArPSB3ZWJwX3BhcnNlci5vCj4gIE9CSlMtJChD T05GSUdfWEJNX1BBUlNFUikgICAgICAgICAgICAgICs9IHhibV9wYXJzZXIubwo+ICBPQkpTLSQo Q09ORklHX1hNQV9QQVJTRVIpICAgICAgICAgICAgICArPSB4bWFfcGFyc2VyLm8KPiArT0JKUy0k KENPTkZJR19FVkNfUEFSU0VSKSAgICAgICAgICAgICAgKz0gZXZjX3BhcnNlci5vCgpEaXR0by4K CgpET05FCgo+ICsKPiAgCj4gICMgYml0c3RyZWFtIGZpbHRlcnMKPiAgT0JKUy0kKENPTkZJR19B QUNfQURUU1RPQVNDX0JTRikgICAgICAgICAgKz0gYWFjX2FkdHN0b2FzY19ic2Yubwo+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ IGluZGV4IGQxZTEwMTk3ZGUuLjEyZTZjOTJmNjUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9h bGxjb2RlY3MuYwo+ICsrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiBAQCAtNzgzLDYgKzc4 Myw4IEBAIGV4dGVybiBMSUJYMjY0X0NPTlNUIEFWQ29kZWMgZmZfbGlieDI2NF9lbmNvZGVyOwo+ ICAjZW5kaWYKPiAgZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieDI2NHJnYl9lbmNvZGVyOwo+ ICBleHRlcm4gQVZDb2RlYyBmZl9saWJ4MjY1X2VuY29kZXI7Cj4gK2V4dGVybiBjb25zdCBBVkNv ZGVjIGZmX2xpYnhldmVfZW5jb2RlcjsKPiArZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieGV2 ZF9kZWNvZGVyOwo+ICBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9saWJ4YXZzX2VuY29kZXI7Cj4g IGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYnhhdnMyX2VuY29kZXI7Cj4gIGV4dGVybiBjb25z dCBBVkNvZGVjIGZmX2xpYnh2aWRfZW5jb2RlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9h dmNvZGVjLmggYi9saWJhdmNvZGVjL2F2Y29kZWMuaAo+IGluZGV4IDdlZThiYzJiN2MuLmEwNzBl MGYxZDcgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9hdmNvZGVjLmgKPiArKysgYi9saWJhdmNv ZGVjL2F2Y29kZWMuaAo+IEBAIC0xNjQzLDYgKzE2NDMsOSBAQCB0eXBlZGVmIHN0cnVjdCBBVkNv ZGVjQ29udGV4dCB7Cj4gICNkZWZpbmUgRkZfUFJPRklMRV9LTFZBX1NZTkMgMAo+ICAjZGVmaW5l IEZGX1BST0ZJTEVfS0xWQV9BU1lOQyAxCj4gIAo+ICsjZGVmaW5lIEZGX1BST0ZJTEVfRVZDX0JB U0VMSU5FICAgICAgICAgICAgIDAKPiArI2RlZmluZSBGRl9QUk9GSUxFX0VWQ19NQUlOICAgICAg ICAgICAgICAgICAxCj4gKwo+ICAgICAgLyoqCj4gICAgICAgKiBsZXZlbAo+ICAgICAgICogLSBl bmNvZGluZzogU2V0IGJ5IHVzZXIuCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29kZWNfZGVz Yy5jIGIvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPiBpbmRleCAwOTc0ZWUwM2RlLi4wNThmMjhi ZDY3IDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCj4gKysrIGIvbGliYXZj b2RlYy9jb2RlY19kZXNjLmMKPiBAQCAtMTI2OSw2ICsxMjY5LDE0IEBAIHN0YXRpYyBjb25zdCBB VkNvZGVjRGVzY3JpcHRvciBjb2RlY19kZXNjcmlwdG9yc1tdID0gewo+ICAgICAgICAgIC5wcm9w cyAgICAgPSBBVl9DT0RFQ19QUk9QX0xPU1NZIHwgQVZfQ09ERUNfUFJPUF9SRU9SREVSLAo+ICAg ICAgICAgIC5wcm9maWxlcyAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTChmZl9oZXZjX3Byb2ZpbGVz KSwKPiAgICAgIH0sCj4gKyAgICB7Cj4gKyAgICAgICAgLmlkICAgICAgICA9IEFWX0NPREVDX0lE X0VWQywKPiArICAgICAgICAudHlwZSAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ICsgICAg ICAgIC5uYW1lICAgICAgPSAiZXZjIiwKPiArICAgICAgICAubG9uZ19uYW1lID0gTlVMTF9JRl9D T05GSUdfU01BTEwoIk1QRUctNSBFVkMgKEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIiksCj4gKyAg ICAgICAgLnByb3BzICAgICA9IEFWX0NPREVDX1BST1BfTE9TU1kgfCBBVl9DT0RFQ19QUk9QX1JF T1JERVIsCj4gKyAgICAgICAgLnByb2ZpbGVzICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKGZmX2V2 Y19wcm9maWxlcyksCj4gKyAgICB9LAo+ICAgICAgewo+ICAgICAgICAgIC5pZCAgICAgICAgPSBB Vl9DT0RFQ19JRF9GSUMsCj4gICAgICAgICAgLnR5cGUgICAgICA9IEFWTUVESUFfVFlQRV9WSURF TywKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9jb2RlY19pZC5oIGIvbGliYXZjb2RlYy9jb2Rl Y19pZC5oCj4gaW5kZXggYWIyNjVlYzU4NC4uNTk3YTJiYzRhMCAxMDA2NDQKPiAtLS0gYS9saWJh dmNvZGVjL2NvZGVjX2lkLmgKPiArKysgYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKPiBAQCAtMjIy LDYgKzIyMiw3IEBAIGVudW0gQVZDb2RlY0lEIHsKPiAgICAgIEFWX0NPREVDX0lEX1dFQlAsCj4g ICAgICBBVl9DT0RFQ19JRF9ITk00X1ZJREVPLAo+ICAgICAgQVZfQ09ERUNfSURfSEVWQywKPiAr ICAgIEFWX0NPREVDX0lEX0VWQywKClRoaXMgYnJlYWtzIEFCSSBhbmQgaXMgaW52YWxpZDsgdGhl cmUgaXMgYSBnYXAgYmV0d2VlbiB0aGUgbGFzdCB2aWRlbwphbmQgdGhlIGZpcnN0IGF1ZGlvIGNv ZGVjIGlkIHdoZXJlIHRoaXMgdmFsdWUgc2hvdWxkIGJlIGFkZGVkLgooVGhlIGVudHJ5IGluIGNv ZGVjX2Rlc2NyaXB0b3JzIGFib3ZlIHRoZW4gbmVlZHMgdG8gYmUgbW92ZWQgc28gdGhhdCB0aGUK bGlzdCBpcyBzb3J0ZWQgYnkgaHR0cHM6Ly9wcm90ZWN0Mi5maXJlZXllLmNvbS92MS91cmw/az05 NzYzZjRlZC1mNmU4ZTFkNC05NzYyN2ZhMi0wMDBiYWJmZmFlMTAtOGJiYmYwYWJjNWIyMjU3MCZx PTEmZT1hMWVjYWNlZi1iNDJhLTQyYjgtOGIwZi02ZGViYWNlNWRkYWImdT1odHRwJTNBJTJGJTJG YXZjb2RlY2Rlc2NyaXB0b3IuaWQlMkYuKQoKRE9ORQoKPiAgI2RlZmluZSBBVl9DT0RFQ19JRF9I MjY1IEFWX0NPREVDX0lEX0hFVkMKPiAgICAgIEFWX0NPREVDX0lEX0ZJQywKPiAgICAgIEFWX0NP REVDX0lEX0FMSUFTX1BJWCwKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMg Yi9saWJhdmNvZGVjL2V2Y19wYXJzZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMC4uZjY4YzRjYzNhMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVj L2V2Y19wYXJzZXIuYwo+IEBAIC0wLDAgKzEsNDUyIEBACgouLi4KCj4gKwo+ICsvLyBTcGxpdCBh ZnRlciB0aGUgcGFyYW1ldGVyIHNldHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIGlm IHRoZXkgZXhpc3QuCj4gK3N0YXRpYyBpbnQgZXZjX3NwbGl0KEFWQ29kZWNDb250ZXh0ICpjdHgs IGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKPiArewo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgZXZjX3BhcnNlcl9jbG9zZShBVkNvZGVjUGFy c2VyQ29udGV4dCAqcykKPiArewo+ICsgICAgLyogRVZDUGFyc2VyQ29udGV4dCAqY3R4ID0gcy0+ cHJpdl9kYXRhOyAqLwo+ICt9CgpEb24ndCBhZGQgdW5uZWNlc3NhcnkgZnVuY3Rpb25zOyBidXQg bm90aWNlIHRoYXQgeW91IGFyZSB1c2luZwpmZl9jb21iaW5lX2ZyYW1lKCkgYW5kIHRoZXJlZm9y ZSB5b3UgbmVlZCB0byBjYWxsIGZmX3BhcnNlX2Nsb3NlKCkgaW4KeW91ciBjbG9zZSBmdW5jdGlv biBvciB1c2UgaXQgZGlyZWN0bHkgYXMgeW91ciBjbG9zZSBmdW5jdGlvbi4KCj4gKwo+ICtBVkNv ZGVjUGFyc2VyIGZmX2V2Y19wYXJzZXIgPSB7CgpTaG91bGQgYmUgY29uc3QuCgpET05FCgo+ICsg ICAgLmNvZGVjX2lkcyAgICAgID0geyBBVl9DT0RFQ19JRF9FVkMgfSwKPiArICAgIC5wcml2X2Rh dGFfc2l6ZSA9IHNpemVvZihFVkNQYXJzZXJDb250ZXh0KSwKPiArICAgIC5wYXJzZXJfaW5pdCAg ICA9IGV2Y19wYXJzZXJfaW5pdCwKPiArICAgIC5wYXJzZXJfcGFyc2UgICA9IGV2Y19wYXJzZSwK PiArICAgIC5wYXJzZXJfY2xvc2UgICA9IGV2Y19wYXJzZXJfY2xvc2UsCj4gKyAgICAuc3BsaXQg ICAgICAgICAgPSBldmNfc3BsaXQsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGli eGV2ZC5jIGIvbGliYXZjb2RlYy9saWJ4ZXZkLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAuLmZmOWVlNWMxNmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZj b2RlYy9saWJ4ZXZkLmMKPiBAQCAtMCwwICsxLDcyNCBAQAo+ICsvKgo+ICsgKiBsaWJ4ZXZkIGRl Y29kZXIKPiArICogRVZDIChNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZykgZGVjb2Rpbmcg dXNpbmcgWEVWRCBNUEVHLTUgRVZDIGRlY29kZXIgbGlicmFyeQo+ICsgKgo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMjEgRGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+Cj4gKyAq Cj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCj4gKyAqLwo+ICsKPiArI2lmIGRlZmluZWQoX01TQ19WRVIpCj4gKyNkZWZpbmUgWEVWRF9B UElfSU1QT1JUUyAxCj4gKyNlbmRpZgo+ICsKPiArI2luY2x1ZGUgPHhldmQuaD4KPiArCj4gKyNp bmNsdWRlIDxmbG9hdC5oPgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKwo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVz Yy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1 dGlsL2ltZ3V0aWxzLmgiCj4gKwo+ICsvLyAjZGVmaW5lIFVTRV9FWFBfR09MT01CX1NUVUZGCj4g KyNpZmRlZiBVU0VfRVhQX0dPTE9NQl9TVFVGRiAKPiArI2luY2x1ZGUgImdvbG9tYi5oIgo+ICsj ZW5kaWYKPiArCj4gKyNpbmNsdWRlICJhdmNvZGVjLmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5o Igo+ICsjaW5jbHVkZSAicGFja2V0X2ludGVybmFsLmgiCj4gKwo+ICsjZGVmaW5lIFVOVVNFRCh4 KSAodm9pZCkoeCkKPiArCj4gKyNkZWZpbmUgWEVWRF9QQVJBTV9CQURfTkFNRSAtMQo+ICsjZGVm aW5lIFhFVkRfUEFSQU1fQkFEX1ZBTFVFIC0yCj4gKwo+ICsvKioKPiArICogVGhlIHN0cnVjdHVy ZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhl dmUgTVBFRy01IEVWQyBkZWNvZGVyCj4gKyAqIFRoZSBmaXJzdCBmaWVsZCBpcyBhIHBvaW50ZXIg dG8gYW4gQVZDbGFzcyBzdHJ1Y3QgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1 bmsvc3RydWN0QVZDbGFzcy5odG1sI2RldGFpbHMpLgo+ICsgKi8KClN1Y2ggY29tbWVudHMgYXJl IHVubmVjZXNzYXJ5ICgKCkRPTkUKCj4gK3R5cGVkZWYgc3RydWN0IFhldmRDb250ZXh0IHsKPiAr ICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+ICsKPiArICAgIFhFVkQgaWQ7ICAgICAgICAvLyBY RVZEIGluc3RhbmNlIGlkZW50aWZpZXIgQHNlZSB4ZXZkLmgKPiArICAgIFhFVkRfQ0RTQyBjZHNj OyAvLyBkZWNvZGluZyBwYXJhbWV0ZXJzIEBzZWUgeGV2ZC5oCj4gKwo+ICsgICAgaW50IGRlY29k X2ZyYW1lczsgLy8gbnVtYmVyIG9mIGRlY29kZWQgZnJhbWVzCj4gKyAgICBpbnQgcGFja2V0X2Nv dW50OyAvLyBudW1iZXIgb2YgcGFja2V0cyBjcmVhdGVkIGJ5IGRlY29kZXIKPiArCj4gKyAgICAv LyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKPiArICAgIEFWRGljdGlvbmFyeSAqeGV2ZF9vcHRz OyAvLyB4ZXZkIGNvbmZpZ3VyYXRpb24gcmVhZCBmcm9tIGEgOi1zZXBhcmF0ZWQgbGlzdCBvZiBr ZXk9dmFsdWUgcGFyYW1ldGVycwo+ICsKPiArfSBYZXZkQ29udGV4dDsKPiArCj4gK3N0YXRpYyBp bnQgIG9wX3RocmVhZHMgPSAxOyAvLyBEZWZhdWx0IHZhbHVlCgpObyBnbG9iYWwgc3RhdGUhIChB bmQgYW55d2F5LCB0aGlzIHZhbHVlIHNlZW1zIHRvIGJlIHdyaXRlLW9ubHkuKQoKRE9ORS4gR2xv YmFsIHZhcmlhYmxlIGhhcyBiZWVuIHJlbW92ZWQuCgo+ICsKPiArI2lmZGVmIFVTRV9FWFBfR09M T01CX1NUVUZGIAo+ICtzdGF0aWMgaW50IGdldF9uYWx1X3R5cGUoY29uc3QgdWludDhfdCAqYnMs IGludCBic19zaXplKQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0IGdiOwo+ICsgICAgaW50IGZ6 YiwgbnV0Owo+ICsgICAgaW5pdF9nZXRfYml0cygmZ2IsIGJzLCBic19zaXplICogOCk7Cj4gKyAg ICBmemIgPSBnZXRfYml0czEoJmdiKTsKPiArICAgIGlmKGZ6YiAhPSAwKSB7Cj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImZvcmJpZGRlbl96ZXJvX2JpdCBpcyBub3QgY2xl YXJcbiIpOwo+ICsgICAgfQo+ICsgICAgbnV0ID0gZ2V0X2JpdHMoJmdiLCA2KTsgLyogbmFsX3Vu aXRfdHlwZV9wbHVzMSAqLwo+ICsgICAgcmV0dXJuIG51dCAtIDE7Cj4gK30KPiArI2VuZGlmCj4g Kwo+ICsjaWZkZWYgUFJJTlRfTkFMVV9JTkZPCj4gK3N0YXRpYyB2b2lkIHByaW50X25hbHVfaW5m byhYRVZEX1NUQVQgKiBzdGF0KQo+ICt7Cj4gKyAgICBpZihzdGF0LT5uYWx1X3R5cGUgPCBYRVZE X05VVF9TUFMpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9O VVRfU1BTIFxuIik7Cj4gKwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICIl Yy1zbGljZVxuIiwgc3RhdC0+c3R5cGUgPT0gWEVWRF9TVF9JID8gJ0knIDogc3RhdC0+c3R5cGUg PT0gWEVWRF9TVF9QID8gJ1AnIDogJ0InKTsKPiArCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19ERUJVRywgIiAlZCBieXRlc1xuIiwgc3RhdC0+cmVhZCk7Cj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19ERUJVRywgIiwgcG9jPSVkLCB0aWQ9JWQsICIsIChpbnQpc3RhdC0+cG9j LCAoaW50KXN0YXQtPnRpZCk7Cj4gKwo+ICsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJbTCVkICIs IGkpOwo+ICsgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0YXQtPnJlZnBpY19udW1b aV07IGorKykgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywiJWQgIiwgc3RhdC0+cmVmcGljW2ld W2pdKTsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywiXSBcbiIpOwo+ ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSBpZihzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRf U1BTKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NQ UyBcbiIpOwo+ICsgICAgfSBlbHNlIGlmIChzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfUFBT KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1BQUyBc biIpOwo+ICsgICAgfSBlbHNlIGlmIChzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfU0VJKSB7 Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NFSSBcbiIp Owo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi VW5rbm93biBiaXRzdHJlYW0gISEhISBcbiIpOwo+ICsgICAgfQo+ICt9Cj4gKyNlbmRpZgo+ICsK PiArLy8gQHRvZG8gY29uc2lkZXIgbW92aW5nIGZvbGxvd2luZyBmdW5jdGlvbiB0byBzZXBhcmF0 ZSBmaWxlIGNvbnRhaW5pbmcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgRVZDIGRlY29kZXIKPiArI2lm ZGVmIFBSSU5UX0ZSQU1FX0lORk8KPiArc3RhdGljIHZvaWQgcHJpbnRfZnJhbWVfaW5mbyhjb25z dCBBVkZyYW1lKiBmKQo+ICt7Cj4gKyAgICBpbnQgbGV2ZWwgPSBBVl9MT0dfREVCVUc7Cj4gKyAg ICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+d2lkdGg6ICVkXG4iLCBmLT53aWR0aCk7Cj4g KyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+aGVpZ2h0OiAlZFxuIiwgZi0+aGVpZ2h0 KTsKPiArCj4gKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+bGluZXNpemVbMF06ICVk XG4iLCBmLT5saW5lc2l6ZVswXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+ bGluZXNpemVbMV06ICVkXG4iLCBmLT5saW5lc2l6ZVsxXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwg bGV2ZWwsICJmcmFtZS0+bGluZXNpemVbMl06ICVkXG4iLCBmLT5saW5lc2l6ZVsyXSk7Cj4gKyAg ICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVmWzBdOiAlcFxuIiwgZi0+YnVmWzBdKTsK PiArICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1lLT5idWZbMV06ICVwXG4iLCBmLT5idWZb MV0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmJ1ZlsyXTogJXBcbiIsIGYt PmJ1ZlsyXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+ZGF0YVswXTogJXBc biIsIGYtPmRhdGFbMF0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmRhdGFb MV06ICVwXG4iLCBmLT5kYXRhWzFdKTsKPiArICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1l LT5kYXRhWzJdOiAlcFxuIiwgZi0+ZGF0YVsyXSk7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsvLyBA dG9kbyBjb25zaWRlciBtb3ZpbmcgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIGZpbGUg Y29udGFpbmluZyBoZWxwZXIgZnVuY3Rpb25zIGZvciBFVkMgZGVjb2Rlcgo+ICsjaWZkZWYgUFJJ TlRfWEVWRF9JTUdCX0lORk8KPiArc3RhdGljIHZvaWQgcHJpbnRfeGV2ZF9pbWdiX2luZm8oY29u c3QgWEVWRF9JTUdCKiBpbWdiKQo+ICt7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVH LCAiaW1nYi0+bnA6ICVkXG4iLCBpbWdiLT5ucCk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0RFQlVHLCAiaW1nYi0+YnNpemVbMF06ICVkXG4iLCBpbWdiLT5ic2l6ZVswXSk7Cj4gKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiaW1nYi0+YnNpemVbMV06ICVkXG4iLCBpbWdiLT5i c2l6ZVsxXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiaW1nYi0+YnNpemVb Ml06ICVkXG4iLCBpbWdiLT5ic2l6ZVsyXSk7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsvLyBAdG9k byBjb25zaWRlciBtb3ZpbmcgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIGZpbGUgY29u dGFpbmluZyBoZWxwZXIgZnVuY3Rpb25zIGZvciBFVkMgZGVjb2Rlcgo+ICsjaWZkZWYgUFJJTlRf QVZDVFgKPiArc3RhdGljIHZvaWQgcHJpbnRfYXZjdHgoY29uc3QgQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQo+ICt7Cj4gKyAgICBpZiggQVZNRURJQV9UWVBFX1VOS05PV04gPT0gYXZjdHgtPmNvZGVj X3R5cGUpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYXZjdHgtPmNv ZGVjX3R5cGU6IEFWTUVESUFfVFlQRV9VTktOT1dOXG4iKTsKPiArICAgIH0gZWxzZSBpZihBVk1F RElBX1RZUEVfVklERU8gID09IGF2Y3R4LT5jb2RlY190eXBlKQo+ICsgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9UWVBFX1ZJREVP IFxuIik7Cj4gKyAgICBlbHNlIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVH LCAiYXZjdHgtPmNvZGVjX3R5cGU6IEFWTUVESUFfVFlQRV9VTktOT1dOXG4iKTsKPiArICAgIH0K PiArCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYXZjdHgtPmNvZGVjX2lkOiAl c1xuIixhdmNvZGVjX2dldF9uYW1lKGF2Y3R4LT5jb2RlY19pZCkpOwo+ICsgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT53aWR0aDogJWRcbiIsIGF2Y3R4LT53aWR0aCk7Cj4g KyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYXZjdHgtPmhlaWdodDogJWRcbiIsIGF2 Y3R4LT5oZWlnaHQpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5w aXhfZm10OiAlZFxuIiwgYXZjdHgtPnBpeF9mbXQpOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLyoq Cj4gKyAqIFJlYWQgb3B0aW9ucwo+ICsgKgo+ICsgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4 dAo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcwo+ICsgKi8KPiArc3RhdGljIGludCByZWFkX29w dGlvbnMoY29uc3QgQVZDb2RlY0NvbnRleHQqIGF2Y3R4KQo+ICt7Cj4gKwo+ICsgICAgb3BfdGhy ZWFkcyA9IChhdmN0eC0+dGhyZWFkX2NvdW50PjApP2F2Y3R4LT50aHJlYWRfY291bnQ6MTsKPiAr Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFBhcnNlIDotc2VwYXJhdGVk IGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMKPiArICoKPiArICogQHBhcmFtIGtleQo+ICsg KiBAcGFyYW0gdmFsdWUKPiArICoKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZl IHZhbHVlIG9uIGZhaWx1cmUKPiArICoKPiArICogQHRvZG8gQ29uc2lkZXIgcmVtb3ZpbmcgdGhl IGZ1bmN0aW9uCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhldmRfcGFyYW1zX3BhcnNlKGNvbnN0IGNo YXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpCj4gK3sKPiArICAgIGlmKCFrZXkpIHsKPiArICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50OiBrZXkgc3Ry aW5nIGlzIE5VTExcbiIpOwo+ICsgICAgICAgIHJldHVybiBYRVZEX0VSUl9JTlZBTElEX0FSR1VN RU5UOwo+ICsgICAgfQo+ICsgICAgaWYoIXZhbHVlKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIkl2YWxpZCBhcmd1bWVudDogdmFsdWUgc3RyaW5nIGlzIE5VTExcbiIp Owo+ICsgICAgICAgIHJldHVybiBYRVZEX0VSUl9JTlZBTElEX0FSR1VNRU5UOwo+ICsgICAgfQo+ ICsKPiArICAgIGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJV bmtub3duIHhldmQgY29kZWMgb3B0aW9uOiAlc1xuIiwga2V5KTsKPiArICAgICAgICByZXR1cm4g WEVWRF9QQVJBTV9CQURfTkFNRTsKPiArICAgIH0KPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB2YXJpYWJsZSBv ZiB0eXBlIFhFVkRfQ0RTQy4KPiArICogWEVWRF9DRFNDIGNvbnRhaW5zIGFsbCBkZWNvZGVyIHBh cmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuCj4gKyAq Cj4gKyAqIFRoZSBmaWVsZCB2YWx1ZXMgb2YgdGhlIFhFVkRfQ0RTQyBzdHJ1Y3R1cmUgYXJlIHBv cHVsYXRlZCBiYXNlZCBvbjoKPiArICogLSB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCB2YWx1ZXMg b2YgdGhlIEF2Q29kZWNDb25ldHh0IHN0cnVjdHVyZSwKPiArICogLSB0aGUgeGV2ZCBkZWNvZGVy IHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsCj4gKyAqICAgKHRoZSBmdWxsIGxpc3Qgb2Ygb3B0aW9u cyBhdmFpbGFibGUgZm9yIHhldmQgZW5jb2RlciBpcyBkaXNwbGF5ZWQgYWZ0ZXIgZXhlY3V0aW5n IHRoZSBjb21tYW5kIC4vZmZtcGVnIC0taGVscCBkZWNvZGVyID0gbGlieGV2ZCkKPiArICogLSBh bmQgdGhlIHhldmQgZW5jb2RlciBvcHRpb25zIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2Yga2V5IHZh bHVlIHBhaXJzIGZvbGxvd2luZyB4ZXZkLXBhcmFtcyBvcHRpb24KPiArICoKPiArICogT3JkZXIg b2YgaW5wdXQgcHJvY2Vzc2luZyBhbmQgcG9wdWxhdGluZyB0aGUgWEVWRF9DRFNDIHN0cnVjdHVy ZQo+ICsgKiAxLiBmaXJzdCwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9mIHRoZSBBVkNvZGVj Q29udGV4dCBzdHJ1Y3R1cmUgYXJlIHByb2Nlc3NlZCwgKGkuZSAtdGhyZWFkcyA0KQo+ICsgKiAy LiB0aGVuIHhldmQtc3BlY2lmaWMgb3B0aW9ucyBhZGRlZCBhcyBBVk9wdGlvbiB0byB0aGUgeGV2 ZCBBVkNvZGVjIGltcGxlbWVudGF0aW9uIChpLmUgLXRocmVhZHMgMykKPiArICogMy4gZmluYWxs eSwgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGFmdGVyIHRoZSB4ZXZkLXBhcmFtcyBvcHRpb24gYXMg dGhlIHBhcmFtZXRlciBsaXN0IG9mIHR5cGUga2V5IHZhbHVlIGFyZSBwcm9jZXNzZWQgKGkuZSAt eGV2ZC1wYXJhbXMgIm09MiIpCj4gKyAqCj4gKyAqIFRoZXJlIGFyZSBvcHRpb25zIHRoYXQgY2Fu IGJlIHNldCBpbiBkaWZmZXJlbnQgd2F5cy4gSW4gdGhpcyBjYXNlLCBwbGVhc2UgZm9sbG93IHRo ZSBhYm92ZS1tZW50aW9uZWQgb3JkZXIgb2YgcHJvY2Vzc2luZy4KPiArICogVGhlIG1vc3QgcmVj ZW50IGFzc2lnbm1lbnRzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFsdWVzLgo+ICsgKgo+ICsg KiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dAo+ICsgKiBAcGFyYW0gY2RzYyBjb250YWlucyBh bGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBp dHMgdXNlLgo+ICsgKgo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Ig Y29kZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGdldF9jb25mKGNvbnN0IEFWQ29k ZWNDb250ZXh0KiBhdmN0eCwgWEVWRF9DRFNDKiBjZHNjKQo+ICt7Cj4gKyAgICBpbnQgY3B1X2Nv dW50ID0gYXZfY3B1X2NvdW50KCk7Cj4gKwo+ICsgICAgLyogcmVhZCBvcHRpb25zIGZyb20gQVZD b2RlY0NvbnRleHQgJiBmcm9tIFhFVkRfQ0RTQyAqLwo+ICsgICAgcmVhZF9vcHRpb25zKGF2Y3R4 KTsKPiArCj4gKyAgICAvKiBwYXJzZSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJh bWV0ZXJzIGFuZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkRfQ0RTQykg Ki8KPiArICAgIHsKPiArICAgICAgICBYZXZkQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsKPiArICAgICAgICBBVkRpY3Rpb25hcnlFbnRyeSAqZW4gPSBOVUxMOwo+ICsgICAgICAgIHdo aWxlICgoZW4gPSBhdl9kaWN0X2dldChjdHgtPnhldmRfb3B0cywgIiIsIGVuLCBBVl9ESUNUX0lH Tk9SRV9TVUZGSVgpKSkgewo+ICsgICAgICAgICAgICBpbnQgcGFyc2VfcmV0ID0geGV2ZF9wYXJh bXNfcGFyc2UoZW4tPmtleSwgZW4tPnZhbHVlKTsKPiArCj4gKyAgICAgICAgICAgIHN3aXRjaCAo cGFyc2VfcmV0KSB7Cj4gKyAgICAgICAgICAgIGNhc2UgWEVWRF9QQVJBTV9CQURfTkFNRToKPiAr ICAgICAgICAgICAgICAgIGF2X2xvZygoQVZDb2RlY0NvbnRleHQqKWF2Y3R4LCBBVl9MT0dfV0FS TklORywKPiArICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBvcHRpb246ICVzLlxuIiwg ZW4tPmtleSk7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgY2FzZSBY RVZEX1BBUkFNX0JBRF9WQUxVRToKPiArICAgICAgICAgICAgICAgIGF2X2xvZygoQVZDb2RlY0Nv bnRleHQqKWF2Y3R4LCBBVl9MT0dfV0FSTklORywKPiArICAgICAgICAgICAgICAgICAgICAgICAi SW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzLlxuIiwgZW4tPmtleSwgZW4tPnZhbHVlKTsKPiArICAg ICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ ICsgICAgLyogY2xlYXIgWEVWU19DRFNDIHN0cnVjdHVyZSAqLwo+ICsgICAgbWVtc2V0KGNkc2Ms IDAsIHNpemVvZihYRVZEX0NEU0MpKTsKPiArCj4gKyAgICAvKiBpbml0IFhFVkRfQ0RTQyAqLwo+ ICsgICAgaWYoYXZjdHgtPnRocmVhZF9jb3VudCA8PSAwKSB7Cj4gKyAgICAgICAgY2RzYy0+dGhy ZWFkcyA9IChjcHVfY291bnQ8WEVWRF9NQVhfVEFTS19DTlQpP2NwdV9jb3VudDpYRVZEX01BWF9U QVNLX0NOVDsKPiArICAgIH0gZWxzZSBpZihhdmN0eC0+dGhyZWFkX2NvdW50ID4gWEVWRF9NQVhf VEFTS19DTlQpIHsKPiArICAgICAgICBjZHNjLT50aHJlYWRzID0gWEVWRF9NQVhfVEFTS19DTlQ7 Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGNkc2MtPnRocmVhZHMgPSBhdmN0eC0+dGhyZWFk X2NvdW50Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBYRVZEX09LOwo+ICt9Cj4gKwo+ICsv KioKPiArICogUmVhZCBOQUwgdW5pdCBsZW5ndGgKPiArICogQHBhcmFtIGJzIGlucHV0IGRhdGEg KGJpdHN0cmVhbSkKPiArICogQHJldHVybiB0aGUgbGVuZ2h0aCBvZiBOQUwgdW5pdCBvbiBzdWNj ZXNzLCAwIHZhbHVlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyB1aW50MzJfdCByZWFkX25h bF91bml0X2xlbmd0aChjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUpCj4gK3sKPiArICAg IHVpbnQzMl90IGxlbiA9IDA7Cj4gKyAgICBYRVZEX0lORk8gaW5mbzsKPiArICAgIGludCByZXQ7 Cj4gKwo+ICsgICAgaWYoYnNfc2l6ZT09WEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkgewo+ICsg ICAgICAgIHJldCA9IHhldmRfaW5mbygodm9pZCopYnMsIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZ VEUsIDEsICZpbmZvKTsKPiArICAgICAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgewo+ICsgICAg ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGdldCBiaXRzdHJlYW0g aW5mb3JtYXRpb25cbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4g KyAgICAgICAgbGVuID0gaW5mby5uYWx1X2xlbjsKPiArICAgICAgICBpZihsZW4gPT0gMCkKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIGJpdHN0cmVhbSBzaXplISBbJWRdXG4iLCBic19zaXplKTsKPiArICAgICAgICAgICAgcmV0 dXJuIDA7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgcmV0dXJuIGxlbjsKPiArfQo+ICsK PiArLyoqCj4gKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEBwYXJhbSBjdHgg dGhlIHN0cnVjdHVyZSB0aGF0IHN0b3JlcyBhbGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0 aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGRlY29kZXIKPiArICogQHJldHVybiAwIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQg ZXhwb3J0X3N0cmVhbV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBYZXZkQ29u dGV4dCAqY3R4KQo+ICt7Cj4gKyAgICAvLyB1bnNpZ25lZCBpbnQgbnVtID0gMCwgZGVuID0gMDsK PiArICAgIC8vIEB0b2RvIHN1cHBvcnQgb3RoZXIgZm9ybWF0cwo+ICsKPiArICAgIGludCByZXQ7 Cj4gKyAgICBpbnQgc2l6ZTsKPiArICAgIGludCBjb2xvcl9zcGFjZTsKPiArCj4gKyAgICBhdmN0 eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwOwo+ICsKPiArICAgIC8vIEB0b2RvIFRo ZSBBVkNvZGVjQ29udGV4dCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgaGVyZSB1c2luZyBkYXRhIGZy b20gdGhlIG9iamVjdCBvZiBYRVZEX1NQUyB0eXBlLgo+ICsgICAgLy8KPiArICAgIC8vIEl0IHNl ZW1zIHRvIGJlIGltcG9zc2libGUgcmlnaHQgbm93IHNpbmNlIFhFVkQgQVBJIGxpbWl0YXRpb24u Cj4gKyAgICAvLyBUaGUgZXh0ZW5zaW9uIGZvciB0aGUgWEVWRCBBUEkgaXMgbmVlZGVkLgo+ICsg ICAgLy8gVG8gYmUgbW9yZSBwcmVjaXNlLCB3aGF0IHdlIG5lZWQgaXMgYWNjZXNzIHRvIHRoZSBv YmplY3Qgb2YgWEVWRF9TUFMgdHlwZSBiZWluZyBhIHBhcnQgb2YgWEVWRF9DVFggb2JqZWN0Lgo+ ICsgICAgLy8gVGhlIG9iamVjdCBvZiBYRVZEX0NUWCB0eXBlIGlzIGNyZWF0ZWQgd2hpbGUgdGhl IGZ1bmN0aW9uIHhldmRfY3JlYXRlKCkgYmVpbmcgYSBwYXJ0IG9mIHB1YmxpYyBBUEkgaXMgY2Fs bGVkLgo+ICsgICAgLy8KPiArICAgIC8vIEB0b2RvIHJlbW92ZSB0aGUgZm9sbG93aW5nIGhhcmRv Y2VkIGhhc19iX2ZyYW1lczsgY29uc2lkZXIgdXNpbmcgc3BzLT5udW1fcmVvcmRlcl9waWNzIHZh bHVlIGluc3RlYWQKPiArICAgIC8vCj4gKyAgICAvLyBhdmN0eC0+aGFzX2JfZnJhbWVzICAgICAg ICA9IDE7IC8vIChzcHMtPm51bV9yZW9yZGVyX3BpY3MpPzE6MDsKPiArICAgIHNpemUgPSA0Owo+ ICsgICAgcmV0ID0geGV2ZF9jb25maWcoY3R4LT5pZCwgWEVWRF9DRkdfR0VUX0NPREVEX1dJRFRI LCAmYXZjdHgtPmNvZGVkX3dpZHRoLCAmc2l6ZSk7Cj4gKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0 KSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0 IGNvZGVkX3dpZHRoXG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0ID0geGV2ZF9jb25maWcoY3R4LT5pZCwgWEVWRF9DRkdfR0VUX0NPREVEX0hFSUdIVCwg JmF2Y3R4LT5jb2RlZF9oZWlnaHQsICZzaXplKTsKPiArICAgIGlmIChYRVZEX0ZBSUxFRChyZXQp KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxlZCB0byBnZXQg Y29kZWRfaGVpZ2h0XG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0ID0geGV2ZF9jb25maWcoY3R4LT5pZCwgWEVWRF9DRkdfR0VUX1dJRFRILCAmYXZjdHgt PndpZHRoLCAmc2l6ZSk7Cj4gKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgewo+ICsgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0IHdpZHRoXG4iKTsKPiAr ICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0geGV2ZF9jb25maWco Y3R4LT5pZCwgWEVWRF9DRkdfR0VUX0hFSUdIVCwgJmF2Y3R4LT5oZWlnaHQsICZzaXplKTsKPiAr ICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgImZhaWxlZCB0byBnZXQgaGVpZ2h0XG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0geGV2ZF9jb25maWcoY3R4LT5pZCwgWEVWRF9DRkdf R0VUX0NPTE9SX1NQQUNFLCAmY29sb3Jfc3BhY2UsICZzaXplKTsKPiArICAgIGlmIChYRVZEX0ZB SUxFRChyZXQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxl ZCB0byBnZXQgY29sb3Jfc3BhY2VcbiIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0K PiArICAgIHN3aXRjaChjb2xvcl9zcGFjZSkgewo+ICsgICAgY2FzZSBYRVZEX0NTX1lDQkNSNDAw XzEwTEU6Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImNvbG9yX3NwYWNl ID0gWEVWRF9DU19ZQ0JDUjQwMF8xMExFXG4iKTsKPiArICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9 IEFWX1BJWF9GTVRfR1JBWTEwTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFhFVkRf Q1NfWUNCQ1I0MjBfMTBMRToKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi Y29sb3Jfc3BhY2UgPSBYRVZEX0NTX1lDQkNSNDIwXzEwTEVcbiIpOwo+ICsgICAgICAgIGF2Y3R4 LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRTsKPiArICAgICAgICBicmVhazsKPiAr ICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQyMl8xMExFOgo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICJjb2xvcl9zcGFjZSA9IFhFVkRfQ1NfWUNCQ1I0MjJfMTBMRVxuIik7Cj4g KyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMlAxMExFOwo+ICsgICAg ICAgIGJyZWFrOwo+ICsgICAgY2FzZSBYRVZEX0NTX1lDQkNSNDQ0XzEwTEU6Cj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImNvbG9yX3NwYWNlID0gWEVWRF9DU19ZQ0JDUjQ0 NF8xMExFXG4iKTsKPiArICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0 UDEwTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJ1bmtub3duIGNvbG9yIHNwYWNlXG4iKTsKPiArICAgICAg ICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfTk9ORTsKPiArICAgICAgICByZXR1cm4gLTE7 Cj4gKyAgICB9Cj4gKwo+ICsvLyBAdG9kbyBVc2UgX1hFVkRfU1BTIGZpZWxkcyB0byBpbml0aWFs aXplIEFWQ29kZWNDb250ZXh0IHdoZW4gaXQgaXMgcG9zc2libGUKPiArI2lmZGVmIFVTRV9YRVZE X1NQU19GSUVMRFMKPiArICAgIGF2Y3R4LT5wcm9maWxlID0gc3BzLT5wcm9maWxlX2lkYzsKPiAr ICAgIGF2Y3R4LT5sZXZlbCA9IHNwcy0+bGV2ZWxfaWRjOwo+ICsKPiArICAgIGZmX3NldF9zYXIo YXZjdHgsIHNwcy0+dnVpX3BhcmFtZXRlcnMuc2FyKTsKPiArCj4gKyAgICBpZiAoc3BzLT52dWlf cGFyYW1ldGVyc3Z1aS52aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2ZsYWcpCj4gKyAgICAgICAg YXZjdHgtPmNvbG9yX3JhbmdlID0gc3BzLT52dWlfcGFyYW1ldGVycy52aWRlb19mdWxsX3Jhbmdl X2ZsYWcgPyBBVkNPTF9SQU5HRV9KUEVHCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiBBVkNPTF9SQU5HRV9NUEVHOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIGF2Y3R4LT5jb2xvcl9y YW5nZSA9IEFWQ09MX1JBTkdFX01QRUc7Cj4gKwo+ICsgICAgaWYgKHNwcy0+dnVpX3BhcmFtZXRl cnMuY29sb3VyX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZykgewo+ICsgICAgICAgIGF2Y3R4LT5j b2xvcl9wcmltYXJpZXMgPSBzcHMtPnZ1aV9wYXJhbWV0ZXJzLmNvbG91cl9wcmltYXJpZXM7Cj4g KyAgICAgICAgYXZjdHgtPmNvbG9yX3RyYyAgICAgICA9IHNwcy0+dnVpX3BhcmFtZXRlcnMudHJh bnNmZXJfY2hhcmFjdGVyaXN0aWM7Cj4gKyAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICA9 IHNwcy0+dnVpX3BhcmFtZXRlcnMubWF0cml4X2NvZWZmczsKPiArICAgIH0gZWxzZSB7Cj4gKyAg ICAgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJRklFRDsKPiAr ICAgICAgICBhdmN0eC0+Y29sb3JfdHJjICAgICAgID0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVEOwo+ ICsgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlICAgICAgPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQ7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHNwcy0+dnVpX3BhcmFtZXRlcnMudGltaW5nX2luZm9f cHJlc2VudF9mbGFnKSB7Cj4gKyAgICAgICAgbnVtID0gc3BzLT52dWlfcGFyYW1ldGVycy5udW1f dW5pdHNfaW5fdGljazsKPiArICAgICAgICBkZW4gPSBzcHMtPnZ1aV9wYXJhbWV0ZXJzLnRpbWVf c2NhbGU7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHMtPnNlaS5hbHRlcm5hdGl2ZV90cmFuc2Zl ci5wcmVzZW50ICYmCj4gKyAgICAgICAgICAgIGF2X2NvbG9yX3RyYW5zZmVyX25hbWUocy0+c2Vp LmFsdGVybmF0aXZlX3RyYW5zZmVyLnByZWZlcnJlZF90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Mp ICYmCj4gKyAgICAgICAgICAgIHMtPnNlaS5hbHRlcm5hdGl2ZV90cmFuc2Zlci5wcmVmZXJyZWRf dHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCkgewo+ICsg ICAgICAgIGF2Y3R4LT5jb2xvcl90cmMgPSBzLT5zZWkuYWx0ZXJuYXRpdmVfdHJhbnNmZXIucHJl ZmVycmVkX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljczsKPiArICAgIH0KPiArI2Vsc2UKPiArICAg IGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQ7Cj4gKyAgICBh dmN0eC0+Y29sb3JfdHJjICAgICAgID0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVEOwo+ICsgICAgYXZj dHgtPmNvbG9yc3BhY2UgICAgICA9IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsKPiArCj4gKyNlbmRp Zgo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbml0aWFsaXplIGRlY29k ZXIgc3RhdGljIGRhdGEKPiArICoKPiArICogQHRvZG8gQ29uc2lkZXIgcmVtb3ZpbmcgdW51c2Vk IGZ1bmN0aW9uCgpJbmRlZWQsIHJlbW92ZSBpdC4KCkRPTkUuIFJlbW92ZWQuCgo+ICsgKi8KPiAr c3RhdGljIGF2X2NvbGQgdm9pZCBsaWJ4ZXZkX2luaXRfc3RhdGljX2RhdGEoQVZDb2RlYyAqY29k ZWMpCj4gK3sKPiArICAgIFVOVVNFRChjb2RlYyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbml0 aWFsaXplIGRlY29kZXIKPiArICogQ3JlYXRlIGRlY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRl IGFsbCB0aGUgbmVlZGVkIHJlc291cmNlcwo+ICsgKgo+ICsgKiBAcGFyYW0gYXZjdHggY29kZWMg Y29udGV4dAo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBv biBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZF9pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgWGV2ZENvbnRleHQgKmN0eCA9IGF2Y3R4LT5w cml2X2RhdGE7Cj4gKyAgICBpbnQgdmFsID0gMDsKPiArICAgIFhFVkRfQ0RTQyAqY2RzYyA9ICYo Y3R4LT5jZHNjKTsKPiArCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiZVh0cmEt ZmFzdCBFc3NlbnRpYWwgVmlkZW8gRGVjb2RlclxuIik7Cj4gKyNpZmRlZiBQUklOVF9BVkNUWAo+ ICsgICAgcHJpbnRfYXZjdHgoYXZjdHgpOwo+ICsjZW5kaWYKPiArCj4gKyAgICAvKiByZWFkIGNv bmZpZ3VyYXRpb25zIGFuZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkRf Q0RTQykgKi8KPiArICAgIHZhbCA9IGdldF9jb25mKGF2Y3R4LCBjZHNjKTsKPiArICAgIGlmICh2 YWwgIT0gWEVWRF9PSykgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsIkNh bm5vdCBnZXQgY29uZmlndXJhdGlvblxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAg fQo+ICsKPiArICAgIC8qIGNyZWF0ZSBkZWNvZGVyICovCj4gKyAgICBjdHgtPmlkID0geGV2ZF9j cmVhdGUoJihjdHgtPmNkc2MpLCBOVUxMKTsKPiArICAgIGlmKGN0eC0+aWQgPT0gTlVMTCkgewo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5ub3QgY3JlYXRlIFhFVkQg ZW5jb2RlclxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIGN0 eC0+cGFja2V0X2NvdW50ID0gMDsKPiArICAgIGN0eC0+ZGVjb2RfZnJhbWVzID0gMDsKPiArICAg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICAqIERuY29kZSBwaWN0dXJlCj4gKyAgKgo+ ICsgICogQHBhcmFtICAgICAgYXZjdHggICAgICAgICAgY29kZWMgY29udGV4dAo+ICsgICogQHBh cmFtICAgICAgZGF0YSAgICAgICAgICAgY29kZWMgdHlwZSBkZXBlbmRlbnQgb3V0cHV0IHN0cnVj dAo+ICsgICogQHBhcmFtW291dF0gZ290X2ZyYW1lICAgICAgZGVjb2RlciBzZXRzIHRvIDAgb3Ig MSB0byBpbmRpY2F0ZSB0aGF0IGEKPiArICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v bi1lbXB0eSBmcmFtZSBvciBzdWJ0aXRsZSB3YXMgcmV0dXJuZWQgaW4KPiArICAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dGRhdGEuCj4gKyAgKiBAcGFyYW1baW5dICBwa3QgICAgICAg ICAgICBBVlBhY2tldCBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJlIGRlY29kZWQKPiArICAqIEBy ZXR1cm4gYW1vdW50IG9mIGJ5dGVzIHJlYWQgZnJvbSB0aGUgcGFja2V0IG9uIHN1Y2Nlc3MsIG5l Z2F0aXZlIGVycm9yCj4gKyAgKiAgICAgICAgIGNvZGUgb24gZmFpbHVyZQo+ICsgICovCj4gK3N0 YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lkICpkYXRh LCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQgKnBrdCkKPiArewo+ICsgICAgQVZGcmFtZSAqZnJh bWUgPSBkYXRhOwo+ICsgICAgWGV2ZENvbnRleHQgKmN0eCA9IE5VTEw7Cj4gKyAgICBYRVZEX0lN R0IgKiBpbWdiID0gTlVMTDsKPiArICAgIFhFVkRfU1RBVCBzdGF0Owo+ICsgICAgWEVWRF9CSVRC IGJpdGI7Cj4gKyAgICBpbnQgcmV0LCBuYWx1X3NpemUsIGJzX3JlYWRfcG9zOwo+ICsKPiArICAg IGlmKGF2Y3R4ID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXI6IEFWQ29kZWNDb250ZXh0XG4iKTsKPiArICAgICAg ICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICBjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsg ICAgaWYoY3R4ID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgWEVWRCBjb250ZXh0XG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYocGt0LT5zaXplID4gMCkgewo+ICsgICAgICAgIGJzX3JlYWRfcG9z ID0gMDsKPiArICAgICAgICBpbWdiID0gTlVMTDsKPiArICAgICAgICB3aGlsZShwa3QtPnNpemUg PiAoYnNfcmVhZF9wb3MgKyBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSkgewo+ICsgICAgICAg ICAgICBpbnQgbmFsX3R5cGUgPSAwOwo+ICsgICAgICAgICAgICAKPiArICAgICAgICAgICAgbWVt c2V0KCZzdGF0LCAwLCBzaXplb2YoWEVWRF9TVEFUKSk7Cj4gKyAgICAgICAgICAgIG1lbXNldCgm Yml0YiwgMCwgc2l6ZW9mKFhFVkRfQklUQikpOwo+ICsKPiArICAgICAgICAgICAgbmFsdV9zaXpl ID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgocGt0LT5kYXRhICsgYnNfcmVhZF9wb3MsIFhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEUpOwo+ICsgICAgICAgICAgICBpZihuYWx1X3NpemUgPT0gMCkgewo+ ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGJp dHN0cmVhbVxuIik7Cj4gKyAgICAgICAgICAgICAgICBnb3RvIEVSUjsKPiArICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICBic19yZWFkX3BvcyArPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRF Owo+ICsKPiArICAgICAgICAgICAgYml0Yi5hZGRyID0gcGt0LT5kYXRhICsgYnNfcmVhZF9wb3M7 Cj4gKyAgICAgICAgICAgIGJpdGIuc3NpemUgPSBuYWx1X3NpemU7Cj4gKwo+ICsgICAgICAgICAg ICAvLyBSZWFkIE5BTCBVbml0IFR5cGUgZnJvbSAgTkFMIFVuaXQgSGVhZGVyCj4gKyAgICAgICAg ICAgIC8vCj4gKyAgICAgICAgICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgTkFMIFVuaXQgSGVhZGVy IGxvb2tzIGxpa2UgZm9sbG93cwo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvL8OC ICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKw0KPiArICAgICAgICAgICAgLy/DgiB8 MHwxfDJ8M3w0fDV8Nnw3fDB8MXwyfDN8NHw1fDZ8N3wNCj4gKyAgICAgICAgICAgIC8vw4IgKy0r LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQo+ICsgICAgICAgICAgICAvL8OCIHxGfCAg IFR5cGUgICAgfCBUSUQgfCBSZXNlcnZlIHxFfA0KPiArICAgICAgICAgICAgLy/DgiArLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsNCj4gKyAgICAgICAgICAgIC8vDQo+ICsgICAgICAg ICAgICAvLyBGOiAgICAgICAxIGJpdCAgIC0gZm9yYmlkZGVuX3plcm9fYml0LiAgUmVxdWlyZWQg dG8gYmUgemVybyBpbiBbRVZDXS4NCj4gKyAgICAgICAgICAgIC8vIFR5cGU6ICAgIDYgYml0cyAg LSBuYWxfdW5pdF90eXBlX3BsdXMxIChUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgTkFMIHVuaXQg dHlwZSBhcyBkZWZpbmVkIGluIFRhYmxlIDQgb2YgW0VWQ10pDQo+ICsgICAgICAgICAgICAvLyBU SUQ6ICAgICAzIGJpdHMgIC0gbnVoX3RlbXBvcmFsX2lkLiAgVGhpcyBmaWVsZCBzcGVjaWZpZXMg dGhlIHRlbXBvcmFsIGlkZW50aWZpZXIgb2YgdGhlIE5BTCB1bml0Lg0KPiArICAgICAgICAgICAg Ly8gUmVzZXJ2ZTogNSBiaXRzICAtIG51aF9yZXNlcnZlZF96ZXJvXzViaXRzLiAgVGhpcyBmaWVs ZCBzaGFsbCBiZSBlcXVhbCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgW0VWQ10gc3BlY2lmaWNhdGlv bi4NCj4gKyAgICAgICAgICAgIC8vIEU6ICAgICAgIDEgYml0ICAgLSBudWhfZXh0ZW5zaW9uX2Zs YWcuICBUaGlzIGZpZWxkIHNoYWxsIGJlIGVxdWFsIHRoZSB2ZXJzaW9uIG9mIHRoZSBbRVZDXSBz cGVjaWZpY2F0aW9uLg0KPiArICAgICAgICAgICAgLy8NCj4gKyAgICAgICAgICAgIC8vIEBzZWUg aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWF2dGNvcmUt cnRwLWV2Yy0wMSNzZWN0aW9uLTEuMS40DQo+ICsgICAgICAgICAgICANCj4gKyNpZmRlZiBVU0Vf RVhQX0dPTE9NQl9TVFVGRiANCj4gKyAgICAgICAgICAgIG5hbF90eXBlID0gZ2V0X25hbHVfdHlw ZShiaXRiLmFkZHIsIDEpOw0KPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVC VUcsICJOQUxVIFR5cGU6ICVkXG4iLCBuYWxfdHlwZSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICAg ICAgbWVtY3B5KCZuYWxfdHlwZSxiaXRiLmFkZHIsMSk7DQo+ICsgICAgICAgICAgICBuYWxfdHlw ZSA9IG5hbF90eXBlICYgMHg3RTsNCj4gKyAgICAgICAgICAgIG5hbF90eXBlID0gbmFsX3R5cGUg Pj4gMTsNCj4gKyAgICAgICAgICAgIG5hbF90eXBlIC09IDE7DQo+ICsgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk5BTFUgVHlwZTogJWRcbiIsIG5hbF90eXBlKTsNCj4g KyNlbmRpZg0KPiArDQo+ICsgICAgICAgICAgICAvKiBtYWluIGRlY29kaW5nIGJsb2NrICovDQo+ ICsgICAgICAgICAgICByZXQgPSB4ZXZkX2RlY29kZShjdHgtPmlkLCAmYml0YiwgJnN0YXQpOw0K PiArICAgICAgICAgICAgaWYoWEVWRF9GQUlMRUQocmV0KSkgew0KPiArICAgICAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGRlY29kZSBiaXRzdHJlYW1c biIpOw0KPiArICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KPiArICAgICAgICAgICAgfQ0KPiAr DQo+ICsgICAgICAgICAgICBic19yZWFkX3BvcyArPSBuYWx1X3NpemU7DQo+ICsNCj4gKyNpZmRl ZiBQUklOVF9OQUxVX0lORk8NCj4gKyAgICAgICAgICAgIHByaW50X25hbHVfaW5mbyhjdHgpOw0K PiArI2VuZGlmDQo+ICsNCj4gKyAgICAgICAgICAgIGlmKHN0YXQubmFsdV90eXBlID09IFhFVkRf TlVUX1NQUykgew0KPiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVH LCAiRVZDIHN0cmVhbSBwYXJhbWV0ZXJzIGNoYW5nZWRcbiIpOw0KPiArDQo+ICsgICAgICAgICAg ICAgICAgaWYoZXhwb3J0X3N0cmVhbV9wYXJhbXMoYXZjdHgsIGN0eCkhPTApIHsNCj4gKyAgICAg ICAgICAgICAgICAgICAgZ290byBFUlI7DQo+ICsgICAgICAgICAgICAgICAgfQ0KPiArICAgICAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAid2lkdGg6ICVkXG4iLGF2Y3R4 LT53aWR0aCk7DQo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcs ICJoZWlnaHQ6ICVkXG4iLGF2Y3R4LT5oZWlnaHQpOw0KPiArDQo+ICsgICAgICAgICAgICB9DQo+ ICsNCj4gKyAgICAgICAgICAgIGlmKGh0dHBzOi8vcHJvdGVjdDIuZmlyZWV5ZS5jb20vdjEvdXJs P2s9NTViNjExNjItMzQzZDA0NWItNTViNzlhMmQtMDAwYmFiZmZhZTEwLWYxZTFmZGJkZjY5YmQ2 ZDYmcT0xJmU9YTFlY2FjZWYtYjQyYS00MmI4LThiMGYtNmRlYmFjZTVkZGFiJnU9aHR0cCUzQSUy RiUyRnN0YXQucmVhZCUyRiAhPSBuYWx1X3NpemUpIHsNCj4gKyAgICAgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19JTkZPLCAiZGlmZmVyZW50IHJlYWRpbmcgb2YgYml0c3RyZWFtIChp bjolZCwgcmVhZDolZClcbiwiLCBuYWx1X3NpemUsIHN0YXQucmVhZCk7DQo+ICsgICAgICAgICAg ICB9DQo+ICsgICAgICAgICAgICBpZihzdGF0LmZudW0gPj0gMCkgew0KPiArICAgICAgICAgICAg ICAgIGlmIChpbWdiKSB7IC8qIGFscmVhZHkgaGFzIGEgZGVjb2RlZCBpbWFnZSAqLw0KPiArICAg ICAgICAgICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOw0KPiArICAgICAgICAgICAgICAg ICAgICBpbWdiID0gTlVMTDsNCj4gKyAgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAg ICAgcmV0ID0geGV2ZF9wdWxsKGN0eC0+aWQsICZpbWdiKTsNCj4gKyAgICAgICAgICAgICAgICBp ZihYRVZEX0ZBSUxFRChyZXQpKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIHB1bGwgdGhlIGRlY29kZWQgaW1hZ2UgKGVycjol ZCwgZnJhbWUjPSVkKVxuIiwgcmV0LCBzdGF0LmZudW0pOw0KPiArICAgICAgICAgICAgICAgICAg ICBnb3RvIEVSUjsNCj4gKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldCA9PSBYRVZEX09L X0ZSTV9ERUxBWUVEKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiZGVsYXllZCBmcmFtZVxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgIGlm KGltZ2IpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGltZ2ItPnJlbGVhc2UoaW1nYik7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpbWdiID0gTlVMTDsNCj4gKyAgICAgICAgICAg ICAgICAgICAgfQ0KPiArICAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAgIH0NCj4gKyAg ICAgICAgfQ0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJidW1waW5nIC4uLlxuIik7DQo+ICsgICAgICAgIHJldCA9IHhldmRfcHVsbChjdHgt PmlkLCAmKGltZ2IpKTsNCj4gKyAgICAgICAgaWYocmV0ID09IFhFVkRfRVJSX1VORVhQRUNURUQp IHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQnVtcGluZyBw cm9jZXNzIGNvbXBsZXRlZFxuIik7DQo+ICsgICAgICAgICAgICAqZ290X2ZyYW1lID0gMDsNCj4g KyAgICAgICAgICAgIHJldHVybiAwOw0KPiArICAgICAgICB9IGVsc2UgaWYoWEVWRF9GQUlMRUQo cmV0KSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJmYWls ZWQgdG8gcHVsbCB0aGUgZGVjb2RlZCBpbWFnZSAoZXJyOiVkKVxuIiwgcmV0KTsNCj4gKyAgICAg ICAgICAgIGdvdG8gRVJSOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJidW1waW5nIHN1Y2Nlc3NcbiIpOw0KPiArICAgICAg ICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYoaW1nYikgew0KPiArICAgICAgICAvKiBAdG9k byBzdXBwb3J0cyBvdGhlciBjb2xvciBzcGFjZSBhbmQgYml0IGRlcHRoICovDQo+ICsgICAgICAg IGlmKGltZ2ItPmNzICE9IFhFVkRfQ1NfWUNCQ1I0MjBfMTBMRSkgew0KPiArICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJOb3Qgc3VwcG9ydGVkIHBpeGVsIGZvcm1hdDog JXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBpeF9mbXQpKTsNCj4gKyAgICAgICAg ICAgIGdvdG8gRVJSOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWYgKGltZ2ItPndb MF0gIT0gYXZjdHgtPndpZHRoIHx8IGltZ2ItPmhbMF0gIT0gYXZjdHgtPmhlaWdodCkgew0KPiAr ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJyZXNvbHV0aW9uIGNoYW5n ZWQgJWR4JWQgLT4gJWR4JWRcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgYXZjdHgtPndpZHRo LCBhdmN0eC0+aGVpZ2h0LCBpbWdiLT53WzBdLCBpbWdiLT5oWzBdKTsNCj4gKyAgICAgICAgICAg IGlmKGZmX3NldF9kaW1lbnNpb25zKGF2Y3R4LCBpbWdiLT53WzBdLCBpbWdiLT5oWzBdKSA8IDAp IHsNCj4gKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5v dCBzZXQgbmV3IGRpbWVuc2lvblxuIik7DQo+ICsgICAgICAgICAgICAgICAgZ290byBFUlI7DQo+ ICsgICAgICAgICAgICB9DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBmcmFtZS0+Y29k ZWRfcGljdHVyZV9udW1iZXIrKzsNCj4gKyAgICAgICAgZnJhbWUtPmRpc3BsYXlfcGljdHVyZV9u dW1iZXIrKzsNCj4gKyAgICAgICAgZnJhbWUtPmZvcm1hdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEw TEU7DQo+ICsNCj4gKyNpZmRlZiBQUklOVF9YRVZEX0lNR0JfSU5GTw0KPiArICAgICAgICBwcmlu dF94ZXZkX2ltZ2JfaW5mbyhpbWdiKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGlmIChm Zl9nZXRfYnVmZmVyKGF2Y3R4LCBmcmFtZSwgMCkgPCAwKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBnZXQgQVYgYnVmZmVyXG4iKTsNCj4gKyAg ICAgICAgICAgIGdvdG8gRVJSOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgZnJhbWUt PnB0cyA9IHBrdC0+cHRzOw0KPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg ImZyYW1lLT5wdHMgPSAlbGRcbiIsIGZyYW1lLT5wdHMpOw0KPiArDQo+ICsgICAgICAgIGF2X2lt YWdlX2NvcHkoZnJhbWUtPmRhdGEsIGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiop aW1nYi0+YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBpbWdiLT5zLCBhdmN0eC0+cGl4X2Zt dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBpbWdiLT53WzBdLCBpbWdiLT5oWzBdKTsNCj4g Kw0KPiArICAgICAgICBjdHgtPmRlY29kX2ZyYW1lcysrOw0KPiArICAgICAgICAqZ290X2ZyYW1l ID0gMTsNCj4gKw0KPiArI2lmZGVmIFBSSU5UX0ZSQU1FX0lORk8NCj4gKyAgICAgICAgcHJpbnRf ZnJhbWVfaW5mbyhmcmFtZSk7DQo+ICsjZW5kaWYNCj4gKyAgICAgICAgaW1nYi0+cmVsZWFzZShp bWdiKTsNCj4gKyAgICAgICAgaW1nYiA9IE5VTEw7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAg ICAgKmdvdF9mcmFtZSA9IDA7DQo+ICsgICAgfQ0KPiArIA0KPiArICAgIGN0eC0+cGFja2V0X2Nv dW50Kys7DQo+ICsgICAgcmV0dXJuIHBrdC0+c2l6ZTsNCj4gKw0KPiArRVJSOg0KPiArICAgIGlm KGltZ2IpIHsNCj4gKyAgICAgICAgaW1nYi0+cmVsZWFzZShpbWdiKTsNCj4gKyAgICAgICAgaW1n YiA9IE5VTEw7DQo+ICsgICAgfQ0KPiArICAgICpnb3RfZnJhbWUgPSAwOw0KPiArICAgIHJldHVy biAtMTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBEZXN0cm95IGRlY29kZXINCj4gKyAqDQo+ ICsgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dA0KPiArICogQHJldHVybiAwIG9uIHN1Y2Nl c3MNCj4gKyAqLw0KPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmRfY2xvc2UoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQ0KPiArew0KPiArICAgIFhldmRDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOw0KPiArICAgIGlmKGN0eC0+aWQpIHsNCj4gKyAgICAgICAgeGV2ZF9kZWxldGUoY3R4 LT5pZCk7DQo+ICsgICAgICAgIGN0eC0+aWQgPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAg IHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYZXZk Q29udGV4dCwgeCkNCj4gKyNkZWZpbmUgVkQgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9P UFRfRkxBR19ERUNPRElOR19QQVJBTQ0KPiArDQo+ICsvLyBAdG9kbyBjb25zaWRlciB1c2luZyBm b2xsb3dpbmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1oZWxwIGRlY29kZXI9bGlieGV2ZCkNCj4gKy8v DQo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0gew0KPiArICAgIHsgInhldmQt cGFyYW1zIiwgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSB4ZXZkIGNvbmZpZ3VyYXRpb24g dXNpbmcgYSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VU KHhldmRfb3B0cyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZEIH0sDQoNCldo YXQgb3B0aW9ucyBmb3IgeGV2ZCBtYWtlIHNlbnNlIGF0IGFsbD8gTW9zdCBkZWNvZGVycyBkb24n dCB1c2UNCmNvZGVjLXNwZWNpZmljIG9wdGlvbnMgYXQgYWxsLCBhcyBhIGRlY29kZXJzIGpvYiBp cyBnZW5lcmFsbHkgdmVyeSBlYXN5DQoobmFtZWx5OiAiZGVjb2RlIHdoYXQgaXQgZ2V0cyBmZWQi KS4NCihBY2NvcmRpbmcgdG8gaHR0cHM6Ly9wcm90ZWN0Mi5maXJlZXllLmNvbS92MS91cmw/az1k YmY0ZjdiYy1iYTdmZTI4NS1kYmY1N2NmMy0wMDBiYWJmZmFlMTAtYmI3ZGQ2ZmUwYWRkM2RkMCZx PTEmZT1hMWVjYWNlZi1iNDJhLTQyYjgtOGIwZi02ZGViYWNlNWRkYWImdT1odHRwcyUzQSUyRiUy RmdpdGh1Yi5jb20lMkZtcGVnNSUyRnhldmQgdGhlIG9ubHkgb3B0aW9uIHRoYXQgbWFrZXMNCnNl bnNlIGlzIHRoZSBudW1iZXIgb2YgdGhyZWFkcywgYnV0IGZvciB0aGlzIHlvdSBkb24ndCBuZWVk IHhldmQtcGFyYW1zOw0KQVZDb2RlY0NvbnRleHQudGhyZWFkX2NvdW50IGlzIGVub3VnaC4pDQoN CkRPTkUuIFJlbW92ZWQgY29kZWMgc3BlY2lmaWMgb3B0aW9ucyBmcm9tIGRlY29kZXIgaW1wbGVt ZW50YXRpb24uDQoNCj4gKyAgICB7IE5VTEwgfQ0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0 IEFWQ2xhc3MgeGV2ZF9jbGFzcyA9IHsNCj4gKyAgICAuY2xhc3NfbmFtZSA9ICJsaWJ4ZXZkIiwN Cj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLA0KPiArICAgIC5vcHRp b24gICAgID0gb3B0aW9ucywNCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9O X0lOVCwNCj4gK307DQo+ICsNCj4gKy8vLyBAdG9kbyBwcm92aWRlIGltcGxlbWVudGF0aW9uDQo+ ICtzdGF0aWMgY29uc3QgQVZDb2RlY0RlZmF1bHQgeGV2ZF9kZWZhdWx0c1tdID0gew0KPiArICAg IHsgImIiLCAiMCIgfSwNCj4gKyAgICB7IE5VTEwgfSwNCj4gK307DQoNClVzaW5nIEFWQ29kZWNE ZWZhdWx0IGZvciBhIGRlY29kZXIgZ2VuZXJhbGx5IG1ha2VzIG5vIHNlbnNlLiBUaGlzDQpjZXJ0 YWlubHkgYXBwbGllcyB0byBzZXR0aW5nIGEgYml0cmF0ZSBmb3IgYSBkZWNvZGVyLg0KDQpET05F LiBSZW1vdmVkIEFWQ29kZWNEZWZhdWx0IGZyb20gZGVjb2RlciBpbXBsZW1lbnRhdGlvbi4NCg0K PiArDQo+ICtBVkNvZGVjIGZmX2xpYnhldmRfZGVjb2RlciA9IHsNCj4gKyAgICAubmFtZSAgICAg ICAgICAgICA9ICJldmMiLA0KPiArICAgIC5sb25nX25hbWUgICAgICAgID0gTlVMTF9JRl9DT05G SUdfU01BTEwoIkVWQyAvIE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nIChFVkMpIiksDQo+ ICsgICAgLnR5cGUgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sDQo+ICsgICAgLmlk ICAgICAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9FVkMsDQo+ICsgICAgLmluaXQgICAgICAgICAg ICAgPSBsaWJ4ZXZkX2luaXQsDQo+ICsgICAgLmluaXRfc3RhdGljX2RhdGEgPSBsaWJ4ZXZkX2lu aXRfc3RhdGljX2RhdGEsDQoNCklmIHlvdSBkb24ndCB1c2UgbGlieGV2ZF9pbml0X3N0YXRpY19k YXRhLCB5b3Ugc2hvdWxkIGNvbnN0aWZ5DQpmZl9saWJ4ZXZkX2RlY29kZXI7IGlmIHlvdSBuZWVk IGluaXRfc3RhdGljX2RhdGEsIHlvdSBuZWVkIHRvIGRlY29uc3RpZnkNCnRoZSBkZWNsYXJhdGlv biBpbiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jIHRvIG1hdGNoIHRoZSBkZWZpbml0aW9uLg0KDQpE T04uIENvbnN0aWZpZWQuDQoNCj4gKyAgICAuZGVjb2RlICAgICAgICAgICA9IGxpYnhldmRfZGVj b2RlLA0KPiArICAgIC5jbG9zZSAgICAgICAgICAgID0gbGlieGV2ZF9jbG9zZSwNCj4gKyAgICAu cHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihYZXZkQ29udGV4dCksDQo+ICsgICAgLnByaXZfY2xh c3MgICAgICAgPSAmeGV2ZF9jbGFzcywNCj4gKyAgICAuZGVmYXVsdHMgICAgICAgICA9IHhldmRf ZGVmYXVsdHMsDQo+ICsgICAgLmNhcGFiaWxpdGllcyAgICAgPSBBVl9DT0RFQ19DQVBfREVMQVkg fCBBVl9DT0RFQ19DQVBfQVVUT19USFJFQURTIHwgQVZfQ09ERUNfQ0FQX0FWT0lEX1BST0JJTkcs DQo+ICsgICAgLndyYXBwZXJfbmFtZSAgICAgPSAibGlieGV2ZCIsDQo+ICt9Ow0KPiBkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9saWJ4ZXZlLmMgYi9saWJhdmNvZGVjL2xpYnhldmUuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5mMzRhMWQ2ZWZkDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvbGliYXZjb2RlYy9saWJ4ZXZlLmMNCj4gQEAgLTAsMCArMSwxMTg1 IEBADQo+ICsvKg0KPiArICogbGlieGV2ZSBlbmNvZGVyDQo+ICsgKiBFVkMgKE1QRUctNSBFc3Nl bnRpYWwgVmlkZW8gQ29kaW5nKSBlbmNvZGluZyB1c2luZyBYRVZFIE1QRUctNSBFVkMgZW5jb2Rl ciBsaWJyYXJ5DQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChDKSAyMDIxIERhd2lkIEtvemluc2tp IDxkLmtvemluc2tpQHNhbXN1bmcuY29tPg0KPiArICoNCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4NCj4gKyAqDQo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCj4gKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KPiArICoNCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQo+ICsgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiArICoNCj4g KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCj4gKyAq Lw0KPiArDQo+ICsjaWYgZGVmaW5lZChfTVNDX1ZFUikNCj4gKyNkZWZpbmUgWEVWRV9BUElfSU1Q T1JUUyAxDQo+ICsjZW5kaWYNCj4gKw0KPiArI2luY2x1ZGUgPHhldmUuaD4NCj4gKw0KPiArI2lu Y2x1ZGUgPGZsb2F0Lmg+DQo+ICsjaW5jbHVkZSA8c3RkbGliLmg+DQo+ICsNCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvaW50ZXJuYWwuaCINCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgi DQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIg0KPiArI2luY2x1ZGUgImxpYmF2dXRpbC9w aXhkZXNjLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIg0KPiArI2luY2x1ZGUg ImxpYmF2dXRpbC90aW1lLmgiDQo+ICsNCj4gKyNpbmNsdWRlICJhdmNvZGVjLmgiDQo+ICsjaW5j bHVkZSAiaW50ZXJuYWwuaCINCj4gKyNpbmNsdWRlICJwYWNrZXRfaW50ZXJuYWwuaCINCj4gKw0K PiArI2RlZmluZSBNQVhfQlNfQlVGICgxNioxMDI0KjEwMjQpDQo+ICsNCj4gKy8qKg0KPiArICog RXJyb3IgY29kZXMNCj4gKyAqLw0KPiArI2RlZmluZSBYRVZFX1BBUkFNX0JBRF9OQU1FIC0xMDAN Cj4gKyNkZWZpbmUgWEVWRV9QQVJBTV9CQURfVkFMVUUgLTIwMA0KPiArDQo+ICsvKioNCj4gKyAq IE1hY3JvIGZvciBlbGltaW5hdGluZyB0aGUgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcNCj4gKyAq Lw0KPiArI2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgpDQo+ICsNCj4gKy8qKg0KPiArICogRW5j b2RlciBzdGF0ZXMNCj4gKyAqDQo+ICsgKiBTVEFURV9FTkNPRElORyAtIHRoZSBlbmNvZGVyIHJl Y2VpdmVzIGFuZCBwcm9jZXNzZXMgaW5wdXQgZnJhbWVzDQo+ICsgKiBTVEFURV9CVU1QSU5HICAt IHRoZXJlIGFyZSBubyBtb3JlIGlucHV0IGZyYW1lcywgaG93ZXZlciB0aGUgZW5jb2RlciBzdGls bCBwcm9jZXNzZXMgcHJldmlvdXNseSByZWNlaXZlZCBkYXRhDQo+ICsgKiBTVEFURV9TS0lQUElO RyAtIHNraXBwaW5nIGlucHV0IGZyYW1lcw0KPiArICovDQo+ICt0eXBlZGVmIGVudW0gU3RhdGUg ew0KPiArICAgIFNUQVRFX0VOQ09ESU5HLA0KPiArICAgIFNUQVRFX0JVTVBJTkcsDQo+ICsgICAg U1RBVEVfU0tJUFBJTkcNCj4gK30gU3RhdGU7DQo+ICsNCj4gKy8qKg0KPiArICogVGhlIHN0cnVj dHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9m IFhldmUgTVBFRy01IEVWQyBlbmNvZGVyDQo+ICsgKiBUaGUgZmlyc3QgZmllbGQgaXMgYSBwb2lu dGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2Vu L3RydW5rL3N0cnVjdEFWQ2xhc3MuaHRtbCNkZXRhaWxzKS4NCj4gKyAqLw0KPiArdHlwZWRlZiBz dHJ1Y3QgWGV2ZUNvbnRleHQgew0KPiArICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOw0KPiArDQo+ ICsgICAgWEVWRSBpZDsgICAgICAgIC8vIFhFVkUgaW5zdGFuY2UgaWRlbnRpZmllcg0KPiArICAg IFhFVkVfQ0RTQyBjZHNjOyAvLyBjb2RpbmcgcGFyYW1ldGVycyBpLmUgcHJvZmlsZSwgd2lkdGgg JiBoZWlnaHQgb2YgaW5wdXQgZnJhbWUsIG51bSBvZiB0aGVyYWRzLCBmcmFtZSByYXRlIC4uLg0K PiArICAgIFhFVkVfQklUQiBiaXRiOyAvLyBiaXRzdHJlYW0gYnVmZmVyIChvdXRwdXQpDQo+ICsg ICAgWEVWRV9TVEFUIHN0YXQ7IC8vIGVuY29kaW5nIHN0YXR1cyAob3V0cHV0KQ0KPiArICAgIFhF VkVfSU1HQiBpbWdiOyAvLyBpbWFnZSBidWZmZXIgKGlucHV0KQ0KPiArDQo+ICsgICAgU3RhdGUg c3RhdGU7IC8vIGVuY29kZXIgc3RhdGUgKHNraXBwaW5nLCBlbmNvZGluZywgYnVtcGluZykNCj4g Kw0KPiArICAgIGludCBlbmNvZF9mcmFtZXM7ICAgLy8gbnVtIG9mIGVuY29kZWQgZnJhbWVzDQo+ ICsgICAgZG91YmxlIGJ5dGVzX3RvdGFsOyAvLyBlbmNvZGVkIGJpdHN0cmVhbSBieXRlIHNpemUN Cj4gKyAgICBkb3VibGUgYml0cmF0ZTsgICAgIC8vIGJpdHMgcGVyIHNlY29uZA0KPiArICAgIGlu dCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtIG9mIHBhY2tldHMgY3JlYXRlZCBieSBlbmNvZGVyDQo+ ICsNCj4gKyAgICAvLyBDaHJvbWEgc3Vic2FtcGxpbmcNCj4gKyAgICBpbnQgd2lkdGhfbHVtYTsN Cj4gKyAgICBpbnQgaGVpZ2h0X2x1bWE7DQo+ICsgICAgaW50IHdpZHRoX2Nocm9tYTsNCj4gKyAg ICBpbnQgaGVpZ2h0X2Nocm9tYTsNCj4gKw0KPiArICAgIGludCBwcm9maWxlX2lkOyAgLy8gZW5j b2RlciBwcm9maWxlIChtYWluLCBiYXNlbGluZSkNCj4gKyAgICBpbnQgcHJlc2V0X2lkOyAgIC8v IHByZXNldCBvZiB4ZXZlICggZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKQ0KPiArICAgIGlu dCB0dW5lX2lkOyAgICAgLy8gdHVuZSBvZiB4ZXZlIChwc25yLCB6ZXJvbGF0ZW5jeSkNCj4gKyAg ICBpbnQgaW5wdXRfZGVwdGg7IC8vIGlucHV0IGJpdC1kZXB0aDogOGJpdCwgMTBiaXQNCj4gKyAg ICBpbnQgaGFzaDsNCj4gKw0KPiArICAgIC8qIHZhcmlhYmxlcyBmb3IgaW5wdXQgcGFyYW1ldGVy ICovDQo+ICsgICAgY2hhciAqIG9wX3ByZXNldDsNCj4gKyAgICBjaGFyICogb3BfdHVuZTsNCj4g KyAgICBpbnQgICAgb3BfcXA7DQo+ICsgICAgaW50ICAgIG9wX2NyZjsNCj4gKw0KPiArICAgIC8v IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycw0KPiArICAgIC8vIHhldmUgY29uZmlndXJhdGlvbiBy ZWFkIGZyb20gYSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzDQo+ICsg ICAgQVZEaWN0aW9uYXJ5ICp4ZXZlX3BhcmFtczsNCj4gK30gWGV2ZUNvbnRleHQ7DQo+ICsNCj4g Ky8qKg0KPiArICogR2V0cyBYZXZlIGVuY29kZXIgcHJlLWRlZmluZWQgcHJvZmlsZQ0KPiArICoN Cj4gKyAqIEBwYXJhbSBwcm9maWxlIHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5jb2RlciBwcm9m aWxlIChiYXNlbGluZSwgbWFpbikNCj4gKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9m aWxlIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUNCj4gKyAqLw0KPiArc3Rh dGljIGludCBnZXRfcHJvZmlsZV9pZChjb25zdCBjaGFyICogcHJvZmlsZSkNCj4gK3sNCj4gKyAg ICBpZiAoIXN0cmNtcChwcm9maWxlLCAiYmFzZWxpbmUiKSkgew0KPiArICAgICAgICByZXR1cm4g WEVWRV9QUk9GSUxFX0JBU0VMSU5FOw0KPiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwcm9maWxl LCAibWFpbiIpKSB7DQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BST0ZJTEVfTUFJTjsNCj4gKyAg ICB9IGVsc2Ugew0KPiArICAgICAgICByZXR1cm4gLTE7DQo+ICsgICAgfQ0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAqIEdldHMgWGV2ZSBwcmUtZGVmaW5lZCBwcmVzZXQNCj4gKyAqDQo+ICsgKiBA cGFyYW0gcHJlc2V0IHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5jb2RlciBwcmVzZXQgKGZhc3Qs IG1lZGl1bSwgc2xvdywgcGxhY2VibyApDQo+ICsgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQg cHJvZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4g K3N0YXRpYyBpbnQgZ2V0X3ByZXNldF9pZChjb25zdCBjaGFyICogcHJlc2V0KQ0KPiArew0KPiAr ICAgIGlmKCghc3RyY21wKHByZXNldCwgImZhc3QiKSkpIHsNCj4gKyAgICAgICAgcmV0dXJuIFhF VkVfUFJFU0VUX0ZBU1Q7DQo+ICsgICAgfSBlbHNlIGlmICghc3RyY21wKHByZXNldCwgIm1lZGl1 bSIpKSB7DQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BSRVNFVF9NRURJVU07DQo+ICsgICAgfSBl bHNlIGlmICghc3RyY21wKHByZXNldCwgInNsb3ciKSkgew0KPiArICAgICAgICByZXR1cm4gWEVW RV9QUkVTRVRfU0xPVzsNCj4gKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAicGxhY2Vi byIpKSB7DQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BSRVNFVF9QTEFDRUJPOw0KPiArICAgIH0g ZWxzZSB7DQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICogR2V0cyBYZXZlIHByZS1kZWZpbmVkIHR1bmUgaWQNCj4gKyAqDQo+ICsgKiBAcGFy YW0gcHJlc2V0IHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5jb2RlciBwcmVzZXQgKGZhc3QsIG1l ZGl1bSwgc2xvdywgcGxhY2VibyApDQo+ICsgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgcHJv ZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0 YXRpYyBpbnQgZ2V0X3R1bmVfaWQoY29uc3QgY2hhciAqIHR1bmUpDQo+ICt7DQo+ICsgICAgaWYo KCFzdHJjbXAodHVuZSwgInBzbnIiKSkpIHsNCj4gKyAgICAgICAgcmV0dXJuIFhFVkVfVFVORV9Q U05SOw0KPiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0dW5lLCAiemVyb2xhdGVuY3kiKSkgew0K PiArICAgICAgICByZXR1cm4gWEVWRV9UVU5FX1pFUk9MQVRFTkNZOw0KPiArICAgIH0gZWxzZSB7 DQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQga2Jwc19zdHJfdG9faW50KGNoYXIgKnN0cikNCj4gK3sNCj4gKyAgICBpbnQga2JwcyA9IDA7 DQo+ICsgICAgaWYgKHN0cmNocihzdHIsICdLJykgfHwgc3RyY2hyKHN0ciwgJ2snKSkgew0KPiAr ICAgICAgICBjaGFyICp0bXAgPSBzdHJ0b2soc3RyLCAiS2sgIik7DQo+ICsgICAgICAgIGticHMg PSAoaW50KShhdG9mKHRtcCkpOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY2hyKHN0ciwgJ00nKSB8 fCBzdHJjaHIoc3RyLCAnbScpKSB7DQo+ICsgICAgICAgIGNoYXIgKnRtcCA9IHN0cnRvayhzdHIs ICJNbSAiKTsNCj4gKyAgICAgICAga2JwcyA9IChpbnQpKGF0b2YodG1wKSAqIDEwMDApOw0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGticHMgPSBhdG9pKHN0cik7DQo+ICsgICAgfQ0KPiAr ICAgIHJldHVybiBrYnBzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIFBhcnNlIDotc2VwYXJh dGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMNCj4gKyAqDQo+ICsgKiBAcGFyYW0ga2V5 DQo+ICsgKiBAcGFyYW0gdmFsdWUNCj4gKyAqIEBwYXJhbSB4ZSBwb2ludGVyIHRvIHRoZSBzdHJ1 Y3R1cmUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGgNCj4gKyAqICAg ICAgICAgICB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXINCj4gKyAqIEBw YXJhbSBwYXJhbSBjb2RpbmcgcGFyYW1ldGVycw0KPiArICoNCj4gKyAqIEByZXR1cm4gMCBvbiBz dWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQg cGFyc2VfeGV2ZV9wYXJhbXMoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwgWGV2 ZUNvbnRleHQqIHhlLCBYRVZFX1BBUkFNKiBwYXJhbSkNCj4gK3sNCj4gKyAgICBpZigha2V5KSB7 DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJdmFsaWQgYXJndW1lbnQ6 IGtleSBzdHJpbmcgaXMgTlVMTFxuIik7DQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JB RF9WQUxVRTsNCj4gKyAgICB9DQo+ICsgICAgaWYoIXZhbHVlKSB7DQo+ICsgICAgICAgIGlmIChz dHJjbXAoa2V5LCAiaGFzaCIpID09IDApIHsNCj4gKyAgICAgICAgICAgIHhlLT5oYXNoID0gMTsN Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgImVtYmVkZGluZyBzaWdu YXR1cmUgaXMgZW5hYmxlZFxuIik7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50OiB2YWx1ZSBzdHJp bmcgaXMgTlVMTFxuIik7DQo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFM VUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJ2YnYtYnVm c2l6ZSIpID09IDAgKSB7DQo+ICsgICAgICAgIHBhcmFtLT52YnZfYnVmc2l6ZSA9IGticHNfc3Ry X3RvX2ludCgoY2hhciopdmFsdWUpOw0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lO Rk8sICJWQlYgYnVmZmVyIHNpemU6ICVka2JpdHNcbiIsIHBhcmFtLT52YnZfYnVmc2l6ZSk7DQo+ ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicmMtdHlwZSIpID09IDAgKSB7DQo+ICsgICAg ICAgIGludCByY190eXBlID0gYXRvaSh2YWx1ZSk7DQo+ICsgICAgICAgIGlmKHJjX3R5cGUgPCAw IHx8IHJjX3R5cGUgPiAyKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAiUmF0ZSBjb250cm9sIHR5cGUgWyAwKHJjX29mZikgLyAxKENCUikgXSBiYWQgdmFsdWU6 ICVkXG4iLCByY190eXBlKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9W QUxVRTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBwYXJhbS0+cmNfdHlwZSA9IHJjX3R5cGU7 DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlJhdGUgY29udHJvbCB0eXBl IFsgMChyY19vZmYpIC8gMShDQlIpIF0gOiAlZFxuIiwgcmNfdHlwZSk7DQo+ICsgICAgfSBlbHNl IGlmIChzdHJjbXAoa2V5LCAiYmZyYW1lcyIpID09IDAgKSB7DQo+ICsgICAgICAgIGludCBiZnJh bWVzID0gYXRvaSh2YWx1ZSk7DQo+ICsgICAgICAgIGlmKGJmcmFtZXMgPCAwKSB7DQo+ICsgICAg ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiYmZyYW1lczogYmFkIHZhbHVlOiAl ZFxuIiwgYmZyYW1lcyk7DQo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFM VUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgcGFyYW0tPmJmcmFtZXMgPSBiZnJhbWVzOw0K PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJiZnJhbWVzIDogJWRcbiIsIGJm cmFtZXMpOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInByb2ZpbGUiKSA9PSAwICkg ew0KPiArICAgICAgICBjb25zdCBjaGFyKiBwcm9maWxlID0gdmFsdWU7DQo+ICsgICAgICAgIGlu dCBwcm9maWxlX2lkOw0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJwcm9m aWxlIChiYXNlbGluZSwgbWFpbik6ICVzXG4iLCBwcm9maWxlKTsNCj4gKyAgICAgICAgcHJvZmls ZV9pZCA9IGdldF9wcm9maWxlX2lkKHByb2ZpbGUpOw0KPiArICAgICAgICBpZiAocHJvZmlsZV9p ZCA8IDApIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIHhldmUgcGFyYW06IHByb2ZpbGUoJXMpXG4iLCBwcm9maWxlKTsNCj4gKyAgICAgICAgICAg IHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4 ZS0+cHJvZmlsZV9pZCA9IHByb2ZpbGVfaWQ7DQo+ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5 LCAicHJlc2V0IikgPT0gMCApIHsNCj4gKyAgICAgICAgY29uc3QgY2hhciogcHJlc2V0ID0gdmFs dWU7DQo+ICsgICAgICAgIGludCBwcmVzZXRfaWQ7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfSU5GTywgIlByZXNldCBvZiB4ZXZlIChmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8p OiAlc1xuIiwgcHJlc2V0KTsNCj4gKyAgICAgICAgcHJlc2V0X2lkID0gZ2V0X3ByZXNldF9pZChw cmVzZXQpOw0KPiArICAgICAgICBpZiggcHJlc2V0X2lkIDwgMCkgew0KPiArICAgICAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgeGV2ZSBwYXJhbTogcHJlc2V0KCVz KVxuIiwgcHJlc2V0KTsNCj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxV RTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4ZS0+cHJlc2V0X2lkID0gcHJlc2V0X2lkOw0K PiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInR1bmUiKSA9PSAwICkgew0KPiArICAgICAg ICBjb25zdCBjaGFyKiB0dW5lID0gdmFsdWU7DQo+ICsgICAgICAgIGludCB0dW5lX2lkOw0KPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJUdW5lIG9mIHhldmUgKHBzbnIsIHpl cm9sYXRlbmN5KTogJXNcbiIsIHR1bmUpOw0KPiArICAgICAgICB0dW5lX2lkPSBnZXRfdHVuZV9p ZCh0dW5lKTsNCj4gKyAgICAgICAgaWYoIHR1bmVfaWQgPCAwKSB7DQo+ICsgICAgICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZlIHBhcmFtOiB0dW5lKCVzKVxu IiwgdHVuZSk7DQo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQo+ ICsgICAgICAgIH0NCj4gKyAgICAgICAgeGUtPnR1bmVfaWQgPSB0dW5lX2lkOw0KPiArICAgIH0g ZWxzZSBpZiAoc3RyY21wKGtleSwgImJpdHJhdGUiKSA9PSAwICkgew0KPiArICAgICAgICBwYXJh bS0+Yml0cmF0ZSA9IGticHNfc3RyX3RvX2ludCgoY2hhciAqKXZhbHVlKTsNCj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiQml0cmF0ZSA9ICVka2Jwc1xuIiwgcGFyYW0tPmJp dHJhdGUpOw0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInEiKSA9PSAwIHx8IHN0cmNt cChrZXksICJxcCIpID09IDApIHsNCj4gKyAgICAgICAgaW50IHFwID0gYXRvaSh2YWx1ZSk7DQo+ ICsgICAgICAgIGlmKHFwIDwgMCB8fCBxcCA+IDUxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBRUCB2YWx1ZSAoMH41MSkgOiVkXG4iLCBxcCk7 DQo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQo+ICsgICAgICAg IH0NCj4gKyAgICAgICAgcGFyYW0tPnFwID0gcXA7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfSU5GTywgIlFQIHZhbHVlICgwfjUxKTogJWRcbiIsIHBhcmFtLT5xcCk7DQo+ICsgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlVua25vd24g eGV2ZSBjb2RlYyBvcHRpb246ICVzXG4iLCBrZXkpOw0KPiArICAgICAgICByZXR1cm4gWEVWRV9Q QVJBTV9CQURfTkFNRTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogQ29udmVydCBmZm1wZWcgcGl4ZWwgZm9ybWF0IChBVlBpeGVsRm9ybWF0KSB0 byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIGZvcm1hdA0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0g IHB4X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1 bmsvcGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3MjA0MmJjOWYwY2Y4MGNkNGM1KQ0KPiAr ICogQHBhcmFtW291dF0gY29sb3JfZm9ybWF0IFhFVkUgcHJlLWRlZmluZWQgY29sb3IgZm9ybWF0 IChAc2VlIHhldmUuaCkNCj4gKyAqIEBwYXJhbVtvdXRdIGJpdF9kZXB0aCBiaXQgZGVwdGgNCj4g KyAqDQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVy ZQ0KPiArICovDQo+ICtzdGF0aWMgaW50IGdldF9waXhfZm10KGVudW0gQVZQaXhlbEZvcm1hdCBw aXhfZm10LCBpbnQgKmNvbG9yX2Zvcm1hdCwgaW50ICpiaXRfZGVwdGgpDQo+ICt7DQo+ICsgICAg c3dpdGNoIChwaXhfZm10KSB7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6DQo+ICsg ICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIwOw0KPiArICAgICAgICAqYml0 X2RlcHRoID0gODsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lV VjQyMlA6DQo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIyOw0KPiAr ICAgICAgICAqYml0X2RlcHRoID0gODsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQ0NFA6DQo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lD QkNSNDQ0Ow0KPiArICAgICAgICAqYml0X2RlcHRoID0gODsNCj4gKyAgICAgICAgYnJlYWs7DQo+ ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMDoNCj4gKyAgICAgICAgKmNvbG9yX2Zvcm1h dCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7DQo+ICsgICAgICAgICpiaXRfZGVwdGggPSAxMDsNCj4gKyAg ICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMDoNCj4gKyAgICAg ICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjI7DQo+ICsgICAgICAgICpiaXRfZGVw dGggPSAxMDsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0 NFAxMDoNCj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0NDQ7DQo+ICsg ICAgICAgICpiaXRfZGVwdGggPSAxMDsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVs dDoNCj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfVU5LTk9XTjsNCj4gKyAgICAg ICAgcmV0dXJuIC0xOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdmFyaWFibGUgb2Yg dHlwZSBYRVZFX0NEU0MuDQo+ICsgKiBYRVZFX0NEU0MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFy YW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4NCj4gKyAq DQo+ICsgKiBUaGUgZmllbGQgdmFsdWVzIG9mIHRoZSBYRVZFX0NEU0Mgc3RydWN0dXJlIGFyZSBw b3B1bGF0ZWQgYmFzZWQgb246DQo+ICsgKiAtIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVl cyBvZiB0aGUgQXZDb2RlY0NvbmV0eHQgc3RydWN0dXJlLA0KPiArICogLSB0aGUgeGV2ZSBlbmNv ZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsDQo+ICsgKiAgICh0aGUgZnVsbCBsaXN0IG9mIG9w dGlvbnMgYXZhaWxhYmxlIGZvciB4ZXZlIGVuY29kZXIgaXMgZGlzcGxheWVkIGFmdGVyIGV4ZWN1 dGluZyB0aGUgY29tbWFuZCAuL2ZmbXBlZyAtLWhlbHAgZW5jb2RlciA9IGxpYnhldmUpDQo+ICsg KiAtIGFuZCB0aGUgeGV2ZSBlbmNvZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEgbGlzdCBvZiBr ZXkgdmFsdWUgcGFpcnMgZm9sbG93aW5nIHhldmUtcGFyYW1zIG9wdGlvbg0KPiArICoNCj4gKyAq IE9yZGVyIG9mIGlucHV0IHByb2Nlc3NpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIFhFVkVfQ0RTQyBz dHJ1Y3R1cmUNCj4gKyAqIDEuIGZpcnN0LCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhl IEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUgcHJvY2Vzc2VkLCAoaS5lIC1waXhfZm10IHl1 djQyMHAgLXM6diAxOTIweDEwODAgLXIgMzAgLXByb2ZpbGU6diAwKQ0KPiArICogMi4gdGhlbiB4 ZXZlLXNwZWNpZmljIG9wdGlvbnMgYWRkZWQgYXMgQVZPcHRpb24gdG8gdGhlIHhldmUgQVZDb2Rl YyBpbXBsZW1lbnRhdGlvbiAoaS5lIC10aHJlYWRzX2NudCAzIC1wcmVzZXQgMCkNCj4gKyAqIDMu IGZpbmFsbHksIHRoZSBvcHRpb25zIHNwZWNpZmllZCBhZnRlciB0aGUgeGV2ZS1wYXJhbXMgb3B0 aW9uIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiB0eXBlIGtleSB2YWx1ZSBhcmUgcHJvY2Vzc2Vk IChpLmUgLXhldmUtcGFyYW1zICJtPTI6cT0xNyIpDQo+ICsgKg0KPiArICogVGhlcmUgYXJlIG9w dGlvbnMgdGhhdCBjYW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLiBJbiB0aGlzIGNhc2UsIHBs ZWFzZSBmb2xsb3cgdGhlIGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNzaW5nLg0KPiAr ICogVGhlIG1vc3QgcmVjZW50IGFzc2lnbm1lbnRzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFs dWVzLg0KPiArICoNCj4gKyAqIEBwYXJhbSBjdHggY29kZWMgY29udGV4dA0KPiArICogQHBhcmFt IGNkc2MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0 aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQg Z2V0X2NvbmYoY29uc3QgQVZDb2RlY0NvbnRleHQgKmN0eCwgWEVWRV9DRFNDICpjZHNjKQ0KPiAr ew0KPiArICAgIFhFVkVfUEFSQU0gKiBwYXJhbSA9IE5VTEw7DQo+ICsgICAgWGV2ZUNvbnRleHQg KnhlID0gTlVMTDsNCj4gKyAgICBpbnQgY29sb3JfZm9ybWF0Ow0KPiArICAgIGludCBjcHVfY291 bnQgPSBhdl9jcHVfY291bnQoKTsNCj4gKyAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgeGUgPSBj dHgtPnByaXZfZGF0YTsNCj4gKyAgICBwYXJhbSA9ICZjZHNjLT5wYXJhbTsNCj4gKw0KPiArICAg IC8qIHNldCBkZWZ1YWx0IHZhbHVlIGluIHByaXZfZGF0YSAqLw0KPiArICAgIG1lbXNldChjZHNj LCAwLCBzaXplb2YoWEVWRV9DRFNDKSk7DQo+ICsgICAgeGUtPmhhc2ggPSAwOw0KPiArDQo+ICsg ICAgLyogc2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLw0KPiArICAgIHJldCA9IHhldmVfcGFyYW1f ZGVmYXVsdChwYXJhbSk7DQo+ICsgICAgaWYgKFhFVkVfRkFJTEVEKHJldCkpIHsNCj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBzZXRfZGVmYXVsdCBwYXJhbWV0 ZXJcbiIpOw0KPiArICAgICAgICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBy ZWFkIG9wdGlvbnMgZnJvbSBBVkNvZGVjQ29udGV4dCAgKi8NCj4gKyAgICBpZihjdHgtPndpZHRo ID4gMCkgew0KPiArICAgICAgICBwYXJhbS0+dyA9IGN0eC0+d2lkdGg7DQo+ICsgICAgICAgIHhl LT53aWR0aF9sdW1hID0gY3R4LT53aWR0aDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZihjdHgt PmhlaWdodCA+IDApIHsNCj4gKyAgICAgICAgcGFyYW0tPmggPSBjdHgtPmhlaWdodDsNCj4gKyAg ICAgICAgeGUtPmhlaWdodF9sdW1hID0gY3R4LT5oZWlnaHQ7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgaWYoY3R4LT5mcmFtZXJhdGUubnVtID4gMCkgew0KPiArICAgICAgICAvKiBAdG9kbzogZnBz IGNhbiBiZSBmbG9hdCBudW1iZXIsIGJ1dCB4ZXZlIEFQSSBkb2Vzbid0IHN1cHBvcnQgaXQgKi8N Cj4gKyAgICAgICAgcGFyYW0tPmZwcyA9IChpbnQpKCgoZmxvYXQpY3R4LT5mcmFtZXJhdGUubnVt IC8gY3R4LT5mcmFtZXJhdGUuZGVuKSArIDAuNSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYo Y3R4LT5nb3Bfc2l6ZSA+PSAwKSB7IC8qIGtleS1mcmFtZSBpbnRlcnZhbCAqLw0KPiArICAgICAg ICBwYXJhbS0+a2V5aW50ID0gY3R4LT5nb3Bfc2l6ZTsgLy8gMDogb25seSBvbmUgSS1mcmFtZSBh dCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4gSS1mcmFtZQ0KPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJHT1Agc2l6ZSAoa2V5LWZyYW1lIGlu dGVydmFsKTogJWRcbiIsIGN0eC0+Z29wX3NpemUpOw0KPiArICAgIH0NCj4gKyAgICBpZiAoY3R4 LT5tYXhfYl9mcmFtZXMgPT0gMCB8fCBjdHgtPm1heF9iX2ZyYW1lcyA9PSAxIHx8IGN0eC0+bWF4 X2JfZnJhbWVzID09IDMgfHwNCj4gKyAgICAgICAgICAgIGN0eC0+bWF4X2JfZnJhbWVzID09IDcg fHwgY3R4LT5tYXhfYl9mcmFtZXMgPT0gMTUpIHsgLyogbnVtYmVyIG9mIGItZnJhbWUgKi8NCj4g KyAgICAgICAgcGFyYW0tPmJmcmFtZXMgPSBjdHgtPm1heF9iX2ZyYW1lczsNCj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiTnVtYmVyIG9mIG1heCBiLWZyYW1lczogJWRcbiIs IGN0eC0+bWF4X2JfZnJhbWVzKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiSW5jb3JyZWN0IHZhbHVlIGZvciBtYXhpbXVtIG51bWJlciBv ZiBCIGZyYW1lczogKCVkKSBcbiINCj4gKyAgICAgICAgICAgICAgICJBY2NlcHRhYmxlIHZhbHVl cyBmb3IgYmYgb3B0aW9uIChtYXhpbXVtIG51bWJlciBvZiBCIGZyYW1lcykgYXJlIDAsMSwzLDcg b3IgMTVcbiIsIGN0eC0+bWF4X2JfZnJhbWVzKTsNCj4gKyAgICAgICAgZ290byBFUlI7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgaWYgKGN0eC0+bGV2ZWwgPj0gMCkgew0KPiArICAgICAgICBwYXJh bS0+bGV2ZWxfaWRjID0gY3R4LT5sZXZlbDsNCj4gKyAgICB9DQo+ICsgICAgcmV0ID0gZ2V0X3Bp eF9mbXQoY3R4LT5waXhfZm10LCAmY29sb3JfZm9ybWF0LCAmeGUtPmlucHV0X2RlcHRoKTsNCj4g KyAgICBpZiAocmV0IT0wKSB7DQo+ICsgICAgICAgIGF2X2xvZygoQVZDb2RlY0NvbnRleHQqKWN0 eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LlxuIik7DQo+ICsgICAg ICAgIGdvdG8gRVJSOw0KPiArICAgIH0NCj4gKyAgICBwYXJhbS0+Y3MgPSBYRVZFX0NTX1NFVChj b2xvcl9mb3JtYXQsIHhlLT5pbnB1dF9kZXB0aCwgMCk7DQo+ICsNCj4gKyAgICBpZiAoY3R4LT5y Y19idWZmZXJfc2l6ZSA+IDApIHsNCj4gKyAgICAgICAgcGFyYW0tPnZidl9idWZzaXplID0gKGlu dCkoY3R4LT5yY19idWZmZXJfc2l6ZS8gMTAwMCk7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfSU5GTywgIlZCViBidWYgc2l6ZTogJWRcbiIsIGN0eC0+cmNfYnVmZmVyX3NpemUpOw0K PiArICAgIH0NCj4gKyAgICBpZiAoY3R4LT5iaXRfcmF0ZSA+IDApIHsNCj4gKyAgICAgICAgaWYg KGN0eC0+Yml0X3JhdGUgLyAxMDAwID4gSU5UX01BWCB8fCBjdHgtPnJjX21heF9yYXRlIC8gMTAw MCA+IElOVF9NQVgpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJub3Qgc3VwcG9ydGVkIGJpdHJhdGUgYml0X3JhdGUgYW5kIHJjX21heF9yYXRlID4gJWQwMDBc biIsIElOVF9NQVgpOw0KPiArICAgICAgICAgICAgZ290byBFUlI7DQo+ICsgICAgICAgIH0NCj4g KyAgICAgICAgcGFyYW0tPmJpdHJhdGUgPSAoaW50KShjdHgtPmJpdF9yYXRlIC8gMTAwMCk7DQo+ ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0gWEVWRV9SQ19BQlI7DQo+ICsgICAgfQ0KPiArICAg IGlmICh4ZS0+b3BfY3JmID49IDApIHsNCj4gKyAgICAgICAgcGFyYW0tPmNyZiA9IHhlLT5vcF9j cmY7DQo+ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0gWEVWRV9SQ19DUkY7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgaWYoY3R4LT50aHJlYWRfY291bnQgPD0gMCkgew0KPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY3B1X2NvdW50OiAlZFxuIiwgY3B1X2NvdW50KTsNCj4g KyAgICAgICAgcGFyYW0tPnRocmVhZHMgPSAoY3B1X2NvdW50IDwgWEVWRV9NQVhfVEhSRUFEUyk/ IGNwdV9jb3VudDogWEVWRV9NQVhfVEhSRUFEUzsNCj4gKyAgICB9IGVsc2UgaWYoY3R4LT50aHJl YWRfY291bnQgPiBYRVZFX01BWF9USFJFQURTKSB7DQo+ICsgICAgICAgIHBhcmFtLT50aHJlYWRz ID0gWEVWRV9NQVhfVEhSRUFEUzsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICBwYXJhbS0+ dGhyZWFkcyA9IGN0eC0+dGhyZWFkX2NvdW50Ow0KPiArICAgIH0NCj4gKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0lORk8sICJwYXJhbS0+dGhyZWFkczogJWRcbiIsIHBhcmFtLT50aHJlYWRzKTsN Cj4gKw0KPiArICAgIGNkc2MtPnBhcmFtLmNzID0gWEVWRV9DU19TRVQoY29sb3JfZm9ybWF0LCBw YXJhbS0+Y29kZWNfYml0X2RlcHRoLCAwKTsNCj4gKyAgICBjZHNjLT5tYXhfYnNfYnVmX3NpemUg PSBNQVhfQlNfQlVGOw0KPiArDQo+ICsgICAgaWYoY3R4LT5wcm9maWxlID09IEZGX1BST0ZJTEVf RVZDX0JBU0VMSU5FKSB7DQo+ICsgICAgICAgIHhlLT5wcm9maWxlX2lkID0gWEVWRV9QUk9GSUxF X0JBU0VMSU5FOw0KPiArICAgIH0gZWxzZSBpZihjdHgtPnByb2ZpbGUgPT0gRkZfUFJPRklMRV9F VkNfTUFJTikgew0KPiArICAgICAgICB4ZS0+cHJvZmlsZV9pZCA9IFhFVkVfUFJPRklMRV9NQUlO Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJVbmtub3duIGVuY29kZXIgcHJvZmlsZSAoJWQpXG4iDQo+ICsgICAgICAgICAgICAgICAiQWNj ZXB0YWJsZSB2YWx1ZXMgZm9yIHByb2ZpbGUgb3B0aW9uIGFyZSAwIGFuZCAxICgwOiBiYXNlbGlu ZSBwcm9maWxlOyAxOiBtYWluIHByb2ZpbGUpXG4iLCBjdHgtPnByb2ZpbGUpOw0KPiArICAgICAg ICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsgICAgaWYgKHhlLT5vcF9wcmVzZXQpIHsNCj4gKyAg ICAgICAgeGUtPnByZXNldF9pZCA9IGdldF9wcmVzZXRfaWQoeGUtPm9wX3ByZXNldCk7DQo+ICsg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlByZXNldCAgOiAlc1xuIiwgeGUtPm9w X3ByZXNldCk7DQo+ICsgICAgfQ0KPiArICAgIGlmICh4ZS0+b3BfdHVuZSkgew0KPiArICAgICAg ICB4ZS0+dHVuZV9pZCA9IGdldF90dW5lX2lkKHhlLT5vcF90dW5lKTsNCj4gKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiVHVuZSAgICA6ICVzXG4iLCB4ZS0+b3BfdHVuZSk7DQo+ ICsgICAgfQ0KPiArICAgIA0KPiArICAgIHJldCA9IHhldmVfcGFyYW1fcHB0KHBhcmFtLCB4ZS0+ cHJvZmlsZV9pZCwgeGUtPnByZXNldF9pZCwgeGUtPnR1bmVfaWQpOw0KPiArICAgIGlmIChYRVZF X0ZBSUxFRChyZXQpKSB7DQo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJj YW5ub3Qgc2V0IHByb2ZpbGUoJWQpLCBwcmVzZXQoJWQpLCB0dW5lKCVkKVxuIiwgeGUtPnByb2Zp bGVfaWQsIHhlLT5wcmVzZXRfaWQsIHhlLT50dW5lX2lkKTsNCj4gKyAgICAgICAgZ290byBFUlI7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLyogcGFyc2UgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9 dmFsdWUgcGFyYW1ldGVycyBhbmQgc2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChY RVZFX0NEU0MpICovDQo+ICsgICAgew0KPiArICAgICAgICBBVkRpY3Rpb25hcnlFbnRyeSAqZW4g PSBOVUxMOw0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICIjIyMgU3RhcnQg dG8gcGFyc2UgeGV2ZV9wYXJhbXMgIyMjXG4iKTsNCj4gKyAgICAgICAgd2hpbGUgKChlbiA9IGF2 X2RpY3RfZ2V0KHhlLT54ZXZlX3BhcmFtcywgIiIsIGVuLCBBVl9ESUNUX0lHTk9SRV9TVUZGSVgp KSkgew0KPiArICAgICAgICAgICAgaW50IHBhcnNlX3JldCA9IHBhcnNlX3hldmVfcGFyYW1zKGVu LT5rZXksIGVuLT52YWx1ZSwgeGUsIHBhcmFtKTsNCj4gKw0KPiArICAgICAgICAgICAgc3dpdGNo IChwYXJzZV9yZXQpIHsNCj4gKyAgICAgICAgICAgIGNhc2UgWEVWRV9QQVJBTV9CQURfTkFNRToN Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0KiljdHgsIEFWX0xPR19X QVJOSU5HLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBvcHRpb246ICVzLlxu IiwgZW4tPmtleSk7DQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICBj YXNlIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOg0KPiArICAgICAgICAgICAgICAgIGF2X2xvZygoQVZD b2RlY0NvbnRleHQqKWN0eCwgQVZfTE9HX1dBUk5JTkcsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMuXG4iLCBlbi0+a2V5LCBlbi0+dmFsdWUpOw0K PiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgZGVmYXVsdDoNCj4gKyAg ICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICIjIyMgRW5kIG9mIHBhcnNpbmcgeGV2 ZV9wYXJhbXMgIyMjXG4iKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0lORk8sICJSYXRlIGNvbnRyb2wgdHlwZSBbIDAoQ1FQKSAvIDEoQUJSKSAvIDIoQ1JGKSBd IDogJWRcbiIsIHBhcmFtLT5yY190eXBlKTsNCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lO Rk8sICJjcmY9JWQsIGJpdHJhdGU9JWQsIHZidl9idWZzaXplPSVkLCBmcHM9JWRcbiIsIHBhcmFt LT5jcmYsIHBhcmFtLT5iaXRyYXRlLCBwYXJhbS0+dmJ2X2J1ZnNpemUsIHBhcmFtLT5mcHMpOw0K PiArDQo+ICsgICAgcmV0dXJuIDA7DQo+ICsNCj4gK0VSUjoNCj4gKyAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIENoZWNrIGNvZGVjIGNvbmZpZ3Vy YXRpb24NCj4gKyAqDQo+ICsgKiBAcGFyYW0gY3R4IGNvZGVjIGNvbnRleHQNCj4gKyAqIEBwYXJh bSBjZHNjIGNvbnRhaW5zIGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5p dGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuDQo+ICsgKg0KPiArICogQHJldHVybiAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdGF0aWMgaW50 IGNoZWNrX2NvbmYoQVZDb2RlY0NvbnRleHQgKmN0eCwgIFhFVkVfQ0RTQyAqY2RzYykNCj4gK3sN Cj4gKyAgICBpbnQgcmV0ID0gMDsNCj4gKyAgICBpbnQgbWluX2Jsb2NrX3NpemUgPSA0Ow0KPiAr ICAgIGludCBwaWNfbTsNCj4gKw0KPiArICAgIGlmKGNkc2MtPnBhcmFtLnByb2ZpbGUgPT0gWEVW RV9QUk9GSUxFX0JBU0VMSU5FKSB7DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2Ft dnIgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi QU1WUiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAgIHJl dCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX21t dmQgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi TU1WRCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAgIHJl dCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2Fm ZmluZSAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi QWZmaW5lIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf ZG12ciAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJETVZSIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf YWRtdnAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJBRE1WUCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAg IHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29s X2htdnAgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiSE1WUCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAg IHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29s X2FkZGIgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiQUREQiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAg IHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29s X2FsZiAgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiQUxGIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf aHRkZiAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJIVERGIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmJ0dCAg ICAgICAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJCVFQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQo+ICsgICAgICAgICAgICBy ZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uc3VjbyAg ICAgICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IlNVQ08gY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQo+ICsgICAgICAgICAgICBy ZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9l aXBkICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkVJUEQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQo+ICsgICAgICAgICAgICBy ZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9p cXQgICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IklRVCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAgIHJl dCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2Nt X2luaXQgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi Q01fSU5JVCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAg IHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29s X2FkY2MgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiQURDQyBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAgICAg IHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29s X2F0cyAgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiQVRTX0lOVFJBIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KPiArICAgICAg ICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFt LmliY19mbGFnICAgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJJQkMgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQo+ICsgICAgICAg ICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0u dG9vbF9ycGwgICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIlJQTCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAg ICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50 b29sX3BvY3MgICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiUE9DUyBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCj4gKyAgICAgICAg ICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfYWZm aW5lID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFG RklORSBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOw0KPiArICAgICAgICAgICAg cmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf YWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfYW12ciAgID09IDEpIHsNCj4gKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFNVlIgY2Fubm90IGJlIG9uIHdoZW4g QURNVlAgaXMgb2ZmXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9 DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAmJiBjZHNjLT5w YXJhbS50b29sX2RtdnIgICA9PSAxKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJETVZSIGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxuIik7DQo+ICsg ICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+ cGFyYW0udG9vbF9hZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9tbXZkICAgPT0gMSkg ew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiTU1WRCBjYW5ub3Qg YmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfZWlwZCAgICA9PSAw ICYmIGNkc2MtPnBhcmFtLmliY19mbGFnICAgID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIklCQyBjYW5ub3QgYmUgb24gd2hlbiBFSVBEIGlzIG9mZlxu Iik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9pcXQgICAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hdHMg ICAgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQVRT IGNhbm5vdCBiZSBvbiB3aGVuIElRVCBpcyBvZmZcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0g LTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfY21faW5p dCA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfYWRjYyAgID09IDEpIHsNCj4gKyAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFEQ0MgY2Fubm90IGJlIG9uIHdoZW4gQ01fSU5J VCBpcyBvZmZcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4g KyAgICB9DQoNClRoZXNlIGxpc3RzIGFyZSBob3JyaWJseSBsb25nLiBEb2Vzbid0IHRoZSBlbmNv ZGVyIGVycm9yIG91dCBpbiBjYXNlIG9mDQppbnZhbGlkIHBhcmFtZXRlcnM/DQoNCkkga25vdyB0 aGF0IGl0J3MgaG9ycmlibHkgbG9uZyBidXQgSSB0aGluayB0aGlzIGNoZWNrIGxpc3Qgc2hvdWxk IGJlIGxlZnQgaGVyZQ0KDQo+ICsNCj4gKyAgICBpZiAoY2RzYy0+cGFyYW0uYnR0ID09IDEpIHsN Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggJiYgY2RzYy0+cGFy YW0uZnJhbWV3b3JrX2NiX21heCA8IDUpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJNYXhpbXVuIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBzbWFsbGVy IHRoYW4gNVxuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCA+IDcpIHsNCj4gKyAgICAg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIENvZGluZyBCbG9jayBz aXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gN1xuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAt MTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2Ni X21pbiAmJiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluIDwgMikgew0KPiArICAgICAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUg Y2Fubm90IGJlIHNtYWxsZXIgdGhhbiAyXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0K PiArICAgICAgICB9DQo+ICsgICAgICAgIGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21h eCB8fCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSAmJg0KPiArICAgICAgICAgICAgICAg IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2Jf bWF4KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWluaW11 bSBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5n IEJsb2NrIHNpemVcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0N Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jdTE0X21heCA+IDYpIHsNCj4g KyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIDE6NCBDb2Rp bmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KPiArICAgICAgICAg ICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY2JfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jdTE0X21heCkgJiYNCj4g KyAgICAgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiBjZHNjLT5w YXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiTWF4aW11biAxOjQgQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0 ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXplXG4iKTsNCj4gKyAgICAgICAgICAgIHJl dCA9IC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdv cmtfdHJpc19tYXggPiA2KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBiZSBncmVhdGVyIHRoYW4gNlxuIik7 DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAo KGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlzX21heCB8fCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtf Y2JfbWF4KSAmJg0KPiArICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlz X21heCA+IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsNCj4gKyAgICAgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9jayBzaXplIGNh bm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQo+ICsg ICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoKGNkc2Mt PnBhcmFtLmZyYW1ld29ya190cmlzX21pbiB8fCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWlu KSAmJg0KPiArICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlzX21pbiA8 IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gKyAyKSB7DQo+ICsgICAgICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBjYW5u b3QgYmUgc21hbGxlciB0aGFuIE1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgcGx1cyB0d29cbiIp Ow0KPiArICAgICAgICAgICAgcmV0ID0gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYo Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgbWluX2Jsb2NrX3NpemUgPSAxIDw8IGNkc2Mt PnBhcmFtLmZyYW1ld29ya19jYl9taW47DQo+ICsgICAgICAgIGVsc2UgbWluX2Jsb2NrX3NpemUg PSA4Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChjZHNjLT5wYXJhbS5zdWNvID09IDEpIHsN Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19zdWNvX21heCA+IDYpIHsNCj4g KyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFNVQ08gc2l6 ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KPiArICAgICAgICAgICAgcmV0ID0gLTE7 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9t YXggJiYgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3 b3JrX2NiX21heCkgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwi TWF4aW11biBTVUNPIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBC bG9jayBzaXplXG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0KPiArICAgICAgICB9DQo+ ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19taW4gPCA0KSB7DQo+ICsg ICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWluaW11biBTVUNPIHNpemUg Y2Fubm90IGJlIHNtYWxsZXIgdGhhbiA0XG4iKTsNCj4gKyAgICAgICAgICAgIHJldCA9IC0xOw0K PiArICAgICAgICB9DQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWlu ICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19zdWNvX21pbiA8IGNkc2MtPnBhcmFtLmZyYW1ld29y a19jYl9taW4pIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsIk1p bmltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gTWluaW11bSBjb2RpbmcgQmxv Y2sgc2l6ZVxuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWluID4gY2RzYy0+cGFyYW0u ZnJhbWV3b3JrX3N1Y29fbWF4KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiTWluaW11bSBTVUNPIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVt IFNVQ08gc2l6ZVxuIik7DQo+ICsgICAgICAgICAgICByZXQgPSAtMTsNCj4gKyAgICAgICAgfQ0K PiArICAgIH0NCj4gKw0KPiArICAgIHBpY19tID0gKDggPiBtaW5fYmxvY2tfc2l6ZSkgPyBtaW5f YmxvY2tfc2l6ZSA6IDg7DQo+ICsgICAgaWYgKChjZHNjLT5wYXJhbS53ICYgKHBpY19tIC0gMSkp ICE9IDApIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkN1cnJlbnQg ZW5jb2RlciBkb2VzIG5vdCBzdXBwb3J0IHBpY3R1cmUgd2lkdGgsIG5vdCBtdWx0aXBsZSBvZiBt YXgoOCwgbWluaW11bSBDVSBzaXplKVxuIik7DQo+ICsgICAgICAgIHJldCA9IC0xOw0KPiArICAg IH0NCj4gKyAgICBpZiAoKGNkc2MtPnBhcmFtLmggJiAocGljX20gLSAxKSkgIT0gMCkgew0KPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ3VycmVudCBlbmNvZGVyIGRvZXMg bm90IHN1cHBvcnQgcGljdHVyZSBoZWlnaHQsIG5vdCBtdWx0aXBsZSBvZiBtYXgoOCwgbWluaW11 bSBDVSBzaXplKVxuIik7DQo+ICsgICAgICAgIHJldCA9IC0xOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogU2V0IFhFVkVfQ0ZHX1NF VF9VU0VfUElDX1NJR05BVFVSRSBmb3IgZW5jb2Rlcg0KPiArICoNCj4gKyAqIEBwYXJhbSBpZCBY RVZFIGluc3RhbmNlIGlkZW50aWZpZXINCj4gKyAqIEBwYXJhbSBjdHggdGhlIHN0cnVjdHVyZSBz dG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUg TVBFRy01IEVWQyBlbmNvZGVyDQo+ICsgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgY29sb3Ig c3BhY2UgKEBzZWUgeGV2ZS5oKSBvbiBzdWNjZXNzLCBYRVZFX0NGX1VOS05PV04gb24gZmFpbHVy ZQ0KPiArICoNCj4gKyAqIEB0b2RvIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBmdW5jdGlvbg0KPiAr ICovDQo+ICtzdGF0aWMgaW50IHNldF9leHRyYV9jb25maWcoWEVWRSBpZCwgWGV2ZUNvbnRleHQg KmN0eCkNCj4gK3sNCj4gKyAgICBpbnQgcmV0LCBzaXplLCB2YWx1ZTsNCj4gKw0KPiArICAgIGlm KGN0eC0+aGFzaCkgew0KPiArICAgICAgICB2YWx1ZSA9IDE7DQo+ICsgICAgICAgIHNpemUgPSA0 Ow0KPiArICAgICAgICByZXQgPSB4ZXZlX2NvbmZpZyhpZCwgWEVWRV9DRkdfU0VUX1VTRV9QSUNf U0lHTkFUVVJFLCAmdmFsdWUsICZzaXplKTsNCj4gKyAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0 KSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxlZCB0 byBzZXQgY29uZmlnIGZvciBwaWN0dXJlIHNpZ25hdHVyZVxuIik7DQo+ICsgICAgICAgICAgICBy ZXR1cm4gLTE7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBDb252ZXJ0IGZmbXBlZyBwaXhlbCBmb3JtYXQgKEFW UGl4ZWxGb3JtYXQpIGludG8gWEVWRSBwcmUtZGVmaW5lZCBjb2xvciBzcGFjZQ0KPiArICoNCj4g KyAqIEBwYXJhbSBweF9mbXQgcGl4ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9k b3h5Z2VuL3RydW5rL3BpeGZtdF84aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNmODBj ZDRjNSkNCj4gKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBjb2xvciBzcGFjZSAoQHNlZSB4 ZXZlLmgpIG9uIHN1Y2Nlc3MsIFhFVkVfQ0ZfVU5LTk9XTiBvbiBmYWlsdXJlDQo+ICsgKi8NCj4g K3N0YXRpYyBpbnQgeGV2ZV9jb2xvcl9zcGFjZShlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCkN Cj4gK3sNCj4gKyAgICAvKiBjb2xvciBzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLw0KPiArICAgIGlu dCBjcyA9IFhFVkVfQ0ZfVU5LTk9XTjsNCj4gKw0KPiArICAgIHN3aXRjaCAocGl4X2ZtdCkgew0K PiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOg0KPiArICAgICAgICBjcyA9IFhFVkVfQ1Nf WUNCQ1I0MjA7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0 MjBQMTA6DQo+ICsjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCj4gKyAgICAgICAgY3MgPSBYRVZFX0NT X1NFVChYRVZFX0NGX1lDQkNSNDIwLCAxMCwgMSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICBjcyA9 IFhFVkVfQ1NfWUNCQ1I0MjBfMTBMRTsNCj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGJyZWFr Ow0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTI6DQo+ICsjaWYgQVZfSEFWRV9CSUdF TkRJQU4NCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIwLCAxMiwg MSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjBfMTJMRTsNCj4g KyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVY0MjJQOg0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjI7DQo+ICsgICAgICAgIGJy ZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTA6DQo+ICsjaWYgQVZfSEFWRV9C SUdFTkRJQU4NCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIyLCAx MCwgMSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjJfMTBMRTsN Cj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZN VF9ZVVY0MjJQMTI6DQo+ICsjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCj4gKyAgICAgICAgY3MgPSBY RVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIyLCAxMiwgMSk7DQo+ICsjZWxzZQ0KPiArICAgICAg ICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjIsIDEyLCAwKTsNCj4gKyNlbmRpZg0K PiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQOg0KPiAr ICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTA6DQo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAx MjoNCj4gKyAgICAgICAgY3MgPSBYRVZFX0NGX1VOS05PV047DQo+ICsgICAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOg0KPiArICAgICAgICBjcyA9IFhFVkVfQ0Zf WUNCQ1I0NDQ7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0 NDRQMTA6DQo+ICsjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCj4gKyAgICAgICAgY3MgPSBYRVZFX0NT X1NFVChYRVZFX0NGX1lDQkNSNDQ0LCAxMCwgMSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICBjcyA9 IFhFVkVfQ1NfWUNCQ1I0NDRfMTBMRTsNCj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGJyZWFr Ow0KPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTI6DQo+ICsjaWYgQVZfSEFWRV9CSUdF TkRJQU4NCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDQ0LCAxMiwg MSk7DQo+ICsjZWxzZQ0KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0 NDQsIDEyLCAwKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNh c2UgQVZfUElYX0ZNVF9HUkFZODoNCj4gKyAgICAgICAgY3MgPSBYRVZFX0NGX1lDQkNSNDAwOw0K PiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTEwOg0KPiArI2lm IEFWX0hBVkVfQklHRU5ESUFODQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9Z Q0JDUjQwMCwgMTAsIDEpOw0KPiArI2Vsc2UNCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNS NDAwXzEwTEU7DQo+ICsjZW5kaWYNCj4gKw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNl IEFWX1BJWF9GTVRfR1JBWTEyOg0KPiArI2lmIEFWX0hBVkVfQklHRU5ESUFODQo+ICsgICAgICAg IGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQwMCwgMTIsIDEpOw0KPiArI2Vsc2UNCj4g KyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDAwXzEyTEU7DQo+ICsjZW5kaWYNCj4gKw0KPiAr ICAgICAgICBicmVhazsNCj4gKyAgICBkZWZhdWx0Og0KPiArICAgICAgICBjcyA9IFhFVkVfQ0Zf VU5LTk9XTjsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiBjczsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBzZXR1cF9idW1waW5nKFhFVkUgaWQpDQo+ICt7DQo+ ICsgICAgaW50IHZhbCwgc2l6ZTsNCj4gKyAgICB2YWwgID0gMTsNCj4gKyAgICBzaXplID0gc2l6 ZW9mKGludCk7DQo+ICsgICAgaWYoWEVWRV9GQUlMRUQoeGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZH X1NFVF9GT1JDRV9PVVQsICh2b2lkICopKCZ2YWwpLCAmc2l6ZSkpKSB7DQo+ICsgICAgICAgIHJl dHVybiAtMTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBjaGFyKiBzbGljZV90eXBlKGVudW0gQVZQaWN0dXJlVHlwZSBhdl9waWNfdHlwZSkN Cj4gK3sNCj4gKyAgICBpZihhdl9waWNfdHlwZSA9PSBBVl9QSUNUVVJFX1RZUEVfSSkgew0KPiAr ICAgICAgICByZXR1cm4gIlNsaWNlIFR5cGUgSSI7DQo+ICsgICAgfSBlbHNlIGlmKGF2X3BpY190 eXBlID09IEFWX1BJQ1RVUkVfVFlQRV9QKSB7DQo+ICsgICAgICAgIHJldHVybiAiU2xpY2UgVHlw ZSBQIjsNCj4gKyAgICB9IGVsc2UgaWYoYXZfcGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX0Ip IHsNCj4gKyAgICAgICAgcmV0dXJuICJTbGljZSBUeXBlIEIiOw0KPiArICAgIH0gDQo+ICsgICAg cmV0dXJuICJTbGljZSBUeXBlIFVOREVGSU5FRCI7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog SW5pdGlhbGl6ZSBjb2RlYyBzdGF0aWMgZGF0YQ0KPiArICoNCj4gKyAqIEB0b2RvIGNvbnNpZGVy IHJlbW92aW5nIHVudXNlZCBmdW5jdGlvbg0KPiArICovDQo+ICtzdGF0aWMgYXZfY29sZCB2b2lk IGxpYnhldmVfaW5pdF9zdGF0aWNfZGF0YShBVkNvZGVjICpjb2RlYykNCj4gK3sNCj4gKyAgICBV TlVTRUQoY29kZWMpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEluaXRpYWxpemUgY29kZWMN Cj4gKyAqIENyZWF0ZSBlbmNvZGVyIGluc3RhbmNlIGFuZCBhbGxvY2F0ZSBhbGwgdGhlIG5lZWRl ZCByZXNvdXJjZXMNCj4gKyAqDQo+ICsgKiBAcGFyYW0gY3R4IGNvZGVjIGNvbnRleHQNCj4gKyAq IEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCj4g KyAqLw0KPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmVfaW5pdChBVkNvZGVjQ29udGV4dCAq Y3R4KQ0KPiArew0KPiArICAgIFhldmVDb250ZXh0ICp4ZSA9IGN0eC0+cHJpdl9kYXRhOw0KPiAr ICAgIHVuc2lnbmVkIGNoYXIgKmJzX2J1ZiA9IE5VTEw7DQo+ICsgICAgaW50IGksIHZhbCA9IDA7 DQo+ICsgICAgaW50IHNoaWZ0X2ggPSAwOw0KPiArICAgIGludCBzaGlmdF92ID0gMDsNCj4gKyAg ICBYRVZFX0lNR0IgKiBpbWdiID0gTlVMTDsNCj4gKw0KPiArICAgIFhFVkVfQ0RTQyAqY2RzYyA9 ICYoeGUtPmNkc2MpOw0KPiArICAgIA0KPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcs ICJlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyXG4iKTsNCj4gKw0KPiArICAgIGlm KGN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAgJiYgY3R4LT5waXhfZm10ICE9IEFW X1BJWF9GTVRfWVVWNDIwUDEwKSB7DQo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShjdHgt PnBpeF9mbXQpKTsNCj4gKyAgICAgICAgZ290byBFUlI7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg LyogYWxsb2NhdGUgYml0c3RyZWFtIGJ1ZmZlciAqLw0KPiArICAgIGJzX2J1ZiA9ICh1bnNpZ25l ZCBjaGFyKiltYWxsb2MoTUFYX0JTX0JVRik7DQoNCmF2X21hbGxvYyAoYW5kIHVzZSBhdl9mcmVl IHRvIGZyZWUgaXQpLg0KQnV0IGlmIHlvdSBhbHdheXMgbmVlZCBleGFjdGx5IHRoYXQgYW1vdW50 LCB0aGVuIHlvdSBjYW4ganVzdCBwdXQgYW4NCmFycmF5IG9mIHRoYXQgc2l6ZSBpbnRvIFhldmVD b250ZXh0Lg0KDQpET05FLg0KDQo+ICsgICAgaWYoYnNfYnVmID09IE5VTEwpIHsNCj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBhbGxvY2F0ZSBiaXRzdHJlYW0g YnVmZmVyLCBzaXplPSVkIiwgTUFYX0JTX0JVRik7DQo+ICsgICAgICAgIGdvdG8gRVJSOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIC8qIHJlYWQgY29uZmlndXJhdGlvbnMgYW5kIHNldCB2YWx1ZXMg Zm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVWRV9DRFNDKSAqLw0KPiArICAgIHZhbCA9IGdldF9j b25mKGN0eCwgY2RzYyk7DQo+ICsgICAgaWYgKHZhbCAhPSBYRVZFX09LKSB7DQo+ICsgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsImNhbm5vdCBnZXQgY29uZmlndXJhdGlvblxuIik7 DQo+ICsgICAgICAgIGdvdG8gRVJSOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChjaGVja19j b25mKGN0eCwgY2RzYykgIT0gMCkgew0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCJpbnZhbGlkIGNvbmZpZ3VyYXRpb25cbiIpOw0KPiArICAgICAgICBnb3RvIEVSUjsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICAvKiBjcmVhdGUgZW5jb2RlciAqLw0KPiArICAgIHhlLT5pZCA9 IHhldmVfY3JlYXRlKGNkc2MsIE5VTEwpOw0KPiArICAgIGlmKHhlLT5pZCA9PSBOVUxMKSB7DQo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5ub3QgY3JlYXRlIFhFVkUg ZW5jb2RlclxuIik7DQo+ICsgICAgICAgIGdvdG8gRVJSOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmKHNldF9leHRyYV9jb25maWcoeGUtPmlkLCB4ZSkpIHsNCj4gKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBzZXQgZXh0cmEgY29uZmlndXJhdGlvbnNcbiIpOw0K PiArICAgICAgICBnb3RvIEVSUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICB4ZS0+Yml0Yi5hZGRy ID0gYnNfYnVmOw0KPiArICAgIHhlLT5iaXRiLmJzaXplID0gTUFYX0JTX0JVRjsNCj4gKw0KPiAr ICAgIGlmKGF2X3BpeF9mbXRfZ2V0X2Nocm9tYV9zdWJfc2FtcGxlKGN0eC0+cGl4X2ZtdCwgJnNo aWZ0X2gsICZzaGlmdF92KSkgew0KPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJmYWlsZWQgdG8gZ2V0ICBjaHJvbWEgc2hpZnRcbiIpOw0KPiArICAgICAgICBnb3RvIEVSUjsN Cj4gKyAgICB9DQo+ICsgICAgLy8gWVVWIGZvcm1hdCBleHBsYW5hdGlvbg0KPiArICAgIC8vIHNo aWZ0X2ggPT0gMSAmJiBzaGlmdF92ID09IDEgOiBZVVY0MjANCj4gKyAgICAvLyBzaGlmdF9oID09 IDEgJiYgc2hpZnRfdiA9PSAwIDogWVVWNDIyDQo+ICsgICAgLy8gc2hpZnRfaCA9PSAwICYmIHNo aWZ0X3YgPT0gMCA6IFlVVjQ0NA0KPiArICAgIC8vDQo+ICsgICAgeGUtPndpZHRoX2Nocm9tYSA9 IEFWX0NFSUxfUlNISUZUKGN0eC0+d2lkdGgsIHNoaWZ0X2gpOw0KPiArICAgIHhlLT5oZWlnaHRf Y2hyb21hID0gQVZfQ0VJTF9SU0hJRlQoY3R4LT5oZWlnaHQsIHNoaWZ0X3YpOw0KPiArDQo+ICsg ICAgLyogc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBpbWFnZSBidWZmZXIgKi8NCj4gKyAg ICBpbWdiID0gJnhlLT5pbWdiOw0KPiArICAgIGltZ2ItPmNzID0geGV2ZV9jb2xvcl9zcGFjZShj dHgtPnBpeF9mbXQpOw0KPiArICAgIGltZ2ItPm5wID0gMzsgLyogb25seSBmb3IgeXV2NDIwcCwg eXV2NDIwcGxlICovDQo+ICsgICAgZm9yIChpPTA7IGk8aW1nYi0+bnA7IGkrKykgew0KPiArICAg ICAgICBpbWdiLT54W2ldID0gaW1nYi0+eVtpXSA9IDA7DQo+ICsgICAgfQ0KPiArICAgIGltZ2It PndbMF0gPSBpbWdiLT5hd1swXSA9IHhlLT53aWR0aF9sdW1hOw0KPiArICAgIGltZ2ItPndbMV0g PSBpbWdiLT53WzJdID0gaW1nYi0+YXdbMV09IGltZ2ItPmF3WzJdID0geGUtPndpZHRoX2Nocm9t YTsNCj4gKyAgICBpbWdiLT5oWzBdID0gaW1nYi0+YWhbMF0gPSB4ZS0+aGVpZ2h0X2x1bWE7DQo+ ICsgICAgaW1nYi0+aFsxXSA9IGltZ2ItPmhbMl0gPSBpbWdiLT5haFsxXSA9IGltZ2ItPmFoWzJd ID0geGUtPmhlaWdodF9jaHJvbWE7DQo+ICsNCj4gKyAgICB4ZS0+ZW5jb2RfZnJhbWVzID0gMDsN Cj4gKyAgICB4ZS0+Ynl0ZXNfdG90YWwgPSAwOw0KPiArICAgIHhlLT5zdGF0ZSA9IFNUQVRFX0VO Q09ESU5HOw0KPiArICAgIHhlLT5wYWNrZXRfY291bnQgPSAwOw0KPiArICAgIHhlLT5iaXRyYXRl ID0gMDsNCj4gKyAgICByZXR1cm4gMDsNCj4gKw0KPiArRVJSOg0KPiArICAgIGlmKGJzX2J1Zikg ZnJlZShic19idWYpOw0KPiArICAgIHJldHVybiAtMTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg ICogRW5jb2RlIGRhdGEgdG8gYW4gQVZQYWNrZXQuDQo+ICsgICoNCj4gKyAgKiBAcGFyYW0gICAg ICBjdHggICAgICAgICAgICBjb2RlYyBjb250ZXh0DQo+ICsgICogQHBhcmFtICAgICAgcGt0ICAg ICAgICAgICAgb3V0cHV0IEFWUGFja2V0DQo+ICsgICogQHBhcmFtW2luXSAgZnJhbWUgICAgICAg ICAgQVZGcmFtZSBjb250YWluaW5nIHRoZSByYXcgZGF0YSB0byBiZSBlbmNvZGVkDQo+ICsgICog QHBhcmFtW291dF0gZ290X3BhY2tldCAgICAgZW5jb2RlciBzZXRzIHRvIDAgb3IgMSB0byBpbmRp Y2F0ZSB0aGF0IGENCj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkg cGFja2V0IHdhcyByZXR1cm5lZCBpbiBhdnBrdC4NCj4gKyAgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgICovDQo+ICtzdGF0aWMgaW50 IGxpYnhldmVfZW5jb2RlKEFWQ29kZWNDb250ZXh0ICpjdHgsIEFWUGFja2V0ICpwa3QsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgKmdvdF9w YWNrZXQpDQo+ICt7DQo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gTlVMTDsNCj4gKyAgICBpbnQg IHJldCA9IC0xOw0KPiArICAgIGludCB4ZXZlX2NzOw0KPiArICAgIGlmKGN0eCA9PSBOVUxMIHx8 IHBrdCA9PSBOVUxMIHx8IGdvdF9wYWNrZXQ9PU5VTEwpIHsNCj4gKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBhcmd1bWVudHNcbiIpOw0KPiArICAgICAgICByZXR1 cm4gLTE7DQo+ICsgICAgfQ0KPiArICAgIHhlID0gY3R4LT5wcml2X2RhdGE7DQo+ICsgICAgaWYo eGUgPT0gTlVMTCkgew0KPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIFhFVkUgY29udGV4dFxuIik7DQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICB9DQo+ ICsgICAgaWYoeGUtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZyYW1lICkgew0KPiArICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJFbXB0eSBmcmFtZSAtPiBFbnRlcmluZyBl bmNvZGluZyBwcm9jZXNzLi4uXG4iKTsNCj4gKyAgICAgICAgeGUtPnN0YXRlID0gU1RBVEVfRU5D T0RJTkc7DQo+ICsgICAgfSBlbHNlIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyAmJiBm cmFtZSA9PSBOVUxMKSB7DQo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkVt cHR5IGZyYW1lIC0+IEVudGVyaW5nIGJ1bXBpbmcgcHJvY2Vzcy4uLlxuIik7DQo+ICsgICAgICAg IGlmIChzZXR1cF9idW1waW5nKHhlLT5pZCkgPT0gMCkgew0KPiArICAgICAgICAgICAgeGUtPnN0 YXRlID0gU1RBVEVfQlVNUElORzsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwiRmFpbGVkIHRvIHNldHVwIGJ1bXBpbmdcbiIpOw0K PiArICAgICAgICAgICAgeGUtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7DQo+ICsgICAgICAgIH0N Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZih4ZS0+c3RhdGUgPT0gU1RBVEVfRU5DT0RJTkcpIHsN Cj4gKyAgICAgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpwaXhlbF9mbXRfZGVzYyA9IGF2 X3BpeF9mbXRfZGVzY19nZXQgKGZyYW1lLT5mb3JtYXQpOw0KPiArICAgICAgICBpZighcGl4ZWxf Zm10X2Rlc2MpIHsNCj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIHBpeGVsIGZvcm1hdCBkZXNjcmlwdG9yIGZvciBwaXhlbCBmb3JtYXQ6ICVzXG4iLCBh dl9nZXRfcGl4X2ZtdF9uYW1lKGN0eC0+cGl4X2ZtdCkpOw0KPiArICAgICAgICAgICAgcmV0dXJu IC0xOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgeGV2ZV9jcyA9IHhldmVfY29sb3Jf c3BhY2UoY3R4LT5waXhfZm10KTsNCj4gKyAgICAgICAgaWYoeGV2ZV9jcyAhPSBYRVZFX0NTX1lD QkNSNDIwICYmIHhldmVfY3MgIT0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFKSB7DQo+ICsgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHBpeGVsIGZvcm1hdDogJXNc biIsIGF2X2dldF9waXhfZm10X25hbWUoY3R4LT5waXhfZm10KSk7DQo+ICsgICAgICAgICAgICBy ZXR1cm4gLTE7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAg ICBpbnQgaTsNCj4gKyAgICAgICAgICAgIFhFVkVfSU1HQiAqIGltZ2IgPSBOVUxMOw0KPiArICAg ICAgICAgICAgaW50IHhldmVfYnl0ZV9kZXB0aCA9IDA7DQo+ICsNCj4gKyAgICAgICAgICAgIGlt Z2IgPSAmeGUtPmltZ2I7DQo+ICsNCj4gKyAgICAgICAgICAgIHhldmVfYnl0ZV9kZXB0aCA9IFhF VkVfQ1NfR0VUX0JZVEVfREVQVEgoeGV2ZV9jcyk7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJieXRlIGRlcHRoOiAlZFxuIix4ZXZlX2J5dGVfZGVwdGgpOw0KPiAr DQo+ICsgICAgICAgICAgICBmb3IgKGk9MDsgaTxpbWdiLT5ucDsgaSsrKSB7DQo+ICsgICAgICAg ICAgICAgICAgaW1nYi0+YVtpXSA9IGZyYW1lLT5kYXRhW2ldOw0KPiArICAgICAgICAgICAgICAg IGltZ2ItPnNbaV0gPSBmcmFtZS0+bGluZXNpemVbaV07DQo+ICsgICAgICAgICAgICB9DQo+ICsN Cj4gKyAgICAgICAgICAgIGlmKHhlLT5pZCA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBYRVZFIGVuY29kZXJcbiIpOw0KPiAr ICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgICAgIH0NCj4gKw0KPiArICAg ICAgICAgICAgaW1nYi0+dHNbMF0gPSBmcmFtZS0+cHRzOw0KPiArICAgICAgICAgICAgaW1nYi0+ dHNbMV0gPSAwOw0KPiArICAgICAgICAgICAgaW1nYi0+dHNbMl0gPSAwOw0KPiArICAgICAgICAg ICAgaW1nYi0+dHNbM10gPSAwOw0KPiArDQo+ICsgICAgICAgICAgICAvKiBwdXNoIGltYWdlIHRv IGVuY29kZXIgKi8NCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIklO UFVUIHwgUkFXIGZyYW1lIHwgdGltZXN0YW1wcyB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8ICVsbGQg fFxuIiwgaW1nYi0+dHNbMF0sIGltZ2ItPnRzWzFdLCBpbWdiLT50c1syXSwgaW1nYi0+dHNbM10p Ow0KPiArDQo+ICsgICAgICAgICAgICByZXQgPSB4ZXZlX3B1c2goeGUtPmlkLCBpbWdiKTsNCj4g KyAgICAgICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCj4gKyAgICAgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJ4ZXZlX3B1c2goKSBmYWlsZWRcbiIpOw0KPiArICAg ICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0K PiArICAgIH0gDQo+ICsgICAgaWYoeGUtPnN0YXRlID09IFNUQVRFX0VOQ09ESU5HIHx8IHhlLT5z dGF0ZSA9PSBTVEFURV9CVU1QSU5HKSB7DQo+ICsgICAgICAgIA0KPiArICAgICAgICAvKiBlbmNv ZGluZyAqLw0KPiArICAgICAgICByZXQgPSB4ZXZlX2VuY29kZSh4ZS0+aWQsICYoeGUtPmJpdGIp LCAmKHhlLT5zdGF0KSk7DQo+ICsgICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCj4gKyAg ICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInhldmVfZW5jb2RlKCkgZmFpbGVk XG4iKTsNCj4gKyAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsg ICAgICAgIHhlLT5lbmNvZF9mcmFtZXMrKzsNCj4gKw0KPiArICAgICAgICAvKiBzdG9yZSBiaXRz dHJlYW0gKi8NCj4gKyAgICAgICAgaWYgKHJldCA9PSBYRVZFX09LX09VVF9OT1RfQVZBSUxBQkxF KSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJSRVRVUk4gT0sg QlVUIFBJQ1RVUkUgSVMgTk9UIEFWQUlMQUJMRSBZRVQgKCVkKSBmcmFtZTogJWRcbiIsIHJldCwg eGUtPmVuY29kX2ZyYW1lcyk7DQo+ICsgICAgICAgICAgICAqZ290X3BhY2tldCA9IDA7DQo+ICsg ICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICAgfSBlbHNlIGlmKHJldCA9PSBYRVZFX09L KSB7DQo+ICsgICAgICAgICAgICBpbnQgYXZfcGljX3R5cGU7DQo+ICsNCj4gKyAgICAgICAgICAg IGlmKHhlLT5zdGF0LndyaXRlID4gMCkgew0KPiArICAgICAgICAgICAgICAgIHhlLT5ieXRlc190 b3RhbCs9eGUtPnN0YXQud3JpdGU7DQo+ICsgICAgICAgICAgICAgICAgLy8gYXZfbG9nKGN0eCwg QVZfTE9HX0RFQlVHLCAiZnJhbWU6ICVkIHwgQnl0ZXMgd3JpdHRlbjogICVkIHwgYnl0ZXMgdG90 YWw6ICVmIHwgZm51bSAlZCB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8ICVsbGQgfFxuIiwgeGUtPmVu Y29kX2ZyYW1lcywgeGUtPnN0YXQud3JpdGUsIHhlLT5ieXRlc190b3RhbCwgeGUtPnN0YXQuZm51 bSwgeGUtPmJpdGIudHNbMF0seGUtPmJpdGIudHNbMV0seGUtPmJpdGIudHNbMl0seGUtPmJpdGIu dHNbM10pOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgcmV0ID0gYXZfZ3Jvd19wYWNrZXQocGt0 LCB4ZS0+c3RhdC53cml0ZSk7DQo+ICsgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsNCj4g KyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ2FuJ3QgYWxs b2NhdGUgbWVtb3J5IGZvciBBVlBhY2tldCBkYXRhXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsNCj4gKyAgICAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAg ICAgICBtZW1jcHkocGt0LT5kYXRhLCB4ZS0+Yml0Yi5hZGRyLCB4ZS0+c3RhdC53cml0ZSk7DQo+ ICsNCj4gKyAgICAgICAgICAgICAgICBwa3QtPnB0cyA9IHhlLT5iaXRiLnRzWzBdOw0KPiArICAg ICAgICAgICAgICAgIHBrdC0+ZHRzID0geGUtPmJpdGIudHNbMV07DQo+ICsgICAgICAgICAgICAg ICAgDQo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlBUUzog JWxkIHwgRFRTOiAlbGRcbiIsIHBrdC0+cHRzLCBwa3QtPmR0cyk7DQo+ICsNCj4gKyAgICAgICAg ICAgICAgICB4ZS0+Yml0cmF0ZSArPSAoeGUtPnN0YXQud3JpdGUgLSB4ZS0+c3RhdC5zZWlfc2l6 ZSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICBzd2l0Y2goeGUtPnN0YXQuc3R5cGUpIHsNCj4g KyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfSToNCj4gKyAgICAgICAgICAgICAgICAgICAg YXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfSTsNCj4gKyAgICAgICAgICAgICAgICAgICAg cGt0LT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVk7DQo+ICsgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiArICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9QOg0KPiArICAgICAgICAgICAg ICAgICAgICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9QOw0KPiArICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfQjoNCj4gKyAg ICAgICAgICAgICAgICAgICAgYXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfQjsNCj4gKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NU X1VOS05PV046DQo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJ1bmtub3duIHNsaWNlIHR5cGVcbiIpOw0KPiArICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7DQo+ICsgICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiT1VUUFVUIHwgRW5jb2RlZCB8IHNsaWNlIHR5cGU6ICVz IHwgZm51bTogJWxkIHwgcG9jOiAlZCB8IEJ5dGVzIHdyaXR0ZW46ICAlZCB8IGJ5dGVzIHRvdGFs OiAlZiB8IHRpbWVzdGFtcHMgfCAlbGxkIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHxcbiIsIA0KPiAr ICAgICAgICAgICAgICAgICAgICBzbGljZV90eXBlKGF2X3BpY190eXBlKSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgeGUtPnN0YXQuZm51bSwNCj4gKyAgICAgICAgICAgICAgICAgICAgeGUtPnN0 YXQucG9jLA0KPiArICAgICAgICAgICAgICAgICAgICB4ZS0+c3RhdC53cml0ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgeGUtPmJ5dGVzX3RvdGFsLA0KPiArICAgICAgICAgICAgICAgICAgICB4 ZS0+Yml0Yi50c1swXSwNCj4gKyAgICAgICAgICAgICAgICAgICAgeGUtPmJpdGIudHNbMV0sDQo+ ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzJdLA0KPiArICAgICAgICAgICAgICAg ICAgICB4ZS0+Yml0Yi50c1szXSk7DQo+ICsgICAgICAgICAgICAgICAgICAgIA0KPiArICAgICAg ICAgICAgICAgIGZmX3NpZGVfZGF0YV9zZXRfZW5jb2Rlcl9zdGF0cyhwa3QsIHhlLT5zdGF0LnFw KkZGX1FQMkxBTUJEQSwgTlVMTCwgMCwgYXZfcGljX3R5cGUpOw0KPiArICAgICAgICAgICAgICAg IA0KPiArICAgICAgICAgICAgICAgIHhlLT5iaXRyYXRlICs9ICh4ZS0+c3RhdC53cml0ZSAtIHhl LT5zdGF0LnNlaV9zaXplKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICpnb3RfcGFja2V0ID0g MTsNCj4gKyAgICAgICAgICAgICAgICB4ZS0+cGFja2V0X2NvdW50Kys7DQo+ICsgICAgICAgICAg ICB9DQo+ICsgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IFhFVkVfT0tfTk9fTU9SRV9GUk0pIHsN Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiUmV0dXJuIE9LIGJ1dCBu byBtb3JlIGZyYW1lcyAoJWQpXG4iLCByZXQpOw0KPiArICAgICAgICAgICAgcmV0dXJuIDA7DQo+ ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVC VUcsICJJbnZhbGlkIHJldHVybiB2YWx1ZSAoJWQpXG4iLCByZXQpOw0KPiArICAgICAgICAgICAg cmV0dXJuIC0xOw0KPiArICAgICAgICB9DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlVkZWZpbmVkIHN0YXRlOiAlZFxuIiwgeGUtPnN0YXRl KTsNCj4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBEZXN0cm95IGVuY29kZXIgYW5kIHJlbGVhc2UgYWxsIHRo ZSBhbGxvY2F0ZWQgcmVzb3VyY2VzDQo+ICsgKg0KPiArICogQHBhcmFtIGN0eCBjb2RlYyBjb250 ZXh0DQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBm YWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZlX2Nsb3NlKEFWQ29k ZWNDb250ZXh0ICpjdHgpDQo+ICt7DQo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gY3R4LT5wcml2 X2RhdGE7DQo+ICsNCj4gKyAgICB4ZXZlX2RlbGV0ZSh4ZS0+aWQpOw0KPiArDQo+ICsgICAgaWYo eGUtPmJpdGIuYWRkcikgZnJlZSh4ZS0+Yml0Yi5hZGRyKTsgLyogcmVsZWFzZSBiaXRzdHJlYW0g YnVmZmVyICovDQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArI2RlZmluZSBP RkZTRVQoeCkgb2Zmc2V0b2YoWGV2ZUNvbnRleHQsIHgpDQo+ICsjZGVmaW5lIFZFIEFWX09QVF9G TEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0NCj4gKw0KPiArLy8g RXhhbXBsZSBvZiB1c2luZzogLi9mZm1wZWcgLXhldmUtcGFyYW1zICJtPTI6cT0xNyINCj4gKy8v IENvbnNpZGVyIHVzaW5nIGZvbGxvd2luZyBvcHRpb25zICguL2ZmbXBlZyAtLWhlbHAgZW5jb2Rl cj1saWJ4ZXZlKQ0KPiArLy8NCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB4ZXZlX29wdGlvbnNb XSA9IHsNCj4gKyAgICB7ICJwcmVzZXQiLCAiRW5jb2RpbmcgcHJlc2V0IGZvciBzZXR0aW5nIGVu Y29kaW5nIHNwZWVkIFtmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm9dIiwgT0ZGU0VUKG9wX3By ZXNldCksIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gIm1lZGl1bSIgfSwgMCwgMCwgVkUg fSwNCj4gKyAgICB7ICJ0dW5lIiwgIlR1bmVpbmcgcGFyYW1ldGVyIGZvciBzcGVjaWFsIHB1cnBv c2Ugb3BlcmF0aW9uIFtwc25yLCB6ZXJvbGF0ZW5jeV0iLCBPRkZTRVQob3BfdHVuZSksIEFWX09Q VF9UWVBFX1NUUklORywgeyAwIH0sIDAsIDAsIFZFfSwNCj4gKyAgICB7ICJxcCIsICJxdWFudGl6 YXRpb24gcGFyYW1ldGVyIHFwIDwwLi41MT4gW2RlZmF1bHQ6IDMyXSIsIE9GRlNFVChvcF9xcCks IEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMzIgfSwgMCwgNTEsIFZFIH0sDQo+ICsgICAgeyAi Y3JmIiwgImNvbnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+IFtkZWZhdWx0OiAzMl0iLCBPRkZT RVQob3BfY3JmKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAtMSB9LCAtMSwgNTEsIFZFIH0s DQo+ICsgICAgeyAieGV2ZS1wYXJhbXMiLCAib3ZlcnJpZGUgdGhlIHhldmUgY29uZmlndXJhdGlv biB1c2luZyBhIDotc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMiLCBPRkZT RVQoeGV2ZV9wYXJhbXMpLCBBVl9PUFRfVFlQRV9ESUNULCAgIHsgMCB9LCAwLCAwLCBWRSB9LA0K PiArICAgIHsgTlVMTCB9DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZl X2NsYXNzID0gew0KPiArICAgIC5jbGFzc19uYW1lID0gImxpYnhldmUiLA0KPiArICAgIC5pdGVt X25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsDQo+ICsgICAgLm9wdGlvbiAgICAgPSB4ZXZl X29wdGlvbnMsDQo+ICsgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsDQo+ ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqICBsaWJhdmNvZGVjIGdlbmVyaWMgZ2xvYmFsIG9wdGlv bnMsIHdoaWNoIGNhbiBiZSBzZXQgb24gYWxsIHRoZSBlbmNvZGVycyBhbmQgZGVjb2RlcnMNCj4g KyAqICBAc2VlIGh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvZmZtcGVnLWNvZGVjcy5odG1sI0NvZGVj LU9wdGlvbnMNCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IEFWQ29kZWNEZWZhdWx0IHhldmVfZGVm YXVsdHNbXSA9IHsNCj4gKyAgICB7ICJiIiwgIjAiIH0sICAgICAgIC8vIGJpdHJhdGUNCj4gKyAg ICB7ICJnIiwgIjAiIH0sICAgICAgIC8vIGdvcF9zaXplIChrZXktZnJhbWUgaW50ZXJ2YWwgMDog b25seSBvbmUgSS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29k ZWQgaW4gSS1mcmFtZSkNCj4gKyAgICB7ICJiZiIsICIxNSJ9LCAgICAgIC8vIGJmcmFtZXMgKDA6 IG5vIEItZnJhbWVzKQ0KPiArICAgIHsgInByb2ZpbGUiLCAiMCJ9LCAgLy8gZW5jb2RlciBjb2Rl YyBwcm9maWxlICgwOiBiYXNlbGllOyAxOiBtYWluKQ0KPiArICAgIHsgInRocmVhZHMiLCAiMCJ9 LCAgLy8gbnVtYmVyIG9mIHRocmVhZHMgdG8gYmUgdXNlZCAoMDogYXV0b21hdGljYWxseSBzZWxl Y3QgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNldCkNCj4gKyAgICB7IE5VTEwgfSwNCj4gK307 DQo+ICsNCj4gK0FWQ29kZWMgZmZfbGlieGV2ZV9lbmNvZGVyID0gew0KPiArICAgIC5uYW1lICAg ICAgICAgICAgID0gImxpYnhldmUiLA0KPiArICAgIC5sb25nX25hbWUgICAgICAgID0gTlVMTF9J Rl9DT05GSUdfU01BTEwoImxpYnhldmUgTVBFRy01IEVWQyIpLA0KPiArICAgIC50eXBlICAgICAg ICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLA0KPiArICAgIC5pZCAgICAgICAgICAgICAgID0g QVZfQ09ERUNfSURfRVZDLA0KPiArICAgIC5pbml0ICAgICAgICAgICAgID0gbGlieGV2ZV9pbml0 LA0KPiArICAgIC5pbml0X3N0YXRpY19kYXRhID0gbGlieGV2ZV9pbml0X3N0YXRpY19kYXRhLA0K PiArICAgIC5lbmNvZGUyICAgICAgICAgID0gbGlieGV2ZV9lbmNvZGUsDQo+ICsgICAgLmNsb3Nl ICAgICAgICAgICAgPSBsaWJ4ZXZlX2Nsb3NlLA0KPiArICAgIC5wcml2X2RhdGFfc2l6ZSAgID0g c2l6ZW9mKFhldmVDb250ZXh0KSwNCj4gKyAgICAucHJpdl9jbGFzcyAgICAgICA9ICZ4ZXZlX2Ns YXNzLA0KPiArICAgIC5kZWZhdWx0cyAgICAgICAgID0geGV2ZV9kZWZhdWx0cywNCj4gKyAgICAu Y2FwYWJpbGl0aWVzICAgICA9IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVDX0NBUF9BVVRP X1RIUkVBRFMgfA0KPiArICAgIEFWX0NPREVDX0NBUF9FTkNPREVSX1JFT1JERVJFRF9PUEFRVUUs DQo+ICsgICAgLndyYXBwZXJfbmFtZSAgICAgPSAibGlieGV2ZSIsDQo+ICt9Ow0KPiBkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9wYXJzZXJzLmMgYi9saWJhdmNvZGVjL3BhcnNlcnMuYw0KPiBpbmRl eCA2YjQwYzE4ZDgwLi4yOTVmYTMzZjUyIDEwMDY0NA0KPiAtLS0gYS9saWJhdmNvZGVjL3BhcnNl cnMuYw0KPiArKysgYi9saWJhdmNvZGVjL3BhcnNlcnMuYw0KPiBAQCAtNzMsNiArNzMsNyBAQCBl eHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl92cDlfcGFyc2VyOw0KPiAgZXh0ZXJuIGNvbnN0 IEFWQ29kZWNQYXJzZXIgZmZfd2VicF9wYXJzZXI7DQo+ICBleHRlcm4gY29uc3QgQVZDb2RlY1Bh cnNlciBmZl94Ym1fcGFyc2VyOw0KPiAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfeG1h X3BhcnNlcjsNCj4gK2V4dGVybiBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2V2Y19wYXJzZXI7DQoN CmFscGhhYmV0aWNhbCBvcmRlcg0KDQpET05FDQoNCj4gIA0KPiAgI2luY2x1ZGUgImxpYmF2Y29k ZWMvcGFyc2VyX2xpc3QuYyINCj4gIA0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9wcm9maWxl cy5jIGIvbGliYXZjb2RlYy9wcm9maWxlcy5jDQo+IGluZGV4IDdhZjdmYmViMTMuLmEzMTI0NGUw ZGIgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvcHJvZmlsZXMuYw0KPiArKysgYi9saWJhdmNv ZGVjL3Byb2ZpbGVzLmMNCj4gQEAgLTE4MSw0ICsxODEsMTAgQEAgY29uc3QgQVZQcm9maWxlIGZm X2FyaWJfY2FwdGlvbl9wcm9maWxlc1tdID0gew0KPiAgICAgIHsgRkZfUFJPRklMRV9VTktOT1dO IH0NCj4gIH07DQo+ICANCj4gK2NvbnN0IEFWUHJvZmlsZSBmZl9ldmNfcHJvZmlsZXNbXSA9IHsN Cj4gKyAgICB7IEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5FLCAgICAgICAgICAgICAiQmFzZWxpbmUi ICAgICAgICAgICAgICB9LA0KPiArICAgIHsgRkZfUFJPRklMRV9FVkNfTUFJTiwgICAgICAgICAg ICAgICAgICJNYWluIiAgICAgICAgICAgICAgICAgIH0sDQo+ICsgICAgeyBGRl9QUk9GSUxFX1VO S05PV04gfSwNCj4gK307DQo+ICsNCj4gICNlbmRpZiAvKiAhQ09ORklHX1NNQUxMICovDQo+IGRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL3Byb2ZpbGVzLmggYi9saWJhdmNvZGVjL3Byb2ZpbGVzLmgN Cj4gaW5kZXggNDFhMTlhYTlhZC4uY2Y5MmI1ZjEyNiAxMDA2NDQNCj4gLS0tIGEvbGliYXZjb2Rl Yy9wcm9maWxlcy5oDQo+ICsrKyBiL2xpYmF2Y29kZWMvcHJvZmlsZXMuaA0KPiBAQCAtNzIsNSAr NzIsNiBAQCBleHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX3NiY19wcm9maWxlc1tdOw0KPiAgZXh0 ZXJuIGNvbnN0IEFWUHJvZmlsZSBmZl9wcm9yZXNfcHJvZmlsZXNbXTsNCj4gIGV4dGVybiBjb25z dCBBVlByb2ZpbGUgZmZfbWpwZWdfcHJvZmlsZXNbXTsNCj4gIGV4dGVybiBjb25zdCBBVlByb2Zp bGUgZmZfYXJpYl9jYXB0aW9uX3Byb2ZpbGVzW107DQo+ICtleHRlcm4gY29uc3QgQVZQcm9maWxl IGZmX2V2Y19wcm9maWxlc1tdOw0KPiAgDQo+ICAjZW5kaWYgLyogQVZDT0RFQ19QUk9GSUxFU19I ICovDQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZlcnNpb24uaCBiL2xpYmF2Y29kZWMvdmVy c2lvbi5oDQo+IGluZGV4IDRkNzc0MzE4NDIuLmZiMWEwZmVlYzYgMTAwNjQ0DQo+IC0tLSBhL2xp YmF2Y29kZWMvdmVyc2lvbi5oDQo+ICsrKyBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oDQo+IEBAIC0y OCw3ICsyOCw3IEBADQo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCINCj4gIA0KPiAg I2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUFKT1IgIDU5DQo+IC0jZGVmaW5lIExJQkFWQ09E RUNfVkVSU0lPTl9NSU5PUiAgMTgNCj4gKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9S ICAxOQ0KPiAgI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlDUk8gMTAwDQo+ICANCj4gICNk ZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RFQ19W RVJTSU9OX01BSk9SLCBcDQo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xp YmF2Zm9ybWF0L01ha2VmaWxlDQo+IGluZGV4IDg0ZTczZTNjNjMuLmRiNDYxZTc5YjcgMTAwNjQ0 DQo+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlDQo+ICsrKyBiL2xpYmF2Zm9ybWF0L01ha2Vm aWxlDQo+IEBAIC0yNDEsNiArMjQxLDggQEAgT0JKUy0kKENPTkZJR19IQ09NX0RFTVVYRVIpICAg ICAgICAgICAgICArPSBoY29tLm8gcGNtLm8NCj4gIE9CSlMtJChDT05GSUdfSERTX01VWEVSKSAg ICAgICAgICAgICAgICAgKz0gaGRzZW5jLm8NCj4gIE9CSlMtJChDT05GSUdfSEVWQ19ERU1VWEVS KSAgICAgICAgICAgICAgKz0gaGV2Y2RlYy5vIHJhd2RlYy5vDQo+ICBPQkpTLSQoQ09ORklHX0hF VkNfTVVYRVIpICAgICAgICAgICAgICAgICs9IHJhd2VuYy5vDQo+ICtPQkpTLSQoQ09ORklHX0VW Q19ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGV2Y2RlYy5vIHJhd2RlYy5vDQo+ICtPQkpTLSQo Q09ORklHX0VWQ19NVVhFUikgICAgICAgICAgICAgICAgICs9IHJhd2VuYy5vDQo+ICBPQkpTLSQo Q09ORklHX0hMU19ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGhscy5vIGhsc19zYW1wbGVfZW5j cnlwdGlvbi5vDQo+ICBPQkpTLSQoQ09ORklHX0hMU19NVVhFUikgICAgICAgICAgICAgICAgICs9 IGhsc2VuYy5vIGhsc3BsYXlsaXN0Lm8gYXZjLm8NCj4gIE9CSlMtJChDT05GSUdfSE5NX0RFTVVY RVIpICAgICAgICAgICAgICAgKz0gaG5tLm8NCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2Fs bGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYw0KPiBpbmRleCBkMDY2YTc3NDVi Li4xMTQ4MDI0ZTcxIDEwMDY0NA0KPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMNCj4g KysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jDQo+IEBAIC0xNDUsNiArMTQ1LDggQEAgZXh0 ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7DQo+ICBleHRlcm4g Y29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFjM19kZW11eGVyOw0KPiAgZXh0ZXJuIGNvbnN0IEFW T3V0cHV0Rm9ybWF0IGZmX2VhYzNfbXV4ZXI7DQo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1h dCAgZmZfZXBhZl9kZW11eGVyOw0KPiArZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2V2 Y19kZW11eGVyOw0KPiArZXh0ZXJuIGNvbnN0IEFWT3V0cHV0Rm9ybWF0IGZmX2V2Y19tdXhlcjsN Cj4gIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9mNHZfbXV4ZXI7DQo+ICBleHRlcm4g Y29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZmZtZXRhZGF0YV9kZW11eGVyOw0KPiAgZXh0ZXJuIGNv bnN0IEFWT3V0cHV0Rm9ybWF0IGZmX2ZmbWV0YWRhdGFfbXV4ZXI7DQo+IGRpZmYgLS1naXQgYS9s aWJhdmZvcm1hdC9ldmNkZWMuYyBiL2xpYmF2Zm9ybWF0L2V2Y2RlYy5jDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmRkOTEwMmNkZDQNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9saWJhdmZvcm1hdC9ldmNkZWMuYw0KPiBAQCAtMCwwICsxLDEzNiBAQA0KPiAr LyoNCj4gKyAqIFJBVyBFVkMgdmlkZW8gZGVtdXhlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAo YykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCj4gKyAqDQo+ ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQo+ICsgKg0KPiArICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0K PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyDQo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gKyAqDQo+ICsgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQ0KPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCj4gKyAqDQo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ICsgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvZ2V0 X2JpdHMuaCINCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dvbG9tYi5oIg0KPiArI2luY2x1ZGUg ImF2Zm9ybWF0LmgiDQo+ICsjaW5jbHVkZSAicmF3ZGVjLmgiDQo+ICsjaW5jbHVkZSAibGliYXZj b2RlYy9pbnRlcm5hbC5oIg0KPiArI2luY2x1ZGUgInhldmQuaCINCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3QgRVZDUGFyc2VyQ29udGV4dCB7DQo+ICsgICAgaW50IGdvdF9zcHM7DQo+ICsgICAgaW50 IGdvdF9wcHM7DQo+ICsgICAgaW50IGdvdF9pZHI7DQo+ICsgICAgaW50IGdvdF9ub25pZHI7DQo+ ICt9IEVWQ1BhcnNlckNvbnRleHQ7DQo+ICsNCj4gK3N0YXRpYyBpbnQgZ2V0X25hbHVfdHlwZShj b25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUpDQo+ICt7DQo+ICsgICAgR2V0Qml0Q29udGV4 dCBnYjsNCj4gKyAgICBpbnQgZnpiLCBudXQ7DQo+ICsgICAgaW5pdF9nZXRfYml0cygmZ2IsIGJz LCBic19zaXplICogOCk7DQo+ICsgICAgZnpiID0gZ2V0X2JpdHMxKCZnYik7DQo+ICsgICAgaWYo ZnpiICE9IDApIHsNCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImZvcmJp ZGRlbl96ZXJvX2JpdCBpcyBub3QgY2xlYXJcbiIpOw0KPiArICAgIH0NCj4gKyAgICBudXQgPSBn ZXRfYml0cygmZ2IsIDYpOyAvKiBuYWxfdW5pdF90eXBlX3BsdXMxICovDQo+ICsgICAgcmV0dXJu IG51dCAtIDE7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogUmVhZCBOQUwgdW5pdCBsZW5ndGgN Cj4gKyAqIEBwYXJhbSBicyBpbnB1dCBkYXRhIChiaXRzdHJlYW0pDQo+ICsgKiBAcmV0dXJuIHRo ZSBsZW5naHRoIG9mIE5BTCB1bml0IG9uIHN1Y2Nlc3MsIDAgdmFsdWUgb24gZmFpbHVyZQ0KPiAr ICovDQo+ICtzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5pdF9sZW5ndGgoY29uc3QgdWludDhf dCAqYnMsIGludCBic19zaXplKQ0KPiArew0KPiArICAgIHVpbnQzMl90IGxlbiA9IDA7DQo+ICsg ICAgWEVWRF9JTkZPIGluZm87DQo+ICsgICAgaW50IHJldDsNCj4gKw0KPiArICAgIGlmKGJzX3Np emU+PVhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsNCj4gKyAgICAgICAgcmV0ID0geGV2ZF9p bmZvKCh2b2lkKilicywgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSwgMSwgJmluZm8pOw0KPiAr ICAgICAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KPiArICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0aW9uXG4iKTsN Cj4gKyAgICAgICAgICAgIHJldHVybiAwOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGxlbiA9 IGluZm8ubmFsdV9sZW47DQo+ICsgICAgICAgIGlmKGxlbiA9PSAwKQ0KPiArICAgICAgICB7DQo+ ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJl YW0gc2l6ZSEgWyVkXVxuIiwgYnNfc2l6ZSk7DQo+ICsgICAgICAgICAgICByZXR1cm4gMDsNCj4g KyAgICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICByZXR1cm4gbGVuOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IHBhcnNlX25hbF91bml0cyhjb25zdCBBVlByb2JlRGF0YSAqcCwgRVZDUGFyc2Vy Q29udGV4dCAqZXYpDQo+ICt7DQo+ICsgICAgaW50IG5hbHVfdHlwZTsNCj4gKyAgICBzaXplX3Qg bmFsdV9zaXplOw0KPiArICAgIHVuc2lnbmVkIGNoYXIqIGJpdHMgPSAodW5zaWduZWQgY2hhciAq KXAtPmJ1ZjsNCj4gKyAgICBpbnQgYnl0ZXNfdG9fcmVhZCA9IHAtPmJ1Zl9zaXplOw0KPiArICAg IA0KPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJieXRlc190b19yZWFkOiAlZCBc biIsIGJ5dGVzX3RvX3JlYWQpOw0KPiArDQo+ICsgICAgd2hpbGUoYnl0ZXNfdG9fcmVhZCA+IFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsNCj4gKyAgICANCj4gKyAgICAgICAgbmFsdV9zaXpl ID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgoYml0cywgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSk7 DQo+ICsgICAgICAgIGlmKG5hbHVfc2l6ZSA9PSAwKSBicmVhazsNCj4gKw0KPiArICAgICAgICBi aXRzICs9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQo+ICsgICAgICAgIGJ5dGVzX3RvX3Jl YWQgLT0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsNCj4gKw0KPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0RFQlVHLCAibmFsdV9zaXplOiAlbGQgXG4iLCBuYWx1X3NpemUpOw0KPiAr DQo+ICsgICAgICAgIGlmKGJ5dGVzX3RvX3JlYWQgPCBuYWx1X3NpemUpIGJyZWFrOw0KPiArDQo+ ICsgICAgICAgIG5hbHVfdHlwZSA9IGdldF9uYWx1X3R5cGUoYml0cywgYnl0ZXNfdG9fcmVhZCk7 DQo+ICsNCj4gKyAgICAgICAgYml0cyArPSBuYWx1X3NpemU7DQo+ICsgICAgICAgIGJ5dGVzX3Rv X3JlYWQgLT0gbmFsdV9zaXplOw0KPiArDQo+ICsgICAgICAgIGlmIChuYWx1X3R5cGUgPT0gWEVW RF9OVVRfU1BTKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi WEVWRF9OVVRfU1BTIFxuIik7DQo+ICsgICAgICAgICAgICBldi0+Z290X3NwcysrOw0KPiArICAg ICAgICB9DQo+ICsgICAgICAgIGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBYRVZEX05VVF9QUFMpIHsN Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9QUFMg XG4iKTsNCj4gKyAgICAgICAgICAgIGV2LT5nb3RfcHBzKys7DQo+ICsgICAgICAgIH0NCj4gKyAg ICAgICAgZWxzZSBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX0lEUiApIHsNCj4gKyAgICAgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9JRFJcbiIpOw0KPiArICAg ICAgICAgICAgZXYtPmdvdF9pZHIrKzsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBlbHNlIGlm IChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfTk9OSURSKSB7DQo+ICsgICAgICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9OVVRfTk9OSURSXG4iKTsNCj4gKyAgICAgICAgICAg IGV2LT5nb3Rfbm9uaWRyKys7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZXZjX3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRh ICpwKQ0KPiArew0KPiArICAgIEVWQ1BhcnNlckNvbnRleHQgZXYgPSB7fTsNCj4gKyAgICBpbnQg cmV0ID0gcGFyc2VfbmFsX3VuaXRzKHAsICZldik7DQo+ICsNCj4gKyAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0RFQlVHLCAic3BzOiVkIHBwczolZCBpZHI6JWQgc2xpOiVkXG4iLCBldi5nb3Rfc3Bz LCBldi5nb3RfcHBzLCBldi5nb3RfaWRyLCBldi5nb3Rfbm9uaWRyKTsNCj4gKyAgICANCj4gKyAg ICBpZiAocmV0ID09IDAgJiYgZXYuZ290X3NwcyAmJiBldi5nb3RfcHBzICYmIChldi5nb3RfaWRy IHx8IGV2LmdvdF9ub25pZHIgPiAzKSkgDQo+ICsgICAgICAgIHJldHVybiBBVlBST0JFX1NDT1JF X0VYVEVOU0lPTiArIDE7ICAvLyAxIG1vcmUgdGhhbiAubXBnDQo+ICsNCj4gKyAgICByZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArRkZfREVGX1JBV1ZJREVPX0RFTVVYRVIoZXZjLCAicmF3IEVWQyB2 aWRlbyIsIGV2Y19wcm9iZSwgImV2YyIsIEFWX0NPREVDX0lEX0VWQykNCj4gZGlmZiAtLWdpdCBh L2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jIGIvbGliYXZmb3JtYXQvaXNvbV90YWdzLmMNCj4gaW5k ZXggNjJlNjA0NzBhOC4uMDI0NWNmYjk5OSAxMDA2NDQNCj4gLS0tIGEvbGliYXZmb3JtYXQvaXNv bV90YWdzLmMNCj4gKysrIGIvbGliYXZmb3JtYXQvaXNvbV90YWdzLmMNCj4gQEAgLTE0NSw2ICsx NDUsOCBAQCBjb25zdCBBVkNvZGVjVGFnIGZmX2NvZGVjX21vdnZpZGVvX3RhZ3NbXSA9IHsNCj4g ICAgICB7IEFWX0NPREVDX0lEX0gyNjQsIE1LVEFHKCdkJywgJ3YnLCAnYScsICcxJykgfSwgLyog QVZDLWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20gYXZjMSAqLw0KPiAgICAgIHsgQVZf Q09ERUNfSURfSDI2NCwgTUtUQUcoJ2QnLCAndicsICdhJywgJ3YnKSB9LCAvKiBBVkMtYmFzZWQg RG9sYnkgVmlzaW9uIGRlcml2ZWQgZnJvbSBhdmMzICovDQo+ICANCj4gKyAgICB7IEFWX0NPREVD X0lEX0VWQywgIE1LVEFHKCdlJywgJ3YnLCAnYycsICcxJykgfSwgLyogRVZDL01QRUctNSAqLw0K PiArDQo+ICAgICAgeyBBVl9DT0RFQ19JRF9WUDgsICBNS1RBRygndicsICdwJywgJzAnLCAnOCcp IH0sIC8qIFZQOCAqLw0KPiAgICAgIHsgQVZfQ09ERUNfSURfVlA5LCAgTUtUQUcoJ3YnLCAncCcs ICcwJywgJzknKSB9LCAvKiBWUDkgKi8NCj4gICAgICB7IEFWX0NPREVDX0lEX0FWMSwgIE1LVEFH KCdhJywgJ3YnLCAnMCcsICcxJykgfSwgLyogQVYxICovDQo+IGRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9tb3YuYyBiL2xpYmF2Zm9ybWF0L21vdi5jDQo+IGluZGV4IDZmYjA5ZGY3ZTEuLmU4Mzg3 MmZiZTIgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Zm9ybWF0L21vdi5jDQo+ICsrKyBiL2xpYmF2Zm9y bWF0L21vdi5jDQo+IEBAIC04NTY4LDcgKzg1NjgsNyBAQCBjb25zdCBBVklucHV0Rm9ybWF0IGZm X21vdl9kZW11eGVyID0gew0KPiAgICAgIC5sb25nX25hbWUgICAgICA9IE5VTExfSUZfQ09ORklH X1NNQUxMKCJRdWlja1RpbWUgLyBNT1YiKSwNCj4gICAgICAucHJpdl9jbGFzcyAgICAgPSAmbW92 X2NsYXNzLA0KPiAgICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihNT1ZDb250ZXh0KSwNCj4g LSAgICAuZXh0ZW5zaW9ucyAgICAgPSAibW92LG1wNCxtNGEsM2dwLDNnMixtajIscHNwLG00Yixp c20saXNtdixpc21hLGY0diIsDQo+ICsgICAgLmV4dGVuc2lvbnMgICAgID0gIm1vdixtcDQsbTRh LDNncCwzZzIsbWoyLHBzcCxtNGIsaXNtLGlzbXYsaXNtYSxmNHYsZXZjIiwNCj4gICAgICAuZmxh Z3NfaW50ZXJuYWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLA0KPiAgICAgIC5yZWFkX3Byb2JlICAg ICA9IG1vdl9wcm9iZSwNCj4gICAgICAucmVhZF9oZWFkZXIgICAgPSBtb3ZfcmVhZF9oZWFkZXIs DQo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3ZlbmMuYyBiL2xpYmF2Zm9ybWF0L21vdmVu Yy5jDQo+IGluZGV4IDRjODY4OTE5YWUuLjMwZTUwMzdmMDYgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2 Zm9ybWF0L21vdmVuYy5jDQo+ICsrKyBiL2xpYmF2Zm9ybWF0L21vdmVuYy5jDQo+IEBAIC0xMzQy LDYgKzEzNDIsMTYgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfaHZjY190YWcoQVZJT0NvbnRleHQg KnBiLCBNT1ZUcmFjayAqdHJhY2spDQo+ICAgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBwb3Mp Ow0KPiAgfQ0KPiAgDQo+ICtzdGF0aWMgaW50IG1vdl93cml0ZV9ldmNjX3RhZyhBVklPQ29udGV4 dCAqcGIsIE1PVlRyYWNrICp0cmFjaykNCj4gK3sNCj4gKyAgICBpbnQ2NF90IHBvcyA9IGF2aW9f dGVsbChwYik7DQo+ICsNCj4gKyAgICBhdmlvX3diMzIocGIsIDApOw0KPiArICAgIGZmaW9fd2Zv dXJjYyhwYiwgImV2Y0MiKTsNCj4gKyAgICBmZl9pc29tX3dyaXRlX2F2Y2MocGIsIHRyYWNrLT52 b3NfZGF0YSwgdHJhY2stPnZvc19sZW4pOw0KPiArICAgIHJldHVybiB1cGRhdGVfc2l6ZShwYiwg cG9zKTsNCj4gK30NCj4gKw0KPiAgLyogYWxzbyB1c2VkIGJ5IGFsbCBhdmlkIGNvZGVjcyAoZHYs IGlteCwgbWVyaWRpZW4pIGFuZCB0aGVpciB2YXJpYW50cyAqLw0KPiAgc3RhdGljIGludCBtb3Zf d3JpdGVfYXZpZF90YWcoQVZJT0NvbnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spDQo+ICB7DQo+ IEBAIC0xNTkxLDYgKzE2MDEsMTkgQEAgc3RhdGljIGludCBtb3ZfZ2V0X2gyNjRfY29kZWNfdGFn KEFWRm9ybWF0Q29udGV4dCAqcywgTU9WVHJhY2sgKnRyYWNrKQ0KPiAgICAgIHJldHVybiB0YWc7 DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBpbnQgbW92X2dldF9ldmNfY29kZWNfdGFnKEFWRm9ybWF0 Q29udGV4dCAqcywgTU9WVHJhY2sgKnRyYWNrKQ0KPiArew0KPiArICAgIGludCB0YWcgPSB0cmFj ay0+cGFyLT5jb2RlY190YWc7DQo+ICsgICAgaW50IGludGVybGFjZWQgPSB0cmFjay0+cGFyLT5m aWVsZF9vcmRlciA+IEFWX0ZJRUxEX1BST0dSRVNTSVZFOw0KPiArICAgIEFWU3RyZWFtICpzdCA9 IHRyYWNrLT5zdDsNCj4gKyAgICBpbnQgcmF0ZSA9IGRlZmluZWRfZnJhbWVfcmF0ZShzLCBzdCk7 DQo+ICsNCj4gKyAgICBpZiAoIXRhZykNCj4gKyAgICAgICAgdGFnID0gTUtUQUcoJ2UnLCAndics ICdjJywgJ2knKTsgLy9mYWxsYmFjayB0YWcNCj4gKw0KPiArICAgIHJldHVybiB0YWc7DQo+ICt9 DQo+ICsNCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KPiAgICAgIGVudW0gQVZQaXhlbEZvcm1h dCBwaXhfZm10Ow0KPiAgICAgIHVpbnQzMl90IHRhZzsNCj4gQEAgLTE2NzIsNiArMTY5NSw4IEBA IHN0YXRpYyB1bnNpZ25lZCBpbnQgbW92X2dldF9jb2RlY190YWcoQVZGb3JtYXRDb250ZXh0ICpz LCBNT1ZUcmFjayAqdHJhY2spDQo+ICAgICAgICAgICAgICB0YWcgPSBtb3ZfZ2V0X21wZWcyX3hk Y2FtX2NvZGVjX3RhZyhzLCB0cmFjayk7DQo+ICAgICAgICAgIGVsc2UgaWYgKHRyYWNrLT5wYXIt PmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQpDQo+ICAgICAgICAgICAgICB0YWcgPSBtb3Zf Z2V0X2gyNjRfY29kZWNfdGFnKHMsIHRyYWNrKTsNCj4gKyAgICAgICAgZWxzZSBpZiAodHJhY2st PnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDKQ0KPiArICAgICAgICAgICAgdGFnID0g bW92X2dldF9ldmNfY29kZWNfdGFnKHMsIHRyYWNrKTsgICAgDQo+ICAgICAgICAgIGVsc2UgaWYg KHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0ROWEhEKQ0KPiAgICAgICAgICAg ICAgdGFnID0gbW92X2dldF9kbnhoZF9jb2RlY190YWcocywgdHJhY2spOw0KPiAgICAgICAgICBl bHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykgew0K PiBAQCAtMjIwOCw2ICsyMjMzLDkgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfdmlkZW9fdGFnKEFW Rm9ybWF0Q29udGV4dCAqcywgQVZJT0NvbnRleHQgKnBiLCBNT1ZNdXhDb250ZXgNCj4gICAgICAg ICAgbW92X3dyaXRlX2F2Y2NfdGFnKHBiLCB0cmFjayk7DQo+ICAgICAgICAgIGlmICh0cmFjay0+ bW9kZSA9PSBNT0RFX0lQT0QpDQo+ICAgICAgICAgICAgICBtb3Zfd3JpdGVfdXVpZF90YWdfaXBv ZChwYik7DQo+ICsgICAgfQ0KPiArICAgIGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09 QVZfQ09ERUNfSURfRVZDKSB7DQo+ICsgICAgICAgIG1vdl93cml0ZV9ldmNjX3RhZyhwYiwgdHJh Y2spOyAgICAgICAgDQo+ICAgICAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBB Vl9DT0RFQ19JRF9WUDkpIHsNCj4gICAgICAgICAgbW92X3dyaXRlX3ZwY2NfdGFnKG1vdi0+ZmMs IHBiLCB0cmFjayk7DQo+ICAgICAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBB Vl9DT0RFQ19JRF9BVjEpIHsNCj4gQEAgLTU3MzcsNiArNTc2NSw3IEBAIGludCBmZl9tb3Zfd3Jp dGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkNCj4gICAgICBpZiAo KHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRE5YSEQgfHwNCj4gICAgICAgICAgIHBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCB8fA0KPiAgICAgICAgICAgcGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9IRVZDIHx8DQo+ICsgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFW X0NPREVDX0lEX0VWQyB8fA0KPiAgICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9UUlVFSEQgfHwNCj4gICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQUMz KSAmJiAhdHJrLT52b3NfbGVuICYmDQo+ICAgICAgICAgICAhVEFHX0lTX0FWQ0kodHJrLT50YWcp KSB7DQo+IEBAIC03MzExLDYgKzczNDAsNyBAQCBzdGF0aWMgY29uc3QgQVZDb2RlY1RhZyBjb2Rl Y19tcDRfdGFnc1tdID0gew0KPiAgICAgIHsgQVZfQ09ERUNfSURfSDI2NCwgICAgICAgICAgICBN S1RBRygnYScsICd2JywgJ2MnLCAnMycpIH0sDQo+ICAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAg ICAgICAgICAgIE1LVEFHKCdoJywgJ2UnLCAndicsICcxJykgfSwNCj4gICAgICB7IEFWX0NPREVD X0lEX0hFVkMsICAgICAgICAgICAgTUtUQUcoJ2gnLCAndicsICdjJywgJzEnKSB9LA0KPiArICAg IHsgQVZfQ09ERUNfSURfRVZDLCAgICAgICAgICAgICBNS1RBRygnZScsICd2JywgJ2MnLCAnMScp IH0sDQo+ICAgICAgeyBBVl9DT0RFQ19JRF9NUEVHMlZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3An LCAnNCcsICd2JykgfSwNCj4gICAgICB7IEFWX0NPREVDX0lEX01QRUcxVklERU8sICAgICAgTUtU QUcoJ20nLCAncCcsICc0JywgJ3YnKSB9LA0KPiAgICAgIHsgQVZfQ09ERUNfSURfTUpQRUcsICAg ICAgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicpIH0sDQo+IGRpZmYgLS1naXQgYS9saWJh dmZvcm1hdC9yYXdlbmMuYyBiL2xpYmF2Zm9ybWF0L3Jhd2VuYy5jDQo+IGluZGV4IDRiYmFlNzcx N2IuLjMyMmFiNTgzYWIgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Zm9ybWF0L3Jhd2VuYy5jDQo+ICsr KyBiL2xpYmF2Zm9ybWF0L3Jhd2VuYy5jDQo+IEBAIC0zODYsNiArMzg2LDIwIEBAIGNvbnN0IEFW T3V0cHV0Rm9ybWF0IGZmX2hldmNfbXV4ZXIgPSB7DQo+ICB9Ow0KPiAgI2VuZGlmDQo+ICANCj4g KyNpZiBDT05GSUdfRVZDX01VWEVSDQo+ICtBVk91dHB1dEZvcm1hdCBmZl9ldmNfbXV4ZXIgPSB7 DQo+ICsgICAgLm5hbWUgICAgICAgICAgICAgID0gImV2YyIsDQo+ICsgICAgLmxvbmdfbmFtZSAg ICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoInJhdyBFVkMgdmlkZW8iKSwNCj4gKyAgICAu ZXh0ZW5zaW9ucyAgICAgICAgPSAiZXZjIiwNCj4gKyAgICAuYXVkaW9fY29kZWMgICAgICAgPSBB Vl9DT0RFQ19JRF9OT05FLA0KPiArICAgIC52aWRlb19jb2RlYyAgICAgICA9IEFWX0NPREVDX0lE X0VWQywNCj4gKyAgICAud3JpdGVfaGVhZGVyICAgICAgPSBmb3JjZV9vbmVfc3RyZWFtLA0KPiAr ICAgIC53cml0ZV9wYWNrZXQgICAgICA9IGZmX3Jhd193cml0ZV9wYWNrZXQsDQo+ICsgICAgLmZs YWdzICAgICAgICAgICAgID0gQVZGTVRfTk9USU1FU1RBTVBTLA0KPiArfTsNCj4gKyNlbmRpZg0K PiArDQo+ICsNCj4gICNpZiBDT05GSUdfTTRWX01VWEVSDQo+ICBjb25zdCBBVk91dHB1dEZvcm1h dCBmZl9tNHZfbXV4ZXIgPSB7DQo+ICAgICAgLm5hbWUgICAgICAgICAgICAgID0gIm00diIsDQoN Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpmZm1wZWct ZGV2ZWwgbWFpbGluZyBsaXN0DQpmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZw0KaHR0cHM6Ly9mZm1w ZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsDQoNClRvIHVuc3Vic2NyaWJlLCB2 aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbA0KZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4NCg0KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVn LWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZt cGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZt cGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K