From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Fainelli Subject: [PATCH v2 2/4] soc: bcm: brcmstb: Add support for S2/S3/S5 suspend states (ARM) Date: Mon, 26 Jun 2017 15:32:44 -0700 Message-ID: <20170626223248.14199-5-f.fainelli@gmail.com> References: <20170626223248.14199-1-f.fainelli@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170626223248.14199-1-f.fainelli@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-arm-kernel@lists.infradead.org Cc: Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Doug Berger , Markus Mayer , Arnd Bergmann , "open list:BROADCOM BCM47XX MIPS ARCHITECTURE" , Hauke Mehrtens , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , "Rafael J. Wysocki" , Ralf Baechle , Rob Herring , open list , Eric Anholt , linux-pm@vger.kernerl.org, Florian Fainelli , Gregory Fong , Justin Chen , Gareth Powell , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , Brian Norris List-Id: devicetree@vger.kernel.org RnJvbTogQnJpYW4gTm9ycmlzIDxjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb20+CgpUaGlzIGNv bW1pdCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBCcm9hZGNvbSBTVEIgUzIvUzMvUzUgc3VzcGVuZCBz dGF0ZXMgb24KQVJNIGJhc2VkIFNvQ3MuCgpUaGlzIHJlcXVpcmVzIHF1aXRlIGEgbG90IG9mIGNv ZGUgaW4gb3JkZXIgdG8gZGVhbCB3aXRoIHRoZSBkaWZmZXJlbnQgSFcKYmxvY2tzIHRoYXQgbmVl ZCB0byBiZSBxdWllc2NlZCBkdXJpbmcgc3VzcGVuZDoKCi0gRERSIFBIWSBTSElNCi0gRERSIG1l bW9yeSBjb250cm9sbGVyIGFuZCBzZXF1ZW5jZXIKLSBjb250cm9sIHByb2Nlc3NvcgoKVGhlIGZp bmFsIHN0ZXBzIG9mIHRoZSBzdXNwZW5kIGV4ZWN1dGUgaW4gYW4gb24tY2hpcCBTUkFNIGFuZCB0 aGVyZSBpcyBhCmxpdHRsZSBiaXQgb2YgYXNzZW1ibHkgY29kZSBpbiBvcmRlciB0byBzaHV0IGRv d24gdGhlIEREUiBQSFkgUExMIGFuZAp0aGVuIGdvIGludG8gYSB3ZmkgbG9vcCB1bnRpbCBhIHdh a2UtdXAgZXZlbiBvY2N1cnMuIENvbnZlcnNlbHkgdGhlCnJlc3VtZSBwYXJ0IGludm9sdmVzIHdh aXRpbmcgZm9yIHRoZSBERFIgUEhZIFBMTCB0byBjb21lIGJhY2sgdXAgYW5kCnJlc3VtZSBleGVj dXRpb25zIHdoZXJlIHdlIGxlZnQuCgpGb3IgUzMsIGJlY2F1c2Ugb2Ygb3VyIG1lbW9yeSBoYXNo aW5nIChhY3R1YWwgaGFzaGluZyBjb2RlIG5vdCBpbmNsdWRlZApmb3Igc2ltcGxpY2l0eSwgYW5k IGlzIGJ5cGFzc2VkKSB3ZSBuZWVkIHRvIHJlbG9jYXRlIHRoZSB3cml0YWJsZQp2YXJpYWJsZXMg KHN0YWNrKSBpbnRvIFNSQU0gc2hvcnRseSBiZWZvcmUgc3VzcGVuZGluZyBpbiBvcmRlciB0byBs ZWF2ZQp0aGUgRFJBTSB1bnRvdWNoZWQgYW5kIGNyZWF0ZSBhIHJlbGlhYmxlIGhhc2ggb2YgaXRz IGNvbnRlbnRzLgoKVGhpcyBjb2RlIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJ5IEJyaWFuIE5vcnJp cyBpbml0aWFsbHkgYW5kIGhhcyBiZWVuCmluY3JlbWVudGFsbHkgZml4ZWQgYW5kIHVwZGF0ZWQg dG8gc3VwcG9ydCBuZXcgY2hpcHMgYnkgYSBsb3Qgb2YgcGVvcGxlLgoKU2lnbmVkLW9mZi1ieTog QnJpYW4gTm9ycmlzIDxjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6 IE1hcmt1cyBNYXllciA8bW1heWVyQGJyb2FkY29tLmNvbT4KU2lnbmVkLW9mZi1ieTogSnVzdGlu IENoZW4gPGp1c3RpbnBvcG82QGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogR2FyZXRoIFBvd2Vs bCA8Z3Bvd2VsbEBicm9hZGNvbS5jb20+ClNpZ25lZC1vZmYtYnk6IERvdWcgQmVyZ2VyIDxvcGVu ZG1iQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxs aUBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9zb2MvYmNtL0tjb25maWcgICAgICAgICAgICAgICB8 ICAgMiArCiBkcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9LY29uZmlnICAgICAgIHwgICA5ICsKIGRy aXZlcnMvc29jL2JjbS9icmNtc3RiL01ha2VmaWxlICAgICAgfCAgIDEgKwogZHJpdmVycy9zb2Mv YmNtL2JyY21zdGIvcG0vTWFrZWZpbGUgICB8ICAgMiArCiBkcml2ZXJzL3NvYy9iY20vYnJjbXN0 Yi9wbS9hb25fZGVmcy5oIHwgMTEzICsrKysrCiBkcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9wbS9w bS1hcm0uYyAgIHwgODM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvc29jL2JjbS9icmNtc3RiL3BtL3BtLmggICAgICAgfCAgNzggKysrKwogZHJpdmVycy9zb2Mv YmNtL2JyY21zdGIvcG0vczItYXJtLlMgICB8ICA3NiArKysrCiA4IGZpbGVzIGNoYW5nZWQsIDEx MTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2JjbS9icmNt c3RiL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9w bS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2JjbS9icmNtc3RiL3Bt L2Fvbl9kZWZzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9w bS9wbS1hcm0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2JjbS9icmNtc3RiL3Bt L3BtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9wbS9zMi1h cm0uUwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2JjbS9LY29uZmlnIGIvZHJpdmVycy9zb2Mv YmNtL0tjb25maWcKaW5kZXggYTM5YjBkNThkZGQwLi41MjhmOTUwOWNkYzAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvc29jL2JjbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc29jL2JjbS9LY29uZmlnCkBA IC0yMCw0ICsyMCw2IEBAIGNvbmZpZyBTT0NfQlJDTVNUQgogCiAJICBJZiB1bnN1cmUsIHNheSBO LgogCitzb3VyY2UgImRyaXZlcnMvc29jL2JjbS9icmNtc3RiL0tjb25maWciCisKIGVuZG1lbnUK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2JjbS9icmNtc3RiL0tjb25maWcgYi9kcml2ZXJzL3Nv Yy9iY20vYnJjbXN0Yi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uOWIxY2M3Zjg2ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2MvYmNtL2Jy Y21zdGIvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2lmIFNPQ19CUkNNU1RCCisKK2NvbmZpZyBC UkNNU1RCX1BNCisJYm9vbCAiU3VwcG9ydCBzdXNwZW5kL3Jlc3VtZSBmb3IgU1RCIHBsYXRmb3Jt cyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFBNCisJZGVwZW5kcyBvbiBBUk0KKworZW5kaWYg IyBTT0NfQlJDTVNUQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYmNtL2JyY21zdGIvTWFrZWZp bGUgYi9kcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9NYWtlZmlsZQppbmRleCA5MTIwYjI3MTVkM2Uu LmVlNWI0ZGU3NDFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvYmNtL2JyY21zdGIvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9zb2MvYmNtL2JyY21zdGIvTWFrZWZpbGUKQEAgLTEgKzEsMiBAQAog b2JqLXkJCQkJKz0gY29tbW9uLm8gYml1Y3RybC5vCitvYmoteQkJCQkrPSBwbS8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc29jL2JjbS9icmNtc3RiL3BtL01ha2VmaWxlIGIvZHJpdmVycy9zb2MvYmNt L2JyY21zdGIvcG0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi43YzNkMjAxMzViN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9iY20vYnJj bXN0Yi9wbS9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0kKENPTkZJR19BUk0pCQkrPSBz Mi1hcm0ubyBwbS1hcm0ubworQUZMQUdTX3MyLWFybS5vCQkJOj0gLW1hcmNoPWFybXY3LWEKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc29jL2JjbS9icmNtc3RiL3BtL2Fvbl9kZWZzLmggYi9kcml2ZXJz L3NvYy9iY20vYnJjbXN0Yi9wbS9hb25fZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uZmI5MzZhYmQ4NDdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9z b2MvYmNtL2JyY21zdGIvcG0vYW9uX2RlZnMuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIEFs d2F5cyBPTiAoQU9OKSByZWdpc3RlciBpbnRlcmZhY2UgYmV0d2VlbiBib290bG9hZGVyIGFuZCBM aW51eAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTcgQnJvYWRjb20KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQlJD TVNUQl9BT05fREVGU19IX18KKyNkZWZpbmUgX19CUkNNU1RCX0FPTl9ERUZTX0hfXworCisjaW5j bHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogTWFnaWMgbnVtYmVyIGluIHVwcGVyIDE2LWJp dHMgKi8KKyNkZWZpbmUgQlJDTVNUQl9TM19NQUdJQ19NQVNLICAgICAgICAgICAgICAgICAgIDB4 ZmZmZjAwMDAKKyNkZWZpbmUgQlJDTVNUQl9TM19NQUdJQ19TSE9SVCAgICAgICAgICAgICAgICAg IDB4NUFGRTAwMDAKKworZW51bSB7CisJLyogUmVzdG9yZSByYW5kb20ga2V5IGZvciBBRVMgbWVt b3J5IHZlcmlmaWNhdGlvbiAob2ZmID0gZml4ZWQga2V5KSAqLworCVMzX0ZMQUdfTE9BRF9SQU5E S0VZCQk9ICgxIDw8IDApLAorCisJLyogU2NyYXRjaCBidWZmZXIgcGFnZSB0YWJsZSBpcyBwcmVz ZW50ICovCisJUzNfRkxBR19TQ1JBVENIX0JVRkZFUl9UQUJMRQk9ICgxIDw8IDEpLAorCisJLyog U2tpcCBhbGwgbWVtb3J5IHZlcmlmaWNhdGlvbiAqLworCVMzX0ZMQUdfTk9fTUVNX1ZFUklGWQkJ PSAoMSA8PCAyKSwKKworCS8qCisJICogTW9kaWZpY2F0aW9uIG9mIHRoaXMgYml0IHJlc2VydmVk IGZvciBib290bG9hZGVyIG9ubHkuCisJICogMT1QU0NJIHN0YXJ0ZWQgTGludXgsIDA9RGlyZWN0 IGp1bXAgdG8gTGludXguCisJICovCisJUzNfRkxBR19QU0NJX0JPT1QJCT0gKDEgPDwgMyksCisK KwkvKgorCSAqIE1vZGlmaWNhdGlvbiBvZiB0aGlzIGJpdCByZXNlcnZlZCBmb3IgYm9vdGxvYWRl ciBvbmx5LgorCSAqIDE9NjQgYml0IGJvb3QsIDA9MzIgYml0IGJvb3QuCisJICovCisJUzNfRkxB R19CT09URUQ2NAkJPSAoMSA8PCA0KSwKK307CisKKyNkZWZpbmUgQlJDTVNUQl9IQVNIX0xFTgkJ CSgxMjggLyA4KSAvKiAxMjgtYml0IGhhc2ggKi8KKworI2RlZmluZSBBT05fUkVHX01BR0lDX0ZM QUdTCQkJMHgwMAorI2RlZmluZSBBT05fUkVHX0NPTlRST0xfTE9XCQkJMHgwNAorI2RlZmluZSBB T05fUkVHX0NPTlRST0xfSElHSAkJCTB4MDgKKyNkZWZpbmUgQU9OX1JFR19TM19IQVNICQkJCTB4 MGMgLyogaGFzaCBvZiBTMyBwYXJhbXMgKi8KKyNkZWZpbmUgQU9OX1JFR19DT05UUk9MX0hBU0hf TEVOCQkweDFjCisjZGVmaW5lIEFPTl9SRUdfUEFOSUMJCQkJMHgyMAorCisjZGVmaW5lIEJSQ01T VEJfUzNfTUFHSUMJCTB4NUFGRUIwMDcKKyNkZWZpbmUgQlJDTVNUQl9QQU5JQ19NQUdJQwkJMHg1 MTJFMTE1RQorI2RlZmluZSBCT09UTE9BREVSX1NDUkFUQ0hfU0laRQkJNjQKKyNkZWZpbmUgQlJD TVNUQl9EVFVfU1RBVEVfTUFQX0VOVFJJRVMJKDgqMTAyNCkKKyNkZWZpbmUgQlJDTVNUQl9EVFVf Q09ORklHX0VOVFJJRVMJKDUxMikKKyNkZWZpbmUgQlJDTVNUQl9EVFVfQ09VTlQJCSgyKQorCisj ZGVmaW5lIElNQUdFX0RFU0NSSVBUT1JTX0JVRlNJWkUJKDIgKiAxMDI0KQorI2RlZmluZSBTM19C T09UTE9BREVSX1JFU0VSVkVECQkoUzNfRkxBR19QU0NJX0JPT1QgfCBTM19GTEFHX0JPT1RFRDY0 KQorCitzdHJ1Y3QgYnJjbXN0Yl9ib290bG9hZGVyX2R0dV90YWJsZSB7CisJdWludDMyX3QJZHR1 X3N0YXRlX21hcFtCUkNNU1RCX0RUVV9TVEFURV9NQVBfRU5UUklFU107CisJdWludDMyX3QJZHR1 X2NvbmZpZ1tCUkNNU1RCX0RUVV9DT05GSUdfRU5UUklFU107Cit9OworCisvKgorICogQm9vdGxv YWRlciB1dGlsaXplcyBhIGN1c3RvbSBwYXJhbWV0ZXIgYmxvY2sgbGVmdCBpbiBEUkFNIGZvciBo YW5kbGluZyBTMworICogd2FybSByZXN1bWUKKyAqLworc3RydWN0IGJyY21zdGJfczNfcGFyYW1z IHsKKwkvKiBzY3JhdGNoIG1lbW9yeSBmb3IgYm9vdGxvYWRlciAqLworCXVpbnQ4X3Qgc2NyYXRj aFtCT09UTE9BREVSX1NDUkFUQ0hfU0laRV07CisKKwl1aW50MzJfdCBtYWdpYzsgLyogQlJDTVNU Ql9TM19NQUdJQyAqLworCXVpbnQ2NF90IHJlZW50cnk7IC8qIFBBICovCisKKwkvKiBkZXNjcmlw dG9ycyAqLworCXVpbnQzMl90IGhhc2hbQlJDTVNUQl9IQVNIX0xFTiAvIDRdOworCisJLyoKKwkg KiBJZiAwLCB0aGVuIGlnbm9yZSB0aGlzIHBhcmFtZXRlciAodGhlcmUgaXMgb25seSBvbmUgc2V0 IG9mCisJICogICBkZXNjcmlwdG9ycykKKwkgKgorCSAqIElmIG5vbi0wLCB0aGVuIGEgc2Vjb25k IHNldCBvZiBkZXNjcmlwdG9ycyBpcyBzdG9yZWQgYXQ6CisJICoKKwkgKiAgIGRlc2NyaXB0b3Jz ICsgZGVzY19vZmZzZXRfMgorCSAqCisJICogVGhlIE1BQyByZXN1bHQgb2YgYm90aCBkZXNjcmlw dG9ycyBpcyBYT1InZCBhbmQgc3RvcmVkIGluIEBoYXNoCisJICovCisJdWludDMyX3QgZGVzY19v ZmZzZXRfMjsKKworCS8qCisJICogKFBoeXNpY2FsKSBhZGRyZXNzIG9mIGEgYnJjbXN0Yl9ib290 bG9hZGVyX3NjcmF0Y2hfdGFibGUsIGZvcgorCSAqIHByb3ZpZGluZyBhIGxhcmdlIERSQU0gYnVm ZmVyIHRvIHRoZSBib290bG9hZGVyCisJICovCisJdWludDY0X3QgYnVmZmVyX3RhYmxlOworCisJ dWludDMyX3Qgc3BhcmVbNzBdOworCisJdWludDhfdCBkZXNjcmlwdG9yc1tJTUFHRV9ERVNDUklQ VE9SU19CVUZTSVpFXTsKKwkvKgorCSAqIE11c3QgYmUgbGFzdCBtZW1iZXIgb2Ygc3RydWN0LiBT ZWUgYnJjbXN0Yl9wbV9zM19maW5pc2goKSBmb3IgcmVhc29uLgorCSAqLworCXN0cnVjdCBicmNt c3RiX2Jvb3Rsb2FkZXJfZHR1X3RhYmxlIGR0dVtCUkNNU1RCX0RUVV9DT1VOVF07Cit9IF9fcGFj a2VkOworCisjZW5kaWYgLyogX19CUkNNU1RCX0FPTl9ERUZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zb2MvYmNtL2JyY21zdGIvcG0vcG0tYXJtLmMgYi9kcml2ZXJzL3NvYy9iY20vYnJj bXN0Yi9wbS9wbS1hcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjRiN2U2YzI5N2IyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL2JjbS9icmNtc3Ri L3BtL3BtLWFybS5jCkBAIC0wLDAgKzEsODM2IEBACisvKgorICogQVJNLXNwZWNpZmljIHN1cHBv cnQgZm9yIEJyb2FkY29tIFNUQiBTMi9TMy9TNSBwb3dlciBtYW5hZ2VtZW50CisgKgorICogUzI6 IGNsb2NrIGdhdGUgQ1BVcyBhbmQgYXMgbWFueSBwZXJpcGhlcmFscyBhcyBwb3NzaWJsZQorICog UzM6IHBvd2VyIG9mZiBhbGwgb2YgdGhlIGNoaXAgZXhjZXB0IHRoZSBBbHdheXMgT04gKEFPTikg aXNsYW5kOyBrZWVwIEREUiBpcworICogICAgIHNlbGYtcmVmcmVzaAorICogUzU6IChhLmsuYS4g UzMgY29sZCBib290KSBtdWNoIGxpa2UgUzMsIGV4Y2VwdCBERFIgaXMgcG93ZXJlZCBkb3duLCBz byB3ZQorICogICAgIHRyZWF0IHRoaXMgbW9kZSBsaWtlIGEgc29mdCBwb3dlci1vZmYsIHdpdGgg d2FrZXVwIGFsbG93ZWQgZnJvbSBBT04KKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxNC0yMDE3IEJy b2FkY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiYnJjbXN0Yi1wbTogIiBmbXQKKworI2luY2x1ZGUg PGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUg PGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9p by5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tjb25maWcu aD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+ CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4K KyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Cisj aW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVk ZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51 eC9zb2MvYnJjbXN0Yi9icmNtc3RiLmg+CisKKyNpbmNsdWRlIDxhc20vZm5jcHkuaD4KKyNpbmNs dWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorCisjaW5jbHVkZSAi cG0uaCIKKyNpbmNsdWRlICJhb25fZGVmcy5oIgorCisjZGVmaW5lIFNISU1QSFlfRERSX1BBRF9D TlRSTAkJMHg4YworCisvKiBNZXRob2QgIzAgKi8KKyNkZWZpbmUgU0hJTVBIWV9QQURfUExMX1NF UVVFTkNFCUJJVCg4KQorI2RlZmluZSBTSElNUEhZX1BBRF9HQVRFX1BMTF9TMwkJQklUKDkpCisK Ky8qIE1ldGhvZCAjMSAqLworI2RlZmluZSBQV1JEV05fU0VRX05PX1NFUVVFTkNJTkcJMAorI2Rl ZmluZSBQV1JEV05fU0VRX0hPTERfQ0hBTk5FTAkJMQorI2RlZmluZQlQV1JEV05fU0VRX1JFU0VU X1BMTAkJMgorI2RlZmluZSBQV1JEV05fU0VRX1BPV0VSRE9XTl9QTEwJMworCisjZGVmaW5lIFNI SU1QSFlfUEFEX1MzX1BXUkRXTl9TRVFfTUFTSwkweDAwZjAwMDAwCisjZGVmaW5lIFNISU1QSFlf UEFEX1MzX1BXUkRXTl9TRVFfU0hJRlQJMjAKKworI2RlZmluZQlERFJfRk9SQ0VfQ0tFX1JTVF9O CQlCSVQoMykKKyNkZWZpbmUJRERSX1BIWV9SU1RfTgkJCUJJVCgyKQorI2RlZmluZQlERFJfUEhZ X0NLRQkJCUJJVCgxKQorCisjZGVmaW5lCUREUl9QSFlfTk9fQ0hBTk5FTAkJMHhmZmZmZmZmZgor CisjZGVmaW5lIE1BWF9OVU1fTUVNQwkJCTMKKworc3RydWN0IGJyY21zdGJfbWVtYyB7CisJdm9p ZCBfX2lvbWVtICpkZHJfcGh5X2Jhc2U7CisJdm9pZCBfX2lvbWVtICpkZHJfc2hpbXBoeV9iYXNl OworCXZvaWQgX19pb21lbSAqZGRyX2N0cmw7Cit9OworCitzdHJ1Y3QgYnJjbXN0Yl9wbV9jb250 cm9sIHsKKwl2b2lkIF9faW9tZW0gKmFvbl9jdHJsX2Jhc2U7CisJdm9pZCBfX2lvbWVtICphb25f c3JhbTsKKwlzdHJ1Y3QgYnJjbXN0Yl9tZW1jIG1lbWNzW01BWF9OVU1fTUVNQ107CisKKwl2b2lk IF9faW9tZW0gKmJvb3Rfc3JhbTsKKwlzaXplX3QgYm9vdF9zcmFtX2xlbjsKKworCWJvb2wgc3Vw cG9ydF93YXJtX2Jvb3Q7CisJc2l6ZV90IHBsbF9zdGF0dXNfb2Zmc2V0OworCWludCBudW1fbWVt YzsKKworCXN0cnVjdCBicmNtc3RiX3MzX3BhcmFtcyAqczNfcGFyYW1zOworCWRtYV9hZGRyX3Qg czNfcGFyYW1zX3BhOworCWludCBzM2VudHJ5X21ldGhvZDsKKwl1MzIgd2FybV9ib290X29mZnNl dDsKKwl1MzIgcGh5X2Ffc3RhbmRieV9jdHJsX29mZnM7CisJdTMyIHBoeV9iX3N0YW5kYnlfY3Ry bF9vZmZzOworCWJvb2wgbmVlZHNfZGRyX3BhZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2OworfTsKKworZW51bSBic3BfaW5pdGlhdGVfY29tbWFuZCB7CisJQlNQX0NMT0NLX1NUT1AJ CT0gMHgwMCwKKwlCU1BfR0VOX1JBTkRPTV9LRVkJPSAweDRBLAorCUJTUF9SRVNUT1JFX1JBTkRP TV9LRVkJPSAweDU1LAorCUJTUF9HRU5fRklYRURfS0VZCT0gMHg2MywKK307CisKKyNkZWZpbmUg UE1fSU5JVElBVEUJCTB4MDEKKyNkZWZpbmUgUE1fSU5JVElBVEVfU1VDQ0VTUwkweDAwCisjZGVm aW5lIFBNX0lOSVRJQVRFX0ZBSUwJMHhmZQorCitzdGF0aWMgc3RydWN0IGJyY21zdGJfcG1fY29u dHJvbCBjdHJsOworCitzdGF0aWMgaW50ICgqYnJjbXN0Yl9wbV9kb19zMl9zcmFtKSh2b2lkIF9f aW9tZW0gKmFvbl9jdHJsX2Jhc2UsCisJCXZvaWQgX19pb21lbSAqZGRyX3BoeV9wbGxfc3RhdHVz KTsKKworc3RhdGljIGludCBicmNtc3RiX2luaXRfc3JhbShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRu KQoreworCXZvaWQgX19pb21lbSAqc3JhbTsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCBy ZXQ7CisKKwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRuLCAwLCAmcmVzKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQ2FjaGVkLCBleGVjdXRhYmxlIHJlbWFwcGluZyBv ZiBTUkFNICovCisjaWZkZWYgQ09ORklHX0FSTQorCXNyYW0gPSBfX2FybV9pb3JlbWFwX2V4ZWMo cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpLCB0cnVlKTsKKyNlbHNlCisJc3JhbSA9IF9f aW9yZW1hcChyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcyksIFBBR0VfS0VSTkVMX0VYRUMp OworI2VuZGlmCisJaWYgKCFzcmFtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN0cmwuYm9vdF9z cmFtID0gc3JhbTsKKwljdHJsLmJvb3Rfc3JhbV9sZW4gPSByZXNvdXJjZV9zaXplKCZyZXMpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNyYW1f ZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iIH0sCisJeyAvKiBzZW50 aW5lbCAqLyB9Cit9OworCitzdGF0aWMgaW50IGRvX2JzcF9pbml0aWF0ZV9jb21tYW5kKGVudW0g YnNwX2luaXRpYXRlX2NvbW1hbmQgY21kKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGN0cmwu YW9uX2N0cmxfYmFzZTsKKwlpbnQgcmV0OworCWludCB0aW1lbyA9IDEwMDAgKiAxMDAwOyAvKiAx IHNlY29uZCAqLworCisJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEFPTl9DVFJMX1BNX0lOSVRJ QVRFKTsKKwkodm9pZClyZWFkbF9yZWxheGVkKGJhc2UgKyBBT05fQ1RSTF9QTV9JTklUSUFURSk7 CisKKwkvKiBHbyEgKi8KKwl3cml0ZWxfcmVsYXhlZCgoY21kIDw8IDEpIHwgUE1fSU5JVElBVEUs IGJhc2UgKyBBT05fQ1RSTF9QTV9JTklUSUFURSk7CisKKwkvKgorCSAqIElmIGZpcm13YXJlIGRv ZXNuJ3Qgc3VwcG9ydCB0aGUgJ2FjaycsIHRoZW4ganVzdCBhc3N1bWUgaXQncyBkb25lCisJICog YWZ0ZXIgMTBtcy4gTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgY29tbWFuZCAwLCBCU1Bf Q0xPQ0tfU1RPUAorCSAqLworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImJyY20sYmNt NzQzNzFhMCIpKSB7CisJCSh2b2lkKXJlYWRsX3JlbGF4ZWQoYmFzZSArIEFPTl9DVFJMX1BNX0lO SVRJQVRFKTsKKwkJbWRlbGF5KDEwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yICg7Oykgewor CQlyZXQgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBBT05fQ1RSTF9QTV9JTklUSUFURSk7CisJCWlm ICghKHJldCAmIFBNX0lOSVRJQVRFKSkKKwkJCWJyZWFrOworCQlpZiAodGltZW8gPD0gMCkgewor CQkJcHJfZXJyKCJlcnJvcjogdGltZW91dCB3YWl0aW5nIGZvciBCU1AgKCV4KVxuIiwgcmV0KTsK KwkJCWJyZWFrOworCQl9CisJCXRpbWVvIC09IDUwOworCQl1ZGVsYXkoNTApOworCX0KKworCXJl dHVybiAocmV0ICYgMHhmZikgIT0gUE1fSU5JVElBVEVfU1VDQ0VTUzsKK30KKworc3RhdGljIGlu dCBicmNtc3RiX3BtX2hhbmRzaGFrZSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGN0 cmwuYW9uX2N0cmxfYmFzZTsKKwl1MzIgdG1wOworCWludCByZXQ7CisKKwkvKiBCU1AgcG93ZXIg aGFuZHNoYWtlLCB2MSAqLworCXRtcCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIEFPTl9DVFJMX0hP U1RfTUlTQ19DTURTKTsKKwl0bXAgJj0gfjFVTDsKKwl3cml0ZWxfcmVsYXhlZCh0bXAsIGJhc2Ug KyBBT05fQ1RSTF9IT1NUX01JU0NfQ01EUyk7CisJKHZvaWQpcmVhZGxfcmVsYXhlZChiYXNlICsg QU9OX0NUUkxfSE9TVF9NSVNDX0NNRFMpOworCisJcmV0ID0gZG9fYnNwX2luaXRpYXRlX2NvbW1h bmQoQlNQX0NMT0NLX1NUT1ApOworCWlmIChyZXQpCisJCXByX2VycigiQlNQIGhhbmRzaGFrZSBm YWlsZWRcbiIpOworCisJLyoKKwkgKiBIQUNLOiBCU1AgbWF5IGhhdmUgaW50ZXJuYWwgcmFjZSBv biB0aGUgQ0xPQ0tfU1RPUCBjb21tYW5kLgorCSAqIEF2b2lkIHRvdWNoaW5nIHRoZSBCU1AgZm9y IGEgZmV3IG1pbGxpc2Vjb25kcy4KKwkgKi8KKwltZGVsYXkoMyk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hpbXBoeV9zZXQodTMyIHZhbHVlLCB1MzIgbWFzaykK K3sKKwlpbnQgaTsKKworCWlmICghY3RybC5uZWVkc19kZHJfcGFkKQorCQlyZXR1cm47CisKKwlm b3IgKGkgPSAwOyBpIDwgY3RybC5udW1fbWVtYzsgaSsrKSB7CisJCXUzMiB0bXA7CisKKwkJdG1w ID0gcmVhZGxfcmVsYXhlZChjdHJsLm1lbWNzW2ldLmRkcl9zaGltcGh5X2Jhc2UgKworCQkJU0hJ TVBIWV9ERFJfUEFEX0NOVFJMKTsKKwkJdG1wID0gdmFsdWUgfCAodG1wICYgbWFzayk7CisJCXdy aXRlbF9yZWxheGVkKHRtcCwgY3RybC5tZW1jc1tpXS5kZHJfc2hpbXBoeV9iYXNlICsKKwkJCVNI SU1QSFlfRERSX1BBRF9DTlRSTCk7CisJfQorCXdtYigpOyAvKiBDb21wbGV0ZSBzZXF1ZW5jZSBp biBvcmRlci4gKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRkcl9jdHJsX3NldChib29sIHdh cm1ib290KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN0cmwubnVtX21lbWM7IGkr KykgeworCQl1MzIgdG1wOworCisJCXRtcCA9IHJlYWRsX3JlbGF4ZWQoY3RybC5tZW1jc1tpXS5k ZHJfY3RybCArCisJCQkJY3RybC53YXJtX2Jvb3Rfb2Zmc2V0KTsKKwkJaWYgKHdhcm1ib290KQor CQkJdG1wIHw9IDE7CisJCWVsc2UKKwkJCXRtcCAmPSB+MTsgLyogQ29sZCBib290ICovCisJCXdy aXRlbF9yZWxheGVkKHRtcCwgY3RybC5tZW1jc1tpXS5kZHJfY3RybCArCisJCQkJY3RybC53YXJt X2Jvb3Rfb2Zmc2V0KTsKKwl9CisJLyogQ29tcGxldGUgc2VxdWVuY2UgaW4gb3JkZXIgKi8KKwl3 bWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzZW50cnlfbWV0aG9kMCh2b2lkKQorewor CXNoaW1waHlfc2V0KFNISU1QSFlfUEFEX0dBVEVfUExMX1MzIHwgU0hJTVBIWV9QQURfUExMX1NF UVVFTkNFLAorCQkgICAgMHhmZmZmZmZmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2Vu dHJ5X21ldGhvZDEodm9pZCkKK3sKKwkvKgorCSAqIFMzIEVudHJ5IFNlcXVlbmNlCisJICogLS0t LS0tLS0tLS0tLS0tLS0KKwkgKiBTdGVwIDE6IFNISU1QSFlfQUREUl9DTlRMXzBfRERSX1BBRF9D TlRSTCBbIFMzX1BXUkRXTl9TRVEgXSA9IDMKKwkgKiBTdGVwIDI6IE1FTUNfRERSXzBfV0FSTV9C T09UIFsgV0FSTV9CT09UIF0gPSAxCisJICovCisJc2hpbXBoeV9zZXQoKFBXUkRXTl9TRVFfUE9X RVJET1dOX1BMTCA8PAorCQkgICAgU0hJTVBIWV9QQURfUzNfUFdSRFdOX1NFUV9TSElGVCksCisJ CSAgICB+U0hJTVBIWV9QQURfUzNfUFdSRFdOX1NFUV9NQVNLKTsKKworCWRkcl9jdHJsX3NldCh0 cnVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHM1ZW50cnlfbWV0aG9kMSh2b2lkKQorewor CWludCBpOworCisJLyoKKwkgKiBTNSBFbnRyeSBTZXF1ZW5jZQorCSAqIC0tLS0tLS0tLS0tLS0t LS0tCisJICogU3RlcCAxOiBTSElNUEhZX0FERFJfQ05UTF8wX0REUl9QQURfQ05UUkwgWyBTM19Q V1JEV05fU0VRIF0gPSAzCisJICogU3RlcCAyOiBNRU1DX0REUl8wX1dBUk1fQk9PVCBbIFdBUk1f Qk9PVCBdID0gMAorCSAqIFN0ZXAgMzogRERSX1BIWV9DT05UUk9MX1JFR1NfW0FCXV8wX1NUQU5E QllfQ09OVFJPTFsgQ0tFIF0gPSAwCisJICoJICAgRERSX1BIWV9DT05UUk9MX1JFR1NfW0FCXV8w X1NUQU5EQllfQ09OVFJPTFsgUlNUX04gXSA9IDAKKwkgKi8KKwlzaGltcGh5X3NldCgoUFdSRFdO X1NFUV9QT1dFUkRPV05fUExMIDw8CisJCSAgICBTSElNUEhZX1BBRF9TM19QV1JEV05fU0VRX1NI SUZUKSwKKwkJICAgIH5TSElNUEhZX1BBRF9TM19QV1JEV05fU0VRX01BU0spOworCisJZGRyX2N0 cmxfc2V0KGZhbHNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBjdHJsLm51bV9tZW1jOyBpKyspIHsK KwkJdTMyIHRtcDsKKworCQkvKiBTdGVwIDM6IENoYW5uZWwgQSAoUlNUX04gPSBDS0UgPSAwKSAq LworCQl0bXAgPSByZWFkbF9yZWxheGVkKGN0cmwubWVtY3NbaV0uZGRyX3BoeV9iYXNlICsKKwkJ CQkgIGN0cmwucGh5X2Ffc3RhbmRieV9jdHJsX29mZnMpOworCQl0bXAgJj0gfihERFJfUEhZX1JT VF9OIHwgRERSX1BIWV9SU1RfTik7CisJCXdyaXRlbF9yZWxheGVkKHRtcCwgY3RybC5tZW1jc1tp XS5kZHJfcGh5X2Jhc2UgKworCQkJICAgICBjdHJsLnBoeV9hX3N0YW5kYnlfY3RybF9vZmZzKTsK KworCQkvKiBTdGVwIDM6IENoYW5uZWwgQj8gKi8KKwkJaWYgKGN0cmwucGh5X2Jfc3RhbmRieV9j dHJsX29mZnMgIT0gRERSX1BIWV9OT19DSEFOTkVMKSB7CisJCQl0bXAgPSByZWFkbF9yZWxheGVk KGN0cmwubWVtY3NbaV0uZGRyX3BoeV9iYXNlICsKKwkJCQkJICBjdHJsLnBoeV9iX3N0YW5kYnlf Y3RybF9vZmZzKTsKKwkJCXRtcCAmPSB+KEREUl9QSFlfUlNUX04gfCBERFJfUEhZX1JTVF9OKTsK KwkJCXdyaXRlbF9yZWxheGVkKHRtcCwgY3RybC5tZW1jc1tpXS5kZHJfcGh5X2Jhc2UgKworCQkJ CSAgICAgY3RybC5waHlfYl9zdGFuZGJ5X2N0cmxfb2Zmcyk7CisJCX0KKwl9CisJLyogTXVzdCBj b21wbGV0ZSAqLworCXdtYigpOworfQorCisvKgorICogUnVuIGEgUG93ZXIgTWFuYWdlbWVudCBT dGF0ZSBNYWNoaW5lIChQTVNNKSBzaHV0ZG93biBjb21tYW5kIGFuZCBwdXQgdGhlIENQVQorICog aW50byBhIGxvdy1wb3dlciBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGJyY21zdGJfZG9fcG1zbV9w b3dlcl9kb3duKHVuc2lnbmVkIGxvbmcgYmFzZV9jbWQsIGJvb2wgb25ld3JpdGUpCit7CisJdm9p ZCBfX2lvbWVtICpiYXNlID0gY3RybC5hb25fY3RybF9iYXNlOworCisJaWYgKChjdHJsLnMzZW50 cnlfbWV0aG9kID09IDEpICYmIChiYXNlX2NtZCA9PSBQTV9DT0xEX0NPTkZJRykpCisJCXM1ZW50 cnlfbWV0aG9kMSgpOworCisJLyogcG1fc3RhcnRfcHdyZG4gdHJhbnNpdGlvbiAwLT4xICovCisJ d3JpdGVsX3JlbGF4ZWQoYmFzZV9jbWQsIGJhc2UgKyBBT05fQ1RSTF9QTV9DVFJMKTsKKworCWlm ICghb25ld3JpdGUpIHsKKwkJKHZvaWQpcmVhZGxfcmVsYXhlZChiYXNlICsgQU9OX0NUUkxfUE1f Q1RSTCk7CisKKwkJd3JpdGVsX3JlbGF4ZWQoYmFzZV9jbWQgfCBQTV9QV1JfRE9XTiwgYmFzZSAr IEFPTl9DVFJMX1BNX0NUUkwpOworCQkodm9pZClyZWFkbF9yZWxheGVkKGJhc2UgKyBBT05fQ1RS TF9QTV9DVFJMKTsKKwl9CisJd2ZpKCk7Cit9CisKKy8qIFN1cHBvcnQgUzUgY29sZCBib290IG91 dCBvZiAicG93ZXJvZmYiICovCitzdGF0aWMgdm9pZCBicmNtc3RiX3BtX3Bvd2Vyb2ZmKHZvaWQp Cit7CisJYnJjbXN0Yl9wbV9oYW5kc2hha2UoKTsKKworCS8qIENsZWFyIG1hZ2ljIFMzIHdhcm0t Ym9vdCB2YWx1ZSAqLworCXdyaXRlbF9yZWxheGVkKDAsIGN0cmwuYW9uX3NyYW0gKyBBT05fUkVH X01BR0lDX0ZMQUdTKTsKKwkodm9pZClyZWFkbF9yZWxheGVkKGN0cmwuYW9uX3NyYW0gKyBBT05f UkVHX01BR0lDX0ZMQUdTKTsKKworCS8qIFNraXAgd2FpdC1mb3ItaW50ZXJydXB0IHNpZ25hbDsg anVzdCB1c2UgYSBjb3VudGRvd24gKi8KKwl3cml0ZWxfcmVsYXhlZCgweDEwLCBjdHJsLmFvbl9j dHJsX2Jhc2UgKyBBT05fQ1RSTF9QTV9DUFVfV0FJVF9DT1VOVCk7CisJKHZvaWQpcmVhZGxfcmVs YXhlZChjdHJsLmFvbl9jdHJsX2Jhc2UgKyBBT05fQ1RSTF9QTV9DUFVfV0FJVF9DT1VOVCk7CisK KwlpZiAoY3RybC5zM2VudHJ5X21ldGhvZCA9PSAxKSB7CisJCXNoaW1waHlfc2V0KChQV1JEV05f U0VRX1BPV0VSRE9XTl9QTEwgPDwKKwkJCSAgICAgU0hJTVBIWV9QQURfUzNfUFdSRFdOX1NFUV9T SElGVCksCisJCQkgICAgIH5TSElNUEhZX1BBRF9TM19QV1JEV05fU0VRX01BU0spOworCQlkZHJf Y3RybF9zZXQoZmFsc2UpOworCQlicmNtc3RiX2RvX3Btc21fcG93ZXJfZG93bihNMV9QTV9DT0xE X0NPTkZJRywgdHJ1ZSk7CisJCXJldHVybjsgLyogV2Ugc2hvdWxkIG5ldmVyIGFjdHVhbGx5IGdl dCBoZXJlICovCisJfQorCisJYnJjbXN0Yl9kb19wbXNtX3Bvd2VyX2Rvd24oUE1fQ09MRF9DT05G SUcsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgKmJyY21zdGJfcG1fY29weV90b19zcmFtKHZv aWQgKmZuLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGludCBzaXplID0gQUxJR04obGVuLCBG TkNQWV9BTElHTik7CisKKwlpZiAoY3RybC5ib290X3NyYW1fbGVuIDwgc2l6ZSkgeworCQlwcl9l cnIoInN0YW5kYnkgY29kZSB3aWxsIG5vdCBmaXQgaW4gU1JBTVxuIik7CisJCXJldHVybiBOVUxM OworCX0KKworCXJldHVybiBmbmNweShjdHJsLmJvb3Rfc3JhbSwgZm4sIHNpemUpOworfQorCisv KgorICogUzIgc3VzcGVuZC9yZXN1bWUgcGlja3MgdXAgd2hlcmUgd2UgbGVmdCBvZmYsIHNvIHdl IG11c3QgZXhlY3V0ZSBjYXJlZnVsbHkKKyAqIGZyb20gU1JBTSwgaW4gb3JkZXIgdG8gYWxsb3cg RERSIHRvIGNvbWUgYmFjayB1cCBzYWZlbHkgYmVmb3JlIHdlIGNvbnRpbnVlLgorICovCitzdGF0 aWMgaW50IGJyY21zdGJfcG1fczIodm9pZCkKK3sKKwkvKiBBIHByZXZpb3VzIFMzIGNhbiBzZXQg YSB2YWx1ZSBoYXphcmRvdXMgdG8gUzIsIHNvIG1ha2Ugc3VyZS4gKi8KKwlpZiAoY3RybC5zM2Vu dHJ5X21ldGhvZCA9PSAxKSB7CisJCXNoaW1waHlfc2V0KChQV1JEV05fU0VRX05PX1NFUVVFTkNJ TkcgPDwKKwkJCSAgICBTSElNUEhZX1BBRF9TM19QV1JEV05fU0VRX1NISUZUKSwKKwkJCSAgICB+ U0hJTVBIWV9QQURfUzNfUFdSRFdOX1NFUV9NQVNLKTsKKwkJZGRyX2N0cmxfc2V0KGZhbHNlKTsK Kwl9CisKKwlicmNtc3RiX3BtX2RvX3MyX3NyYW0gPSBicmNtc3RiX3BtX2NvcHlfdG9fc3JhbSgm YnJjbXN0Yl9wbV9kb19zMiwKKwkJCWJyY21zdGJfcG1fZG9fczJfc3opOworCWlmICghYnJjbXN0 Yl9wbV9kb19zMl9zcmFtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBicmNtc3RiX3Bt X2RvX3MyX3NyYW0oY3RybC5hb25fY3RybF9iYXNlLAorCQkJY3RybC5tZW1jc1swXS5kZHJfcGh5 X2Jhc2UgKworCQkJY3RybC5wbGxfc3RhdHVzX29mZnNldCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBvbiBhIG5ldyBzdGFjaywgc28gZG9uJ3QgYWxsb3cgaW5saW5pbmcg KHdoaWNoIHdpbGwKKyAqIGdlbmVyYXRlIHN0YWNrIHJlZmVyZW5jZXMgb24gdGhlIG9sZCBzdGFj aykKKyAqLworc3RhdGljIG5vaW5saW5lIGludCBicmNtc3RiX3BtX3MzX2ZpbmlzaCh2b2lkKQor eworCXN0cnVjdCBicmNtc3RiX3MzX3BhcmFtcyAqcGFyYW1zID0gY3RybC5zM19wYXJhbXM7CisJ ZG1hX2FkZHJfdCBwYXJhbXNfcGEgPSBjdHJsLnMzX3BhcmFtc19wYTsKKwlwaHlzX2FkZHJfdCBy ZWVudHJ5ID0gdmlydF90b19waHlzKCZjcHVfcmVzdW1lKTsKKwllbnVtIGJzcF9pbml0aWF0ZV9j b21tYW5kIGNtZDsKKwl1MzIgZmxhZ3M7CisKKwkvKgorCSAqIENsZWFyIHBhcmFtZXRlciBzdHJ1 Y3R1cmUsIGJ1dCBub3QgRFRVIGFyZWEsIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4KKwkgKiBmaWxs ZWQgaW4uIFdlIGtub3cgRFRVIGlzIGEgdGhlIGVuZCwgc28gd2UgY2FuIGp1c3Qgc3VidHJhY3Qg aXRzCisJICogc2l6ZS4KKwkgKi8KKwltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykg LSBzaXplb2YocGFyYW1zLT5kdHUpKTsKKworCWZsYWdzID0gcmVhZGxfcmVsYXhlZChjdHJsLmFv bl9zcmFtICsgQU9OX1JFR19NQUdJQ19GTEFHUyk7CisKKwlmbGFncyAmPSBTM19CT09UTE9BREVS X1JFU0VSVkVEOworCWZsYWdzIHw9IFMzX0ZMQUdfTk9fTUVNX1ZFUklGWTsKKwlmbGFncyB8PSBT M19GTEFHX0xPQURfUkFOREtFWTsKKworCS8qIExvYWQgcmFuZG9tIC8gZml4ZWQga2V5ICovCisJ aWYgKGZsYWdzICYgUzNfRkxBR19MT0FEX1JBTkRLRVkpCisJCWNtZCA9IEJTUF9HRU5fUkFORE9N X0tFWTsKKwllbHNlCisJCWNtZCA9IEJTUF9HRU5fRklYRURfS0VZOworCWlmIChkb19ic3BfaW5p dGlhdGVfY29tbWFuZChjbWQpKSB7CisJCXByX2luZm8oImtleSBsb2FkaW5nIGZhaWxlZFxuIik7 CisJCXJldHVybiAtRUlPOworCX0KKworCXBhcmFtcy0+bWFnaWMgPSBCUkNNU1RCX1MzX01BR0lD OworCXBhcmFtcy0+cmVlbnRyeSA9IHJlZW50cnk7CisKKwkvKiBObyBtb3JlIHdyaXRlcyB0byBE UkFNICovCisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwlmbGFncyB8PSBCUkNNU1RCX1MzX01BR0lD X1NIT1JUOworCisJd3JpdGVsX3JlbGF4ZWQoZmxhZ3MsIGN0cmwuYW9uX3NyYW0gKyBBT05fUkVH X01BR0lDX0ZMQUdTKTsKKwl3cml0ZWxfcmVsYXhlZChsb3dlcl8zMl9iaXRzKHBhcmFtc19wYSks CisJCSAgICAgICBjdHJsLmFvbl9zcmFtICsgQU9OX1JFR19DT05UUk9MX0xPVyk7CisJd3JpdGVs X3JlbGF4ZWQodXBwZXJfMzJfYml0cyhwYXJhbXNfcGEpLAorCQkgICAgICAgY3RybC5hb25fc3Jh bSArIEFPTl9SRUdfQ09OVFJPTF9ISUdIKTsKKworCXN3aXRjaCAoY3RybC5zM2VudHJ5X21ldGhv ZCkgeworCWNhc2UgMDoKKwkJczNlbnRyeV9tZXRob2QwKCk7CisJCWJyY21zdGJfZG9fcG1zbV9w b3dlcl9kb3duKFBNX1dBUk1fQ09ORklHLCBmYWxzZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJ czNlbnRyeV9tZXRob2QxKCk7CisJCWJyY21zdGJfZG9fcG1zbV9wb3dlcl9kb3duKE0xX1BNX1dB Uk1fQ09ORklHLCB0cnVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJLyogTXVzdCBoYXZlIGJlZW4gaW50ZXJydXB0ZWQgZnJvbSB3ZmkoKT8gKi8KKwly ZXR1cm4gLUVJTlRSOworfQorCisjZGVmaW5lIFNXQVBfU1RBQ0sobmV3X3NwLCBzYXZlZF9zcCkg XAorCV9fYXNtX18gX192b2xhdGlsZV9fICggXAorCQkgIm1vdgklW3NhdmVdLCBzcFxuIiBcCisJ CSAibW92CXNwLCAlW25ld11cbiIgXAorCQkgOiBbc2F2ZV0gIj0mciIgKHNhdmVkX3NwKSBcCisJ CSA6IFtuZXddICJyIiAobmV3X3NwKSBcCisJCSkKKworLyoKKyAqIFMzIG1vZGUgcmVzdW1lIHRv IHRoZSBib290bG9hZGVyIGJlZm9yZSBqdW1waW5nIGJhY2sgdG8gTGludXgsIHNvIHdlIGNhbiBi ZQorICogYSBsaXR0bGUgbGVzcyBjYXJlZnVsIGFib3V0IHJ1bm5pbmcgZnJvbSBEUkFNLgorICov CitzdGF0aWMgaW50IGJyY21zdGJfcG1fZG9fczModW5zaWduZWQgbG9uZyBzcCkKK3sKKwl1bnNp Z25lZCBsb25nIHNhdmVfc3A7CisJaW50IHJldDsKKworCS8qIE1vdmUgdG8gYSBuZXcgc3RhY2sg Ki8KKwlTV0FQX1NUQUNLKHNwLCBzYXZlX3NwKTsKKworCS8qIHNob3VsZCBub3QgcmV0dXJuICov CisJcmV0ID0gYnJjbXN0Yl9wbV9zM19maW5pc2goKTsKKworCVNXQVBfU1RBQ0soc2F2ZV9zcCwg c3ApOworCisJcHJfZXJyKCJDb3VsZCBub3QgZW50ZXIgUzNcbiIpOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBicmNtc3RiX3BtX3MzKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpz cCA9IGN0cmwuYm9vdF9zcmFtICsgY3RybC5ib290X3NyYW1fbGVuOworCisJcmV0dXJuIGNwdV9z dXNwZW5kKCh1bnNpZ25lZCBsb25nKXNwLCBicmNtc3RiX3BtX2RvX3MzKTsKK30KKworc3RhdGlj IGludCBicmNtc3RiX3BtX3N0YW5kYnkoYm9vbCBkZWVwX3N0YW5kYnkpCit7CisJaW50IHJldDsK KworCWlmIChicmNtc3RiX3BtX2hhbmRzaGFrZSgpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChk ZWVwX3N0YW5kYnkpCisJCXJldCA9IGJyY21zdGJfcG1fczMoKTsKKwllbHNlCisJCXJldCA9IGJy Y21zdGJfcG1fczIoKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoIiVzOiBzdGFuZGJ5IGZhaWxlZFxu IiwgX19mdW5jX18pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBicmNtc3RiX3Bt X2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwor CXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwkJcmV0ID0gYnJj bXN0Yl9wbV9zdGFuZGJ5KGZhbHNlKTsKKwkJYnJlYWs7CisJY2FzZSBQTV9TVVNQRU5EX01FTToK KwkJcmV0ID0gYnJjbXN0Yl9wbV9zdGFuZGJ5KHRydWUpOworCQlicmVhazsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJyY21zdGJfcG1fdmFsaWQoc3VzcGVuZF9zdGF0ZV90 IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToK KwkJcmV0dXJuIHRydWU7CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJcmV0dXJuIGN0cmwuc3Vw cG9ydF93YXJtX2Jvb3Q7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBicmNtc3RiX3BtX29wcyA9IHsK KwkuZW50ZXIJCT0gYnJjbXN0Yl9wbV9lbnRlciwKKwkudmFsaWQJCT0gYnJjbXN0Yl9wbV92YWxp ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFvbl9jdHJsX2R0X2lk c1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxicmNtc3RiLWFvbi1jdHJsIiB9LAorCXt9 Cit9OworCitzdHJ1Y3QgZGRyX3BoeV9vZmRhdGEgeworCWJvb2wgc3VwcG9ydHNfd2FybV9ib290 OworCXNpemVfdCBwbGxfc3RhdHVzX29mZnNldDsKKwlpbnQgczNlbnRyeV9tZXRob2Q7CisJdTMy IHdhcm1fYm9vdF9vZmZzZXQ7CisJdTMyIHBoeV9hX3N0YW5kYnlfY3RybF9vZmZzOworCXUzMiBw aHlfYl9zdGFuZGJ5X2N0cmxfb2ZmczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGRyX3BoeV9vZmRh dGEgZGRyX3BoeV83MV8xID0geworCS5zdXBwb3J0c193YXJtX2Jvb3QgPSB0cnVlLAorCS5wbGxf c3RhdHVzX29mZnNldCA9IDB4MGMsCisJLnMzZW50cnlfbWV0aG9kID0gMSwKKwkud2FybV9ib290 X29mZnNldCA9IDB4MmMsCisJLnBoeV9hX3N0YW5kYnlfY3RybF9vZmZzID0gMHgxOTgsCisJLnBo eV9iX3N0YW5kYnlfY3RybF9vZmZzID0gRERSX1BIWV9OT19DSEFOTkVMCit9OworCitzdGF0aWMg c3RydWN0IGRkcl9waHlfb2ZkYXRhIGRkcl9waHlfNzJfMCA9IHsKKwkuc3VwcG9ydHNfd2FybV9i b290ID0gdHJ1ZSwKKwkucGxsX3N0YXR1c19vZmZzZXQgPSAweDEwLAorCS5zM2VudHJ5X21ldGhv ZCA9IDEsCisJLndhcm1fYm9vdF9vZmZzZXQgPSAweDQwLAorCS5waHlfYV9zdGFuZGJ5X2N0cmxf b2ZmcyA9IDB4MmE0LAorCS5waHlfYl9zdGFuZGJ5X2N0cmxfb2ZmcyA9IDB4OGE0Cit9OworCitz dGF0aWMgc3RydWN0IGRkcl9waHlfb2ZkYXRhIGRkcl9waHlfMjI1XzEgPSB7CisJLnN1cHBvcnRz X3dhcm1fYm9vdCA9IGZhbHNlLAorCS5wbGxfc3RhdHVzX29mZnNldCA9IDB4NCwKKwkuczNlbnRy eV9tZXRob2QgPSAwCit9OworCitzdGF0aWMgc3RydWN0IGRkcl9waHlfb2ZkYXRhIGRkcl9waHlf MjQwXzEgPSB7CisJLnN1cHBvcnRzX3dhcm1fYm9vdCA9IHRydWUsCisJLnBsbF9zdGF0dXNfb2Zm c2V0ID0gMHg0LAorCS5zM2VudHJ5X21ldGhvZCA9IDAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIGRkcl9waHlfZHRfaWRzW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9 ICJicmNtLGJyY21zdGItZGRyLXBoeS12NzEuMSIsCisJCS5kYXRhID0gJmRkcl9waHlfNzFfMSwK Kwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiYnJjbSxicmNtc3RiLWRkci1waHktdjcyLjAiLAor CQkuZGF0YSA9ICZkZHJfcGh5XzcyXzAsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImJyY20s YnJjbXN0Yi1kZHItcGh5LXYyMjUuMSIsCisJCS5kYXRhID0gJmRkcl9waHlfMjI1XzEsCisJfSwK Kwl7CisJCS5jb21wYXRpYmxlID0gImJyY20sYnJjbXN0Yi1kZHItcGh5LXYyNDAuMSIsCisJCS5k YXRhID0gJmRkcl9waHlfMjQwXzEsCisJfSwKKwl7CisJCS8qIFNhbWUgYXMgdjI0MC4xLCBmb3Ig dGhlIHJlZ2lzdGVycyB3ZSBjYXJlIGFib3V0ICovCisJCS5jb21wYXRpYmxlID0gImJyY20sYnJj bXN0Yi1kZHItcGh5LXYyNDAuMiIsCisJCS5kYXRhID0gJmRkcl9waHlfMjQwXzEsCisJfSwKKwl7 fQorfTsKKworc3RydWN0IGRkcl9zZXFfb2ZkYXRhIHsKKwlib29sIG5lZWRzX2Rkcl9wYWQ7CisJ dTMyIHdhcm1fYm9vdF9vZmZzZXQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRkcl9zZXFf b2ZkYXRhIGRkcl9zZXFfYjIyID0geworCS5uZWVkc19kZHJfcGFkID0gZmFsc2UsCisJLndhcm1f Ym9vdF9vZmZzZXQgPSAweDJjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZHJfc2VxX29m ZGF0YSBkZHJfc2VxID0geworCS5uZWVkc19kZHJfcGFkID0gdHJ1ZSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRkcl9zaGltcGh5X2R0X2lkc1tdID0geworCXsgLmNv bXBhdGlibGUgPSAiYnJjbSxicmNtc3RiLWRkci1zaGltcGh5LXYxLjAiIH0sCisJe30KK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJyY21zdGJfbWVtY19vZl9tYXRjaFtd ID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiYnJjbSxicmNtc3RiLW1lbWMtZGRyLXJldi1iLjIu MiIsCisJCS5kYXRhID0gJmRkcl9zZXFfYjIyLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJi cmNtLGJyY21zdGItbWVtYy1kZHIiLAorCQkuZGF0YSA9ICZkZHJfc2VxLAorCX0sCisJe30sCit9 OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpicmNtc3RiX2lvcmVtYXBfbWF0Y2goY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKKwkJCQkJICAgaW50IGluZGV4LCBjb25zdCB2b2lk ICoqb2ZkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCAqbWF0Y2g7CisKKwlkbiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZV9hbmRfbWF0 Y2goTlVMTCwgbWF0Y2hlcywgJm1hdGNoKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKworCWlmIChvZmRhdGEpCisJCSpvZmRhdGEgPSBtYXRjaC0+ZGF0YTsKKworCXJl dHVybiBvZl9pb19yZXF1ZXN0X2FuZF9tYXAoZG4sIGluZGV4LCBkbi0+ZnVsbF9uYW1lKTsKK30K Kworc3RhdGljIGludCBicmNtc3RiX3BtX3BhbmljX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKm5iLAorCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwl3cml0ZWxf cmVsYXhlZChCUkNNU1RCX1BBTklDX01BR0lDLCBjdHJsLmFvbl9zcmFtICsgQU9OX1JFR19QQU5J Qyk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJf YmxvY2sgYnJjbXN0Yl9wbV9wYW5pY19uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGJyY21zdGJf cG1fcGFuaWNfbm90aWZ5LAorfTsKKworc3RhdGljIGludCBicmNtc3RiX3BtX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IGRkcl9waHlfb2ZkYXRh ICpkZHJfcGh5X2RhdGE7CisJY29uc3Qgc3RydWN0IGRkcl9zZXFfb2ZkYXRhICpkZHJfc2VxX2Rh dGE7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPSBOVUxMOworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqZG47CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQsIGk7CisKKwkv KiBBT04gY3RybCByZWdpc3RlcnMgKi8KKwliYXNlID0gYnJjbXN0Yl9pb3JlbWFwX21hdGNoKGFv bl9jdHJsX2R0X2lkcywgMCwgTlVMTCk7CisJaWYgKElTX0VSUihiYXNlKSkgeworCQlwcl9lcnIo ImVycm9yIG1hcHBpbmcgQU9OX0NUUkxcbiIpOworCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKwl9 CisJY3RybC5hb25fY3RybF9iYXNlID0gYmFzZTsKKworCS8qIEFPTiBTUkFNIHJlZ2lzdGVycyAq LworCWJhc2UgPSBicmNtc3RiX2lvcmVtYXBfbWF0Y2goYW9uX2N0cmxfZHRfaWRzLCAxLCBOVUxM KTsKKwlpZiAoSVNfRVJSKGJhc2UpKSB7CisJCS8qIEFzc3VtZSBzdGFuZGFyZCBvZmZzZXQgKi8K KwkJY3RybC5hb25fc3JhbSA9IGN0cmwuYW9uX2N0cmxfYmFzZSArCisJCQkJICAgICBBT05fQ1RS TF9TWVNURU1fREFUQV9SQU1fT0ZTOworCX0gZWxzZSB7CisJCWN0cmwuYW9uX3NyYW0gPSBiYXNl OworCX0KKworCXdyaXRlbF9yZWxheGVkKDAsIGN0cmwuYW9uX3NyYW0gKyBBT05fUkVHX1BBTklD KTsKKworCS8qIEREUiBQSFkgcmVnaXN0ZXJzICovCisJYmFzZSA9IGJyY21zdGJfaW9yZW1hcF9t YXRjaChkZHJfcGh5X2R0X2lkcywgMCwKKwkJCQkgICAgIChjb25zdCB2b2lkICoqKSZkZHJfcGh5 X2RhdGEpOworCWlmIChJU19FUlIoYmFzZSkpIHsKKwkJcHJfZXJyKCJlcnJvciBtYXBwaW5nIERE UiBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKwl9CisJY3RybC5zdXBwb3J0X3dh cm1fYm9vdCA9IGRkcl9waHlfZGF0YS0+c3VwcG9ydHNfd2FybV9ib290OworCWN0cmwucGxsX3N0 YXR1c19vZmZzZXQgPSBkZHJfcGh5X2RhdGEtPnBsbF9zdGF0dXNfb2Zmc2V0OworCS8qIE9ubHkg bmVlZCBERFIgUEhZIDAgZm9yIG5vdz8gKi8KKwljdHJsLm1lbWNzWzBdLmRkcl9waHlfYmFzZSA9 IGJhc2U7CisJY3RybC5zM2VudHJ5X21ldGhvZCA9IGRkcl9waHlfZGF0YS0+czNlbnRyeV9tZXRo b2Q7CisJY3RybC5waHlfYV9zdGFuZGJ5X2N0cmxfb2ZmcyA9IGRkcl9waHlfZGF0YS0+cGh5X2Ff c3RhbmRieV9jdHJsX29mZnM7CisJY3RybC5waHlfYl9zdGFuZGJ5X2N0cmxfb2ZmcyA9IGRkcl9w aHlfZGF0YS0+cGh5X2Jfc3RhbmRieV9jdHJsX29mZnM7CisJLyoKKwkgKiBTbGlnaHRseSBncm9z c3MgdG8gdXNlIHRoZSBwaHkgdmVyIHRvIGdldCBhIG1lbWMsCisJICogb2Zmc2V0IGJ1dCB0aGF0 IGlzIHRoZSBvbmx5IHZlcnNpb25lZCB0aGluZ3Mgc28gZmFyCisJICogd2UgY2FuIHRlc3QgZm9y LgorCSAqLworCWN0cmwud2FybV9ib290X29mZnNldCA9IGRkcl9waHlfZGF0YS0+d2FybV9ib290 X29mZnNldDsKKworCS8qIEREUiBTSElNLVBIWSByZWdpc3RlcnMgKi8KKwlmb3JfZWFjaF9tYXRj aGluZ19ub2RlKGRuLCBkZHJfc2hpbXBoeV9kdF9pZHMpIHsKKwkJaSA9IGN0cmwubnVtX21lbWM7 CisJCWlmIChpID49IE1BWF9OVU1fTUVNQykgeworCQkJcHJfd2FybigidG9vIG1hbnkgTUVNQ3Mg KG1heCAlZClcbiIsIE1BWF9OVU1fTUVNQyk7CisJCQlicmVhazsKKwkJfQorCisJCWJhc2UgPSBv Zl9pb19yZXF1ZXN0X2FuZF9tYXAoZG4sIDAsIGRuLT5mdWxsX25hbWUpOworCQlpZiAoSVNfRVJS KGJhc2UpKSB7CisJCQlpZiAoIWN0cmwuc3VwcG9ydF93YXJtX2Jvb3QpCisJCQkJYnJlYWs7CisK KwkJCXByX2VycigiZXJyb3IgbWFwcGluZyBERFIgU0hJTVBIWSAlZFxuIiwgaSk7CisJCQlyZXR1 cm4gUFRSX0VSUihiYXNlKTsKKwkJfQorCQljdHJsLm1lbWNzW2ldLmRkcl9zaGltcGh5X2Jhc2Ug PSBiYXNlOworCQljdHJsLm51bV9tZW1jKys7CisJfQorCisJLyogU2VxdWVuY2VyIERSQU0gUGFy YW0gYW5kIENvbnRyb2wgUmVnaXN0ZXJzICovCisJaSA9IDA7CisJZm9yX2VhY2hfbWF0Y2hpbmdf bm9kZShkbiwgYnJjbXN0Yl9tZW1jX29mX21hdGNoKSB7CisJCWJhc2UgPSBvZl9pb21hcChkbiwg MCk7CisJCWlmICghYmFzZSkgeworCQkJcHJfZXJyKCJlcnJvciBtYXBwaW5nIEREUiBTZXF1ZW5j ZXIgJWRcbiIsIGkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlvZl9pZCA9IG9mX21h dGNoX25vZGUoYnJjbXN0Yl9tZW1jX29mX21hdGNoLCBkbik7CisJCWlmICghb2ZfaWQpIHsKKwkJ CWlvdW5tYXAoYmFzZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRkcl9zZXFfZGF0 YSA9IG9mX2lkLT5kYXRhOworCQljdHJsLm5lZWRzX2Rkcl9wYWQgPSBkZHJfc2VxX2RhdGEtPm5l ZWRzX2Rkcl9wYWQ7CisJCS8qIEFkanVzdCB3YXJtIGJvb3Qgb2Zmc2V0IGJhc2VkIG9uIHRoZSBE RFIgc2VxdWVuY2VyICovCisJCWlmIChkZHJfc2VxX2RhdGEtPndhcm1fYm9vdF9vZmZzZXQpCisJ CQljdHJsLndhcm1fYm9vdF9vZmZzZXQgPSBkZHJfc2VxX2RhdGEtPndhcm1fYm9vdF9vZmZzZXQ7 CisKKwkJY3RybC5tZW1jc1tpXS5kZHJfY3RybCA9IGJhc2U7CisJCWkrKzsKKwl9CisKKwlwcl9k ZWJ1ZygiUE06IHN1cHBvcnRzIHdhcm0gYm9vdDolZCwgbWV0aG9kOiVkLCB3Ym9mZnM6JXhcbiIs CisJCWN0cmwuc3VwcG9ydF93YXJtX2Jvb3QsIGN0cmwuczNlbnRyeV9tZXRob2QsCisJCWN0cmwu d2FybV9ib290X29mZnNldCk7CisKKwlkbiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBz cmFtX2R0X2lkcyk7CisJaWYgKCFkbikgeworCQlwcl9lcnIoIlNSQU0gbm90IGZvdW5kXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gYnJjbXN0Yl9pbml0X3NyYW0oZG4pOwor CWlmIChyZXQpIHsKKwkJcHJfZXJyKCJlcnJvciBzZXR0aW5nIHVwIFNSQU0gZm9yIFBNXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwljdHJsLnBkZXYgPSBwZGV2OworCisJY3RybC5zM19wYXJh bXMgPSBrbWFsbG9jKHNpemVvZigqY3RybC5zM19wYXJhbXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWN0cmwuczNfcGFyYW1zKQorCQlyZXR1cm4gLUVOT01FTTsKKwljdHJsLnMzX3BhcmFtc19wYSA9 IGRtYV9tYXBfc2luZ2xlKCZwZGV2LT5kZXYsIGN0cmwuczNfcGFyYW1zLAorCQkJCQkgICBzaXpl b2YoKmN0cmwuczNfcGFyYW1zKSwKKwkJCQkJICAgRE1BX1RPX0RFVklDRSk7CisJaWYgKGRtYV9t YXBwaW5nX2Vycm9yKCZwZGV2LT5kZXYsIGN0cmwuczNfcGFyYW1zX3BhKSkgeworCQlwcl9lcnIo ImVycm9yIG1hcHBpbmcgRE1BIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8g b3V0OworCX0KKworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZp ZXJfbGlzdCwKKwkJCQkgICAgICAgJmJyY21zdGJfcG1fcGFuaWNfbmIpOworCisJcG1fcG93ZXJf b2ZmID0gYnJjbXN0Yl9wbV9wb3dlcm9mZjsKKwlzdXNwZW5kX3NldF9vcHMoJmJyY21zdGJfcG1f b3BzKTsKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoY3RybC5zM19wYXJhbXMpOworCisJ cHJfd2FybigiUE06IGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIGNvZGUgJWRcbiIsIHJldCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBicmNt c3RiX3BtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJicmNtc3RiLXBtIiwK KwkJLm9mX21hdGNoX3RhYmxlID0gYW9uX2N0cmxfZHRfaWRzLAorCX0sCit9OworCitzdGF0aWMg aW50IF9faW5pdCBicmNtc3RiX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJp dmVyX3Byb2JlKCZicmNtc3RiX3BtX2RyaXZlciwKKwkJCQkgICAgIGJyY21zdGJfcG1fcHJvYmUp OworfQorbW9kdWxlX2luaXQoYnJjbXN0Yl9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv c29jL2JjbS9icmNtc3RiL3BtL3BtLmggYi9kcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9wbS9wbS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTQyNTE5ZmRiOGY4Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2MvYmNtL2JyY21zdGIvcG0vcG0uaApAQCAtMCww ICsxLDc4IEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIEJyb2FkY29tIFNUQiBwb3dlciBtYW5h Z2VtZW50IC8gQWx3YXlzIE9OIChBT04pIGJsb2NrCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTYt MjAxNyBCcm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICovCisKKyNpZm5kZWYgX19CUkNNU1RCX1BNX0hfXworI2RlZmluZSBfX0JSQ01TVEJf UE1fSF9fCisKKyNkZWZpbmUgQU9OX0NUUkxfUkVTRVRfQ1RSTAkJMHgwMAorI2RlZmluZSBBT05f Q1RSTF9QTV9DVFJMCQkweDA0CisjZGVmaW5lIEFPTl9DVFJMX1BNX1NUQVRVUwkJMHgwOAorI2Rl ZmluZSBBT05fQ1RSTF9QTV9DUFVfV0FJVF9DT1VOVAkweDEwCisjZGVmaW5lIEFPTl9DVFJMX1BN X0lOSVRJQVRFCQkweDg4CisjZGVmaW5lIEFPTl9DVFJMX0hPU1RfTUlTQ19DTURTCQkweDhjCisj ZGVmaW5lIEFPTl9DVFJMX1NZU1RFTV9EQVRBX1JBTV9PRlMJMHgyMDAKKworLyogTUlQUyBQTSBj b25zdGFudHMgKi8KKy8qIE1FTUMwIG9mZnNldHMgKi8KKyNkZWZpbmUgRERSNDBfUEhZX0NPTlRS T0xfUkVHU18wX1BMTF9TVEFUVVMJMHgxMAorI2RlZmluZSBERFI0MF9QSFlfQ09OVFJPTF9SRUdT XzBfU1RBTkRCWV9DVFJMCTB4YTQKKworLyogVElNRVIgb2Zmc2V0cyAqLworI2RlZmluZSBUSU1F Ul9USU1FUjFfQ1RSTAkJMHgwYworI2RlZmluZSBUSU1FUl9USU1FUjFfU1RBVAkJMHgxYworCisv KiBUSU1FUiBkZWZpbmVzICovCisjZGVmaW5lIFJFU0VUX1RJTUVSCQkJMHgwCisjZGVmaW5lIFNU QVJUX1RJTUVSCQkJMHhiZmZmZmZmZgorI2RlZmluZSBUSU1FUl9NQVNLCQkJMHgzZmZmZmZmZgor CisvKiBQTV9DVFJMIGJpdGZpZWxkIChNZXRob2QgIzApICovCisjZGVmaW5lIFBNX0ZBU1RfUFdS RE9XTgkJCSgxIDw8IDYpCisjZGVmaW5lIFBNX1dBUk1fQk9PVAkJCSgxIDw8IDUpCisjZGVmaW5l IFBNX0RFRVBfU1RBTkRCWQkJCSgxIDw8IDQpCisjZGVmaW5lIFBNX0NQVV9QV1IJCQkoMSA8PCAz KQorI2RlZmluZSBQTV9VU0VfQ1BVX1JEWQkJCSgxIDw8IDIpCisjZGVmaW5lIFBNX1BMTF9QV1JE T1dOCQkJKDEgPDwgMSkKKyNkZWZpbmUgUE1fUFdSX0RPV04JCQkoMSA8PCAwKQorCisvKiBQTV9D VFJMIGJpdGZpZWxkIChNZXRob2QgIzEpICovCisjZGVmaW5lIFBNX0RQSFlfU1RBTkRCWV9DTEVB UgkJKDEgPDwgMjApCisjZGVmaW5lIFBNX01JTl9TM19XSURUSF9USU1FUl9CWVBBU1MJKDEgPDwg NykKKworI2RlZmluZSBQTV9TMl9DT01NQU5ECShQTV9QTExfUFdSRE9XTiB8IFBNX1VTRV9DUFVf UkRZIHwgUE1fUFdSX0RPV04pCisKKy8qIE1ldGhvZCAwIGJpdG1hc2tzICovCisjZGVmaW5lIFBN X0NPTERfQ09ORklHCShQTV9QTExfUFdSRE9XTiB8IFBNX0RFRVBfU1RBTkRCWSkKKyNkZWZpbmUg UE1fV0FSTV9DT05GSUcJKFBNX0NPTERfQ09ORklHIHwgUE1fVVNFX0NQVV9SRFkgfCBQTV9XQVJN X0JPT1QpCisKKy8qIE1ldGhvZCAxIGJpdG1hc2sgKi8KKyNkZWZpbmUgTTFfUE1fV0FSTV9DT05G SUcgKFBNX0RQSFlfU1RBTkRCWV9DTEVBUiB8IFwKKwkJCSAgIFBNX01JTl9TM19XSURUSF9USU1F Ul9CWVBBU1MgfCBcCisJCQkgICBQTV9XQVJNX0JPT1QgfCBQTV9ERUVQX1NUQU5EQlkgfCBcCisJ CQkgICBQTV9QTExfUFdSRE9XTiB8IFBNX1BXUl9ET1dOKQorCisjZGVmaW5lIE0xX1BNX0NPTERf Q09ORklHIChQTV9EUEhZX1NUQU5EQllfQ0xFQVIgfCBcCisJCQkgICBQTV9NSU5fUzNfV0lEVEhf VElNRVJfQllQQVNTIHwgXAorCQkJICAgUE1fREVFUF9TVEFOREJZIHwgXAorCQkJICAgUE1fUExM X1BXUkRPV04gfCBQTV9QV1JfRE9XTikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJu IGNvbnN0IHVuc2lnbmVkIGxvbmcgYnJjbXN0Yl9wbV9kb19zMl9zejsKK2V4dGVybiBhc21saW5r YWdlIGludCBicmNtc3RiX3BtX2RvX3MyKHZvaWQgX19pb21lbSAqYW9uX2N0cmxfYmFzZSwKKwkJ dm9pZCBfX2lvbWVtICpkZHJfcGh5X3BsbF9zdGF0dXMpOworI2VuZGlmCisKKyNlbmRpZiAvKiBf X0JSQ01TVEJfUE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9iY20vYnJjbXN0Yi9w bS9zMi1hcm0uUyBiL2RyaXZlcnMvc29jL2JjbS9icmNtc3RiL3BtL3MyLWFybS5TCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWQ0NzJkNTY0NjM4Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9zb2MvYmNtL2JyY21zdGIvcG0vczItYXJtLlMKQEAgLTAsMCArMSw3 NiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0LTIwMTcgQnJvYWRjb20KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworI2luY2x1ZGUgInBt LmgiCisKKwkudGV4dAorCS5hbGlnbgkzCisKKyNkZWZpbmUgQU9OX0NUUkxfUkVHCQlyMTAKKyNk ZWZpbmUgRERSX1BIWV9TVEFUVVNfUkVHCXIxMQorCisvKgorICogcjA6IEFPTl9DVFJMIGJhc2Ug YWRkcmVzcworICogcjE6IEREUlkgUEhZIFBMTCBzdGF0dXMgcmVnaXN0ZXIgYWRkcmVzcworICov CitFTlRSWShicmNtc3RiX3BtX2RvX3MyKQorCXN0bWZkCXNwISwge3I0LXIxMSwgbHJ9CisJbW92 CUFPTl9DVFJMX1JFRywgcjAKKwltb3YJRERSX1BIWV9TVEFUVVNfUkVHLCByMQorCisJLyogRmx1 c2ggbWVtb3J5IHRyYW5zYWN0aW9ucyAqLworCWRzYgorCisJLyogQ2FjaGUgRERSX1BIWV9TVEFU VVNfUkVHIHRyYW5zbGF0aW9uICovCisJbGRyCXIwLCBbRERSX1BIWV9TVEFUVVNfUkVHXQorCisJ LyogcG93ZXIgZG93biByZXF1ZXN0ICovCisJbGRyCXIwLCA9UE1fUzJfQ09NTUFORAorCWxkcgly MSwgPTAKKwlzdHIJcjEsIFtBT05fQ1RSTF9SRUcsICNBT05fQ1RSTF9QTV9DVFJMXQorCWxkcgly MSwgW0FPTl9DVFJMX1JFRywgI0FPTl9DVFJMX1BNX0NUUkxdCisJc3RyCXIwLCBbQU9OX0NUUkxf UkVHLCAjQU9OX0NUUkxfUE1fQ1RSTF0KKwlsZHIJcjAsIFtBT05fQ1RSTF9SRUcsICNBT05fQ1RS TF9QTV9DVFJMXQorCisJLyogV2FpdCBmb3IgaW50ZXJydXB0ICovCisJd2ZpCisJbm9wCisKKwkv KiBCcmluZyBNRU1DIGJhY2sgdXAgKi8KKzE6CWxkcglyMCwgW0REUl9QSFlfU1RBVFVTX1JFR10K KwlhbmRzCXIwLCAjMQorCWJlcQkxYgorCisJLyogUG93ZXItdXAgaGFuZHNoYWtlICovCisJbGRy CXIwLCA9MQorCXN0cglyMCwgW0FPTl9DVFJMX1JFRywgI0FPTl9DVFJMX0hPU1RfTUlTQ19DTURT XQorCWxkcglyMCwgW0FPTl9DVFJMX1JFRywgI0FPTl9DVFJMX0hPU1RfTUlTQ19DTURTXQorCisJ bGRyCXIwLCA9MAorCXN0cglyMCwgW0FPTl9DVFJMX1JFRywgI0FPTl9DVFJMX1BNX0NUUkxdCisJ bGRyCXIwLCBbQU9OX0NUUkxfUkVHLCAjQU9OX0NUUkxfUE1fQ1RSTF0KKworCS8qIFJldHVybiB0 byBjYWxsZXIgKi8KKwlsZHIJcjAsID0wCisJbGRtZmQJc3AhLCB7cjQtcjExLCBwY30KKworCUVO RFBST0MoYnJjbXN0Yl9wbV9kb19zMikKKworCS8qIFBsYWNlIGxpdGVyYWwgcG9vbCBoZXJlICov CisJLmx0b3JnCisKK0VOVFJZKGJyY21zdGJfcG1fZG9fczJfc3opCisJLndvcmQgICAuIC0gYnJj bXN0Yl9wbV9kb19zMgotLSAKMi45LjMKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==