From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8770EC43219 for ; Fri, 26 Apr 2019 07:55:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3C6F6206BA for ; Fri, 26 Apr 2019 07:55:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=topicbv.onmicrosoft.com header.i=@topicbv.onmicrosoft.com header.b="hUIhdZ9W"; dkim=pass (1024-bit key) header.d=topicbv.onmicrosoft.com header.i=@topicbv.onmicrosoft.com header.b="hUIhdZ9W" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726036AbfDZHzh (ORCPT ); Fri, 26 Apr 2019 03:55:37 -0400 Received: from mail-eopbgr130087.outbound.protection.outlook.com ([40.107.13.87]:28574 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725877AbfDZHzg (ORCPT ); Fri, 26 Apr 2019 03:55:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=topicbv.onmicrosoft.com; s=selector1-TopicProducts-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OW8mbOj7yv3dV4GPdITfXgFIaoaCTFeTOyDcBJTy94U=; b=hUIhdZ9Wy5alWf6pE4MVJBw2oM2FDZUOT8sSGRQ91Qu+HpFmtvdkPwe15c5xN0X3S1qK83QFhyodon4qXME5mpvvvoa5oXAhVAMvqVOblIIoB4BsqGpr3UIS3MvfRXTCc0hRfIukhzJm6ppr/zd38X9m3t+szykY4SwgYJxEEcw= Received: from VI1PR04CA0115.eurprd04.prod.outlook.com (2603:10a6:803:f0::13) by HE1PR0401MB2619.eurprd04.prod.outlook.com (2603:10a6:3:87::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.14; Fri, 26 Apr 2019 07:53:25 +0000 Received: from HE1EUR01FT016.eop-EUR01.prod.protection.outlook.com (2a01:111:f400:7e1f::207) by VI1PR04CA0115.outlook.office365.com (2603:10a6:803:f0::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.12 via Frontend Transport; Fri, 26 Apr 2019 07:53:24 +0000 Authentication-Results: spf=pass (sender IP is 52.166.56.231) smtp.mailfrom=topicproducts.com; vger.kernel.org; dkim=pass (signature was verified) header.d=topicbv.onmicrosoft.com;vger.kernel.org; dmarc=none action=none header.from=topic.nl; Received-SPF: Pass (protection.outlook.com: domain of topicproducts.com designates 52.166.56.231 as permitted sender) receiver=protection.outlook.com; client-ip=52.166.56.231; helo=westeu11-emailsignatures-cloud.codetwo.com; Received: from westeu11-emailsignatures-cloud.codetwo.com (52.166.56.231) by HE1EUR01FT016.mail.protection.outlook.com (10.152.0.169) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.14 via Frontend Transport; Fri, 26 Apr 2019 07:53:23 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (104.47.2.57) by westeu11-emailsignatures-cloud.codetwo.com with CodeTwo SMTP Server (TLS12) via SMTP; Fri, 26 Apr 2019 07:53:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=topicbv.onmicrosoft.com; s=selector1-TopicProducts-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OW8mbOj7yv3dV4GPdITfXgFIaoaCTFeTOyDcBJTy94U=; b=hUIhdZ9Wy5alWf6pE4MVJBw2oM2FDZUOT8sSGRQ91Qu+HpFmtvdkPwe15c5xN0X3S1qK83QFhyodon4qXME5mpvvvoa5oXAhVAMvqVOblIIoB4BsqGpr3UIS3MvfRXTCc0hRfIukhzJm6ppr/zd38X9m3t+szykY4SwgYJxEEcw= Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (10.255.168.18) by AM6PR04MB5749.eurprd04.prod.outlook.com (20.179.1.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.12; Fri, 26 Apr 2019 07:53:18 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::1c08:ee1b:f6a2:ded9]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::1c08:ee1b:f6a2:ded9%4]) with mapi id 15.20.1835.010; Fri, 26 Apr 2019 07:53:18 +0000 From: Mike Looijmans To: Stephen Boyd , "devicetree@vger.kernel.org" CC: "mturquette@baylibre.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "linux-clk@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] clk: Add Si5341/Si5340 driver Thread-Topic: [PATCH] clk: Add Si5341/Si5340 driver Thread-Index: AQHU+nw3A7QYV0xsZkCsG3pZtiy2DaZNimgAgACK1oA= Date: Fri, 26 Apr 2019 07:53:18 +0000 Message-ID: <23e4c036-a50a-c255-b6f9-e2cca757d183@topic.nl> References: <20190424090038.18353-1-mike.looijmans@topic.nl> <155623538292.15276.10999401088770081919@swboyd.mtv.corp.google.com> In-Reply-To: <155623538292.15276.10999401088770081919@swboyd.mtv.corp.google.com> Accept-Language: nl-NL, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 x-clientproxiedby: AM4PR0501CA0050.eurprd05.prod.outlook.com (2603:10a6:200:68::18) To AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d9::18) Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=mike.looijmans@topicproducts.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [81.173.50.109] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 38d33495-9221-4ddf-a43f-08d6ca1c4294 X-Microsoft-Antispam-Untrusted: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600141)(711020)(4605104)(2017052603328)(7193020);SRVR:AM6PR04MB5749; X-MS-TrafficTypeDiagnostic: AM6PR04MB5749:|HE1PR0401MB2619: X-Microsoft-Antispam-PRVS: x-forefront-prvs: 001968DD50 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(376002)(136003)(366004)(346002)(39840400004)(396003)(51914003)(199004)(189003)(446003)(2906002)(76176011)(64126003)(25786009)(186003)(102836004)(4326008)(52116002)(66946007)(65826007)(36756003)(99286004)(2616005)(11346002)(42882007)(53546011)(386003)(6506007)(73956011)(66446008)(66556008)(68736007)(64756008)(44832011)(2501003)(97736004)(486006)(26005)(476003)(65806001)(65956001)(6246003)(66066001)(6436002)(30864003)(66476007)(81166006)(81156014)(8676002)(31686004)(58126008)(6116002)(3846002)(54906003)(71200400001)(74482002)(508600001)(71190400001)(14454004)(6512007)(31696002)(256004)(14444005)(5660300002)(229853002)(53946003)(53936002)(6486002)(316002)(8936002)(110136005)(7736002)(305945005)(461764006)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB5749;H:AM6PR04MB6341.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: topicproducts.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info-Original: oG4sFSCXEywBXqFTvj44rBgT/X4L7jVcrloIzowINEL39uJCHj6uxbHcOAGqSwV2gQJGo7ddJ0vYgTbD1baLdogXtawvDC/6tBY7VAc6PM6/ScxkhE/XIjQOjxKyN6aySudXX5Ft8ThT9+dt/7iwWgjKV21M/lQwcfGSibngcke6pGOrU7LXailax6ZpzL1JRTmNzrE1Sooxj5OUEOAjsDbgXlauowgd1tqU1gptK7zjHr+D4RA9KsHXobV2T2RUuQQsOKIEAPjiEwWO7M93mOwUfMwt2PrsndF7zeEip+lEZ621xrtzs7bUF467/IwFZd0a6c4KQByvB2xex/7wjsw6byC8KpF1vgnEDwcgHNEv01lktD39N3ypH96WC/jCZRPjs37cJkFqThFk+3Br5adElDfeM851d1fA7YT/HHs= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB5749 X-CodeTwo-MessageID: 20190426075321.4d71d89b-9e6c-489f-962d-3e3792e10cdd@westeu11-emailsignatures-cloud.codetwo.com X-CodeTwoProcessed: true X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: HE1EUR01FT016.eop-EUR01.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:52.166.56.231;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(376002)(346002)(396003)(39840400004)(136003)(2980300002)(189003)(199004)(51914003)(6486002)(31696002)(229853002)(2501003)(74482002)(50466002)(64126003)(36756003)(31686004)(53946003)(356004)(6246003)(8936002)(6512007)(7736002)(305945005)(7596002)(7636002)(30864003)(2906002)(6116002)(3846002)(508600001)(8676002)(25786009)(65826007)(2486003)(4326008)(14454004)(436003)(246002)(102836004)(23676004)(2616005)(446003)(11346002)(126002)(476003)(186003)(70586007)(42882007)(70206006)(99286004)(76176011)(106002)(336012)(26005)(5660300002)(44832011)(65956001)(65806001)(66066001)(386003)(110136005)(316002)(14444005)(486006)(58126008)(54906003)(6506007)(53546011)(47776003)(461764006)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0401MB2619;H:westeu11-emailsignatures-cloud.codetwo.com;FPR:;SPF:Pass;LANG:en;PTR:westeu11-emailsignatures-cloud.codetwo.com;MX:1;A:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 83312418-73a6-4dce-43bc-08d6ca1c3eda X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600141)(710020)(711020)(4605104)(2017052603328)(7193020);SRVR:HE1PR0401MB2619; X-Forefront-PRVS: 001968DD50 X-Microsoft-Antispam-Message-Info: SGsayuu+R5Wdn0/BDxACrpXJn0jEvsrZPBAJ1A6/Wf4d5SMqekj62f0V5wCJFn+jUfdzFmCIFJ75gznClJ1jcdg82MMwbzURSOK35MaeSSHTylLZ26jL4Gy6rlLjcmIKdjz/gRUqHHYSNA521bsaRjD47WDdOa/reMi+QqJOwns0YQCJEqd+M02I622Rjs8y4m3iFN+PfVuCbyarR0FfW4rAYmQM5AWCluINLze3I1RB1dFRoi70H9/PyzEQr1ZBnWkD26MXVZuw2Z6QeLsHYlaoJAZwbZl4drXPSI5Vl7Dl+SDbmasiJ03iaego+ngi1yphaJnLSlLj7DU0XLA+X/U4PTSb3Po88/HtmpDyoWSVuQZ8PGSrFzsi30zktfA/iZmuSXsS7UAn1GgBCKv1fJtzthkoNJ4GlW8GfRcHU7o= X-OriginatorOrg: topic.nl X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2019 07:53:23.8411 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 38d33495-9221-4ddf-a43f-08d6ca1c4294 X-MS-Exchange-CrossTenant-Id: 449607a5-3517-482d-8d16-41dd868cbda3 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=449607a5-3517-482d-8d16-41dd868cbda3;Ip=[52.166.56.231];Helo=[westeu11-emailsignatures-cloud.codetwo.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0401MB2619 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SSdsbCBzZW5kIGEgdjIgd2l0aCBsb3RzIG9mIGNoYW5nZXMgc29tZWRheSBuZXh0IHdlZWsgKEkg aG9wZSkuIENvbW1lbnRzIA0KaW50ZXJsZWF2ZWQsIGlmIEkgZGlkbid0IGNvbW1lbnQgb3IgZXhw bGljaXRseSBzYXkgIm9rIiwganVzdCBhc3N1bWUgSSBhZ3JlZSANCmFuZCB3aWxsIGNoYW5nZSBp dC4NCg0KDQpPbiAyNi0wNC0xOSAwMTozNiwgU3RlcGhlbiBCb3lkIHdyb3RlOg0KPiBRdW90aW5n IE1pa2UgTG9vaWptYW5zICgyMDE5LTA0LTI0IDAyOjAwOjM4KQ0KPj4gQWRkcyBhIGRyaXZlciBm b3IgdGhlIFNpNTM0MSBhbmQgU2k1MzQwIGNoaXBzLiBUaGUgZHJpdmVyIGRvZXMgbm90IGZ1bGx5 DQo+PiBzdXBwb3J0IGFsbCBmZWF0dXJlcyBvZiB0aGVzZSBjaGlwcywgYnV0IGFsbG93cyB0aGUg Y2hpcCB0byBiZSB1c2VkDQo+PiB3aXRob3V0IGFueSBzdXBwb3J0IGZyb20gdGhlICJjbG9ja2J1 aWxkZXIgcHJvIiBzb2Z0d2FyZS4NCj4+DQo+PiBJZiB0aGUgY2hpcCBpcyBwcmVwcm9ncmFtbWVk LCB0aGF0IGlzLCB5b3UgYm91Z2h0IG9uZSB3aXRoIHNvbWUgZGVmYXVsdHMNCj4+IGJ1cm5lZCBp biwgb3IgeW91IHByb2dyYW1tZWQgdGhlIE5WTSBpbiBzb21lIHdheSwgdGhlIGRyaXZlciB3aWxs IGp1c3QNCj4+IHRha2Ugb3ZlciB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgb25seSBjaGFuZ2Ug dGhlbSBvbiBkZW1hbmQuIE90aGVyd2lzZQ0KPj4gdGhlIGlucHV0IG11c3QgYSBmaXhlZCBYVEFM IGluIGl0cyBtb3N0IGJhc2ljIGNvbmZpZ3VyYXRpb24gKG5vDQo+IA0KPiBtdXN0IGJlDQo+IA0K Pj4gcHJlZGl2aWRlcnMsIG5vIGZlZWRiYWNrLCBldGMuKS4NCj4+DQo+PiBUaGUgZHJpdmVyIHN1 cHBvcnRzIGR5bmFtaWMgY2hhbmdlcyBvZiBtdWx0aXN5bnRoLCBvdXRwdXQgZGl2aWRlcnMgYW5k DQo+PiBlbmFibGluZyBvciBwb3dlcmluZyBkb3duIG91dHB1dHMgYW5kIG11bHRpc3ludGhzLg0K Pj4NCj4+IFNpZ25lZC1vZmYtYnk6IE1pa2UgTG9vaWptYW5zIDxtaWtlLmxvb2lqbWFuc0B0b3Bp Yy5ubD4NCj4+IC0tLQ0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1zaTUzNDEuYyBi L2RyaXZlcnMvY2xrL2Nsay1zaTUzNDEuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uMGQ2MzY2NTg4NTNiDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysg Yi9kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMNCj4+IEBAIC0wLDAgKzEsMTQ1MiBAQA0KPj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBEcml2ZXIg Zm9yIFNpbGljb24gTGFicyBTaTUzNDEvU2k1MzQwIENsb2NrIGdlbmVyYXRvcg0KPj4gKyAqIENv cHlyaWdodCAoQykgMjAxOSBUb3BpYyBFbWJlZGRlZCBQcm9kdWN0cw0KPj4gKyAqIEF1dGhvcjog TWlrZSBMb29pam1hbnMgPG1pa2UubG9vaWptYW5zQHRvcGljLm5sPg0KPj4gKyAqLw0KPj4gKw0K Pj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3Zp ZGVyLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L2djZC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCj4+ICsjaW5jbHVkZSA8bGlu dXgvaTJjLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPj4gKyNpbmNsdWRlIDxs aW51eC9yZWdtYXAuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPj4gKw0KPj4gKyNk ZWZpbmUgU0k1MzQxX01BWF9OVU1fT1VUUFVUUyAxMA0KPj4gKyNkZWZpbmUgU0k1MzQwX01BWF9O VU1fT1VUUFVUUyA0DQo+PiArDQo+PiArI2RlZmluZSBTSTUzNDFfTlVNX1NZTlRIIDUNCj4+ICsj ZGVmaW5lIFNJNTM0MF9OVU1fU1lOVEggNA0KPj4gKw0KPj4gKy8qIFJhbmdlIG9mIHRoZSBzeW50 aGVzaXplciBmcmFjdGlvbmFsIGRpdmlkZXIgKi8NCj4+ICsjZGVmaW5lIFNJNTM0MV9TWU5USF9O X01JTiAgICAgMTANCj4+ICsjZGVmaW5lIFNJNTM0MV9TWU5USF9OX01BWCAgICAgNDA5NQ0KPj4g Kw0KPj4gKy8qIFRoZSBjaGlwIGNhbiBnZXQgaXRzIGlucHV0IGNsb2NrIGZyb20gMyBpbnB1dCBw aW5zIG9yIGFuIFhUQUwgKi8NCj4+ICsNCj4+ICsvKiBUaGVyZSBpcyBvbmUgUExMIHJ1bm5pbmcg YXQgMTM1MDDigJMxNDI1NiBNSHogKi8NCj4+ICsjZGVmaW5lIFNJNTM0MV9QTExfVkNPX01JTiAx MzUwMDAwMDAwMHVsbA0KPj4gKyNkZWZpbmUgU0k1MzQxX1BMTF9WQ09fTUFYIDE0MjU2MDAwMDAw dWxsDQo+PiArDQo+PiArLyogVGhlIDUgZnJlcXVlbmN5IHN5bnRoZXNpemVycyBvYnRhaW4gdGhl aXIgaW5wdXQgZnJvbSB0aGUgUExMICovDQo+PiArc3RydWN0IGNsa19zaTUzNDFfc3ludGggew0K Pj4gKyAgICAgICBzdHJ1Y3QgY2xrX2h3IGh3Ow0KPj4gKyAgICAgICBzdHJ1Y3QgY2xrX3NpNTM0 MSAqZGF0YTsNCj4+ICsgICAgICAgdTggaW5kZXg7DQo+PiArfTsNCj4+ICsjZGVmaW5lIHRvX2Ns a19zaTUzNDFfc3ludGgoX2h3KSBcDQo+PiArICAgICAgIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVj dCBjbGtfc2k1MzQxX3N5bnRoLCBodykNCj4+ICsNCj4+ICsvKiBUaGUgb3V0cHV0IHN0YWdlcyBj YW4gYmUgY29ubmVjdGVkIHRvIGFueSBzeW50aCAoZnVsbCBtdXgpICovDQo+PiArc3RydWN0IGNs a19zaTUzNDFfb3V0cHV0IHsNCj4+ICsgICAgICAgc3RydWN0IGNsa19odyBodzsNCj4+ICsgICAg ICAgc3RydWN0IGNsa19zaTUzNDEgKmRhdGE7DQo+PiArICAgICAgIHU4IGluZGV4Ow0KPj4gK307 DQo+PiArI2RlZmluZSB0b19jbGtfc2k1MzQxX291dHB1dChfaHcpIFwNCj4+ICsgICAgICAgY29u dGFpbmVyX29mKF9odywgc3RydWN0IGNsa19zaTUzNDFfb3V0cHV0LCBodykNCj4+ICsNCj4+ICtz dHJ1Y3QgY2xrX3NpNTM0MSB7DQo+PiArICAgICAgIHN0cnVjdCBjbGtfaHcgaHc7DQo+PiArICAg ICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4+ICsgICAgICAgc3RydWN0IGkyY19jbGllbnQg KmkyY19jbGllbnQ7DQo+PiArICAgICAgIHN0cnVjdCBjbGtfc2k1MzQxX3N5bnRoIHN5bnRoW1NJ NTM0MV9OVU1fU1lOVEhdOw0KPj4gKyAgICAgICBzdHJ1Y3QgY2xrX3NpNTM0MV9vdXRwdXQgY2xr W1NJNTM0MV9NQVhfTlVNX09VVFBVVFNdOw0KPj4gKyAgICAgICBzdHJ1Y3QgY2xrICpweHRhbDsN Cj4+ICsgICAgICAgY29uc3QgY2hhciAqcHh0YWxfbmFtZTsNCj4+ICsgICAgICAgY29uc3QgdTE2 ICpyZWdfb3V0cHV0X29mZnNldDsNCj4+ICsgICAgICAgY29uc3QgdTE2ICpyZWdfcmRpdl9vZmZz ZXQ7DQo+PiArICAgICAgIHU2NCBmcmVxX3ZjbzsgLyogMTM1MDDigJMxNDI1NiBNSHogKi8NCj4+ ICsgICAgICAgdTggbnVtX291dHB1dHM7DQo+PiArICAgICAgIHU4IG51bV9zeW50aDsNCj4+ICt9 Ow0KPj4gKyNkZWZpbmUgdG9fY2xrX3NpNTM0MShfaHcpICAgICBjb250YWluZXJfb2YoX2h3LCBz dHJ1Y3QgY2xrX3NpNTM0MSwgaHcpDQo+PiArDQo+PiArc3RydWN0IGNsa19zaTUzNDFfb3V0cHV0 X2NvbmZpZyB7DQo+PiArICAgICAgIHU4IHNvdXJjZV9pbmRleDsNCj4+ICsgICAgICAgdTggb3V0 X2Zvcm1hdF9kcnZfYml0czsNCj4+ICsgICAgICAgdTggb3V0X2NtX2FtcGxfYml0czsNCj4+ICsg ICAgICAgYm9vbCBzeW50aF9tYXN0ZXI7DQo+PiArICAgICAgIGJvb2wgYWx3YXlzX29uOw0KPj4g KyAgICAgICB1MzIgc3ludGhfZnJlcXVlbmN5Ow0KPj4gKyAgICAgICB1MzIgY2xvY2tfZnJlcXVl bmN5Ow0KPj4gK307DQo+PiArDQo+PiArI2RlZmluZSBTSTUzNDFfUEFHRSAgICAgICAgICAgIDB4 MDAwMQ0KPj4gKyNkZWZpbmUgU0k1MzQxX1BOX0JBU0UgICAgICAgICAweDAwMDINCj4+ICsjZGVm aW5lIFNJNTM0MV9ERVZJQ0VfUkVWICAgICAgMHgwMDA1DQo+PiArI2RlZmluZSBTSTUzNDFfU1RB VFVTICAgICAgICAgIDB4MDAwQw0KPj4gKyNkZWZpbmUgU0k1MzQxX1NPRlRfUlNUICAgICAgICAg ICAgICAgIDB4MDAxQw0KPj4gKw0KPj4gKy8qIElucHV0IGRpdmlkZXJzICg0OC1iaXQpICovDQo+ PiArI2RlZmluZSBTSTUzNDFfSU5fUERJVih4KSAgICAgICgweDAyMDggKyAoKHgpICogMTApKQ0K Pj4gKyNkZWZpbmUgU0k1MzQxX0lOX1BTRVQoeCkgICAgICAoMHgwMjBFICsgKCh4KSAqIDEwKSkN Cj4+ICsNCj4+ICsvKiBQTEwgY29uZmlndXJhdGlvbiAqLw0KPj4gKyNkZWZpbmUgU0k1MzQxX1BM TF9NX05VTSAgICAgICAweDAyMzUNCj4+ICsjZGVmaW5lIFNJNTM0MV9QTExfTV9ERU4gICAgICAg MHgwMjNCDQo+PiArDQo+PiArLyogT3V0cHV0IGNvbmZpZ3VyYXRpb24gKi8NCj4+ICsjZGVmaW5l IFNJNTM0MV9PVVRfQ09ORklHKG91dHB1dCkgICAgICBcDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAoKG91dHB1dCktPmRhdGEtPnJlZ19vdXRwdXRfb2Zmc2V0WyhvdXRwdXQpLT5pbmRleF0p DQo+PiArI2RlZmluZSBTSTUzNDFfT1VUX0ZPUk1BVChvdXRwdXQpICAgICAgKFNJNTM0MV9PVVRf Q09ORklHKG91dHB1dCkgKyAxKQ0KPj4gKyNkZWZpbmUgU0k1MzQxX09VVF9DTShvdXRwdXQpICAg ICAgICAgIChTSTUzNDFfT1VUX0NPTkZJRyhvdXRwdXQpICsgMikNCj4+ICsjZGVmaW5lIFNJNTM0 MV9PVVRfTVVYX1NFTChvdXRwdXQpICAgICAoU0k1MzQxX09VVF9DT05GSUcob3V0cHV0KSArIDMp DQo+PiArI2RlZmluZSBTSTUzNDFfT1VUX1JfUkVHKG91dHB1dCkgICAgICAgXA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgKChvdXRwdXQpLT5kYXRhLT5yZWdfcmRpdl9vZmZzZXRbKG91dHB1 dCktPmluZGV4XSkNCj4+ICsNCj4+ICsvKiBTeW50aGVzaXplIE4gZGl2aWRlciAqLw0KPj4gKyNk ZWZpbmUgU0k1MzQxX1NZTlRIX05fTlVNKHgpICAoMHgwMzAyICsgKCh4KSAqIDExKSkNCj4+ICsj ZGVmaW5lIFNJNTM0MV9TWU5USF9OX0RFTih4KSAgKDB4MDMwOCArICgoeCkgKiAxMSkpDQo+PiAr I2RlZmluZSBTSTUzNDFfU1lOVEhfTl9VUEQoeCkgICgweDAzMEMgKyAoKHgpICogMTEpKQ0KPj4g Kw0KPj4gKy8qIFN5bnRoZXNpemVyIG91dHB1dCBlbmFibGUsIHBoYXNlIGJ5cGFzcywgcG93ZXIg bW9kZSAqLw0KPj4gKyNkZWZpbmUgU0k1MzQxX1NZTlRIX05fQ0xLX1RPX09VVFhfRU4gIDB4MEEw Mw0KPj4gKyNkZWZpbmUgU0k1MzQxX1NZTlRIX05fUElCWVAgICAgICAgICAgIDB4MEEwNA0KPj4g KyNkZWZpbmUgU0k1MzQxX1NZTlRIX05fUEROQiAgICAgICAgICAgIDB4MEEwNQ0KPj4gKyNkZWZp bmUgU0k1MzQxX1NZTlRIX05fQ0xLX0RJUyAgICAgICAgIDB4MEI0QQ0KPj4gKw0KPj4gKy8qIFNJ NTM0MV9PVVRfQ09ORklHIGJpdHMgKi8NCj4+ICsjZGVmaW5lIFNJNTM0MV9PVVRfQ0ZHX1BETiAg ICAgICAgICAgICBCSVQoMCkNCj4+ICsjZGVmaW5lIFNJNTM0MV9PVVRfQ0ZHX09FICAgICAgICAg ICAgICBCSVQoMSkNCj4+ICsjZGVmaW5lIFNJNTM0MV9PVVRfQ0ZHX1JESVZfRk9SQ0UyICAgICBC SVQoMikNCj4+ICsNCj4+ICsvKiBTdGF0aWMgY29uZmlndXJhdGlvbiAodG8gYmUgbW92ZWQgdG8g ZmlybXdhcmUpICovDQo+PiArc3RydWN0IHNpNTM0MV9yZWdfZGVmYXVsdCB7DQo+PiArICAgICAg IHUxNiBhZGRyZXNzOw0KPj4gKyAgICAgICB1OCB2YWx1ZTsNCj4+ICt9Ow0KPj4gKw0KPj4gKy8q IE91dHB1dCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAwLi45IGFyZSBub3QgcXVpdGUgbG9naWNh bGx5IG9yZ2FuaXplZCAqLw0KPiANCj4gU1VQRVIgU0lHSCEhISEhIQ0KPiANCj4+ICtzdGF0aWMg Y29uc3QgdTE2IHNpNTM0MV9yZWdfb3V0cHV0X29mZnNldFtdID0gew0KPj4gKyAgICAgICAweDAx MDgsDQo+PiArICAgICAgIDB4MDEwRCwNCj4+ICsgICAgICAgMHgwMTEyLA0KPj4gKyAgICAgICAw eDAxMTcsDQo+PiArICAgICAgIDB4MDExQywNCj4+ICsgICAgICAgMHgwMTIxLA0KPj4gKyAgICAg ICAweDAxMjYsDQo+PiArICAgICAgIDB4MDEyQiwNCj4+ICsgICAgICAgMHgwMTMwLA0KPj4gKyAg ICAgICAweDAxM0EsDQo+PiArfTsNCj4+ICtzdGF0aWMgY29uc3QgdTE2IHNpNTM0MF9yZWdfb3V0 cHV0X29mZnNldFtdID0gew0KPj4gKyAgICAgICAweDAxMTIsDQo+PiArICAgICAgIDB4MDExNywN Cj4+ICsgICAgICAgMHgwMTI2LA0KPj4gKyAgICAgICAweDAxMkIsDQo+PiArfTsNCj4+ICsNCj4+ ICsvKiBUaGUgbG9jYXRpb24gb2YgdGhlIFIgZGl2aWRlciByZWdpc3RlcnMgKi8NCj4+ICtzdGF0 aWMgY29uc3QgdTE2IHNpNTM0MV9yZWdfcmRpdl9vZmZzZXRbXSA9IHsNCj4+ICsgICAgICAgMHgw MjRBLA0KPj4gKyAgICAgICAweDAyNEQsDQo+PiArICAgICAgIDB4MDI1MCwNCj4+ICsgICAgICAg MHgwMjUzLA0KPj4gKyAgICAgICAweDAyNTYsDQo+PiArICAgICAgIDB4MDI1OSwNCj4+ICsgICAg ICAgMHgwMjVDLA0KPj4gKyAgICAgICAweDAyNUYsDQo+PiArICAgICAgIDB4MDI2MiwNCj4+ICsg ICAgICAgMHgwMjY4LA0KPj4gK307DQo+IA0KPiBQdXQgYSBuZXdsaW5lIGhlcmUgcGxlYXNlLg0K DQpvaw0KDQo+IA0KPj4gK3N0YXRpYyBjb25zdCB1MTYgc2k1MzQwX3JlZ19yZGl2X29mZnNldFtd ID0gew0KPj4gKyAgICAgICAweDAyNTAsDQo+PiArICAgICAgIDB4MDI1MywNCj4+ICsgICAgICAg MHgwMjVDLA0KPj4gKyAgICAgICAweDAyNUYsDQo+PiArfTsNCj4+ICsNCj4+ICsvKg0KPj4gKyAq IFByb2dyYW1taW5nIHNlcXVlbmNlIGZyb20gQ2xvY2tCdWlsZGVyLCBzZXR0aW5ncyB0byBpbml0 aWFsaXplIHRoZSBzeXN0ZW0NCj4+ICsgKiB1c2luZyBvbmx5IHRoZSBYVEFMIGlucHV0LCB3aXRo b3V0IHByZS1kaXZpZGVyLg0KPj4gKyAqIFRoaXMgYWxzbyBjb250YWlucyBzZXR0aW5ncyB0aGF0 IGFyZW4ndCBtZW50aW9uZWQgYW55d2hlcmUgaW4gdGhlIGRhdGFzaGVldC4NCj4gDQo+IFRoYXQn cyBhd2Z1bCEgV2hhdCBhIG5vbi1zdXJwcmlzZSENCj4gDQo+PiArICogVGhlICJrbm93biIgc2V0 dGluZ3MgbGlrZSBzeW50aCBhbmQgb3V0cHV0IGNvbmZpZ3VyYXRpb24gYXJlIGRvbmUgbGF0ZXIu DQo+PiArICovDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBzaTUzNDFfcmVnX2RlZmF1bHQgc2k1 MzQxX3JlZ19kZWZhdWx0c1tdID0gew0KPj4gKyAgICAgICB7IDB4MDAxNywgMHgzQSB9LCAvKiBJ TlQgbWFzayAoZGlzYWJsZSBpbnRlcnJ1cHRzKSAqLw0KPj4gKyAgICAgICB7IDB4MDAxOCwgMHhG RiB9LCAvKiBJTlQgbWFzayAqLw0KPj4gKyAgICAgICB7IDB4MDAyMSwgMHgwRiB9LCAvKiBTZWxl Y3QgWFRBTCBhcyBpbnB1dCAqLw0KPj4gKyAgICAgICB7IDB4MDAyMiwgMHgwMCB9LCAvKiBOb3Qg aW4gZGF0YXNoZWV0ICovDQo+PiArICAgICAgIHsgMHgwMDJCLCAweDAyIH0sIC8qIFNQSSBjb25m aWcgKi8NCj4+ICsgICAgICAgeyAweDAwMkMsIDB4MjAgfSwgLyogTE9TIGVuYWJsZSBmb3IgWFRB TCAqLw0KPj4gKyAgICAgICB7IDB4MDAyRCwgMHgwMCB9LCAvKiBMT1MgdGltaW5nICovDQo+PiAr ICAgICAgIHsgMHgwMDJFLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDJGLCAweDAwIH0sDQo+ PiArICAgICAgIHsgMHgwMDMwLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDMxLCAweDAwIH0s DQo+PiArICAgICAgIHsgMHgwMDMyLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDMzLCAweDAw IH0sDQo+PiArICAgICAgIHsgMHgwMDM0LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDM1LCAw eDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDM2LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDM3 LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMDM4LCAweDAwIH0sIC8qIExPUyBzZXR0aW5nICh0 aHJlc2hvbGRzKSAqLw0KPj4gKyAgICAgICB7IDB4MDAzOSwgMHgwMCB9LA0KPj4gKyAgICAgICB7 IDB4MDAzQSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDAzQiwgMHgwMCB9LA0KPj4gKyAgICAg ICB7IDB4MDAzQywgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDAzRCwgMHgwMCB9LCAvKiBMT1Mg c2V0dGluZyAodGhyZXNob2xkcykgZW5kICovDQo+PiArICAgICAgIHsgMHgwMDQxLCAweDAwIH0s IC8qIExPUzBfRElWX1NFTCAqLw0KPj4gKyAgICAgICB7IDB4MDA0MiwgMHgwMCB9LCAvKiBMT1Mx X0RJVl9TRUwgKi8NCj4+ICsgICAgICAgeyAweDAwNDMsIDB4MDAgfSwgLyogTE9TMl9ESVZfU0VM ICovDQo+PiArICAgICAgIHsgMHgwMDQ0LCAweDAwIH0sIC8qIExPUzNfRElWX1NFTCAqLw0KPj4g KyAgICAgICB7IDB4MDA5RSwgMHgwMCB9LCAvKiBOb3QgaW4gZGF0YXNoZWV0ICovDQo+PiArICAg ICAgIHsgMHgwMTAyLCAweDAxIH0sIC8qIEVuYWJsZSBvdXRwdXRzICovDQo+PiArICAgICAgIHsg MHgwMTNGLCAweDAwIH0sIC8qIE5vdCBpbiBkYXRhc2hlZXQgKi8NCj4+ICsgICAgICAgeyAweDAx NDAsIDB4MDAgfSwgLyogTm90IGluIGRhdGFzaGVldCAqLw0KPj4gKyAgICAgICB7IDB4MDE0MSwg MHg0MCB9LCAvKiBPVVQgTE9TICovDQo+PiArICAgICAgIHsgMHgwMjAyLCAweDAwIH0sIC8qIFhB WEJfRlJFUV9PRkZTRVQgKD0wKSovDQo+PiArICAgICAgIHsgMHgwMjAzLCAweDAwIH0sDQo+PiAr ICAgICAgIHsgMHgwMjA0LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMjA1LCAweDAwIH0sDQo+ PiArICAgICAgIHsgMHgwMjA2LCAweDAwIH0sIC8qIFBYQVhCICgyXngpICovDQo+PiArICAgICAg IHsgMHgwMjA4LCAweDAwIH0sIC8qIFB4IGRpdmlkZXIgc2V0dGluZyAodXN1YWxseSAwKSAqLw0K Pj4gKyAgICAgICB7IDB4MDIwOSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIwQSwgMHgwMCB9 LA0KPj4gKyAgICAgICB7IDB4MDIwQiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIwQywgMHgw MCB9LA0KPj4gKyAgICAgICB7IDB4MDIwRCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIwRSwg MHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIwRiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIx MCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxMSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4 MDIxMiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxMywgMHgwMCB9LA0KPj4gKyAgICAgICB7 IDB4MDIxNCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxNSwgMHgwMCB9LA0KPj4gKyAgICAg ICB7IDB4MDIxNiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxNywgMHgwMCB9LA0KPj4gKyAg ICAgICB7IDB4MDIxOCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxOSwgMHgwMCB9LA0KPj4g KyAgICAgICB7IDB4MDIxQSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxQiwgMHgwMCB9LA0K Pj4gKyAgICAgICB7IDB4MDIxQywgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxRCwgMHgwMCB9 LA0KPj4gKyAgICAgICB7IDB4MDIxRSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIxRiwgMHgw MCB9LA0KPj4gKyAgICAgICB7IDB4MDIyMCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyMSwg MHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyMiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIy MywgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyNCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4 MDIyNSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyNiwgMHgwMCB9LA0KPj4gKyAgICAgICB7 IDB4MDIyNywgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyOCwgMHgwMCB9LA0KPj4gKyAgICAg ICB7IDB4MDIyOSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyQSwgMHgwMCB9LA0KPj4gKyAg ICAgICB7IDB4MDIyQiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyQywgMHgwMCB9LA0KPj4g KyAgICAgICB7IDB4MDIyRCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDIyRSwgMHgwMCB9LA0K Pj4gKyAgICAgICB7IDB4MDIyRiwgMHgwMCB9LCAvKiBQeCBkaXZpZGVyIHNldHRpbmcgKHVzdWFs bHkgMCkgZW5kICovDQo+PiArICAgICAgIHsgMHgwMjZCLCAweDAwIH0sIC8qIERFU0lHTl9JRCAo QVNDSUkgc3RyaW5nKSAqLw0KPj4gKyAgICAgICB7IDB4MDI2QywgMHgwMCB9LA0KPj4gKyAgICAg ICB7IDB4MDI2RCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDI2RSwgMHgwMCB9LA0KPj4gKyAg ICAgICB7IDB4MDI2RiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDI3MCwgMHgwMCB9LA0KPj4g KyAgICAgICB7IDB4MDI3MSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDI3MiwgMHgwMCB9LCAv KiBERVNJR05fSUQgKEFTQ0lJIHN0cmluZykgZW5kICovDQo+PiArICAgICAgIHsgMHgwMzM5LCAw eDFGIH0sIC8qIE5fRlNURVBfTVNLICovDQo+PiArICAgICAgIHsgMHgwMzNCLCAweDAwIH0sIC8q IE54X0ZTVEVQVyAoRnJlcXVlbmN5IHN0ZXApICovDQo+PiArICAgICAgIHsgMHgwMzNDLCAweDAw IH0sDQo+PiArICAgICAgIHsgMHgwMzNELCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzNFLCAw eDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzNGLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzQw LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzQxLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgw MzQyLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzQzLCAweDAwIH0sDQo+PiArICAgICAgIHsg MHgwMzQ0LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzQ1LCAweDAwIH0sDQo+PiArICAgICAg IHsgMHgwMzQ2LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzQ3LCAweDAwIH0sDQo+PiArICAg ICAgIHsgMHgwMzQ4LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzQ5LCAweDAwIH0sDQo+PiAr ICAgICAgIHsgMHgwMzRBLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzRCLCAweDAwIH0sDQo+ PiArICAgICAgIHsgMHgwMzRDLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzRELCAweDAwIH0s DQo+PiArICAgICAgIHsgMHgwMzRFLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzRGLCAweDAw IH0sDQo+PiArICAgICAgIHsgMHgwMzUwLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzUxLCAw eDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzUyLCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzUz LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzU0LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgw MzU1LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzU2LCAweDAwIH0sDQo+PiArICAgICAgIHsg MHgwMzU3LCAweDAwIH0sDQo+PiArICAgICAgIHsgMHgwMzU4LCAweDAwIH0sIC8qIE54X0ZTVEVQ VyAoRnJlcXVlbmN5IHN0ZXApIGVuZCAqLw0KPj4gKyAgICAgICB7IDB4MDM1OSwgMHgwMCB9LCAv KiBOeF9ERUxBWSAqLw0KPj4gKyAgICAgICB7IDB4MDM1QSwgMHgwMCB9LA0KPj4gKyAgICAgICB7 IDB4MDM1QiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDM1QywgMHgwMCB9LA0KPj4gKyAgICAg ICB7IDB4MDM1RCwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDM1RSwgMHgwMCB9LA0KPj4gKyAg ICAgICB7IDB4MDM1RiwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDM2MCwgMHgwMCB9LA0KPj4g KyAgICAgICB7IDB4MDM2MSwgMHgwMCB9LA0KPj4gKyAgICAgICB7IDB4MDM2MiwgMHgwMCB9LCAv KiBOeF9ERUxBWSBlbmQgKi8NCj4+ICsgICAgICAgeyAweDA4MDIsIDB4MDAgfSwgLyogTm90IGlu IGRhdGFzaGVldCAqLw0KPj4gKyAgICAgICB7IDB4MDgwMywgMHgwMCB9LCAvKiBOb3QgaW4gZGF0 YXNoZWV0ICovDQo+PiArICAgICAgIHsgMHgwODA0LCAweDAwIH0sIC8qIE5vdCBpbiBkYXRhc2hl ZXQgKi8NCj4+ICsgICAgICAgeyAweDA5MEUsIDB4MDIgfSwgLyogWEFYQl9FWFRDTEtfRU49MCBY QVhCX1BETkI9MSAodXNlIFhUQUwpICovDQo+PiArICAgICAgIHsgMHgwOTFDLCAweDA0IH0sIC8q IFpETV9FTj00IChOb3JtYWwgbW9kZSkgKi8NCj4+ICsgICAgICAgeyAweDA5NDMsIDB4MDAgfSwg LyogSU9fVkREX1NFTD0wICgwPTF2OCwgdXNlIDE9M3YzKSAqLw0KPj4gKyAgICAgICB7IDB4MDk0 OSwgMHgwMCB9LCAvKiBJTl9FTiAoZGlzYWJsZSBpbnB1dCBjbG9ja3MpICovDQo+PiArICAgICAg IHsgMHgwOTRBLCAweDAwIH0sIC8qIElOeF9UT19QRkRfRU4gKGRpc2FibGVkKSAqLw0KPj4gKyAg ICAgICB7IDB4MEEwMiwgMHgwMCB9LCAvKiBOb3QgaW4gZGF0YXNoZWV0ICovDQo+PiArICAgICAg IHsgMHgwQjQ0LCAweDBGIH0sIC8qIFBESVZfRU5CIChkYXRhc2hlZXQgZG9lcyBub3QgbWVudGlv biB3aGF0IGl0IGlzKSAqLw0KPj4gK307DQo+PiArDQo+PiArLyogUmVhZCBhbmQgaW50ZXJwcmV0 IGEgNDQtYml0IGZvbGxvd2VkIGJ5IGEgMzItYml0IHZhbHVlIGluIHRoZSByZWdtYXAgKi8NCj4+ ICtzdGF0aWMgaW50IHNpNTM0MV9kZWNvZGVfNDRfMzIoc3RydWN0IHJlZ21hcCAqcmVnbWFwLCB1 bnNpZ25lZCBpbnQgcmVnLA0KPj4gKyAgICAgICB1NjQgKnZhbDEsIHUzMiAqdmFsMikNCj4+ICt7 DQo+PiArICAgICAgIGludCBlcnI7DQo+PiArICAgICAgIHU4IHJbMTBdOw0KPj4gKw0KPj4gKyAg ICAgICBlcnIgPSByZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgcmVnLCByLCAxMCk7DQo+PiArICAg ICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+PiArDQo+ PiArICAgICAgICp2YWwxID0gKCh1NjQpKChyWzVdICYgMHgwZikgPDwgOCB8IHJbNF0pIDw8IDMy KSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAodTMyKShyWzNdIDw8IDI0IHwgclsyXSA8 PCAxNiB8IHJbMV0gPDwgOCB8IHJbMF0pOw0KPj4gKyAgICAgICAqdmFsMiA9IHJbOV0gPDwgMjQg fCByWzhdIDw8IDE2IHwgcls3XSA8PCA4IHwgcls2XTsNCj4gDQo+IElzIHRoaXMgYWxtb3N0IGdl dF91bmFsaWduZWRfbGU2NCgpPyBNYXliZSB3aXRoIHNvbWUgbWFza2luZyB0aHJvd24gaW4NCj4g dG8gaWdub3JlIGJ5dGVzIGF0IHI2IGFuZCByNy4gQW5kIHRoZW4gYSBnZXRfdW5hbGlnbmVkX2xl MzIoKSBhZnRlciB0aGF0DQo+IHN0YXJ0aW5nIGF0IHI2Lg0KDQpJJ2xsIGxvb2sgaW50byBpdCwg SSBqdXN0IGhhZG4ndCBmb3VuZCB0aG9zZS4NCg0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBzaTUzNDFfZW5jb2RlXzQ0XzMyKHN0cnVjdCBy ZWdtYXAgKnJlZ21hcCwgdW5zaWduZWQgaW50IHJlZywNCj4+ICsgICAgICAgdTY0IG5fbnVtLCB1 MzIgbl9kZW4pDQo+PiArew0KPj4gKyAgICAgICB1OCByWzEwXTsNCj4+ICsNCj4+ICsgICAgICAg LyogU2hpZnQgbGVmdCBhcyBmYXIgYXMgcG9zc2libGUgd2l0aG91dCBvdmVyZmxvd2luZyAqLw0K Pj4gKyAgICAgICB3aGlsZSAoIShuX251bSAmIEJJVCg0MykpICYmICEobl9kZW4gJiBCSVQoMzEp KSkgew0KPj4gKyAgICAgICAgICAgICAgIG5fbnVtIDw8PSAxOw0KPj4gKyAgICAgICAgICAgICAg IG5fZGVuIDw8PSAxOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qIDQ0IGJpdHMg KDYgYnl0ZXMpIG51bWVyYXRvciAqLw0KPj4gKyAgICAgICByWzBdID0gbl9udW0gJiAweGZmOw0K Pj4gKyAgICAgICByWzFdID0gKG5fbnVtID4+IDgpICYgMHhmZjsNCj4+ICsgICAgICAgclsyXSA9 IChuX251bSA+PiAxNikgJiAweGZmOw0KPj4gKyAgICAgICByWzNdID0gKG5fbnVtID4+IDI0KSAm IDB4ZmY7DQo+PiArICAgICAgIHJbNF0gPSAobl9udW0gPj4gMzIpICYgMHhmZjsNCj4+ICsgICAg ICAgcls1XSA9IChuX251bSA+PiA0MCkgJiAweDBmOw0KPj4gKyAgICAgICAvKiAzMiBiaXRzIGRl bm9taW5hdG9yICovDQo+PiArICAgICAgIHJbNl0gPSBuX2RlbiAmIDB4ZmY7DQo+PiArICAgICAg IHJbN10gPSAobl9kZW4gPj4gOCkgJiAweGZmOw0KPj4gKyAgICAgICByWzhdID0gKG5fZGVuID4+ IDE2KSAmIDB4ZmY7DQo+PiArICAgICAgIHJbOV0gPSAobl9kZW4gPj4gMjQpICYgMHhmZjsNCj4g DQo+IE1heWJlIHNvbWUgcHV0X3VuYWxpZ25lZF9sZTY0KCkgYW5kIHB1dF91bmFsaWduZWRfbGUz MigpPw0KDQpzYW1lLCB5ZXMNCg0KPj4gKw0KPj4gKyAgICAgICAvKiBQcm9ncmFtIHRoZSBmcmFj dGlvbiAqLw0KPj4gKyAgICAgICByZXR1cm4gcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCByZWcs IHIsIHNpemVvZihyKSk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIFZDTywgd2UgYXNzdW1lIGl0IHJ1 bnMgYXQgYSBjb25zdGFudCBmcmVxdWVuY3kgKi8NCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBz aTUzNDFfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KPj4gKyAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpDQo+PiArew0KPj4gKyAgICAgICBzdHJ1Y3Qg Y2xrX3NpNTM0MSAqZGF0YSA9IHRvX2Nsa19zaTUzNDEoaHcpOw0KPj4gKyAgICAgICBpbnQgZXJy Ow0KPj4gKyAgICAgICB1NjQgcmVzOw0KPj4gKyAgICAgICB1NjQgbV9udW07DQo+PiArICAgICAg IHUzMiBtX2RlbjsNCj4+ICsgICAgICAgdW5zaWduZWQgaW50IHNoaWZ0Ow0KPj4gKw0KPj4gKyAg ICAgICAvKiBBc3N1bWUgdGhhdCBQRElWIGlzIG5vdCBiZWluZyB1c2VkLCBqdXN0IHJlYWQgdGhl IFBMTCBzZXR0aW5nICovDQo+PiArICAgICAgIGVyciA9IHNpNTM0MV9kZWNvZGVfNDRfMzIoZGF0 YS0+cmVnbWFwLCBTSTUzNDFfUExMX01fTlVNLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbV9udW0sICZtX2Rlbik7DQo+PiArICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAg ICAgICAgICAgICAgIHJldHVybiAwOw0KPj4gKw0KPj4gKyAgICAgICBpZiAoIW1fbnVtIHx8ICFt X2RlbikNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4+ICsNCj4+ICsgICAgICAgLyoN Cj4+ICsgICAgICAgICogVGhvdWdoIG1fbnVtIGlzIDY0LWJpdCwgb25seSB0aGUgdXBwZXIgYml0 cyBhcmUgYWN0dWFsbHkgdXNlZC4gV2hpbGUNCj4+ICsgICAgICAgICogY2FsY3VsYXRpbmcgbV9u dW0gYW5kIG1fZGVuLCB0aGV5IGFyZSBzaGlmdGVkIGFzIGZhciBhcyBwb3NzaWJsZSB0bw0KPj4g KyAgICAgICAgKiB0aGUgbGVmdC4gVG8gYXZvaWQgOTYtYml0IGRpdmlzaW9uIGhlcmUsIHdlIGp1 c3Qgc2hpZnQgdGhlbSBiYWNrIHNvDQo+PiArICAgICAgICAqIHdlIGNhbiBkbyB3aXRoIGp1c3Qg NjQgYml0cy4NCj4+ICsgICAgICAgICovDQo+PiArICAgICAgIHNoaWZ0ID0gMDsNCj4+ICsgICAg ICAgcmVzID0gbV9udW07DQo+PiArICAgICAgIHdoaWxlIChyZXMgJiAweGZmZmYwMDAwMDAwMCkg ew0KPj4gKyAgICAgICAgICAgICAgICsrc2hpZnQ7DQo+PiArICAgICAgICAgICAgICAgcmVzID4+ PSAxOw0KPj4gKyAgICAgICB9DQo+PiArICAgICAgIHJlcyAqPSBwYXJlbnRfcmF0ZTsNCj4+ICsg ICAgICAgZG9fZGl2KHJlcywgKG1fZGVuID4+IHNoaWZ0KSk7DQo+PiArDQo+PiArICAgICAgIGRl dl9kYmcoJmRhdGEtPmkyY19jbGllbnQtPmRldiwNCj4+ICsgICAgICAgICAgICAgICAiJXMocD0l bHUpIG09MHglbGx4LzB4JXggc2hpZnQ9JXUgcmVzPSVsbHVcbiIsDQo+PiArICAgICAgICAgICAg ICAgX19mdW5jX18sIHBhcmVudF9yYXRlLCBtX251bSwgbV9kZW4sIHNoaWZ0LCByZXMpOw0KPj4g Kw0KPj4gKyAgICAgICAvKiBXZSBjYW5ub3QgcmV0dXJuIHRoZSBhY3R1YWwgZnJlcXVlbmN5IGlu IDMyIGJpdCwgc3RvcmUgaXQgbG9jYWxseSAqLw0KPj4gKyAgICAgICBkYXRhLT5mcmVxX3ZjbyA9 IHJlczsNCj4+ICsNCj4+ICsgICAgICAgLyogUmVwb3J0IGtIeiBzaW5jZSB0aGUgdmFsdWUgaXMg b3V0IG9mIHJhbmdlICovDQo+PiArICAgICAgIGRvX2RpdihyZXMsIDEwMDApOw0KPj4gKw0KPj4g KyAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpcmVzOw0KPiANCj4gVWggb2guIERvIHlvdSBu ZWVkIHJlYWxseSBoaWdoIGZyZXF1ZW5jaWVzIHRoYXQgZG9uJ3QgZml0IGluIDMyLWJpdHM/DQoN ClRoZSBQTEwgcnVucyBhdCBhYm91dCAxNEdIeiBhbmQgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBz dWItaGVydHogYWNjdXJhY3kuDQoNCkkgYWxzbyB0aG91Z2h0IGFib3V0IHN1YnRyYWN0aW5nIHRo ZSBtaW5pbXVtIGZyZXF1ZW5jeSwgc2luY2UgdGhlIFBMTCByYW5nZSBpcyANCnJlbGF0aXZlbHkg c21hbGwsIHRoYXQgd291bGQgYWxzbyBicmluZyB0aGluZ3MgYmFjayBpbnRvIHRoZSAzMiBiaXQg cmFuZ2UuIEJ1dCANCndvdWxkIGJlIGhhcmQgdG8gdW5kZXJzdGFuZC4NCg0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2k1MzQxX2Nsa19vcHMgPSB7DQo+PiAr ICAgICAgIC5yZWNhbGNfcmF0ZSA9IHNpNTM0MV9jbGtfcmVjYWxjX3JhdGUsDQo+PiArfTsNCj4+ ICsNCj4+ICsvKiBTeW50aGVzaXplcnMsIHRoZXJlIGFyZSA1IHN5bnRoZXNpemVycyB0aGF0IGNv bm5lY3QgdG8gYW55IG9mIHRoZSBvdXRwdXRzICovDQo+PiArDQo+PiArLyogVGhlIHN5bnRoZXNp emVyIGlzIG9uIGlmIGFsbCBwb3dlciBhbmQgZW5hYmxlIGJpdHMgYXJlIHNldCAqLw0KPj4gK3N0 YXRpYyBpbnQgc2k1MzQxX3N5bnRoX2Nsa19pc19vbihzdHJ1Y3QgY2xrX2h3ICpodykNCj4+ICt7 DQo+PiArICAgICAgIHN0cnVjdCBjbGtfc2k1MzQxX3N5bnRoICpzeW50aCA9IHRvX2Nsa19zaTUz NDFfc3ludGgoaHcpOw0KPj4gKyAgICAgICBpbnQgZXJyOw0KPj4gKyAgICAgICB1MzIgdmFsOw0K Pj4gKyAgICAgICB1OCBpbmRleCA9IHN5bnRoLT5pbmRleDsNCj4+ICsNCj4+ICsgICAgICAgZXJy ID0gcmVnbWFwX3JlYWQoc3ludGgtPmRhdGEtPnJlZ21hcCwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIFNJNTM0MV9TWU5USF9OX0NMS19UT19PVVRYX0VOLCAmdmFsKTsNCj4+ICsgICAgICAg aWYgKGVyciA8IDApDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gDQo+IFNob3Vs ZCByZXR1cm4gMCBmb3Igb2ZmIEkgc3VwcG9zZS4gT3VyICJmYWlsIHRvIHJlYWQgb24vb2ZmIiBs b2dpYyBpc24ndA0KPiByZWFsbHkgdGhlcmUuDQoNCm9rLCBJJ2xsIHJldHVybiAwIHRoZW4uDQoN Cj4gDQo+PiArDQo+PiArICAgICAgIGRldl9kYmcoJnN5bnRoLT5kYXRhLT5pMmNfY2xpZW50LT5k ZXYsICIlcygldSk6ICUjeFxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19f LCBpbmRleCwgdmFsKTsNCj4+ICsNCj4+ICsgICAgICAgaWYgKCEodmFsICYgQklUKGluZGV4KSkp DQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPj4gKw0KPj4gKyAgICAgICBlcnIg PSByZWdtYXBfcmVhZChzeW50aC0+ZGF0YS0+cmVnbWFwLCBTSTUzNDFfU1lOVEhfTl9QRE5CLCAm dmFsKTsNCj4+ICsgICAgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICAgICAgICAgcmV0dXJu IGVycjsNCj4gDQo+IFNhbSBjb21tZW50Lg0KPiANCj4+ICsNCj4+ICsgICAgICAgaWYgKCEodmFs ICYgQklUKGluZGV4KSkpDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiANCj4g ZmFsc2UgaXMgbm90IGludCwgYnV0IG9rLg0KPiANCj4+ICsNCj4+ICsgICAgICAgLyogVGhpcyBi aXQgbXVzdCBiZSAwIGZvciB0aGUgc3ludGhlc2l6ZXIgdG8gcmVjZWl2ZSBjbG9jayBpbnB1dCAq Lw0KPj4gKyAgICAgICBlcnIgPSByZWdtYXBfcmVhZChzeW50aC0+ZGF0YS0+cmVnbWFwLCBTSTUz NDFfU1lOVEhfTl9DTEtfRElTLCAmdmFsKTsNCj4+ICsgICAgICAgaWYgKGVyciA8IDApDQo+PiAr ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsgICAgICAgcmV0dXJuICEodmFs ICYgQklUKGluZGV4KSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHNpNTM0MV9zeW50 aF9jbGtfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KPj4gK3sNCj4+ICsgICAgICAgc3Ry dWN0IGNsa19zaTUzNDFfc3ludGggKnN5bnRoID0gdG9fY2xrX3NpNTM0MV9zeW50aChodyk7DQo+ PiArICAgICAgIHU4IGluZGV4ID0gc3ludGgtPmluZGV4Ow0KPj4gKyAgICAgICB1OCBtYXNrID0g QklUKGluZGV4KTsNCj4gDQo+IEkgaG9wZSB0aGF0IGluZGV4IGlzbid0IGxhcmdlIGNhdXNpbmcg b3ZlcmZsb3cgaGVyZS4NCg0KSW5kZXggaXMgaW4gcmFuZ2UgMC4uNA0KDQo+IA0KPj4gKw0KPj4g KyAgICAgICBkZXZfZGJnKCZzeW50aC0+ZGF0YS0+aTJjX2NsaWVudC0+ZGV2LCAiJXMoJXUpXG4i LCBfX2Z1bmNfXywgaW5kZXgpOw0KPj4gKw0KPj4gKyAgICAgICAvKiBEaXNhYmxlIG91dHB1dCAq Lw0KPj4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoc3ludGgtPmRhdGEtPnJlZ21hcCwNCj4+ ICsgICAgICAgICAgICAgICBTSTUzNDFfU1lOVEhfTl9DTEtfVE9fT1VUWF9FTiwgbWFzaywgMCk7 DQo+PiArICAgICAgIC8qIFBvd2VyIGRvd24gKi8NCj4+ICsgICAgICAgcmVnbWFwX3VwZGF0ZV9i aXRzKHN5bnRoLT5kYXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAgICAgICAgU0k1MzQxX1NZTlRI X05fUEROQiwgbWFzaywgMCk7DQo+PiArICAgICAgIC8qIERpc2FibGUgY2xvY2sgaW5wdXQgdG8g c3ludGggKHNldCB0byAxIHRvIGRpc2FibGUpICovDQo+PiArICAgICAgIHJlZ21hcF91cGRhdGVf Yml0cyhzeW50aC0+ZGF0YS0+cmVnbWFwLA0KPj4gKyAgICAgICAgICAgICAgIFNJNTM0MV9TWU5U SF9OX0NMS19ESVMsIG1hc2ssIG1hc2spOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IHNp NTM0MV9zeW50aF9jbGtfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCj4+ICt7DQo+PiArICAg ICAgIHN0cnVjdCBjbGtfc2k1MzQxX3N5bnRoICpzeW50aCA9IHRvX2Nsa19zaTUzNDFfc3ludGgo aHcpOw0KPj4gKyAgICAgICBpbnQgZXJyOw0KPj4gKyAgICAgICB1OCBpbmRleCA9IHN5bnRoLT5p bmRleDsNCj4+ICsgICAgICAgdTggbWFzayA9IEJJVChpbmRleCk7DQo+PiArDQo+PiArICAgICAg IGRldl9kYmcoJnN5bnRoLT5kYXRhLT5pMmNfY2xpZW50LT5kZXYsICIlcygldSlcbiIsIF9fZnVu Y19fLCBpbmRleCk7DQo+PiArDQo+PiArICAgICAgIC8qIFBvd2VyIHVwICovDQo+PiArICAgICAg IGVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhzeW50aC0+ZGF0YS0+cmVnbWFwLA0KPj4gKyAgICAg ICAgICAgICAgIFNJNTM0MV9TWU5USF9OX1BETkIsIG1hc2ssIG1hc2spOw0KPj4gKyAgICAgICBp ZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAg ICAgICAvKiBFbmFibGUgY2xvY2sgaW5wdXQgdG8gc3ludGggKHNldCBiaXQgdG8gMCB0byBlbmFi bGUpICovDQo+PiArICAgICAgIGVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhzeW50aC0+ZGF0YS0+ cmVnbWFwLA0KPj4gKyAgICAgICAgICAgICAgIFNJNTM0MV9TWU5USF9OX0NMS19ESVMsIG1hc2ss IDApOw0KPj4gKyAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4g ZXJyOw0KPj4gKw0KPj4gKyAgICAgICAvKiBFbmFibGUgb3V0cHV0ICovDQo+PiArICAgICAgIHJl dHVybiByZWdtYXBfdXBkYXRlX2JpdHMoc3ludGgtPmRhdGEtPnJlZ21hcCwNCj4+ICsgICAgICAg ICAgICAgICBTSTUzNDFfU1lOVEhfTl9DTEtfVE9fT1VUWF9FTiwgbWFzaywgbWFzayk7DQo+PiAr fQ0KPj4gKw0KPj4gKy8qIFN5bnRoIGNsb2NrIGZyZXF1ZW5jeTogRnZjbyAqIG5fZGVuIC8gbl9k ZW4sIHdpdGggRnZjbyBpbiAxMzUwMC0xNDI1NiBNSHogKi8NCj4+ICtzdGF0aWMgdW5zaWduZWQg bG9uZyBzaTUzNDFfc3ludGhfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KPj4g KyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpDQo+PiArew0KPj4gKyAg ICAgICBzdHJ1Y3QgY2xrX3NpNTM0MV9zeW50aCAqc3ludGggPSB0b19jbGtfc2k1MzQxX3N5bnRo KGh3KTsNCj4+ICsgICAgICAgdTY0IGY7DQo+PiArICAgICAgIHU2NCBuX251bTsNCj4+ICsgICAg ICAgdTMyIG5fZGVuOw0KPj4gKyAgICAgICBpbnQgZXJyOw0KPj4gKw0KPj4gKyAgICAgICBlcnIg PSBzaTUzNDFfZGVjb2RlXzQ0XzMyKHN5bnRoLT5kYXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICBTSTUzNDFfU1lOVEhfTl9OVU0oc3ludGgtPmluZGV4KSwgJm5fbnVtLCAm bl9kZW4pOw0KPj4gKyAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgICAgICAgICByZXR1 cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICAvKg0KPj4gKyAgICAgICAgKiBuX251bSBhbmQgbl9k ZW4gYXJlIHNoaWZ0ZWQgbGVmdCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBzbyB0byBwcmV2ZW50DQo+ PiArICAgICAgICAqIG92ZXJmbG93IGluIDY0LWJpdCBtYXRoLCB3ZSBzaGlmdCBuX2RlbiA0IGJp dHMgdG8gdGhlIHJpZ2h0DQo+PiArICAgICAgICAqLw0KPj4gKyAgICAgICBmID0gc3ludGgtPmRh dGEtPmZyZXFfdmNvOw0KPj4gKyAgICAgICBmICo9IChuX2RlbiA+PiA0KTsNCj4gDQo+IERvIHdl IG5lZWQgdGhlc2UgcGFyZW50aGVzaXM/IE1heWJlIG5fZGVuID4+PSA0IHNob3VsZCBwcmVjZWRl ZCB0aGlzDQo+IGxpbmUuDQoNCkknbGwgcmVtb3ZlIHRoZSBwYXJlbnRoZXNpcw0KDQo+IA0KPj4g Kw0KPj4gKyAgICAgICAvKiBOb3cgd2UgbmVlZCB0byB0byA2NC1iaXQgZGl2aXNpb246IGYvbl9u dW0gKi8NCj4+ICsgICAgICAgLyogQW5kIGNvbXBlbnNhdGUgZm9yIHRoZSA0IGJpdHMgd2UgZHJv cHBlZCAqLw0KPj4gKyAgICAgICBmID0gZGl2NjRfdTY0KGYsIChuX251bSA+PiA0KSk7DQo+PiAr DQo+PiArICAgICAgIGRldl9kYmcoJnN5bnRoLT5kYXRhLT5pMmNfY2xpZW50LT5kZXYsDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAiJXMoJXUpIHA9JWx1IG49MHglbGx4IGQ9MHgleCBmPSVs bHVcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgc3ludGgtPmluZGV4 LCBwYXJlbnRfcmF0ZSwgbl9udW0sIG5fZGVuLCBmKTsNCj4+ICsNCj4+ICsgICAgICAgcmV0dXJu ICh1bnNpZ25lZCBsb25nKWY7DQo+IA0KPiBEcm9wIHVzZWxlc3MgY2FzdCBwbGVhc2UuDQo+IA0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgbG9uZyBzaTUzNDFfc3ludGhfY2xrX3JvdW5kX3JhdGUo c3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwNCj4+ICsgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCBj bGtfc2k1MzQxX3N5bnRoICpzeW50aCA9IHRvX2Nsa19zaTUzNDFfc3ludGgoaHcpOw0KPj4gKyAg ICAgICB1NjQgZjsNCj4+ICsNCj4+ICsgICAgICAgZGV2X2RiZygmc3ludGgtPmRhdGEtPmkyY19j bGllbnQtPmRldiwgIiVzKCV1KSByPSVsdSBwPSVsdVxuIiwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fLCBzeW50aC0+aW5kZXgsIHJhdGUsICpwYXJlbnRfcmF0ZSk7DQo+PiAr DQo+PiArICAgICAgIC8qIFRoZSBzeW50aGVzaXplciBhY2N1cmFjeSBpcyBzdWNoIHRoYXQgYW55 dGhpbmcgaW4gcmFuZ2Ugd2lsbCB3b3JrICovDQo+PiArICAgICAgIGYgPSBzeW50aC0+ZGF0YS0+ ZnJlcV92Y287DQo+PiArICAgICAgIGRvX2RpdihmLCBTSTUzNDFfU1lOVEhfTl9NQVgpOw0KPj4g KyAgICAgICBpZiAocmF0ZSA8ICh1bnNpZ25lZCBsb25nKWYpDQo+IA0KPiBXaHkgYXJlIHdlIGNh c3RpbmcgZiB0byB1bnNpZ25lZCBsb25nPw0KDQoiZiIgd2lsbCBiZSBpbiAzMi1iaXQgcmFuZ2Ug YWZ0ZXIgdGhlIGRpdmlzaW9uLCBzbyBJIHdhbnQgdG8gcHJldmVudCBhIDY0LWJpdCANCmNvbXBh cmUgb24gMzItYml0IHBsYXRmb3Jtcy4NCg0KPiANCj4+ICsgICAgICAgICAgICAgICByZXR1cm4g KGxvbmcpZjsNCj4gDQo+IERyb3AgY2FzdD8NCg0Kb2sNCg0KPiANCj4+ICsNCj4+ICsgICAgICAg ZiA9IHN5bnRoLT5kYXRhLT5mcmVxX3ZjbzsNCj4+ICsgICAgICAgZG9fZGl2KGYsIFNJNTM0MV9T WU5USF9OX01JTik7DQo+PiArICAgICAgIGlmIChyYXRlID4gKHVuc2lnbmVkIGxvbmcpZikNCj4+ ICsgICAgICAgICAgICAgICByZXR1cm4gKGxvbmcpZjsNCj4gDQo+IERyb3AgY2FzdD8gT3IgbWFr ZSByYXRlID0gZj8NCj4gDQo+PiArDQo+PiArICAgICAgIHJldHVybiAobG9uZylyYXRlOw0KPiAN Cj4gRHJvcCBjYXN0Pw0KPiANCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBzaTUzNDFfc3lu dGhfcHJvZ3JhbShzdHJ1Y3QgY2xrX3NpNTM0MV9zeW50aCAqc3ludGgsDQo+PiArICAgICAgIHU2 NCBuX251bSwgdTMyIG5fZGVuLCBib29sIGlzX2ludGVnZXIpDQo+PiArew0KPj4gKyAgICAgICBp bnQgZXJyOw0KPj4gKyAgICAgICB1OCBpbmRleCA9IHN5bnRoLT5pbmRleDsNCj4+ICsNCj4+ICsg ICAgICAgZXJyID0gc2k1MzQxX2VuY29kZV80NF8zMihzeW50aC0+ZGF0YS0+cmVnbWFwLA0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgU0k1MzQxX1NZTlRIX05fTlVNKGluZGV4KSwgbl9udW0s IG5fZGVuKTsNCj4+ICsNCj4+ICsgICAgICAgLyogU2V0IHRoZSBiaXQgdGhhdCBpbmRpY2F0ZXMg aWYgdGhlIGZyYWN0aW9uIGlzIGludGVnZXIgKi8NCj4gDQo+IFVzZWxlc3MgY29tbWVudC4NCj4g DQo+PiArICAgICAgIGVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhzeW50aC0+ZGF0YS0+cmVnbWFw LA0KPj4gKyAgICAgICAgICAgICAgIFNJNTM0MV9TWU5USF9OX1BJQllQLCBCSVQoaW5kZXgpLCBp c19pbnRlZ2VyID8gQklUKGluZGV4KSA6IDApOw0KPj4gKyAgICAgICBpZiAoZXJyIDwgMCkNCj4+ ICsgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICAvKiBXcml0ZSB0 byB0aGUgdXBkYXRlIGJpdCB0byBtYWtlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgKi8NCj4gDQo+ IFVzZWxlc3MgY29tbWVudD8NCj4gDQo+PiArICAgICAgIHJldHVybiByZWdtYXBfd3JpdGUoc3lu dGgtPmRhdGEtPnJlZ21hcCwNCj4+ICsgICAgICAgICAgICAgICBTSTUzNDFfU1lOVEhfTl9VUEQo aW5kZXgpLCAweDAxKTsNCj4+ICt9DQo+PiArDQo+PiArDQo+PiArc3RhdGljIGludCBzaTUzNDFf c3ludGhfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUs DQo+PiArICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCj4+ICt7DQo+ PiArICAgICAgIHN0cnVjdCBjbGtfc2k1MzQxX3N5bnRoICpzeW50aCA9IHRvX2Nsa19zaTUzNDFf c3ludGgoaHcpOw0KPj4gKyAgICAgICB1NjQgbl9udW07DQo+PiArICAgICAgIHUzMiBuX2RlbjsN Cj4+ICsgICAgICAgdTMyIHI7DQo+PiArICAgICAgIHUzMiBnOw0KPj4gKyAgICAgICBib29sIGlz X2ludGVnZXI7DQo+PiArDQo+PiArICAgICAgIGRldl9kYmcoJnN5bnRoLT5kYXRhLT5pMmNfY2xp ZW50LT5kZXYsICIlcygldSkgcj0lbHUgcD0lbHVcbiIsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgc3ludGgtPmluZGV4LCByYXRlLCBwYXJlbnRfcmF0ZSk7DQo+PiArDQo+ PiArICAgICAgIC8qIG9idmlvdXMgc29sdXRpb24gKi8NCj4gDQo+IFdoYXQ/DQo+IA0KPj4gKyAg ICAgICBuX251bSA9IHN5bnRoLT5kYXRhLT5mcmVxX3ZjbzsNCj4+ICsgICAgICAgbl9kZW4gPSBy YXRlOw0KPj4gKw0KPj4gKyAgICAgICAvKiBzZWUgaWYgdGhlcmUncyBhbiBpbnRlZ2VyIHNvbHV0 aW9uICovDQo+PiArICAgICAgIHIgPSBkb19kaXYobl9udW0sIHJhdGUpOw0KPj4gKyAgICAgICBp c19pbnRlZ2VyID0gKHIgPT0gMCk7DQo+PiArICAgICAgIGlmIChpc19pbnRlZ2VyKSB7DQo+PiAr ICAgICAgICAgICAgICAgLyogSW50ZWdlciBkaXZpZGVyIGVxdWFsIHRvIG5fbnVtICovDQo+PiAr ICAgICAgICAgICAgICAgbl9kZW4gPSAxOw0KPj4gKyAgICAgICB9IGVsc2Ugew0KPj4gKyAgICAg ICAgICAgICAgIC8qIENhbGN1bGF0ZSBhIGZyYWN0aW9uYWwgc29sdXRpb24gKi8NCj4+ICsgICAg ICAgICAgICAgICBnID0gZ2NkKHIsIHJhdGUpOw0KPj4gKyAgICAgICAgICAgICAgIG5fZGVuID0g cmF0ZSAvIGc7DQo+PiArICAgICAgICAgICAgICAgbl9udW0gKj0gbl9kZW47DQo+PiArICAgICAg ICAgICAgICAgbl9udW0gKz0gciAvIGc7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAg ZGV2X2RiZygmc3ludGgtPmRhdGEtPmkyY19jbGllbnQtPmRldiwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICIlcygldSk6IG49MHglbGx4IGQ9MHgleCAlc1xuIiwgX19mdW5jX18sDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRoLT5pbmRleCwgbl9udW0sIG5fZGVu LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbnRlZ2VyID8gImludCIg OiAiZnJhYyIpOw0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gc2k1MzQxX3N5bnRoX3Byb2dyYW0o c3ludGgsIG5fbnVtLCBuX2RlbiwgaXNfaW50ZWdlcik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzaTUzNDFfc3ludGhfY2xrX29wcyA9IHsNCj4+ICsgICAg ICAgLmlzX3ByZXBhcmVkID0gc2k1MzQxX3N5bnRoX2Nsa19pc19vbiwNCj4+ICsgICAgICAgLnBy ZXBhcmUgPSBzaTUzNDFfc3ludGhfY2xrX3ByZXBhcmUsDQo+PiArICAgICAgIC51bnByZXBhcmUg PSBzaTUzNDFfc3ludGhfY2xrX3VucHJlcGFyZSwNCj4+ICsgICAgICAgLnJlY2FsY19yYXRlID0g c2k1MzQxX3N5bnRoX2Nsa19yZWNhbGNfcmF0ZSwNCj4+ICsgICAgICAgLnJvdW5kX3JhdGUgPSBz aTUzNDFfc3ludGhfY2xrX3JvdW5kX3JhdGUsDQo+PiArICAgICAgIC5zZXRfcmF0ZSA9IHNpNTM0 MV9zeW50aF9jbGtfc2V0X3JhdGUsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50IHNpNTM0 MV9vdXRwdXRfY2xrX2lzX29uKHN0cnVjdCBjbGtfaHcgKmh3KQ0KPj4gK3sNCj4+ICsgICAgICAg c3RydWN0IGNsa19zaTUzNDFfb3V0cHV0ICpvdXRwdXQgPSB0b19jbGtfc2k1MzQxX291dHB1dCho dyk7DQo+PiArICAgICAgIGludCBlcnI7DQo+PiArICAgICAgIHUzMiB2YWw7DQo+PiArDQo+PiAr ICAgICAgIGVyciA9IHJlZ21hcF9yZWFkKG91dHB1dC0+ZGF0YS0+cmVnbWFwLA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgU0k1MzQxX09VVF9DT05GSUcob3V0cHV0KSwgJnZhbCk7DQo+PiAr ICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQoNCkkg Z3Vlc3MgdGhhdCBJIGNhbm5vdCByZXR1cm4gZXJyb3JzIGhlcmUNCg0KPj4gKw0KPj4gKyAgICAg ICBkZXZfZGJnKCZvdXRwdXQtPmRhdGEtPmkyY19jbGllbnQtPmRldiwgIiVzKCV1KTogJSN4XG4i LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG91dHB1dC0+aW5kZXgsIHZh bCk7DQo+PiArDQo+PiArICAgICAgIC8qIEJpdCAwPVBETiwgMT1PRSBzbyBvbmx5IGEgdmFsdWUg b2YgMHgyIGVuYWJsZXMgdGhlIG91dHB1dCAqLw0KPj4gKyAgICAgICByZXR1cm4gKHZhbCAmIDB4 MDMpID09IFNJNTM0MV9PVVRfQ0ZHX09FOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBz aTUzNDFfb3V0cHV0X2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQo+PiArew0KPj4g KyAgICAgICBzdHJ1Y3QgY2xrX3NpNTM0MV9vdXRwdXQgKm91dHB1dCA9IHRvX2Nsa19zaTUzNDFf b3V0cHV0KGh3KTsNCj4+ICsNCj4+ICsgICAgICAgZGV2X2RiZygmb3V0cHV0LT5kYXRhLT5pMmNf Y2xpZW50LT5kZXYsICIlcygldSlcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBfX2Z1 bmNfXywgb3V0cHV0LT5pbmRleCk7DQo+PiArDQo+PiArICAgICAgIC8qIERpc2FibGUgYW5kIHRo ZW4gcG93ZXIgZG93biB0aGUgb3V0cHV0ICovDQo+PiArICAgICAgIHJlZ21hcF91cGRhdGVfYml0 cyhvdXRwdXQtPmRhdGEtPnJlZ21hcCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFNJNTM0 MV9PVVRfQ09ORklHKG91dHB1dCksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBTSTUzNDFf T1VUX0NGR19PRSwgMCk7DQo+PiArICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhvdXRwdXQtPmRh dGEtPnJlZ21hcCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFNJNTM0MV9PVVRfQ09ORklH KG91dHB1dCksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBTSTUzNDFfT1VUX0NGR19QRE4s IFNJNTM0MV9PVVRfQ0ZHX1BETik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgc2k1MzQx X291dHB1dF9jbGtfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCj4+ICt7DQo+PiArICAgICAg IHN0cnVjdCBjbGtfc2k1MzQxX291dHB1dCAqb3V0cHV0ID0gdG9fY2xrX3NpNTM0MV9vdXRwdXQo aHcpOw0KPj4gKyAgICAgICBpbnQgZXJyOw0KPj4gKw0KPj4gKyAgICAgICBkZXZfZGJnKCZvdXRw dXQtPmRhdGEtPmkyY19jbGllbnQtPmRldiwgIiVzKCV1KVxuIiwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCBvdXRwdXQtPmluZGV4KTsNCj4gDQo+IENhbiB5b3UganVzdCB1 c2UgdGhlIHRyYWNlcG9pbnRzIGluIGNsayBmcmFtZXdvcms/IFRoZXNlIHByaW50cyBhcmUNCj4g cmVhbGx5IGNsdXR0ZXJpbmcgdGhlIGNvZGUgdXAgbWFraW5nIGl0IGhhcmQgdG8gc2VlIHdoYXQn cyBnb2luZyBvbi4NCg0KSSdkIGhhdmUgdG8gZmlndXJlIG91dCBhYm91dCB3aGF0IHRob3NlIGFy ZS4NCg0KSSBjYW4gc2ltcGx5IHJlbW92ZSB0aGVtLCB0aGV5IHdlcmUgdXNlZnVsIGR1cmluZyBk ZXZlbG9wbWVudCBidXQgcHJvYmFibHkgDQpvdXRsaXZlZCB0aGVpciBwdXJwb3NlIG5vdy4NCg0K PiANCj4+ICsNCj4+ICsgICAgICAgLyogUG93ZXIgdXAgZmlyc3QsIHRoZW4gZW5hYmxlIHRoZSBv dXRwdXQgKi8NCj4gDQo+IFRoaXMgY29tbWVudCBjb3VsZCBjb21lIGFib3ZlIHRoZSBmdW5jdGlv biBpbnN0ZWFkIG9mIGlubGluZS4NCg0Kb2sNCg0KPiANCj4+ICsgICAgICAgZXJyID0gcmVnbWFw X3VwZGF0ZV9iaXRzKG91dHB1dC0+ZGF0YS0+cmVnbWFwLA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgU0k1MzQxX09VVF9DT05GSUcob3V0cHV0KSwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIFNJNTM0MV9PVVRfQ0ZHX1BETiwgMCk7DQo+PiArICAgICAgIGlmIChlcnIgPCAwKQ0KPj4g KyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+PiArDQo+PiArICAgICAgIHJldHVybiByZWdt YXBfdXBkYXRlX2JpdHMob3V0cHV0LT5kYXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICBTSTUzNDFfT1VUX0NPTkZJRyhvdXRwdXQpLA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgU0k1MzQxX09VVF9DRkdfT0UsIFNJNTM0MV9PVVRfQ0ZHX09FKTsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgc2k1MzQxX291dHB1dF9jbGtfcmVjYWxjX3JhdGUo c3RydWN0IGNsa19odyAqaHcsDQo+PiArICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYXJl bnRfcmF0ZSkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCBjbGtfc2k1MzQxX291dHB1dCAqb3V0 cHV0ID0gdG9fY2xrX3NpNTM0MV9vdXRwdXQoaHcpOw0KPj4gKyAgICAgICBpbnQgZXJyOw0KPj4g KyAgICAgICB1MzIgdmFsOw0KPj4gKyAgICAgICB1MzIgcl9kaXZpZGVyOw0KPj4gKyAgICAgICB1 OCByWzNdOw0KPj4gKw0KPj4gKyAgICAgICBlcnIgPSByZWdtYXBfcmVhZChvdXRwdXQtPmRhdGEt PnJlZ21hcCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFNJNTM0MV9PVVRfQ09ORklHKG91 dHB1dCksICZ2YWwpOw0KPj4gKyAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgICAgICAg ICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICAvKiBJZiBiaXQoMikgaXMgc2V0LCB0aGUg ZGl2aWRlciBpcyBmb3JjaWJseSBzZXQgdG8gIjIiICovDQo+IA0KPiBUaGF0J3Mgb2J2aW91cyBm cm9tIHRoZSBjb2RlLg0KPiANCj4+ICsgICAgICAgaWYgKHZhbCAmIFNJNTM0MV9PVVRfQ0ZHX1JE SVZfRk9SQ0UyKSB7DQo+PiArICAgICAgICAgICAgICAgcl9kaXZpZGVyID0gMjsNCj4+ICsgICAg ICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICBlcnIgPSByZWdtYXBfYnVsa19yZWFkKG91 dHB1dC0+ZGF0YS0+cmVnbWFwLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT STUzNDFfT1VUX1JfUkVHKG91dHB1dCksIHIsIDMpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChl cnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4+ICsNCj4+ ICsgICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgdmFsdWUgYXMgMjQtYml0IGludGVnZXIsIChS eF9SRUcrMSl4MiAqLw0KPj4gKyAgICAgICAgICAgICAgIHJfZGl2aWRlciA9ICgoclsyXSA8PCAx NiB8IHJbMV0gPDwgOCB8IHJbMF0pICsgMSkgPDwgMTsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4g KyAgICAgICBkZXZfZGJnKCZvdXRwdXQtPmRhdGEtPmkyY19jbGllbnQtPmRldiwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICIlcygldSk6IHA9JWx1IHJkPSV1ICVsdVxuIiwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBvdXRwdXQtPmluZGV4LCBwYXJlbnRfcmF0ZSwN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJfZGl2aWRlciwgcGFyZW50X3JhdGUgLyByX2Rp dmlkZXIpOw0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gcGFyZW50X3JhdGUgLyByX2RpdmlkZXI7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBsb25nIHNpNTM0MV9vdXRwdXRfY2xrX3JvdW5kX3Jh dGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwNCj4+ICsgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVj dCBjbGtfc2k1MzQxX291dHB1dCAqb3V0cHV0ID0gdG9fY2xrX3NpNTM0MV9vdXRwdXQoaHcpOw0K Pj4gKyAgICAgICB1bnNpZ25lZCBsb25nIHI7DQo+PiArDQo+PiArICAgICAgIGRldl9kYmcoJm91 dHB1dC0+ZGF0YS0+aTJjX2NsaWVudC0+ZGV2LCAiJXMoJXUpOiAlbHVcbiIsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgb3V0cHV0LT5pbmRleCwgcmF0ZSk7DQo+PiArDQo+ PiArICAgICAgIHIgPSAqcGFyZW50X3JhdGUgPj4gMTsNCj4+ICsNCj4+ICsgICAgICAgLyogSWYg cmF0ZSBpcyBhbiBldmVuIGRpdmlzb3IsIG5vIGNoYW5nZXMgdG8gcGFyZW50IHJlcXVpcmVkICov DQo+PiArICAgICAgIGlmIChyICYmICEociAlIHJhdGUpKQ0KPj4gKyAgICAgICAgICAgICAgIHJl dHVybiAobG9uZylyYXRlOw0KPj4gKw0KPj4gKyAgICAgICBpZiAoY2xrX2h3X2dldF9mbGFncyho dykgJiBDTEtfU0VUX1JBVEVfUEFSRU5UKSB7DQo+PiArICAgICAgICAgICAgICAgaWYgKHJhdGUg PiAyMDAwMDAwMDApDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIHItZGl2 aWRlciBpcyAyICovDQo+PiArICAgICAgICAgICAgICAgICAgICAgICByID0gMjsNCj4+ICsgICAg ICAgICAgICAgICBlbHNlDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAvKiBUYWtlIGEgcGFy ZW50IGZyZXF1ZW5jeSBuZWFyIDQwMCBNSHogKi8NCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IHIgPSAoNDAwMDAwMDAwdSAvIHJhdGUpICYgfjE7DQo+IA0KPiBTdHlsZTogUGxlYXNlIGVuY2xv c2UgaW4gYnJhY2VzIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBsaW5lLA0KPiByZWdhcmRsZXNz IG9mIGNvbW1lbnQgYmVpbmcgb25lIG9mIHRob3NlIGxpbmVzIG9yIG5vdC4NCj4gDQo+PiArICAg ICAgICAgICAgICAgKnBhcmVudF9yYXRlID0gciAqIHJhdGU7DQo+PiArICAgICAgIH0gZWxzZSB7 DQo+PiArICAgICAgICAgICAgICAgLyogV2UgY2Fubm90IGNoYW5nZSBvdXIgcGFyZW50J3MgcmF0 ZSwgcmVwb3J0IHdoYXQgd2UgY2FuIGRvICovDQo+PiArICAgICAgICAgICAgICAgciAvPSByYXRl Ow0KPj4gKyAgICAgICAgICAgICAgIHJhdGUgPSAqcGFyZW50X3JhdGUgLyAociA8PCAxKTsNCj4+ ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gKGxvbmcpcmF0ZTsNCj4gDQo+IFBs ZWFzZSBkcm9wIHVzZWxlc3MgY2FzdC4NCj4gDQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQg c2k1MzQxX291dHB1dF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxv bmcgcmF0ZSwNCj4+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0K Pj4gK3sNCj4+ICsgICAgICAgc3RydWN0IGNsa19zaTUzNDFfb3V0cHV0ICpvdXRwdXQgPSB0b19j bGtfc2k1MzQxX291dHB1dChodyk7DQo+PiArICAgICAgIC8qIEZyZXF1ZW5jeSBkaXZpZGVyIGlz IChyX2RpdiArIDEpICogMiAqLw0KPj4gKyAgICAgICB1MzIgcl9kaXYgPSAocGFyZW50X3JhdGUg LyByYXRlKSA+PiAxOw0KPj4gKyAgICAgICBpbnQgZXJyOw0KPj4gKyAgICAgICB1OCByWzNdOw0K Pj4gKw0KPj4gKyAgICAgICBpZiAocl9kaXYgPD0gMSkNCj4+ICsgICAgICAgICAgICAgICByX2Rp diA9IDA7DQo+PiArICAgICAgIGVsc2UgaWYgKHJfZGl2ID49IEJJVCgyNCkpDQo+PiArICAgICAg ICAgICAgICAgcl9kaXYgPSBCSVQoMjQpIC0gMTsNCj4+ICsgICAgICAgZWxzZQ0KPj4gKyAgICAg ICAgICAgICAgIC0tcl9kaXY7DQo+PiArDQo+PiArICAgICAgIC8qIEZvciBhIHZhbHVlIG9mICIy Iiwgd2Ugc2V0IHRoZSAiT1VUMF9SRElWX0ZPUkNFMiIgYml0ICovDQo+PiArICAgICAgIGVyciA9 IHJlZ21hcF91cGRhdGVfYml0cyhvdXRwdXQtPmRhdGEtPnJlZ21hcCwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIFNJNTM0MV9PVVRfQ09ORklHKG91dHB1dCksDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICBTSTUzNDFfT1VUX0NGR19SRElWX0ZPUkNFMiwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIChyX2RpdiA9PSAwKSA/IFNJNTM0MV9PVVRfQ0ZHX1JESVZfRk9SQ0UyIDogMCk7 DQo+PiArICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7 DQo+PiArDQo+PiArICAgICAgIC8qIEp1c3QgYWx3YXlzIHdyaXRlIHRoZSBSX1JFRyAqLw0KPj4g KyAgICAgICByWzBdID0gcl9kaXYgJiAweGZmOw0KPj4gKyAgICAgICByWzFdID0gKHJfZGl2ID4+ IDgpICYgMHhmZjsNCj4+ICsgICAgICAgclsyXSA9IChyX2RpdiA+PiAxNikgJiAweGZmOw0KPj4g KyAgICAgICBlcnIgPSByZWdtYXBfYnVsa193cml0ZShvdXRwdXQtPmRhdGEtPnJlZ21hcCwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIFNJNTM0MV9PVVRfUl9SRUcob3V0cHV0KSwgciwgMyk7 DQo+PiArDQo+PiArICAgICAgIGRldl9kYmcoJm91dHB1dC0+ZGF0YS0+aTJjX2NsaWVudC0+ZGV2 LCAiJXMoJXUpOiByPSVsdSBwPSVsdSByZD0ldVxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fLCBvdXRwdXQtPmluZGV4LCByYXRlLCBwYXJlbnRfcmF0ZSwgcl9kaXYpOw0K Pj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBz aTUzNDFfb3V0cHV0X3JlcGFyZW50KHN0cnVjdCBjbGtfc2k1MzQxX291dHB1dCAqb3V0cHV0LCB1 OCBpbmRleCkNCj4+ICt7DQo+PiArICAgICAgIHJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMob3V0 cHV0LT5kYXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAgICAgICAgU0k1MzQxX09VVF9NVVhfU0VM KG91dHB1dCksIDB4MDcsIGluZGV4KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBzaTUz NDFfb3V0cHV0X3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KQ0KPj4gK3sN Cj4+ICsgICAgICAgc3RydWN0IGNsa19zaTUzNDFfb3V0cHV0ICpvdXRwdXQgPSB0b19jbGtfc2k1 MzQxX291dHB1dChodyk7DQo+PiArDQo+PiArICAgICAgIGRldl9kYmcoJm91dHB1dC0+ZGF0YS0+ aTJjX2NsaWVudC0+ZGV2LCAiJXMoJXUpOiBOJXVcbiIsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgb3V0cHV0LT5pbmRleCwgaW5kZXgpOw0KPj4gKw0KPj4gKyAgICAgICBp ZiAoaW5kZXggPj0gb3V0cHV0LT5kYXRhLT5udW1fc3ludGgpDQo+PiArICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArICAgICAgIHJldHVybiBzaTUzNDFfb3V0cHV0X3Jl cGFyZW50KG91dHB1dCwgaW5kZXgpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdTggc2k1MzQx X291dHB1dF9nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQ0KPj4gK3sNCj4+ICsgICAgICAg c3RydWN0IGNsa19zaTUzNDFfb3V0cHV0ICpvdXRwdXQgPSB0b19jbGtfc2k1MzQxX291dHB1dCho dyk7DQo+PiArICAgICAgIGludCBlcnI7DQo+PiArICAgICAgIHUzMiB2YWw7DQo+PiArDQo+PiAr ICAgICAgIGVyciA9IHJlZ21hcF9yZWFkKG91dHB1dC0+ZGF0YS0+cmVnbWFwLA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgU0k1MzQxX09VVF9NVVhfU0VMKG91dHB1dCksICZ2YWwpOw0KPj4g Kw0KPj4gKyAgICAgICBkZXZfZGJnKCZvdXRwdXQtPmRhdGEtPmkyY19jbGllbnQtPmRldiwgIiVz KCV1KTogTiV1XG4iLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG91dHB1 dC0+aW5kZXgsIHZhbCAmIDB4Nyk7DQo+PiArDQo+PiArICAgICAgIHJldHVybiB2YWwgJiAweDc7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzaTUzNDFfb3V0 cHV0X2Nsa19vcHMgPSB7DQo+PiArICAgICAgIC5pc19wcmVwYXJlZCA9IHNpNTM0MV9vdXRwdXRf Y2xrX2lzX29uLA0KPj4gKyAgICAgICAucHJlcGFyZSA9IHNpNTM0MV9vdXRwdXRfY2xrX3ByZXBh cmUsDQo+PiArICAgICAgIC51bnByZXBhcmUgPSBzaTUzNDFfb3V0cHV0X2Nsa191bnByZXBhcmUs DQo+PiArICAgICAgIC5yZWNhbGNfcmF0ZSA9IHNpNTM0MV9vdXRwdXRfY2xrX3JlY2FsY19yYXRl LA0KPj4gKyAgICAgICAucm91bmRfcmF0ZSA9IHNpNTM0MV9vdXRwdXRfY2xrX3JvdW5kX3JhdGUs DQo+PiArICAgICAgIC5zZXRfcmF0ZSA9IHNpNTM0MV9vdXRwdXRfY2xrX3NldF9yYXRlLA0KPj4g KyAgICAgICAuc2V0X3BhcmVudCA9IHNpNTM0MV9vdXRwdXRfc2V0X3BhcmVudCwNCj4+ICsgICAg ICAgLmdldF9wYXJlbnQgPSBzaTUzNDFfb3V0cHV0X2dldF9wYXJlbnQsDQo+PiArfTsNCj4+ICsN Cj4+ICsvKiBDYWxsZWQgYnkgcHJvYmUsIGJlZm9yZSBvdXRwdXQgaXMgYWN0dWFsbHkgcmVnaXN0 ZXJlZCAqLw0KPj4gK3N0YXRpYyBpbnQgc2k1MzQxX291dHB1dF9zZXRfcGFyZW50X2FuZF9mcmVx KA0KPj4gKyAgICAgICBzdHJ1Y3QgY2xrX3NpNTM0MV9vdXRwdXQgKm91dHB1dCwgdTggaW5kZXgs IHUzMiBwYXJlbnRfcmF0ZSkNCj4+ICt7DQo+PiArICAgICAgIGludCBlcnI7DQo+PiArDQo+PiAr ICAgICAgIGlmIChpbmRleCA8IG91dHB1dC0+ZGF0YS0+bnVtX3N5bnRoKSB7DQo+PiArICAgICAg ICAgICAgICAgZXJyID0gc2k1MzQxX291dHB1dF9yZXBhcmVudChvdXRwdXQsIGluZGV4KTsNCj4g DQo+IE1heWJlIHRoaXMgY2FuIGJlIGRvbmUgdmlhIGFzc2lnbmVkLWNsb2NrLXBhcmVudHM/DQoN Ck1heWJlLCBJJ2QgaGF2ZSB0byBleHBvc2UgdGhlICJzeW50aCIgY2xvY2tzIHRvIHRoZSBkZXZp Y2V0cmVlIGZvciB0aGF0LiANClRoYXQnbGwgYmUgYW4gaW1wcm92ZW1lbnQgYW55d2F5Lg0KDQpT ZWUgYWxzbyBteSBjb21tZW50cyBpbiB0aGUgZGV2aWNldHJlZSBwYXRjaCBtYWlsLg0KDQo+IA0K Pj4gKyAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGVycjsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICBpZiAocGFyZW50 X3JhdGUpIHsNCj4+ICsgICAgICAgICAgICAgICBpbmRleCA9IHNpNTM0MV9vdXRwdXRfZ2V0X3Bh cmVudCgmb3V0cHV0LT5odyk7DQo+PiArICAgICAgICAgICAgICAgZXJyID0gY2xrX3NldF9yYXRl KG91dHB1dC0+ZGF0YS0+c3ludGhbaW5kZXhdLmh3LmNsaywNCj4gDQo+IEFuZCBhc3NpZ25lZC1j bG9jay1yYXRlcy4NCj4gDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu dF9yYXRlKTsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gZXJyOw0KPj4g K30NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIFRoZSBjaGlwIGNhbiBiZSBib3VnaHQgaW4gYSBwcmUt cHJvZ3JhbW1lZCB2ZXJzaW9uLCBvciBvbmUgY2FuIHByb2dyYW0gdGhlDQo+PiArICogTlZNIGlu IHRoZSBjaGlwIHRvIGJvb3QgdXAgaW4gYSBwcmVzZXQgbW9kZS4gVGhpcyByb3V0aW5lIHRyaWVz IHRvIGRldGVybWluZQ0KPj4gKyAqIGlmIHRoYXQncyB0aGUgY2FzZSwgb3IgaWYgd2UgbmVlZCB0 byByZXNldCBhbmQgcHJvZ3JhbSBldmVyeXRoaW5nIGZyb20NCj4+ICsgKiBzY3JhdGNoLiBSZXR1 cm5zIG5lZ2F0aXZlIGVycm9yLCBvciB0cnVlL2ZhbHNlLg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBp bnQgc2k1MzQxX2lzX3Byb2dyYW1tZWRfYWxyZWFkeShzdHJ1Y3QgY2xrX3NpNTM0MSAqZGF0YSkN Cj4+ICt7DQo+PiArICAgICAgIGludCBlcnI7DQo+PiArICAgICAgIHUzMiB2Ow0KPj4gKyAgICAg ICB1OCByWzRdOw0KPj4gKyAgICAgICB1OCBpOw0KPj4gKw0KPj4gKyAgICAgICBlcnIgPSByZWdt YXBfcmVhZChkYXRhLT5yZWdtYXAsIDB4MDBFMiwgJnYpOw0KPj4gKyAgICAgICBpZiAoZXJyIDwg MCkNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICAvKiBS ZWFkIHRoZSBQTEwgZGl2aWRlciB2YWx1ZSwgaXQgbXVzdCBoYXZlIGEgbm9uLXplcm8gdmFsdWUg Ki8NCj4+ICsgICAgICAgZXJyID0gcmVnbWFwX2J1bGtfcmVhZChkYXRhLT5yZWdtYXAsIFNJNTM0 MV9QTExfTV9ERU4sIHIsIDQpOw0KPj4gKyAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAg ICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICBkZXZfZGJnKCZkYXRhLT5pMmNf Y2xpZW50LT5kZXYsICIlczogJSN4IG1kPSUjeFxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fLCB2LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgclszXSA8PCAyNCB8 IHJbMl0gPDwgMTYgfCByWzFdIDw8IDggfCByWzBdKTsNCj4gDQo+IFRoZXJlIGlzbid0IGEgbWFj cm8gZm9yIHRoaXMgYnl0ZSB0byB3b3JkPyBnZXRfdW5hbGlnbmVkX2xlMzIoKT8NCg0KSSdtIGp1 c3QgZ2V0dGluZyBvbGQgOikgSSd2ZSBiZWVuIHR5cGluZyB0aGlzIGZvciB5ZWFycyBub3cuLi4N Cg0KPiANCj4+ICsNCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkNCj4+ICsgICAg ICAgICAgICAgICBpZiAocltpXSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0 cnVlOw0KPiANCj4gVGhpcyBmb3IgbG9vcCBjb3VsZCBqdXN0IGJlICdjb252ZXJ0IHIgaW50byB1 MzI7IHByaW50IGl0OyB0ZXN0IGl0IGZvciAwJy4NCj4gDQo+PiArDQo+PiArICAgICAgIHJldHVy biBmYWxzZTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBjbGtfaHcgKm9mX2Nsa19z aTUzNDFfZ2V0KA0KPj4gKyAgICAgICBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpjbGtzcGVjLCB2 b2lkICpfZGF0YSkNCj4gDQo+IFBsZWFzZSBmaXggdGhpcyBzdHlsZToNCj4gDQo+IHN0YXRpYyBz dHJ1Y3QgY2xrX2h3ICoNCj4gb2ZfY2xrX3NpNTM0MV9nZXQoc3RydWN0IG9mX3BoYW5kbGVfYXJn cyAqY2xrc3BlYywgdm9pZCAqX2RhdGEpDQoNCm9rDQoNCj4gDQo+PiArew0KPj4gKyAgICAgICBz dHJ1Y3QgY2xrX3NpNTM0MSAqZGF0YSA9IF9kYXRhOw0KPj4gKyAgICAgICB1bnNpZ25lZCBpbnQg aWR4ID0gY2xrc3BlYy0+YXJnc1swXTsNCj4+ICsNCj4+ICsgICAgICAgaWYgKGlkeCA+PSBkYXRh LT5udW1fb3V0cHV0cykgew0KPj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoJmRhdGEtPmkyY19j bGllbnQtPmRldiwgImludmFsaWQgaW5kZXggJXVcbiIsIGlkeCk7DQo+PiArICAgICAgICAgICAg ICAgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAg ICAgcmV0dXJuICZkYXRhLT5jbGtbaWR4XS5odzsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlu dCBzaTUzNDFfcHJvYmVfY2hpcF9pZChzdHJ1Y3QgY2xrX3NpNTM0MSAqZGF0YSkNCj4+ICt7DQo+ PiArICAgICAgIGludCBlcnI7DQo+PiArICAgICAgIHU4IHJlZ1s0XTsNCj4+ICsNCj4+ICsgICAg ICAgZXJyID0gcmVnbWFwX2J1bGtfcmVhZChkYXRhLT5yZWdtYXAsIFNJNTM0MV9QTl9CQVNFLCBy ZWcsIDQpOw0KPiANCj4gQVJSQVlfU0laRShyZWcpIGluc3RlYWQgb2YgND8NCg0Kb2sNCg0KPiAN Cj4+ICsgICAgICAgaWYgKGVyciA8IDApIHsNCj4+ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZk YXRhLT5pMmNfY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBjaGlwIElEXG4iKTsNCj4+ICsg ICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAg IGRldl9pbmZvKCZkYXRhLT5pMmNfY2xpZW50LT5kZXYsICJDaGlwOiAleCBHcmFkZTogJXUgUmV2 OiAldVxuIiwNCj4+ICsgICAgICAgICAgICAgICAgKHJlZ1sxXSA8PCA4KSB8IHJlZ1swXSwgcmVn WzJdLCByZWdbM10pOw0KPj4gKw0KPj4gKyAgICAgICAvKiBUaGUgNTM0MSBoYXMgMTAgb3V0cHV0 cywgdGhlIDUzNDAgaGFzIG9ubHkgNCAqLw0KPiANCj4gQWxyaWdodCEgVGhhbmtzIGZvciB0aGUg aW5mbyENCj4gDQo+PiArICAgICAgIHN3aXRjaCAocmVnWzBdKSB7DQo+PiArICAgICAgIGNhc2Ug MHg0MDoNCj4+ICsgICAgICAgICAgICAgICBkYXRhLT5udW1fb3V0cHV0cyA9IFNJNTM0MF9NQVhf TlVNX09VVFBVVFM7DQo+PiArICAgICAgICAgICAgICAgZGF0YS0+bnVtX3N5bnRoID0gU0k1MzQw X05VTV9TWU5USDsNCj4+ICsgICAgICAgICAgICAgICBkYXRhLT5yZWdfb3V0cHV0X29mZnNldCA9 IHNpNTM0MF9yZWdfb3V0cHV0X29mZnNldDsNCj4+ICsgICAgICAgICAgICAgICBkYXRhLT5yZWdf cmRpdl9vZmZzZXQgPSBzaTUzNDBfcmVnX3JkaXZfb2Zmc2V0Ow0KPj4gKyAgICAgICAgICAgICAg IGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIDB4NDE6DQo+PiArICAgICAgICAgICAgICAgZGF0YS0+ bnVtX291dHB1dHMgPSBTSTUzNDFfTUFYX05VTV9PVVRQVVRTOw0KPj4gKyAgICAgICAgICAgICAg IGRhdGEtPm51bV9zeW50aCA9IFNJNTM0MV9OVU1fU1lOVEg7DQo+PiArICAgICAgICAgICAgICAg ZGF0YS0+cmVnX291dHB1dF9vZmZzZXQgPSBzaTUzNDFfcmVnX291dHB1dF9vZmZzZXQ7DQo+PiAr ICAgICAgICAgICAgICAgZGF0YS0+cmVnX3JkaXZfb2Zmc2V0ID0gc2k1MzQxX3JlZ19yZGl2X29m ZnNldDsNCj4+ICsgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgZGVmYXVsdDoNCj4+ ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZkYXRhLT5pMmNfY2xpZW50LT5kZXYsICJNb2RlbCAn JXgnIG5vdCBzdXBwb3J0ZWRcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAocmVnWzFd IDw8IDgpIHwgcmVnWzBdKTsNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAr LyogUmVhZCBhY3RpdmUgc2V0dGluZ3MgaW50byB0aGUgcmVnbWFwIGNhY2hlIGZvciBsYXRlciBy ZWZlcmVuY2UgKi8NCj4+ICtzdGF0aWMgaW50IHNpNTM0MV9yZWFkX3NldHRpbmdzKHN0cnVjdCBj bGtfc2k1MzQxICpkYXRhKQ0KPj4gK3sNCj4+ICsgICAgICAgaW50IGVycjsNCj4+ICsgICAgICAg dTggaTsNCj4+ICsgICAgICAgdTggclsxMF07DQo+PiArDQo+PiArICAgICAgIGVyciA9IHJlZ21h cF9idWxrX3JlYWQoZGF0YS0+cmVnbWFwLCBTSTUzNDFfUExMX01fTlVNLCByLCAxMCk7DQo+PiAr ICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+PiAr DQo+PiArICAgICAgIGVyciA9IHJlZ21hcF9idWxrX3JlYWQoZGF0YS0+cmVnbWFwLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSTUzNDFfU1lOVEhfTl9DTEtfVE9fT1VUWF9F TiwgciwgMyk7DQo+PiArICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgIHJl dHVybiBlcnI7DQo+PiArDQo+PiArICAgICAgIGVyciA9IHJlZ21hcF9idWxrX3JlYWQoZGF0YS0+ cmVnbWFwLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSTUzNDFfU1lOVEhf Tl9DTEtfRElTLCByLCAxKTsNCj4+ICsgICAgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICAg ICAgICAgcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEt Pm51bV9zeW50aDsgKytpKSB7DQo+PiArICAgICAgICAgICAgICAgZXJyID0gcmVnbWFwX2J1bGtf cmVhZChkYXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU0k1MzQxX1NZTlRIX05fTlVNKGkpLCByLCAxMCk7DQo+PiArICAgICAgICAgICAgICAg aWYgKGVyciA8IDApDQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4g KyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1fb3V0 cHV0czsgKytpKSB7DQo+PiArICAgICAgICAgICAgICAgZXJyID0gcmVnbWFwX2J1bGtfcmVhZChk YXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YS0+cmVnX291dHB1dF9vZmZzZXRbaV0sIHIsIDQpOw0KPj4gKyAgICAgICAgICAgICAgIGlm IChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4+ICsN Cj4+ICsgICAgICAgICAgICAgICBlcnIgPSByZWdtYXBfYnVsa19yZWFkKGRhdGEtPnJlZ21hcCwN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZWdfcmRp dl9vZmZzZXRbaV0sIHIsIDMpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQ0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4+ICsgICAgICAgfQ0KPj4gKw0K Pj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBzaTUzNDFf d3JpdGVfbXVsdGlwbGUoc3RydWN0IGNsa19zaTUzNDEgKmRhdGEsDQo+PiArICAgICAgIGNvbnN0 IHN0cnVjdCBzaTUzNDFfcmVnX2RlZmF1bHQgKnZhbHVlcywgdW5zaWduZWQgaW50IG51bV92YWx1 ZXMpDQo+PiArew0KPj4gKyAgICAgICB1bnNpZ25lZCBpbnQgaTsNCj4+ICsgICAgICAgaW50IHJl czsNCj4+ICsNCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7ICsraSkgew0K Pj4gKyAgICAgICAgICAgICAgIHJlcyA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0uYWRkcmVzcywgdmFsdWVzW2ldLnZhbHVl KTsNCj4+ICsgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgew0KPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZGV2X2VycigmZGF0YS0+aTJjX2NsaWVudC0+ZGV2LA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHdyaXRlICUjeDolI3hcbiIsDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXS5hZGRyZXNzLCB2YWx1ZXNbaV0u dmFsdWUpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsNCj4+ICsgICAg ICAgICAgICAgICB9DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgcmV0dXJuIDA7DQo+ PiArfQ0KPj4gKw0KPj4gK2NvbnN0IHN0cnVjdCBzaTUzNDFfcmVnX2RlZmF1bHQgc2k1MzQxX3By ZWFtYmxlW10gPSB7DQo+PiArICAgICAgIHsweDBCMjUsIDB4MDB9LA0KPiANCj4gUGxlYXNlIHB1 dCBzcGFjZSBhcm91bmQgeyBhbmQgfQ0KPiANCj4gCSAgeyAweDBiMjUsIDB4MDAgfSwNCj4gDQo+ PiArICAgICAgIHsweDA1MDIsIDB4MDF9LA0KPj4gKyAgICAgICB7MHgwNTA1LCAweDAzfSwNCj4+ ICsgICAgICAgezB4MDk1NywgMHgxRn0sDQo+PiArICAgICAgIHsweDBCNEUsIDB4MUF9LA0KPj4g K307DQo+PiArDQo+PiArc3RhdGljIGludCBzaTUzNDFfc2VuZF9wcmVhbWJsZShzdHJ1Y3QgY2xr X3NpNTM0MSAqZGF0YSkNCj4+ICt7DQo+PiArICAgICAgIGludCByZXM7DQo+PiArICAgICAgIHUz MiByZXZpc2lvbjsNCj4+ICsNCj4+ICsgICAgICAgLyogRm9yIHJldmlzaW9uIDIgYW5kIHVwLCB0 aGUgdmFsdWVzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgKi8NCj4+ICsgICAgICAgcmVzID0gcmVn bWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBTSTUzNDFfREVWSUNFX1JFViwgJnJldmlzaW9uKTsNCj4+ ICsgICAgICAgaWYgKHJlcyA8IDApDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIHJlczsNCj4+ ICsNCj4+ICsgICAgICAgLyogV3JpdGUgInByZWFtYmxlIiBhcyBzcGVjaWZpZWQgYnkgZGF0YXNo ZWV0ICovDQo+PiArICAgICAgIHJlcyA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsIDB4QjI0 LCByZXZpc2lvbiA8IDIgPyAweEQ4IDogMHhDMCk7DQo+PiArICAgICAgIGlmIChyZXMgPCAwKQ0K Pj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXM7DQo+PiArICAgICAgIHJlcyA9IHNpNTM0MV93 cml0ZV9tdWx0aXBsZShkYXRhLA0KPj4gKyAgICAgICAgICAgICAgIHNpNTM0MV9wcmVhbWJsZSwg QVJSQVlfU0laRShzaTUzNDFfcHJlYW1ibGUpKTsNCj4+ICsgICAgICAgaWYgKHJlcyA8IDApDQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIHJlczsNCj4+ICsNCj4+ICsgICAgICAgLyogV2FpdCBm b3IgMzAwIG1zICovDQo+IA0KPiBZZWFoIHRoYXQncyBvYnZpb3VzLiBEb2VzIHRoZSBkYXRhc2hl ZXQgc2F5IHRvIGRvIHRoYXQ/IFRoYXQgd291bGQgYmUNCj4gbW9yZSB1c2VmdWwgdG8gaW5kaWNh dGUgaGVyZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyB3aGF0IHRoZSBjb2RlIGRvZXMuDQoNCm9rDQoN Cj4gDQo+PiArICAgICAgIG1zbGVlcCgzMDApOw0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsN Cj4+ICt9DQo+PiArDQo+PiArLyogUGVyZm9ybSBhIHNvZnQgcmVzZXQgYW5kIHdyaXRlIHBvc3Qt YW1ibGUgKi8NCj4+ICtzdGF0aWMgaW50IHNpNTM0MV9maW5hbGl6ZV9kZWZhdWx0cyhzdHJ1Y3Qg Y2xrX3NpNTM0MSAqZGF0YSkNCj4+ICt7DQo+PiArICAgICAgIGludCByZXM7DQo+PiArICAgICAg IHUzMiByZXZpc2lvbjsNCj4+ICsNCj4+ICsgICAgICAgcmVzID0gcmVnbWFwX3JlYWQoZGF0YS0+ cmVnbWFwLCBTSTUzNDFfREVWSUNFX1JFViwgJnJldmlzaW9uKTsNCj4+ICsgICAgICAgaWYgKHJl cyA8IDApDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIHJlczsNCj4+ICsNCj4+ICsgICAgICAg ZGV2X2RiZygmZGF0YS0+aTJjX2NsaWVudC0+ZGV2LCAiJXMgcmV2PSV1XG4iLCBfX2Z1bmNfXywg cmV2aXNpb24pOw0KPj4gKw0KPj4gKyAgICAgICAvKiBQZXJmb3JtIGEgc29mdCByZXNldCAqLw0K PiANCj4gT2J2aW91cy4NCj4gDQo+PiArICAgICAgIHJlcyA9IHJlZ21hcF93cml0ZShkYXRhLT5y ZWdtYXAsIFNJNTM0MV9TT0ZUX1JTVCwgMHgwMSk7DQo+PiArICAgICAgIGlmIChyZXMgPCAwKQ0K Pj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXM7DQo+PiArDQo+PiArICAgICAgIC8qIFdyaXRl IHBvc3QtYW1ibGUgKi8NCj4+ICsgICAgICAgcmVzID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21h cCwgMHhCMjQsIHJldmlzaW9uIDwgMiA/IDB4REIgOiAweEMzKTsNCj4gDQo+IFdoeSBubyBkZWZp bmUgZm9yIFNJNTM0MV9QT1NUX0FNQkxFPw0KPiANCj4+ICsgICAgICAgaWYgKHJlcyA8IDApDQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIHJlczsNCj4+ICsgICAgICAgcmVzID0gcmVnbWFwX3dy aXRlKGRhdGEtPnJlZ21hcCwgMHgwQjI1LCAweDAyKTsNCj4gDQo+IEFuZCB3aGF0IHJlZ2lzdGVy IGlzIHRoaXM/DQoNCkl0J3MgdGhlICJwb3N0X2FtYmxlIiBJIGd1ZXNzLi4uIFRoZSBkYXRhc2hl ZXQgZG9lc24ndCBtZW50aW9uIGl0LCBvdGhlciB0aGFuIA0KInRob3Ugc2hhbGx0IHdyaXRlIHRo aXMiLg0KDQo+IA0KPj4gKyAgICAgICBpZiAocmVzIDwgMCkNCj4+ICsgICAgICAgICAgICAgICBy ZXR1cm4gcmVzOw0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAr DQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2Ugc2k1MzQxX3JlZ21hcF92b2xh dGlsZV9yYW5nZVtdID0gew0KPj4gKyAgICAgICByZWdtYXBfcmVnX3JhbmdlKDB4MDAwQywgMHgw MDEyKSwgLyogU3RhdHVzICovDQo+PiArICAgICAgIHJlZ21hcF9yZWdfcmFuZ2UoMHgwMDFDLCAw eDAwMUUpLCAvKiByZXNldCwgZmluYy9mZGVjICovDQo+PiArICAgICAgIHJlZ21hcF9yZWdfcmFu Z2UoMHgwMEUyLCAweDAwRkUpLCAvKiBOVk0sIGludGVycnVwdHMsIGRldmljZSByZWFkeSAqLw0K Pj4gKyAgICAgICAvKiBVcGRhdGUgYml0cyBmb3Igc3ludGggY29uZmlnICovDQo+PiArICAgICAg IHJlZ21hcF9yZWdfcmFuZ2UoU0k1MzQxX1NZTlRIX05fVVBEKDApLCBTSTUzNDFfU1lOVEhfTl9V UEQoMCkpLA0KPj4gKyAgICAgICByZWdtYXBfcmVnX3JhbmdlKFNJNTM0MV9TWU5USF9OX1VQRCgx KSwgU0k1MzQxX1NZTlRIX05fVVBEKDEpKSwNCj4+ICsgICAgICAgcmVnbWFwX3JlZ19yYW5nZShT STUzNDFfU1lOVEhfTl9VUEQoMiksIFNJNTM0MV9TWU5USF9OX1VQRCgyKSksDQo+PiArICAgICAg IHJlZ21hcF9yZWdfcmFuZ2UoU0k1MzQxX1NZTlRIX05fVVBEKDMpLCBTSTUzNDFfU1lOVEhfTl9V UEQoMykpLA0KPj4gKyAgICAgICByZWdtYXBfcmVnX3JhbmdlKFNJNTM0MV9TWU5USF9OX1VQRCg0 KSwgU0k1MzQxX1NZTlRIX05fVVBEKDQpKSwNCj4+ICt9Ow0KPj4gKw0KPj4gK2NvbnN0IHN0cnVj dCByZWdtYXBfYWNjZXNzX3RhYmxlIHNpNTM0MV9yZWdtYXBfdm9sYXRpbGUgPSB7DQo+PiArICAg ICAgIC55ZXNfcmFuZ2VzID0gc2k1MzQxX3JlZ21hcF92b2xhdGlsZV9yYW5nZSwNCj4+ICsgICAg ICAgLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUoc2k1MzQxX3JlZ21hcF92b2xhdGlsZV9yYW5n ZSksDQo+PiArfTsNCj4+ICsNCj4+ICsvKiBQYWdlcyAwLCAxLCAyLCAzLCA5LCBBLCBCIGFyZSB2 YWxpZCwgc28gdGhlcmUgYXJlIDEyIHBhZ2VzICovDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBy ZWdtYXBfcmFuZ2VfY2ZnIHNpNTM0MV9yZWdtYXBfcmFuZ2VzW10gPSB7DQo+PiArICAgICAgIHsN Cj4+ICsgICAgICAgICAgICAgICAucmFuZ2VfbWluID0gMCwNCj4+ICsgICAgICAgICAgICAgICAu cmFuZ2VfbWF4ID0gMTIgKiAyNTYsDQo+PiArICAgICAgICAgICAgICAgLnNlbGVjdG9yX3JlZyA9 IFNJNTM0MV9QQUdFLA0KPj4gKyAgICAgICAgICAgICAgIC5zZWxlY3Rvcl9tYXNrID0gMHhmZiwN Cj4+ICsgICAgICAgICAgICAgICAuc2VsZWN0b3Jfc2hpZnQgPSAwLA0KPj4gKyAgICAgICAgICAg ICAgIC53aW5kb3dfc3RhcnQgPSAwLA0KPj4gKyAgICAgICAgICAgICAgIC53aW5kb3dfbGVuID0g MjU2LA0KPj4gKyAgICAgICB9LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCByZWdtYXBfY29uZmlnIHNpNTM0MV9yZWdtYXBfY29uZmlnID0gew0KPj4gKyAgICAgICAucmVn X2JpdHMgPSA4LA0KPj4gKyAgICAgICAudmFsX2JpdHMgPSA4LA0KPj4gKyAgICAgICAuY2FjaGVf dHlwZSA9IFJFR0NBQ0hFX1JCVFJFRSwNCj4+ICsgICAgICAgLm1heF9yZWdpc3RlciA9IDAsDQo+ PiArICAgICAgIC5yYW5nZXMgPSBzaTUzNDFfcmVnbWFwX3JhbmdlcywNCj4+ICsgICAgICAgLm51 bV9yYW5nZXMgPSBBUlJBWV9TSVpFKHNpNTM0MV9yZWdtYXBfcmFuZ2VzKSwNCj4+ICsgICAgICAg Lm1heF9yZWdpc3RlciA9IDEyICogMjU2LA0KPiANCj4gTWF5YmUgMTIgKiAyNTYgc2hvdWxkIGJl IGEgZGVmaW5lLg0KDQpvaw0KDQo+IA0KPj4gKyAgICAgICAudm9sYXRpbGVfdGFibGUgPSAmc2k1 MzQxX3JlZ21hcF92b2xhdGlsZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgc2k1MzQx X2R0X3BhcnNlX2R0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQo+PiArICAgICAgIHN0cnVj dCBjbGtfc2k1MzQxX291dHB1dF9jb25maWcgKmNvbmZpZykNCj4+ICt7DQo+PiArICAgICAgIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7DQo+PiArICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAgPSBjbGllbnQtPmRldi5vZl9ub2RlOw0KPj4gKyAgICAgICB1MzIgbnVtOw0KPj4gKyAgICAg ICB1MzIgdmFsOw0KPj4gKw0KPj4gKyAgICAgICBtZW1zZXQoY29uZmlnLCAwLCBzaXplb2Yoc3Ry dWN0IGNsa19zaTUzNDFfb3V0cHV0X2NvbmZpZykgKg0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTSTUzNDFfTUFYX05VTV9PVVRQVVRTKTsNCj4+ICsgICAgICAgLyogU2V0IGRl ZmF1bHRzIHRvIG5vIGZvcmNlZCBzb3VyY2UsIG5vdCBhIG1hc3RlciAqLw0KPj4gKyAgICAgICBm b3IgKG51bSA9IDA7IG51bSA8IFNJNTM0MV9NQVhfTlVNX09VVFBVVFM7ICsrbnVtKQ0KPj4gKyAg ICAgICAgICAgICAgIGNvbmZpZ1tudW1dLnNvdXJjZV9pbmRleCA9IDB4ZmY7DQo+PiArDQo+PiAr ICAgICAgIGZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7DQo+PiArICAgICAgICAg ICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJm51bSkpIHsNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmNsaWVudC0+ZGV2LCAibWlzc2luZyBy ZWcgcHJvcGVydHkgb2YgJXNcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoaWxkLT5uYW1lKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcHV0X2NoaWxk Ow0KPj4gKyAgICAgICAgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBpZiAobnVt ID49IFNJNTM0MV9NQVhfTlVNX09VVFBVVFMpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaW52YWxpZCBjbGtvdXQgJWRcbiIsIG51bSk7DQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHB1dF9jaGlsZDsNCj4+ICsgICAgICAgICAgICAg ICB9DQo+PiArDQo+PiArICAgICAgICAgICAgICAgaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihj aGlsZCwgInNpbGFicyxmb3JtYXQiLCAmdmFsKSkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgLyogU2V0IGNtIGFuZCBhbXBsIGNvbnNlcnZhdGl2ZWx5IHRvIDN2MyBzZXR0aW5ncyAqLw0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWwpIHsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgMTogLyogbm9ybWFsIGRpZmZlcmVudGlhbCAqLw0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbbnVtXS5vdXRfY21fYW1wbF9iaXRzID0g MHgzMzsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IC8qIGxvdy1wb3dlciBkaWZmZXJlbnRpYWwgKi8N Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW251bV0ub3V0X2NtX2Ft cGxfYml0cyA9IDB4MTM7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAvKiBMVkNNT1MgKi8NCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW251bV0ub3V0X2NtX2FtcGxfYml0 cyA9IDB4MzM7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBTSSBy ZWNvbW1lbmRlZCBpbXBlZGFuY2UgZm9yIExWQ01PUyAqLw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25maWdbbnVtXS5vdXRfZm9ybWF0X2Rydl9iaXRzIHw9IDB4YzA7DQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGV2X2VycigmY2xpZW50LT5kZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImludmFsaWQgc2lsYWJzLGZvcm1hdCAldSBmb3IgJXVcbiIsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCBudW0pOw0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHB1dF9jaGlsZDsNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tudW1dLm91dF9m b3JtYXRfZHJ2X2JpdHMgJj0gfjB4MDc7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb25m aWdbbnVtXS5vdXRfZm9ybWF0X2Rydl9iaXRzIHw9IHZhbCAmIDB4MDc7DQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbHdheXMgZW5hYmxlIHRoZSBTWU5DIGZlYXR1cmUgKi8NCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tudW1dLm91dF9mb3JtYXRfZHJ2X2JpdHMgfD0g MHgwODsNCj4+ICsgICAgICAgICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAgICAgICAgaWYg KCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInNpbGFicyxjb21tb24tbW9kZSIsICZ2YWwp KSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID4gMHhmKSB7DQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmNsaWVudC0+ZGV2LA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHNpbGFicyxjb21t b24tbW9kZSAldVxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWwpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHB1dF9jaGls ZDsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNvbmZpZ1tudW1dLm91dF9jbV9hbXBsX2JpdHMgJj0gMHhmMDsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNvbmZpZ1tudW1dLm91dF9jbV9hbXBsX2JpdHMgfD0gdmFsICYgMHgwZjsN Cj4+ICsgICAgICAgICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAgICAgICAgaWYgKCFvZl9w cm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInNpbGFicyxhbXBsaXR1ZGUiLCAmdmFsKSkgew0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA+IDB4Zikgew0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRldiwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBzaWxhYnMsYW1wbGl0dWRlICV1 XG4iLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCk7DQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcHV0X2NoaWxkOw0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgfQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29uZmln W251bV0ub3V0X2NtX2FtcGxfYml0cyAmPSAweDBmOw0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgY29uZmlnW251bV0ub3V0X2NtX2FtcGxfYml0cyB8PSAodmFsIDw8IDQpICYgMHhmMDsNCj4+ ICsgICAgICAgICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAgICAgICAgaWYgKCFvZl9wcm9w ZXJ0eV9yZWFkX3UzMihjaGlsZCwgInNpbGFicyxzeW50aC1zb3VyY2UiLA0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbCkpIHsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIC8qIENoaXAgdHlwZSBub3Qga25vd24gYXQgdGhpcyBwb2ludCwgYXNzdW1l IGxhcmdlc3QgKi8NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPj0gU0k1MzQx X05VTV9TWU5USCkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJy KCZjbGllbnQtPmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiaW52YWxpZCBzeW50aC1zb3VyY2UgJXUgZm9yICV1XG4iLA0KPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwgbnVtKTsNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ290byBwdXRfY2hpbGQ7DQo+PiArICAgICAgICAgICAgICAgICAgICAg ICB9DQo+PiArDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbbnVtXS5zb3VyY2Vf aW5kZXggPSB2YWw7DQo+PiArICAgICAgICAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgICAg ICAgIGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJzaWxhYnMsc3ludGgtZnJlcXVl bmN5IiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwp KSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnW251bV0uc291cmNlX2lu ZGV4ID49IFNJNTM0MV9OVU1fU1lOVEgpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV2X2VycigmY2xpZW50LT5kZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInN5bnRoLWZyZXF1ZW5jeSByZXF1aXJlcyBzeW50aC1zb3VyY2UgIg0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgJXVcbiIsIG51 bSk7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcHV0X2NoaWxkOw0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgY29uZmlnW251bV0uc3ludGhfZnJlcXVlbmN5ID0gdmFsOw0KPj4gKyAgICAgICAgICAg ICAgIH0NCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMy KGNoaWxkLCAiY2xvY2stZnJlcXVlbmN5IiwgJnZhbCkpDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBjb25maWdbbnVtXS5jbG9ja19mcmVxdWVuY3kgPSB2YWw7DQo+PiArDQo+PiArICAgICAg ICAgICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjaGlsZCwgInNpbGFicyxkaXNhYmxl LWhpZ2giKSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tudW1dLm91dF9mb3Jt YXRfZHJ2X2JpdHMgfD0gMHgxMDsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBjb25maWdbbnVt XS5zeW50aF9tYXN0ZXIgPQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgb2ZfcHJvcGVydHlf cmVhZF9ib29sKGNoaWxkLCAic2lsYWJzLHN5bnRoLW1hc3RlciIpOw0KPj4gKw0KPj4gKyAgICAg ICAgICAgICAgIGNvbmZpZ1tudW1dLmFsd2F5c19vbiA9DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpbGQsICJhbHdheXMtb24iKTsNCj4+ICsgICAg ICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICsNCj4+ICtwdXRfY2hpbGQ6DQo+ PiArICAgICAgIG9mX25vZGVfcHV0KGNoaWxkKTsNCj4+ICsgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+PiArfQ0KPj4gKw0KPj4gKy8qDQo+PiArICogSWYgbm90IHByZS1jb25maWd1cmVkLCBjYWxj dWxhdGUgYW5kIHNldCB0aGUgUExMIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkuDQo+PiArICogRm9y IGxvdy1qaXR0ZXIgcGVyZm9ybWFuY2UsIHRoZSBQTEwgc2hvdWxkIGJlIHNldCBzdWNoIHRoYXQg dGhlIHN5bnRoZXNpemVycw0KPj4gKyAqIG9ubHkgbmVlZCBpbnRlZ2VyIGRpdmlzaW9uLg0KPj4g KyAqIFdpdGhvdXQgYW55IHVzZXIgZ3VpZGFuY2UsIHdlJ2xsIHNldCB0aGUgUExMIHRvIDE0R0h6 LCB3aGljaCBzdGlsbCBhbGxvd3MNCj4+ICsgKiB0aGUgY2hpcCB0byBnZW5lcmF0ZSBhbnkgZnJl cXVlbmN5IG9uIGl0cyBvdXRwdXRzLCBidXQgaml0dGVyIHBlcmZvcm1hbmNlDQo+PiArICogbWF5 IGJlIHN1Yi1vcHRpbWFsLg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgc2k1MzQxX2luaXRpYWxp emVfcGxsKHN0cnVjdCBjbGtfc2k1MzQxICpkYXRhKQ0KPj4gK3sNCj4+ICsgICAgICAgc3RydWN0 IGRldmljZV9ub2RlICpucCA9IGRhdGEtPmkyY19jbGllbnQtPmRldi5vZl9ub2RlOw0KPj4gKyAg ICAgICB1MzIgbV9udW0gPSAwOw0KPj4gKyAgICAgICB1MzIgbV9kZW4gPSAwOw0KPj4gKw0KPj4g KyAgICAgICBpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzaWxhYnMscGxsLW0tbnVtIiwg Jm1fbnVtKSkgew0KPj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoJmRhdGEtPmkyY19jbGllbnQt PmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICJQTEwgY29uZmlndXJhdGlvbiByZXF1 aXJlcyBzaWxhYnMscGxsLW0tbnVtXG4iKTsNCj4+ICsgICAgICAgfQ0KPj4gKyAgICAgICBpZiAo b2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzaWxhYnMscGxsLW0tZGVuIiwgJm1fZGVuKSkgew0K Pj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoJmRhdGEtPmkyY19jbGllbnQtPmRldiwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICJQTEwgY29uZmlndXJhdGlvbiByZXF1aXJlcyBzaWxhYnMs cGxsLW0tZGVuXG4iKTsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICBpZiAoIW1fbnVt IHx8ICFtX2Rlbikgew0KPj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoJmRhdGEtPmkyY19jbGll bnQtPmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICJQTEwgY29uZmlndXJhdGlvbiBp bnZhbGlkLCBhc3N1bWUgMTRHSHpcbiIpOw0KPj4gKyAgICAgICAgICAgICAgIG1fZGVuID0gY2xr X2dldF9yYXRlKGRhdGEtPnB4dGFsKSAvIDEwOw0KPj4gKyAgICAgICAgICAgICAgIG1fbnVtID0g MTQwMDAwMDAwMDsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gc2k1MzQx X2VuY29kZV80NF8zMihkYXRhLT5yZWdtYXAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBT STUzNDFfUExMX01fTlVNLCBtX251bSwgbV9kZW4pOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg aW50IHNpNTM0MV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPj4gKyAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCj4+ICt7DQo+PiArICAgICAg IHN0cnVjdCBjbGtfc2k1MzQxICpkYXRhOw0KPj4gKyAgICAgICBzdHJ1Y3QgY2xrX2luaXRfZGF0 YSBpbml0Ow0KPj4gKyAgICAgICBjb25zdCBjaGFyICpyb290X2Nsb2NrX25hbWU7DQo+PiArICAg ICAgIGNvbnN0IGNoYXIgKnN5bnRoX2Nsb2NrX25hbWVzW1NJNTM0MV9OVU1fU1lOVEhdOw0KPj4g KyAgICAgICBpbnQgZXJyOw0KPj4gKyAgICAgICBzdHJ1Y3QgY2xrX3NpNTM0MV9vdXRwdXRfY29u ZmlnIGNvbmZpZ1tTSTUzNDFfTUFYX05VTV9PVVRQVVRTXTsNCj4+ICsgICAgICAgdTggaTsNCj4g DQo+IFdoeSBub3QganVzdCBhbiBpbnQgb3IgdW5zaWduZWQgaW50PyBXaHkgYSB1OD8NCg0KSXQn cyBnZXR0aW5nIGNvbXBhcmVkIHRvIGEgdTggKG51bV9zeW50aCBhbmQgbnVtX291dHB1dCBhcmUg YWxzbyB1OCwgc28gSSANCmZpZ3VyZWQgImkiIHNob3VsZCBiZSB0aGUgc2FtZSB0eXBlLg0KDQo+ IA0KPj4gKyAgICAgICBib29sIGluaXRpYWxpemF0aW9uX3JlcXVpcmVkOw0KPj4gKw0KPj4gKyAg ICAgICBkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpkYXRhKSwgR0ZQ X0tFUk5FTCk7DQo+PiArICAgICAgIGlmICghZGF0YSkNCj4+ICsgICAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsgICAgICAgZGF0YS0+aTJjX2NsaWVudCA9IGNsaWVudDsN Cj4+ICsNCj4+ICsgICAgICAgZGF0YS0+cHh0YWwgPSBkZXZtX2Nsa19nZXQoJmNsaWVudC0+ZGV2 LCAieHRhbCIpOw0KPj4gKyAgICAgICBpZiAoSVNfRVJSKGRhdGEtPnB4dGFsKSkgew0KPj4gKyAg ICAgICAgICAgICAgIGlmIChQVFJfRVJSKGRhdGEtPnB4dGFsKSA9PSAtRVBST0JFX0RFRkVSKQ0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUFJPQkVfREVGRVI7DQo+PiArDQo+ PiArICAgICAgICAgICAgICAgZGV2X2VycigmY2xpZW50LT5kZXYsICJNaXNzaW5nIHh0YWwgY2xv Y2sgaW5wdXRcbiIpOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGVyciA9IHNpNTM0 MV9kdF9wYXJzZV9kdChjbGllbnQsIGNvbmZpZyk7DQo+PiArICAgICAgIGlmIChlcnIpDQo+PiAr ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsgICAgICAgaWYgKG9mX3Byb3Bl cnR5X3JlYWRfc3RyaW5nKGNsaWVudC0+ZGV2Lm9mX25vZGUsICJjbG9jay1vdXRwdXQtbmFtZXMi LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgJmluaXQubmFtZSkpDQo+PiArICAgICAgICAg ICAgICAgaW5pdC5uYW1lID0gY2xpZW50LT5kZXYub2Zfbm9kZS0+bmFtZTsNCj4+ICsgICAgICAg cm9vdF9jbG9ja19uYW1lID0gaW5pdC5uYW1lOw0KPj4gKw0KPj4gKyAgICAgICBkYXRhLT5yZWdt YXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZzaTUzNDFfcmVnbWFwX2NvbmZpZyk7 DQo+PiArICAgICAgIGlmIChJU19FUlIoZGF0YS0+cmVnbWFwKSkNCj4+ICsgICAgICAgICAgICAg ICByZXR1cm4gUFRSX0VSUihkYXRhLT5yZWdtYXApOw0KPj4gKw0KPj4gKyAgICAgICBpMmNfc2V0 X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsNCj4+ICsNCj4+ICsgICAgICAgZXJyID0gc2k1MzQx X3Byb2JlX2NoaXBfaWQoZGF0YSk7DQo+PiArICAgICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAg ICAgICAgICAgIHJldHVybiBlcnI7DQo+PiArDQo+PiArICAgICAgIC8qICJBY3RpdmF0ZSIgdGhl IHh0YWwgKHVzdWFsbHkgYSBmaXhlZCBjbG9jaykgKi8NCj4+ICsgICAgICAgY2xrX3ByZXBhcmVf ZW5hYmxlKGRhdGEtPnB4dGFsKTsNCj4+ICsNCj4+ICsgICAgICAgaWYgKG9mX3Byb3BlcnR5X3Jl YWRfYm9vbChjbGllbnQtPmRldi5vZl9ub2RlLCAic2lsYWJzLHJlcHJvZ3JhbSIpKSB7DQo+PiAr ICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25fcmVxdWlyZWQgPSB0cnVlOw0KPj4gKyAgICAg ICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgICAgIGVyciA9IHNpNTM0MV9pc19wcm9ncmFtbWVk X2FscmVhZHkoZGF0YSk7DQo+PiArICAgICAgICAgICAgICAgaWYgKGVyciA8IDApDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAg IGluaXRpYWxpemF0aW9uX3JlcXVpcmVkID0gIWVycjsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4g KyAgICAgICBpZiAoaW5pdGlhbGl6YXRpb25fcmVxdWlyZWQpIHsNCj4+ICsgICAgICAgICAgICAg ICAvKiBQb3B1bGF0ZSB0aGUgcmVnbWFwIGNhY2hlIGluIHByZXBhcmF0aW9uIGZvciAiY2FjaGUg b25seSIgKi8NCj4+ICsgICAgICAgICAgICAgICBlcnIgPSBzaTUzNDFfcmVhZF9zZXR0aW5ncyhk YXRhKTsNCj4+ICsgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBlcnI7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgZXJyID0gc2k1 MzQxX3NlbmRfcHJlYW1ibGUoZGF0YSk7DQo+PiArICAgICAgICAgICAgICAgaWYgKGVyciA8IDAp DQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAg ICAgICAgICAgIC8qDQo+PiArICAgICAgICAgICAgICAgICogV2UgaW50ZW5kIHRvIHNlbmQgYWxs ICdmaW5hbCcgcmVnaXN0ZXIgdmFsdWVzIGluIGEgc2luZ2xlDQo+PiArICAgICAgICAgICAgICAg ICogdHJhbnNhY3Rpb24uIFNvIGNhY2hlIGFsbCByZWdpc3RlciB3cml0ZXMgdW50aWwgd2UncmUg ZG9uZQ0KPj4gKyAgICAgICAgICAgICAgICAqIGNvbmZpZ3VyaW5nLg0KPj4gKyAgICAgICAgICAg ICAgICAqLw0KPj4gKyAgICAgICAgICAgICAgIHJlZ2NhY2hlX2NhY2hlX29ubHkoZGF0YS0+cmVn bWFwLCB0cnVlKTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAvKiBXcml0ZSB0aGUgY29uZmln dXJhdGlvbiBwYWlycyBmcm9tIHRoZSBmaXJtd2FyZSBibG9iICovDQo+PiArICAgICAgICAgICAg ICAgZXJyID0gc2k1MzQxX3dyaXRlX211bHRpcGxlKGRhdGEsIHNpNTM0MV9yZWdfZGVmYXVsdHMs DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShz aTUzNDFfcmVnX2RlZmF1bHRzKSk7DQo+PiArICAgICAgICAgICAgICAgaWYgKGVyciA8IDApDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICAgICAg ICAgICAgIC8qIFBMTCBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkICovDQo+PiArICAgICAgICAg ICAgICAgZXJyID0gc2k1MzQxX2luaXRpYWxpemVfcGxsKGRhdGEpOw0KPj4gKyAgICAgICAgICAg ICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsN Cj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAvKiBSZWdpc3RlciB0aGUgUExMICovDQo+ PiArICAgICAgIGRhdGEtPnB4dGFsX25hbWUgPSBfX2Nsa19nZXRfbmFtZShkYXRhLT5weHRhbCk7 DQo+PiArICAgICAgIGluaXQucGFyZW50X25hbWVzID0gJmRhdGEtPnB4dGFsX25hbWU7DQo+PiAr ICAgICAgIGluaXQubnVtX3BhcmVudHMgPSAxOyAvKiBGb3Igbm93LCBvbmx5IFhUQUwgaW5wdXQg c3VwcG9ydGVkICovDQo+PiArICAgICAgIGluaXQub3BzID0gJnNpNTM0MV9jbGtfb3BzOw0KPj4g KyAgICAgICBpbml0LmZsYWdzID0gMDsNCj4+ICsgICAgICAgZGF0YS0+aHcuaW5pdCA9ICZpbml0 Ow0KPj4gKw0KPj4gKyAgICAgICBlcnIgPSBkZXZtX2Nsa19od19yZWdpc3RlcigmY2xpZW50LT5k ZXYsICZkYXRhLT5odyk7DQo+PiArICAgICAgIGlmIChlcnIpIHsNCj4+ICsgICAgICAgICAgICAg ICBkZXZfZXJyKCZjbGllbnQtPmRldiwgImNsb2NrIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOw0K Pj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsg ICAgICAgaW5pdC5udW1fcGFyZW50cyA9IDE7DQo+PiArICAgICAgIGluaXQucGFyZW50X25hbWVz ID0gJnJvb3RfY2xvY2tfbmFtZTsNCj4+ICsgICAgICAgaW5pdC5vcHMgPSAmc2k1MzQxX3N5bnRo X2Nsa19vcHM7DQo+PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1fc3ludGg7ICsr aSkgew0KPj4gKyAgICAgICAgICAgICAgIHN5bnRoX2Nsb2NrX25hbWVzW2ldID0ga2FzcHJpbnRm KEdGUF9LRVJORUwsICIlcy5OJXUiLA0KPiANCj4gVXNlIGRldm1fa2FzcHJpbnRmKCkgYW5kIGxl dCBlcnJvciBwYXRocyBjbGVhbnVwPw0KDQpEZWZpbml0ZWx5IGJldHRlciB0aGFuIGNvcHlpbmcg Y29kZSBmcm9tIG15IHByZXZpb3VzIGRyaXZlcnMgOikNCg0KPiANCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNsaWVudC0+ZGV2Lm9mX25vZGUtPm5hbWUsIGkpOw0KPj4gKyAgICAgICAgICAg ICAgIGluaXQubmFtZSA9IHN5bnRoX2Nsb2NrX25hbWVzW2ldOw0KPj4gKyAgICAgICAgICAgICAg IGRhdGEtPnN5bnRoW2ldLmluZGV4ID0gaTsNCj4+ICsgICAgICAgICAgICAgICBkYXRhLT5zeW50 aFtpXS5kYXRhID0gZGF0YTsNCj4+ICsgICAgICAgICAgICAgICBkYXRhLT5zeW50aFtpXS5ody5p bml0ID0gJmluaXQ7DQo+PiArICAgICAgICAgICAgICAgZGV2X2RiZygmY2xpZW50LT5kZXYsICJS ZWdpc3RlciAlc1xuIiwgaW5pdC5uYW1lKTsNCj4gDQo+IElzIHRoaXMgbmVjZXNzYXJ5PyBNYXli ZSB3ZSBzaG91bGQgYWRkIGEgcHJfZGVidWcoKSBkZWVwIGluDQo+IGNsa19yZWdpc3RlcigpIGlm IHlvdSByZWFsbHkgd2FudCB0byBrbm93LiBJIGRvbid0IHRoaW5rIEknZCBiZSB0b28NCj4gb3Bw b3NlZCB0byB0aGF0Lg0KDQpJdCdzIG5vIGxvbmdlciB1c2VmdWwsIEknbGwgcmVtb3ZlIG1vc3Qg ZGV2X2RiZy4NCg0KPj4gKyAgICAgICAgICAgICAgIGVyciA9IGRldm1fY2xrX2h3X3JlZ2lzdGVy KCZjbGllbnQtPmRldiwgJmRhdGEtPnN5bnRoW2ldLmh3KTsNCj4+ICsgICAgICAgICAgICAgICBp ZiAoZXJyKSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRl diwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bnRoIE4ldSByZWdpc3Ry YXRpb24gZmFpbGVkXG4iLCBpKTsNCj4+ICsgICAgICAgICAgICAgICB9DQo+PiArICAgICAgIH0N Cj4+ICsNCj4+ICsgICAgICAgaW5pdC5udW1fcGFyZW50cyA9IGRhdGEtPm51bV9zeW50aDsNCj4+ ICsgICAgICAgaW5pdC5wYXJlbnRfbmFtZXMgPSBzeW50aF9jbG9ja19uYW1lczsNCj4+ICsgICAg ICAgaW5pdC5vcHMgPSAmc2k1MzQxX291dHB1dF9jbGtfb3BzOw0KPj4gKyAgICAgICBpbml0LmZs YWdzID0gMDsNCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9vdXRwdXRzOyAr K2kpIHsNCj4+ICsgICAgICAgICAgICAgICBpbml0Lm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5F TCwgIiVzLiVkIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC0+ZGV2Lm9mX25v ZGUtPm5hbWUsIGkpOw0KPj4gKyAgICAgICAgICAgICAgIGluaXQuZmxhZ3MgPSBjb25maWdbaV0u c3ludGhfbWFzdGVyID8gQ0xLX1NFVF9SQVRFX1BBUkVOVCA6IDA7DQo+IA0KPiBPaywgc28gc3lu dGhfbWFzdGVyIG1lYW5zIHRoYXQgaXQgY2FuIGNoYW5nZSB0aGUgcmF0ZSBvZiB0aGUgcGFyZW50 Pw0KDQpZZXAsIEkgYm9ycm93ZWQgdGhhdCBpZGVhIGZyb20gdGhlIHNpNTM1MSBkcml2ZXIuDQoN Cj4gDQo+PiArICAgICAgICAgICAgICAgZGF0YS0+Y2xrW2ldLmluZGV4ID0gaTsNCj4+ICsgICAg ICAgICAgICAgICBkYXRhLT5jbGtbaV0uZGF0YSA9IGRhdGE7DQo+PiArICAgICAgICAgICAgICAg ZGF0YS0+Y2xrW2ldLmh3LmluaXQgPSAmaW5pdDsNCj4+ICsgICAgICAgICAgICAgICBpZiAoY29u ZmlnW2ldLm91dF9mb3JtYXRfZHJ2X2JpdHMgJiAweDA3KSB7DQo+IA0KPiBXaGF0IGlzIG1hZ2lj IDB4MDc/IFBsZWFzZSBtYWtlIGEgZGVmaW5lIGZvciBpdC4NCg0Kd2lsbCBkby4NCg0KPiANCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9kYmcoJmNsaWVudC0+ZGV2LA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICV1OiBmbXQ9JSN4IGNtPSUjeFxuIiwgaSwN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW2ldLm91dF9mb3JtYXRf ZHJ2X2JpdHMsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tpXS5v dXRfY21fYW1wbF9iaXRzKTsNCj4gDQo+IENhbid0IHdlIGdldCB0aGlzIHdpdGggcmVnbWFwIHRy YWNlcG9pbnRzPw0KDQp5ZXMsIGJ1dCBqdXN0IHJlbW92aW5nIGl0IGlzIGp1c3QgYXMgd2VsbCAo c2ltcGx5IHJlYWRpbmcgcmVnbWFwIHJlZ2lzdGVycyANCmZyb20gZGVidWdmcyB3aWxsIGFsc28g cHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uKQ0KDQo+IA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU0k1MzQxX09VVF9GT1JNQVQoJmRhdGEtPmNsa1tpXSksDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tpXS5vdXRfZm9ybWF0X2Rydl9iaXRzKTsNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJNTM0MV9PVVRfQ00oJmRhdGEtPmNsa1tp XSksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tpXS5vdXRfY21f YW1wbF9iaXRzKTsNCj4+ICsgICAgICAgICAgICAgICB9DQo+PiArICAgICAgICAgICAgICAgc2k1 MzQxX291dHB1dF9zZXRfcGFyZW50X2FuZF9mcmVxKCZkYXRhLT5jbGtbaV0sDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICBjb25maWdbaV0uc291cmNlX2luZGV4LA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgY29uZmlnW2ldLnN5bnRoX2ZyZXF1ZW5jeSk7DQo+PiArICAgICAgICAgICAg ICAgZGV2X2RiZygmY2xpZW50LT5kZXYsICJSZWdpc3RlciAlc1xuIiwgaW5pdC5uYW1lKTsNCj4g DQo+IEFoIHRoaXMgYWdhaW4hDQo+IA0KPj4gKyAgICAgICAgICAgICAgIGVyciA9IGRldm1fY2xr X2h3X3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgJmRhdGEtPmNsa1tpXS5odyk7DQo+PiArICAgICAg ICAgICAgICAga2ZyZWUoaW5pdC5uYW1lKTsgLyogY2xvY2sgZnJhbWV3b3JrIG1hZGUgYSBjb3B5 IG9mIHRoZSBuYW1lICovDQo+PiArICAgICAgICAgICAgICAgaWYgKGVycikgew0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZGV2X2VycigmY2xpZW50LT5kZXYsDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJvdXRwdXQgJXUgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwgaSk7 DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAgICAgICAgICAg ICAgIH0NCj4+ICsgICAgICAgICAgICAgICBpZiAoY29uZmlnW2ldLmNsb2NrX2ZyZXF1ZW5jeSkN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNsa19zZXRfcmF0ZShkYXRhLT5jbGtbaV0uaHcu Y2xrLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbaV0uY2xvY2tf ZnJlcXVlbmN5KTsNCj4+ICsgICAgICAgICAgICAgICBpZiAoY29uZmlnW2ldLmFsd2F5c19vbikN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNsa19wcmVwYXJlKGRhdGEtPmNsa1tpXS5ody5j bGspOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGVyciA9IG9mX2Nsa19hZGRfaHdf cHJvdmlkZXIoY2xpZW50LT5kZXYub2Zfbm9kZSwgb2ZfY2xrX3NpNTM0MV9nZXQsDQo+IA0KPiBD YW4geW91IHVzZSBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoKT8NCg0KWWVzLCBkZXZtIHJ1 bGV6IQ0KDQo+IA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7DQo+PiArICAgICAg IGlmIChlcnIpIHsNCj4+ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRldiwgInVu YWJsZSB0byBhZGQgY2xrIHByb3ZpZGVyXG4iKTsNCj4+ICsgICAgICAgICAgICAgICBnb3RvIGVy cm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGlmIChpbml0aWFsaXphdGlvbl9y ZXF1aXJlZCkgew0KPj4gKyAgICAgICAgICAgICAgIC8qIFN5bmNocm9uaXplICovDQo+IA0KPiBV c2VsZXNzIGNvbW1lbnQuIFBsZWFzZSByZW1vdmUuDQo+IA0KPj4gKyAgICAgICAgICAgICAgIHJl Z2NhY2hlX2NhY2hlX29ubHkoZGF0YS0+cmVnbWFwLCBmYWxzZSk7DQo+PiArICAgICAgICAgICAg ICAgZXJyID0gcmVnY2FjaGVfc3luYyhkYXRhLT5yZWdtYXApOw0KPj4gKyAgICAgICAgICAgICAg IGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4+ ICsNCj4+ICsgICAgICAgICAgICAgICBlcnIgPSBzaTUzNDFfZmluYWxpemVfZGVmYXVsdHMoZGF0 YSk7DQo+PiArICAgICAgICAgICAgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArZXJyb3I6DQo+PiAr ICAgICAgIC8qIEZyZWUgdGhlIG5hbWVzLCBjbGsgZnJhbWV3b3JrIG1ha2VzIGNvcGllcyAqLw0K Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX3N5bnRoOyArK2kpDQo+PiArICAg ICAgICAgICAgICAga2ZyZWUoc3ludGhfY2xvY2tfbmFtZXNbaV0pOw0KPj4gKw0KPj4gKyAgICAg ICByZXR1cm4gZXJyOw0KPj4gK30NCj4+ICsNCg0K