From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,03/10] cpufreq: exynos: Remove support for Exynos5440 From: Krzysztof Kozlowski Message-Id: <20180424203239.21885-4-krzk@kernel.org> Date: Tue, 24 Apr 2018 22:32:32 +0200 To: Kukjin Kim , Krzysztof Kozlowski , Rob Herring , Mark Rutland , Tejun Heo , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Michael Turquette , Stephen Boyd , "Rafael J. Wysocki" , Viresh Kumar , Zhang Rui , Eduardo Valentin , Russell King , Hans de Goede , Linus Walleij , Andi Shyti , Mark Brown , Bartlomiej Zolnierkiewicz , Alan Stern , Greg Kroah-Hartman , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org, linux-clk@vger.kernel.org, linux-pm@vger.kernel.org, linux-i2c@vger.kernel.org, linux-gpio@vger.kernel.org, linux-spi@vger.kernel.org, linux-usb@vger.kernel.org Cc: Marek Szyprowski , Arnd Bergmann , Olof Johansson , Jaehoon Chung List-ID: VGhlIEV4eW5vczU0NDAgaXMgbm90IGFjdGl2ZWx5IGRldmVsb3BlZCwgdGhlcmUgYXJlIG5vIGRl dmVsb3BtZW50CmJvYXJkcyBhdmFpbGFibGUgYW5kIHByb2JhYmx5IHRoZXJlIGFyZSBubyByZWFs IHByb2R1Y3RzIHdpdGggaXQuClJlbW92ZSB3aWRlLXRyZWUgc3VwcG9ydCBmb3IgRXh5bm9zNTQ0 MC4KClNpZ25lZC1vZmYtYnk6IEtyenlzenRvZiBLb3psb3dza2kgPGtyemtAa2VybmVsLm9yZz4K LS0tCiAuLi4vYmluZGluZ3MvY3B1ZnJlcS9jcHVmcmVxLWV4eW5vczU0NDAudHh0ICAgICAgICB8 ICAyOCAtLQogZHJpdmVycy9jcHVmcmVxL0tjb25maWcuYXJtICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMTQgLQogZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgLQogZHJpdmVycy9jcHVmcmVxL2V4eW5vczU0NDAtY3B1ZnJlcS5jICAgICAg ICAgICAgICAgfCA0NTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDQ5 NSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvY3B1ZnJlcS9jcHVmcmVxLWV4eW5vczU0NDAudHh0CiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9jcHVmcmVxL2V4eW5vczU0NDAtY3B1ZnJlcS5jCgpkaWZmIC0tZ2l0IGEv RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2NwdWZyZXEvY3B1ZnJlcS1leHlub3M1 NDQwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jcHVmcmVxL2NwdWZy ZXEtZXh5bm9zNTQ0MC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZmYxYTU3 NDM2Zi4uMDAwMDAwMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9jcHVmcmVxL2NwdWZyZXEtZXh5bm9zNTQ0MC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOCAr MCwwIEBACi0KLUV4eW5vczU0NDAgY3B1ZnJlcSBkcml2ZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0K LQotRXh5bm9zNTQ0MCBTb0MgY3B1ZnJlcSBkcml2ZXIgZm9yIENQVSBmcmVxdWVuY3kgc2NhbGlu Zy4KLQotUmVxdWlyZWQgcHJvcGVydGllczoKLS0gaW50ZXJydXB0czogSW50ZXJydXB0IHRvIGtu b3cgdGhlIGNvbXBsZXRpb24gb2YgY3B1IGZyZXF1ZW5jeSBjaGFuZ2UuCi0tIG9wZXJhdGluZy1w b2ludHM6IFRhYmxlIG9mIGZyZXF1ZW5jaWVzIGFuZCB2b2x0YWdlIENQVSBjb3VsZCBiZSB0cmFu c2l0aW9uZWQgaW50bywKLQlpbiB0aGUgZGVjcmVhc2luZyBvcmRlci4gRnJlcXVlbmN5IHNob3Vs ZCBiZSBpbiBLSHogdW5pdHMgYW5kIHZvbHRhZ2UKLQlzaG91bGQgYmUgaW4gbWljcm92b2x0cy4K LQotT3B0aW9uYWwgcHJvcGVydGllczoKLS0gY2xvY2stbGF0ZW5jeTogQ2xvY2sgbW9uaXRvciBs YXRlbmN5IGluIG1pY3Jvc2Vjb25kLgotCi1BbGwgdGhlIHJlcXVpcmVkIGxpc3RlZCBhYm92ZSBt dXN0IGJlIGRlZmluZWQgdW5kZXIgbm9kZSBjcHVmcmVxLgotCi1FeGFtcGxlOgotLS0tLS0tLS0K LQljcHVmcmVxQDE2MDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDQwLWNw dWZyZXEiOwotCQlyZWcgPSA8MHgxNjAwMDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDU3 IDA+OwotCQlvcGVyYXRpbmctcG9pbnRzID0gPAotCQkJCTEwMDAwMDAgOTc1MDAwCi0JCQkJODAw MDAwICA5MjUwMDA+OwotCQljbG9jay1sYXRlbmN5ID0gPDEwMDAwMD47Ci0JfTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLmFybSBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmln LmFybQppbmRleCA3ZjU2ZmU1MTgzZjIuLjUzOGE0MDA0YTJjNSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9jcHVmcmVxL0tjb25maWcuYXJtCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLmFybQpA QCAtODEsMjAgKzgxLDYgQEAgY29uZmlnIEFSTV9CUkNNU1RCX0FWU19DUFVGUkVRX0RFQlVHCiAK IAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAotY29uZmlnIEFSTV9FWFlOT1M1NDQwX0NQVUZSRVEK LQl0cmlzdGF0ZSAiU0FNU1VORyBFWFlOT1M1NDQwIgotCWRlcGVuZHMgb24gU09DX0VYWU5PUzU0 NDAKLQlkZXBlbmRzIG9uIEhBVkVfQ0xLICYmIE9GCi0Jc2VsZWN0IFBNX09QUAotCWRlZmF1bHQg eQotCWhlbHAKLQkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIFNhbXN1bmcgRVhZ Tk9TNTQ0MAotCSAgU29DLiBUaGUgbmF0dXJlIG9mIGV4eW5vczU0NDAgY2xvY2sgY29udHJvbGxl ciBpcwotCSAgZGlmZmVyZW50IHRoYW4gcHJldmlvdXMgZXh5bm9zIGNvbnRyb2xsZXJzIHNvIG5v dCB1c2luZwotCSAgdGhlIGNvbW1vbiBleHlub3MgZnJhbWV3b3JrLgotCi0JICBJZiBpbiBkb3Vi dCwgc2F5IE4uCi0KIGNvbmZpZyBBUk1fSElHSEJBTktfQ1BVRlJFUQogCXRyaXN0YXRlICJDYWx4 ZWRhIEhpZ2hiYW5rLWJhc2VkIgogCWRlcGVuZHMgb24gQVJDSF9ISUdIQkFOSyAmJiBDUFVGUkVR X0RUICYmIFJFR1VMQVRPUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlIGIv ZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlCmluZGV4IDhkMjRhZGUzYmQwMi4uNTY3MjRmODY3Zjc4 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcHVm cmVxL01ha2VmaWxlCkBAIC01Niw3ICs1Niw2IEBAIG9iai0kKENPTkZJR19BUk1fQVJNQURBXzM3 WFhfQ1BVRlJFUSkJKz0gYXJtYWRhLTM3eHgtY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfQVJNX0JS Q01TVEJfQVZTX0NQVUZSRVEpCSs9IGJyY21zdGItYXZzLWNwdWZyZXEubwogb2JqLSQoQ09ORklH X0FDUElfQ1BQQ19DUFVGUkVRKQkJKz0gY3BwY19jcHVmcmVxLm8KIG9iai0kKENPTkZJR19BUkNI X0RBVklOQ0kpCQkrPSBkYXZpbmNpLWNwdWZyZXEubwotb2JqLSQoQ09ORklHX0FSTV9FWFlOT1M1 NDQwX0NQVUZSRVEpCSs9IGV4eW5vczU0NDAtY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfQVJNX0hJ R0hCQU5LX0NQVUZSRVEpCSs9IGhpZ2hiYW5rLWNwdWZyZXEubwogb2JqLSQoQ09ORklHX0FSTV9J TVg2UV9DUFVGUkVRKQkJKz0gaW14NnEtY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfQVJNX0tJUktX T09EX0NQVUZSRVEpCSs9IGtpcmt3b29kLWNwdWZyZXEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9j cHVmcmVxL2V4eW5vczU0NDAtY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2V4eW5vczU0NDAt Y3B1ZnJlcS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzJjYWEzODZlY2UuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zNTQ0MC1jcHVmcmVxLmMKKysr IC9kZXYvbnVsbApAQCAtMSw0NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMyBT YW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20K LSAqCi0gKiBBbWl0IERhbmllbCBLYWNoaGFwIDxhbWl0LmRhbmllbEBzYW1zdW5nLmNvbT4KLSAq Ci0gKiBFWFlOT1M1NDQwIC0gQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQKLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxp bnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9l cnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5o PgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9vcHAuaD4K LSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Ci0KLS8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFhNVV9EVkZTX0NUUkwJ CTB4MDA2MAotI2RlZmluZSBYTVVfUE1VX1AwXzcJCTB4MDA2NAotI2RlZmluZSBYTVVfQzBfM19Q U1RBVEUJCTB4MDA5MAotI2RlZmluZSBYTVVfUF9MSU1JVAkJMHgwMGEwCi0jZGVmaW5lIFhNVV9Q X1NUQVRVUwkJMHgwMGE0Ci0jZGVmaW5lIFhNVV9QTVVFVlRFTgkJMHgwMGQwCi0jZGVmaW5lIFhN VV9QTVVJUlFFTgkJMHgwMGQ0Ci0jZGVmaW5lIFhNVV9QTVVJUlEJCTB4MDBkOAotCi0vKiBQTVUg bWFzayBhbmQgc2hpZnQgZGVmaW5hdGlvbnMgKi8KLSNkZWZpbmUgUF9WQUxVRV9NQVNLCQkweDcK LQotI2RlZmluZSBYTVVfRFZGU19DVFJMX0VOX1NISUZUCTAKLQotI2RlZmluZSBQMF83X0NQVUNM S0RFVl9TSElGVAkyMQotI2RlZmluZSBQMF83X0NQVUNMS0RFVl9NQVNLCTB4NwotI2RlZmluZSBQ MF83X0FUQkNMS0RFVl9TSElGVAkxOAotI2RlZmluZSBQMF83X0FUQkNMS0RFVl9NQVNLCTB4Nwot I2RlZmluZSBQMF83X0NTQ0xLREVWX1NISUZUCTE1Ci0jZGVmaW5lIFAwXzdfQ1NDTEtERVZfTUFT SwkweDcKLSNkZWZpbmUgUDBfN19DUFVFTUFfU0hJRlQJMjgKLSNkZWZpbmUgUDBfN19DUFVFTUFf TUFTSwkweGYKLSNkZWZpbmUgUDBfN19MMkVNQV9TSElGVAkyNAotI2RlZmluZSBQMF83X0wyRU1B X01BU0sJCTB4ZgotI2RlZmluZSBQMF83X1ZERF9TSElGVAkJOAotI2RlZmluZSBQMF83X1ZERF9N QVNLCQkweDdmCi0jZGVmaW5lIFAwXzdfRlJFUV9TSElGVAkJMAotI2RlZmluZSBQMF83X0ZSRVFf TUFTSwkJMHhmZgotCi0jZGVmaW5lIEMwXzNfUFNUQVRFX1ZBTElEX1NISUZUCTgKLSNkZWZpbmUg QzBfM19QU1RBVEVfQ1VSUl9TSElGVAk0Ci0jZGVmaW5lIEMwXzNfUFNUQVRFX05FV19TSElGVAkw Ci0KLSNkZWZpbmUgUFNUQVRFX0NIQU5HRURfRVZURU5fU0hJRlQJMAotCi0jZGVmaW5lIFBTVEFU RV9DSEFOR0VEX0lSUUVOX1NISUZUCTAKLQotI2RlZmluZSBQU1RBVEVfQ0hBTkdFRF9TSElGVAkJ MAotCi0vKiBzb21lIGNvbnN0YW50IHZhbHVlcyBmb3IgY2xvY2sgZGl2aWRlciBjYWxjdWxhdGlv biAqLwotI2RlZmluZSBDUFVfRElWX0ZSRVFfTUFYCTUwMAotI2RlZmluZSBDUFVfREJHX0ZSRVFf TUFYCTM3NQotI2RlZmluZSBDUFVfQVRCX0ZSRVFfTUFYCTUwMAotCi0jZGVmaW5lIFBNSUNfTE9X X1ZPTFQJCTB4MzAKLSNkZWZpbmUgUE1JQ19ISUdIX1ZPTFQJCTB4MjgKLQotI2RlZmluZSBDUFVF TUFfSElHSAkJMHgyCi0jZGVmaW5lIENQVUVNQV9NSUQJCTB4NAotI2RlZmluZSBDUFVFTUFfTE9X CQkweDcKLQotI2RlZmluZSBMMkVNQV9ISUdICQkweDEKLSNkZWZpbmUgTDJFTUFfTUlECQkweDMK LSNkZWZpbmUgTDJFTUFfTE9XCQkweDQKLQotI2RlZmluZSBESVZfVEFCX01BWAkyCi0vKiBmcmVx dWVuY3kgdW5pdCBpcyAyME1IWiAqLwotI2RlZmluZSBGUkVRX1VOSVQJMjAKLSNkZWZpbmUgTUFY X1ZPTFRBR0UJMTU1MDAwMCAvKiBJbiBtaWNyb3ZvbHQgKi8KLSNkZWZpbmUgVk9MVEFHRV9TVEVQ CTEyNTAwCS8qIEluIG1pY3Jvdm9sdCAqLwotCi0jZGVmaW5lIENQVUZSRVFfTkFNRQkJImV4eW5v czU0NDBfZHZmcyIKLSNkZWZpbmUgREVGX1RSQU5TX0xBVEVOQ1kJMTAwMDAwCi0KLWVudW0gY3B1 ZnJlcV9sZXZlbF9pbmRleCB7Ci0JTDAsIEwxLCBMMiwgTDMsIEw0LAotCUw1LCBMNiwgTDcsIEw4 LCBMOSwKLX07Ci0jZGVmaW5lIENQVUZSRVFfTEVWRUxfRU5ECShMNyArIDEpCi0KLXN0cnVjdCBl eHlub3NfZHZmc19kYXRhIHsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0Jc3RydWN0IHJlc291cmNl ICptZW07Ci0JaW50IGlycTsKLQlzdHJ1Y3QgY2xrICpjcHVfY2xrOwotCXVuc2lnbmVkIGludCBs YXRlbmN5OwotCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKLQl1 bnNpZ25lZCBpbnQgZnJlcV9jb3VudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JYm9vbCBkdmZz X2VuYWJsZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGlycV93b3JrOwotfTsKLQotc3RhdGljIHN0 cnVjdCBleHlub3NfZHZmc19kYXRhICpkdmZzX2luZm87Ci1zdGF0aWMgREVGSU5FX01VVEVYKGNw dWZyZXFfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7Ci0KLXN0YXRp YyBpbnQgaW5pdF9kaXZfdGFibGUodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lf dGFibGUgKnBvcywgKmZyZXFfdGJsID0gZHZmc19pbmZvLT5mcmVxX3RhYmxlOwotCXVuc2lnbmVk IGludCB0bXAsIGNsa19kaXYsIGVtYV9kaXYsIGZyZXEsIHZvbHRfaWQsIGlkeDsKLQlzdHJ1Y3Qg ZGV2X3BtX29wcCAqb3BwOwotCi0JY3B1ZnJlcV9mb3JfZWFjaF9lbnRyeV9pZHgocG9zLCBmcmVx X3RibCwgaWR4KSB7Ci0JCW9wcCA9IGRldl9wbV9vcHBfZmluZF9mcmVxX2V4YWN0KGR2ZnNfaW5m by0+ZGV2LAotCQkJCQlwb3MtPmZyZXF1ZW5jeSAqIDEwMDAsIHRydWUpOwotCQlpZiAoSVNfRVJS KG9wcCkpIHsKLQkJCWRldl9lcnIoZHZmc19pbmZvLT5kZXYsCi0JCQkJImZhaWxlZCB0byBmaW5k IHZhbGlkIE9QUCBmb3IgJXUgS0haXG4iLAotCQkJCXBvcy0+ZnJlcXVlbmN5KTsKLQkJCXJldHVy biBQVFJfRVJSKG9wcCk7Ci0JCX0KLQotCQlmcmVxID0gcG9zLT5mcmVxdWVuY3kgLyAxMDAwOyAv KiBJbiBNSFogKi8KLQkJY2xrX2RpdiA9ICgoZnJlcSAvIENQVV9ESVZfRlJFUV9NQVgpICYgUDBf N19DUFVDTEtERVZfTUFTSykKLQkJCQkJPDwgUDBfN19DUFVDTEtERVZfU0hJRlQ7Ci0JCWNsa19k aXYgfD0gKChmcmVxIC8gQ1BVX0FUQl9GUkVRX01BWCkgJiBQMF83X0FUQkNMS0RFVl9NQVNLKQot CQkJCQk8PCBQMF83X0FUQkNMS0RFVl9TSElGVDsKLQkJY2xrX2RpdiB8PSAoKGZyZXEgLyBDUFVf REJHX0ZSRVFfTUFYKSAmIFAwXzdfQ1NDTEtERVZfTUFTSykKLQkJCQkJPDwgUDBfN19DU0NMS0RF Vl9TSElGVDsKLQotCQkvKiBDYWxjdWxhdGUgRU1BICovCi0JCXZvbHRfaWQgPSBkZXZfcG1fb3Bw X2dldF92b2x0YWdlKG9wcCk7Ci0KLQkJdm9sdF9pZCA9IChNQVhfVk9MVEFHRSAtIHZvbHRfaWQp IC8gVk9MVEFHRV9TVEVQOwotCQlpZiAodm9sdF9pZCA8IFBNSUNfSElHSF9WT0xUKSB7Ci0JCQll bWFfZGl2ID0gKENQVUVNQV9ISUdIIDw8IFAwXzdfQ1BVRU1BX1NISUZUKSB8Ci0JCQkJKEwyRU1B X0hJR0ggPDwgUDBfN19MMkVNQV9TSElGVCk7Ci0JCX0gZWxzZSBpZiAodm9sdF9pZCA+IFBNSUNf TE9XX1ZPTFQpIHsKLQkJCWVtYV9kaXYgPSAoQ1BVRU1BX0xPVyA8PCBQMF83X0NQVUVNQV9TSElG VCkgfAotCQkJCShMMkVNQV9MT1cgPDwgUDBfN19MMkVNQV9TSElGVCk7Ci0JCX0gZWxzZSB7Ci0J CQllbWFfZGl2ID0gKENQVUVNQV9NSUQgPDwgUDBfN19DUFVFTUFfU0hJRlQpIHwKLQkJCQkoTDJF TUFfTUlEIDw8IFAwXzdfTDJFTUFfU0hJRlQpOwotCQl9Ci0KLQkJdG1wID0gKGNsa19kaXYgfCBl bWFfZGl2IHwgKHZvbHRfaWQgPDwgUDBfN19WRERfU0hJRlQpCi0JCQl8ICgoZnJlcSAvIEZSRVFf VU5JVCkgPDwgUDBfN19GUkVRX1NISUZUKSk7Ci0KLQkJX19yYXdfd3JpdGVsKHRtcCwgZHZmc19p bmZvLT5iYXNlICsgWE1VX1BNVV9QMF83ICsgNCAqIGlkeCk7Ci0JCWRldl9wbV9vcHBfcHV0KG9w cCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19lbmFibGVfZHZm cyh1bnNpZ25lZCBpbnQgY3VyX2ZyZXF1ZW5jeSkKLXsKLQl1bnNpZ25lZCBpbnQgdG1wLCBjcHU7 Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlID0gZHZmc19pbmZv LT5mcmVxX3RhYmxlOwotCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG9zOwotCS8q IERpc2FibGUgRFZGUyAqLwotCV9fcmF3X3dyaXRlbCgwLAlkdmZzX2luZm8tPmJhc2UgKyBYTVVf RFZGU19DVFJMKTsKLQotCS8qIEVuYWJsZSBQU1RBVEUgQ2hhbmdlIEV2ZW50ICovCi0JdG1wID0g X19yYXdfcmVhZGwoZHZmc19pbmZvLT5iYXNlICsgWE1VX1BNVUVWVEVOKTsKLQl0bXAgfD0gKDEg PDwgUFNUQVRFX0NIQU5HRURfRVZURU5fU0hJRlQpOwotCV9fcmF3X3dyaXRlbCh0bXAsIGR2ZnNf aW5mby0+YmFzZSArIFhNVV9QTVVFVlRFTik7Ci0KLQkvKiBFbmFibGUgUFNUQVRFIENoYW5nZSBJ UlEgKi8KLQl0bXAgPSBfX3Jhd19yZWFkbChkdmZzX2luZm8tPmJhc2UgKyBYTVVfUE1VSVJRRU4p OwotCXRtcCB8PSAoMSA8PCBQU1RBVEVfQ0hBTkdFRF9JUlFFTl9TSElGVCk7Ci0JX19yYXdfd3Jp dGVsKHRtcCwgZHZmc19pbmZvLT5iYXNlICsgWE1VX1BNVUlSUUVOKTsKLQotCS8qIFNldCBpbml0 aWFsIHBlcmZvcm1hbmNlIGluZGV4ICovCi0JY3B1ZnJlcV9mb3JfZWFjaF9lbnRyeShwb3MsIGZy ZXFfdGFibGUpCi0JCWlmIChwb3MtPmZyZXF1ZW5jeSA9PSBjdXJfZnJlcXVlbmN5KQotCQkJYnJl YWs7Ci0KLQlpZiAocG9zLT5mcmVxdWVuY3kgPT0gQ1BVRlJFUV9UQUJMRV9FTkQpIHsKLQkJZGV2 X2NyaXQoZHZmc19pbmZvLT5kZXYsICJCb290IHVwIGZyZXF1ZW5jeSBub3Qgc3VwcG9ydGVkXG4i KTsKLQkJLyogQXNzaWduIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeSAqLwotCQlwb3MgPSBmcmVxX3Rh YmxlOwotCQljdXJfZnJlcXVlbmN5ID0gcG9zLT5mcmVxdWVuY3k7Ci0JfQotCi0JZGV2X2luZm8o ZHZmc19pbmZvLT5kZXYsICJTZXR0aW5nIGR2ZnMgaW5pdGlhbCBmcmVxdWVuY3kgPSAldUtIWiIs Ci0JCQkJCQljdXJfZnJlcXVlbmN5KTsKLQotCWZvciAoY3B1ID0gMDsgY3B1IDwgQ09ORklHX05S X0NQVVM7IGNwdSsrKSB7Ci0JCXRtcCA9IF9fcmF3X3JlYWRsKGR2ZnNfaW5mby0+YmFzZSArIFhN VV9DMF8zX1BTVEFURSArIGNwdSAqIDQpOwotCQl0bXAgJj0gfihQX1ZBTFVFX01BU0sgPDwgQzBf M19QU1RBVEVfTkVXX1NISUZUKTsKLQkJdG1wIHw9ICgocG9zIC0gZnJlcV90YWJsZSkgPDwgQzBf M19QU1RBVEVfTkVXX1NISUZUKTsKLQkJX19yYXdfd3JpdGVsKHRtcCwgZHZmc19pbmZvLT5iYXNl ICsgWE1VX0MwXzNfUFNUQVRFICsgY3B1ICogNCk7Ci0JfQotCi0JLyogRW5hYmxlIERWRlMgKi8K LQlfX3Jhd193cml0ZWwoMSA8PCBYTVVfRFZGU19DVFJMX0VOX1NISUZULAotCQkJCWR2ZnNfaW5m by0+YmFzZSArIFhNVV9EVkZTX0NUUkwpOwotfQotCi1zdGF0aWMgaW50IGV4eW5vc190YXJnZXQo c3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQl1 bnNpZ25lZCBpbnQgdG1wOwotCWludCBpOwotCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJs ZSAqZnJlcV90YWJsZSA9IGR2ZnNfaW5mby0+ZnJlcV90YWJsZTsKLQotCW11dGV4X2xvY2soJmNw dWZyZXFfbG9jayk7Ci0KLQlmcmVxcy5vbGQgPSBwb2xpY3ktPmN1cjsKLQlmcmVxcy5uZXcgPSBm cmVxX3RhYmxlW2luZGV4XS5mcmVxdWVuY3k7Ci0KLQljcHVmcmVxX2ZyZXFfdHJhbnNpdGlvbl9i ZWdpbihwb2xpY3ksICZmcmVxcyk7Ci0KLQkvKiBTZXQgdGhlIHRhcmdldCBmcmVxdWVuY3kgaW4g YWxsIEMwXzNfUFNUQVRFIHJlZ2lzdGVyICovCi0JZm9yX2VhY2hfY3B1KGksIHBvbGljeS0+Y3B1 cykgewotCQl0bXAgPSBfX3Jhd19yZWFkbChkdmZzX2luZm8tPmJhc2UgKyBYTVVfQzBfM19QU1RB VEUgKyBpICogNCk7Ci0JCXRtcCAmPSB+KFBfVkFMVUVfTUFTSyA8PCBDMF8zX1BTVEFURV9ORVdf U0hJRlQpOwotCQl0bXAgfD0gKGluZGV4IDw8IEMwXzNfUFNUQVRFX05FV19TSElGVCk7Ci0KLQkJ X19yYXdfd3JpdGVsKHRtcCwgZHZmc19pbmZvLT5iYXNlICsgWE1VX0MwXzNfUFNUQVRFICsgaSAq IDQpOwotCX0KLQltdXRleF91bmxvY2soJmNwdWZyZXFfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyB2b2lkIGV4eW5vc19jcHVmcmVxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQotewotCXVuc2lnbmVkIGludCBjdXJfcHN0YXRlLCBpbmRleDsKLQlzdHJ1Y3QgY3B1ZnJlcV9w b2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfY3B1X2dldCgwKTsgLyogYm9vdCBDUFUgKi8KLQlzdHJ1 Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGUgPSBkdmZzX2luZm8tPmZyZXFf dGFibGU7Ci0KLQkvKiBFbnN1cmUgd2UgY2FuIGFjY2VzcyBjcHVmcmVxIHN0cnVjdHVyZXMgKi8K LQlpZiAodW5saWtlbHkoZHZmc19pbmZvLT5kdmZzX2VuYWJsZWQgPT0gZmFsc2UpKQotCQlnb3Rv IHNraXBfd29yazsKLQotCW11dGV4X2xvY2soJmNwdWZyZXFfbG9jayk7Ci0JZnJlcXMub2xkID0g cG9saWN5LT5jdXI7Ci0KLQljdXJfcHN0YXRlID0gX19yYXdfcmVhZGwoZHZmc19pbmZvLT5iYXNl ICsgWE1VX1BfU1RBVFVTKTsKLQlpZiAoY3VyX3BzdGF0ZSA+PiBDMF8zX1BTVEFURV9WQUxJRF9T SElGVCAmIDB4MSkKLQkJaW5kZXggPSAoY3VyX3BzdGF0ZSA+PiBDMF8zX1BTVEFURV9DVVJSX1NI SUZUKSAmIFBfVkFMVUVfTUFTSzsKLQllbHNlCi0JCWluZGV4ID0gKGN1cl9wc3RhdGUgPj4gQzBf M19QU1RBVEVfTkVXX1NISUZUKSAmIFBfVkFMVUVfTUFTSzsKLQotCWlmIChsaWtlbHkoaW5kZXgg PCBkdmZzX2luZm8tPmZyZXFfY291bnQpKSB7Ci0JCWZyZXFzLm5ldyA9IGZyZXFfdGFibGVbaW5k ZXhdLmZyZXF1ZW5jeTsKLQl9IGVsc2UgewotCQlkZXZfY3JpdChkdmZzX2luZm8tPmRldiwgIk5l dyBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlXG4iKTsKLQkJZnJlcXMubmV3ID0gZnJlcXMub2xkOwot CX0KLQljcHVmcmVxX2ZyZXFfdHJhbnNpdGlvbl9lbmQocG9saWN5LCAmZnJlcXMsIDApOwotCi0J Y3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7Ci0JbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2xvY2spOwot c2tpcF93b3JrOgotCWVuYWJsZV9pcnEoZHZmc19pbmZvLT5pcnEpOwotfQotCi1zdGF0aWMgaXJx cmV0dXJuX3QgZXh5bm9zX2NwdWZyZXFfaXJxKGludCBpcnEsIHZvaWQgKmlkKQotewotCXVuc2ln bmVkIGludCB0bXA7Ci0KLQl0bXAgPSBfX3Jhd19yZWFkbChkdmZzX2luZm8tPmJhc2UgKyBYTVVf UE1VSVJRKTsKLQlpZiAodG1wID4+IFBTVEFURV9DSEFOR0VEX1NISUZUICYgMHgxKSB7Ci0JCV9f cmF3X3dyaXRlbCh0bXAsIGR2ZnNfaW5mby0+YmFzZSArIFhNVV9QTVVJUlEpOwotCQlkaXNhYmxl X2lycV9ub3N5bmMoaXJxKTsKLQkJc2NoZWR1bGVfd29yaygmZHZmc19pbmZvLT5pcnFfd29yayk7 Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgZXh5bm9zX3NvcnRf ZGVzY2VuZF9mcmVxX3RhYmxlKHZvaWQpCi17Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3Rh YmxlICpmcmVxX3RibCA9IGR2ZnNfaW5mby0+ZnJlcV90YWJsZTsKLQlpbnQgaSA9IDAsIGluZGV4 OwotCXVuc2lnbmVkIGludCB0bXBfZnJlcTsKLQkvKgotCSAqIEV4eW5vczU0NDAgY2xvY2sgY29u dHJvbGxlciBzdGF0ZSBsb2dpYyBleHBlY3RzIHRoZSBjcHVmcmVxIHRhYmxlIHRvCi0JICogYmUg aW4gZGVzY2VuZGluZyBvcmRlci4gQnV0IHRoZSBPUFAgbGlicmFyeSBjb25zdHJ1Y3RzIHRoZSB0 YWJsZSBpbgotCSAqIGFzY2VuZGluZyBvcmRlci4gU28gdG8gbWFrZSB0aGUgdGFibGUgZGVzY2Vu ZGluZyB3ZSBqdXN0IG5lZWQgdG8KLQkgKiBzd2FwIHRoZSBpIGVsZW1lbnQgd2l0aCB0aGUgTiAt IGkgZWxlbWVudC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZHZmc19pbmZvLT5mcmVxX2NvdW50 IC8gMjsgaSsrKSB7Ci0JCWluZGV4ID0gZHZmc19pbmZvLT5mcmVxX2NvdW50IC0gaSAtIDE7Ci0J CXRtcF9mcmVxID0gZnJlcV90YmxbaV0uZnJlcXVlbmN5OwotCQlmcmVxX3RibFtpXS5mcmVxdWVu Y3kgPSBmcmVxX3RibFtpbmRleF0uZnJlcXVlbmN5OwotCQlmcmVxX3RibFtpbmRleF0uZnJlcXVl bmN5ID0gdG1wX2ZyZXE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGV4eW5vc19jcHVmcmVxX2NwdV9p bml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQotewotCXBvbGljeS0+Y2xrID0gZHZm c19pbmZvLT5jcHVfY2xrOwotCXJldHVybiBjcHVmcmVxX2dlbmVyaWNfaW5pdChwb2xpY3ksIGR2 ZnNfaW5mby0+ZnJlcV90YWJsZSwKLQkJCWR2ZnNfaW5mby0+bGF0ZW5jeSk7Ci19Ci0KLXN0YXRp YyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgZXh5bm9zX2RyaXZlciA9IHsKLQkuZmxhZ3MJCT0gQ1BV RlJFUV9TVElDS1kgfCBDUFVGUkVRX0FTWU5DX05PVElGSUNBVElPTiB8Ci0JCQkJQ1BVRlJFUV9O RUVEX0lOSVRJQUxfRlJFUV9DSEVDSywKLQkudmVyaWZ5CQk9IGNwdWZyZXFfZ2VuZXJpY19mcmVx dWVuY3lfdGFibGVfdmVyaWZ5LAotCS50YXJnZXRfaW5kZXgJPSBleHlub3NfdGFyZ2V0LAotCS5n ZXQJCT0gY3B1ZnJlcV9nZW5lcmljX2dldCwKLQkuaW5pdAkJPSBleHlub3NfY3B1ZnJlcV9jcHVf aW5pdCwKLQkubmFtZQkJPSBDUFVGUkVRX05BTUUsCi0JLmF0dHIJCT0gY3B1ZnJlcV9nZW5lcmlj X2F0dHIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3NfY3B1 ZnJlcV9tYXRjaFtdID0gewotCXsKLQkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDQw LWNwdWZyZXEiLAotCX0sCi0Je30sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZXh5bm9z X2NwdWZyZXFfbWF0Y2gpOwotCi1zdGF0aWMgaW50IGV4eW5vc19jcHVmcmVxX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0Jc3RydWN0 IGRldmljZV9ub2RlICpucDsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCXVuc2lnbmVkIGludCBj dXJfZnJlcXVlbmN5OwotCi0JbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQlpZiAoIW5wKQotCQly ZXR1cm4gLUVOT0RFVjsKLQotCWR2ZnNfaW5mbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBz aXplb2YoKmR2ZnNfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghZHZmc19pbmZvKSB7Ci0JCXJl dCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3B1dF9ub2RlOwotCX0KLQotCWR2ZnNfaW5mby0+ZGV2 ID0gJnBkZXYtPmRldjsKLQotCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZy ZXMpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX3B1dF9ub2RlOwotCi0JZHZmc19pbmZvLT5iYXNl ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGR2ZnNfaW5mby0+ZGV2LCAmcmVzKTsKLQlpZiAoSVNf RVJSKGR2ZnNfaW5mby0+YmFzZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihkdmZzX2luZm8tPmJhc2Up OwotCQlnb3RvIGVycl9wdXRfbm9kZTsKLQl9Ci0KLQlkdmZzX2luZm8tPmlycSA9IGlycV9vZl9w YXJzZV9hbmRfbWFwKG5wLCAwKTsKLQlpZiAoIWR2ZnNfaW5mby0+aXJxKSB7Ci0JCWRldl9lcnIo ZHZmc19pbmZvLT5kZXYsICJObyBjcHVmcmVxIGlycSBmb3VuZFxuIik7Ci0JCXJldCA9IC1FTk9E RVY7Ci0JCWdvdG8gZXJyX3B1dF9ub2RlOwotCX0KLQotCXJldCA9IGRldl9wbV9vcHBfb2ZfYWRk X3RhYmxlKGR2ZnNfaW5mby0+ZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZHZmc19pbmZv LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBPUFAgdGFibGU6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVy cl9wdXRfbm9kZTsKLQl9Ci0KLQlyZXQgPSBkZXZfcG1fb3BwX2luaXRfY3B1ZnJlcV90YWJsZShk dmZzX2luZm8tPmRldiwKLQkJCQkJICAgICZkdmZzX2luZm8tPmZyZXFfdGFibGUpOwotCWlmIChy ZXQpIHsKLQkJZGV2X2VycihkdmZzX2luZm8tPmRldiwKLQkJCSJmYWlsZWQgdG8gaW5pdCBjcHVm cmVxIHRhYmxlOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfZnJlZV9vcHA7Ci0JfQotCWR2ZnNf aW5mby0+ZnJlcV9jb3VudCA9IGRldl9wbV9vcHBfZ2V0X29wcF9jb3VudChkdmZzX2luZm8tPmRl dik7Ci0JZXh5bm9zX3NvcnRfZGVzY2VuZF9mcmVxX3RhYmxlKCk7Ci0KLQlpZiAob2ZfcHJvcGVy dHlfcmVhZF91MzIobnAsICJjbG9jay1sYXRlbmN5IiwgJmR2ZnNfaW5mby0+bGF0ZW5jeSkpCi0J CWR2ZnNfaW5mby0+bGF0ZW5jeSA9IERFRl9UUkFOU19MQVRFTkNZOwotCi0JZHZmc19pbmZvLT5j cHVfY2xrID0gZGV2bV9jbGtfZ2V0KGR2ZnNfaW5mby0+ZGV2LCAiYXJtY2xrIik7Ci0JaWYgKElT X0VSUihkdmZzX2luZm8tPmNwdV9jbGspKSB7Ci0JCWRldl9lcnIoZHZmc19pbmZvLT5kZXYsICJG YWlsZWQgdG8gZ2V0IGNwdSBjbG9ja1xuIik7Ci0JCXJldCA9IFBUUl9FUlIoZHZmc19pbmZvLT5j cHVfY2xrKTsKLQkJZ290byBlcnJfZnJlZV90YWJsZTsKLQl9Ci0KLQljdXJfZnJlcXVlbmN5ID0g Y2xrX2dldF9yYXRlKGR2ZnNfaW5mby0+Y3B1X2Nsayk7Ci0JaWYgKCFjdXJfZnJlcXVlbmN5KSB7 Ci0JCWRldl9lcnIoZHZmc19pbmZvLT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrIHJhdGVcbiIp OwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9mcmVlX3RhYmxlOwotCX0KLQljdXJfZnJl cXVlbmN5IC89IDEwMDA7Ci0KLQlJTklUX1dPUksoJmR2ZnNfaW5mby0+aXJxX3dvcmssIGV4eW5v c19jcHVmcmVxX3dvcmspOwotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZHZmc19pbmZvLT5kZXYs IGR2ZnNfaW5mby0+aXJxLAotCQkJCWV4eW5vc19jcHVmcmVxX2lycSwgSVJRRl9UUklHR0VSX05P TkUsCi0JCQkJQ1BVRlJFUV9OQU1FLCBkdmZzX2luZm8pOwotCWlmIChyZXQpIHsKLQkJZGV2X2Vy cihkdmZzX2luZm8tPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOwotCQlnb3RvIGVy cl9mcmVlX3RhYmxlOwotCX0KLQotCXJldCA9IGluaXRfZGl2X3RhYmxlKCk7Ci0JaWYgKHJldCkg ewotCQlkZXZfZXJyKGR2ZnNfaW5mby0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpc2UgZGl2IHRh YmxlXG4iKTsKLQkJZ290byBlcnJfZnJlZV90YWJsZTsKLQl9Ci0KLQlleHlub3NfZW5hYmxlX2R2 ZnMoY3VyX2ZyZXF1ZW5jeSk7Ci0JcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmV4eW5v c19kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkdmZzX2luZm8tPmRldiwKLQkJCSIl czogZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWZyZXEgZHJpdmVyXG4iLCBfX2Z1bmNfXyk7Ci0JCWdv dG8gZXJyX2ZyZWVfdGFibGU7Ci0JfQotCi0Jb2Zfbm9kZV9wdXQobnApOwotCWR2ZnNfaW5mby0+ ZHZmc19lbmFibGVkID0gdHJ1ZTsKLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfdGFibGU6Ci0JZGV2 X3BtX29wcF9mcmVlX2NwdWZyZXFfdGFibGUoZHZmc19pbmZvLT5kZXYsICZkdmZzX2luZm8tPmZy ZXFfdGFibGUpOwotZXJyX2ZyZWVfb3BwOgotCWRldl9wbV9vcHBfb2ZfcmVtb3ZlX3RhYmxlKGR2 ZnNfaW5mby0+ZGV2KTsKLWVycl9wdXRfbm9kZToKLQlvZl9ub2RlX3B1dChucCk7Ci0JZGV2X2Vy cigmcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCBpbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18pOwot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZXh5bm9zX2NwdWZyZXFfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigm ZXh5bm9zX2RyaXZlcik7Ci0JZGV2X3BtX29wcF9mcmVlX2NwdWZyZXFfdGFibGUoZHZmc19pbmZv LT5kZXYsICZkdmZzX2luZm8tPmZyZXFfdGFibGUpOwotCWRldl9wbV9vcHBfb2ZfcmVtb3ZlX3Rh YmxlKGR2ZnNfaW5mby0+ZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgZXh5bm9zX2NwdWZyZXFfcGxhdGRydiA9IHsKLQkuZHJpdmVyID0gewotCQku bmFtZQk9ICJleHlub3M1NDQwLWNwdWZyZXEiLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBleHlub3Nf Y3B1ZnJlcV9tYXRjaCwKLQl9LAotCS5wcm9iZQkJPSBleHlub3NfY3B1ZnJlcV9wcm9iZSwKLQku cmVtb3ZlCQk9IGV4eW5vc19jcHVmcmVxX3JlbW92ZSwKLX07Ci1tb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGV4eW5vc19jcHVmcmVxX3BsYXRkcnYpOwotCi1NT0RVTEVfQVVUSE9SKCJBbWl0IERhbmll bCBLYWNoaGFwIDxhbWl0LmRhbmllbEBzYW1zdW5nLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElP TigiRXh5bm9zNTQ0MCBjcHVmcmVxIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo=