From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [Draft F] Xen on ARM vITS Handling Date: Thu, 11 Jun 2015 10:40:07 +0100 Message-ID: <1434015607.30003.137.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: manish.jaggi@caviumnetworks.com, Julien Grall , Stefano Stabellini , Vijay Kilari List-Id: xen-devel@lists.xenproject.org RHJhZnQgRiBmb2xsb3dzLiBBbHNvIGF0OgpodHRwOi8veGVuYml0cy54ZW4ub3JnL3Blb3BsZS9p YW5jL3ZpdHMvZHJhZnRGLntwZGYsaHRtbH0KCkhlcmUncyBhIHF1aWNrIHVwZGF0ZSBiYXNlZCBv biBmZWVkYmFjayBwcmlvciB0byBtZWV0aW5nIG9uICN4ZW5hcm0gYXQKMTI6MDBBTSBCU1QgLyA3 OjAwQU0gRURUIC8gNDozMFBNIElTVCAod2hpY2ggaXMgfjE6MjAgZnJvbSBub3cpCgpJYW4uCgol IFhlbiBvbiBBUk0gdklUUyBIYW5kbGluZwolIElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNp dHJpeC5jb20+CiUgRHJhZnQgRgoKIyBDaGFuZ2Vsb2cKCiMjIFNpbmNlIERyYWZ0IEUKCiogRGlz Y3Vzc2lvbiBvZiBgc3RydWN0IHBlbmRpbmdfaXJxYAoqIEZpeCBoYW5kbGluZyBvZiBlbmFibGUv ZGlzYWJsZSwgcmVxdWlyaW5nIHN3aXRjaGluZyBiYWNrIHRvIHRyYXBwaW5nCiAgdGhlIHZpcnR1 YWwgY2ZnIHRhYmxlIGFnYWluLiBnZXRfdmxwaV9jZmcgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKiBG aXggcDJtX2xvb2t1cCB0byBhbHNvIHVzZSBnZXRfcGFnZV9mcm9tX2dmbi4KCiMjIFNpbmNlIERy YWZ0IEQKCiogRml4ZWQgYXNzdW1wdGlvbnMgYWJvdXQgdkxQSS0+cExQSSBtYXBwaW5nLCB3aGlj aCBpcyBub3QKICBwb3NzaWJsZS4gVGhpcyBsZWFkIHRvIGNoYW5nZXMgdG8gdGhlIG1vZGVsIGZv ciBlbmFibGluZyBhbmQKICBkaXNhYmxpbmcgcExQSSBhbmQgdkxQSSBhbmQgdGhlIGhhbmRsaW5n IG9mIHRoZSB2aXJ0dWFsIExQSQogIGNvbmZpZ3VyYXRpb24gdGFibGUsIHJlc29sdmluZyBfVW5y ZXNvbHZlZCBJc3N1ZSAxXy4KKiBNYWRlIHRoZSBwTFBJIGFuZCB2TFBJIGludGVycnVwdCBwcmlv cml0aWVzIGV4cGxpY2l0LgoqIEF0dGVtcHRlZCB0byBjbGFyaWZ5IHRoZSB0cnVzdCBpc3N1ZXMg cmVnYXJkaW5nIGluLWd1ZXN0IGRhdGEKICBzdHJ1Y3R1cmVzLgoqIE1hbmRhdGUgYSBwYXJ0aWN1 bGFyIGNhY2hlYWJpbGl0eSBmb3IgdGFibGVzIGluIGd1ZXN0IG1lbW9yeS4KCiMjIFNpbmNlIERy YWZ0IEMKCiogX01ham9yXyByZXdvcmssIGluIGFuIGF0dGVtcHQgdG8gc2ltcGxpZnkgZXZlcnl0 aGluZyBpbnRvIHNvbWV0aGluZwogIG1vcmUgbGlrZWx5IHRvIGJlIGFjaGlldmFibGUgZm9yIDQu Ni4KICAgICogTWFkZSBzb21lIHNpbXBsaWZ5aW5nIGFzc3VtcHRpb25zLgogICAgKiBSZWR1Y2Vk IHRoZSBzY29wZSBvZiBzb21lIHN1cHBvcnQuCiAgICAqIENvbW1hbmQgZW11bGF0aW9uIGlzIG5v dyBtb3N0bHkgdHJpdmlhbC4KICAgICogRXhwYW5kZWQgZGV0YWlsIG9uIGhvc3Qgc2V0dXAsIGFs bG93aW5nIG90aGVyIGFzc3VtcHRpb25zIHRvIGJlCiAgICAgIG1hZGUgZHVyaW5nIGVtdWxhdGlv bi4KKiBNYW55IG90aGVyIHRoaW5ncyBsb3N0IGluIHRoZSBub2lzZSBvZiB0aGUgYWJvdmUuCgoj IyBTaW5jZSBEcmFmdCBCCgoqIERldGFpbHMgb2YgY29tbWFuZCB0cmFuc2xhdGlvbiAodGhhbmtz IHRvIEp1bGllbiBhbmQgVmlqYXkpCiogQWRkZWQgYmFja2dyb3VuZCBvbiBMUEkgVHJhbnNsYXRp b24gYW5kIFBlbmRpbmcgdGFibGVzCiogQWRkZWQgYmFja2dyb3VuZCBvbiBDb2xsZWN0aW9ucwoq IFNldHRsZWQgb24gYE46TmAgc2NoZW1lIGZvciB2SVRTOnBhdCdzIG1hcHBpbmcuCiogUmVqaWdn ZWQgc2VjdGlvbiBuZXN0aW5nIGEgYml0LgoqIFNpbmNlIHdlIG5vdyB0aGluZyB0cmFuc2xhdGlv biBzaG91bGQgYmUgY2hlYXAsIHNldHRsZSBvbgogIHRyYW5zbGF0aW9uIGF0IHNjaGVkdWxpbmcg dGltZS4KKiBMYXp5IGBJTlZBTExgIGFuZCBgU1lOQ2AKCiMjIFNpbmNlIERyYWZ0IEEKCiogQWRk ZWQgZGlzY3Vzc2lvbiBvZiB3aGVuL3doZXJlIGNvbW1hbmQgdHJhbnNsYXRpb24gb2NjdXJzLgoq IENvbnRlbnRpb24gb24gc2NoZWR1bGVyIGxvY2ssIHN1Z2dlc3Rpb24gdG8gdXNlIFNPRlRJUlEu CiogSGFuZGxpbmcgb2YgZG9tYWluIHNodXRkb3duLgoqIE1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lv biBvZiBtdWx0aXBsZSB2cyBzaW5nbGUgdml0cyBwcm9zL2NvbnMuCgojIEludHJvZHVjdGlvbgoK QVJNIHN5c3RlbXMgY29udGFpbmluZyBhIEdJQyB2ZXJzaW9uIDMgb3IgbGF0ZXIgbWF5IGNvbnRh aW4gb25lIG9yCm1vcmUgSVRTIGxvZ2ljYWwgYmxvY2tzLiBBbiBJVFMgaXMgdXNlZCB0byByb3V0 ZSBNZXNzYWdlIFNpZ25hbGxlZAppbnRlcnJ1cHRzIGZyb20gZGV2aWNlcyBpbnRvIGFuIExQSSBp bmplY3Rpb24gb24gdGhlIHByb2Nlc3Nvci4KClRoZSBmb2xsb3dpbmcgc3VtbWFyaXNlcyB0aGUg SVRTIGhhcmR3YXJlIGRlc2lnbiBhbmQgc2VydmVzIGFzIGEgc2V0Cm9mIGFzc3VtcHRpb25zIGZv ciB0aGUgdklUUyBzb2Z0d2FyZSBkZXNpZ24uIEZvciBmdWxsIGRldGFpbHMgb2YgdGhlCklUUyBz ZWUgdGhlICJHSUMgQXJjaGl0ZWN0dXJlIFNwZWNpZmljYXRpb24iLgoKIyMgTG9jYWxpdHktc3Bl Y2lmaWMgUGVyaXBoZXJhbCBJbnRlcnJ1cHRzIChgTFBJYCkKClRoaXMgaXMgYSBuZXcgY2xhc3Mg b2YgbWVzc2FnZSBzaWduYWxsZWQgaW50ZXJydXB0cyBpbnRyb2R1Y2VkIGluCkdJQ3YzLiBUaGV5 IG9jY3VweSB0aGUgaW50ZXJydXB0IElEIHNwYWNlIGZyb20gYDgxOTIuLigyXjMyKS0xYC4KClRo ZSBudW1iZXIgb2YgTFBJcyBzdXBwb3J0IGJ5IGFuIElUUyBpcyBleHBvc2VkIHZpYQpgR0lUU19U WVBFUi5JRGJpdHNgIChhcyBudW1iZXIgb2YgYml0cyAtIDEpLCBpdCBtYXkgYmUgdXAgdG8KMl4z Mi4gX05vdGVfOiBUaGlzIGZpZWxkIGFsc28gY29udGFpbnMgdGhlIG51bWJlciBvZiBFdmVudCBJ RHMKc3VwcG9ydGVkIGJ5IHRoZSBJVFMuCgojIyMgTFBJIENvbmZpZ3VyYXRpb24gVGFibGUKCkVh Y2ggTFBJIGhhcyBhbiBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gYnl0ZSBpbiB0aGUgTFBJIENv bmZpZ3VyYXRpb24KVGFibGUgKG1hbmFnZWQgdmlhIHRoZSBHSUMgUmVkaXN0cmlidXRvciBhbmQg cGxhY2VkIGF0CmBHSUNSX1BST1BCQVNFUmAgb3IgYEdJQ1JfVlBST1BCQVNFUmApLiBUaGlzIGJ5 dGUgY29uZmlndXJlczoKCiogVGhlIExQSSdzIHByaW9yaXR5OwoqIFdoZXRoZXIgdGhlIExQSSBp cyBlbmFibGVkIG9yIGRpc2FibGVkLgoKU29mdHdhcmUgdXBkYXRlcyB0aGUgQ29uZmlndXJhdGlv biBUYWJsZSBkaXJlY3RseSBidXQgbXVzdCB0aGVuIGlzc3VlCmFuIGludmFsaWRhdGUgY29tbWFu ZCAocGVyLWRldmljZSBgSU5WYCBJVFMgY29tbWFuZCwgZ2xvYmFsIGBJTlZBTExgCklUUyBjb21t YW5kIG9yIHdyaXRlIGBHSUNSX0lOVkxQSVJgKSBmb3IgdGhlIGFmZmVjdCB0byBiZSBndWFyYW50 ZWVkCnRvIGJlY29tZSB2aXNpYmxlIChwb3NzaWJseSByZXF1aXJpbmcgYW4gSVRTIGBTWU5DYCBj b21tYW5kIHRvIGVuc3VyZQpjb21wbGV0aW9uIG9mIHRoZSBgSU5WYCBvciBgSU5WQUxMYCkuIE5v dGUgdGhhdCBpdCBpcyB2YWxpZCBmb3IgYW4KaW1wbGVtZW50YXRpb24gdG8gcmVyZWFkIHRoZSBj b25maWd1cmF0aW9uIHRhYmxlIGF0IGFueSB0aW1lIChJT1cgaXQKaXMgX25vdF8gZ3VhcmFudGVl ZCB0aGF0IGEgY2hhbmdlIHRvIHRoZSBMUEkgQ29uZmlndXJhdGlvbiBUYWJsZSB3b24ndApiZSB2 aXNpYmxlIHVudGlsIGFuIGludmFsaWRhdGUgaXMgaXNzdWVkKS4KCiMjIyBMUEkgUGVuZGluZyBU YWJsZQoKRWFjaCBMUEkgYWxzbyBoYXMgYW4gYXNzb2NpYXRlZCBiaXQgaW4gdGhlIExQSSBQZW5k aW5nIFRhYmxlIChtYW5hZ2VkCmJ5IHRoZSBHSUMgcmVkaXN0cmlidXRvcikuIFRoaXMgYml0IHNp Z25hbHMgd2hldGhlciB0aGUgTFBJIGlzIHBlbmRpbmcKb3Igbm90LgoKVGhpcyByZWdpb24gbWF5 IGNvbnRhaW4gb3V0IG9mIGRhdGUgaW5mb3JtYXRpb24gYW5kIHRoZSBtZWNoYW5pc20gdG8Kc3lu Y2hyb25pc2UgaXMgYElNUExFTUVOVEFUSU9OIERFRklORURgLgoKIyMgSW50ZXJydXB0IFRyYW5z bGF0aW9uIFNlcnZpY2UgKGBJVFNgKQoKIyMjIERldmljZSBJZGVudGlmaWVycwoKRWFjaCBkZXZp Y2UgdXNpbmcgdGhlIElUUyBpcyBhc3NvY2lhdGVkIHdpdGggYSB1bmlxdWUgIkRldmljZQpJZGVu dGlmaWVyIi4KClRoZSBkZXZpY2UgSURzIGFyZSBwcm9wZXJ0aWVzIG9mIHRoZSBpbXBsZW1lbnRh dGlvbiBhbmQgYXJlIHR5cGljYWxseQpkZXNjcmliZWQgdmlhIHN5c3RlbSBmaXJtd2FyZSwgZS5n LiB0aGUgQUNQSSBJT1JUIHRhYmxlIG9yIHZpYSBkZXZpY2UKdHJlZS4KClRoZSBudW1iZXIgb2Yg ZGV2aWNlIGlkcyBpbiBhIHN5c3RlbSBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQK Y2FuIGJlIGRpc2NvdmVyZWQgdmlhIGBHSVRTX1RZUEVSLkRldmJpdHNgLiBUaGlzIGZpZWxkIGFs bG93cyBhbiBJVFMKdG8gaGF2ZSB1cCB0byAyXjMyIGRldmljZXMuCgojIyMgRXZlbnRzCgpFYWNo IGRldmljZSBjYW4gZ2VuZXJhdGUgIkV2ZW50cyIgKGNhbGxlZCBgSURgIGluIHRoZSBzcGVjKSB0 aGVzZQpjb3JyZXNwb25kIHRvIHBvc3NpYmxlIGludGVycnVwdCBzb3VyY2VzIGluIHRoZSBkZXZp Y2UgKGUuZy4gTVNJCm9mZnNldCkuCgpUaGUgbWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0IHNv dXJjZXMgaXMgZGV2aWNlIHNwZWNpZmljLiBJdCBpcwp1c3VhbGx5IGRpc2NvdmVyZWQgZWl0aGVy IGZyb20gZmlybXdhcmUgdGFibGVzIChlLmcuIERUIG9yIEFDUEkpIG9yCmZyb20gYnVzIHNwZWNp ZmljIG1lY2hhbmlzbXMgKGUuZy4gUENJIGNvbmZpZyBzcGFjZSkuCgpUaGUgbWF4aW11bSBudW1i ZXIgb2YgZXZlbnRzIGlkcyBzdXBwb3J0IGJ5IGFuIElUUyBpcyBleHBvc2VkIHZpYQpgR0lUU19U WVBFUi5JRGJpdHNgIChhcyBudW1iZXIgb2YgYml0cyAtIDEpLCBpdCBtYXkgYmUgdXAgdG8KMl4z Mi4gX05vdGVfOiBUaGlzIGZpZWxkIGFsc28gY29udGFpbnMgdGhlIG51bWJlciBvZiBgTFBJc2Ag c3VwcG9ydGVkCmJ5IHRoZSBJVFMuCgojIyMgSW50ZXJydXB0IENvbGxlY3Rpb25zCgpFYWNoIGlu dGVycnVwdCBpcyBhIG1lbWJlciBvZiBhbiAiSW50ZXJydXB0IENvbGxlY3Rpb24iLiBUaGlzIGFs bG93cwpzb2Z0d2FyZSB0byBtYW5hZ2UgbGFyZ2UgbnVtYmVycyBvZiBwaHlzaWNhbCBpbnRlcnJ1 cHRzIHdpdGggYSBzbWFsbApudW1iZXIgb2YgY29tbWFuZHMgcmF0aGVyIHRoYW4gaXNzdWluZyBv bmUgY29tbWFuZCBwZXIgaW50ZXJydXB0LgoKT24gYSBzeXN0ZW0gd2l0aCBOIHByb2Nlc3NvcnMs IHRoZSBJVFMgbXVzdCBwcm92aWRlIGF0IGxlYXN0IE4rMQpjb2xsZWN0aW9ucy4KCkFuIElUUyBt YXkgc3VwcG9ydCBzb21lIG51bWJlciBvZiBpbnRlcm5hbCBjb2xsZWN0aW9ucyAoaW5kaWNhdGVk IGJ5CmBHSVRTX1RZUEVSLkhDQ2ApIGFuZCBleHRlcm5hbCBvbmVzIHdoaWNoIHJlcXVpcmUgbWVt b3J5IHByb3Zpc2lvbmVkCmJ5IHRoZSBPcGVyYXRpbmcgU3lzdGVtIHZpYSBhIGBHSVRTX0JBU0VS bmAgcmVnaXN0ZXIuCgojIyMgVGFyZ2V0IEFkZHJlc3NlcwoKVGhlIFRhcmdldCBBZGRyZXNzIGNv cnJlc3BvbmQgdG8gYSBzcGVjaWZpYyBHSUMgcmUtZGlzdHJpYnV0b3IuIFRoZQpmb3JtYXQgb2Yg dGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgYEdJVFNfVFlQRVIuUFRBYCBi aXQ6CgoqIDE6IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlLWRpc3RyaWJ1dG9yIHRhcmdldCBp cyB1c2VkCiogMDogYSB1bmlxdWUgcHJvY2Vzc29yIG51bWJlciBpcyB1c2VkLiBUaGUgbWFwcGlu ZyBiZXR3ZWVuIHRoZQogIHByb2Nlc3NvciBhZmZpbml0eSB2YWx1ZSAoYE1QSURSYCkgYW5kIHRo ZSBwcm9jZXNzb3IgbnVtYmVyIGlzCiAgZGlzY292ZXJhYmxlIHZpYSBgR0lDUl9UWVBFUi5Qcm9j ZXNzb3JOdW1iZXJgLgoKVGhpcyB2YWx1ZSBpcyB1cCB0byB0aGUgSVRTIGltcGxlbWVudGVyIChg R0lUU19UWVBFUmAgaXMgYSByZWFkLW9ubHkKcmVnaXN0ZXIpLgoKIyMjIERldmljZSBUYWJsZQoK QSBEZXZpY2UgVGFibGUgaXMgY29uZmlndXJlZCBpbiBlYWNoIElUUyB3aGljaCBtYXBzIGluY29t aW5nIGRldmljZQppZGVudGlmaWVycyBpbnRvIGFuIElUUyBJbnRlcnJ1cHQgVHJhbnNsYXRpb24g VGFibGUuCgojIyMgSW50ZXJydXB0IFRyYW5zbGF0aW9uIFRhYmxlIChgSVRUYCkgYW5kIENvbGxl Y3Rpb24gVGFibGUKCkFuIGBFdmVudGAgZ2VuZXJhdGVkIGJ5IGEgYERldmljZWAgaXMgdHJhbnNs YXRlZCBpbnRvIGFuIGBMUElgIHZpYSBhCnBlci1EZXZpY2UgSW50ZXJydXB0IFRyYW5zbGF0aW9u IFRhYmxlLiBUaGUgc3RydWN0dXJlIG9mIHRoaXMgdGFibGUgaXMKZGVzY3JpYmVkIGluIEdJQyBT cGVjIDQuOS4xMi4KClRoZSBJVFMgdHJhbnNsYXRpb24gdGFibGUgbWFwcyB0aGUgZGV2aWNlIGlk IG9mIHRoZSBvcmlnaW5hdGluZyBkZXZpY2UKaW50byBhIHBoeXNpY2FsIGludGVycnVwdCAoYExQ SWApIGFuZCBhbiBJbnRlcnJ1cHQgQ29sbGVjdGlvbi4KClRoZSBDb2xsZWN0aW9uIGlzIGluIHR1 cm4gbG9va2VkIHVwIGluIHRoZSBDb2xsZWN0aW9uIFRhYmxlIHRvIHByb2R1Y2UKYSBUYXJnZXQg QWRkcmVzcywgaW5kaWNhdGluZyBhIHJlZGlzdHJpYnV0b3IgKEFLQSBDUFUpIHRvIHdoaWNoIHRo ZQpMUEkgaXMgZGVsaXZlcmVkLgoKIyMjIE9TIFByb3Zpc2lvbmVkIE1lbW9yeSBSZWdpb25zCgpU aGUgSVRTIGhhcmR3YXJlIGRlc2lnbiBwcm92aWRlcyBtZWNoYW5pc21zIGZvciBhbiBJVFMgdG8g YmUgcHJvdmlkZWQKd2l0aCB2YXJpb3VzIGJsb2NrcyBvZiBtZW1vcnkgYnkgdGhlIE9TIGZvciBJ VFMgaW50ZXJuYWwgdXNlLCB0aGlzCmluY2x1ZGUgdGhlIHBlci1kZXZpY2UgSVRUIChlc3RhYmxp c2hlZCB3aXRoIGBNQVBEYCkgYW5kIG1lbW9yeQpyZWdpb25zIGZvciBEZXZpY2UgVGFibGVzLCBW aXJ0dWFsIFByb2Nlc3NvcnMgYW5kIEludGVycnVwdApDb2xsZWN0aW9ucy4gVXAgdG8gOCBzdWNo IHJlZ2lvbnMgY2FuIGJlIHJlcXVlc3RlZCBieSB0aGUgSVRTIGFuZApwcm92aXNpb25lZCBieSB0 aGUgT1MgdmlhIHRoZSBgR0lUU19CQVNFUm5gIHJlZ2lzdGVycy4KCiMjIyBJVFMgQ29uZmlndXJh dGlvbgoKVGhlIElUUyBpcyBjb25maWd1cmVkIGFuZCBtYW5hZ2VkLCBpbmNsdWRpbmcgZXN0YWJs aXNoaW5nIGFuZApjb25maWd1cmluZyB0aGUgVHJhbnNsYXRpb24gVGFibGVzIGFuZCBDb2xsZWN0 aW9uIFRhYmxlLCB2aWEgYW4gaW4KbWVtb3J5IHJpbmcgc2hhcmVkIGJldHdlZW4gdGhlIENQVSBh bmQgdGhlIElUUyBjb250cm9sbGVyLiBUaGUgcmluZyBpcwptYW5hZ2VkIHZpYSB0aGUgYEdJVFNf Q0JBU0VSYCByZWdpc3RlciBhbmQgaW5kZXhlZCBieSBgR0lUU19DV1JJVEVSYAphbmQgYEdJVFNf Q1JFQURSYCByZWdpc3RlcnMuCgpBIHByb2Nlc3NvciBhZGRzIGNvbW1hbmRzIHRvIHRoZSBzaGFy ZWQgcmluZyBhbmQgdGhlbiB1cGRhdGVzCmBHSVRTX0NXUklURVJgIHRvIG1ha2UgdGhlbSB2aXNp YmxlIHRvIHRoZSBJVFMgY29udHJvbGxlci4KClRoZSBJVFMgY29udHJvbGxlciBwcm9jZXNzZXMg Y29tbWFuZHMgZnJvbSB0aGUgcmluZyBhbmQgdGhlbiB1cGRhdGVzCmBHSVRTX0NSRUFEUmAgdG8g aW5kaWNhdGUgdGhlIHRoZSBwcm9jZXNzb3IgdGhhdCB0aGUgY29tbWFuZCBoYXMgYmVlbgpwcm9j ZXNzZWQuCgpDb21tYW5kcyBhcmUgcHJvY2Vzc2VkIHNlcXVlbnRpYWxseS4KCkNvbW1hbmRzIHNl bnQgb24gdGhlIHJpbmcgaW5jbHVkZSBvcGVyYXRpb25hbCBjb21tYW5kczoKCiogUm91dGluZyBp bnRlcnJ1cHRzIHRvIHByb2Nlc3NvcnM7CiogR2VuZXJhdGluZyBpbnRlcnJ1cHRzOwoqIENsZWFy aW5nIHRoZSBwZW5kaW5nIHN0YXRlIG9mIGludGVycnVwdHM7CiogU3luY2hyb25pc2luZyB0aGUg Y29tbWFuZCBxdWV1ZQoKYW5kIG1haW50ZW5hbmNlIGNvbW1hbmRzOgoKKiBNYXAgZGV2aWNlL2Nv bGxlY3Rpb24vcHJvY2Vzc29yOwoqIE1hcCB2aXJ0dWFsIGludGVycnVwdDsKKiBDbGVhbiBpbnRl cnJ1cHRzOwoqIERpc2NhcmQgaW50ZXJydXB0czsKClRoZSBmaWVsZCBgR0lUU19DQkFTRVIuU2l6 ZWAgZW5jb2RlcyB0aGUgbnVtYmVyIG9mIDRLQiBwYWdlcyBtaW51cyAwCmNvbnNpc3Rpbmcgb2Yg dGhlIGNvbW1hbmQgcXVldWUuIFRoaXMgZmllbGQgaXMgOCBiaXRzIHdoaWNoIG1lYW5zIHRoZQpt YXhpbXVtIHNpemUgaXMgMl44ICogNEtCID0gMU1CLiBHaXZlbiB0aGF0IGVhY2ggY29tbWFuZCBp cyAzMiBieXRlcywKdGhlcmUgaXMgYSBtYXhpbXVtIG9mIDMyNzY4IGNvbW1hbmRzIGluIHRoZSBx dWV1ZS4KClRoZSBJVFMgcHJvdmlkZXMgbm8gc3BlY2lmaWMgY29tcGxldGlvbiBub3RpZmljYXRp b24KbWVjaGFuaXNtLiBDb21wbGV0aW9uIGlzIG1vbml0b3JlZCBieSBhIGNvbWJpbmF0aW9uIG9m IGEgYFNZTkNgCmNvbW1hbmQgYW5kIGVpdGhlciBwb2xsaW5nIGBHSVRTX0NSRUFEUmAgb3Igbm90 aWZpY2F0aW9uIHZpYSBhbgppbnRlcnJ1cHQgZ2VuZXJhdGVkIHZpYSB0aGUgYElOVGAgY29tbWFu ZC4KCk5vdGUgdGhhdCB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gdmlhIGBJTlRgIHJlcXVpcmVz IGFuIG9yaWdpbmF0aW5nCmRldmljZSBJRCB0byBiZSBzdXBwbGllZCAod2hpY2ggaXMgdGhlbiB0 cmFuc2xhdGVkIHZpYSB0aGUgSVRTIGludG8gYW4KTFBJKS4gTm8gc3BlY2lmaWMgZGV2aWNlIElE IGlzIGRlZmluZWQgZm9yIHRoaXMgcHVycG9zZSBhbmQgc28gdGhlIE9TCnNvZnR3YXJlIGlzIGV4 cGVjdGVkIHRvIGZhYnJpY2F0ZSBvbmUuCgpQb3NzaWJsZSB3YXlzIG9mIGludmVudGluZyBzdWNo IGEgZGV2aWNlIElEIGFyZToKCiogRW51bWVyYXRlIGFsbCBkZXZpY2UgaWRzIGluIHRoZSBzeXN0 ZW0gYW5kIHBpY2sgYW5vdGhlciBvbmU7CiogVXNlIGEgUENJIEJERiBhc3NvY2lhdGVkIHdpdGgg YSBub24tZXhpc3RlbnQgZGV2aWNlIGZ1bmN0aW9uIChzdWNoCiAgYXMgYW4gdW51c2VkIG9uZSBy ZWxhdGluZyB0byB0aGUgUENJIHJvb3QtYnJpZGdlKSBhbmQgdHJhbnNsYXRlIHRoYXQKICAodmlh IGZpcm13YXJlIHRhYmxlcykgaW50byBhIHN1aXRhYmxlIGRldmljZSBpZDsKKiA/Pz8KCiMgTFBJ IEhhbmRsaW5nIGluIFhlbgoKIyMgSVJRIGRlc2NyaXB0b3JzCgpDdXJyZW50bHkgYWxsIFNHSS9Q UEkvU1BJIGludGVycnVwdHMgYXJlIGNvdmVyZWQgYnkgYSBzaW5nbGUgc3RhdGljCmFycmF5IG9m IGBzdHJ1Y3QgaXJxX2Rlc2NgIHdpdGggfjEwMjQgZW50cmllcyAodGhlIG1heGltdW0gaW50ZXJy dXB0Cm51bWJlciBpbiB0aGF0IHNldCBvZiBpbnRlcnJ1cHQgdHlwZXMpLgoKVGhlIGFkZGl0aW9u IG9mIExQSXMgaW4gR0lDdjMgbWVhbnMgdGhhdCB0aGUgbGFyZ2VzdCBwb3RlbnRpYWwKaW50ZXJy dXB0IHNwZWNpZmllciBpcyBtdWNoIGxhcmdlci4KClRoZXJlZm9yZSBhIHNlY29uZCBkeW5hbWlj YWxseSBhbGxvY2F0ZWQgYXJyYXkgd2lsbCBiZSBhZGRlZCB0byBjb3Zlcgp0aGUgcmFuZ2UgYDgx OTIuLm5yX2xwaXNgLiBUaGUgYGlycV90b19kZXNjYCBmdW5jdGlvbiB3aWxsIGRldGVybWluZQp3 aGljaCBhcnJheSB0byB1c2UgKHN0YXRpYyBgMC4uMTAyNGAgb3IgZHluYW1pYyBgODE5Mi4uZW5k YCBscGkgZGVzYwphcnJheSkgYmFzZWQgb24gdGhlIGlucHV0IGlycSBudW1iZXIuIFR3byBhcnJh eXMgYXJlIHVzZWQgdG8gYXZvaWQgYQp3YXN0ZWZ1bCBhbGxvY2F0aW9uIGNvdmVyaW5nIHRoZSB1 bnVzZWQvdW51c2FibGUpIGAxMDI0Li44MTkxYCByYW5nZS4KCiMjIFZpcnR1YWwgTFBJIGludGVy cnVwdCBpbmplY3Rpb24KCkEgcGh5c2ljYWwgaW50ZXJydXB0IHdoaWNoIGlzIHJvdXRlZCB0byBh IGd1ZXN0IHZDUFUgaGFzIHRoZQpgX0lSUV9HVUVTVGAgZmxhZyBzZXQgaW4gdGhlIGBpcnFfZGVz Y2Agc3RhdHVzIG1hc2suIFN1Y2ggaW50ZXJydXB0cwpoYXZlIGFuIGFzc29jaWF0ZWQgaW5zdGFu Y2Ugb2YgYHN0cnVjdCBpcnFfZ3Vlc3RgIHdoaWNoIGNvbnRhaW5zIHRoZQp0YXJnZXQgYHN0cnVj dCBkb21haW5gIHBvaW50ZXIgYW5kIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlci4KCkluIFhlbiBh IHZpcnR1YWwgaW50ZXJydXB0IChlaXRoZXIgYXJpc2luZyBmcm9tIGEgcGh5c2ljYWwgaW50ZXJy dXB0Cm9yIGNvbXBsZXRlbHkgdmlydHVhbCkgaXMgdWx0aW1hdGVseSBpbmplY3RlZCB0byBhIFZD UFUgdXNpbmcgdGhlCmB2Z2ljX3ZjcHVfaW5qZWN0X2lycWAgZnVuY3Rpb24sIG9yIGB2Z2ljX3Zj cHVfaW5qZWN0X2xwaWAuCgpUaGlzIG1lY2hhbmlzbSB3aWxsIGxpa2VseSBuZWVkIHVwZGF0aW5n IHRvIGhhbmRsZSB0aGUgaW5qZWN0aW9uIG9mCnZpcnR1YWwgTFBJcy4gSW4gcGFydGljdWxhciBy YXRoZXIgdGhhbiBgR0lDRF9JVEFSR0VSUm5gIG9yCmBHSUNEX0lST1VURVJuYCByb3V0aW5nIG9m IExQSXMgaXMgcGVyZm9ybWVkIHZpYSB0aGUgSVRTIGNvbGxlY3Rpb25zCm1lY2hhbmlzbS4gVGhp cyBpcyBkaXNjdXNzZWQgYmVsb3cgKEluIF92SVRTXzpfVmlydHVhbCBMUEkgaW5qZWN0aW9uXyku CgojIFNjb3BlCgpUaGUgSVRTIGlzIHJhdGhlciBjb21wbGljYXRlZCwgZXNwZWNpYWxseSB3aGVu IGNvbWJpbmVkIHdpdGgKdmlydHVhbGlzYXRpb24uIFRvIHNpbXBsaWZ5IHRoaW5ncyB3ZSBpbml0 aWFsbHkgb21pdCB0aGUgZm9sbG93aW5nCmZ1bmN0aW9uYWxpdHk6CgotIEludGVycnVwdCAtPiB2 Q1BVIC0+IHBDUFUgYWZmaW5pdHkuIFRoZSBtYW5hZ2VtZW50IG9mIHBoeXNpY2FsIHZzCiAgdmly dHVhbCBDb2xsZWN0aW9ucyBpcyBhIGZlYXR1cmUgb2YgR0lDdjQsIHRodXMgaXMgb21pdHRlZCBp biB0aGlzCiAgZGVzaWduIGZvciBHSUN2My4gUGh5c2ljYWwgaW50ZXJydXB0cyB3aGljaCBvY2N1 ciBvbiBhIHBDUFUgd2hlcmUKICB0aGUgdGFyZ2V0IHZDUFUgaXMgbm90IGFscmVhZHkgcmVzaWRl bnQgd2lsbCBiZSBmb3J3YXJkZWQgKHZpYSBJUEkpCiAgdG8gdGhlIGNvcnJlY3QgcENQVSBmb3Ig aW5qZWN0aW9uIHZpYSB0aGUgZXhpc3RpbmcKICBgdmdpY192Y3B1X2luamVjdF9pcnFgIG1lY2hh bmlzbSAoZXh0ZW5kZWQgdG8gaGFuZGxlIExQSSBpbmplY3Rpb24KICBjb3JyZWN0bHkpLgotIENs ZWFyaW5nIG9mIHRoZSBwZW5kaW5nIHN0YXRlIG9mIGFuIExQSSB1bmRlciB2YXJpb3VzIGNpcmN1 bXN0YW5jZXMKICAoYE1PVklgLCBgRElTQ0FSRGAsIGBDTEVBUmAgY29tbWFuZHMpIGlzIG5vdCBk b25lLiBUaGlzIHdpbGwgcmVzdWx0CiAgaW4gZ3Vlc3RzIHNlZWluZyBzb21lIHBlcmhhcHMgc3B1 cmlvdXMgaW50ZXJydXB0cy4KLSB2SVRTIGZ1bmN0aW9uYWxpdHkgd2lsbCBvbmx5IGJlIGF2YWls YWJsZSBvbiA2NC1iaXQgQVJNIGhvc3RzLAogIGF2b2lkaW5nIHRoZSBuZWVkIHRvIHdvcnJ5IGFi b3V0IGZhc3QgYWNjZXNzIHRvIGd1ZXN0IG93bmVkIGRhdGEKICBzdHJ1Y3R1cmVzICg2NC1iaXQg dXNlcyBhIGRpcmVjdCBtYXApLiAoTkI6IDMyLWJpdCBndWVzdHMgb24gNjQtYml0CiAgaG9zdHMg Y2FuIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBhY2Nlc3MpCgojIHBJVFMKCiMjIEFzc3VtcHRpb25z CgpJdCBpcyBhc3N1bWVkIHRoYXQgYEdJVFNfVFlQRVIuSURiaXRzYCBpcyBsYXJnZSBlbm91Z2gg dGhhdCB0aGVyZSBhcmUKc3VmZmljaWVudCBMUElzIGF2YWlsYWJsZSB0byBjb3ZlciB0aGUgc3Vt IG9mIHRoZSBudW1iZXIgb2YgcG9zc2libGUKZXZlbnRzIGdlbmVyYXRlZCBieSBlYWNoIGRldmlj ZSBpbiB0aGUgc3lzdGVtICh0aGF0IGlzIHRoZSBzdW0gb2YgdGhlCmFjdHVhbCBldmVudHMgZm9y IGVhY2ggYml0IG9mIGhhcmR3YXJlLCByYXRoZXIgdGhhbiB0aGUgbm90aW9uYWwKcGVyLWRldmlj ZSBtYXhpbXVtIGZyb20gYEdJVFNfVFlQRVIuSWRiaXRzYCkuCgpUaGlzIGFzc3VtcHRpb24gYXZv aWRzIHRoZSBuZWVkIHRvIGRvIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgaW50ZXJydXB0CnJvdXRp bmcgYXQgcnVuIHRpbWUsIGUuZy4gZHVyaW5nIGNvbW1hbmQgcHJvY2Vzc2luZyBieSBhbGxvd2lu ZyB1cyB0bwpzZXR1cCBldmVyeXRoaW5nIHVwIGZyb250LgoKIyMgRHJpdmVyCgpUaGUgcGh5c2lj YWwgZHJpdmVyIHdpbGwgcHJvdmlkZSBmdW5jdGlvbnMgZm9yIGVuYWJsaW5nLCBkaXNhYmxpbmcK cm91dGluZyBldGMgYSBzcGVjaWZpZWQgaW50ZXJydXB0LCB2aWEgdGhlIHVzdWFsIFhlbiBBUElz IGZvciBkb2luZwpzdWNoIHRoaW5ncy4KClRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBpbnRlcmFj dGluZyB3aXRoIHRoZSBwaHlzaWNhbCBJVFMgY29tbWFuZApxdWV1ZSBldGMuIEluIHRoaXMgZG9j dW1lbnQgc3VjaCBpbnRlcmFjdGlvbnMgYXJlIGNvbnNpZGVyZWQgaW50ZXJuYWwKdG8gdGhlIGRy aXZlciAoaS5lLiB3ZSBjYXJlIHRoYXQgdGhlIEFQSSB0byBlbmFibGUgYW4gaW50ZXJydXB0CmV4 aXN0cywgbm90IGhvdyBpdCBpcyBpbXBsZW1lbnRlZCkuCgpUaGUgcGh5c2ljYWwgSVRTIHdpbGwg YmUgcHJvdmlzaW9uZWQgd2l0aCB3aGF0ZXZlciB0YWJsZXMgaXQgcmVxdWVzdHMKdmlhIGl0cyBg R0lUU19CQVNFUm5gIHJlZ2lzdGVycy4KCiMjIENvbGxlY3Rpb25zCgpUaGUgYHBJVFNgIHdpbGwg YmUgY29uZmlndXJlZCBhdCBzdGFydCBvZiBkYXkgd2l0aCAxIENvbGxlY3Rpb24gbWFwcGVkCnRv IGVhY2ggcGh5c2ljYWwgcHJvY2Vzc29yLCB1c2luZyB0aGUgYE1BUENgIGNvbW1hbmQgb24gdGhl IHBoeXNpY2FsCklUUy4KCiMjIFBlciBEZXZpY2UgSW5mb3JtYXRpb24KCkVhY2ggcGh5c2ljYWwg ZGV2aWNlIGluIHRoZSBzeXN0ZW0gd2hpY2ggY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBhbgpJ VFMgKHdoZXRoZXIgdXNpbmcgcGFzc3Rocm91Z2ggb3Igbm90KSB3aWxsIGhhdmUgYXNzb2NpYXRl ZCB3aXRoIGl0IGEKZGF0YSBzdHJ1Y3R1cmU6CgogICAgc3RydWN0IGl0c19kZXZpY2UgewogICAg ICAgIHN0cnVjdCBwaXRzICpwaXRzOwogICAgICAgIHVpbnROTl90IHBoeXNfZGV2aWNlX2lkOwog ICAgICAgIHVpbnROTl90IHZpcnRfZGV2aWNlX2lkOwogICAgICAgIHVuc2lnbmVkIGludCAqZXZl bnRzOwogICAgICAgIHVuc2lnbmVkIGludCBucl9ldmVudHM7CiAgICAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGl0dDsKICAgICAgICB1bnNpZ25lZCBpbnQgbnJfcGl0dF9wYWdlczsKICAgICAgICAv KiBPdGhlciBmaWVsZHMgcmVsYXRpbmcgdG8gcElUUyBtYWludGVuYW5jZSBidXQgdW5yZWxhdGVk IHRvIHZJVFMgKi8KICAgIH07CgpXaGVyZToKCi0gYHBpdHNgOiBQb2ludGVyIHRvIHRoZSBhc3Nv Y2lhdGVkIHBoeXNpY2FsIElUUy4KLSBgcGh5c19kZXZpY2VfaWRgOiBUaGUgcGh5c2ljYWwgZGV2 aWNlIElEIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2UKLSBgdmlydF9kZXZpY2VfaWRgOiBUaGUgdmly dHVhbCBkZXZpY2UgSUQgaWYgdGhlIGRldmljZSBpcyBhY2Nlc3NpYmxlCiAgdG8gYSBkb21haW4K LSBgZXZlbnRzYDogQW4gYXJyYXkgbWFwcGluZyBhIHBlci1kZXZpY2UgZXZlbnQgbnVtYmVyIGlu dG8gYSBwaHlzaWNhbAogIExQSS4KLSBgbnJfZXZlbnRzYDogVGhlIG51bWJlciBvZiBldmVudHMg d2hpY2ggdGhpcyBkZXZpY2UgaXMgYWJsZSB0bwogIGdlbmVyYXRlLgotIGBwaXR0YCwgYG5yX3Bp dHRfcGFnZXNgOiBSZWNvcmRzIGFsbG9jYXRpb24gb2YgcGFnZXMgZm9yIHBoeXNpY2FsCiAgSVRU IChub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSkuCgpEdXJpbmcgaXRzIGxpZmV0aW1lIHRoaXMgc3Ry dWN0dXJlIG1heSBiZSByZWZlcmVuY2VkIGJ5IHNldmVyYWwKZGlmZmVyZW50IG1hcHBpbmdzIChl LmcuIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGRldmljZSBpZCBtYXBzLCB2aXJ0dWFsCmNvbGxlY3Rp b24gZGV2aWNlIGlkKS4KCiMjIERldmljZSBEaXNjb3ZlcnkvUmVnaXN0cmF0aW9uIGFuZCBDb25m aWd1cmF0aW9uCgpQZXIgZGV2aWNlIGluZm9ybWF0aW9uIHdpbGwgYmUgZGlzY292ZXJlZCBiYXNl ZCBvbiBmaXJtd2FyZSB0YWJsZXMgKERUCm9yIEFDUEkpIGFuZCBpbmZvcm1hdGlvbiBwcm92aWRl ZCBieSBkb20wIChlLmcuIHJlYWRpbmcgYXNzb2NpYXRlZCBQQ0kKY2ZnIHNwYWNlLCByZWdpc3Ry YXRpb24gdmlhIFBIWVNERVZPUF9wY2lfZGV2aWNlX2FkZCBvciBuZXcgY3VzdG9tCmh5cGVyY2Fs bHMpLgoKVGhpcyBpbmZvcm1hdGlvbiBzaGFsbCBpbmNsdWRlIGF0IGxlYXN0OgoKLSBUaGUgRGV2 aWNlIElEIG9mIHRoZSBkZXZpY2UuCi0gVGhlIG1heGltdW0gbnVtYmVyIG9mIEV2ZW50cyB3aGlj aCB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YKICBnZW5lcmF0aW5nLgoKV2hlbiBhIGRldmljZSBp cyBkaXNjb3ZlcmVkL3JlZ2lzdGVyZWQgKGkuZS4gd2hlbiBhbGwgbmVjZXNzYXJ5CmluZm9ybWF0 aW9uIGlzIGF2YWlsYWJsZSkgdGhlbjoKCi0gYHN0cnVjdCBpdHNfZGV2aWNlYCBhbmQgdGhlIGVt YmVkZGVkIGBldmVudHNgIGFycmF5IHdpbGwgYmUKICBhbGxvY2F0ZWQgKHRoZSBsYXR0ZXIgd2l0 aCBgbnJfZXZlbnRzYCBlbGVtZW50cykuCi0gVGhlIGBzdHJ1Y3QgaXRzX2RldmljZWAgd2lsbCBi ZSBpbnNlcnRlZCBpbnRvIGEgbWFwcGluZyAocG9zc2libHkgYW4KICBSLUIgdHJlZSkgZnJvbSBp dHMgcGh5c2ljYWwgRGV2aWNlIElEIHRvIHRoZSBgc3RydWN0IGl0c2AuCi0gYG5yX2V2ZW50c2Ag cGh5c2ljYWwgTFBJcyB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgcmVjb3JkZWQgaW4gdGhlCiAgYGV2 ZW50c2AgYXJyYXkuCi0gQW4gSVRUIHRhYmxlIHdpbGwgYmUgYWxsb2NhdGVkIGZvciB0aGUgZGV2 aWNlIGFuZCB0aGUgYXBwcm9wcmlhdGUKICBgTUFQRGAgY29tbWFuZCB3aWxsIGJlIGlzc3VlZCB0 byB0aGUgcGh5c2ljYWwgSVRTLiBUaGUgbG9jYXRpb24gd2lsbAogIGJlIHJlY29yZGVkIGluIGBz dHJ1Y3QgaXRzX2RldmljZS5waXR0YC4KLSBFYWNoIEV2ZW50IHdoaWNoIHRoZSBkZXZpY2UgbWF5 IGdlbmVyYXRlIHdpbGwgYmUgbWFwcGVkIHRvIHRoZQogIGNvcnJlc3BvbmRpbmcgTFBJIGluIHRo ZSBgZXZlbnRzYCBhcnJheSBhbmQgYSBjb2xsZWN0aW9uLCBieSBpc3N1aW5nCiAgYSBzZXJpZXMg b2YgYE1BUFZJYCBjb21tYW5kcy4gRXZlbnRzIHdpbGwgYmUgYXNzaWduZWQgdG8gcGh5c2ljYWwK ICBjb2xsZWN0aW9ucyBpbiBhIHJvdW5kLXJvYmluIGZhc2hpb24uCgpUaGlzIHNldHVwIG11c3Qg b2NjdXIgZm9yIGEgZ2l2ZW4gZGV2aWNlIGJlZm9yZSBhbnkgSVRTIGludGVycnVwdHMgbWF5CmJl IGNvbmZpZ3VyZWQgZm9yIHRoZSBkZXZpY2UgYW5kIGNlcnRhaW5seSBiZWZvcmUgYSBkZXZpY2Ug aXMgcGFzc2VkCnRocm91Z2ggdG8gYSBndWVzdC4gVGhpcyBpbXBsaWVzIHRoYXQgZG9tMCBjYW5u b3QgdXNlIE1TSXMgb24gYSBQQ0kKZGV2aWNlIGJlZm9yZSBoYXZpbmcgY2FsbGVkIGBQSFlTREVW T1BfcGNpX2RldmljZV9hZGRgLgoKIyBEZXZpY2UgQXNzaWdubWVudAoKRWFjaCBkb21haW4gd2ls bCBoYXZlIGFuIGFzc29jaWF0ZWQgbWFwcGluZyBmcm9tIHZpcnR1YWwgZGV2aWNlIGlkcwppbnRv IGEgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgcGh5c2ljYWwgZGV2aWNlLCBpbmNsdWRp bmcgYQpyZWZlcmVuY2UgdG8gdGhlIHJlbGV2YW50IGBzdHJ1Y3QgaXRzX2RldmljZWAuCgpUaGUg bnVtYmVyIG9mIHBvc3NpYmxlIGRldmljZSBJRHMgbWF5IGJlIGxhcmdlIHNvIGEgc2ltcGxlIGFy cmF5IG9yCmxpc3QgaXMgbGlrZWx5IHVuc3VpdGFibGUuIEEgdHJlZSAoZS5nLiBSZWQtQmxhY2sg bWF5IGJlIGEgc3VpdGFibGUKZGF0YSBzdHJ1Y3R1cmUuIEN1cnJlbnRseSB3ZSBkbyBub3QgbmVl ZCB0byBwZXJmb3JtIGxvb2t1cHMgaW4gdGhpcwp0cmVlIG9uIGFueSBob3QgcGF0aHMuCgpfTm90 ZV86IEluIHRoZSBjb250ZXh0IG9mIHZpcnR1YWxpc2VkIGRldmljZSBpZHMgKGVzcGVjaWFsbHkg Zm9yIGRvbVUpCml0IG1heSBiZSBwb3NzaWJsZSB0byBhcnJhbmdlIGZvciB0aGUgdXBwZXIgYm91 bmQgb24gdGhlIG51bWJlciBvZgpkZXZpY2UgSURzIHRvIGJlIGxvd2VyIGFsbG93aW5nIGEgbW9y ZSBlZmZpY2llbnQgZGF0YSBzdHJ1Y3R1cmUgdG8gYmUKdXNlZC4gVGhpcyBpcyBsZWZ0IGZvciBh IGZ1dHVyZSBpbXByb3ZlbWVudC4KCldoZW4gYSBkZXZpY2UgaXMgYXNzaWduZWQgdG8gYSBkb21h aW4gKGluY2x1ZGluZyB0byBkb21haW4gMCkgdGhlCm1hcHBpbmcgZm9yIHRoZSBuZXcgdmlydHVh bCBkZXZpY2UgSUQgd2lsbCBiZSBlbnRlcmVkIGludG8gdGhlIHRyZWUuCgpEdXJpbmcgYXNzaWdu bWVudCBhbGwgTFBJcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSB3aWxsIGJlIHJvdXRlZAp0 byB0aGUgZ3Vlc3QgKGkuZS4gYHJvdXRlX2lycV90b19ndWVzdGAgd2lsbCBiZSBjYWxsZWQgZm9y IGVhY2ggTFBJIGluCnRoZSBgc3RydWN0IGl0c19kZXZpY2UuZXZlbnRzYCBhcnJheSkgYW5kIHRo ZSBwTFBJIHdpbGwgYmUgZW5hYmxlZCBpbgp0aGUgcGh5c2ljYWwgTFBJIGNvbmZpZ3VyYXRpb24g dGFibGUgd2l0aCBhIHByaW9yaXR5IG9mIGBHSUNfUFJJX0lSUWAKKG5vdCBhbnkgcHJpb3JpdHkg ZnJvbSB0aGUgZ3Vlc3QpLgoKIyB2SVRTCgpBIGd1ZXN0IGRvbWFpbiB3aGljaCBpcyBhbGxvd2Vk IHRvIHVzZSBJVFMgZnVuY3Rpb25hbGl0eSAoaS5lLiBoYXMKYmVlbiBhc3NpZ25lZCBwYXNzLXRo cm91Z2ggZGV2aWNlcyB3aGljaCBjYW4gZ2VuZXJhdGUgTVNJcykgd2lsbCBiZQpwcmVzZW50ZWQg d2l0aCBhIHZpcnR1YWxpc2VkIElUUy4KCkFjY2Vzc2VzIHRvIHRoZSB2SVRTIHJlZ2lzdGVycyB3 aWxsIHRyYXAgdG8gWGVuIGFuZCBiZSBlbXVsYXRlZCBhbmQgYQp2aXJ0dWFsaXNlZCBDb21tYW5k IFF1ZXVlIHdpbGwgYmUgcHJvdmlkZWQuCgpDb21tYW5kcyBlbnRlcmVkIG9udG8gdGhlIHZpcnR1 YWwgQ29tbWFuZCBRdWV1ZSB3aWxsIGJlIHRyYW5zbGF0ZWQKaW50byBwaHlzaWNhbCBjb21tYW5k cywgYXMgZGVzY3JpYmVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCgpUaGVyZSBhcmUgb3RoZXIg YXNwZWN0cyB0byB2aXJ0dWFsaXNpbmcgdGhlIElUUyAoTFBJIGNvbGxlY3Rpb24KbWFuYWdlbWVu dCwgYXNzaWdubWVudCBvZiBMUEkgcmFuZ2VzIHRvIGd1ZXN0cywgZGV2aWNlCm1hbmFnZW1lbnQp LiBIb3dldmVyIHRoZXNlIGFyZSBvbmx5IGNvbnNpZGVyZWQgaGVyZSB0byB0aGUgZXh0ZW50Cm5l ZWRlZCBmb3IgZGVzY3JpYmluZyB0aGUgdklUUyBlbXVsYXRpb24uCgojIyBYZW4gaW50ZXJhY3Rp b24gd2l0aCBndWVzdCBPUyBwcm92aXNpb25lZCB2SVRTIG1lbW9yeQoKTWVtb3J5IHdoaWNoIHRo ZSBndWVzdCBwcm92aXNpb25zIHRvIHRoZSB2SVRTIChJVFQgdmlhIGBNQVBEYCBvciBvdGhlcgp0 YWJsZXMgdmlhIGBHSVRTX0JBU0VSbmApIG5lZWRzIGNhcmVmdWwgaGFuZGxpbmcgaW4gWGVuLgoK IyMjIFRydXN0CgpTaW5jZSBYZW4gY2Fubm90IHRydXN0IGRhdGEgaW4gZGF0YSBzdHJ1Y3R1cmVz IGNvbnRhaW5lZCBpbiBzdWNoCm1lbW9yeSBpZiBhIGd1ZXN0IGNhbiB0cmFtcGxlIG92ZXIgaXQg YXQgd2lsbC4gVGhlcmVmb3JlIFhlbiBlaXRoZXIKbXVzdCB0YWtlIGdyZWF0IGNhcmUgd2hlbiBh Y2Nlc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzIHN0b3JlZCBpbiBzdWNoCm1lbW9yeSB0byB2YWxpZGF0 ZSB0aGUgY29udGVudHMgZS5nLiBub3QgdHJ1c3QgdGhhdCB2YWx1ZXMgYXJlIHdpdGhpbgp0aGUg cmVxdWlyZWQgbGltaXRzIG9yIGl0IG11c3QgdGFrZSBzdGVwcyB0byByZXN0cmljdCBndWVzdCBh Y2Nlc3MgdG8KdGhlIG1lbW9yeSB3aGVuIGl0IGlzIHByb3Zpc2lvbmVkLiBTaW5jZSB0aGUgZGF0 YSBzdHJ1Y3R1cmVzIGFyZQpzaW1wbGUgYW5kIG1vc3QgYWNjZXNzb3JzIG5lZWQgdG8gZG8gYm91 bmRzIGNoZWNrIGFueXdheSBpdCBpcwpjb25zaWRlcmVkIHN1ZmZpY2llbnQgdG8gc2ltcGx5IGRv IHRoZSBuZWNlc3NhcnkgY2hlY2tzIG9uIGFjY2Vzcy4KCioqQW55IGluZm9ybWF0aW9uIHJlYWQg bWVtb3J5IHdoaWNoIGhhcyBiZWVuIHByb3Zpc2lvbmVkIGJ5IHRoZSBndWVzdAogICBPUyBzaG91 bGQgbm90IGJlIHRydXN0ZWQgYW5kIG11c3QgYmUgY2FyZWZ1bGx5IGNoZWNrZWQgKGUuZy4gcmFu Z2VzCiAgIGV0YykgYmVmb3JlIHVzZS4qKgoKIyMjIE1hcHBpbmcKCk1vc3QgZGF0YSBzdHJ1Y3R1 cmVzIHN0b3JlZCBpbiB0aGlzIHNoYXJlZCBtZW1vcnkgYXJlIGFjY2Vzc2VkIG9uIHRoZQpob3Qg aW50ZXJydXB0IGluamVjdGlvbiBwYXRoIGFuZCBtdXN0IHRoZXJlZm9yZSBiZSBxdWlja2x5IGFj Y2Vzc2libGUKZnJvbSB3aXRoaW4gWGVuLiBTaW5jZSB3ZSBoYXZlIHJlc3RyaWN0ZWQgdml0cyBz dXBwb3J0IHRvIDY0LWJpdCBob3N0cwpvbmx5IGBtYXBfZG9tYWluX3BhZ2VgIGlzIGZhc3QgZW5v dWdoIHRvIGJlIHVzZWQgb24gdGhlIGZseSBhbmQKdGhlcmVmb3JlIHdlIGRvIG5vdCBuZWVkIHRv IGJlIGNvbmNlcm5lZCBhYm91dCB1bmJvdW5kZWQgYW1vdW50cyBvZgpwZXJtYW5lbnRseSBtYXBw ZWQgbWVtb3J5IGNvbnN1bWVkIGJ5IGVhY2ggYE1BUERgIGNvbW1hbmQuCgpBbHRob3VnaCBgbWFw X2RvbWFpbl9wYWdlYCBpcyBmYXN0LCBgcDJtX2xvb2t1cGAgKHRyYW5zbGF0aW9uIGZyb20gSVBB CnRvIFBBKSBpcyBub3QgbmVjZXNzYXJpbHkgc28uIEZvciBub3cgd2UgYWNjZXB0IHRoaXMsIGFz IGEgZnV0dXJlCmV4dGVuc2lvbiBhIHNwYXJzZSBtYXBwaW5nIG9mIHRoZSBndWVzdCBkZXZpY2Ug dGFibGUgaW4gdm1hcCBzcGFjZQpjb3VsZCBiZSBjb25zaWRlcmVkLCB3aXRoIGxpbWl0cyBvbiB0 aGUgdG90YWwgYW1vdW50IG9mIHZtYXAgc3BhY2Ugd2hpY2gKd2UgYWxsb3cgZWFjaCBkb21haW4g dG8gY29uc3VtZS4KClRoZSBgR0lUU19CQVNFUm5gIHJlZ2lzdGVycyBhbGxvdyBmb3IgdGhlIGd1 ZXN0IHRvIHNwZWNpZnkgY2FjaGUKYXR0cmlidXRlcyBmb3IgdGhlIG1lbW9yeS4gRm9yIG5vdyB3 ZSByZXF1aXJlIHRoYXQgdGhlc2UgaGF2ZSB0aGUgc2FtZQphdHRyaWJ1dGVzIGFzIGh5cGVyY2Fs bCBhcmd1bWVudHMgaW4gZ2VuZXJhbCAoc2VlIGBwdWJsaWMvYXJjaC1hcm0uaGApCgpJbiBhZGRp dGlvbiB3aGlsZSBgR0lUU19CQVNFUm5gIGFsbG93cyB0aGUgQ2FjaGVhYmlsaXR5IHRvIGJlCnNw ZWNpZmllZCBhcyBgRGV2aWNlLW5HblJuRWAgd2UgcmVxdWlyZSB0aGF0IHRoZSB0YWJsZXMgcHJv dmlkZWQgYmUgaW4Kbm9ybWFsIGd1ZXN0IFJBTSAobm90IE1NSU8sIG5vdCBncmFudGVkIG1lbW9y eSBldGMpLCB0aGF0IGlzIGl0IG11c3QKaGF2ZSB0eXBlIGBwMm1fcmFtX3J3YC4KCiMjIHZJVFMg cHJvcGVydGllcwoKVGhlIHZJVFMgaW1wbGVtZW50YXRpb24gc2hhbGwgaGF2ZToKCi0gYEdJVFNf VFlQRVIuSENDID09IG5yX3ZjcHVzICsgMWAuCi0gYEdJVFNfVFlQRVIuUFRBID09IDBgLiBUYXJn ZXQgYWRkcmVzc2VzIGFyZSBsaW5lYXIgcHJvY2Vzc29yIG51bWJlcnMuCi0gYEdJVFNfVFlQRVIu RGV2Yml0cyA9PSBTZWUgYmVsb3dgLgotIGBHSVRTX1RZUEVSLklEYml0cyA9PSBTZWUgYmVsb3dg LgotIGBHSVRTX1RZUEVSLklUVCBFbnRyeSBTaXplID09IDdgLCBtZWFuaW5nIDggYnl0ZXMsIHdo aWNoIGlzIHRoZSBzaXplCiAgb2YgYHN0cnVjdCB2aXR0YCAoZGVmaW5lZCBiZWxvdykuCgpgR0lU U19UWVBFUi5EZXZiaXRzYCBhbmQgYEdJVFNfVFlQRVIuSWRiaXRzYCB3aWxsIG5lZWQgdG8gYmUg Y2hvc2VuIHRvCnJlZmxlY3QgdGhlIGhvc3QgYW5kIGd1ZXN0IGNvbmZpZ3VyYXRpb25zIChudW1i ZXIgb2YgTFBJcywgbWF4aW11bQpkZXZpY2UgSUQgZXRjKS4KCk90aGVyIGZpZWxkcyAobm90IG1l bnRpb25lZCBoZXJlKSB3aWxsIGJlIHNldCB0byBzb21lIHNlbnNpYmxlIChvcgptYW5kYXRlZCkg dmFsdWUuCgpUaGUgYEdJVFNfQkFTRVIwYCB3aWxsIGJlIHNldHVwIHRvIHJlcXVlc3Qgc3VmZmlj aWVudCBtZW1vcnkgZm9yIGEKZGV2aWNlIHRhYmxlIGNvbnNpc3Rpbmcgb2YgZW50cmllcyBvZjoK CiAgICBzdHJ1Y3QgdmRldmljZV90YWJsZSB7CiAgICAgICAgdWludDY0X3Qgdml0dF9pcGE7CiAg ICAgICAgdWludDMyX3Qgdml0dF9zaXplOwogICAgICAgIHVpbnQzMl90IHBhZGRpbmc7CiAgICB9 OwogICAgQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdmRldmljZV90YWJsZSkgIT0gMTYpOwoK T24gd3JpdGUgdG8gYEdJVFNfQkFTRVIwYCB0aGUgcmVsZXZhbnQgZGV0YWlscyBvZiB0aGUgRGV2 aWNlIFRhYmxlCihJUEEsIHNpemUsIGNhY2hlIGF0dHJpYnV0ZXMgdG8gdXNlIHdoZW4gbWFwcGlu Zykgd2lsbCBiZSByZWNvcmRlZCBpbgpgc3RydWN0IGRvbWFpbmAuCgpBbGwgb3RoZXIgYEdJVFNf QkFTRVJuLlZhbGlkID09IDBgLgoKIyMgdklUUyB0byBwSVRTIG1hcHBpbmcKCkEgcGh5c2ljYWwg c3lzdGVtIG1heSBoYXZlIG11bHRpcGxlIHBoeXNpY2FsIElUU3MuCgpXaXRoIHRoZSBzaW1wbGlm aWVkIHZpdHMgY29tbWFuZCBtb2RlbCBwcmVzZW50ZWQgaGVyZSBvbmx5IGEgc2luZ2xlCmB2aXRz YCBpcyByZXF1aXJlZC4KCkluIHRoZSBmdXR1cmUgYSBtb3JlIGNvbXBsZXggYXJyYW5nZW1lbnQg bWF5IGJlIGRlc2lyZWQuIFNpbmNlIHRoZQpjaG9pY2Ugb2YgbW9kZWwgaXMgaW50ZXJuYWwgdG8g dGhlIGh5cGVydmlzb3IvdG9vbHMgYW5kIGlzCmNvbW11bmljYXRlZCB0byB0aGUgZ3Vlc3Qgdmlh IGZpcm13YXJlIHRhYmxlcyB3ZSBhcmUgbm90IHRpZWQgdG8gdGhpcwptb2RlbCBhcyBhbiBBQkkg aWYgd2UgZGVjaWRlIHRvIGNoYW5nZS4KCldoZW4gY29uc3RydWN0aW5nIGRvbTAgaXQgd2lsbCB0 aGVyZWZvcmUgYmUgbmVjZXNzYXJ5IHRvIHJld3JpdGUgYW55CkRUUyBwcm9wZXJ0aWVzIHdoaWNo IHJlZmVyIHRvIGFuIElUUyB0byBwb2ludCB0byB0aGUgc2luZ2xlIHByb3ZpZGVkCklUUywgYXMg d2VsbCBhcyBkcm9wcGluZyBhbGwgSVRTIG5vZGVzIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIGEK c2luZ2xlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSB2SVRTLgoKIyMgTWFwcGluZyBmcm9tIGB2TFBJ YCBiYWNrIHRvIGBwTFBJYAoKV2hpbGUgd2UgaGF2ZSBhcnJhbmdlZCBmb3IgYSAoYHBEZXZpY2Vg LGBwRXZlbnRgKSB0byBtYXAgdG8gYSBzaW5nbGUKYHBMUElgIHdlIGNhbm5vdCBndWFyYW50ZWUg dGhhdCBhIGdpdmVuIGB2TFBJYCBpcyBtYXBwZWQgYnkgYSBzaW5nbGUKKGB2RGV2aWNlYCxgdkV2 ZW50YCkgc2luY2UgdGhlIGd1ZXN0IG1heSBzZXR1cCBtdWx0aXBsZSBJVFQgdGFibGVzCnN1Y2gg dGhhdCB0aGlzIGlzIG5vdCB0aGUgY2FzZS4gRW5mb3JjaW5nIHRoYXQgdGhpcyBpcyB0aGUgY2Fz ZSBpcwpwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZS4KClRoZXJlZm9yZSBpdCBpcyBub3QgaW4gZ2Vu ZXJhbCBwb3NzaWJsZSB0byBhc3NvY2lhdGUgYSBgdkxQSWAgd2l0aCBhCmBwTFBJYC4KCiMjIFBl ci1kb21haW4gYHN0cnVjdCBwZW5kaW5nX2lycWAgZm9yIGB2TFBJYHMKCkludGVybmFsbHkgWGVu IHVzZXMgYSBgc3RydWN0IHBlbmRpbmdfaXJxYCB0byB0cmFjayB0aGUgc3RhdHVzIG9mIGFueQpw ZW5kaW5nIHZpcnR1YWwgSVJRLCBpbmNsdWRpbmcgYSB2aXJ0dWFsIExQSS4KClVwb24gZG9tYWlu IGNyZWF0aW9uIGFuIGFycmF5IG9mIHN1Y2ggYHN0cnVjdCBwZW5kaW5nX2lycWAncyB3aWxsIGJl CmFsbG9jYXRlZCB0byBjb3ZlciB0aGUgcmFuZ2UgYDgxOTIuLm5yX2xwaXNgIChmb3IgdGhlIG51 bWJlciBvZiBMUElzCndoaWNoIHRoZSBndWVzdCBpcyBjb25maWd1cmVkIHdpdGgpIGFuZCBhIHBv aW50ZXIgdGhpcyBhcnJheSB3aWxsIGJlCnN0b3JlZCBpbiB0aGUgYHN0cnVjdCBkb21haW5gLiBU aGUgZnVuY3Rpb24gYGlycV90b19wZW5kaW5nYCB3aWxsIGJlCm1vZGlmaWVkIHRvIGxvb2t1cCBp bnRlcnVwdHMgaW4gdGhlIExQSSByYW5nZSBpbiB0aGlzIGFycmF5LgoKIyMgSGFuZGxpbmcgb2Yg dW5yb3V0ZWQvc3B1cmlvdXMgTFBJcwoKU2luY2UgdGhlcmUgaXMgbm8gMToxIGxpbmsgYmV0d2Vl biBhIGB2TFBJYCBhbmQgYHBMUElgIGVuYWJsaW5nIGFuZApkaXNhYmxpbmcgb2YgcGh5aXNjYWwg TFBJcyBjYW5ub3QgYmUgZHJpdmVuIGZyb20gdGhlIHN0YXRlIG9mIGFuCmFzc29jaWF0ZWQgdkxQ SS4KCkVhY2ggYHBMUElgIGlzIHJvdXRlZCBhbmQgZW5hYmxlZCBkdXJpbmcgZGV2aWNlIGFzc2ln bm1lbnQsIHRoZXJlZm9yZQppdCBpcyBwb3NzaWJsZSB0byByZWNlaXZlIGEgcGh5c2ljYWwgTFBJ IHdoaWNoIGhhcyB5ZXQgdG8gYmUgcm91dGVkCih2aWEgYSBgdklUU2ApIHRvIGEgYHZMUElgLgoK U2ltaWxhcmx5IGlmIGEgZ3Vlc3Qgcm91dGVzIG11bHRpcGxlIEV2ZW50cyB0byBhIHNpbmdsZSBg dkxQSWAgdGhlCmludGVycnVwdCBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdoZW4gd2UgYXR0ZW1w dCB0byBkZWxpdmVyIGl0LgoKU3VjaCBgcExQSWBzIHNoYWxsIGJlIGlnbm9yZWQgYW5kIGxlZnQg aW4gdGhlIHByaW9yaXR5IGRyb3BwZWQgc3RhdGUKKHBlciB0aGUgcmVhZCBmcm9tIGBHSUNDX0lB UmApLiBUaGV5IHdpbGwgbm90IGJlIGBFT0lgLWQgaW4gb3JkZXIgdG8KYXZvaWQgYSBwb3NzaWJs ZSBpbnRlcnJ1cHQgc3Rvcm0uCgpPbiBkZXZpY2UgZGVhc3NpZ25tZW50IChpbmNsdWRpbmcgYXMg cGFydCBvZiBkb21haW4gZGVzdHJveSkgYWZ0ZXIKcmVzZXR0aW5nIHRoZSBkZXZpY2UgaXQgd2ls bCBiZSBuZWNlc3NhcnkgdG8gRU9JIGFueSBpbnRlcnJ1cHRzIGluCnN1Y2ggYSBzdGF0ZSBieSB3 YWxraW5nIG92ZXIgYWxsIGV2ZW50cyBpbiB0aGUgY29ycmVzcG9uZGluZyBgc3RydWN0Cml0c19k ZXZpY2VgLgoKIyMgRW5hYmxpbmcgYW5kIGRpc2FibGluZyBMUElzCgpUd28gbmV3IGZ1bmN0aW9u cyBgdmdpY19lbmFibGVfbHBpYCBhbmQgYHZnaWNfZGlzYWJsZV9scGlgIHdpbGwgYmUKcHJvdmlk ZWQgd2hpY2ggYXJlIGFuYWxvZ291cyB0byBgdmdpY19lbmFibGVfaXJxc2AgYW5kCmB2Z2ljX2Rp c2FibGVfaXJxc2AgYnV0IHdvcmsgZm9yIHRoZSBMUEkgaW50ZXJmYWNlLiAoQWx0ZXJuYXRpdmVs eSwKcmVmYWN0b3JpbmcgdGhlIGV4aXN0aW5nIGZ1bmN0aW9ucyB0byB3b3JrIGZvciBhbGwgY2Fl cyB3b3VsZCBiZQphY2NlcHRhYmxlIHRvbykuCgpBIGB2TFBJYCB3aGljaCBoYXMgbm90IHlldCBi ZSBlbmFibGVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBxdWV1ZWQsIGJ5CnRoZSBleGlzdGluZyB2 Z2ljIGluamVjdGlvbiBtYWNoaW5lcnksIHVudGlsIGEgY2FsbCB0bwpgdmdpY19lbmFibGVfbHBp YCBpcyBtYWRlIChpbiByZXNwb25zZSB0byBhIHRyYXBwZWQgYWNjZXNzIHRvIHRoZQp2aXJ0dWFs IGNmZyB0YWJsZSkuCgojIyBMUEkgQ29uZmlndXJhdGlvbiBUYWJsZSBWaXJ0dWFsaXNhdGlvbgoK QSBndWVzdCdzIHdyaXRlIGFjY2Vzc2VzIHRvIGl0cyBMUEkgQ29uZmlndXJhdGlvbiBUYWJsZSAo d2hpY2ggaXMganVzdAphbiBhcmVhIG9mIGd1ZXN0IFJBTSB3aGljaCB0aGUgZ3Vlc3QgaGFzIG5v bWluYXRlZCkgd2lsbCBiZSB0cmFwcGVkIHRvCnRoZSBoeXBlcnZpc29yLCB1c2luZyBzdGFnZSAy IE1NVSBwZXJtaXNzaW9ucywgaW4gb3JkZXIgZm9yIGNoYW5nZXMgdG8KYmUgcHJvcGFnYXRlZCBp bnRvIHRoZSBob3N0IGludGVycnVwdCBjb25maWd1cmF0aW9uLgoKT24gd3JpdGUgYGJpdFswXWAg b2YgdGhlIHdyaXR0ZW4gYnl0ZSBpcyB0aGUgZW5hYmxlL2Rpc2FibGUgc3RhdGUgZm9yCnRoZSBp cnEgYW5kIGlzIGhhbmRsZWQgdGh1cywgZm9yIGVhY2ggYnl0ZSBpbiB0aGUgd3JpdHRlbiB2YWx1 ZToKCiAgICBscGkgPSBscGkgY29ycmVzcG9kaW5nIHRvIGJ5dGUgb2Zmc2V0IChhZGRyIC0gdGFi bGVfYmFzZSk7CgogICAgcGVuZGluZ19pcnEgPSBpcnFfdG9fcGVuZGluZyhscGkpOwogICAgcGVu ZGluZ19pcnEtPnByaW9yaXR5ID0gYnl0ZSAmIDB4ZmM7IC8qIFhYWDogb3IgYnl0ZSA+PiAyICov CgogICAgaWYgKCBieXRlICYgMHgxICkKICAgICAgICB2Z2ljX2VuYWJsZV9scGkoY3VycmVudCwg bHBpKTsKICAgIGVsc2UKICAgICAgICB2Z2ljX2Rpc2FibGVfbHBpKGN1cnJlbnQsIGxwaSk7CgpO b3RlIHRoYXQgcGh5c2ljYWwgaW50ZXJydXB0cyBhcmUgYWx3YXlzIGNvbmZpZ3VyZWQgd2l0aCBh IHByaW9yaXR5IG9mCmBHSUNfUFJJX0lSUWAsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByaW9yaXR5IG9m IGFueSB2aXJ0dWFsIGludGVycnVwdC4KCiMjIExQSSBQZW5kaW5nIFRhYmxlIFZpcnR1YWxpc2F0 aW9uCgpBY2NvcmRpbmcgdG8gR0lDIHNwZWMgNC44LjUgdGhpcyB0YWJsZSBpcyBub3QgbmVjZXNz YXJpbHkgaW4gc3luYyBhbmQKdGhlIG1lY2hhbmlzbSB0byBmb3JjZSBhIHN5bmMgaXMgYElNUExF TUVOVEFUSU9OIERFRklORURgLCBoZW5jZSB3ZQpkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgoK IyMgRGV2aWNlIFRhYmxlIFZpcnR1YWxpc2F0aW9uCgpUaGUgSVBBLCBzaXplIGFuZCBjYWNoZWFi aWxpdHkgYXR0cmlidXRlcyBvZiB0aGUgZ3Vlc3QgZGV2aWNlIHRhYmxlCndpbGwgYmUgcmVjb3Jk ZWQgaW4gYHN0cnVjdCBkb21haW5gIHVwb24gd3JpdGUgdG8gYEdJVFNfQkFTRVIwYC4KCkluIG9y ZGVyIHRvIGxvb2t1cCBhbiBlbnRyeSBmb3IgYGRldmljZWA6CgogICAgZGVmaW5lIHtnZXQsc2V0 fV92ZGV2aWNlX2VudHJ5KGRvbWFpbiwgZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX3RhYmxlICplbnRy eSk6CiAgICAgICAgb2Zmc2V0ID0gZGV2aWNlKnNpemVvZihzdHJ1Y3QgdmRldmljZV90YWJsZSkK ICAgICAgICBpZiBvZmZzZXQgPiA8RFQgc2l6ZT46IGVycm9yCgogICAgICAgIGR0X2VudHJ5ID0g PERUIGJhc2UgSVBBPiArIGRldmljZSpzaXplb2Yoc3RydWN0IHZkZXZpY2VfdGFibGUpCiAgICAg ICAgcGFkZHIgPSBwMm1fbG9va3VwKGRvbWFpbiwgZHRfZW50cnksIHAybV9yYW0pCiAgICAgICAg cGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGN1cnJlbnQtPmRvbWFpbiwgcGFkZHI+PlBBR0VfU0hJ RlQsICZwMm10LCBQMk1fQUxMT0MpOwogICAgICAgIGlmICFwYWdlOiBlcnJvcgogICAgICAgIGlm ICFwYWdlX2lzX3JhbShwMm10KTogcHV0X3BhZ2UocGFnZSk7IGVycm9yOwoKICAgICAgICBkdF9t YXBwaW5nID0gbWFwX2RvbWFpbl9wYWdlKHBhZ2UpCgogICAgICAgIGlmIChzZXQpCiAgICAgICAg ICAgICBkdF9tYXBwaW5nWzxhcHByb3ByaWF0ZSBwYWdlIG9mZnNldCBmcm9tIGRldmljZT5dID0g KmVudHJ5OwogICAgICAgIGVsc2UKICAgICAgICAgICAgICplbnRyeSA9IGR0X21hcHBpbmdbPGFw cHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0Pl07CgogICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGR0X21h cHBpbmcpCiAgICAgICAgcHV0X3BhZ2UocGFnZSkKClNpbmNlIGV2ZXJ5dGhpbmcgaXMgYmFzZWQg dXBvbiBJUEEgKGd1ZXN0IGFkZHJlc3NlcykgYSBtYWxpY2lvdXMgZ3Vlc3QKY2FuIG9ubHkgcmVm ZXJlbmNlIGl0cyBvd24gUkFNIGhlcmUuCgojIyBJVFQgVmlydHVhbGlzYXRpb24KClRoZSBsb2Nh dGlvbiBvZiBhIFZJVFMgd2lsbCBoYXZlIGJlZW4gcmVjb3JkZWQgaW4gdGhlIGRvbWFpbiBEZXZp Y2UKVGFibGUgYnkgYSBgTUFQSWAgb3IgYE1BUFZJYCBjb21tYW5kIGFuZCBpcyBsb29rZWQgdXAg YXMgYWJvdmUuCgpUaGUgYHZpdHRgIGlzIGEgYHN0cnVjdCB2aXR0YDoKCiAgICBzdHJ1Y3Qgdml0 dCB7CiAgICAgICAgdWludDE2X3QgdmFsaWQ6MTsKICAgICAgICB1aW50MTZfdCBwYWQ6MTU7CiAg ICAgICAgdWludDE2X3QgY29sbGVjdGlvbjsKICAgICAgICB1aW50MzJfdCB2bHBpOwogICAgfTsK ICAgIEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHZpdHQpICE9IDgpOwoKQSBsb29rdXAgb2Nj dXJzIHNpbWlsYXIgdG8gZm9yIGEgZGV2aWNlIHRhYmxlLCB0aGUgb2Zmc2V0IGlzIHJhbmdlCmNo ZWNrZWQgYWdhaW5zdCB0aGUgYHZpdHRfc2l6ZWAgZnJvbSB0aGUgZGV2aWNlIHRhYmxlLiBUbyBs b29rdXAKYGV2ZW50YCBvbiBgZGV2aWNlYDoKCiAgICBkZWZpbmUge2dldCxzZXR9X3ZpdHRfZW50 cnkoZG9tYWluLCBkZXZpY2UsIGV2ZW50LCBzdHJ1Y3Qgdml0dCAqZW50cnkpOgogICAgICAgIGdl dF92ZGV2aWNlX2VudHJ5KGRvbWFpbiwgZGV2aWNlLCAmZHQpCgogICAgICAgIG9mZnNldCA9IGV2 ZW50KnNpemVvZihzdHJ1Y3Qgdml0dCk7CiAgICAgICAgaWYgb2Zmc2V0ID4gZHQtPnZpdHRfc2l6 ZTogZXJyb3IKCiAgICAgICAgdml0dF9lbnRyeSA9IGR0LT52aXRhX2lwYSArIGV2ZW50KnNpemVv ZihzdHJ1Y3Qgdml0dCkKICAgICAgICBwYWRkciA9IHAybV9sb29rdXAoZG9tYWluLCB2aXR0X2Vu dHJ5LCBwMm1fcmFtKQogICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihjdXJyZW50LT5k b21haW4sIHBhZGRyPj5QQUdFX1NISUZULCAmcDJtdCwgUDJNX0FMTE9DKTsKICAgICAgICBpZiAh cGFnZTogZXJyb3IKICAgICAgICBpZiAhcGFnZV9pc19yYW0ocDJtdCk6IHB1dF9wYWdlKHBhZ2Up OyBlcnJvcjsKCiAgICAgICAgdml0dF9tYXBwaW5nID0gbWFwX2RvbWFpbl9wYWdlKHBhZ2UpCgog ICAgICAgIGlmIChzZXQpCiAgICAgICAgICAgICB2aXR0X21hcHBpbmdbPGFwcHJvcHJpYXRlIHBh Z2Ugb2Zmc2V0IGZyb20gZXZlbnQ+XSA9ICplbnRyeTsKICAgICAgICBlbHNlCiAgICAgICAgICAg ICAqZW50cnkgPSB2aXR0X21hcHBpbmdbPGFwcHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0Pl07CgogICAg ICAgIHVubWFwX2RvbWFpbl9wYWdlKGVudHJ5KQogICAgICAgIHB1dF9wYWdlKHBhZ2UpCgpBZ2Fp biBzaW5jZSB0aGlzIGlzIElQQSBiYXNlZCBhIG1hbGljaW91cyBndWVzdCBjYW4gb25seSBwb2lu dCB0aGluZ3MKdG8gaXRzIG93biByYW0uCgojIyBDb2xsZWN0aW9uIFRhYmxlIFZpcnR1YWxpc2F0 aW9uCgpBIHBvaW50ZXIgdG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkgYGl0c19jb2xs ZWN0aW9uc2AgbWFwcGluZwpjb2xsZWN0aW9uIElEIHRvIHZjcHUgSUQgd2lsbCBiZSBhZGRlZCB0 byBgc3RydWN0IGRvbWFpbmAuIFRoZSBhcnJheQpzaGFsbCBoYXZlIGBucl92Y3B1cyArIDFgIGVu dHJpZXMgYW5kIHJlc2V0cyB0byB+MCAob3IgYW5vdGhlcgpleHBsaWNpdGx5IGludmFsaWQgdnBj dSBucikuCgojIyBWaXJ0dWFsIExQSSBpbmplY3Rpb24KCkFzIGRpc2N1c3NlZCBhYm92ZSB0aGUg YHZnaWNfdmNwdV9pbmplY3RfaXJxYCBmdW5jdGlvbmFsaXR5IHdpbGwgbmVlZAp0byBiZSBleHRl bmRlZCB0byBjb3ZlciB0aGlzIG5ldyBjYXNlLCBtb3N0IGxpa2VseSB2aWEgYSBuZXcKYHZnaWNf dmNwdV9pbmplY3RfbHBpYCBmcm9udGVuZCBmdW5jdGlvbi4gYHZnaWNfdmNwdV9pbmplY3RfaXJx YCB3aWxsCmFsc28gcmVxdWlyZSBzb21lIHJlZmFjdG9yaW5nIHRvIGFsbG93IHRoZSBwcmlvcml0 eSB0byBiZSBwYXNzZWQgaW4KZnJvbSB0aGUgY2FsbGVyIChzaW5jZSBgTFBJYCBwcm9wcml0eSBj b21lcyBmcm9tIHRoZSBgTFBJYCBDRkcgdGFibGUsCndoaWxlIGBTUElgIGFuZCBgUFBJYCBwcmlv cml0eSBpcyBjb25maWd1cmVkIHZpYSBvdGhlciBtZWFucykuCgpgdmdpY192Y3B1X2luamVjdF9s cGlgIHJlY2VpdmVzIGEgYHN0cnVjdCBkb21haW4gKmAgYW5kIGEgdmlydHVhbAppbnRlcnJ1cHQg bnVtYmVyIChjb3JyZXNwb25kaW5nIHRvIGEgdkxQSSkgYW5kIG5lZWRzIHRvIGZpZ3VyZSBvdXQK d2hpY2ggdmNwdSB0aGlzIHNob3VsZCBtYXAgdG8uCgpUbyBkbyB0aGlzIGl0IG11c3QgbG9vayB1 cCB0aGUgQ29sbGVjdGlvbiBJRCBhc3NvY2lhdGVkICh2aWEgdGhlIHZJVFMpCndpdGggdGhhdCBM UEkuCgpQcm9wb3NhbDogQWRkIGEgbmV3IGBpdHNfZGV2aWNlYCBmaWVsZCB0byBgc3RydWN0IGly cV9ndWVzdGAsIGEKcG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCBgc3RydWN0IGl0c19kZXZpY2Vg LiBUaGUgZXhpc3RpbmcgYHN0cnVjdAppcnFfZ3Vlc3QudmlycWAgZmllbGQgY29udGFpbnMgdGhl IGV2ZW50IElEIChwZXJoYXBzIHVzZSBhIGB1bmlvbmAKdG8gZ2l2ZSBhIG1vcmUgYXBwcm9wcmlh dGUgbmFtZSkgYW5kIF9ub3RfIHRoZSB2aXJ0dWFsIExQSS4gSW5qZWN0aW9uCnRoZW4gY29uc2lz dHMgb2Y6CgogICAgICAgIGQgPSBpcnFfZ3Vlc3QtPmRvbWFpbgogICAgICAgIHZpcnEgPSBpcnFf Z3Vlc3QtPnZpcnEKICAgICAgICBpdHNfZGV2aWNlID0gaXJxX2d1ZXN0LT5pdHNfZGV2aWNlCgog ICAgICAgIGdldF92aXR0X2VudHJ5KGQsIGl0c19kZXZpY2UtPnZpcnRfZGV2aWNlX2lkLCB2aXJx LCAmdml0dCkKICAgICAgICB2Y3B1ID0gZC0+aXRzX2NvbGxlY3Rpb25zW3ZpdHQuY29sbGVjdGlv bl0KCiAgICAgICAgaWYgIWlzX3ZhbGlkX2xwaSh2aXR0LnZscGkpOiBlcnJvcgoKICAgICAgICB2 Z2ljX3ZjcHVfaW5qZWN0X2xwaSgmZC0+dmNwdXNbdmNwdV0sIHZpdHQudmxwaSkKCklmIHRoZSBM UEkgaXMgY3VycmVudGx5IGRpc2FibGVkIHRoZW4gaXQgd2lsbCBiZSBxdWV1ZWQgYnkKYHZnaWNf dmNwdV9pbmplY3RfbHBpYCBhbmQgaW5qZWN0ZWQgaW4gcmVzcG9uc2UgdG8gYSBzdWJzZXF1ZW50 CmB2Z2ljX2VuYWJsZV9scGlgIGNhbGwuCgojIyBDb21tYW5kIFF1ZXVlIFZpcnR1YWxpc2F0aW9u CgpUaGUgY29tbWFuZCB0cmFuc2xhdGlvbi9lbXVsYXRpb24gaW4gdGhpcyBkZXNpZ24gaGFzIGJl ZW4gYXJyYW5nZWQgdG8KYmUgYXMgY2hlYXAgYXMgcG9zc2libGUgKGUuZy4gaW4gbWFueSBjYXNl cyB0aGUgYWN0aW9ucyBhcmUgTk9QcyksCmF2b2lkaW5nIHByZXZpb3VzIGNvbmNlcm5zIGFib3V0 IHRoZSBsZW5ndGggb2YgdGltZSB3aGljaCBhbiBlbXVsYXRlZAp3cml0ZSB0byBhIGBDV1JJVEVS YCByZWdpc3RlciBtYXkgYmxvY2sgdGhlIHZjcHUuCgpUaGUgdml0cyB3aWxsIHNpbXBseSB0cmFj ayBpdHMgcmVhZGVyIGFuZCB3cml0ZXIgcG9pbnRlcnMuIE9uIHdyaXRlCnRvIGBDV1JJVEVSYCBp dCB3aWxsIGltbWVkaWF0ZWx5IGFuZCBzeW5jaHJvbm91c2x5IHByb2Nlc3MgYWxsCmNvbW1hbmRz IGluIHRoZSBxdWV1ZSBhbmQgdXBkYXRlIGl0cyBzdGF0ZSBhY2NvcmRpbmdseS4KCkl0IG1pZ2h0 IGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHJ1ZGltZW50YXJ5IGZvcm0gb2YgcHJlZW1wdGlv biBieQpwZXJpb2RpY2FsbHkgKGFzIGRldGVybWluZWQgYnkgYGh5cGVyY2FsbF9wcmVlbXB0X2No ZWNrKClgKSByZXR1cm5pbmcKdG8gdGhlIGd1ZXN0IHdpdGhvdXQgaW5jcmVtZW50aW5nIFBDIGJ1 dCB3aXRoIHVwZGF0ZWQgaW50ZXJuYWwKYENSRUFEUmAgc3RhdGUsIG1lYW5pbmcgaXQgd2lsbCBy ZWV4ZWN1dGUgdGhlIHdyaXRlIHRvIGBDV1JJVEVSYCBhbmQKd2UgY2FuIHBpY2t1cCB3aGVyZSB3 ZSBsZWZ0IG9mZiBmb3IgYW5vdGhlciBpdGVyYXRpb24uIFRoaXMgYXQgbGVhc3QKbGV0cyB1cyBz Y2hlZHVsZSBvdGhlciB2Y3B1cyBldGMgYW5kIHByZXZlbnRzIGEgbW9ub3BvbHkuCgojIyBJVFMg Q29tbWFuZCBUcmFuc2xhdGlvbgoKVGhpcyBzZWN0aW9uIGlzIGJhc2VkIG9uIHRoZSBzZWN0aW9u IDUuMTMgb2YgR0lDdjMgc3BlY2lmaWNhdGlvbgooUFJEMDMtR0VOQy0wMTA3NDUgMjQuMCkgYW5k IHByb3ZpZGVzIGNvbmNyZXRlIGlkZWFzIG9mIGhvdyB0aGlzIGNhbgpiZSBpbnRlcnByZXRlZCBm b3IgWGVuLgoKVGhlIElUUyBwcm92aWRlcyAxMiBjb21tYW5kcyBpbiBvcmRlciB0byBtYW5hZ2Ug aW50ZXJydXB0IGNvbGxlY3Rpb25zLApkZXZpY2VzIGFuZCBpbnRlcnJ1cHRzLiBQb3NzaWJsZSBj b21tYW5kIHBhcmFtZXRlcnMgYXJlOgoKLSBEZXZpY2UgSUQgKGBEZXZpY2VgKSAoY2FsbGVkIGBk ZXZpY2VgIGluIHRoZSBzcGVjKS4KLSBFdmVudCBJRCAoYEV2ZW50YCkgKGNhbGxlZCBgSURgIGlu IHRoZSBzcGVjKS4gVGhpcyBpcyBhbiBpbmRleCBpbnRvCiAgYSBkZXZpY2VzIGBJVFRgLgotIENv bGxlY3Rpb24gSUQgKGBDb2xsZWN0aW9uYCkgKGNhbGxlZCBgY29sbGVjdGlvbmAgaW4gdGhlIHNw ZWMpCi0gTFBJIElEIChgTFBJYCkgKGNhbGxlZCBgcElEYCBpbiB0aGUgc3BlYykKLSBUYXJnZXQg QWRkcmVzcyAoYFRBYCkgKGNhbGxlZCBgVEFgIGluIHRoZSBzcGVjYCkKClRoZXNlIHBhcmFtZXRl cnMgbmVlZCB0byBiZSB2YWxpZGF0ZWQgYW5kIHRyYW5zbGF0ZWQgZnJvbSBWaXJ0dWFsIChgdmAK cHJlZml4KSB0byBQaHlzaWNhbCAoYHBgIHByZWZpeCkuCgpOb3RlLCB3ZSBkaWZmZXIgZnJvbSB0 aGUgbmFtaW5nIGluIHRoZSBHSUMgc3BlYyBmb3IgY2xhcml0eSwgaW4KcGFydGljdWxhciB3ZSB1 c2UgYEV2ZW50YCBub3QgYElEYCBhbmQgYExQSWAgbm90IGBwSURgIHRvIHJlZHVjZQpjb25mdXNp b24sIGVzcGVjaWFsbHkgd2hlbiBgdmAgYW5kIGBwYCBzdWZmaXhlcyBhcmUgdXNlZCBkdWUgdG8K dmlydHVhbGlzYXRpb24uCgojIyMgUGFyYW1ldGVyIFZhbGlkYXRpb24gLyBUcmFuc2xhdGlvbgoK RWFjaCBjb21tYW5kIGNvbnRhaW5zIHBhcmFtZXRlcnMgdGhhdCBuZWVkcyB0byBiZSB2YWxpZGF0 ZWQgYmVmb3JlIGFueQp1c2FnZSBpbiBYZW4gb3IgcGFzc2luZyB0byB0aGUgaGFyZHdhcmUuCgoj IyMjIERldmljZSBJRCAoYERldmljZWApCgpDb3JyZXNwb25kaW5nIElUVCBvYnRhaW5lZCBieSBs b29raW5nIHVwIGFzIGRlc2NyaWJlZCBhYm92ZS4KClRoZSBwaHlzaWNhbCBgc3RydWN0IGl0c19k ZXZpY2VgIGNhbiBiZSBmb3VuZCBieSBsb29raW5nIHVwIGluIHRoZQpkb21haW4ncyBkZXZpY2Ug bWFwLgoKSWYgbG9va3VwIGZhaWxzIG9yIHRoZSByZXN1bHRpbmcgZGV2aWNlIHRhYmxlIGVudHJ5 IGlzIGludmFsaWQgdGhlbgp0aGUgRGV2aWNlIGlzIGludmFsaWQuCgojIyMjIEV2ZW50IElEIChg RXZlbnRgKQoKVmFsaWRhdGVkIGFnYWluc3QgZW11bGF0ZWQgYEdJVFNfVFlQRVIuSURiaXRzYC4K Ckl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHJhbnNsYXRlIGEgYHZFdmVudGAuCgojIyMjIExQSSAo YExQSWApCgpWYWxpZGF0ZWQgYWdhaW5zdCBlbXVsYXRlZCBgR0lUU19UWVBFUi5JRGJpdHNgLgoK SXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cmFuc2xhdGUgYSBgdkxQSWAgaW50byBhIGBwTFBJYCBz aW5jZSB0aGUKdGFibGVzIGFsbCBjb250YWluIGB2TFBJYC4gKFRyYW5zbGF0aW9uIGZyb20gYHBM UElgIHRvIGB2TFBJYCBoYXBwZW5zCnZpYSBgc3RydWN0IGlycV9ndWVzdGAgd2hlbiB3ZSByZWNl aXZlIHRoZSBJUlEpLgoKIyMjIyBJbnRlcnJ1cHQgQ29sbGVjdGlvbiAoYENvbGxlY3Rpb25gKQoK VGhlIGBDb2xsZWN0aW9uYCBpcyB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgc2l6ZSBvZiB0aGUgcGVy LWRvbWFpbgpgaXRzX2NvbGxlY3Rpb25zYCBhcnJheSAoaS5lLiBucl92Y3B1cyArIDEpIGFuZCB0 aGVuIHRyYW5zbGF0ZWQgYnkgYQpzaW1wbGUgbG9va3VwIGluIHRoYXQgYXJyYXkuCgogICAgIHZj cHVfbnIgPSBkLT5pdHNfY29sbGVjdGlvbnNbQ29sbGVjdGlvbl0KCkEgcmVzdWx0ID4gYG5yX2Nw dXNgIGlzIGludmFsaWQKCiMjIyMgVGFyZ2V0IEFkZHJlc3MgKGBUQWApCgpUaGlzIHBhcmFtZXRl ciBpcyB1c2VkIGluIGNvbW1hbmRzIHdoaWNoIG1hbmFnZSBjb2xsZWN0aW9ucy4gSXQgaXMgYQp1 bmlxdWUgaWRlbnRpZmllciBwZXIgcHJvY2Vzc29yLgoKV2UgaGF2ZSBjaG9zZW4gdG8gaW1wbGVt ZW50IGBHSVRTX1RZUEVSLlBUQWAgYXMgMCwgaGVuY2UgYHZUQWAgc2ltcGx5CmNvcnJlc3BvbmRz IHRvIHRoZSBgdmNwdV9pZGAsIHNvIG9ubHkgbmVlZHMgYm91bmRzIGNoZWNraW5nIGFnYWluc3QK YG5yX3ZjcHVzYC4KCiMjIyBDb21tYW5kcwoKVG8gYmUgcmVhZCB3aXRoIHJlZmVyZW5jZSB0byBz cGVjIGZvciBlYWNoIGNvbW1hbmQgKHdoaWNoIGluY2x1ZGVzCmVycm9yIGNoZWNrcyBldGMgd2hp Y2ggYXJlIG9taXR0ZWQgaGVyZSkuCgpJdCBpcyBhc3N1bWVkIHRoYXQgaW5wdXRzIHdpbGwgYmUg Ym91bmRzIGFuZCB2YWxpZGl0eSBjaGVja2VkIGFzCmRlc2NyaWJlZCBhYm92ZSwgdGh1cyBlcnJv ciBoYW5kbGluZyBpcyBvbWl0dGVkIGZvciBicmV2aXR5IChpLmUuIGlmCmdldCBhbmQvb3Igc2V0 IGZhaWwgdGhlbiBzbyBiZSBpdCkuIEluIGdlbmVyYWwgaW52YWxpZCBjb21tYW5kcyBhcmUKc2lt cGx5IGlnbm9yZWQuCgojIyMjIGBNQVBEYDogTWFwIGEgcGh5c2ljYWwgZGV2aWNlIHRvIGFuIElU VC4KCl9Gb3JtYXRfOiBgTUFQRCBEZXZpY2UsIFZhbGlkLCBJVFQgQWRkcmVzcywgSVRUIFNpemVg LgoKX1NwZWNfOiA1LjEzLjExCgpgTUFQRGAgaXMgc2VudCB3aXRoIGBWYWxpZGAgYml0IHNldCBp ZiB0aGUgbWFwcGluZyBpcyB0byBiZSBhZGRlZCBhbmQKcmVzZXQgd2hlbiBtYXBwaW5nIGlzIHJl bW92ZWQuCgpXaGVuIHRoZSBgVmFsaWRgIGJpdCBpcyBzZXQgdGhlbiB0aGUgcmFuZ2UgYElUVCBB ZGRyZXNzYCB0byBgSVRUCkFkZHJlc3NgICsgYElUVCBTaXplYCBuZWVkIG5vdCBiZSB2YWxpZGF0 ZWQsIHRoaXMgaXMgZG9uZSBpbgpge2dldCxzZXR9X3ZkZXZpY2VfZW50cnlgIHdoZW4gY2FsbGlu ZyB0aGUgYHAybV9sb29rdXBgCmZ1bmN0aW9uLiBWYWxpZGF0aW5nIHRoZSBtZW1vcnkgYXQgYE1B UERgIHRpbWUgd291bGQgc2VydmUgbm8gcHVycG9zZQpzaW5jZSB0aGUgZ3Vlc3QgY291bGQgc3Vi c2VxdWVudGx5IGJhbGxvb24gaXQgb3V0IG9yIGdyYW50IG1hcCBvdmVyIGl0IGV0Yy4KClRoZSBk b21haW4ncyBkZXZpY2UgdGFibGUgaXMgdXBkYXRlZCB3aXRoIHRoZSBwcm92aWRlZCBpbmZvcm1h dGlvbi4KClRoZSBgdml0dF9tYXBkYCBmaWVsZCBpcyBzZXQgYWNjb3JkaW5nIHRvIHRoZSBgVmFs aWRgIGZsYWcgaW4gdGhlCmNvbW1hbmQ6CgogICAgZHRfZW50cnkudml0dF9pcGEgPSBJVFQgQWRk cmVzcwogICAgZHRfZW50cnkudml0dF9zaXplID0gSVRUIFNpemUKICAgIHNldF92ZGV2aWNlX2Vu dHJ5KGN1cnJlbnQtPmRvbWFpbiwgRGV2aWNlLCAmZHRfZW50cnkpCgojIyMjIGBNQVBDYDogTWFw IGFuIGludGVycnVwdCBjb2xsZWN0aW9uIHRvIGEgdGFyZ2V0IHByb2Nlc3NvcgoKX0Zvcm1hdF86 IGBNQVBDIENvbGxlY3Rpb24sIFRBYAoKX1NwZWNfOiA1LjEzLjEyCgpUaGUgdXBkYXRlZCBgdlRB YCAoYSB2Y3B1IG51bWJlcikgaXMgcmVjb3JkZWQgaW4gdGhlIGBpdHNfY29sbGVjdGlvbnNgCmFy cmF5IG9mIHRoZSBkb21haW4gc3RydWN0OgoKICAgIGQtPml0c19jb2xsZWN0aW9uc1tDb2xsZWN0 aW9uXSA9IFRBCgojIyMjIGBNQVBJYDogTWFwIGFuIGludGVycnVwdCB0byBhbiBpbnRlcnJ1cHQg Y29sbGVjdGlvbi4KCl9Gb3JtYXRfOiBgTUFQSSBEZXZpY2UsIExQSSwgQ29sbGVjdGlvbmAKCl9T cGVjXzogNS4xMy4xMwoKQWZ0ZXIgdmFsaWRhdGlvbjoKCiAgICB2aXR0LnZhbGlkID0gVHJ1ZQog ICAgdml0dC5jb2xsZWN0aW9uID0gQ29sbGVjdGlvbgogICAgdml0dC52bHBpID0gTFBJCiAgICBz ZXRfdml0dF9lbnRyeShjdXJyZW50LT5kb21pYW4sIERldmljZSwgTFBJLCAmdml0dCkKCiMjIyMg YE1BUFZJYDogTWFwIGFuIGlucHV0IGlkZW50aWZpZXIgdG8gYSBwaHlzaWNhbCBpbnRlcnJ1cHQg YW5kIGFuIGludGVycnVwdCBjb2xsZWN0aW9uLgoKRm9ybWF0OiBgTUFQVkkgRGV2aWNlLCBFdmVu dCwgTFBJLCBDb2xsZWN0aW9uYAoKICAgIHZpdHQudmFsaWQgPSBUcnVlCiAgICB2aXR0LmNvbGxl Y3Rpb24gPSBDb2xsZWN0aW9uCiAgICB2aXR0LnZscGkgPSBMUEkKICAgIHNldF92aXR0X2VudHJ5 KGN1cnJlbnQtPm9kbWlhbiwgRGV2aWNlLCBFdmVudCwgJnZpdHQpCgojIyMjIGBNT1ZJYDogUmVk aXJlY3QgaW50ZXJydXB0IHRvIGFuIGludGVycnVwdCBjb2xsZWN0aW9uCgpfRm9ybWF0XzogYE1P VkkgRGV2aWNlLCBFdmVudCwgQ29sbGVjdGlvbmAKCl9TcGVjXzogNS4xMy4xNQoKICAgIGdldF92 aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWFpbiwgRGV2aWNlLCBFdmVudCwgJnZpdHQpCiAgICB2aXR0 LmNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uCiAgICBzZXRfdml0dF9lbnRyeShjdXJyZW50LT5kb21h aW4sIERldmljZSwgRXZlbnQsICZ2aXR0KQoKICAgIFhYWCBjb25zaWRlciBoZWxwZXIgd2hpY2gg c2V0cyBmaWVsZCB3aXRob3V0IG1hcHBpbmcvdW5tYXBwaW5nCiAgICB0d2ljZS4KClRoaXMgY29t bWFuZCBpcyBzdXBwb3NlZCB0byBtb3ZlIGFueSBwZW5kaW5nIGludGVycnVwdHMgYXNzb2NpYXRl ZAp3aXRoIGBFdmVudGAgdG8gdGhlIHZjcHUgaW1wbGllZCBieSB0aGUgbmV3IGBDb2xsZWN0aW9u YCwgd2hpY2ggaXMKdHJpY2t5LiBGb3Igbm93IHdlIGlnbm9yZSB0aGlzIHJlcXVpcmVtZW50IChh cyB3ZSBkbyBmb3IKYEdJQ0RfSVJPVVRFUm5gIGFuZCBgR0lDRF9UQVJHRVRSbmAgZm9yIG90aGVy IGludGVycnVwdCB0eXBlcykuCgojIyMjIGBESVNDQVJEYDogRGlzY2FyZCBpbnRlcnJ1cHQgcmVx dWVzdHMKCl9Gb3JtYXRfOiBgRElTQ0FSRCBEZXZpY2UsIEV2ZW50YAoKX1NwZWNfOiA1LjEzLjE2 CgogICAgZ2V0X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9tYWluLCBEZXZpY2UsIEV2ZW50LCAmdml0 dCkKICAgIHZpdHQudmFsaWQgPSBGYWxzZQogICAgc2V0X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9t YWluLCBEZXZpY2UsIEV2ZW50LCAmdml0dCkKCiAgICBYWFggY29uc2lkZXIgaGVscGVyIHdoaWNo IHNldHMgZmllbGQgd2l0aG91dCBtYXBwaW5nL3VubWFwcGluZwogICAgdHdpY2UuCgpUaGlzIGNv bW1hbmQgaXMgc3VwcG9zZWQgdG8gY2xlYXIgdGhlIHBlbmRpbmcgc3RhdGUgb2YgYW55IGFzc29j aWF0ZWQKaW50ZXJydXB0LiBUaGlzIHJlcXVpcmVtZW50IGlzIGlnbm9yZWQgKGd1ZXN0IG1heSBz ZWUgYSBzcHVyaW91cwppbnRlcnJ1cHQpLgoKIyMjIyBgSU5WYDogQ2xlYW4gYW55IGNhY2hlcyBh c3NvY2lhdGVkIHdpdGggaW50ZXJydXB0CgpfRm9ybWF0XzogYElOViBEZXZpY2UsIEV2ZW50YAoK X1NwZWNfOiA1LjEzLjE3CgpTaW5jZSBMUEkgQ29uZmlndXJhdGlvbiB0YWJsZSB1cGRhdGVzIGFy ZSBub3QgdHJhcHBlZCBhbmQgdGhlIGNvbmZpZwppcyByZWFkIG9uIHVzZSwgdGhlcmUgaXMgbm90 aGluZyB0byBkbyBoZXJlLgoKIyMjIyBgSU5WQUxMYDogQ2xlYW4gYW55IGNhY2hlcyBhc3NvY2lh dGVkIHdpdGggYW4gaW50ZXJydXB0IGNvbGxlY3Rpb24KCl9Gb3JtYXRfOiBgSU5WQUxMIENvbGxl Y3Rpb25gCgpfU3BlY186IDUuMTMuMTkKClNpbmNlIExQSSBDb25maWd1cmF0aW9uIHRhYmxlIHVw ZGF0ZXMgYXJlIG5vdCB0cmFwcGVkIGFuZCB0aGUgY29uZmlnCmlzIHJlYWQgb24gdXNlLCB0aGVy ZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuCgojIyMjIGBJTlRgOiBHZW5lcmF0ZSBhbiBpbnRlcnJ1 cHQKCl9Gb3JtYXRfOiBgSU5UIERldmljZSwgRXZlbnRgCgpfU3BlY186IDUuMTMuMjAKClRoZSBg dml0dGAgZW50cnkgY29ycmVzb25kaW5nIHRvIGBEZXZpY2UsRXZlbnRgIGlzIGxvb2tlZCB1cCBh bmQgdGhlbjoKCiAgICBnZXRfdml0dF9lbnRyeShjdXJyZW50LT5kb21haW4sIERldmljZSwgRXZl bnQsICZ2aXR0KQogICAgdmdpY192Y3B1X2luamVjdF9scGkoY3VycmVudC0+ZG9tYWluLCB2aXR0 LnZscGkpCgpfX05vdGVfOiBXaGVyZSAoRGV2aWNlLEV2ZW50KSBpcyByZWFsIG1heSBuZWVkIGNv bnNpZGVyYXRpb24gb2YKaW50ZXJhY3Rpb25zIHdpdGggcmVhbCBMUElzIGJlaW5nIGRlbGl2ZXJl ZDogSnVsaWVuIGhhZCBjb25jZXJucyBhYm91dApYZW4ncyBpbnRlcm5hbCBJUlEgU3RhdGUgdHJh Y2tpbmcuIGlmIHRoaXMgaXMgYSBwcm9ibGVtIHRoZW4gbWF5IG5lZWQKY2hhbmdlcyB0byBJUlEg c3RhdGUgdHJhY2tpbmcsIG9yIHRvIGluamVjdCBhcyBhIHJlYWwgSVJRIGFuZCBsZXQKcGh5c2lj YWwgSVJRIGluamVjdGlvbiBoYW5kbGUgaXQsIG9yIHdyaXRlIHRvIGBHSUNSX1NFVExQSVJgPwoK IyMjIyBgQ0xFQVJgOiBDbGVhciB0aGUgcGVuZGluZyBzdGF0ZSBvZiBhbiBpbnRlcnJ1cHQKCl9G b3JtYXRfOiBgQ0xFQVIgRGV2aWNlLCBFdmVudGAKCl9TcGVjXzogNS4xMy4yMQoKU2hvdWxkIGNs ZWFyIHBlbmRpbmcgc3RhdGUgb2YgTFBJLiBJZ25vcmUgKGd1ZXN0IG1heSBzZWUgYSBzcHVyaW91 cwppbnRlcnJ1cHQpLgoKIyMjIyBgU1lOQ2A6IFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYW55IG91 dHN0YW5kaW5nIElUUyBhY3Rpb25zIGZvciBjb2xsZWN0aW9uCgpfRm9ybWF0XzogYFNZTkMgVEFg CgpfU3BlY186IDUuMTMuMjIKClRoaXMgY29tbWFuZCBjYW4gYmUgaWdub3JlZC4KCiMgR0lDdjQg RGlyZWN0IEludGVycnVwdCBJbmplY3Rpb24KCkdJQ3Y0IHdpbGwgZGlyZWN0bHkgbWFyayB0aGUg TFBJcyBwZW5kaW5nIGluIHRoZSB2aXJ0dWFsIHBlbmRpbmcgdGFibGUKd2hpY2ggaXMgcGVyLXJl ZGlzdHJpYnV0b3IgKGkuZSBwZXItdkNQVSkuCgpMUElzIHdpbGwgYmUgcmVjZWl2ZWQgYnkgdGhl IGd1ZXN0IHRoZSBzYW1lIHdheSBhcyBhbiBTUElzLiBJLmUgdHJhcCBpbgpJUlEgbW9kZSB0aGVu IHJlYWQgSUNDX0lBUjFfRUwxIChmb3IgR0lDdjMpLgoKVGhlcmVmb3JlIEdJQ3Y0IHdpbGwgbm90 IHJlcXVpcmUgb25lIHZJVFMgcGVyIHBJVFMuCgojIEV2ZW50IENoYW5uZWxzCgpJdCBoYXMgYmVl biBwcm9wb3NlZCB0aGF0IGl0IG1pZ2h0IGJlIG5pY2UgdG8gaW5qZWN0IGV2ZW50IGNoYW5uZWxz IGFzCkxQSXMgaW4gdGhlIGZ1dHVyZS4gV2hldGhlciBvciBub3QgdGhhdCB3b3VsZCBpbnZvbHZl IGFueSBzb3J0IG9mIHZJVFMKaXMgdW5jbGVhciwgYnV0IGlmIGl0IGRpZCB0aGVuIGl0IHdvdWxk IGxpa2VseSBiZSBhIHNlcGFyYXRlIGVtdWxhdGlvbgp0byB0aGUgdklUUyBlbXVsYXRpb24gdXNl ZCB3aXRoIGEgcElUUyBhbmQgYXMgc3VjaCBpcyBub3QgY29uc2lkZXJlZApmdXJ0aGVyIGhlcmUu CgojIEdsb3NzYXJ5CgoqIF9NU0lfOiBNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHQKKiBfSVRT XzogSW50ZXJydXB0IFRyYW5zbGF0aW9uIFNlcnZpY2UKKiBfR0lDXzogR2VuZXJpYyBJbnRlcnJ1 cHQgQ29udHJvbGxlcgoqIF9MUElfOiBMb2NhbGl0eS1zcGVjaWZpYyBQZXJpcGhlcmFsIEludGVy cnVwdAoKIyBSZWZlcmVuY2VzCgoiR0lDIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIiBQUkQw My1HRU5DLTAxMDc0NSAyNC4wLgoKIklPIFJlbWFwcGluZyBUYWJsZSBTeXN0ZW0gU29mdHdhcmUg b24gQVJNwq4gUGxhdGZvcm1zIiBBUk0gREVOIDAwNDlBLgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==