From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CE2B4A046B for ; Tue, 20 Aug 2019 03:55:09 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C7CCC1BEA5; Tue, 20 Aug 2019 03:55:08 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id F0B471BEA4 for ; Tue, 20 Aug 2019 03:55:03 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Aug 2019 18:55:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,407,1559545200"; d="scan'208";a="378394365" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 19 Aug 2019 18:55:02 -0700 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 19 Aug 2019 18:55:01 -0700 Received: from shsmsx105.ccr.corp.intel.com ([169.254.11.15]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.215]) with mapi id 14.03.0439.000; Tue, 20 Aug 2019 09:54:59 +0800 From: "Wang, Xiang W" To: Jerin Jacob Kollanukkaran , Thomas Monjalon , "dev@dpdk.org" CC: Pavan Nikhilesh Bhagavatula , Shahaf Shuler , Hemant Agrawal , Opher Reviv , Alex Rosenbaum , Dovrat Zifroni , Prasun Kapoor , Nipun Gupta , "Richardson, Bruce" , "Hong, Yang A" , "Chang, Harry" , "gu.jian1@zte.com.cn" , "shanjiangh@chinatelecom.cn" , "zhangy.yun@chinatelecom.cn" , "lixingfu@huachentel.com" , "wushuai@inspur.com" , "yuyingxia@yxlink.com" , "fanchenggang@sunyainfo.com" , "davidfgao@tencent.com" , "liuzhong1@chinaunicom.cn" , "zhaoyong11@huawei.com" , "oc@yunify.com" , "jim@netgate.com" , "Ni, Hongjun" , "j.bromhead@titan-ic.com" , "deri@ntop.org" , "fc@napatech.com" , "arthur.su@lionic.com" , Guy Kaneti , Smadar Fuks , Liron Himi Thread-Topic: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem Thread-Index: AQHVU11tM2yypD/aV0W146JSV6CRZqcBSi2AgAH5aYA= Date: Tue, 20 Aug 2019 01:54:58 +0000 Message-ID: References: <20190627155036.56940-1-jerinj@marvell.com> <8285913.8xKIzI91KM@xps> <1922242.dABWq9CbNQ@xps> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTBkNGZmZDgtYWEzYS00MDQxLWE1YjItMDIzOWJjODNiYTJhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoid0hYajg2RVpsXC9SYnpTOVhTY0N2MkFwZE5HOXg1TmMrMmxVMWFxSENjZ1IwNmgzTmZMajhzVkVmeGVKQnU2SzEifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" VGhhbmtzIEplcmluLiBDb21tZW50cyBpbmxpbmUuDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQpGcm9tOiBKZXJpbiBKYWNvYiBLb2xsYW51a2thcmFuIFttYWlsdG86amVyaW5qQG1hcnZl bGwuY29tXSANClNlbnQ6IE1vbmRheSwgQXVndXN0IDE5LCAyMDE5IDExOjA5IEFNDQpUbzogVGhv bWFzIE1vbmphbG9uIDx0aG9tYXNAbW9uamFsb24ubmV0PjsgZGV2QGRwZGsub3JnDQpDYzogUGF2 YW4gTmlraGlsZXNoIEJoYWdhdmF0dWxhIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+OyBTaGFo YWYgU2h1bGVyIDxzaGFoYWZzQG1lbGxhbm94LmNvbT47IEhlbWFudCBBZ3Jhd2FsIDxoZW1hbnQu YWdyYXdhbEBueHAuY29tPjsgT3BoZXIgUmV2aXYgPG9waGVyQG1lbGxhbm94LmNvbT47IEFsZXgg Um9zZW5iYXVtIDxhbGV4ckBtZWxsYW5veC5jb20+OyBEb3ZyYXQgWmlmcm9uaSA8ZG92cmF0QG1h cnZlbGwuY29tPjsgUHJhc3VuIEthcG9vciA8cGthcG9vckBtYXJ2ZWxsLmNvbT47IE5pcHVuIEd1 cHRhIDxuaXB1bi5ndXB0YUBueHAuY29tPjsgV2FuZywgWGlhbmcgVyA8eGlhbmcudy53YW5nQGlu dGVsLmNvbT47IFJpY2hhcmRzb24sIEJydWNlIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47 IEhvbmcsIFlhbmcgQSA8eWFuZy5hLmhvbmdAaW50ZWwuY29tPjsgQ2hhbmcsIEhhcnJ5IDxoYXJy eS5jaGFuZ0BpbnRlbC5jb20+OyBndS5qaWFuMUB6dGUuY29tLmNuOyBzaGFuamlhbmdoQGNoaW5h dGVsZWNvbS5jbjsgemhhbmd5Lnl1bkBjaGluYXRlbGVjb20uY247IGxpeGluZ2Z1QGh1YWNoZW50 ZWwuY29tOyB3dXNodWFpQGluc3B1ci5jb207IHl1eWluZ3hpYUB5eGxpbmsuY29tOyBmYW5jaGVu Z2dhbmdAc3VueWFpbmZvLmNvbTsgZGF2aWRmZ2FvQHRlbmNlbnQuY29tOyBsaXV6aG9uZzFAY2hp bmF1bmljb20uY247IHpoYW95b25nMTFAaHVhd2VpLmNvbTsgb2NAeXVuaWZ5LmNvbTsgamltQG5l dGdhdGUuY29tOyBOaSwgSG9uZ2p1biA8aG9uZ2p1bi5uaUBpbnRlbC5jb20+OyBqLmJyb21oZWFk QHRpdGFuLWljLmNvbTsgZGVyaUBudG9wLm9yZzsgZmNAbmFwYXRlY2guY29tOyBhcnRodXIuc3VA bGlvbmljLmNvbTsgR3V5IEthbmV0aSA8Z3V5a0BtYXJ2ZWxsLmNvbT47IFNtYWRhciBGdWtzIDxz bWFkYXJmQG1hcnZlbGwuY29tPjsgTGlyb24gSGltaSA8bGlyb25oQG1hcnZlbGwuY29tPg0KU3Vi amVjdDogUkU6IFtkcGRrLWRldl0gW1JGQyBQQVRDSCB2MV0gcmVnZXhkZXY6IGludHJvZHVjZSBy ZWdleGRldiBzdWJzeXN0ZW0NCg0KUmVwbHkgdG8gWGlhbmcncyBxdWVyaWVzIGluIG1haW4gdGhy ZWFkOg0KDQpIaSBhbGwsDQoNClNvbWUgcXVlc3Rpb25zIHJlZ2FyZGluZyBBUElzLiBDb3VsZCB5 b3UgcGxlYXNlIGdpdmUgbW9yZSBpbnNpZ2h0cz8NCg0KMSkgcnRlX3JlZ2V4X29wcw0KICAgICAg YSkgcnNwX2ZsYWdzDQogICAgICBUaGVzZSB0d28gZmxhZ3MgUlRFX1JFR0VYX09QU19SU1BfUE1J X1NPSl9GIGFuZCBSVEVfUkVHRVhfT1BTX1JTUF9QTUlfRU9KX0YgYXJlIHVzZWQgZm9yIGNyb3Nz IGJ1ZmZlciBzY2FuLg0KICAgICAgUlRFX1JFR0VYX09QU19SU1BfUE1JX0VPSl9GIHRlbGxzIHdo ZXRoZXIgd2UgaGF2ZSBhIHBhcnRpYWwgbWF0Y2ggYXQgdGhlIGVuZCBvZiBjdXJyZW50IGJ1ZmZl ciBhZnRlciBzY2FuLg0KICAgICAgV2hhdCdzIHRoZSBwdXJwb3NlIG9mIGhhdmluZyBSVEVfUkVH RVhfT1BTX1JTUF9QTUlfU09KX0Y/DQoNCltKZXJpbl0gU2luY2Ugd2UgbmVlZCB0aHJlZSBzdGF0 ZXMgdG8gcmVwcmVzZW50IHBhcnRpYWwgbWF0Y2ggYnVmZmVyLCBSVEVfUkVHRVhfT1BTX1JTUF9Q TUlfU09KX0YgdG8NCnJlcHJlc2VudCBzdGFydCBvZiB0aGUgYnVmZmVyLCBpbnRlcm1lZGlhdGUg YnVmZmVycyB3aXRoIG5vIGZsYWcsIGFuZCBlbmQgb2YgdGhlIGJ1ZmZlciB3aXRoIFJURV9SRUdF WF9PUFNfUlNQX1BNSV9FT0oNCltYaWFuZ10gSG93IGNvdWxkIGEgdXNlciBsZXZlcmFnZSB0aGVz ZSBmbGFncyBmb3IgbWF0Y2hpbmc/IFN1cHBvc2UgYSBsYXJnZSBidWZmZXIgaXMgZGl2aWRlZCBp bnRvIG11bHRpcGxlIGNodW5rcy4gV2lsbCBSVEVfUkVHRVhfT1BTX1JTUF9QTUlfU09KX0YgY2F1 c2UgYW4gZWFybHkgcXVpdCBvbmNlIGl0IGlzbid0IHNldCBhZnRlciBzY2FuIHRoZSBmaXJzdCBj aHVuay4gU2ltaWxhcmx5LCBSVEVfUkVHRVhfT1BTX1JTUF9QTUlfRU9KIHRlbGxzIGEgdXNlciB3 aGV0aGVyIHRvIHN0b3AgbWF0Y2hpbmcgZnV0dXJlIGJ1ZmZlcnMgYWZ0ZXIgZmluaXNoIHRoZSBs YXN0IGNodW5rPyAgDQoNCiAgICAgIFJURV9SRUdFWF9PUFNfUlNQX01BWF9QUkVGSVhfRjogVGhp cyBsb29rcyBsaWtlIGEgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBpbXBsZW1l bnRhdGlvbi4gSSBhbSB3b25kZXJpbmcgd2hhdCB0aGlzIFBSRUZJWCByZWZlcnMgdG86KT8NCg0K W0plcmluXSBZZXMuIExvb2tzIGxpa2UgaXQgaXMgZm9yIGhhcmR3YXJlIHNwZWNpZmljIGltcGxl bWVudGF0aW9uLiBJbnRyb2R1Y2VkIHJ0ZV9yZWdleF9kZXZfYXR0cl9zZXQvZ2V0IGZ1bmN0aW9u cyB0byBtYWtlIGl0IHBvcnRhYmxlIGFuZA0KVG8gYWRkIG5ldyBpbXBsZW1lbnRhdGlvbiBzcGVj aWZpYyBmaWVsZHMuDQpGb3IgZXhhbXBsZSwgaWYgYSBydWxlIGlzDQovQUJDREVGLipYWVovLCBB QkNEIGlzIGNvbnNpZGVyZWQgdGhlIHByZWZpeCwgYW5kIEVGLipYWVogaXMgY29uc2lkZXJlZCB0 aGUgZmFjdG9yLiBUaGUgcHJlZml4IGlzIGEgbGl0ZXJhbA0Kc3RyaW5nLCB3aGlsZSB0aGUgZmFj dG9yIGNhbiBjb250YWluIGNvbXBsZXggcmVndWxhciBleHByZXNzaW9uIGNvbnN0cnVjdHMuIEFz IGEgcmVzdWx0LCBydWxlIG1hdGNoaW5nIG9jY3VycyBpbg0KdHdvIHN0YWdlczogcHJlZml4IG1h dGNoaW5nIGFuZCBmYWN0b3IgbWF0Y2hpbmcuDQogDQogICAgICBiKSAgdXNlcl9pZCBvciB1c2Vy X3B0cg0KICAgICAgVW5kZXIgd2hhdCBraW5kIG9mIGNpcmN1bXN0YW5jZXMgc2hvdWxkIGFuIGFw cGxpY2F0aW9uIHBhc3MgdmFsdWUgaW50byB0aGVzZSB2YXJpYWJsZXMgZm9yIGVucXVldWUgYW5k IGRlcXVldWVyIG9wZXJhdGlvbnM/DQoNCltKZXJpbl0gSnVzdCBsaWtlIHJ0ZV9jcnlwdG9fb3Bz LCBzdHJ1Y3QgcnRlX3JlZ2V4X29wcyBhbHNvIGFsbG9jYXRlZCB1c2luZyBtZW1wb29sIG5vcm1h bGx5LCBvbiBlbnF1ZXVlLCB1c2VyIGNhbiBzcGVjaWZ5IHVzZXJfaWQNCklmIG5lZWRlZCB0byBp biBvcmRlciBpZGVudGlmeSB0aGUgb3Agb24gZGVxdWV1ZSBpZiByZXF1aXJlZC4gVGhlIHVzZSBj YXNlIGNvdWxkIGJlIHRvIHN0b3JlIHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSBhcHBsaWNhdGlv bg0KUE9WIG9yIHN0b3JpbmcgdGhlIG1idWYgcHRyIGluIHdoaWNoIHBhdHRlcm4gaXMgcmVxdWVz dGVkIGV0Yy4NCiANCg0KIDIpIHJ0ZV9yZWdleF9tYXRjaA0KICAgICAgYSkgb2Zmc2V0OyAvKio8 IFN0YXJ0aW5nIEJ5dGUgUG9zaXRpb24gZm9yIG1hdGNoZWQgcnVsZS4gKi8gYW5kICB1aW50MTZf dCBsZW47IC8qKjwgTGVuZ3RoIG9mIG1hdGNoIGluIGJ5dGVzICovDQogICAgICBMb29rcyBsaWtl IHRoZSBtYXRjaGluZyBvZmZzZXQgaXMgZGVmaW5lZCBhcyAqc3RhcnRpbmcgbWF0Y2hpbmcgb2Zm c2V0KiBpbnN0ZWFkIG9mICplbmQgbWF0Y2hpbmcgb2Zmc2V0KiwgZS5nLiByZXBvcnQgdGhlIG9m ZnNldCBvZiAiYSIgaW5zdGVhZCBvZiAiYyIgZm9yIHBhdHRlcm4gImFiYyIuIA0KICAgICAgSWYg c28sIHRoaXMgbWFrZXMgaXQgaGFyZCB0byBpbnRlZ3JhdGUgc29mdHdhcmUgcmVnZXggbGlicmFy aWVzIHN1Y2ggYXMgSHlwZXJzY2FuIGFuZCBSRTIgYXMgdGhleSBvbmx5IHJlcG9ydCAqZW5kIG1h dGNoaW5nIG9mZnNldCogd2l0aG91dCBsZW5ndGggb2YgbWF0Y2guIA0KICAgICAgQWx0aG91Z2gg SHlwZXJzY2FuIGhhcyBBUEkgZm9yICpzdGFydGluZyBtYXRjaGluZyBvZmZzZXQqLCBpdCBvbmx5 IGRlbGl2ZXJzIHBhcnRpYWwgc3ludGF4IHN1cHBvcnQuIFNvIEkgdGhpbmsgd2UgaGF2ZSB0byBk ZWZpbmUgKmVuZCBvZiBtYXRjaGluZyBvZmZzZXQqIGZvciBzb2Z0d2FyZSBzb2x1dGlvbnMuDQoN CltKZXJpbl0gSSB1bmRlcnN0YW5kIHRoZSBoeXBlcnNjYW4ncyBIU19GTEFHX1NPTV9MRUZUTU9T VCB0cmFkZW9mZnMuIEkgdGhvdWdodCBhcHBsaWNhdGlvbiB3b3VsZCBuZWVkIGFsd2F5cyB0aGUg bGVuZ3RoIG9mIHRoZSBtYXRjaC4NClByb2JhYmx5IHdlIHdpbGwgc2VlIGhvdyBvdGhlciBIVyBp bXBsZW1lbnRhdGlvbiAoZnJvbSBNZWxsYW5veCkgZXRjLiBXZSB3aWxsIHRyeSB0byBhYnN0cmFj dCBpdCwgcHJvYmFibHkgd2UgY2FuIG1ha2UgaXQgYXMgZnVuY3Rpb24gb2YgInVzZXIgcmVxdWVz dGVkIi4NCltYaWFuZ10gWWVzLCBpdCB3aWxsIGJlIGdvb2QgdG8gbWFrZSBpdCBwZXIgdXNlciBy ZXF1ZXN0LiBBdCBsZWFzdCBmcm9tIEh5cGVyc2NhbiB1c2VyJ3MgcG9pbnQgb2Ygdmlldywgc3Rh cnQgb2YgbWF0Y2ggYW5kIG1hdGNoIGxlbmd0aCBhcmUgbm90IG1hbmRhdG9yeS4gDQoNCjMpICBy dGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKQ0KICAgIERvZXMgdGhpcyBtZWFuIHdlIGNhbiBkeW5h bWljYWxseSBhZGQgb3IgZGVsZXRlIHJ1bGVzIGZvciBhbiBhbHJlYWR5IGdlbmVyYXRlZCBkYXRh YmFzZSB3aXRob3V0IHJlY29tcGlsZSBmcm9tIHNjcmF0Y2ggZm9yIGhhcmR3YXJlIFJlZ2V4IGlt cGxlbWVudGF0aW9uPyANCiAgICBJZiBzbywgdGhpcyBpc24ndCBwb3NzaWJsZSBmb3Igc29mdHdh cmUgc29sdXRpb25zIGFzIHRoZXkgZG9uJ3Qgc3VwcG9ydCBkeW5hbWljIGRhdGFiYXNlIHVwZGF0 ZSBhbmQgcmVxdWlyZSByZWNvbXBpbGUuIA0KDQpbSmVyaW5dIHJ0ZV9yZWdleF9ydWxlX2RiX3Vw ZGF0ZSgpIGludGVybmFsbHkgaXQgd291bGQgY2FsbCByZWNvbXBpbGUgZnVuY3Rpb24gZm9yIGJv dGggSFcgYW5kIFNXLg0KU2VlIHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpydWxlX2RiIGluIHJ0ZV9y ZWdleF9kZXZfY29uZmlndXJlKCkgZm9yIHByZWNvbXBpbGVkIHJ1bGUgZGF0YWJhc2UgY2FzZS4N CltYaWFuZ10gT0ssIHNvdW5kcyBsaWtlIHdlIGhhdmUgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgcnVs ZS1zZXQgZm9yIHRoZSBkZXZpY2UgaW4gb3JkZXIgdG8gZG8gcmVjb21waWxlLiBJIHNlZSBib3Ro IEFERCBhbmQgUkVNT1ZFIG9wZXJhdG9ycyBmcm9tIHJ0ZV9yZWdleF9ydWxlLg0KRm9yIHJ1bGVz IHdpdGggUkVNT1ZFIG9wZXJhdG9yLCB3aGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHRvIGhh bmRsZSB0aGVtIGZvciB0aGUgb2xkIHJ1bGUtc2V0PyBEbyB3ZSBuZWVkIHRvIGdvIHRocm91Z2gg dGhlIG9sZCBydWxlLXNldCBhbmQgcmVtb3ZlIGNvcnJlc3BvbmRpbmcgcnVsZXMgYmVmb3JlIGRv aW5nIHJlY29tcGlsZT8gIA0KDQo0KSBydGVfcmVnZXhfcnVsZV9kYl9pbXBvcnQoKSBhbmQgcnRl X3JlZ2V4X3J1bGVfZGJfZXhwb3J0KCkNCiAgICAgV2hhdCdzIHRoZSBleHBlY3RlZCBiZWhhdmlv ciBmb3IgaW1wb3J0IGFuZCBleHBvcnQgb3BlcmF0aW9ucz8gV2lsbCB3ZSBjcmVhdGUgYW5vdGhl ciBjb3B5IG9mIGRhdGFiYXNlIHdoZW4gY2FsbGluZyB0aGVtPyANCg0KW0plcmluXSBEb2VzIGl0 IHJlcXVpcmUgY29weSBvciBub3QgaXQgaXMgSW1wbGVtZW50YXRpb24gZGVmaW5lZC4gTWFydmVs bCdzIEhXIGltcGxlbWVudGF0aW9uIGhhcyBjZW50cmFsaXplZCBydWxlIGRhdGFiYXNlDQpwZXIg ZGV2aWNlLg0KDQpUaGFua3MsDQpYaWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+IEZyb206IFRob21hcyBNb25qYWxvbiA8dGhvbWFzQG1vbmphbG9uLm5ldD4NCj4gU2VudDog VGh1cnNkYXksIEF1Z3VzdCAxNSwgMjAxOSA1OjA0IFBNDQo+IFRvOiBkZXZAZHBkay5vcmcNCj4g Q2M6IEplcmluIEphY29iIEtvbGxhbnVra2FyYW4gPGplcmluakBtYXJ2ZWxsLmNvbT47IFBhdmFu IE5pa2hpbGVzaA0KPiBCaGFnYXZhdHVsYSA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPjsgU2hh aGFmIFNodWxlcg0KPiA8c2hhaGFmc0BtZWxsYW5veC5jb20+OyBIZW1hbnQgQWdyYXdhbCA8aGVt YW50LmFncmF3YWxAbnhwLmNvbT47DQo+IE9waGVyIFJldml2IDxvcGhlckBtZWxsYW5veC5jb20+ OyBBbGV4IFJvc2VuYmF1bQ0KPiA8YWxleHJAbWVsbGFub3guY29tPjsgRG92cmF0IFppZnJvbmkg PGRvdnJhdEBtYXJ2ZWxsLmNvbT47IFByYXN1bg0KPiBLYXBvb3IgPHBrYXBvb3JAbWFydmVsbC5j b20+OyBOaXB1biBHdXB0YSA8bmlwdW4uZ3VwdGFAbnhwLmNvbT47DQo+IFdhbmcsIFhpYW5nIFcg PHhpYW5nLncud2FuZ0BpbnRlbC5jb20+OyBSaWNoYXJkc29uLCBCcnVjZQ0KPiA8YnJ1Y2Uucmlj aGFyZHNvbkBpbnRlbC5jb20+OyB5YW5nLmEuaG9uZ0BpbnRlbC5jb207DQo+IGhhcnJ5LmNoYW5n QGludGVsLmNvbTsgZ3UuamlhbjFAenRlLmNvbS5jbjsgc2hhbmppYW5naEBjaGluYXRlbGVjb20u Y247DQo+IHpoYW5neS55dW5AY2hpbmF0ZWxlY29tLmNuOyBsaXhpbmdmdUBodWFjaGVudGVsLmNv bTsNCj4gd3VzaHVhaUBpbnNwdXIuY29tOyB5dXlpbmd4aWFAeXhsaW5rLmNvbTsNCj4gZmFuY2hl bmdnYW5nQHN1bnlhaW5mby5jb207IGRhdmlkZmdhb0B0ZW5jZW50LmNvbTsNCj4gbGl1emhvbmcx QGNoaW5hdW5pY29tLmNuOyB6aGFveW9uZzExQGh1YXdlaS5jb207IG9jQHl1bmlmeS5jb207DQo+ IGppbUBuZXRnYXRlLmNvbTsgaG9uZ2p1bi5uaUBpbnRlbC5jb207IGouYnJvbWhlYWRAdGl0YW4t aWMuY29tOw0KPiBkZXJpQG50b3Aub3JnOyBmY0BuYXBhdGVjaC5jb207IGFydGh1ci5zdUBsaW9u aWMuY29tDQo+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtSRkMgUEFUQ0ggdjFdIHJlZ2V4ZGV2 OiBpbnRyb2R1Y2UgcmVnZXhkZXYNCj4gc3Vic3lzdGVtDQo+IA0KPiArQ2MgbW9yZQ0KPiANCj4g LS0tLS0tLS0tLS0tDQo+IA0KPiBGcm9tOiBKZXJpbiBKYWNvYiA8amVyaW5qQG1hcnZlbGwuY29t Pg0KPiANCj4gRXZlbiB0aG91Z2ggdGhlcmUgYXJlIHNvbWUgdmVuZG9ycyB3aGljaCBvZmZlciBS ZWdleCBIVyBvZmZsb2FkLCBkdWUgdG8NCj4gbGFjayBvZiBzdGFuZGFyZCBBUEksIEl0IGlzIGRp ZmZjdWx0IGZvciBEUERLIGNvbnN1bWVyIHRvIHVzZSB0aGVtDQo+IGluIGEgcG9ydGFibGUgd2F5 Lg0KPiANCj4gVGhpcyBfUkZDXyBhdHRlbXB0cyB0byBzdGFuZGFyZGl6ZSB0aGUgUmVnRXgvRFBJ IG9mZmxvYWQgQVBJcyBmb3IgRFBESy4NCj4gDQo+IFRoZSBEb3h5Z2VuIGdlbmVyYXRlZCBSRkMg QVBJIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGhlcmU6DQo+IGh0dHBzOi8vZHJlYW15LW5vZXRo ZXItMjI3NzdlLm5ldGxpZnkuY29tL3J0ZV9fcmVnZXhkZXZfOGguaHRtbA0KPiANCj4gVGhpcyBS RkMgY3JhZnRlZCBiYXNlZCBvbiBTVyBSZWdleCBBUEkgZnJhbWV3b3JrcyBzdWNoIGFzIGxpYnBj cmUgYW5kDQo+IGh5cGVyc2NhbiBhbmQgYSBmZXcgb2YgdGhlIFJlZ0V4IEhXIElQcyB3aGljaCBJ IGFtIGF3YXJlIG9mLg0KPiANCj4gUmVnRXggcGF0dGVybiBtYXRjaGluZyBhcHBsaWNhdGlvbnM6 DQo+IOKAoiBOZXh0IEdlbmVyYXRpb24gRmlyZXdhbGxzIChOR0ZXKQ0KPiDigKIgRGVlcCBQYWNr ZXQgYW5kIEZsb3cgSW5zcGVjdGlvbiAoRFBJKQ0KPiDigKIgSW50cnVzaW9uIFByZXZlbnRpb24g U3lzdGVtcyAoSVBTKQ0KPiDigKIgRERvUyBNaXRpZ2F0aW9uDQo+IOKAoiBOZXR3b3JrIE1vbml0 b3JpbmcNCj4g4oCiIERhdGEgTG9zcyBQcmV2ZW50aW9uIChETFApDQo+IOKAoiBTbWFydCBOSUNz DQo+IOKAoiBHcmFtbWFyIGJhc2VkIGNvbnRlbnQgcHJvY2Vzc2luZw0KPiDigKIgVVJMLCBzcGFt IGFuZCBhZHdhcmUgZmlsdGVyaW5nDQo+IOKAoiBBZHZhbmNlZCBhdWRpdGluZyBhbmQgcG9saWNp bmcgb2YgdXNlci9hcHBsaWNhdGlvbiBzZWN1cml0eSBwb2xpY2llcw0KPiDigKIgRmluYW5jaWFs IGRhdGEgbWluaW5nIC0gcGFyc2luZyBvZiBzdHJlYW1lZCBmaW5hbmNpYWwgZmVlZHMNCj4gDQo+ IFJlcXVlc3QgdG8gcmV2aWV3IGZyb20gSFcgYW5kIFNXIFJlZ0V4IHZlbmRvcnMgYW5kIFJlZ0V4 IGFwcGxpY2F0aW9uDQo+IHVzZXJzDQo+IHRvIGhhdmUgcG9ydGFibGUgRFBESyBBUEkgZm9yIFJl Z0V4Lg0KPiANCj4gVGhlIEFQSSBzY2hlbWF0aWNzIGFyZSBiYXNlZCBjcnlwdG9kZXYsIGV2ZW50 ZGV2IGFuZCBldGhkZXYgZXhpc3RpbmcNCj4gZGV2aWNlIEFQSS4NCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IEplcmluIEphY29iIDxqZXJpbmpAbWFydmVsbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IFBh dmFuIE5pa2hpbGVzaCA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPg0KPiAtLS0NCj4gDQo+IFJU RSBSZWdFeCBEZXZpY2UgQVBJDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiBEZWZpbmVz IFJURSBSZWdFeCBEZXZpY2UgQVBJcyBmb3IgUmVnRXggb3BlcmF0aW9ucyBhbmQgaXRzIHByb3Zp c2lvbmluZy4NCj4gDQo+IFRoZSBSZWdFeCBEZXZpY2UgQVBJIGlzIGNvbXBvc2VkIG9mIHR3byBw YXJ0czoNCj4gDQo+IC0gVGhlIGFwcGxpY2F0aW9uLW9yaWVudGVkIFJlZ0V4IEFQSSB0aGF0IGlu Y2x1ZGVzIGZ1bmN0aW9ucyB0byBzZXR1cA0KPiBhIFJlZ0V4IGRldmljZSAoY29uZmlndXJlIGl0 LCBzZXR1cCBpdHMgcXVldWUgcGFpcnMgYW5kIHN0YXJ0IGl0KSwNCj4gdXBkYXRlIHRoZSBydWxl IGRhdGFiYXNlIGFuZCBzbyBvbi4NCj4gDQo+IC0gVGhlIGRyaXZlci1vcmllbnRlZCBSZWdFeCBB UEkgdGhhdCBleHBvcnRzIGEgZnVuY3Rpb24gYWxsb3dpbmcNCj4gYSBSZWdFeCBwb2xsIE1vZGUg RHJpdmVyIChQTUQpIHRvIHNpbXVsdGFuZW91c2x5IHJlZ2lzdGVyIGl0c2VsZiBhcw0KPiBhIFJl Z0V4IGRldmljZSBkcml2ZXIuDQo+IA0KPiBSZWdFeCBkZXZpY2UgY29tcG9uZW50cyBhbmQgZGVm aW5pdGlvbnM6DQo+IA0KPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKw0KPiAgICAgfCAgICAgICAg ICAgICAgICAgfA0KPiAgICAgfCAgICAgICAgICAgICAgICAgby0tLS0tLS0tLSsgICAgcnRlX3Jl Z2V4X1tlbnxkZV1xdWV1ZV9idXJzdCgpDQo+ICAgICB8ICAgUENSRSBiYXNlZCAgICBvLS0tLS0t KyAgfCAgICAgICAgICAgICAgIHwNCj4gICAgIHwgIFJlZ0V4IHBhdHRlcm4gIHwgICAgICB8ICB8 ICArLS0tLS0tLS0rICAgfA0KPiAgICAgfCBtYXRjaGluZyBlbmdpbmUgby0tLS0tLSstLSstLW8g ICAgICAgIHwgICB8ICAgICstLS0tLS0rDQo+ICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAg fCAgfCAgfCBxdWV1ZSAgfDw9PW89PT0+fENvcmUgMHwNCj4gICAgIHwgICAgICAgICAgICAgICAg IG8tLS0tKyB8ICB8ICB8IHBhaXIgMCB8ICAgICAgICB8ICAgICAgfA0KPiAgICAgfCAgICAgICAg ICAgICAgICAgfCAgICB8IHwgIHwgICstLS0tLS0tLSsgICAgICAgICstLS0tLS0rDQo+ICAgICAr LS0tLS0tLS0tLS0tLS0tLS0rICAgIHwgfCAgfA0KPiAgICAgICAgICAgIF4gICAgICAgICAgICAg ICB8IHwgIHwgICstLS0tLS0tLSsNCj4gICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8ICB8 ICB8ICAgICAgICB8ICAgICAgICArLS0tLS0tKw0KPiAgICAgICAgICAgIHwgICAgICAgICAgICAg ICB8ICstLSstLW8gcXVldWUgIHw8PT09PT09PnxDb3JlIDF8DQo+ICAgICAgICBSdWxlfERhdGFi YXNlICAgICAgIHwgICAgfCAgfCBwYWlyIDEgfCAgICAgICAgfCAgICAgIHwNCj4gICAgICstLS0t LS0rLS0tLS0tLS0tLSsgICAgfCAgICB8ICArLS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0KPiAg ICAgfCAgICAgR3JvdXAgMCAgICAgfCAgICB8ICAgIHwNCj4gICAgIHwgKy0tLS0tLS0tLS0tLS0r IHwgICAgfCAgICB8ICArLS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0KPiAgICAgfCB8IFJ1bGVz IDAuLm4gIHwgfCAgICB8ICAgIHwgIHwgICAgICAgIHwgICAgICAgIHxDb3JlIDJ8DQo+ICAgICB8 ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgKy0tbyBxdWV1ZSAgfDw9PT09PT0+fCAgICAgIHwN Cj4gICAgIHwgICAgIEdyb3VwIDEgICAgIHwgICAgfCAgICAgICB8IHBhaXIgMiB8ICAgICAgICAr LS0tLS0tKw0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgICAgICstLS0tLS0tLSsN Cj4gICAgIHwgfCBSdWxlcyAwLi5uICB8IHwgICAgfA0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsg fCAgICB8ICAgICAgICstLS0tLS0tLSsNCj4gICAgIHwgICAgIEdyb3VwIDIgICAgIHwgICAgfCAg ICAgICB8ICAgICAgICB8ICAgICAgICArLS0tLS0tKw0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsg fCAgICB8ICAgICAgIHwgcXVldWUgIHw8PT09PT09PnxDb3JlIG58DQo+ICAgICB8IHwgUnVsZXMg MC4ubiAgfCB8ICAgICstLS0tLS0tbyBwYWlyIG4gfCAgICAgICAgfCAgICAgIHwNCj4gICAgIHwg Ky0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgICArLS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0K PiAgICAgfCAgICAgR3JvdXAgbiAgICAgfA0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfDwtLS0t LS0tcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCkNCj4gICAgIHwgfCBSdWxlcyAwLi5uICB8IHw8 LS0tLS0tLXJ0ZV9yZWdleF9ydWxlX2RiX2ltcG9ydCgpDQo+ICAgICB8ICstLS0tLS0tLS0tLS0t KyB8LS0tLS0tLT5ydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQoKQ0KPiAgICAgKy0tLS0tLS0tLS0t LS0tLS0tKw0KPiANCj4gUmVnRXg6IEEgcmVndWxhciBleHByZXNzaW9uIGlzIGEgY29uY2lzZSBh bmQgZmxleGlibGUgbWVhbnMgZm9yIG1hdGNoaW5nDQo+IHN0cmluZ3Mgb2YgdGV4dCwgc3VjaCBh cyBwYXJ0aWN1bGFyIGNoYXJhY3RlcnMsIHdvcmRzLCBvciBwYXR0ZXJucyBvZg0KPiBjaGFyYWN0 ZXJzLiBBIGNvbW1vbiBhYmJyZXZpYXRpb24gZm9yIHRoaXMgaXMg4oCcUmVnRXjigJ0uDQo+IA0K PiBSZWdFeCBkZXZpY2U6IEEgaGFyZHdhcmUgb3Igc29mdHdhcmUtYmFzZWQgaW1wbGVtZW50YXRp b24gb2YgUmVnRXgNCj4gZGV2aWNlIEFQSSBmb3IgUENSRSBiYXNlZCBwYXR0ZXJuIG1hdGNoaW5n IHN5bnRheCBhbmQgc2VtYW50aWNzLg0KPiANCj4gUENSRSBSZWdFeCBzeW50YXggYW5kIHNlbWFu dGljcyBzcGVjaWZpY2F0aW9uOg0KPiBodHRwOi8vcmVnZXhraXQuc291cmNlZm9yZ2UubmV0L0Rv Y3VtZW50YXRpb24vcGNyZS9wY3JlcGF0dGVybi5odG1sDQo+IA0KPiBSZWdFeCBxdWV1ZSBwYWly OiBFYWNoIFJlZ0V4IGRldmljZSBzaG91bGQgaGF2ZSBvbmUgb3IgbW9yZSBxdWV1ZSBwYWlyIHRv DQo+IHRyYW5zbWl0IGEgYnVyc3Qgb2YgcGF0dGVybiBtYXRjaGluZyByZXF1ZXN0IGFuZCByZWNl aXZlIGEgYnVyc3Qgb2YNCj4gcmVjZWl2ZSB0aGUgcGF0dGVybiBtYXRjaGluZyByZXNwb25zZS4g VGhlIHBhdHRlcm4gbWF0Y2hpbmcNCj4gcmVxdWVzdC9yZXNwb25zZQ0KPiBlbWJlZGRlZCBpbiAq cnRlX3JlZ2V4X29wcyogc3RydWN0dXJlLg0KPiANCj4gUnVsZTogQSBwYXR0ZXJuIG1hdGNoaW5n IHJ1bGUgZXhwcmVzc2VkIGluIFBDUkUgUmVnRXggc3ludGF4IGFsb25nIHdpdGgNCj4gTWF0Y2gg SUQgYW5kIEdyb3VwIElEIHRvIGlkZW50aWZ5IHRoZSBydWxlIHVwb24gdGhlIG1hdGNoLg0KPiAN Cj4gUnVsZSBkYXRhYmFzZTogVGhlIFJlZ0V4IGRldmljZSBhY2NlcHRzIHJlZ3VsYXIgZXhwcmVz c2lvbnMgYW5kIGNvbnZlcnRzDQo+IHRoZW0NCj4gaW50byBhIGNvbXBpbGVkIHJ1bGUgZGF0YWJh c2UgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIHNjYW4gZGF0YS4NCj4gQ29tcGlsYXRpb24gYWxs b3dzIHRoZSBkZXZpY2UgdG8gYW5hbHl6ZSB0aGUgZ2l2ZW4gcGF0dGVybihzKSBhbmQNCj4gcHJl LWRldGVybWluZSBob3cgdG8gc2NhbiBmb3IgdGhlc2UgcGF0dGVybnMgaW4gYW4gb3B0aW1pemVk IGZhc2hpb24gdGhhdA0KPiB3b3VsZCBiZSBmYXIgdG9vIGV4cGVuc2l2ZSB0byBjb21wdXRlIGF0 IHJ1bi10aW1lLiBBIHJ1bGUgZGF0YWJhc2UgY29udGFpbnMNCj4gYSBzZXQgb2YgcnVsZXMgdGhh dCBjb21waWxlZCBpbiBkZXZpY2Ugc3BlY2lmaWMgYmluYXJ5IGZvcm0uDQo+IA0KPiBNYXRjaCBJ RCBvciBSdWxlIElEOiBBIHVuaXF1ZSBpZGVudGlmaWVyIHByb3ZpZGVkIGF0IHRoZSB0aW1lIG9m IHJ1bGUNCj4gY3JlYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBpZGVudGlmeSB0aGUgcnVs ZSB1cG9uIG1hdGNoLg0KPiANCj4gR3JvdXAgSUQ6IEdyb3VwIG9mIHJ1bGVzIGNhbiBiZSBncm91 cGVkIHVuZGVyIG9uZSBncm91cCBJRCB0byBlbmFibGUNCj4gcnVsZSBpc29sYXRpb24gYW5kIGVm ZmVjdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBBIHVuaXF1ZSBncm91cCBpZGVudGlmaWVyDQo+IHBy b3ZpZGVkIGF0IHRoZSB0aW1lIG9mIHJ1bGUgY3JlYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiB0 byBpZGVudGlmeSB0aGUNCj4gcnVsZSB1cG9uIG1hdGNoLg0KPiANCj4gU2NhbjogQSBwYXR0ZXJu IG1hdGNoaW5nIHJlcXVlc3QgdGhyb3VnaCAqZW5xdWV1ZSogQVBJLg0KPiANCj4gSXQgbWF5IHBv c3NpYmxlIHRoYXQgYSBnaXZlbiBSZWdFeCBkZXZpY2UgbWF5IG5vdCBzdXBwb3J0IGFsbCB0aGUg ZmVhdHVyZXMNCj4gb2YgUENSRS4gVGhlIGFwcGxpY2F0aW9uIG1heSBwcm9iZSB1bnN1cHBvcnRl ZCBmZWF0dXJlcyB0aHJvdWdoDQo+IHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5z dXBfZmxhZ3MNCj4gDQo+IEJ5IGRlZmF1bHQsIGFsbCB0aGUgZnVuY3Rpb25zIG9mIHRoZSBSZWdF eCBEZXZpY2UgQVBJIGV4cG9ydGVkIGJ5IGEgUE1EDQo+IGFyZSBsb2NrLWZyZWUgZnVuY3Rpb25z IHdoaWNoIGFzc3VtZSB0byBub3QgYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBvbg0KPiBkaWZmZXJl bnQgbG9naWNhbCBjb3JlcyB0byB3b3JrIG9uIHRoZSBzYW1lIHRhcmdldCBvYmplY3QuIEZvciBp bnN0YW5jZSwNCj4gdGhlIGRlcXVldWUgZnVuY3Rpb24gb2YgYSBQTUQgY2Fubm90IGJlIGludm9r ZWQgaW4gcGFyYWxsZWwgb24gdHdvIGxvZ2ljYWwNCj4gY29yZXMgdG8gb3BlcmF0ZXMgb24gc2Ft ZSBSZWdFeCBxdWV1ZSBwYWlyLiBPZiBjb3Vyc2UsIHRoaXMgZnVuY3Rpb24NCj4gY2FuIGJlIGlu dm9rZWQgaW4gcGFyYWxsZWwgYnkgZGlmZmVyZW50IGxvZ2ljYWwgY29yZSBvbiBkaWZmZXJlbnQg cXVldWUgcGFpci4NCj4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1cHBlciBsZXZl bCBhcHBsaWNhdGlvbiB0byBlbmZvcmNlIHRoaXMgcnVsZS4NCj4gDQo+IEluIGFsbCBmdW5jdGlv bnMgb2YgdGhlIFJlZ0V4IEFQSSwgdGhlIFJlZ0V4IGRldmljZSBpcw0KPiBkZXNpZ25hdGVkIGJ5 IGFuIGludGVnZXIgPj0gMCBuYW1lZCB0aGUgZGV2aWNlIGlkZW50aWZpZXIgKmRldl9pZCoNCj4g DQo+IEF0IHRoZSBSZWdFeCBkcml2ZXIgbGV2ZWwsIFJlZ0V4IGRldmljZXMgYXJlIHJlcHJlc2Vu dGVkIGJ5IGEgZ2VuZXJpYw0KPiBkYXRhIHN0cnVjdHVyZSBvZiB0eXBlICpydGVfcmVnZXhfZGV2 Ki4NCj4gDQo+IFJlZ0V4IGRldmljZXMgYXJlIGR5bmFtaWNhbGx5IHJlZ2lzdGVyZWQgZHVyaW5n IHRoZSBQQ0kvU29DIGRldmljZSBwcm9iaW5nDQo+IHBoYXNlIHBlcmZvcm1lZCBhdCBFQUwgaW5p dGlhbGl6YXRpb24gdGltZS4NCj4gV2hlbiBhIFJlZ0V4IGRldmljZSBpcyBiZWluZyBwcm9iZWQs IGEgKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBhbmQNCj4gYSBuZXcgZGV2aWNlIGlkZW50aWZp ZXIgYXJlIGFsbG9jYXRlZCBmb3IgdGhhdCBkZXZpY2UuIFRoZW4sIHRoZQ0KPiByZWdleF9kZXZf aW5pdCgpIGZ1bmN0aW9uIHN1cHBsaWVkIGJ5IHRoZSBSZWdFeCBkcml2ZXIgbWF0Y2hpbmcgdGhl IHByb2JlZA0KPiBkZXZpY2UgaXMgaW52b2tlZCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBk ZXZpY2UuDQo+IA0KPiBUaGUgcm9sZSBvZiB0aGUgZGV2aWNlIGluaXQgZnVuY3Rpb24gY29uc2lz dHMgb2YgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSBvcg0KPiBzb2Z0d2FyZSBSZWdFeCBkcml2ZXIg aW1wbGVtZW50YXRpb25zLg0KPiANCj4gSWYgdGhlIGRldmljZSBpbml0IG9wZXJhdGlvbiBpcyBz dWNjZXNzZnVsLCB0aGUgY29ycmVzcG9uZGVuY2UgYmV0d2Vlbg0KPiB0aGUgZGV2aWNlIGlkZW50 aWZpZXIgYXNzaWduZWQgdG8gdGhlIG5ldyBkZXZpY2UgYW5kIGl0cyBhc3NvY2lhdGVkDQo+ICpy dGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgaXMgZWZmZWN0aXZlbHkgcmVnaXN0ZXJlZC4NCj4gT3Ro ZXJ3aXNlLCBib3RoIHRoZSAqcnRlX3JlZ2V4X2Rldiogc3RydWN0dXJlIGFuZCB0aGUgZGV2aWNl IGlkZW50aWZpZXIgYXJlDQo+IGZyZWVkLg0KPiANCj4gVGhlIGZ1bmN0aW9ucyBleHBvcnRlZCBi eSB0aGUgYXBwbGljYXRpb24gUmVnRXggQVBJIHRvIHNldHVwIGEgZGV2aWNlDQo+IGRlc2lnbmF0 ZWQgYnkgaXRzIGRldmljZSBpZGVudGlmaWVyIG11c3QgYmUgaW52b2tlZCBpbiB0aGUgZm9sbG93 aW5nIG9yZGVyOg0KPiAtIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkNCj4gLSBydGVfcmVnZXhf cXVldWVfcGFpcl9zZXR1cCgpDQo+IC0gcnRlX3JlZ2V4X2Rldl9zdGFydCgpDQo+IA0KPiBUaGVu LCB0aGUgYXBwbGljYXRpb24gY2FuIGludm9rZSwgaW4gYW55IG9yZGVyLCB0aGUgZnVuY3Rpb25z DQo+IGV4cG9ydGVkIGJ5IHRoZSBSZWdFeCBBUEkgdG8gZW5xdWV1ZSBwYXR0ZXJuIG1hdGNoaW5n IGpvYiwgZGVxdWV1ZQ0KPiBwYXR0ZXJuDQo+IG1hdGNoaW5nIHJlc3BvbnNlLCBnZXQgdGhlIHN0 YXRzLCB1cGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2UsDQo+IGdldC9zZXQgZGV2aWNlIGF0dHJpYnV0 ZXMgYW5kIHNvIG9uDQo+IA0KPiBJZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gY2hhbmdlIHRo ZSBjb25maWd1cmF0aW9uIChpLmUuIGNhbGwNCj4gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKSBv ciBydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpKSwgaXQgbXVzdCBjYWxsDQo+IHJ0ZV9yZWdl eF9kZXZfc3RvcCgpIGZpcnN0IHRvIHN0b3AgdGhlIGRldmljZSBhbmQgdGhlbiBkbyB0aGUNCj4g cmVjb25maWd1cmF0aW9uDQo+IGJlZm9yZSBjYWxsaW5nIHJ0ZV9yZWdleF9kZXZfc3RhcnQoKSBh Z2Fpbi4gVGhlIGVucXVldWUgYW5kIGRlcXVldWUNCj4gZnVuY3Rpb25zIHNob3VsZCBub3QgYmUg aW52b2tlZCB3aGVuIHRoZSBkZXZpY2UgaXMgc3RvcHBlZC4NCj4gDQo+IEZpbmFsbHksIGFuIGFw cGxpY2F0aW9uIGNhbiBjbG9zZSBhIFJlZ0V4IGRldmljZSBieSBpbnZva2luZyB0aGUNCj4gcnRl X3JlZ2V4X2Rldl9jbG9zZSgpIGZ1bmN0aW9uLg0KPiANCj4gRWFjaCBmdW5jdGlvbiBvZiB0aGUg YXBwbGljYXRpb24gUmVnRXggQVBJIGludm9rZXMgYSBzcGVjaWZpYyBmdW5jdGlvbg0KPiBvZiB0 aGUgUE1EIHRoYXQgY29udHJvbHMgdGhlIHRhcmdldCBkZXZpY2UgZGVzaWduYXRlZCBieSBpdHMg ZGV2aWNlDQo+IGlkZW50aWZpZXIuDQo+IA0KPiBGb3IgdGhpcyBwdXJwb3NlLCBhbGwgZGV2aWNl LXNwZWNpZmljIGZ1bmN0aW9ucyBvZiBhIFJlZ0V4IGRyaXZlciBhcmUNCj4gc3VwcGxpZWQgdGhy b3VnaCBhIHNldCBvZiBwb2ludGVycyBjb250YWluZWQgaW4gYSBnZW5lcmljIHN0cnVjdHVyZSBv ZiB0eXBlDQo+ICpyZWdleF9kZXZfb3BzKi4NCj4gVGhlIGFkZHJlc3Mgb2YgdGhlICpyZWdleF9k ZXZfb3BzKiBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGluIHRoZQ0KPiAqcnRlX3JlZ2V4X2RldioNCj4g c3RydWN0dXJlIGJ5IHRoZSBkZXZpY2UgaW5pdCBmdW5jdGlvbiBvZiB0aGUgUmVnRXggZHJpdmVy LCB3aGljaCBpcw0KPiBpbnZva2VkIGR1cmluZyB0aGUgUENJL1NvQyBkZXZpY2UgcHJvYmluZyBw aGFzZSwgYXMgZXhwbGFpbmVkIGVhcmxpZXIuDQo+IA0KPiBJbiBvdGhlciB3b3JkcywgZWFjaCBm dW5jdGlvbiBvZiB0aGUgUmVnRXggQVBJIHNpbXBseSByZXRyaWV2ZXMgdGhlDQo+ICpydGVfcmVn ZXhfZGV2KiBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgaWRlbnRpZmllciBh bmQNCj4gcGVyZm9ybXMgYW4gaW5kaXJlY3QgaW52b2NhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGlu ZyBkcml2ZXIgZnVuY3Rpb24NCj4gc3VwcGxpZWQgaW4gdGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1 Y3R1cmUgb2YgdGhlICpydGVfcmVnZXhfZGV2Kg0KPiBzdHJ1Y3R1cmUuDQo+IA0KPiBGb3IgcGVy Zm9ybWFuY2UgcmVhc29ucywgdGhlIGFkZHJlc3Mgb2YgdGhlIGZhc3QtcGF0aCBmdW5jdGlvbnMg b2YgdGhlDQo+IFJlZ0V4IGRyaXZlciBpcyBub3QgY29udGFpbmVkIGluIHRoZSAqcmVnZXhfZGV2 X29wcyogc3RydWN0dXJlLg0KPiBJbnN0ZWFkLCB0aGV5IGFyZSBkaXJlY3RseSBzdG9yZWQgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgKnJ0ZV9yZWdleF9kZXYqDQo+IHN0cnVjdHVyZSB0byBhdm9p ZCBhbiBleHRyYSBpbmRpcmVjdCBtZW1vcnkgYWNjZXNzIGR1cmluZyB0aGVpciBpbnZvY2F0aW9u Lg0KPiANCj4gUlRFIFJlZ0V4IGRldmljZSBkcml2ZXJzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBm b3IgZW5xdWV1ZSBvciBkZXF1ZXVlDQo+IG9wZXJhdGlvbi4gSW5zdGVhZCwgUmVnRXggZHJpdmVy cyBleHBvcnQgUG9sbC1Nb2RlIGVucXVldWUgYW5kIGRlcXVldWUNCj4gZnVuY3Rpb25zIHRvIGFw cGxpY2F0aW9ucy4NCj4gDQo+IFRoZSAqZW5xdWV1ZSogb3BlcmF0aW9uIHN1Ym1pdHMgYSBidXJz dCBvZiBSZWdFeCBwYXR0ZXJuIG1hdGNoaW5nDQo+IHJlcXVlc3QNCj4gdG8gdGhlIFJlZ0V4IGRl dmljZSBhbmQgdGhlICpkZXF1ZXVlKiBvcGVyYXRpb24gZ2V0cyBhIGJ1cnN0IG9mIHBhdHRlcm4N Cj4gbWF0Y2hpbmcgcmVzcG9uc2UgZm9yIHRoZSBvbmVzIHN1Ym1pdHRlZCB0aHJvdWdoICplbnF1 ZXVlKiBvcGVyYXRpb24uDQo+IA0KPiBUeXBpY2FsIGFwcGxpY2F0aW9uIHV0aWxpc2F0aW9uIG9m IHRoZSBSZWdFeCBkZXZpY2UgQVBJIHdpbGwgZm9sbG93IHRoZQ0KPiBmb2xsb3dpbmcgcHJvZ3Jh bW1pbmcgZmxvdy4NCj4gDQo+IC0gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiAtIHJ0ZV9y ZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkNCj4gLSBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSBO ZWVkcyB0byBpbnZva2UgaWYgcHJlY29tcGlsZWQgcnVsZSBkYXRhYmFzZQ0KPiBub3QNCj4gcHJv dmlkZWQgaW4gcnRlX3JlZ2V4X2Rldl9jb25maWc6OnJ1bGVfZGIgZm9yIHJ0ZV9yZWdleF9kZXZf Y29uZmlndXJlKCkNCj4gYW5kL29yIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHVwZGF0ZSBydWxlIGRh dGFiYXNlLg0KPiAtIENyZWF0ZSBvciByZXVzZSBleGl0aW5nIG1lbXBvb2wgZm9yICpydGVfcmVn ZXhfb3BzKiBvYmplY3RzLg0KPiAtIHJ0ZV9yZWdleF9kZXZfc3RhcnQoKQ0KPiAtIHJ0ZV9yZWdl eF9lbnF1ZXVlX2J1cnN0KCkNCj4gLSBydGVfcmVnZXhfZGVxdWV1ZV9idXJzdCgpDQo+IA0KPiAt LS0NCj4gDQo+IGNvbmZpZy9jb21tb25fYmFzZSAgICAgICAgICAgICAgICAgfCAgICA1ICsNCj4g ZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCAgICAgICAgICB8ICAgIDEgKw0KPiBkb2MvYXBpL2Rv eHktYXBpLmNvbmYuaW4gICAgICAgICAgIHwgICAgMSArDQo+IGxpYi9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAyICsNCj4gbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmlsZSAg ICAgICB8ICAgMjMgKw0KPiBsaWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5jIHwgICAg NSArDQo+IGxpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmggfCAxMjQ3DQo+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysNCj4gNyBmaWxlcyBjaGFuZ2VkLCAxMjg0IGluc2VydGlv bnMoKykNCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmVnZXhkZXYvTWFrZWZpbGUN Cj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmMN Cj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmgN Cj4gDQo+IGRpZmYgLS1naXQgYS9jb25maWcvY29tbW9uX2Jhc2UgYi9jb25maWcvY29tbW9uX2Jh c2UNCj4gaW5kZXggZTQwNmU3ODM2Li45ODYwOTNkNmUgMTAwNjQ0DQo+IC0tLSBhL2NvbmZpZy9j b21tb25fYmFzZQ0KPiArKysgYi9jb25maWcvY29tbW9uX2Jhc2UNCj4gQEAgLTc0Niw2ICs3NDYs MTEgQEANCj4gQ09ORklHX1JURV9MSUJSVEVfUE1EX0RQQUEyX1FETUFfUkFXREVWPW4NCj4gIw0K PiBDT05GSUdfUlRFX0xJQlJURV9QTURfSUZQR0FfUkFXREVWPXkNCj4gDQo+ICsjDQo+ICsjIENv bXBpbGUgcmVnZXggZGV2aWNlIHN1cHBvcnQNCj4gKyMNCj4gK0NPTkZJR19SVEVfTElCUlRFX1JF R0VYREVWPXkNCj4gKw0KPiAjDQo+ICMgQ29tcGlsZSBsaWJydGVfcmluZw0KPiAjDQo+IGRpZmYg LS1naXQgYS9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kIGIvZG9jL2FwaS9kb3h5LWFwaS1pbmRl eC5tZA0KPiBpbmRleCA3MTUyNDhkZDEuLmEwYmMyN2FlNCAxMDA2NDQNCj4gLS0tIGEvZG9jL2Fw aS9kb3h5LWFwaS1pbmRleC5tZA0KPiArKysgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+ IEBAIC0yNiw2ICsyNiw3IEBAIFRoZSBwdWJsaWMgQVBJIGhlYWRlcnMgYXJlIGdyb3VwZWQgYnkg dG9waWNzOg0KPiBbZXZlbnRfdGltZXJfYWRhcHRlcl0gICAgKEByZWYgcnRlX2V2ZW50X3RpbWVy X2FkYXB0ZXIuaCksDQo+IFtldmVudF9jcnlwdG9fYWRhcHRlcl0gICAoQHJlZiBydGVfZXZlbnRf Y3J5cHRvX2FkYXB0ZXIuaCksDQo+IFtyYXdkZXZdICAgICAgICAgICAgIChAcmVmIHJ0ZV9yYXdk ZXYuaCksDQo+ICsgIFtyZWdleGRldl0gICAgICAgICAgIChAcmVmIHJ0ZV9yZWdleGRldi5oKSwN Cj4gW21ldHJpY3NdICAgICAgICAgICAgKEByZWYgcnRlX21ldHJpY3MuaCksDQo+IFtiaXRyYXRl XSAgICAgICAgICAgIChAcmVmIHJ0ZV9iaXRyYXRlLmgpLA0KPiBbbGF0ZW5jeV0gICAgICAgICAg ICAoQHJlZiBydGVfbGF0ZW5jeXN0YXRzLmgpLA0KPiBkaWZmIC0tZ2l0IGEvZG9jL2FwaS9kb3h5 LWFwaS5jb25mLmluIGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQo+IGluZGV4IGI5ODk2Y2I2 My4uN2FkYjgyMWJiIDEwMDY0NA0KPiAtLS0gYS9kb2MvYXBpL2RveHktYXBpLmNvbmYuaW4NCj4g KysrIGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQo+IEBAIC01Myw2ICs1Myw3IEBAIElOUFVU ICAgICAgICAgICAgICAgICAgID0gQFRPUERJUkAvZG9jL2FwaS9kb3h5LWFwaS0NCj4gaW5kZXgu bWQgXA0KPiBAVE9QRElSQC9saWIvbGlicnRlX3Jhd2RldiBcDQo+IEBUT1BESVJAL2xpYi9saWJy dGVfcmN1IFwNCj4gQFRPUERJUkAvbGliL2xpYnJ0ZV9yZW9yZGVyIFwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL2xpYnJ0ZV9yZWdleGRldiBcDQo+IEBUT1BESVJA L2xpYi9saWJydGVfcmluZyBcDQo+IEBUT1BESVJAL2xpYi9saWJydGVfc2NoZWQgXA0KPiBAVE9Q RElSQC9saWIvbGlicnRlX3NlY3VyaXR5IFwNCj4gZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBi L2xpYi9NYWtlZmlsZQ0KPiBpbmRleCA3OTFlMGQ5OTEuLjU3ZGU5NjkxYSAxMDA2NDQNCj4gLS0t IGEvbGliL01ha2VmaWxlDQo+ICsrKyBiL2xpYi9NYWtlZmlsZQ0KPiBAQCAtNDQsNiArNDQsOCBA QCBERVBESVJTLWxpYnJ0ZV9ldmVudGRldiA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9yaW5nDQo+IGxp YnJ0ZV9ldGhkZXYgbGlicnRlX2hhc2ggXA0KPiBsaWJydGVfbWVtcG9vbCBsaWJydGVfdGltZXIg bGlicnRlX2NyeXB0b2Rldg0KPiBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUkFXREVWKSArPSBs aWJydGVfcmF3ZGV2DQo+IERFUERJUlMtbGlicnRlX3Jhd2RldiA6PSBsaWJydGVfZWFsIGxpYnJ0 ZV9ldGhkZXYNCj4gK0RJUlMtJChDT05GSUdfUlRFX0xJQlJURV9SRUdFWERFVikgKz0gbGlicnRl X3JlZ2V4ZGV2DQo+ICtERVBESVJTLWxpYnJ0ZV9yZWdleGRldiA6PSBsaWJydGVfZWFsDQo+IERJ UlMtJChDT05GSUdfUlRFX0xJQlJURV9WSE9TVCkgKz0gbGlicnRlX3Zob3N0DQo+IERFUERJUlMt bGlicnRlX3Zob3N0IDo9IGxpYnJ0ZV9lYWwgbGlicnRlX21lbXBvb2wgbGlicnRlX21idWYNCj4g bGlicnRlX2V0aGRldiBcDQo+IAkJCWxpYnJ0ZV9uZXQNCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJy dGVfcmVnZXhkZXYvTWFrZWZpbGUgYi9saWIvbGlicnRlX3JlZ2V4ZGV2L01ha2VmaWxlDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMC4uNzIzYjRiMjhjDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmlsZQ0KPiBAQCAtMCww ICsxLDIzIEBADQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4g KyMgQ29weXJpZ2h0KEMpIDIwMTkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gKyMNCj4g Kw0KPiAraW5jbHVkZSAkKFJURV9TREspL21rL3J0ZS52YXJzLm1rDQo+ICsNCj4gKyMgbGlicmFy eSBuYW1lDQo+ICtMSUIgPSBsaWJydGVfcmVnZXhkZXYuYQ0KPiArDQo+ICsjIGxpYnJhcnkgdmVy c2lvbg0KPiArTElCQUJJVkVSIDo9IDENCj4gKw0KPiArIyBidWlsZCBmbGFncw0KPiArQ0ZMQUdT ICs9IC1PMw0KPiArQ0ZMQUdTICs9ICQoV0VSUk9SX0ZMQUdTKQ0KPiArDQo+ICsjIGxpYnJhcnkg c291cmNlIGZpbGVzDQo+ICtTUkNTLXkgKz0gcnRlX3JlZ2V4ZGV2LmMNCj4gKw0KPiArIyBleHBv cnQgaW5jbHVkZSBmaWxlcw0KPiArU1lNTElOSy15LWluY2x1ZGUgKz0gcnRlX3JlZ2V4ZGV2LmgN Cj4gKw0KPiAraW5jbHVkZSAkKFJURV9TREspL21rL3J0ZS5saWIubWsNCj4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmMNCj4gYi9saWIvbGlicnRlX3JlZ2V4 ZGV2L3J0ZV9yZWdleGRldi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMC4uZTViZTBmMjljDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2xpYnJ0ZV9yZWdl eGRldi9ydGVfcmVnZXhkZXYuYw0KPiBAQCAtMCwwICsxLDUgQEANCj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyAqIENvcHlyaWdodChDKSAyMDE5IE1hcnZl bGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9yZWdl eGRldi5oPg0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYu aA0KPiBiL2xpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmgNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwLi43NjVkYTRhYWENCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9saWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5oDQo+IEBAIC0wLDAgKzEs MTI0NyBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiAr ICogQ29weXJpZ2h0KEMpIDIwMTkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gKyAqLw0K PiArDQo+ICsjaWZuZGVmIF9SVEVfUkVHRVhERVZfSF8NCj4gKyNkZWZpbmUgX1JURV9SRUdFWERF Vl9IXw0KPiArDQo+ICsvKioNCj4gKyAqIEBmaWxlDQo+ICsgKg0KPiArICogUlRFIFJlZ0V4IERl dmljZSBBUEkNCj4gKyAqDQo+ICsgKiBEZWZpbmVzIFJURSBSZWdFeCBEZXZpY2UgQVBJcyBmb3Ig UmVnRXggb3BlcmF0aW9ucyBhbmQgaXRzIHByb3Zpc2lvbmluZy4NCj4gKyAqDQo+ICsgKiBUaGUg UmVnRXggRGV2aWNlIEFQSSBpcyBjb21wb3NlZCBvZiB0d28gcGFydHM6DQo+ICsgKg0KPiArICog LSBUaGUgYXBwbGljYXRpb24tb3JpZW50ZWQgUmVnRXggQVBJIHRoYXQgaW5jbHVkZXMgZnVuY3Rp b25zIHRvIHNldHVwDQo+ICsgKiAgIGEgUmVnRXggZGV2aWNlIChjb25maWd1cmUgaXQsIHNldHVw IGl0cyBxdWV1ZSBwYWlycyBhbmQgc3RhcnQgaXQpLA0KPiArICogICB1cGRhdGUgdGhlIHJ1bGUg ZGF0YWJhc2UgYW5kIHNvIG9uLg0KPiArICoNCj4gKyAqIC0gVGhlIGRyaXZlci1vcmllbnRlZCBS ZWdFeCBBUEkgdGhhdCBleHBvcnRzIGEgZnVuY3Rpb24gYWxsb3dpbmcNCj4gKyAqICAgYSBSZWdF eCBwb2xsIE1vZGUgRHJpdmVyIChQTUQpIHRvIHNpbXVsdGFuZW91c2x5IHJlZ2lzdGVyIGl0c2Vs ZiBhcw0KPiArICogICBhIFJlZ0V4IGRldmljZSBkcml2ZXIuDQo+ICsgKg0KPiArICogUmVnRXgg ZGV2aWNlIGNvbXBvbmVudHMgYW5kIGRlZmluaXRpb25zOg0KPiArICoNCj4gKyAqICAgICArLS0t LS0tLS0tLS0tLS0tLS0rDQo+ICsgKiAgICAgfCAgICAgICAgICAgICAgICAgfA0KPiArICogICAg IHwgICAgICAgICAgICAgICAgIG8tLS0tLS0tLS0rICAgIHJ0ZV9yZWdleF9bZW58ZGVdcXVldWVf YnVyc3QoKQ0KPiArICogICAgIHwgICBQQ1JFIGJhc2VkICAgIG8tLS0tLS0rICB8ICAgICAgICAg ICAgICAgfA0KPiArICogICAgIHwgIFJlZ0V4IHBhdHRlcm4gIHwgICAgICB8ICB8ICArLS0tLS0t LS0rICAgfA0KPiArICogICAgIHwgbWF0Y2hpbmcgZW5naW5lIG8tLS0tLS0rLS0rLS1vICAgICAg ICB8ICAgfCAgICArLS0tLS0tKw0KPiArICogICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICB8 ICB8ICB8IHF1ZXVlICB8PD09bz09PT58Q29yZSAwfA0KPiArICogICAgIHwgICAgICAgICAgICAg ICAgIG8tLS0tKyB8ICB8ICB8IHBhaXIgMCB8ICAgICAgICB8ICAgICAgfA0KPiArICogICAgIHwg ICAgICAgICAgICAgICAgIHwgICAgfCB8ICB8ICArLS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0K PiArICogICAgICstLS0tLS0tLS0tLS0tLS0tLSsgICAgfCB8ICB8DQo+ICsgKiAgICAgICAgICAg IF4gICAgICAgICAgICAgICB8IHwgIHwgICstLS0tLS0tLSsNCj4gKyAqICAgICAgICAgICAgfCAg ICAgICAgICAgICAgIHwgfCAgfCAgfCAgICAgICAgfCAgICAgICAgKy0tLS0tLSsNCj4gKyAqICAg ICAgICAgICAgfCAgICAgICAgICAgICAgIHwgKy0tKy0tbyBxdWV1ZSAgfDw9PT09PT0+fENvcmUg MXwNCj4gKyAqICAgICAgICBSdWxlfERhdGFiYXNlICAgICAgIHwgICAgfCAgfCBwYWlyIDEgfCAg ICAgICAgfCAgICAgIHwNCj4gKyAqICAgICArLS0tLS0tKy0tLS0tLS0tLS0rICAgIHwgICAgfCAg Ky0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4gKyAqICAgICB8ICAgICBHcm91cCAwICAgICB8 ICAgIHwgICAgfA0KPiArICogICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICB8ICArLS0t LS0tLS0rICAgICAgICArLS0tLS0tKw0KPiArICogICAgIHwgfCBSdWxlcyAwLi5uICB8IHwgICAg fCAgICB8ICB8ICAgICAgICB8ICAgICAgICB8Q29yZSAyfA0KPiArICogICAgIHwgKy0tLS0tLS0t LS0tLS0rIHwgICAgfCAgICArLS1vIHF1ZXVlICB8PD09PT09PT58ICAgICAgfA0KPiArICogICAg IHwgICAgIEdyb3VwIDEgICAgIHwgICAgfCAgICAgICB8IHBhaXIgMiB8ICAgICAgICArLS0tLS0t Kw0KPiArICogICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICArLS0tLS0tLS0rDQo+ ICsgKiAgICAgfCB8IFJ1bGVzIDAuLm4gIHwgfCAgICB8DQo+ICsgKiAgICAgfCArLS0tLS0tLS0t LS0tLSsgfCAgICB8ICAgICAgICstLS0tLS0tLSsNCj4gKyAqICAgICB8ICAgICBHcm91cCAyICAg ICB8ICAgIHwgICAgICAgfCAgICAgICAgfCAgICAgICAgKy0tLS0tLSsNCj4gKyAqICAgICB8ICst LS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAgfCBxdWV1ZSAgfDw9PT09PT0+fENvcmUgbnwNCj4g KyAqICAgICB8IHwgUnVsZXMgMC4ubiAgfCB8ICAgICstLS0tLS0tbyBwYWlyIG4gfCAgICAgICAg fCAgICAgIHwNCj4gKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAgKy0tLS0t LS0tKyAgICAgICAgKy0tLS0tLSsNCj4gKyAqICAgICB8ICAgICBHcm91cCBuICAgICB8DQo+ICsg KiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfDwtLS0tLS0tcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRl KCkNCj4gKyAqICAgICB8IHwgUnVsZXMgMC4ubiAgfCB8PC0tLS0tLS1ydGVfcmVnZXhfcnVsZV9k Yl9pbXBvcnQoKQ0KPiArICogICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwtLS0tLS0tPnJ0ZV9yZWdl eF9ydWxlX2RiX2V4cG9ydCgpDQo+ICsgKiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKw0KPiArICoN Cj4gKyAqIFJlZ0V4OiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBhIGNvbmNpc2UgYW5kIGZsZXhp YmxlIG1lYW5zIGZvciBtYXRjaGluZw0KPiArICogc3RyaW5ncyBvZiB0ZXh0LCBzdWNoIGFzIHBh cnRpY3VsYXIgY2hhcmFjdGVycywgd29yZHMsIG9yIHBhdHRlcm5zIG9mDQo+ICsgKiBjaGFyYWN0 ZXJzLiBBIGNvbW1vbiBhYmJyZXZpYXRpb24gZm9yIHRoaXMgaXMg4oCcUmVnRXjigJ0uDQo+ICsg Kg0KPiArICogUmVnRXggZGV2aWNlOiBBIGhhcmR3YXJlIG9yIHNvZnR3YXJlLWJhc2VkIGltcGxl bWVudGF0aW9uIG9mIFJlZ0V4DQo+ICsgKiBkZXZpY2UgQVBJIGZvciBQQ1JFIGJhc2VkIHBhdHRl cm4gbWF0Y2hpbmcgc3ludGF4IGFuZCBzZW1hbnRpY3MuDQo+ICsgKg0KPiArICogUENSRSBSZWdF eCBzeW50YXggYW5kIHNlbWFudGljcyBzcGVjaWZpY2F0aW9uOg0KPiArICogaHR0cDovL3JlZ2V4 a2l0LnNvdXJjZWZvcmdlLm5ldC9Eb2N1bWVudGF0aW9uL3BjcmUvcGNyZXBhdHRlcm4uaHRtbA0K PiArICoNCj4gKyAqIFJlZ0V4IHF1ZXVlIHBhaXI6IEVhY2ggUmVnRXggZGV2aWNlIHNob3VsZCBo YXZlIG9uZSBvciBtb3JlIHF1ZXVlDQo+IHBhaXIgdG8NCj4gKyAqIHRyYW5zbWl0IGEgYnVyc3Qg b2YgcGF0dGVybiBtYXRjaGluZyByZXF1ZXN0IGFuZCByZWNlaXZlIGEgYnVyc3Qgb2YNCj4gKyAq IHJlY2VpdmUgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgcmVzcG9uc2UuIFRoZSBwYXR0ZXJuIG1hdGNo aW5nDQo+IHJlcXVlc3QvcmVzcG9uc2UNCj4gKyAqIGVtYmVkZGVkIGluICpydGVfcmVnZXhfb3Bz KiBzdHJ1Y3R1cmUuDQo+ICsgKg0KPiArICogUnVsZTogQSBwYXR0ZXJuIG1hdGNoaW5nIHJ1bGUg ZXhwcmVzc2VkIGluIFBDUkUgUmVnRXggc3ludGF4IGFsb25nIHdpdGgNCj4gKyAqIE1hdGNoIElE IGFuZCBHcm91cCBJRCB0byBpZGVudGlmeSB0aGUgcnVsZSB1cG9uIHRoZSBtYXRjaC4NCj4gKyAq DQo+ICsgKiBSdWxlIGRhdGFiYXNlOiBUaGUgUmVnRXggZGV2aWNlIGFjY2VwdHMgcmVndWxhciBl eHByZXNzaW9ucyBhbmQNCj4gY29udmVydHMgdGhlbQ0KPiArICogaW50byBhIGNvbXBpbGVkIHJ1 bGUgZGF0YWJhc2UgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIHNjYW4gZGF0YS4NCj4gKyAqIENv bXBpbGF0aW9uIGFsbG93cyB0aGUgZGV2aWNlIHRvIGFuYWx5emUgdGhlIGdpdmVuIHBhdHRlcm4o cykgYW5kDQo+ICsgKiBwcmUtZGV0ZXJtaW5lIGhvdyB0byBzY2FuIGZvciB0aGVzZSBwYXR0ZXJu cyBpbiBhbiBvcHRpbWl6ZWQgZmFzaGlvbg0KPiB0aGF0DQo+ICsgKiB3b3VsZCBiZSBmYXIgdG9v IGV4cGVuc2l2ZSB0byBjb21wdXRlIGF0IHJ1bi10aW1lLiBBIHJ1bGUgZGF0YWJhc2UNCj4gY29u dGFpbnMNCj4gKyAqIGEgc2V0IG9mIHJ1bGVzIHRoYXQgY29tcGlsZWQgaW4gZGV2aWNlIHNwZWNp ZmljIGJpbmFyeSBmb3JtLg0KPiArICoNCj4gKyAqIE1hdGNoIElEIG9yIFJ1bGUgSUQ6IEEgdW5p cXVlIGlkZW50aWZpZXIgcHJvdmlkZWQgYXQgdGhlIHRpbWUgb2YgcnVsZQ0KPiArICogY3JlYXRp b24gZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBpZGVudGlmeSB0aGUgcnVsZSB1cG9uIG1hdGNoLg0K PiArICoNCj4gKyAqIEdyb3VwIElEOiBHcm91cCBvZiBydWxlcyBjYW4gYmUgZ3JvdXBlZCB1bmRl ciBvbmUgZ3JvdXAgSUQgdG8gZW5hYmxlDQo+ICsgKiBydWxlIGlzb2xhdGlvbiBhbmQgZWZmZWN0 aXZlIHBhdHRlcm4gbWF0Y2hpbmcuIEEgdW5pcXVlIGdyb3VwIGlkZW50aWZpZXINCj4gKyAqIHBy b3ZpZGVkIGF0IHRoZSB0aW1lIG9mIHJ1bGUgY3JlYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiB0 byBpZGVudGlmeSB0aGUNCj4gKyAqIHJ1bGUgdXBvbiBtYXRjaC4NCj4gKyAqDQo+ICsgKiBTY2Fu OiBBIHBhdHRlcm4gbWF0Y2hpbmcgcmVxdWVzdCB0aHJvdWdoICplbnF1ZXVlKiBBUEkuDQo+ICsg Kg0KPiArICogSXQgbWF5IHBvc3NpYmxlIHRoYXQgYSBnaXZlbiBSZWdFeCBkZXZpY2UgbWF5IG5v dCBzdXBwb3J0IGFsbCB0aGUgZmVhdHVyZXMNCj4gKyAqIG9mIFBDUkUuIFRoZSBhcHBsaWNhdGlv biBtYXkgcHJvYmUgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgdGhyb3VnaA0KPiArICogc3RydWN0IHJ0 ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICoNCj4gKyAqIEJ5IGRlZmF1 bHQsIGFsbCB0aGUgZnVuY3Rpb25zIG9mIHRoZSBSZWdFeCBEZXZpY2UgQVBJIGV4cG9ydGVkIGJ5 IGEgUE1EDQo+ICsgKiBhcmUgbG9jay1mcmVlIGZ1bmN0aW9ucyB3aGljaCBhc3N1bWUgdG8gbm90 IGJlIGludm9rZWQgaW4gcGFyYWxsZWwgb24NCj4gKyAqIGRpZmZlcmVudCBsb2dpY2FsIGNvcmVz IHRvIHdvcmsgb24gdGhlIHNhbWUgdGFyZ2V0IG9iamVjdC4gRm9yIGluc3RhbmNlLA0KPiArICog dGhlIGRlcXVldWUgZnVuY3Rpb24gb2YgYSBQTUQgY2Fubm90IGJlIGludm9rZWQgaW4gcGFyYWxs ZWwgb24gdHdvDQo+IGxvZ2ljYWwNCj4gKyAqIGNvcmVzIHRvIG9wZXJhdGVzIG9uIHNhbWUgUmVn RXggcXVldWUgcGFpci4gT2YgY291cnNlLCB0aGlzIGZ1bmN0aW9uDQo+ICsgKiBjYW4gYmUgaW52 b2tlZCBpbiBwYXJhbGxlbCBieSBkaWZmZXJlbnQgbG9naWNhbCBjb3JlIG9uIGRpZmZlcmVudCBx dWV1ZQ0KPiBwYWlyLg0KPiArICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1cHBl ciBsZXZlbCBhcHBsaWNhdGlvbiB0byBlbmZvcmNlIHRoaXMgcnVsZS4NCj4gKyAqDQo+ICsgKiBJ biBhbGwgZnVuY3Rpb25zIG9mIHRoZSBSZWdFeCBBUEksIHRoZSBSZWdFeCBkZXZpY2UgaXMNCj4g KyAqIGRlc2lnbmF0ZWQgYnkgYW4gaW50ZWdlciA+PSAwIG5hbWVkIHRoZSBkZXZpY2UgaWRlbnRp ZmllciAqZGV2X2lkKg0KPiArICoNCj4gKyAqIEF0IHRoZSBSZWdFeCBkcml2ZXIgbGV2ZWwsIFJl Z0V4IGRldmljZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgZ2VuZXJpYw0KPiArICogZGF0YSBzdHJ1 Y3R1cmUgb2YgdHlwZSAqcnRlX3JlZ2V4X2RldiouDQo+ICsgKg0KPiArICogUmVnRXggZGV2aWNl cyBhcmUgZHluYW1pY2FsbHkgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIFBDSS9Tb0MgZGV2aWNlDQo+ IHByb2JpbmcNCj4gKyAqIHBoYXNlIHBlcmZvcm1lZCBhdCBFQUwgaW5pdGlhbGl6YXRpb24gdGlt ZS4NCj4gKyAqIFdoZW4gYSBSZWdFeCBkZXZpY2UgaXMgYmVpbmcgcHJvYmVkLCBhICpydGVfcmVn ZXhfZGV2KiBzdHJ1Y3R1cmUgYW5kDQo+ICsgKiBhIG5ldyBkZXZpY2UgaWRlbnRpZmllciBhcmUg YWxsb2NhdGVkIGZvciB0aGF0IGRldmljZS4gVGhlbiwgdGhlDQo+ICsgKiByZWdleF9kZXZfaW5p dCgpIGZ1bmN0aW9uIHN1cHBsaWVkIGJ5IHRoZSBSZWdFeCBkcml2ZXIgbWF0Y2hpbmcgdGhlDQo+ IHByb2JlZA0KPiArICogZGV2aWNlIGlzIGludm9rZWQgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0 aGUgZGV2aWNlLg0KPiArICoNCj4gKyAqIFRoZSByb2xlIG9mIHRoZSBkZXZpY2UgaW5pdCBmdW5j dGlvbiBjb25zaXN0cyBvZiByZXNldHRpbmcgdGhlIGhhcmR3YXJlIG9yDQo+ICsgKiBzb2Z0d2Fy ZSBSZWdFeCBkcml2ZXIgaW1wbGVtZW50YXRpb25zLg0KPiArICoNCj4gKyAqIElmIHRoZSBkZXZp Y2UgaW5pdCBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvcnJlc3BvbmRlbmNlIGJldHdl ZW4NCj4gKyAqIHRoZSBkZXZpY2UgaWRlbnRpZmllciBhc3NpZ25lZCB0byB0aGUgbmV3IGRldmlj ZSBhbmQgaXRzIGFzc29jaWF0ZWQNCj4gKyAqICpydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgaXMg ZWZmZWN0aXZlbHkgcmVnaXN0ZXJlZC4NCj4gKyAqIE90aGVyd2lzZSwgYm90aCB0aGUgKnJ0ZV9y ZWdleF9kZXYqIHN0cnVjdHVyZSBhbmQgdGhlIGRldmljZSBpZGVudGlmaWVyDQo+IGFyZQ0KPiAr ICogZnJlZWQuDQo+ICsgKg0KPiArICogVGhlIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUgYXBw bGljYXRpb24gUmVnRXggQVBJIHRvIHNldHVwIGEgZGV2aWNlDQo+ICsgKiBkZXNpZ25hdGVkIGJ5 IGl0cyBkZXZpY2UgaWRlbnRpZmllciBtdXN0IGJlIGludm9rZWQgaW4gdGhlIGZvbGxvd2luZyBv cmRlcjoNCj4gKyAqICAgICAtIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkNCj4gKyAqICAgICAt IHJ0ZV9yZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkNCj4gKyAqICAgICAtIHJ0ZV9yZWdleF9kZXZf c3RhcnQoKQ0KPiArICoNCj4gKyAqIFRoZW4sIHRoZSBhcHBsaWNhdGlvbiBjYW4gaW52b2tlLCBp biBhbnkgb3JkZXIsIHRoZSBmdW5jdGlvbnMNCj4gKyAqIGV4cG9ydGVkIGJ5IHRoZSBSZWdFeCBB UEkgdG8gZW5xdWV1ZSBwYXR0ZXJuIG1hdGNoaW5nIGpvYiwgZGVxdWV1ZQ0KPiBwYXR0ZXJuDQo+ ICsgKiBtYXRjaGluZyByZXNwb25zZSwgZ2V0IHRoZSBzdGF0cywgdXBkYXRlIHRoZSBydWxlIGRh dGFiYXNlLA0KPiArICogZ2V0L3NldCBkZXZpY2UgYXR0cmlidXRlcyBhbmQgc28gb24NCj4gKyAq DQo+ICsgKiBJZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0 aW9uIChpLmUuIGNhbGwNCj4gKyAqIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkgb3IgcnRlX3Jl Z2V4X3F1ZXVlX3BhaXJfc2V0dXAoKSksIGl0IG11c3QNCj4gY2FsbA0KPiArICogcnRlX3JlZ2V4 X2Rldl9zdG9wKCkgZmlyc3QgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCB0aGVuIGRvIHRoZQ0KPiBy ZWNvbmZpZ3VyYXRpb24NCj4gKyAqIGJlZm9yZSBjYWxsaW5nIHJ0ZV9yZWdleF9kZXZfc3RhcnQo KSBhZ2Fpbi4gVGhlIGVucXVldWUgYW5kIGRlcXVldWUNCj4gKyAqIGZ1bmN0aW9ucyBzaG91bGQg bm90IGJlIGludm9rZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHN0b3BwZWQuDQo+ICsgKg0KPiArICog RmluYWxseSwgYW4gYXBwbGljYXRpb24gY2FuIGNsb3NlIGEgUmVnRXggZGV2aWNlIGJ5IGludm9r aW5nIHRoZQ0KPiArICogcnRlX3JlZ2V4X2Rldl9jbG9zZSgpIGZ1bmN0aW9uLg0KPiArICoNCj4g KyAqIEVhY2ggZnVuY3Rpb24gb2YgdGhlIGFwcGxpY2F0aW9uIFJlZ0V4IEFQSSBpbnZva2VzIGEg c3BlY2lmaWMgZnVuY3Rpb24NCj4gKyAqIG9mIHRoZSBQTUQgdGhhdCBjb250cm9scyB0aGUgdGFy Z2V0IGRldmljZSBkZXNpZ25hdGVkIGJ5IGl0cyBkZXZpY2UNCj4gKyAqIGlkZW50aWZpZXIuDQo+ ICsgKg0KPiArICogRm9yIHRoaXMgcHVycG9zZSwgYWxsIGRldmljZS1zcGVjaWZpYyBmdW5jdGlv bnMgb2YgYSBSZWdFeCBkcml2ZXIgYXJlDQo+ICsgKiBzdXBwbGllZCB0aHJvdWdoIGEgc2V0IG9m IHBvaW50ZXJzIGNvbnRhaW5lZCBpbiBhIGdlbmVyaWMgc3RydWN0dXJlIG9mIHR5cGUNCj4gKyAq ICpyZWdleF9kZXZfb3BzKi4NCj4gKyAqIFRoZSBhZGRyZXNzIG9mIHRoZSAqcmVnZXhfZGV2X29w cyogc3RydWN0dXJlIGlzIHN0b3JlZCBpbiB0aGUNCj4gKnJ0ZV9yZWdleF9kZXYqDQo+ICsgKiBz dHJ1Y3R1cmUgYnkgdGhlIGRldmljZSBpbml0IGZ1bmN0aW9uIG9mIHRoZSBSZWdFeCBkcml2ZXIs IHdoaWNoIGlzDQo+ICsgKiBpbnZva2VkIGR1cmluZyB0aGUgUENJL1NvQyBkZXZpY2UgcHJvYmlu ZyBwaGFzZSwgYXMgZXhwbGFpbmVkIGVhcmxpZXIuDQo+ICsgKg0KPiArICogSW4gb3RoZXIgd29y ZHMsIGVhY2ggZnVuY3Rpb24gb2YgdGhlIFJlZ0V4IEFQSSBzaW1wbHkgcmV0cmlldmVzIHRoZQ0K PiArICogKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmlj ZSBpZGVudGlmaWVyIGFuZA0KPiArICogcGVyZm9ybXMgYW4gaW5kaXJlY3QgaW52b2NhdGlvbiBv ZiB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgZnVuY3Rpb24NCj4gKyAqIHN1cHBsaWVkIGluIHRo ZSAqcmVnZXhfZGV2X29wcyogc3RydWN0dXJlIG9mIHRoZSAqcnRlX3JlZ2V4X2RldioNCj4gc3Ry dWN0dXJlLg0KPiArICoNCj4gKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGUgYWRkcmVz cyBvZiB0aGUgZmFzdC1wYXRoIGZ1bmN0aW9ucyBvZiB0aGUNCj4gKyAqIFJlZ0V4IGRyaXZlciBp cyBub3QgY29udGFpbmVkIGluIHRoZSAqcmVnZXhfZGV2X29wcyogc3RydWN0dXJlLg0KPiArICog SW5zdGVhZCwgdGhleSBhcmUgZGlyZWN0bHkgc3RvcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl ICpydGVfcmVnZXhfZGV2Kg0KPiArICogc3RydWN0dXJlIHRvIGF2b2lkIGFuIGV4dHJhIGluZGly ZWN0IG1lbW9yeSBhY2Nlc3MgZHVyaW5nIHRoZWlyDQo+IGludm9jYXRpb24uDQo+ICsgKg0KPiAr ICogUlRFIFJlZ0V4IGRldmljZSBkcml2ZXJzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBmb3IgZW5x dWV1ZSBvciBkZXF1ZXVlDQo+ICsgKiBvcGVyYXRpb24uIEluc3RlYWQsIFJlZ0V4IGRyaXZlcnMg ZXhwb3J0IFBvbGwtTW9kZSBlbnF1ZXVlIGFuZA0KPiBkZXF1ZXVlDQo+ICsgKiBmdW5jdGlvbnMg dG8gYXBwbGljYXRpb25zLg0KPiArICoNCj4gKyAqIFRoZSAqZW5xdWV1ZSogb3BlcmF0aW9uIHN1 Ym1pdHMgYSBidXJzdCBvZiBSZWdFeCBwYXR0ZXJuIG1hdGNoaW5nDQo+IHJlcXVlc3QNCj4gKyAq IHRvIHRoZSBSZWdFeCBkZXZpY2UgYW5kIHRoZSAqZGVxdWV1ZSogb3BlcmF0aW9uIGdldHMgYSBi dXJzdCBvZiBwYXR0ZXJuDQo+ICsgKiBtYXRjaGluZyByZXNwb25zZSBmb3IgdGhlIG9uZXMgc3Vi bWl0dGVkIHRocm91Z2ggKmVucXVldWUqDQo+IG9wZXJhdGlvbi4NCj4gKyAqDQo+ICsgKiBUeXBp Y2FsIGFwcGxpY2F0aW9uIHV0aWxpc2F0aW9uIG9mIHRoZSBSZWdFeCBkZXZpY2UgQVBJIHdpbGwg Zm9sbG93IHRoZQ0KPiArICogZm9sbG93aW5nIHByb2dyYW1taW5nIGZsb3cuDQo+ICsgKg0KPiAr ICogLSBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQo+ICsgKiAtIHJ0ZV9yZWdleF9xdWV1ZV9w YWlyX3NldHVwKCkNCj4gKyAqIC0gcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCkgTmVlZHMgdG8g aW52b2tlIGlmIHByZWNvbXBpbGVkIHJ1bGUNCj4gZGF0YWJhc2Ugbm90DQo+ICsgKiAgIHByb3Zp ZGVkIGluIHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpydWxlX2RiIGZvcg0KPiBydGVfcmVnZXhfZGV2 X2NvbmZpZ3VyZSgpDQo+ICsgKiAgIGFuZC9vciBhcHBsaWNhdGlvbiBuZWVkcyB0byB1cGRhdGUg cnVsZSBkYXRhYmFzZS4NCj4gKyAqIC0gQ3JlYXRlIG9yIHJldXNlIGV4aXRpbmcgbWVtcG9vbCBm b3IgKnJ0ZV9yZWdleF9vcHMqIG9iamVjdHMuDQo+ICsgKiAtIHJ0ZV9yZWdleF9kZXZfc3RhcnQo KQ0KPiArICogLSBydGVfcmVnZXhfZW5xdWV1ZV9idXJzdCgpDQo+ICsgKiAtIHJ0ZV9yZWdleF9k ZXF1ZXVlX2J1cnN0KCkNCj4gKyAqDQo+ICsgKi8NCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVz DQo+ICtleHRlcm4gIkMiIHsNCj4gKyNlbmRpZg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2NvbW1v bi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9jb25maWcuaD4NCj4gKyNpbmNsdWRlIDxydGVfZGV2Lmg+ DQo+ICsjaW5jbHVkZSA8cnRlX2Vycm5vLmg+DQo+ICsjaW5jbHVkZSA8cnRlX21lbW9yeS5oPg0K PiArDQo+ICsvKioNCj4gKyAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIFJlZ0V4IGRldmljZXMg dGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5DQo+ICsgKiBpbml0aWFsaXNlZC4NCj4gKyAqDQo+ ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSB0b3RhbCBudW1iZXIgb2YgdXNhYmxlIFJlZ0V4IGRl dmljZXMuDQo+ICsgKi8NCj4gK3VpbnQ4X3QNCj4gK3J0ZV9yZWdleF9kZXZfY291bnQodm9pZCk7 DQo+ICsNCj4gKy8qKg0KPiArICogR2V0IHRoZSBkZXZpY2UgaWRlbnRpZmllciBmb3IgdGhlIG5h bWVkIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbmFtZQ0KPiArICogICBSZWdF eCBkZXZpY2UgbmFtZSB0byBzZWxlY3QgdGhlIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyLg0KPiAr ICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgUmV0dXJucyBSZWdFeCBkZXZpY2UgaWRlbnRpZmll ciBvbiBzdWNjZXNzLg0KPiArICogICAtIDwwOiBGYWlsdXJlIHRvIGZpbmQgbmFtZWQgUmVnRXgg ZGV2aWNlLg0KPiArICovDQo+ICtpbnQNCj4gK3J0ZV9yZWdleF9kZXZfZ2V0X2Rldl9pZChjb25z dCBjaGFyICpuYW1lKTsNCj4gKw0KPiArLyogRW51bWVyYXRlcyBSZWdFeCBkZXZpY2UgY2FwYWJp bGl0aWVzICovDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfQ0FQQV9SVU5USU1FX0NPTVBJTEFU SU9OX0YgKDFVTEwgPDwgMCkNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXMgc3VwcG9ydCBjb21w aWxpbmcgdGhlIHJ1bGVzIGF0IHJ1bnRpbWUgdW5saWtlDQo+ICsgKiBsb2FkaW5nIG9ubHkgdGhl IHByZS1idWlsdCBydWxlIGRhdGFiYXNlIHVzaW5nDQo+ICsgKiBzdHJ1Y3QgcnRlX3JlZ2V4X2Rl dl9jb25maWc6OnJ1bGVfZGIgaW4gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiArICogQHNl ZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9jb25maWc6OnJ1bGVfZGIsIHJ0ZV9yZWdleF9kZXZfY29u ZmlndXJlKCkNCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cmVnZXhfZGV2 X2NhcGENCj4gKyAqLw0KPiArDQo+ICsNCj4gKy8qIEVudW1lcmF0ZXMgdW5zdXBwb3J0ZWQgUENS RSBmZWF0dXJlcyBmb3IgdGhlIFJlZ0V4IGRldmljZSAqLw0KPiArI2RlZmluZSBSVEVfUkVHRVhf REVWX1BDUkVfVU5TVVBfU1RBUlRfQU5DSE9SX0YgKDFVTEwgPDwgMCkNCj4gKy8qKjwgUmVnRXgg ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIEFuY2hvciB0byBzdGFydCBvZiBtYXRjaCBmbGFn Lg0KPiArICogRXhhbXBsZSBSZWdFeCBpcyAnL1xHZm9vXGQvJy4gSGVyZSAnXEcnIGFzc2VydHMg cG9zaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUNCj4gKyAqIHByZXZpb3VzIG1hdGNoIG9yIHRoZSBz dGFydCBvZiB0aGUgc3RyaW5nIGZvciB0aGUgZmlyc3QgbWF0Y2guDQo+ICsgKiBUaGlzIHBvc2l0 aW9uIHdpbGwgY2hhbmdlIGVhY2ggdGltZSB0aGUgUmVnRXggaXMgYXBwbGllZCB0byB0aGUgc3Vi amVjdA0KPiArICogc3RyaW5nLiBJZiB0aGUgUmVnRXggaXMgYXBwbGllZCB0byAnZm9vMWZvbzJa Zm9vMycgdGhlIGZpcnN0IHR3byBtYXRjaGVzIHdpbGwNCj4gKyAqIGJlIHN1Y2Nlc3NmdWwgZm9y ICdmb28xZm9vMicgYW5kIGZhaWwgZm9yICdaZm9vMycuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5l IFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9BVE9NSUNfR1JPVVBJTkdfRiAoMVVMTCA8PA0KPiAx KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgQXRvbWljIGdyb3Vw aW5nLg0KPiArICogQXRvbWljIGdyb3VwcyBhcmUgcmVwcmVzZW50ZWQgYnkgJyg/PiknLiBBbiBh dG9taWMgZ3JvdXAgaXMgYSBncm91cCB0aGF0LA0KPiArICogd2hlbiB0aGUgUmVnRXggZW5naW5l IGV4aXRzIGZyb20gaXQsIGF1dG9tYXRpY2FsbHkgdGhyb3dzIGF3YXkgYWxsDQo+ICsgKiBiYWNr dHJhY2tpbmcgcG9zaXRpb25zIHJlbWVtYmVyZWQgYnkgYW55IHRva2VucyBpbnNpZGUgdGhlIGdy b3VwLg0KPiArICogRXhhbXBsZSBSZWdFeCBpcyAnYSg/PmJjfGIpYycgaWYgdGhlIGdpdmVuIHBh dHRlcm5zIGFyZSAnYWJjJyBhbmQgJ2FiY2MnDQo+IHRoZW4NCj4gKyAqICdhKGJjfGIpYycgbWF0 Y2hlcyBib3RoIHdoZXJlIGFzICdhKD8+YmN8YiljJyBtYXRjaGVzIG9ubHkgYWJjYyBiZWNhdXNl DQo+ICsgKiBhdG9taWMgZ3JvdXBzIGRvbid0IGFsbG93IGJhY2t0cmFjaW5nIGJhY2sgdG8gJ2In Lg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdz DQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfQkFDS1RS QUNLSU5HX0NUUkxfRiAoMVVMTCA8PA0KPiAyKQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24n dCBzdXBwb3J0IFBDUkUgYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMuDQo+ICsgKiBTb21lIGV4 YW1wbGVzIG9mIGJhY2t0cmFjaW5nIHZlcmJzIGFyZSAoKkNPTU1JVCksICgqQUNDRVBUKSwgKCpG QUlMKSwNCj4gKyAqICgqU0tJUCksICgqUFJVTkUpLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3Jl Z2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBS VEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfQ0FMTE9VVFNfRiAoMVVMTCA8PCAzKQ0KPiArLyoqPCBS ZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgY2FsbG91dHMuDQo+ICsgKiBQQ1JFIHN1 cHBvcnRzIGNhbGxpbmcgZXh0ZXJuYWwgZnVuY3Rpb24gaW4gYmV0d2VlbiBtYXRjaGVzIGJ5IHVz aW5nDQo+ICcoP0MpJy4NCj4gKyAqIEV4YW1wbGUgUmVnRXggJ0FCQyg/QylEJyBpZiBhIGdpdmVu IHBhdHRlciBpcyAnQUJDRCcgdGhlbiB0aGUgUmVnRXgNCj4gZW5naW5lDQo+ICsgKiB3aWxsIHBh cnNlIEFCQyBwZXJmb3JtIGEgdXNlcmRlZmluZWQgY2FsbG91dCBhbmQgcmV0dXJuIGEgc3VjY2Vz c2Z1bA0KPiBtYXRjaCBhdA0KPiArICogRC4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9k ZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JF R0VYX0RFVl9QQ1JFX1VOU1VQX0JBQ0tSRUZFUkVOQ0VfRiAoMVVMTCA8PCA0KQ0KPiArLyoqPCBS ZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgYmFja3JlZmVyZW5jZS4NCj4gKyAqIEV4 YW1wbGUgUmVnRXggaXMgJyhcMkFCQ3woR0hJKSkrJyBcMiBtYXRjaGVzIHRoZSBzYW1lIHRleHQg YXMgbW9zdA0KPiByZWNlbnRseQ0KPiArICogbWF0Y2hlZCBieSB0aGUgMm5kIGNhcHR1cmluZyBn cm91cCBpLmUuICdHSEknLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpw Y3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BD UkVfVU5TVVBfR1JFRURZX0YgKDFVTEwgPDwgNSkNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNu J3Qgc3VwcG9ydCBQQ1JFIEdyZWVkeSBtb2RlLg0KPiArICogRm9yIGV4YW1wbGUgaWYgdGhlIFJl Z0V4IGlzICdBQlxkKj8nIHRoZW4gJyo/JyByZXByZXNlbnRzIHplcm8gb3INCj4gdW5saW1pdGVk DQo+ICsgKiBtYXRjaGVzLiBJbiBncmVlZHkgbW9kZSB0aGUgcGF0dGVybiAnQUIxMjM0NScgd2ls bCBiZSBtYXRjaGVkDQo+IGNvbXBsZXRlbHkNCj4gKyAqIHdoZXJlIGFzIHRoZSB1bmdyZWVkeSBt b2RlICdBQicgd2lsbCBiZSByZXR1cm5lZCBhcyB0aGUgbWF0Y2guDQo+ICsgKiBAc2VlIHN0cnVj dCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsj ZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9MT09LQVJPVU5EX0FTUlRfRiAoMVVMTCA8 PA0KPiA2KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgTG9va2Fy b3VuZCBhc3NlcnRpb25zDQo+ICsgKiAoWmVyby13aWR0aCBhc3NlcnRpb25zKS4gRXhhbXBsZSBS ZWdFeCBpcyAnW2Etel0rXGQrKD89IXszLH0pJyBpZg0KPiArICogdGhlIGdpdmVuIHBhdHRlcm4g aXMgJ2R3YWQxMjM0IScgdGhlIFJlZ0V4IGVuZ2luZSBkb2Vzbid0IHJlcG9ydCBhbnkNCj4gbWF0 Y2hlcw0KPiArICogYmVjYXVzZSB0aGUgYXNzZXJ0ICcoPz0hezMsfSknIGZhaWxzLiBUaGUgcGF0 dGVybiAnZHdhZDEyMyEhIScgd291bGQgcmV0dXJuDQo+IGENCj4gKyAqIHN1Y2Nlc3NmdWwgbWF0 Y2guDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxh Z3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9NQVRD SF9QT0lOVF9SU1RfRiAoMVVMTCA8PA0KPiA3KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24n dCBzdXBwb3J0IFBDUkUgbWF0Y2ggcG9pbnQgcmVzZXQgZGlyZWN0aXZlLg0KPiArICogRXhhbXBs ZSBSZWdFeCBpcyAnW2Etel0rXEtcZCsnIGlmIHRoZSBwYXR0ZXJuIGlzICdkd2FkMTIzJw0KPiAr ICogdGhlbiBldmVuIHRob3VnaCB0aGUgZW50aXJlIHBhdHRlcm4gbWF0Y2hlcyBvbmx5ICcxMjMn DQo+ICsgKiBpcyByZXBvcnRlZCBhcyBhIG1hdGNoLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3Jl Z2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBS VEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfTkVXTElORV9DT05WRU5USU9OU19GDQo+ICgxVUxMIDw8 IDgpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBuZXdsaW5lIGNv bnZlbnRpb24uDQo+ICsgKiBOZXdsaW5lIGNvbnZlbnRpb25zIGFyZSByZXByZXNlbnRlZCBhcyBm b2xsb3dzOg0KPiArICogKCpDUikgICAgICAgIGNhcnJpYWdlIHJldHVybg0KPiArICogKCpMRikg ICAgICAgIGxpbmVmZWVkDQo+ICsgKiAoKkNSTEYpICAgICAgY2FycmlhZ2UgcmV0dXJuLCBmb2xs b3dlZCBieSBsaW5lZmVlZA0KPiArICogKCpBTllDUkxGKSAgIGFueSBvZiB0aGUgdGhyZWUgYWJv dmUNCj4gKyAqICgqQU5ZKSAgICAgICBhbGwgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlcw0KPiAr ICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsg Ki8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfTkVXTElORV9TRVFf RiAoMVVMTCA8PCA5KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUg bmV3bGluZSBzZXF1ZW5jZS4NCj4gKyAqIFRoZSBlc2NhcGUgc2VxdWVuY2UgJ1xSJyB3aWxsIG1h dGNoIGFueSBuZXdsaW5lIHNlcXVlbmNlLg0KPiArICogSXQgaXMgZXF1aXZhbGVudCB0bzogJyg/ PlxyXG58XG58XHgwYnxcZnxccnxceDg1KScuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhf ZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9S RUdFWF9ERVZfUENSRV9VTlNVUF9QT1NTRVNTSVZFX1FVQUxJRklFUlNfRiAoMVVMTA0KPiA8PCAx MCkNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIHBvc3Nlc3NpdmUg cXVhbGlmaWVycy4NCj4gKyAqIEV4YW1wbGUgUmVnRXggcG9zc2Vzc2l2ZSBxdWFsaWZpZXJzICcq KycsICcrKycsICc/KycsICd7bSxufSsnLg0KPiArICogUG9zc2Vzc2l2ZSBxdWFudGlmaWVyIHJl cGVhdHMgdGhlIHRva2VuIGFzIG1hbnkgdGltZXMgYXMgcG9zc2libGUgYW5kIGl0DQo+IGRvZXMN Cj4gKyAqIG5vdCBnaXZlIHVwIG1hdGNoZXMgYXMgdGhlIGVuZ2luZSBiYWNrdHJhY2tzLiBXaXRo IGEgcG9zc2Vzc2l2ZQ0KPiBxdWFudGlmaWVyLA0KPiArICogdGhlIGRlYWwgaXMgYWxsIG9yIG5v dGhpbmcuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBf ZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9T VUJST1VUSU5FX1JFRkVSRU5DRVNfRg0KPiAoMVVMTCA8PCAxMSkNCj4gKy8qKjwgUmVnRXggZGV2 aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIFN1YnJvdXRpbmUgcmVmZXJlbmNlcy4NCj4gKyAqIFBD UkUgU3Vicm91dGluZSByZWZlcmVuY2VzIGFsbG93IGZvciBzdWIgcGF0dGVybnMgdG8gYmUgYXNz ZXNzZWQNCj4gKyAqIGFzIHBhcnQgb2YgdGhlIFJlZ0V4LiBFeGFtcGxlIFJlZ0V4IGlzICcoZm9v fGZ1enopXGc8MT4rYmFyJyBtYXRjaGVzIHRoZQ0KPiArICogcGF0dGVybiAnZm9vZm9vZnV6emZv b2Z1enpiYXInLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vu c3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5T VVBfVVRGXzhfRiAoMVVMTCA8PCAxMikNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3Vw cG9ydCBVVEYtOCBjaGFyYWN0ZXIgZW5jb2RpbmcuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVn ZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJU RV9SRUdFWF9ERVZfUENSRV9VTlNVUF9VVEZfMTZfRiAoMVVMTCA8PCAxMykNCj4gKy8qKjwgUmVn RXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBVVEYtMTYgY2hhcmFjdGVyIGVuY29kaW5nLg0KPiAr ICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsg Ki8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfVVRGXzMyX0YgKDFV TEwgPDwgMTQpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgVVRGLTMyIGNo YXJhY3RlciBlbmNvZGluZy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6 cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9Q Q1JFX1VOU1VQX1dPUkRfQk9VTkRBUllfRiAoMVVMTCA8PA0KPiAxNSkNCj4gKy8qKjwgUmVnRXgg ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCB3b3JkIGJvdW5kYXJpZXMuDQo+ICsgKiBUaGUgbWV0YSBj aGFyYWN0ZXIgJ1xiJyByZXByZXNlbnRzIHdvcmQgYm91bmRhcnkgYW5jaG9yLg0KPiArICogQHNl ZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4g Kw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfRk9SV0FSRF9SRUZFUkVOQ0VT X0YgKDFVTEwNCj4gPDwgMTYpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQg Rm9yd2FyZCByZWZlcmVuY2VzLg0KPiArICogRm9yd2FyZCByZWZlcmVuY2VzIGFsbG93IHlvdSB0 byB1c2UgYSBiYWNrIHJlZmVyZW5jZSB0byBhIGdyb3VwIHRoYXQNCj4gYXBwZWFycw0KPiArICog bGF0ZXIgaW4gdGhlIFJlZ0V4LiBFeGFtcGxlIFJlZ0V4IGlzICcoXDNBQkN8KERFRnwoR0hJKSkp KycgbWF0Y2hlcyB0aGUNCj4gKyAqIGZvbGxvd2luZyBzdHJpbmcgJ0dISUdISUFCQ0RFRicuDQo+ ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4g KyAqLw0KPiArDQo+ICsvKiBFbnVtZXJhdGVzIFBDUkUgcnVsZSBmbGFncyAqLw0KPiArI2RlZmlu ZSBSVEVfUkVHRVhfUENSRV9SVUxFX0FMTE9XX0VNUFRZX0YgKDFVTEwgPDwgMCkNCj4gKy8qKjwg V2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgcGF0dGVybiB0aGF0IGNhbiBtYXRjaCBhZ2FpbnN0 IGFuIGVtcHR5DQo+IHN0cmluZywNCj4gKyAqIHN1Y2ggYXMgJy4qJyBhcmUgYWxsb3dlZC4NCj4g KyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQo+ IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVf UkVHRVhfUENSRV9SVUxFX0FOQ0hPUkVEX0YgKDFVTEwgPDwgMSkNCj4gKy8qKjwgV2hlbiB0aGlz IGZsYWcgaXMgc2V0LCB0aGUgcGF0dGVybiBpcyBmb3JjZWQgdG8gYmUgImFuY2hvcmVkIiwgdGhh dCBpcywgaXQNCj4gKyAqIGlzIGNvbnN0cmFpbmVkIHRvIG1hdGNoIG9ubHkgYXQgdGhlIGZpcnN0 IG1hdGNoaW5nIHBvaW50IGluIHRoZSBzdHJpbmcgdGhhdA0KPiArICogaXMgYmVpbmcgc2VhcmNo ZWQuIFNpbWlsYXIgdG8gJ14nIGFuZCByZXByZXNlbnRlZCBieSBcQS4NCj4gKyAqIEBzZWUgc3Ry dWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9yZWdleF9y dWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUENSRV9S VUxFX0NBU0VMRVNTX0YgKDFVTEwgPDwgMikNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0 LCBsZXR0ZXJzIGluIHRoZSBwYXR0ZXJuIG1hdGNoIGJvdGggdXBwZXIgYW5kDQo+IGxvd2VyDQo+ ICsgKiBjYXNlIGxldHRlcnMgaW4gdGhlIHN1YmplY3QuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVs ZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9ET1RB TExfRiAoMVVMTCA8PCAzKQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIGEgZG90IG1l dGFjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4gbWF0Y2hlcyBhbnkNCj4gKyAqIGNoYXJhY3Rlciwg aW5jbHVkaW5nIG9uZSB0aGF0IGluZGljYXRlcyBhIG5ld2xpbmUuDQo+ICsgKiBAc2VlIHN0cnVj dCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVs ZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVM RV9EVVBOQU1FU19GICgxVUxMIDw8IDQpDQo+ICsvKio8IFdoZW4gdGhpcyBmbGFnIGlzIHNldCwg bmFtZXMgdXNlZCB0byBpZGVudGlmeSBjYXB0dXJlIGdyb3VwcyBuZWVkIG5vdA0KPiBiZQ0KPiAr ICogdW5pcXVlLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2Zs YWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfRVhURU5ERURfRiAoMVVMTCA8PCA1KQ0KPiAr LyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIG1vc3Qgd2hpdGUgc3BhY2UgY2hhcmFjdGVycyBp biB0aGUgcGF0dGVybiBhcmUNCj4gKyAqIHRvdGFsbHkgaWdub3JlZCBleGNlcHQgd2hlbiBlc2Nh cGVkIG9yIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9y ZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxl X2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX01BVENI X1VOU0VUX0JBQ0tSRUZfRiAoMVVMTCA8PCA2KQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBz ZXQsIGEgYmFja3JlZmVyZW5jZSB0byBhbiB1bnNldCBjYXB0dXJlIGdyb3VwDQo+IG1hdGNoZXMg YW4NCj4gKyAqIGVtcHR5IHN0cmluZy4NCj4gKyAqIEBzZWUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VO U1VQX0ZPUldBUkRfUkVGRVJFTkNFU19GDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2 X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0K PiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9NVUxUSUxJTkVfRiAo MVVMTCA8PCA3KQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyAgaXMgc2V0LCB0aGUgJ14nIGFuZCAn JCcgY29uc3RydWN0cyBtYXRjaCBpbW1lZGlhdGVseQ0KPiArICogZm9sbG93aW5nIG9yIGltbWVk aWF0ZWx5IGJlZm9yZSBpbnRlcm5hbCBuZXdsaW5lcyBpbiB0aGUgc3ViamVjdCBzdHJpbmcsDQo+ ICsgKiByZXNwZWN0aXZlbHksIGFzIHdlbGwgYXMgYXQgdGhlIHZlcnkgc3RhcnQgYW5kIGVuZC4N Cj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0 DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBS VEVfUkVHRVhfUENSRV9SVUxFX05PX0FVVE9fQ0FQVFVSRV9GICgxVUxMIDw8IDgpDQo+ICsvKio8 IFdoZW4gdGhpcyBGbGFnIGlzIHNldCwgaXQgZGlzYWJsZXMgdGhlIHVzZSBvZiBudW1iZXJlZCBj YXB0dXJpbmcNCj4gKyAqIHBhcmVudGhlc2VzIGluIHRoZSBwYXR0ZXJuLiBSZWZlcmVuY2VzIHRv IGNhcHR1cmUgZ3JvdXBzDQo+IChiYWNrcmVmZXJlbmNlcyBvcg0KPiArICogcmVjdXJzaW9uL3N1 YnJvdXRpbmUgY2FsbHMpIG1heSBvbmx5IHJlZmVyIHRvIG5hbWVkIGdyb3VwcywgdGhvdWdoIHRo ZQ0KPiArICogcmVmZXJlbmNlIGNhbiBiZSBieSBuYW1lIG9yIGJ5IG51bWJlci4NCj4gKyAqIEBz ZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9y ZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhf UENSRV9SVUxFX1VDUF9GICgxVUxMIDw8IDkpDQo+ICsvKio8IEJ5IGRlZmF1bHQsIG9ubHkgQVND SUkgY2hhcmFjdGVycyBhcmUgcmVjb2duaXplZCwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LA0KPiAr ICogVW5pY29kZSBwcm9wZXJ0aWVzIGFyZSB1c2VkIGluc3RlYWQgdG8gY2xhc3NpZnkgY2hhcmFj dGVycy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywg c3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2Rl ZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX1VOR1JFRURZX0YgKDFVTEwgPDwgMTApDQo+ICsvKio8 IFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlICJncmVlZGluZXNzIiBvZiB0aGUgcXVhbnRpZmll cnMgaXMgaW52ZXJ0ZWQNCj4gKyAqIHNvIHRoYXQgdGhleSBhcmUgbm90IGdyZWVkeSBieSBkZWZh dWx0LCBidXQgYmVjb21lIGdyZWVkeSBpZiBmb2xsb3dlZCBieQ0KPiArICogJz8nLg0KPiArICog QHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRl X3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdF WF9QQ1JFX1JVTEVfVVRGX0YgKDFVTEwgPDwgMTEpDQo+ICsvKio8IFdoZW4gdGhpcyBmbGFnIGlz IHNldCwgUmVnRXggZW5naW5lIGhhcyB0byByZWdhcmQgYm90aCB0aGUgcGF0dGVybiBhbmQNCj4g dGhlDQo+ICsgKiBzdWJqZWN0IHN0cmluZ3MgdGhhdCBhcmUgc3Vic2VxdWVudGx5IHByb2Nlc3Nl ZCBhcyBzdHJpbmdzIG9mIFVURg0KPiBjaGFyYWN0ZXJzDQo+ICsgKiBpbnN0ZWFkIG9mIHNpbmds ZS1jb2RlLXVuaXQgc3RyaW5ncy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5m bzo6cnVsZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsg Ki8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX05FVkVSX0JBQ0tTTEFTSF9D X0YgKDFVTEwgPDwgMTIpDQo+ICsvKio8IFRoaXMgRmxhZyBsb2NrcyBvdXQgdGhlIHVzZSBvZiAn XEMnIGluIHRoZSBwYXR0ZXJuIHRoYXQgaXMgYmVpbmcgY29tcGlsZWQuDQo+ICsgKiBUaGlzIGVz Y2FwZSBtYXRjaGVzIG9uZSBkYXRhIHVuaXQsIGV2ZW4gaW4gVVRGIG1vZGUgd2hpY2ggY2FuIGNh dXNlDQo+ICsgKiB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIGluIFVURi04IG9yIFVURi0xNiBtb2Rl cywgYmVjYXVzZSBpdCBtYXkgbGVhdmUNCj4gdGhlDQo+ICsgKiBjdXJyZW50IG1hdGNoaW5nIHBv aW50IGluIHRoZSBtaWRkbGUgb2YgYSBtdWx0aS1jb2RlLXVuaXQgY2hhcmFjdGVyLg0KPiArICog QHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRl X3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsNCj4gKy8qKg0KPiArICog UmVnRXggZGV2aWNlIGluZm9ybWF0aW9uDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfcmVnZXhfZGV2 X2luZm8gew0KPiArCWNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lOyAvKio8IFJlZ0V4IGRyaXZlciBu YW1lICovDQo+ICsJc3RydWN0IHJ0ZV9kZXZpY2UgKmRldjsJLyoqPCBEZXZpY2UgaW5mb3JtYXRp b24gKi8NCj4gKwl1aW50OF90IG1heF9tYXRjaGVzOw0KPiArCS8qKjwgTWF4aW11bSBtYXRjaGVz IHBlciBzY2FuIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLw0KPiArCXVpbnQxNl90IG1heF9x dWV1ZV9wYWlyczsNCj4gKwkvKio8IE1heGltdW0gcXVldWUgcGFpcnMgc3VwcG9ydGVkIGJ5IHRo aXMgZGV2aWNlICovDQo+ICsJdWludDE2X3QgbWF4X3BheWxvYWRfc2l6ZTsNCj4gKwkvKio8IE1h eGltdW0gcGF5bG9hZCBzaXplIGZvciBhIHBhdHRlcm4gbWF0Y2ggcmVxdWVzdCBvciBzY2FuLg0K PiArCSAqIEBzZWUgUlRFX1JFR0VYX0RFVl9DRkdfQ1JPU1NfQlVGRkVSX1NDQU5fRg0KPiArCSAq Lw0KPiArCXVpbnQxNl90IG1heF9ydWxlc19wZXJfZ3JvdXA7DQo+ICsJLyoqPCBNYXhpbXVtIHJ1 bGVzIHN1cHBvcnRlZCBwZXIgZ3JvdXAgYnkgdGhpcyBkZXZpY2UgKi8NCj4gKwl1aW50MTZfdCBt YXhfZ3JvdXBzOw0KPiArCS8qKjwgTWF4aW11bSBncm91cCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZp Y2UgKi8NCj4gKwl1aW50MzJfdCByZWdleF9kZXZfY2FwYTsNCj4gKwkvKio8IFJlZ0V4IGRldmlj ZSBjYXBhYmlsaXRpZXMuIEBzZWUgUlRFX1JFR0VYX0RFVl9DQVBBXyogKi8NCj4gKwl1aW50NjRf dCBydWxlX2ZsYWdzOw0KPiArCS8qKjwgU3VwcG9ydGVkIGNvbXBpbGVyIHJ1bGUgZmxhZ3MuDQo+ ICsJICogQHNlZSBSVEVfUkVHRVhfUENSRV9SVUxFXyosIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6 cnVsZV9mbGFncw0KPiArCSAqLw0KPiArCXVpbnQ2NF90IHBjcmVfdW5zdXBfZmxhZ3M7DQo+ICsJ LyoqPCBVbnN1cHBvcnRlZCBQQ1JFIGZlYXR1cmVzIGZvciB0aGlzIFJlZ0V4IGRldmljZS4NCj4g KwkgKiBAc2VlIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF8qDQo+ICsJICovDQo+ICt9Ow0KPiAr DQo+ICsvKioNCj4gKyAqIFJldHJpZXZlIHRoZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIG9mIGEg UmVnRXggZGV2aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIGlk ZW50aWZpZXIgb2YgdGhlIGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW1bb3V0XSBkZXZfaW5m bw0KPiArICogICBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgb2YgdHlwZSAqcnRlX3JlZ2V4X2Rl dl9pbmZvKiB0byBiZSBmaWxsZWQgd2l0aA0KPiB0aGUNCj4gKyAqICAgY29udGV4dHVhbCBpbmZv cm1hdGlvbiBvZiB0aGUgZGV2aWNlLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSAw OiBTdWNjZXNzLCBkcml2ZXIgdXBkYXRlcyB0aGUgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBvZiB0 aGUgUmVnRXgNCj4gZGV2aWNlDQo+ICsgKiAgIC0gPDA6IEVycm9yIGNvZGUgcmV0dXJuZWQgYnkg dGhlIGRyaXZlciBpbmZvIGdldCBmdW5jdGlvbi4NCj4gKyAqDQo+ICsgKi8NCj4gK2ludA0KPiAr cnRlX3JlZ2V4X2Rldl9pbmZvX2dldCh1aW50OF90IGRldl9pZCwgc3RydWN0IHJ0ZV9yZWdleF9k ZXZfaW5mbw0KPiAqZGV2X2luZm8pOw0KPiArDQo+ICsvKiBFbnVtZXJhdGVzIFJlZ0V4IGRldmlj ZSBjb25maWd1cmF0aW9uIGZsYWdzICovDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfQ0ZHX0NS T1NTX0JVRkZFUl9TQ0FOX0YgKDFVTEwgPDwgMCkNCj4gKy8qKjwgQ3Jvc3MgYnVmZmVyIHNjYW4g cmVmZXJzIHRvIHRoZSBhYmlsaXR5IHRvIGJlIGFibGUgdG8gZGV0ZWN0DQo+ICsgKiBtYXRjaGVz IHRoYXQgb2NjdXIgYWNyb3NzIGJ1ZmZlciBib3VuZGFyaWVzLCB3aGVyZSB0aGUgYnVmZmVycyBh cmUNCj4gcmVsYXRlZA0KPiArICogdG8gZWFjaCBvdGhlciBpbiBzb21lIHdheS4gRW5hYmxlIHRo aXMgZmxhZyB3aGVuIHRvIHNjYW4gcGF5bG9hZCBzaXplDQo+ICsgKiBncmVhdGVyIHN0cnVjdCBz dHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfcGF5bG9hZF9zaXplIGFuZC9vcg0KPiArICog bWF0Y2hlcyBjYW4gcHJlc2VudCBhY3Jvc3Mgc2NhbiBidWZmZXIgYm91bmRhcmllcy4NCj4gKyAq DQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86Om1heF9wYXlsb2FkX3NpemUN Cj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpkZXZfY2ZnX2ZsYWdzLA0K PiBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQo+ICsgKiBAc2VlIFJURV9SRUdFWF9PUFNfUlNQ X1BNSV9TT0pfRg0KPiArICogQHNlZSBSVEVfUkVHRVhfT1BTX1JTUF9QTUlfRU9KX0YNCj4gKyAq Lw0KPiArDQo+ICsvKiogUmVnRXggZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovDQo+ ICtzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9jb25maWcgew0KPiArCXVpbnQ4X3QgbmJfbWF4X21hdGNo ZXM7DQo+ICsJLyoqPCBNYXhpbXVtIG1hdGNoZXMgcGVyIHNjYW4gY29uZmlndXJlZCBvbiB0aGlz IGRldmljZS4NCj4gKwkgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfbWF0Y2hl cyoNCj4gKwkgKiB3aGljaCBwcmV2aW91c2x5IHByb3ZpZGVkIGluIHJ0ZV9yZWdleF9kZXZfaW5m b19nZXQoKS4NCj4gKwkgKiBUaGUgdmFsdWUgMCBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNlLCB2 YWx1ZSAxIHVzZWQuDQo+ICsJICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhf bWF0Y2hlcw0KPiArCSAqLw0KPiArCXVpbnQxNl90IG5iX3F1ZXVlX3BhaXJzOw0KPiArCS8qKjwg TnVtYmVyIG9mIFJlZ0V4IHF1ZXVlIHBhaXJzIHRvIGNvbmZpZ3VyZSBvbiB0aGlzIGRldmljZS4N Cj4gKwkgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfcXVldWVfcGFpcnMqIHdo aWNoDQo+IHByZXZpb3VzbHkNCj4gKwkgKiBwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2luZm9f Z2V0KCkuDQo+ICsJICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfcXVldWVf cGFpcnMNCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBuYl9ydWxlc19wZXJfZ3JvdXA7DQo+ICsJLyoq PCBOdW1iZXIgb2YgcnVsZXMgcGVyIGdyb3VwIHRvIGNvbmZpZ3VyZSBvbiB0aGlzIGRldmljZS4N Cj4gKwkgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfcnVsZXNfcGVyX2dyb3Vw Kg0KPiArCSAqIHdoaWNoIHByZXZpb3VzbHkgcHJvdmlkZWQgaW4gcnRlX3JlZ2V4X2Rldl9pbmZv X2dldCgpLg0KPiArCSAqIFRoZSB2YWx1ZSAwIGlzIGFsbG93ZWQsIGluIHdoaWNoIGNhc2UsDQo+ ICsJICogc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X3J1bGVzX3Blcl9ncm91cCB1c2Vk Lg0KPiArCSAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X3J1bGVzX3Blcl9n cm91cA0KPiArCSAqLw0KPiArCXVpbnQxNl90IG5iX2dyb3VwczsNCj4gKwkvKio8IE51bWJlciBv ZiBncm91cHMgdG8gY29uZmlndXJlIG9uIHRoaXMgZGV2aWNlLg0KPiArCSAqIFRoaXMgdmFsdWUg Y2Fubm90IGV4Y2VlZCB0aGUgKm1heF9ncm91cHMqDQo+ICsJICogd2hpY2ggcHJldmlvdXNseSBw cm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2luZm9fZ2V0KCkuDQo+ICsJICogQHNlZSBzdHJ1Y3Qg cnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfZ3JvdXBzDQo+ICsJICovDQo+ICsJY29uc3QgY2hhciAq cnVsZV9kYjsNCj4gKwkvKio8IEltcG9ydCBpbml0aWFsIHNldCBvZiBwcmVidWlsdCBydWxlIGRh dGFiYXNlIG9uIHRoaXMgZGV2aWNlLg0KPiArCSAqIFRoZSB2YWx1ZSBOVUxMIGlzIGFsbG93ZWQs IGluIHdoaWNoIGNhc2UsIHRoZSBkZXZpY2Ugd2lsbCBub3QNCj4gKwkgKiBiZSBjb25maWd1cmVk IHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2UuIEFwcGxpY2F0aW9uIG1heSB1c2UNCj4gKwkgKiBydGVf cmVnZXhfcnVsZV9kYl91cGRhdGUoKSBvciBydGVfcmVnZXhfcnVsZV9kYl9pbXBvcnQoKSBBUEkN Cj4gKwkgKiB0byB1cGRhdGUgb3IgaW1wb3J0IHJ1bGUgZGF0YWJhc2UgYWZ0ZXIgdGhlDQo+ICsJ ICogcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKS4NCj4gKwkgKiBAc2VlIHJ0ZV9yZWdleF9ydWxl X2RiX3VwZGF0ZSgpLCBydGVfcmVnZXhfcnVsZV9kYl9pbXBvcnQoKQ0KPiArCSAqLw0KPiArCXVp bnQzMl90IHJ1bGVfZGJfbGVuOw0KPiArCS8qKjwgTGVuZ3RoIG9mICpydWxlX2RiKiBidWZmZXIu ICovDQo+ICsJdWludDMyX3QgZGV2X2NmZ19mbGFnczsNCj4gKwkvKio8IFJlZ0V4IGRldmljZSBj b25maWd1cmF0aW9uIGZsYWdzLCBTZWUgUlRFX1JFR0VYX0RFVl9DRkdfKg0KPiAqLw0KPiArfTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBDb25maWd1cmUgYSBSZWdFeCBkZXZpY2UuDQo+ICsgKg0KPiAr ICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgZmlyc3QgYmVmb3JlIGFueSBvdGhlciBm dW5jdGlvbiBpbiB0aGUNCj4gKyAqIEFQSS4gVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSByZS1p bnZva2VkIHdoZW4gYSBkZXZpY2UgaXMgaW4gdGhlDQo+ICsgKiBzdG9wcGVkIHN0YXRlLg0KPiAr ICoNCj4gKyAqIFRoZSBjYWxsZXIgbWF5IHVzZSBydGVfcmVnZXhfZGV2X2luZm9fZ2V0KCkgdG8g Z2V0IHRoZSBjYXBhYmlsaXR5IG9mIGVhY2gNCj4gKyAqIHJlc291cmNlcyBhdmFpbGFibGUgZm9y IHRoaXMgcmVnZXggZGV2aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAg VGhlIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZSB0byBjb25maWd1cmUuDQo+ICsgKiBAcGFyYW0g Y2ZnDQo+ICsgKiAgIFRoZSBSZWdFeCBkZXZpY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuDQo+ ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3MsIGRldmljZSBjb25maWd1 cmVkLg0KPiArICogICAtIDwwOiBFcnJvciBjb2RlIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgY29u ZmlndXJhdGlvbiBmdW5jdGlvbi4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2Nv bmZpZ3VyZSh1aW50OF90IGRldl9pZCwgY29uc3Qgc3RydWN0DQo+IHJ0ZV9yZWdleF9kZXZfY29u ZmlnICpjZmcpOw0KPiArDQo+ICsvKiBFbnVtZXJhdGVzIFJlZ0V4IHF1ZXVlIHBhaXIgY29uZmln dXJhdGlvbiBmbGFncyAqLw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUVVFVUVfUEFJUl9DRkdfT09T X0YgKDFVTEwgPDwgMCkNCj4gKy8qKjwgT3V0IG9mIG9yZGVyIHNjYW4sIElmIG5vdCBzZXQsIGEg c2NhbiBtdXN0IHJldGlyZSBhZnRlciBwcmV2aW91c2x5IGlzc3VlZA0KPiArICogaW4tb3JkZXIg c2NhbnMgdG8gdGhpcyBxdWV1ZSBwYWlyLiBJZiBzZXQsIHRoaXMgc2NhbiBjYW4gYmUgcmV0aXJl ZCBhcyBzb29uDQo+ICsgKiBhcyBkZXZpY2UgcmV0dXJucyBjb21wbGV0aW9uLiBBcHBsaWNhdGlv biBzaG91bGQgbm90IHNldCBvdXQgb2Ygb3JkZXIgc2Nhbg0KPiArICogZmxhZyBpZiBpdCBuZWVk cyB0byBtYWludGFpbiB0aGUgaW5ncmVzcyBvcmRlciBvZiBzY2FuIHJlcXVlc3QuDQo+ICsgKg0K PiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X3FwX2NvbmY6OnFwX2NvbmZfZmxhZ3MsDQo+IHJ0 ZV9yZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkNCj4gKyAqLw0KPiArDQo+ICtzdHJ1Y3QgcnRlX3Jl Z2V4X29wczsNCj4gK3R5cGVkZWYgdm9pZCAoKnJlZ2V4ZGV2X3N0b3BfZmx1c2hfdCkodWludDhf dCBkZXZfaWQsIHVpbnQxNl90IHFwX2lkLA0KPiArCQkJCSAgICAgIHN0cnVjdCBydGVfcmVnZXhf b3BzICpvcCk7DQo+ICsvKio8IENhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgcnRlX3Jl Z2V4X2Rldl9zdG9wKCksIGludm9rZWQgb25jZQ0KPiBwZXINCj4gKyAqIGZsdXNoZWQgUmVnRXgg b3AuDQo+ICsgKi8NCj4gKw0KPiArLyoqIFJlZ0V4IHF1ZXVlIHBhaXIgY29uZmlndXJhdGlvbiBz dHJ1Y3R1cmUgKi8NCj4gK3N0cnVjdCBydGVfcmVnZXhfcXBfY29uZiB7DQo+ICsJdWludDMyX3Qg cXBfY29uZl9mbGFnczsNCj4gKwkvKio8IFF1ZXVlIHBhaXIgY29uZmlnIGZsYWdzLCBTZWUgUlRF X1JFR0VYX1FVRVVFX1BBSVJfQ0ZHXyoNCj4gKi8NCj4gKwl1aW50MTZfdCBuYl9kZXNjOw0KPiAr CS8qKjwgVGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBmb3IgdGhpcyBxdWV1 ZSBwYWlyLiAqLw0KPiArCXJlZ2V4ZGV2X3N0b3BfZmx1c2hfdCBjYjsNCj4gKwkvKio8IENhbGxi YWNrIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgcnRlX3JlZ2V4X2Rldl9zdG9wKCksIGludm9rZWQN Cj4gKwkgKiBvbmNlIHBlciBmbHVzaGVkIHJlZ2V4IG9wLiBWYWx1ZSBOVUxMIGlzIGFsbG93ZWQs IGluIHdoaWNoIGNhc2UNCj4gKwkgKiBjYWxsYmFjayB3aWxsIG5vdCBiZSBpbnZva2VkLiBUaGlz IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHByb3Blcmx5DQo+ICsJICogZGlzcG9zZSBvZiBvdXRz dGFuZGluZyByZWdleCBvcHMgZnJvbSByZXNwb25zZSBxdWV1ZSwNCj4gKwkgKiBmb3IgZXhhbXBs ZSBvcHMgY29udGFpbmluZyBtZW1vcnkgcG9pbnRlcnMuDQo+ICsJICogQHNlZSBydGVfcmVnZXhf ZGV2X3N0b3AoKQ0KPiArCSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBh bmQgc2V0IHVwIGEgUmVnRXggcXVldWUgcGFpciBmb3IgYSBSZWdFeCBkZXZpY2UuDQo+ICsgKg0K PiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNl Lg0KPiArICogQHBhcmFtIHF1ZXVlX3BhaXJfaWQNCj4gKyAqICAgVGhlIGluZGV4IG9mIHRoZSBS ZWdFeCBxdWV1ZSBwYWlyIHRvIHNldHVwLiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUNCj4gcmFu Z2UNCj4gKyAqICAgWzAsIG5iX3F1ZXVlX3BhaXJzIC0gMV0gcHJldmlvdXNseSBzdXBwbGllZCB0 bw0KPiBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpLg0KPiArICogQHBhcmFtIHFwX2NvbmYNCj4g KyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBiZSB1c2VkIGZv ciB0aGUgUmVnRXggcXVldWUNCj4gcGFpci4NCj4gKyAqICAgTlVMTCB2YWx1ZSBpcyBhbGxvd2Vk LCBpbiB3aGljaCBjYXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbgl1c2VkLg0KPiArICoNCj4gKyAq IEByZXR1cm4NCj4gKyAqICAgLSAwOiBTdWNjZXNzLCBSZWdFeCBxdWV1ZSBwYWlyIGNvcnJlY3Rs eSBzZXQgdXAuDQo+ICsgKiAgIC0gPDA6IFJlZ0V4IHF1ZXVlIGNvbmZpZ3VyYXRpb24gZmFpbGVk DQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X3F1ZXVlX3BhaXJfc2V0dXAodWludDhfdCBk ZXZfaWQsIHVpbnQ4X3QgcXVldWVfcGFpcl9pZCwNCj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBydGVf cmVnZXhfcXBfY29uZiAqcXBfY29uZik7DQo+ICsNCj4gKy8qKg0KPiArICogU3RhcnQgYSBSZWdF eCBkZXZpY2UuDQo+ICsgKg0KPiArICogVGhlIGRldmljZSBzdGFydCBzdGVwIGlzIHRoZSBsYXN0 IG9uZSBhbmQgY29uc2lzdHMgb2Ygc2V0dGluZyB0aGUgUmVnRXgNCj4gKyAqIHF1ZXVlcyB0byBz dGFydCBhY2NlcHRpbmcgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgc2NhbiByZXF1ZXN0cy4NCj4gKyAq DQo+ICsgKiBPbiBzdWNjZXNzLCBhbGwgYmFzaWMgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBB UEkgKFJlZ0V4IGVucXVldWUsDQo+ICsgKiBSZWdFeCBkZXF1ZXVlIGFuZCBzbyBvbikgY2FuIGJl IGludm9rZWQuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBSZWdFeCBkZXZp Y2UgaWRlbnRpZmllcg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3MsIGRldmlj ZSBzdGFydGVkLg0KPiArICogICAtIDwwOiBEZXZpY2Ugc3RhcnQgZmFpbGVkLg0KPiArICovDQo+ ICtpbnQNCj4gK3J0ZV9yZWdleF9kZXZfc3RhcnQodWludDhfdCBkZXZfaWQpOw0KPiArDQo+ICsv KioNCj4gKyAqIFN0b3AgYSBSZWdFeCBkZXZpY2UuDQo+ICsgKg0KPiArICogU3RvcCBhIFJlZ0V4 IGRldmljZS4gVGhlIGRldmljZSBjYW4gYmUgcmVzdGFydGVkIHdpdGggYSBjYWxsIHRvDQo+ICsg KiBydGVfcmVnZXhfZGV2X3N0YXJ0KCkuDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBjYXVz ZXMgYWxsIHF1ZXVlZCByZXNwb25zZSByZWdleCBvcHMgdG8gYmUgZHJhaW5lZCBpbiB0aGUNCj4g KyAqIHJlc3BvbnNlIHF1ZXVlLiBXaGlsZSBkcmFpbmluZyBvcHMgb3V0IG9mIHRoZSBkZXZpY2Us DQo+ICsgKiBzdHJ1Y3QgcnRlX3JlZ2V4X3FwX2NvbmY6OmNiIHdpbGwgYmUgaW52b2tlZCBmb3Ig ZWFjaCBvcHMuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBSZWdFeCBkZXZp Y2UgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfcXBfY29u Zjo6Y2IsIHJ0ZV9yZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkNCj4gKyAqLw0KPiArdm9pZA0KPiAr cnRlX3JlZ2V4X2Rldl9zdG9wKHVpbnQ4X3QgZGV2X2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBD bG9zZSBhIFJlZ0V4IGRldmljZS4gVGhlIGRldmljZSBjYW5ub3QgYmUgcmVzdGFydGVkIQ0KPiAr ICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgUmVnRXggZGV2aWNlIGlkZW50aWZpZXIN Cj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgLSAwIG9uIHN1Y2Nlc3NmdWxseSBjbG9zZWQg dGhlIGRldmljZS4NCj4gKyAqICAtIDwwIG9uIGZhaWx1cmUgdG8gY2xvc2UgdGhlIGRldmljZS4N Cj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2Nsb3NlKHVpbnQ4X3QgZGV2X2lkKTsN Cj4gKw0KPiArLyogRGV2aWNlIGdldC9zZXQgYXR0cmlidXRlcyAqLw0KPiArDQo+ICsvKiogRW51 bWVyYXRlcyBSZWdFeCBkZXZpY2UgYXR0cmlidXRlIGlkZW50aWZpZXIgKi8NCj4gK2VudW0gcnRl X3JlZ2V4X2Rldl9hdHRyX2lkIHsNCj4gKwlSVEVfUkVHRVhfREVWX0FUVFJfU09DS0VUX0lELA0K PiArCS8qKjwgVGhlIE5VTUEgc29ja2V0IGlkIHRvIHdoaWNoIHRoZSBkZXZpY2UgaXMgY29ubmVj dGVkIG9yDQo+ICsJICogYSBkZWZhdWx0IG9mIHplcm8gaWYgdGhlIHNvY2tldCBjb3VsZCBub3Qg YmUgZGV0ZXJtaW5lZC4NCj4gKwkgKiBkYXRhdHlwZTogKmludCoNCj4gKwkgKiBvcGVyYXRpb246 ICpnZXQqDQo+ICsJICovDQo+ICsJUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9NQVRDSEVTLA0KPiAr CS8qKjwgTWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyBwZXIgc2Nhbi4NCj4gKwkgKiBkYXRhdHlw ZTogKnVpbnQ4X3QqDQo+ICsJICogb3BlcmF0aW9uOiAqZ2V0KiBhbmQgKnNldCoNCj4gKwkgKg0K PiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19SU1BfTUFYX01BVENIX0YNCj4gKwkgKi8NCj4gKwlS VEVfUkVHRVhfREVWX0FUVFJfTUFYX1NDQU5fVElNRU9VVCwNCj4gKwkvKio8IFVwcGVyIGJvdW5k IHNjYW4gdGltZSBpbiBucy4NCj4gKwkgKiBkYXRhdHlwZTogKnVpbnQxNl90Kg0KPiArCSAqIG9w ZXJhdGlvbjogKmdldCogYW5kICpzZXQqDQo+ICsJICoNCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9P UFNfUlNQX01BWF9TQ0FOX1RJTUVPVVRfRg0KPiArCSAqLw0KPiArCVJURV9SRUdFWF9ERVZfQVRU Ul9NQVhfUFJFRklYLA0KPiArCS8qKjwgTWF4aW11bSBudW1iZXIgb2YgcHJlZml4IGRldGVjdGVk IHBlciBzY2FuLg0KPiArCSAqIFRoaXMgd291bGQgYmUgdXNlZnVsIGZvciBkZW5pYWwgb2Ygc2Vy dmljZSBkZXRlY3Rpb24uDQo+ICsJICogZGF0YXR5cGU6ICp1aW50MTZfdCoNCj4gKwkgKiBvcGVy YXRpb246ICpnZXQqIGFuZCAqc2V0Kg0KPiArCSAqDQo+ICsJICogQHNlZSBSVEVfUkVHRVhfT1BT X1JTUF9NQVhfUFJFRklYX0YNCj4gKwkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogR2V0 IGFuIGF0dHJpYnV0ZSBmcm9tIGEgUmVnRXggZGV2aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBk ZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAqIEBwYXJhbSBhdHRyX2lkIFRoZSBh dHRyaWJ1dGUgSUQgdG8gcmV0cmlldmUNCj4gKyAqIEBwYXJhbVtvdXRdIGF0dHJfdmFsdWUgQSBw b2ludGVyIHRoYXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgYXR0cmlidXRlDQo+ICsgKiAg ICAgICAgICAgICB2YWx1ZSBpZiBzdWNjZXNzZnVsLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4g KyAqICAgLSAwOiBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGF0dHJpYnV0ZSB2YWx1ZS4NCj4gKyAq ICAgLSAtRUlOVkFMOiBJbnZhbGlkIGRldmljZSBvciAgKmF0dHJfaWQqIHByb3ZpZGVkLCBvciAq YXR0cl92YWx1ZSogaXMgTlVMTC4NCj4gKyAqICAgLSAtRU5PVFNVUDogaWYgdGhlIGRldmljZSBk b2Vzbid0IHN1cHBvcnQgc3BlY2lmaWMgKmF0dHJfaWQqLg0KPiArICovDQo+ICtpbnQNCj4gK3J0 ZV9yZWdleF9kZXZfYXR0cl9nZXQodWludDhfdCBkZXZfaWQsIGVudW0gcnRlX3JlZ2V4X2Rldl9h dHRyX2lkDQo+IGF0dHJfaWQsDQo+ICsJCSAgICAgICB2b2lkICphdHRyX3ZhbHVlKTsNCj4gKw0K PiArLyoqDQo+ICsgKiBTZXQgYW4gYXR0cmlidXRlIHRvIGEgUmVnRXggZGV2aWNlLg0KPiArICoN Cj4gKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAqIEBwYXJh bSBhdHRyX2lkIFRoZSBhdHRyaWJ1dGUgSUQgdG8gcmV0cmlldmUNCj4gKyAqIEBwYXJhbSBhdHRy X3ZhbHVlIEEgcG9pbnRlciB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGF0dHJpYnV0 ZSB2YWx1ZQ0KPiArICogICAgICAgICAgICAgICAgICAgYnkgdGhlIGFwcGxpY2F0aW9uDQo+ICsg Kg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3NmdWxseSBhcHBsaWVkIHRoZSBh dHRyaWJ1dGUgdmFsdWUuDQo+ICsgKiAgIC0gLUVJTlZBTDogSW52YWxpZCBkZXZpY2Ugb3IgICph dHRyX2lkKiBwcm92aWRlZCwgb3IgKmF0dHJfdmFsdWUqIGlzIE5VTEwuDQo+ICsgKiAgIC0gLUVO T1RTVVA6IGlmIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHNwZWNpZmljICphdHRyX2lkKi4N Cj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2F0dHJfc2V0KHVpbnQ4X3QgZGV2X2lk LCBlbnVtIHJ0ZV9yZWdleF9kZXZfYXR0cl9pZA0KPiBhdHRyX2lkLA0KPiArCQkgICAgICAgY29u c3Qgdm9pZCAqYXR0cl92YWx1ZSk7DQo+ICsNCj4gKy8qIFJ1bGUgcmVsYXRlZCBBUElzICovDQo+ ICsvKiogRW51bWVyYXRlcyBSZWdFeCBydWxlIG9wZXJhdGlvbiAqLw0KPiArZW51bSBydGVfcmVn ZXhfcnVsZV9vcCB7DQo+ICsJUlRFX1JFR0VYX1JVTEVfT1BfQURELA0KPiArCS8qKjwgQWRkIFJl Z0V4IHJ1bGUgdG8gcnVsZSBkYXRhYmFzZSAqLw0KPiArCVJURV9SRUdFWF9SVUxFX09QX1JFTU9W RQ0KPiArCS8qKjwgUmVtb3ZlIFJlZ0V4IHJ1bGUgZnJvbSBydWxlIGRhdGFiYXNlICovDQo+ICt9 Ow0KPiArDQo+ICsvKiogU3RydWN0dXJlIHRvIGhvbGQgYSBSZWdFeCBydWxlIGF0dHJpYnV0ZXMg Ki8NCj4gK3N0cnVjdCBydGVfcmVnZXhfcnVsZSB7DQo+ICsJZW51bSBydGVfcmVnZXhfcnVsZV9v cCBvcDsNCj4gKwkvKio8IE9QIHR5cGUgb2YgdGhlIHJ1bGUgZWl0aGVyIGEgT1BfQUREIG9yIE9Q X0RFTEVURSAqLw0KPiArCXVpbnQxNl90IGdyb3VwX2lkOw0KPiArCS8qKjwgR3JvdXAgaWRlbnRp ZmllciB0byB3aGljaCB0aGUgcnVsZSBiZWxvbmdzIHRvLiAqLw0KPiArCXVpbnQzMl90IHJ1bGVf aWQ7DQo+ICsJLyoqPCBSdWxlIGlkZW50aWZpZXIgd2hpY2ggaXMgcmV0dXJuZWQgb24gc3VjY2Vz c2Z1bCBtYXRjaC4gKi8NCj4gKwljb25zdCBjaGFyICpwY3JlX3J1bGU7DQo+ICsJLyoqPCBCdWZm ZXIgdG8gaG9sZCB0aGUgUENSRSBydWxlLiAqLw0KPiArCXVpbnQxNl90IHBjcmVfcnVsZV9sZW47 DQo+ICsJLyoqPCBMZW5ndGggb2YgdGhlIFBDUkUgcnVsZSovDQo+ICsJdWludDY0X3QgcnVsZV9m bGFnczsNCj4gKwkvKiBQQ1JFIHJ1bGUgZmxhZ3MuIFN1cHBvcnRlZCBkZXZpY2Ugc3BlY2lmaWMg UENSRSBydWxlcyBlbnVtZXJhdGVkDQo+ICsJICogaW4gc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5m bzo6cnVsZV9mbGFncy4gRm9yIHN1Y2Nlc3NmdWwgcnVsZQ0KPiArCSAqIGRhdGFiYXNlIHVwZGF0 ZSwgYXBwbGljYXRpb24gbmVlZHMgdG8gcHJvdmlkZSBvbmx5IHN1cHBvcnRlZA0KPiArCSAqIHJ1 bGUgZmxhZ3MuDQo+ICsJICogQFNlZSBSVEVfUkVHRVhfUENSRV9SVUxFXyosIHN0cnVjdA0KPiBy dGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MNCj4gKwkgKi8NCj4gK307DQo+ICsNCj4gKy8q Kg0KPiArICogVXBkYXRlIHRoZSBydWxlIGRhdGFiYXNlIG9mIGEgUmVnRXggZGV2aWNlLg0KPiAr ICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAqIEBw YXJhbSBydWxlcw0KPiArICogICBQb2ludHMgdG8gYW4gYXJyYXkgb2YgKm5iX3J1bGVzKiBvYmpl Y3RzIG9mIHR5cGUgKnJ0ZV9yZWdleF9ydWxlKg0KPiBzdHJ1Y3R1cmUNCj4gKyAqICAgd2hpY2gg Y29udGFpbiB0aGUgcmVnZXggcnVsZXMgYXR0cmlidXRlcyB0byBiZSB1cGRhdGVkIGluIHJ1bGUg ZGF0YWJhc2UuDQo+ICsgKiBAcGFyYW0gbmJfcnVsZXMNCj4gKyAqICAgVGhlIG51bWJlciBvZiBQ Q1JFIHJ1bGVzIHRvIHVwZGF0ZSB0aGUgcnVsZSBkYXRhYmFzZS4NCj4gKyAqDQo+ICsgKiBAcmV0 dXJuDQo+ICsgKiAgIFRoZSBudW1iZXIgb2YgcmVnZXggcnVsZXMgYWN0dWFsbHkgdXBkYXRlZCBv biB0aGUgcmVnZXggZGV2aWNlJ3MgcnVsZQ0KPiArICogICBkYXRhYmFzZS4gVGhlIHJldHVybiB2 YWx1ZSBjYW4gYmUgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiB0aGUgKm5iX3J1bGVzKg0KPiArICog ICBwYXJhbWV0ZXIgd2hlbiB0aGUgcmVnZXggZGV2aWNlcyBmYWlscyB0byB1cGRhdGUgdGhlIHJ1 bGUgZGF0YWJhc2Ugb3INCj4gKyAqICAgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZp ZWQgaW4gYSAqcnRlX3JlZ2V4X3J1bGUqLg0KPiArICogICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlz IGxlc3MgdGhhbiAqbmJfcnVsZXMqLCB0aGUgcmVtYWluaW5nIFBDUkUgcnVsZXMNCj4gKyAqICAg YXQgdGhlIGVuZCBvZiAqcnVsZXMqIGFyZSBub3QgY29uc3VtZWQgYW5kIHRoZSBjYWxsZXIgaGFz IHRvIHRha2UNCj4gKyAqICAgY2FyZSBvZiB0aGVtIGFuZCBydGVfZXJybm8gaXMgc2V0IGFjY29y ZGluZ2x5Lg0KPiArICogICBQb3NzaWJsZSBlcnJubyB2YWx1ZXMgaW5jbHVkZToNCj4gKyAqICAg LSAtRUlOVkFMOiAgSW52YWxpZCBkZXZpY2UgSUQgb3IgcnVsZXMgaXMgTlVMTA0KPiArICogICAt IC1FTk9UU1VQOiBUaGUgbGFzdCBwcm9jZXNzZWQgcnVsZSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRo aXMgZGV2aWNlLg0KPiArICogICAtIC1FTk9TUEM6IE5vIHNwYWNlIGF2YWlsYWJsZSBpbiBydWxl IGRhdGFiYXNlLg0KPiArICoNCj4gKyAqIEBzZWUgcnRlX3JlZ2V4X3J1bGVfZGJfaW1wb3J0KCks IHJ0ZV9yZWdleF9ydWxlX2RiX2V4cG9ydCgpDQo+ICsgKi8NCj4gK3VpbnQxNl90DQo+ICtydGVf cmVnZXhfcnVsZV9kYl91cGRhdGUodWludDhfdCBkZXZfaWQsIGNvbnN0IHN0cnVjdCBydGVfcmVn ZXhfcnVsZQ0KPiAqcnVsZXMsDQo+ICsJCQkgdWludDE2X3QgbmJfcnVsZXMpOw0KPiArDQo+ICsv KioNCj4gKyAqIEltcG9ydCBhIHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2UgZnJvbSBhIGJ1ZmZlciB0 byBhIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkIFJlZ0V4IGRldmlj ZSBpZGVudGlmaWVyDQo+ICsgKiBAcGFyYW0gcnVsZV9kYg0KPiArICogICBQb2ludHMgdG8gcHJl YnVpbHQgcnVsZSBkYXRhYmFzZS4NCj4gKyAqIEBwYXJhbSBydWxlX2RiX2xlbg0KPiArICogICBM ZW5ndGggb2YgdGhlIHJ1bGUgZGF0YWJhc2UuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICog ICAtIDA6IFN1Y2Nlc3NmdWxseSB1cGRhdGVkIHRoZSBwcmVidWlsdCBydWxlIGRhdGFiYXNlLg0K PiArICogICAtIC1FSU5WQUw6ICBJbnZhbGlkIGRldmljZSBJRCBvciBydWxlX2RiIGlzIE5VTEwN Cj4gKyAqICAgLSAtRU5PVFNVUDogUnVsZSBkYXRhYmFzZSBpbXBvcnQgaXMgbm90IHN1cHBvcnRl ZCBvbiB0aGlzIGRldmljZS4NCj4gKyAqICAgLSAtRU5PU1BDOiBObyBzcGFjZSBhdmFpbGFibGUg aW4gcnVsZSBkYXRhYmFzZS4NCj4gKyAqDQo+ICsgKiBAc2VlIHJ0ZV9yZWdleF9ydWxlX2RiX3Vw ZGF0ZSgpLCBydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQoKQ0KPiArICovDQo+ICtpbnQNCj4gK3J0 ZV9yZWdleF9ydWxlX2RiX2ltcG9ydCh1aW50OF90IGRldl9pZCwgY29uc3QgY2hhciAqcnVsZV9k YiwNCj4gKwkJCSB1aW50MzJfdCBydWxlX2RiX2xlbik7DQo+ICsNCj4gKy8qKg0KPiArICogRXhw b3J0IHRoZSBwcmVidWlsdCBydWxlIGRhdGFiYXNlIGZyb20gYSBSZWdFeCBkZXZpY2UgdG8gdGhl IGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkIFJlZ0V4IGRldmljZSBpZGVudGlm aWVyDQo+ICsgKiBAcGFyYW1bb3V0XSBydWxlX2RiDQo+ICsgKiAgIEJsb2NrIG9mIG1lbW9yeSB0 byBpbnNlcnQgdGhlIHJ1bGUgZGF0YWJhc2UuIE11c3QgYmUgYXQgbGVhc3Qgc2l6ZSBpbg0KPiAr ICogICBjYXBhY2l0eS4gSWYgc2V0IHRvIE5VTEwsIGZ1bmN0aW9uIHJldHVybnMgcmVxdWlyZWQg Y2FwYWNpdHkuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3NmdWxs eSBleHBvcnRlZCB0aGUgcHJlYnVpbHQgcnVsZSBkYXRhYmFzZS4NCj4gKyAqICAgLSBzaXplOiBJ ZiBydWxlX2RiIHNldCB0byBOVUxMIHRoZW4gcmVxdWlyZWQgY2FwYWNpdHkgZm9yICpydWxlX2Ri Kg0KPiArICogICAtIC1FSU5WQUw6ICBJbnZhbGlkIGRldmljZSBJRA0KPiArICogICAtIC1FTk9U U1VQOiBSdWxlIGRhdGFiYXNlIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNl Lg0KPiArICoNCj4gKyAqIEBzZWUgcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCksIHJ0ZV9yZWdl eF9ydWxlX2RiX2ltcG9ydCgpDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X3J1bGVfZGJf ZXhwb3J0KHVpbnQ4X3QgZGV2X2lkLCBjaGFyICpydWxlX2RiKTsNCj4gKw0KPiArLyogRXh0ZW5k ZWQgc3RhdGlzdGljcyAqLw0KPiArLyoqIE1heGltdW0gbmFtZSBsZW5ndGggZm9yIGV4dGVuZGVk IHN0YXRpc3RpY3MgY291bnRlcnMgKi8NCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9YU1RBVFNf TkFNRV9TSVpFIDY0DQo+ICsNCj4gKy8qKg0KPiArICogQSBuYW1lLWtleSBsb29rdXAgZWxlbWVu dCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGljcy4NCj4gKyAqDQo+ICsgKiBUaGlzIHN0cnVjdHVyZSBp cyB1c2VkIHRvIG1hcCBiZXR3ZWVuIG5hbWVzIGFuZCBJRCBudW1iZXJzDQo+ICsgKiBmb3IgZXh0 ZW5kZWQgUmVnRXggZGV2aWNlIHN0YXRpc3RpY3MuDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfcmVn ZXhfZGV2X3hzdGF0c19tYXAgew0KPiArCXVpbnQxNl90IGlkOw0KPiArCS8qKjwgeHN0YXQgaWRl bnRpZmllciAqLw0KPiArCWNoYXIgbmFtZVtSVEVfUkVHRVhfREVWX1hTVEFUU19OQU1FX1NJWkVd Ow0KPiArCS8qKjwgeHN0YXQgbmFtZSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZXRy aWV2ZSBuYW1lcyBvZiBleHRlbmRlZCBzdGF0aXN0aWNzIG9mIGEgcmVnZXggZGV2aWNlLg0KPiAr ICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJl Z2V4IGRldmljZS4NCj4gKyAqIEBwYXJhbVtvdXRdIHhzdGF0c19tYXANCj4gKyAqICAgQmxvY2sg b2YgbWVtb3J5IHRvIGluc2VydCBpZCBhbmQgbmFtZXMgaW50by4gTXVzdCBiZSBhdCBsZWFzdCBz aXplIGluDQo+ICsgKiAgIGNhcGFjaXR5LiBJZiBzZXQgdG8gTlVMTCwgZnVuY3Rpb24gcmV0dXJu cyByZXF1aXJlZCBjYXBhY2l0eS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSBwb3NpdGl2ZSB2 YWx1ZSBvbiBzdWNjZXNzOg0KPiArICogICAgICAgIC1UaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBu dW1iZXIgb2YgZW50cmllcyBmaWxsZWQgaW4gdGhlIHN0YXRzIG1hcC4NCj4gKyAqICAgICAgICAt SWYgeHN0YXRzX21hcCBzZXQgdG8gTlVMTCB0aGVuIHJlcXVpcmVkIGNhcGFjaXR5IGZvciB4c3Rh dHNfbWFwLg0KPiArICogICAtIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yOg0KPiArICogICAgICAt RU5PREVWIGZvciBpbnZhbGlkICpkZXZfaWQqDQo+ICsgKiAgICAgIC1FTk9UU1VQIGlmIHRoZSBk ZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoaXMgZnVuY3Rpb24uDQo+ICsgKi8NCj4gK2ludA0KPiAr cnRlX3JlZ2V4X2Rldl94c3RhdHNfbmFtZXNfZ2V0KHVpbnQ4X3QgZGV2X2lkLA0KPiArCQkJICAg ICAgIHN0cnVjdCBydGVfcmVnZXhfZGV2X3hzdGF0c19tYXAgKnhzdGF0c19tYXApOw0KPiArDQo+ ICsvKioNCj4gKyAqIFJldHJpZXZlIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2YgYW4gcmVnZXggZGV2 aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIGlkZW50aWZpZXIg b2YgdGhlIGRldmljZS4NCj4gKyAqIEBwYXJhbSBpZHMNCj4gKyAqICAgVGhlIGlkIG51bWJlcnMg b2YgdGhlIHN0YXRzIHRvIGdldC4gVGhlIGlkcyBjYW4gYmUgZ290IGZyb20gdGhlIHN0YXQNCj4g KyAqICAgcG9zaXRpb24gaW4gdGhlIHN0YXQgbGlzdCBmcm9tIHJ0ZV9yZWdleF9kZXZfeHN0YXRz X25hbWVzX2dldCgpLCBvcg0KPiArICogICBieSB1c2luZyBydGVfcmVnZXhfZGV2X3hzdGF0c19i eV9uYW1lX2dldCgpLg0KPiArICogQHBhcmFtW291dF0gdmFsdWVzDQo+ICsgKiAgIFRoZSB2YWx1 ZXMgZm9yIGVhY2ggc3RhdHMgcmVxdWVzdCBieSBJRC4NCj4gKyAqIEBwYXJhbSBuDQo+ICsgKiAg IFRoZSBudW1iZXIgb2Ygc3RhdHMgcmVxdWVzdGVkDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0g cG9zaXRpdmUgdmFsdWU6IG51bWJlciBvZiBzdGF0IGVudHJpZXMgZmlsbGVkIGludG8gdGhlIHZh bHVlcyBhcnJheQ0KPiArICogICAtIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yOg0KPiArICogICAg ICAtRU5PREVWIGZvciBpbnZhbGlkICpkZXZfaWQqDQo+ICsgKiAgICAgIC1FTk9UU1VQIGlmIHRo ZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoaXMgZnVuY3Rpb24uDQo+ICsgKi8NCj4gK2ludA0K PiArcnRlX3JlZ2V4X2Rldl94c3RhdHNfZ2V0KHVpbnQ4X3QgZGV2X2lkLCBjb25zdCB1aW50MTZf dCBpZHNbXSwNCj4gKwkJCSB1aW50NjRfdCB2YWx1ZXNbXSwgdWludDE2X3Qgbik7DQo+ICsNCj4g Ky8qKg0KPiArICogUmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgc2luZ2xlIHN0YXQgYnkgcmVxdWVz dGluZyBpdCBieSBuYW1lLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhl IGlkZW50aWZpZXIgb2YgdGhlIGRldmljZQ0KPiArICogQHBhcmFtIG5hbWUNCj4gKyAqICAgVGhl IHN0YXQgbmFtZSB0byByZXRyaWV2ZQ0KPiArICogQHBhcmFtW291dF0gaWQNCj4gKyAqICAgSWYg bm9uLU5VTEwsIHRoZSBudW1lcmljYWwgaWQgb2YgdGhlIHN0YXQgd2lsbCBiZSByZXR1cm5lZCwg c28gdGhhdCBmdXJ0aGVyDQo+ICsgKiAgIHJlcXVlc3RzIGZvciB0aGUgc3RhdCBjYW4gYmUgZ290 IHVzaW5nIHJ0ZV9yZWdleF9kZXZfeHN0YXRzX2dldCwgd2hpY2gNCj4gd2lsbA0KPiArICogICBi ZSBmYXN0ZXIgYXMgaXQgZG9lc24ndCBuZWVkIHRvIHNjYW4gYSBsaXN0IG9mIG5hbWVzIGZvciB0 aGUgc3RhdC4NCj4gKyAqIEBwYXJhbVtvdXRdIHZhbHVlDQo+ICsgKiAgIE11c3QgYmUgbm9uLU5V TEwsIHJldHJpZXZlZCB4c3RhdCB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGlzIGFkZHJlc3Mu DQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3NmdWxseSByZXRyaWV2 ZWQgeHN0YXQgdmFsdWUuDQo+ICsgKiAgIC0gLUVJTlZBTDogaW52YWxpZCBwYXJhbWV0ZXJzDQo+ ICsgKiAgIC0gLUVOT1RTVVA6IGlmIG5vdCBzdXBwb3J0ZWQuDQo+ICsgKi8NCj4gK2ludA0KPiAr cnRlX3JlZ2V4X2Rldl94c3RhdHNfYnlfbmFtZV9nZXQodWludDhfdCBkZXZfaWQsIGNvbnN0IGNo YXIgKm5hbWUsDQo+ICsJCQkJIHVpbnQxNl90ICppZCwgdWludDY0X3QgKnZhbHVlKTsNCj4gKw0K PiArLyoqDQo+ICsgKiBSZXNldCB0aGUgdmFsdWVzIG9mIHRoZSB4c3RhdHMgb2YgdGhlIHNlbGVj dGVkIGNvbXBvbmVudCBpbiB0aGUgZGV2aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQN Cj4gKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZQ0KPiArICogQHBhcmFtIGlkcw0K PiArICogICBTZWxlY3RzIHNwZWNpZmljIHN0YXRpc3RpY3MgdG8gYmUgcmVzZXQuIFdoZW4gTlVM TCwgYWxsIHN0YXRpc3RpY3Mgd2lsbCBiZQ0KPiArICogICByZXNldC4gSWYgbm9uLU5VTEwsIG11 c3QgcG9pbnQgdG8gYXJyYXkgb2YgYXQgbGVhc3QgKm5iX2lkcyogc2l6ZS4NCj4gKyAqIEBwYXJh bSBuYl9pZHMNCj4gKyAqICAgVGhlIG51bWJlciBvZiBpZHMgYXZhaWxhYmxlIGZyb20gdGhlICpp ZHMqIGFycmF5LiBJZ25vcmVkIHdoZW4gaWRzIGlzDQo+IE5VTEwuDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IHJlc2V0IHRoZSBzdGF0aXN0aWNzIHRvIHplcm8uDQo+ ICsgKiAgIC0gLUVJTlZBTDogaW52YWxpZCBwYXJhbWV0ZXJzDQo+ICsgKiAgIC0gLUVOT1RTVVA6 IGlmIG5vdCBzdXBwb3J0ZWQuDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X2Rldl94c3Rh dHNfcmVzZXQodWludDhfdCBkZXZfaWQsIGNvbnN0IHVpbnQxNl90IGlkc1tdLA0KPiArCQkJICAg dWludDE2X3QgbmJfaWRzKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBUcmlnZ2VyIHRoZSBSZWdFeCBk ZXZpY2Ugc2VsZiB0ZXN0Lg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhl IGlkZW50aWZpZXIgb2YgdGhlIGRldmljZQ0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFNl bGZ0ZXN0IHN1Y2Nlc3NmdWwNCj4gKyAqICAgLSAtRU5PVFNVUCBpZiB0aGUgZGV2aWNlIGRvZXNu J3Qgc3VwcG9ydCBzZWxmdGVzdA0KPiArICogICAtIG90aGVyIHZhbHVlcyA8IDAgb24gZmFpbHVy ZS4NCj4gKyAqLw0KPiAraW50IHJ0ZV9yZWdleF9kZXZfc2VsZnRlc3QodWludDhfdCBkZXZfaWQp Ow0KPiArDQo+ICsvKioNCj4gKyAqIER1bXAgaW50ZXJuYWwgaW5mb3JtYXRpb24gYWJvdXQgKmRl dl9pZCogdG8gdGhlIEZJTEUqIHByb3ZpZGVkIGluICpmKi4NCj4gKyAqDQo+ICsgKiBAcGFyYW0g ZGV2X2lkDQo+ICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UuDQo+ICsgKg0KPiAr ICogQHBhcmFtIGYNCj4gKyAqICAgQSBwb2ludGVyIHRvIGEgZmlsZSBmb3Igb3V0cHV0DQo+ICsg Kg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IG9uIHN1Y2Nlc3MNCj4gKyAqICAgLSA8MDog b24gZmFpbHVyZS4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2R1bXAodWludDhf dCBkZXZfaWQsIEZJTEUgKmYpOw0KPiArDQo+ICsvKiBGYXN0IHBhdGggQVBJcyAqLw0KPiArDQo+ ICsvKioNCj4gKyAqIFRoZSBnZW5lcmljICpydGVfcmVnZXhfbWF0Y2gqIHN0cnVjdHVyZSB0byBo b2xkIHRoZSBSZWdFeCBtYXRjaA0KPiBhdHRyaWJ1dGVzLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRl X3JlZ2V4X29wczo6bWF0Y2hlcw0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX3JlZ2V4X21hdGNoIHsN Cj4gKwlSVEVfU1REX0MxMQ0KPiArCXVuaW9uIHsNCj4gKwkJdWludDY0X3QgdTY0Ow0KPiArCQlz dHJ1Y3Qgew0KPiArCQkJdWludDMyX3QgcnVsZV9pZDoyMDsNCj4gKwkJCS8qKjwgUnVsZSBpZGVu dGlmaWVyIHRvIHdoaWNoIHRoZSBwYXR0ZXJuIG1hdGNoZWQuDQo+ICsJCQkgKiBAc2VlIHN0cnVj dCBydGVfcmVnZXhfcnVsZTo6cnVsZV9pZA0KPiArCQkJICovDQo+ICsJCQl1aW50MzJfdCBncm91 cF9pZDoxMjsNCj4gKwkJCS8qKjwgR3JvdXAgaWRlbnRpZmllciBvZiB0aGUgcnVsZSB3aGljaCB0 aGUgcGF0dGVybg0KPiArCQkJICogbWF0Y2hlZC4gQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGU6 Omdyb3VwX2lkDQo+ICsJCQkgKi8NCj4gKwkJCXVpbnQxNl90IG9mZnNldDsNCj4gKwkJCS8qKjwg U3RhcnRpbmcgQnl0ZSBQb3NpdGlvbiBmb3IgbWF0Y2hlZCBydWxlLiAqLw0KPiArCQkJdWludDE2 X3QgbGVuOw0KPiArCQkJLyoqPCBMZW5ndGggb2YgbWF0Y2ggaW4gYnl0ZXMgKi8NCj4gKwkJfTsN Cj4gKwl9Ow0KPiArfTsNCj4gKw0KPiArLyogRW51bWVyYXRlcyBSZWdFeCByZXF1ZXN0IGZsYWdz LiAqLw0KPiArI2RlZmluZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDFfVkFMSURfRiAoMSA8 PCAwKQ0KPiArLyoqPCBTZXQgd2hlbiBzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGU6Omdyb3VwX2lkMSB2 YWxpZCAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9PUFNfUkVRX0dST1VQX0lEMl9WQUxJ RF9GICgxIDw8IDEpDQo+ICsvKio8IFNldCB3aGVuIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6Z3Jv dXBfaWQyIHZhbGlkICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBf SUQzX1ZBTElEX0YgKDEgPDwgMikNCj4gKy8qKjwgU2V0IHdoZW4gc3RydWN0IHJ0ZV9yZWdleF9y dWxlOjpncm91cF9pZDMgdmFsaWQgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfT1BTX1JF UV9TVE9QX09OX01BVENIX0YgKDEgPDwgNCkNCj4gKy8qKjwgVGhlIFJlZ0V4IGVuZ2luZSB3aWxs IHN0b3Agc2Nhbm5pbmcgYW5kIHJldHVybiB0aGUgZmlyc3QgbWF0Y2guICovDQo+ICsNCj4gKyNk ZWZpbmUgUlRFX1JFR0VYX09QU19SRVFfTUFUQ0hfSElHSF9QUklPUklUWV9GICgxIDw8IDUpDQo+ ICsvKio8IEluIEhpZ2ggUHJpb3JpdHkgbW9kZSBhIG1heGltdW0gb2Ygb25lIG1hdGNoIHdpbGwg YmUgcmV0dXJuZWQgcGVyDQo+IHNjYW4gdG8NCj4gKyAqIHJlZHVjZSB0aGUgcG9zdC1wcm9jZXNz aW5nIHJlcXVpcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gVGhlIG1hdGNoIHdpdGgNCj4gdGhlDQo+ ICsgKiBsb3dlc3QgUnVsZSBpZCwgbG93ZXN0IHN0YXJ0IHBvaW50ZXIgYW5kIGxvd2VzdCBtYXRj aCBsZW5ndGggd2lsbCBiZQ0KPiArICogcmV0dXJuZWQuDQo+ICsgKg0KPiArICogQHNlZSBzdHJ1 Y3QgcnRlX3JlZ2V4X29wczo6bmJfYWN0dWFsX21hdGNoZXMNCj4gKyAqIEBzZWUgc3RydWN0IHJ0 ZV9yZWdleF9vcHM6Om5iX21hdGNoZXMNCj4gKyAqLw0KPiArDQo+ICsNCj4gKy8qIEVudW1lcmF0 ZXMgUmVnRXggcmVzcG9uc2UgZmxhZ3MuICovDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9PUFNfUlNQ X1BNSV9TT0pfRiAoMSA8PCAwKQ0KPiArLyoqPCBJbmRpY2F0ZXMgdGhhdCB0aGUgUmVnRXggZGV2 aWNlIGhhcyBlbmNvdW50ZXJlZCBhIHBhcnRpYWwgbWF0Y2ggYXQgdGhlDQo+ICsgKiBzdGFydCBv ZiBzY2FuIGluIHRoZSBnaXZlbiBidWZmZXIuDQo+ICsgKg0KPiArICogQHNlZSBSVEVfUkVHRVhf REVWX0NGR19DUk9TU19CVUZGRVJfU0NBTl9GDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVf UkVHRVhfT1BTX1JTUF9QTUlfRU9KX0YgKDEgPDwgMSkNCj4gKy8qKjwgSW5kaWNhdGVzIHRoYXQg dGhlIFJlZ0V4IGRldmljZSBoYXMgZW5jb3VudGVyZWQgYSBwYXJ0aWFsIG1hdGNoIGF0IHRoZQ0K PiArICogZW5kIG9mIHNjYW4gaW4gdGhlIGdpdmVuIGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBAc2Vl IFJURV9SRUdFWF9ERVZfQ0ZHX0NST1NTX0JVRkZFUl9TQ0FOX0YNCj4gKyAqLw0KPiArDQo+ICsj ZGVmaW5lIFJURV9SRUdFWF9PUFNfUlNQX01BWF9TQ0FOX1RJTUVPVVRfRiAoMSA8PCAyKQ0KPiAr LyoqPCBJbmRpY2F0ZXMgdGhhdCB0aGUgUmVnRXggZGV2aWNlIGhhcyBleGNlZWRlZCB0aGUgbWF4 IHRpbWVvdXQgd2hpbGUNCj4gKyAqIHNjYW5uaW5nIHRoZSBnaXZlbiBidWZmZXIuDQo+ICsgKg0K PiArICogQHNlZSBSVEVfUkVHRVhfREVWX0FUVFJfTUFYX1NDQU5fVElNRU9VVA0KPiArICovDQo+ ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX09QU19SU1BfTUFYX01BVENIX0YgKDEgPDwgMykNCj4g Ky8qKjwgSW5kaWNhdGVzIHRoYXQgdGhlIFJlZ0V4IGRldmljZSBoYXMgZXhjZWVkZWQgdGhlIG1h eCBtYXRjaGVzIHdoaWxlDQo+ICsgKiBzY2FubmluZyB0aGUgZ2l2ZW4gYnVmZmVyLg0KPiArICoN Cj4gKyAqIEBzZWUgUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9NQVRDSEVTDQo+ICsgKi8NCj4gKw0K PiArI2RlZmluZSBSVEVfUkVHRVhfT1BTX1JTUF9NQVhfUFJFRklYX0YgKDEgPDwgNCkNCj4gKy8q KjwgSW5kaWNhdGVzIHRoYXQgdGhlIFJlZ0V4IGRldmljZSBoYXMgcmVhY2hlZCB0aGUgbWF4IGFs bG93ZWQgcHJlZml4DQo+IGxlbmd0aA0KPiArICogd2hpbGUgc2Nhbm5pbmcgdGhlIGdpdmVuIGJ1 ZmZlci4NCj4gKyAqDQo+ICsgKiBAc2VlIFJURV9SRUdFWF9ERVZfQVRUUl9NQVhfUFJFRklYDQo+ ICsgKi8NCj4gKw0KPiArLyoqDQo+ICsgKiBUaGUgZ2VuZXJpYyAqcnRlX3JlZ2V4X29wcyogc3Ry dWN0dXJlIHRvIGhvbGQgdGhlIFJlZ0V4IGF0dHJpYnV0ZXMNCj4gKyAqIGZvciBlbnF1ZXVlIGFu ZCBkZXF1ZXVlIG9wZXJhdGlvbi4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9yZWdleF9vcHMgew0K PiArCS8qIFcwICovDQo+ICsJdWludDE2X3QgcmVxX2ZsYWdzOw0KPiArCS8qKjwgUmVxdWVzdCBm bGFncyBmb3IgdGhlIFJlZ0V4IG9wcy4NCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9PUFNfUkVRXyoN Cj4gKwkgKi8NCj4gKwl1aW50MTZfdCBzY2FuX3NpemU7DQo+ICsJLyoqPCBTY2FuIHNpemUgb2Yg dGhlIGJ1ZmZlciB0byBiZSBzY2FubmVkIGluIGJ5dGVzLiAqLw0KPiArCXVpbnQxNl90IHJzcF9m bGFnczsNCj4gKwkvKio8IFJlc3BvbnNlIGZsYWdzIGZvciB0aGUgUmVnRXggb3BzLg0KPiArCSAq IEBzZWUgUlRFX1JFR0VYX09QU19SU1BfKg0KPiArCSAqLw0KPiArCXVpbnQ4X3QgbmJfYWN0dWFs X21hdGNoZXM7DQo+ICsJLyoqPCBUaGUgdG90YWwgbnVtYmVyIG9mIGFjdHVhbCBtYXRjaGVzIGRl dGVjdGVkIGJ5IHRoZSBSZWdleA0KPiBkZXZpY2UuKi8NCj4gKwl1aW50OF90IG5iX21hdGNoZXM7 DQo+ICsJLyoqPCBUaGUgdG90YWwgbnVtYmVyIG9mIG1hdGNoZXMgcmV0dXJuZWQgYnkgdGhlIFJl Z0V4IGRldmljZSBmb3INCj4gdGhpcw0KPiArCSAqIHNjYW4uIFRoZSBzaXplIG9mICpydGVfcmVn ZXhfb3BzOjptYXRjaGVzKiB6ZXJvIGxlbmd0aCBhcnJheSB3aWxsDQo+IGJlDQo+ICsJICogdGhp cyB2YWx1ZS4NCj4gKwkgKg0KPiArCSAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9vcHM6Om1hdGNo ZXMsIHN0cnVjdCBydGVfcmVnZXhfbWF0Y2gNCj4gKwkgKi8NCj4gKw0KPiArCS8qIFcxICovDQo+ ICsJUlRFX1NURF9DMTENCj4gKwl1bmlvbiB7DQo+ICsJCXVpbnQ2NF90IHU2NDsNCj4gKwkJLyoq PCAgQWxsb3cgOC1ieXRlIHJlc2VydmVkIG9uIDMyLWJpdCBzeXN0ZW0gKi8NCj4gKwkJdm9pZCAq YnVmX2FkZHI7DQo+ICsJCS8qKjwgVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHRvIGJl IG1hdGNoZWQuICovDQo+ICsJfTsNCj4gKw0KPiArCS8qIFcyICovDQo+ICsJcnRlX2lvdmFfdCBi dWZfaW92YTsNCj4gKwkvKio8IElPVkEgYWRkcmVzcyBvZiB0aGUgcGF0dGVybiB0byBiZSBtYXRj aGVkLiAqLw0KPiArDQo+ICsJLyogVzMgKi8NCj4gKwl1aW50MTZfdCBncm91cF9pZDA7DQo+ICsJ LyoqPCBGaXJzdCBncm91cF9pZCB0byBtYXRjaCB0aGUgcnVsZSBhZ2FpbnN0LiBNaW5pbXVtIG9u ZSBncm91cCBpZA0KPiArCSAqIG11c3QgYmUgcHJvdmlkZWQgYnkgYXBwbGljYXRpb24uDQo+ICsJ ICogV2hlbiBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDFfVkFMSURfRiBzZXQgdGhlbg0KPiBn cm91cF9pZDENCj4gKwkgKiBpcyB2YWxpZCwgcmVzcGVjdGl2ZWx5IHNpbWlsYXIgZmxhZ3MgZm9y IGdyb3VwX2lkMiBhbmQgZ3JvdXBfaWQzLg0KPiArCSAqIFVwb24gdGhlIG1hdGNoLCBzdHJ1Y3Qg cnRlX3JlZ2V4X21hdGNoOjpncm91cF9pZCBzaGFsbCBiZQ0KPiB1cGRhdGVkDQo+ICsJICogd2l0 aCBtYXRjaGluZyBncm91cCBJRCBieSB0aGUgZGV2aWNlLiBHcm91cCBJRCBzY2hlbWUgcHJvdmlk ZXMNCj4gKwkgKiBydWxlIGlzb2xhdGlvbiBhbmQgZWZmZWN0aXZlIHBhdHRlcm4gbWF0Y2hpbmcu DQo+ICsJICovDQo+ICsJdWludDE2X3QgZ3JvdXBfaWQxOw0KPiArCS8qKjwgU2Vjb25kIGdyb3Vw X2lkIHRvIG1hdGNoIHRoZSBydWxlIGFnYWluc3QuDQo+ICsJICoNCj4gKwkgKiBAc2VlIFJURV9S RUdFWF9PUFNfUkVRX0dST1VQX0lEMV9WQUxJRF9GDQo+ICsJICovDQo+ICsJdWludDE2X3QgZ3Jv dXBfaWQyOw0KPiArCS8qKjwgVGhpcmQgZ3JvdXBfaWQgdG8gbWF0Y2ggdGhlIHJ1bGUgYWdhaW5z dC4NCj4gKwkgKg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBfSUQyX1ZBTElE X0YNCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBncm91cF9pZDM7DQo+ICsJLyoqPCBGb3J0aCBncm91 cF9pZCB0byBtYXRjaCB0aGUgcnVsZSBhZ2FpbnN0Lg0KPiArCSAqDQo+ICsJICogQHNlZSBSVEVf UkVHRVhfT1BTX1JFUV9HUk9VUF9JRDNfVkFMSURfRg0KPiArCSAqLw0KPiArDQo+ICsJLyogVzQg Ki8NCj4gKwlSVEVfU1REX0MxMQ0KPiArCXVuaW9uIHsNCj4gKwkJdWludDY0X3QgdXNlcl9pZDsN Cj4gKwkJLyoqPCBBcHBsaWNhdGlvbiBzcGVjaWZpYyBvcGFxdWUgdmFsdWUuIEFuIGFwcGxpY2F0 aW9uIG1heQ0KPiB1c2UNCj4gKwkJICogdGhpcyBmaWVsZCB0byBob2xkIGFwcGxpY2F0aW9uIHNw ZWNpZmljIHZhbHVlIHRvIHNoYXJlDQo+ICsJCSAqIGJldHdlZW4gZGVxdWV1ZSBhbmQgZW5xdWV1 ZSBvcGVyYXRpb24uDQo+ICsJCSAqIEltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgbW9kaWZ5IHRo aXMgZmllbGQuDQo+ICsJCSAqLw0KPiArCQl2b2lkICp1c2VyX3B0cjsNCj4gKwkJLyoqPCBQb2lu dGVyIHJlcHJlc2VudGF0aW9uIG9mICp1c2VyX2lkKiAqLw0KPiArCX07DQo+ICsNCj4gKwkvKiBX NSAqLw0KPiArCXN0cnVjdCBydGVfcmVnZXhfbWF0Y2ggbWF0Y2hlc1tdOw0KPiArCS8qKjwgWmVy byBsZW5ndGggYXJyYXkgdG8gaG9sZCB0aGUgbWF0Y2ggdHVwbGVzLg0KPiArCSAqIFRoZSBzdHJ1 Y3QgcnRlX3JlZ2V4X29wczo6bmJfbWF0Y2hlcyB2YWx1ZSBob2xkcyB0aGUgbnVtYmVyIG9mDQo+ ICsJICogZWxlbWVudHMgaW4gdGhpcyBhcnJheS4NCj4gKwkgKg0KPiArCSAqIEBzZWUgc3RydWN0 IHJ0ZV9yZWdleF9vcHM6Om5iX21hdGNoZXMNCj4gKwkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0K PiArICogRW5xdWV1ZSBhIGJ1cnN0IG9mIHNjYW4gcmVxdWVzdCBvbiBhIFJlZ0V4IGRldmljZS4N Cj4gKyAqDQo+ICsgKiBUaGUgcnRlX3JlZ2V4X2VucXVldWVfYnVyc3QoKSBmdW5jdGlvbiBpcyBp bnZva2VkIHRvIHBsYWNlDQo+ICsgKiByZWdleCBvcGVyYXRpb25zIG9uIHRoZSBxdWV1ZSAqcXBf aWQqIG9mIHRoZSBkZXZpY2UgZGVzaWduYXRlZCBieQ0KPiArICogaXRzICpkZXZfaWQqLg0KPiAr ICoNCj4gKyAqIFRoZSAqbmJfb3BzKiBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBvcGVyYXRp b25zIHRvIHByb2Nlc3Mgd2hpY2gNCj4gYXJlDQo+ICsgKiBzdXBwbGllZCBpbiB0aGUgKm9wcyog YXJyYXkgb2YgKnJ0ZV9yZWdleF9vcCogc3RydWN0dXJlcy4NCj4gKyAqDQo+ICsgKiBUaGUgcnRl X3JlZ2V4X2VucXVldWVfYnVyc3QoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YNCj4g KyAqIG9wZXJhdGlvbnMgaXQgYWN0dWFsbHkgZW5xdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIEEgcmV0 dXJuIHZhbHVlIGVxdWFsIHRvDQo+ICsgKiAqbmJfb3BzKiBtZWFucyB0aGF0IGFsbCBwYWNrZXRz IGhhdmUgYmVlbiBlbnF1ZXVlZC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkDQo+ICsgKiAg IFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UuDQo+ICsgKiBAcGFyYW0gcXBfaWQNCj4gKyAq ICAgVGhlIGluZGV4IG9mIHRoZSBxdWV1ZSBwYWlyIHdoaWNoIHBhY2tldHMgYXJlIHRvIGJlIGVu cXVldWVkIGZvcg0KPiArICogICBwcm9jZXNzaW5nLiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUg cmFuZ2UgWzAsIG5iX3F1ZXVlX3BhaXJzIC0gMV0NCj4gKyAqICAgcHJldmlvdXNseSBzdXBwbGll ZCB0byBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpLg0KPiArICogQHBhcmFtIG9wcw0KPiArICog ICBUaGUgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiAqbmJfb3BzKiBwb2ludGVycyB0byAqcnRlX3Jl Z2V4X29wKg0KPiBzdHJ1Y3R1cmVzDQo+ICsgKiAgIHdoaWNoIGNvbnRhaW4gdGhlIHJlZ2V4IG9w ZXJhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkLg0KPiArICogQHBhcmFtIG5iX29wcw0KPiArICogICBU aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8gcHJvY2Vzcy4NCj4gKyAqDQo+ICsgKiBAcmV0dXJu DQo+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhY3R1YWxseSBlbnF1ZXVlZCBvbiB0 aGUgcmVnZXggZGV2aWNlLiBUaGUNCj4gcmV0dXJuDQo+ICsgKiAgIHZhbHVlIGNhbiBiZSBsZXNz IHRoYW4gdGhlIHZhbHVlIG9mIHRoZSAqbmJfb3BzKiBwYXJhbWV0ZXIgd2hlbiB0aGUNCj4gKyAq ICAgcmVnZXggZGV2aWNlcyBxdWV1ZSBpcyBmdWxsIG9yIGlmIGludmFsaWQgcGFyYW1ldGVycyBh cmUgc3BlY2lmaWVkIGluDQo+ICsgKiAgIGEgKnJ0ZV9yZWdleF9vcCouIElmIHRoZSByZXR1cm4g dmFsdWUgaXMgbGVzcyB0aGFuICpuYl9vcHMqLCB0aGUNCj4gcmVtYWluaW5nDQo+ICsgKiAgIG9w cyBhdCB0aGUgZW5kIG9mICpvcHMqIGFyZSBub3QgY29uc3VtZWQgYW5kIHRoZSBjYWxsZXIgaGFz IHRvIHRha2UNCj4gY2FyZQ0KPiArICogICBvZiB0aGVtLg0KPiArICovDQo+ICt1aW50MTZfdA0K PiArcnRlX3JlZ2V4X2VucXVldWVfYnVyc3QodWludDhfdCBkZXZfaWQsIHVpbnQxNl90IHFwX2lk LA0KPiArCQkJc3RydWN0IHJ0ZV9yZWdleF9vcHMgKipvcHMsIHVpbnQxNl90IG5iX29wcyk7DQo+ ICsNCj4gKy8qKg0KPiArICoNCj4gKyAqIERlcXVldWUgYSBidXJzdCBvZiBzY2FuIHJlc3BvbnNl IGZyb20gYSBxdWV1ZSBvbiB0aGUgUmVnRXggZGV2aWNlLg0KPiArICogVGhlIGRlcXVldWVkIG9w ZXJhdGlvbiBhcmUgc3RvcmVkIGluICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMNCj4gKyAqIHdo b3NlIHBvaW50ZXJzIGFyZSBzdXBwbGllZCBpbiB0aGUgKm9wcyogYXJyYXkuDQo+ICsgKg0KPiAr ICogVGhlIHJ0ZV9yZWdleF9kZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVt YmVyIG9mIG9wcw0KPiArICogYWN0dWFsbHkgZGVxdWV1ZWQsIHdoaWNoIGlzIHRoZSBudW1iZXIg b2YgKnJ0ZV9yZWdleF9vcCogZGF0YQ0KPiBzdHJ1Y3R1cmVzDQo+ICsgKiBlZmZlY3RpdmVseSBz dXBwbGllZCBpbnRvIHRoZSAqb3BzKiBhcnJheS4NCj4gKyAqDQo+ICsgKiBBIHJldHVybiB2YWx1 ZSBlcXVhbCB0byAqbmJfb3BzKiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVldWUgY29udGFpbmVkDQo+ ICsgKiBhdCBsZWFzdCAqbmJfb3BzKiBvcGVyYXRpb25zLCBhbmQgdGhpcyBpcyBsaWtlbHkgdG8g c2lnbmlmeSB0aGF0IG90aGVyDQo+ICsgKiBwcm9jZXNzZWQgb3BlcmF0aW9ucyByZW1haW4gaW4g dGhlIGRldmljZXMgb3V0cHV0IHF1ZXVlLiBBcHBsaWNhdGlvbnMNCj4gKyAqIGltcGxlbWVudGlu ZyBhICJyZXRyaWV2ZSBhcyBtYW55IHByb2Nlc3NlZCBvcGVyYXRpb25zIGFzIHBvc3NpYmxlIg0K PiBwb2xpY3kNCj4gKyAqIGNhbiBjaGVjayB0aGlzIHNwZWNpZmljIGNhc2UgYW5kIGtlZXAgaW52 b2tpbmcgdGhlDQo+ICsgKiBydGVfcmVnZXhfZGVxdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIHVudGls IGEgdmFsdWUgbGVzcyB0aGFuDQo+ICsgKiAqbmJfb3BzKiBpcyByZXR1cm5lZC4NCj4gKyAqDQo+ ICsgKiBUaGUgcnRlX3JlZ2V4X2RlcXVldWVfYnVyc3QoKSBmdW5jdGlvbiBkb2VzIG5vdCBwcm92 aWRlIGFueSBlcnJvcg0KPiArICogbm90aWZpY2F0aW9uIHRvIGF2b2lkIHRoZSBjb3JyZXNwb25k aW5nIG92ZXJoZWFkLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIFJl Z0V4IGRldmljZSBpZGVudGlmaWVyDQo+ICsgKiBAcGFyYW0gcXBfaWQNCj4gKyAqICAgVGhlIGlu ZGV4IG9mIHRoZSBxdWV1ZSBwYWlyIGZyb20gd2hpY2ggdG8gcmV0cmlldmUgcHJvY2Vzc2VkIHBh Y2tldHMuDQo+ICsgKiAgIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfcXVl dWVfcGFpcnMgLSAxXSBwcmV2aW91c2x5DQo+ICsgKiAgIHN1cHBsaWVkIHRvIHJ0ZV9yZWdleF9k ZXZfY29uZmlndXJlKCkuDQo+ICsgKiBAcGFyYW0gb3BzDQo+ICsgKiAgIFRoZSBhZGRyZXNzIG9m IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMgdGhhdA0K PiBtdXN0DQo+ICsgKiAgIGJlIGxhcmdlIGVub3VnaCB0byBzdG9yZSAqbmJfb3BzKiBwb2ludGVy cyBpbiBpdC4NCj4gKyAqIEBwYXJhbSBuYl9vcHMNCj4gKyAqICAgVGhlIG1heGltdW0gbnVtYmVy IG9mIG9wZXJhdGlvbnMgdG8gZGVxdWV1ZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAg IFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhY3R1YWxseSBkZXF1ZXVlZCwgd2hpY2ggaXMgdGhl IG51bWJlcg0KPiArICogICBvZiBwb2ludGVycyB0byAqcnRlX3JlZ2V4X29wKiBzdHJ1Y3R1cmVz IGVmZmVjdGl2ZWx5IHN1cHBsaWVkIHRvIHRoZQ0KPiArICogICAqb3BzKiBhcnJheS4gSWYgdGhl IHJldHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4gKm5iX29wcyosIHRoZSByZW1haW5pbmcNCj4gKyAq ICAgb3BzIGF0IHRoZSBlbmQgb2YgKm9wcyogYXJlIG5vdCBjb25zdW1lZCBhbmQgdGhlIGNhbGxl ciBoYXMgdG8gdGFrZQ0KPiBjYXJlDQo+ICsgKiAgIG9mIHRoZW0uDQo+ICsgKi8NCj4gK3VpbnQx Nl90DQo+ICtydGVfcmVnZXhfZGVxdWV1ZV9idXJzdCh1aW50OF90IGRldl9pZCwgdWludDE2X3Qg cXBfaWQsDQo+ICsJCQlzdHJ1Y3QgcnRlX3JlZ2V4X29wcyAqKm9wcywgdWludDE2X3QgbmJfb3Bz KTsNCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiAr I2VuZGlmIC8qIF9SVEVfUkVHRVhERVZfSF8gKi8NCj4gDQoNCg==