ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggNTgxZmQzOS4uMWViYTI4YSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTIzLDYgKzIzLDcgQEAKIEFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgogQXhlbCBEeWtzIDx4bEB4bHNpZ25lZC5uZXQ+CitBeGVsIExpbiA8YXhlbC5saW5AZ21haWwuY29tPgogQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+CiBCZW4gTSBDYWhpbGwgPGJlbi5tLmNhaGlsbEBpbnRlbC5jb20+CiBCasO2cm4gU3RlaW5icmluayA8Qi5TdGVpbmJyaW5rQGdteC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXQ5MSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXQ5MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M2YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxCkBAIC0wLDAgKzEsMjUgQEAKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXQ5MV9jYW4vbmV0LzxpZmFjZT4vbWIwX2lkCitEYXRlOgkJSmFudWFyeSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuMzgKK0NvbnRhY3Q6CU1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CitEZXNjcmlwdGlvbjoKKwkJVmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjYW5faWQgb2YgbWFpbGJveCAwLgorCisJCURlZmF1bHQ6IDB4N2ZmIChzdGFuZGFyZCBmcmFtZSkKKworCQlEdWUgdG8gYSBjaGlwIGJ1ZyAoZXJyYXRhIDUwLjIuNi4zICYgNTAuMy41LjMgaW4KKwkJIkFUOTFTQU05MjYzIFByZWxpbWluYXJ5IDYyNDlILUFUQVJNLTI3LUp1bC0wOSIpIHRoZQorCQljb250ZW50cyBvZiBtYWlsYm94IDAgbWF5IGJlIHNlbmQgdW5kZXIgY2VydGFpbgorCQljb25kaXRpb25zIChldmVuIGlmIGRpc2FibGVkIG9yIGluIHJ4IG1vZGUpLgorCisJCVRoZSB3b3JrYXJvdW5kIGluIHRoZSBlcnJhdGEgc3VnZ2VzdHMgbm90IHRvIHVzZSB0aGUKKwkJbWFpbGJveCBhbmQgbG9hZCBpdCB3aXRoIGFuIHVudXNlZCBpZGVudGlmaWVyLgorCisJCUluIG9yZGVyIHRvIHVzZSBhbiBleHRlbmRlZCBjYW5faWQgYWRkIHRoZQorCQlDQU5fRUZGX0ZMQUcgKDB4ODAwMDAwMDBVKSB0byB0aGUgY2FuX2lkLiBFeGFtcGxlOgorCisJCS0gc3RhbmRhcmQgaWQgMHg3ZmY6CisJCWVjaG8gMHg3ZmYgICAgICA+IC9zeXMvY2xhc3MvbmV0L2NhbjAvbWIwX2lkCisKKwkJLSBleHRlbmRlZCBpZCAweDFmZmZmZmZmOgorCQllY2hvIDB4OWZmZmZmZmYgPiAvc3lzL2NsYXNzL25ldC9jYW4wL21iMF9pZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAppbmRleCAzNTQ0N2UwLi4zNmY2M2Q0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtMjE3LDggKzIxNyw4IEBACiAgIDxjaGFwdGVyIGlkPSJ1YXJ0MTZ4NTAiPgogICAgICA8dGl0bGU+MTZ4NTAgVUFSVCBEcml2ZXI8L3RpdGxlPgogIUlpbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKLSFFZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwotIUVkcml2ZXJzL3NlcmlhbC84MjUwLmMKKyFFZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKyFFZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9ImZiZGV2Ij4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBiOTU5NjU5Li5iM2YzNWU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02MDMsMyArNjAzLDE5IEBACiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CW5vc3dhcGFjY291bnQga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIKK1doZW46CTIuNi40MAorV2h5OglUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gb2YgbWVtc3cgZmVhdHVyZSBlbmFibGVkIGJ5CisJQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBjb3VsZCBiZSBkaXNhYmxlZCBieSB0aGUgbm9zd2FwYWNjb3VudAorCWtlcm5lbCBwYXJhbWV0ZXIgKGludHJvZHVjZWQgaW4gMi42LjI5LXJjMSkuIExhdGVyIG9uLCB0aGlzIGRlY2lzaW9uCisJdHVybmVkIG91dCB0byBiZSBub3QgaWRlYWwgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSB0aGUgZmVhdHVyZSBjb21waWxlZAorCWluIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBsZXQgb25seSBpbnRlcmVzdGVkIHRvIGVuYWJsZSBpdAorCShlLmcuIGdlbmVyYWwgZGlzdHJpYnV0aW9uIGtlcm5lbHMgbWlnaHQgbmVlZCBpdCkuIFRoZXJlZm9yZSB3ZSBoYXZlCisJYWRkZWQgc3dhcGFjY291bnRbPTB8MV0gcGFyYW1ldGVyIChpbnRyb2R1Y2VkIGluIDIuNi4zNykgd2hpY2ggcHJvdmlkZXMKKwl0aGUgYm90aCBwb3NzaWJpbGl0aWVzLiBJZiB3ZSByZW1vdmUgbm9zd2FwYWNjb3VudCB3ZSB3aWxsIGhhdmUKKwlsZXNzIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhbmQgd2UKKwljYW4gYWxzbyBjbGVhbnVwIHRoZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYSBiaXQgKCkuCitXaG86CU1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY3o+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CmluZGV4IDZlZjhjZjMuLjkzM2JjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtNDYwLDYgKzQ2MCw4IEBACiAyLjEuMzA6CiAJLSBGaXggd3JpdGV2KCkgKGl0IGtlcHQgd3JpdGluZyB0aGUgZmlyc3Qgc2VnbWVudCBvdmVyIGFuZCBvdmVyIGFnYWluCiAJICBpbnN0ZWFkIG9mIG1vdmluZyBvbnRvIHN1YnNlcXVlbnQgc2VnbWVudHMpLgorCS0gRml4IGNyYXNoIGluIG50ZnNfbWZ0X3JlY29yZF9hbGxvYygpIHdoZW4gbWFwcGluZyB0aGUgbmV3IGV4dGVudCBtZnQKKwkgIHJlY29yZCBmYWlsZWQuCiAyLjEuMjk6CiAJLSBGaXggYSBkZWFkbG9jayB3aGVuIG1vdW50aW5nIHJlYWQtd3JpdGUuCiAyLjEuMjg6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGI3MmUwNzEuLjg5ODM1YTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00MywxMSArNDMsMTEgQEAKIAlBVlIzMglBVlIzMiBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlBWDI1CUFwcHJvcHJpYXRlIEFYLjI1IHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlCTEFDS0ZJTiBCbGFja2ZpbiBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlEUk0JRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VtZW50IHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlEWU5BTUlDX0RFQlVHIEJ1aWxkIGluIGRlYnVnIG1lc3NhZ2VzIGFuZCBlbmFibGUgdGhlbSBhdCBydW50aW1lCiAJRURECUJJT1MgRW5oYW5jZWQgRGlzayBEcml2ZSBTZXJ2aWNlcyAoRUREKSBpcyBlbmFibGVkCiAJRUZJCUVGSSBQYXJ0aXRpb25pbmcgKEdQVCkgaXMgZW5hYmxlZAogCUVJREUJRUlERS9BVEFQSSBzdXBwb3J0IGlzIGVuYWJsZWQuCi0JRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCi0JRFlOQU1JQ19ERUJVRyBCdWlsZCBpbiBkZWJ1ZyBtZXNzYWdlcyBhbmQgZW5hYmxlIHRoZW0gYXQgcnVudGltZQogCUZCCVRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGVuYWJsZWQuCiAJR0NPVglHQ09WIHByb2ZpbGluZyBpcyBlbmFibGVkLgogCUhXCUFwcHJvcHJpYXRlIGhhcmR3YXJlIGlzIGVuYWJsZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKaW5kZXggNWRjNjM4Ny4uMjVkMmY0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtNDksNyArNDksOCBAQAogMy4zCUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgd2l0aCBJZmVuc2xhdmUKIDMuMy4xCQlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyBNYW51YWxseQogMy40CUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgdmlhIFN5c2ZzCi0zLjUJT3ZlcnJpZGluZyBDb25maWd1cmF0aW9uIGZvciBTcGVjaWFsIENhc2VzCiszLjUJQ29uZmlndXJhdGlvbiB3aXRoIEludGVyZmFjZXMgU3VwcG9ydAorMy42CU92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogCiA0LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KIDQuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KQEAgLTE2MSw4ICsxNjIsOCBAQAogZGVmYXVsdCBrZXJuZWwgc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgogCiBTRUNPTkQgSU1QT1JUQU5UIE5PVEU6Ci0JSWYgeW91IHBsYW4gdG8gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgc3lzZnMsIHlvdSBkbyBub3QgbmVlZAotdG8gdXNlIGlmZW5zbGF2ZS4KKwlJZiB5b3UgcGxhbiB0byBjb25maWd1cmUgYm9uZGluZyB1c2luZyBzeXNmcyBvciB1c2luZyB0aGUKKy9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGZpbGUsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgaWZlbnNsYXZlLgogCiAyLiBCb25kaW5nIERyaXZlciBPcHRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NzksMjIgKzc4MCwyNiBAQAogCiAJWW91IGNhbiBjb25maWd1cmUgYm9uZGluZyB1c2luZyBlaXRoZXIgeW91ciBkaXN0cm8ncyBuZXR3b3JrCiBpbml0aWFsaXphdGlvbiBzY3JpcHRzLCBvciBtYW51YWxseSB1c2luZyBlaXRoZXIgaWZlbnNsYXZlIG9yIHRoZQotc3lzZnMgaW50ZXJmYWNlLiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0d28gcGFja2FnZXMgZm9yIHRoZQotbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcuICBSZWNlbnQKLXZlcnNpb25zIG9mIHRoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIKK3N5c2ZzIGludGVyZmFjZS4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdGhyZWUgcGFja2FnZXMgZm9yIHRoZQorbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cywgc3lzY29uZmlnIG9yIGludGVyZmFjZXMuCitSZWNlbnQgdmVyc2lvbnMgb2YgdGhlc2UgcGFja2FnZXMgaGF2ZSBzdXBwb3J0IGZvciBib25kaW5nLCB3aGlsZSBvbGRlcgogdmVyc2lvbnMgZG8gbm90LgogCiAJV2Ugd2lsbCBmaXJzdCBkZXNjcmliZSB0aGUgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYm9uZGluZyBmb3IKLWRpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgYW5kIHN5c2NvbmZpZyB3aXRoIGZ1bGwgb3IKLXBhcnRpYWwgc3VwcG9ydCBmb3IgYm9uZGluZywgdGhlbiBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nCitkaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzLCBzeXNjb25maWcgYW5kIGludGVyZmFjZXMgd2l0aCBmdWxsCitvciBwYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZwogYm9uZGluZyB3aXRob3V0IHN1cHBvcnQgZnJvbSB0aGUgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzIChpLmUuLAogb2xkZXIgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnKS4KIAotCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZyBvcgotaW5pdHNjcmlwdHMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCisJSWYgeW91J3JlIHVuc3VyZSB3aGV0aGVyIHlvdXIgZGlzdHJvIHVzZXMgc3lzY29uZmlnLAoraW5pdHNjcmlwdHMgb3IgaW50ZXJmYWNlcywgb3IgZG9uJ3Qga25vdyBpZiBpdCdzIG5ldyBlbm91Z2gsIGhhdmUgbm8gZmVhci4KIERldGVybWluaW5nIHRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KIAotCUZpcnN0LCBpc3N1ZSB0aGUgY29tbWFuZDoKKwlGaXJzdCwgbG9vayBmb3IgYSBmaWxlIGNhbGxlZCBpbnRlcmZhY2VzIGluIC9ldGMvbmV0d29yayBkaXJlY3RvcnkuCitJZiB0aGlzIGZpbGUgaXMgcHJlc2VudCBpbiB5b3VyIHN5c3RlbSwgdGhlbiB5b3VyIHN5c3RlbSB1c2UgaW50ZXJmYWNlcy4gU2VlCitDb25maWd1cmF0aW9uIHdpdGggSW50ZXJmYWNlcyBTdXBwb3J0LgorCisJRWxzZSwgaXNzdWUgdGhlIGNvbW1hbmQ6CiAKICQgcnBtIC1xZiAvc2Jpbi9pZnVwCiAKQEAgLTEzMjcsOCArMTMzMiw2MiBAQAogZWNobyArZXRoMiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCiBlY2hvICtldGgzID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKIAotMy41IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcworMy41IENvbmZpZ3VyYXRpb24gd2l0aCBJbnRlcmZhY2VzIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB3aGljaCB1c2UgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgZmlsZQordG8gZGVzY3JpYmUgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgbW9zdCBub3RhYmx5IERlYmlhbiBhbmQgaXQncworZGVyaXZhdGl2ZXMuCisKKwlUaGUgaWZ1cCBhbmQgaWZkb3duIGNvbW1hbmRzIG9uIERlYmlhbiBkb24ndCBzdXBwb3J0IGJvbmRpbmcgb3V0IG9mCit0aGUgYm94LiBUaGUgaWZlbnNsYXZlLTIuNiBwYWNrYWdlIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gcHJvdmlkZSBib25kaW5nCitzdXBwb3J0LiAgT25jZSBpbnN0YWxsZWQsIHRoaXMgcGFja2FnZSB3aWxsIHByb3ZpZGUgYm9uZC0qIG9wdGlvbnMgdG8gYmUgdXNlZAoraW50byAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy4KKworCU5vdGUgdGhhdCBpZmVuc2xhdmUtMi42IHBhY2thZ2Ugd2lsbCBsb2FkIHRoZSBib25kaW5nIG1vZHVsZSBhbmQgdXNlCit0aGUgaWZlbnNsYXZlIGNvbW1hbmQgd2hlbiBhcHByb3ByaWF0ZS4KKworRXhhbXBsZSBDb25maWd1cmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcywgdGhlIGZvbGxvd2luZyBzdGFuemEgd2lsbCBjb25maWd1cmUgYm9uZDAsIGluCithY3RpdmUtYmFja3VwIG1vZGUsIHdpdGggZXRoMCBhbmQgZXRoMSBhcyBzbGF2ZXMuCisKK2F1dG8gYm9uZDAKK2lmYWNlIGJvbmQwIGluZXQgZGhjcAorCWJvbmQtc2xhdmVzIGV0aDAgZXRoMQorCWJvbmQtbW9kZSBhY3RpdmUtYmFja3VwCisJYm9uZC1taWltb24gMTAwCisJYm9uZC1wcmltYXJ5IGV0aDAgZXRoMQorCitJZiB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiBkb2Vzbid0IHdvcmssIHlvdSBtaWdodCBoYXZlIGEgc3lzdGVtIHVzaW5nCit1cHN0YXJ0IGZvciBzeXN0ZW0gc3RhcnR1cC4gVGhpcyBpcyBtb3N0IG5vdGFibHkgdHJ1ZSBmb3IgcmVjZW50CitVYnVudHUgdmVyc2lvbnMuIFRoZSBmb2xsb3dpbmcgc3RhbnphIGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIHdpbGwKK3Byb2R1Y2UgdGhlIHNhbWUgcmVzdWx0IG9uIHRob3NlIHN5c3RlbXMuCisKK2F1dG8gYm9uZDAKK2lmYWNlIGJvbmQwIGluZXQgZGhjcAorCWJvbmQtc2xhdmVzIG5vbmUKKwlib25kLW1vZGUgYWN0aXZlLWJhY2t1cAorCWJvbmQtbWlpbW9uIDEwMAorCithdXRvIGV0aDAKK2lmYWNlIGV0aDAgaW5ldCBtYW51YWwKKwlib25kLW1hc3RlciBib25kMAorCWJvbmQtcHJpbWFyeSBldGgwIGV0aDEKKworYXV0byBldGgxCitpZmFjZSBldGgxIGluZXQgbWFudWFsCisJYm9uZC1tYXN0ZXIgYm9uZDAKKwlib25kLXByaW1hcnkgZXRoMCBldGgxCisKK0ZvciBhIGZ1bGwgbGlzdCBvZiBib25kLSogc3VwcG9ydGVkIG9wdGlvbnMgaW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgYW5kIHNvbWUKK21vcmUgYWR2YW5jZWQgZXhhbXBsZXMgdGFpbG9yZWQgdG8geW91IHBhcnRpY3VsYXIgZGlzdHJvcywgc2VlIHRoZSBmaWxlcyBpbgorL3Vzci9zaGFyZS9kb2MvaWZlbnNsYXZlLTIuNi4KKworMy42IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGVuIHVzaW5nIHRoZSBib25kaW5nIGRyaXZlciwgdGhlIHBoeXNpY2FsIHBvcnQgd2hpY2ggdHJhbnNtaXRzIGEgZnJhbWUgaXMKIHR5cGljYWxseSBzZWxlY3RlZCBieSB0aGUgYm9uZGluZyBkcml2ZXIsIGFuZCBpcyBub3QgcmVsZXZhbnQgdG8gdGhlIHVzZXIgb3IKIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiAgVGhlIG91dHB1dCBwb3J0IGlzIHNpbXBseSBzZWxlY3RlZCB1c2luZyB0aGUgcG9saWNpZXMgb2YKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZDk5OTQwZC4uYWMzYjRhNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTE4Nyw3ICsxODcsNyBAQAogdGNwX2RzYWNrIC0gQk9PTEVBTgogCUFsbG93cyBUQ1AgdG8gc2VuZCAiZHVwbGljYXRlIiBTQUNLcy4KIAotdGNwX2VjbiAtIEJPT0xFQU4KK3RjcF9lY24gLSBJTlRFR0VSCiAJRW5hYmxlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pIGluIFRDUC4gRUNOIGlzIG9ubHkKIAl1c2VkIHdoZW4gYm90aCBlbmRzIG9mIHRoZSBUQ1AgZmxvdyBzdXBwb3J0IGl0LiBJdCBpcyB1c2VmdWwgdG8KIAlhdm9pZCBsb3NzZXMgZHVlIHRvIGNvbmdlc3Rpb24gKHdoZW4gdGhlIGJvdHRsZW5lY2sgcm91dGVyIHN1cHBvcnRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKaW5kZXggMDFlNjk0MC4uMWNkNWQ1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dApAQCAtMSwzICsxLDcgQEAKK1ZlcnNpb24gMTUgb2Ygc2NoZWRzdGF0cyBkcm9wcGVkIGNvdW50ZXJzIGZvciBzb21lIHNjaGVkX3lpZWxkOgoreWxkX2V4cF9lbXB0eSwgeWxkX2FjdF9lbXB0eSBhbmQgeWxkX2JvdGhfZW1wdHkuIE90aGVyd2lzZSwgaXQgaXMKK2lkZW50aWNhbCB0byB2ZXJzaW9uIDE0LgorCiBWZXJzaW9uIDE0IG9mIHNjaGVkc3RhdHMgaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2NoZWRfZG9tYWlucywgd2hpY2ggaGl0IHRoZQogbWFpbmxpbmUga2VybmVsIGluIDIuNi4yMCBhbHRob3VnaCBpdCBpcyBpZGVudGljYWwgdG8gdGhlIHN0YXRzIGZyb20gdmVyc2lvbgogMTIgd2hpY2ggd2FzIGluIHRoZSBrZXJuZWwgZnJvbSAyLjYuMTMtMi42LjE5ICh2ZXJzaW9uIDEzIG5ldmVyIHNhdyBhIGtlcm5lbApAQCAtMjgsMzIgKzMyLDI1IEBACiAKIENQVSBzdGF0aXN0aWNzCiAtLS0tLS0tLS0tLS0tLQotY3B1PE4+IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyCitjcHU8Tj4gMSAyIDMgNCA1IDYgNyA4IDkKIAotTk9URTogSW4gdGhlIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljcywgdGhlIGFjdGl2ZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGVtcHR5Ci0gICAgaWYgaXQgaGFzIG9ubHkgb25lIHByb2Nlc3MgaW4gaXQsIHNpbmNlIG9idmlvdXNseSB0aGUgcHJvY2VzcyBjYWxsaW5nCi0gICAgc2NoZWRfeWllbGQoKSBpcyB0aGF0IHByb2Nlc3MuCi0KLUZpcnN0IGZvdXIgZmllbGRzIGFyZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3M6Ci0gICAgIDEpICMgb2YgdGltZXMgYm90aCB0aGUgYWN0aXZlIGFuZCB0aGUgZXhwaXJlZCBxdWV1ZSB3ZXJlIGVtcHR5Ci0gICAgIDIpICMgb2YgdGltZXMganVzdCB0aGUgYWN0aXZlIHF1ZXVlIHdhcyBlbXB0eQotICAgICAzKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGV4cGlyZWQgcXVldWUgd2FzIGVtcHR5Ci0gICAgIDQpICMgb2YgdGltZXMgc2NoZWRfeWllbGQoKSB3YXMgY2FsbGVkCitGaXJzdCBmaWVsZCBpcyBhIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljOgorICAgICAxKSAjIG9mIHRpbWVzIHNjaGVkX3lpZWxkKCkgd2FzIGNhbGxlZAogCiBOZXh0IHRocmVlIGFyZSBzY2hlZHVsZSgpIHN0YXRpc3RpY3M6Ci0gICAgIDUpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAotICAgICA2KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAotICAgICA3KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKKyAgICAgMikgIyBvZiB0aW1lcyB3ZSBzd2l0Y2hlZCB0byB0aGUgZXhwaXJlZCBxdWV1ZSBhbmQgcmV1c2VkIGl0CisgICAgIDMpICMgb2YgdGltZXMgc2NoZWR1bGUoKSB3YXMgY2FsbGVkCisgICAgIDQpICMgb2YgdGltZXMgc2NoZWR1bGUoKSBsZWZ0IHRoZSBwcm9jZXNzb3IgaWRsZQogCiBOZXh0IHR3byBhcmUgdHJ5X3RvX3dha2VfdXAoKSBzdGF0aXN0aWNzOgotICAgICA4KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZAotICAgICA5KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZCB0byB3YWtlIHVwIHRoZSBsb2NhbCBjcHUKKyAgICAgNSkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQKKyAgICAgNikgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQgdG8gd2FrZSB1cCB0aGUgbG9jYWwgY3B1CiAKIE5leHQgdGhyZWUgYXJlIHN0YXRpc3RpY3MgZGVzY3JpYmluZyBzY2hlZHVsaW5nIGxhdGVuY3k6Ci0gICAgMTApIHN1bSBvZiBhbGwgdGltZSBzcGVudCBydW5uaW5nIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbiBqaWZmaWVzKQotICAgIDExKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgd2FpdGluZyB0byBydW4gYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluCisgICAgIDcpIHN1bSBvZiBhbGwgdGltZSBzcGVudCBydW5uaW5nIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbiBqaWZmaWVzKQorICAgICA4KSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgd2FpdGluZyB0byBydW4gYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluCiAgICAgICAgIGppZmZpZXMpCi0gICAgMTIpICMgb2YgdGltZXNsaWNlcyBydW4gb24gdGhpcyBjcHUKKyAgICAgOSkgIyBvZiB0aW1lc2xpY2VzIHJ1biBvbiB0aGlzIGNwdQogCiAKIERvbWFpbiBzdGF0aXN0aWNzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDE2YWU0MzAuLjBjYWY3N2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yOTYsNiArMjk2LDcgQEAKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGhwLWxhcHRvcAlIUCBsYXB0b3BzLCBlIGcgRzYwCisgIGFzdXMJCUFzdXMgSzUySlUsIExlbm92byBHNTYwCiAgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcwogICBkZWxsLXZvc3RybwlEZWxsIFZvc3RybwogICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1NTU5MmY4Li40ODM3OTA3IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtOTc4LDYgKzk3OCw4IEBACiBGOglhcmNoL2FybS9wbGF0LXNhbXN1bmcvCiBGOglhcmNoL2FybS9wbGF0LXMzYzI0eHgvCiBGOglhcmNoL2FybS9wbGF0LXM1cC8KK0Y6CWRyaXZlcnMvKi8qczNjMjQxMCoKK0Y6CWRyaXZlcnMvKi8qLypzM2MyNDEwKgogCiBBUk0vUzNDMjQxMCBBUk0gQVJDSElURUNUVVJFCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CkBAIC0yNzcyLDYgKzI3NzQsMTUgQEAKIEY6CWRyaXZlcnMvaXNkbi9naWdhc2V0LwogRjoJaW5jbHVkZS9saW51eC9naWdhc2V0X2Rldi5oCiAKK0dQSU8gU1VCU1lTVEVNCitNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAorRjoJRG9jdW1lbnRhdGlvbi9ncGlvL2dwaW8udHh0CitGOglkcml2ZXJzL2dwaW8vCitGOglpbmNsdWRlL2xpbnV4L2dwaW8qCisKIEdSRVRIIDEwLzEwMC8xRyBFdGhlcm5ldCBNQUMgZGV2aWNlIGRyaXZlcgogTToJS3Jpc3RvZmZlciBHbGVtYm8gPGtyaXN0b2ZmZXJAZ2Fpc2xlci5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCkBAIC0zMTM5LDYgKzMxNTAsMTIgQEAKIEY6CW5ldC9pZWVlODAyMTU0LwogRjoJZHJpdmVycy9pZWVlODAyMTU0LwogCitJS0FOT1MvQURJIEVBR0xFIEFEU0wgVVNCIERSSVZFUgorTToJTWF0dGhpZXUgQ2FzdGV0IDxjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcj4KK006CVN0YW5pc2xhdyBHcnVzemthIDxzdGZfeGxAd3AucGw+CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCisKIElOVEVHUklUWSBNRUFTVVJFTUVOVCBBUkNISVRFQ1RVUkUgKElNQSkKIE06CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CiBTOglTdXBwb3J0ZWQKQEAgLTMzMjcsNyArMzM0NCw2IEBACiBGOglpbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCiAKIElOVEVMIFdJUkVMRVNTIFdJRkkgTElOSyAoaXdsd2lmaSkKLU06CVJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KIE06CVdleS1ZaSBHdXkgPHdleS15aS53Lmd1eUBpbnRlbC5jb20+CiBNOglJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwpAQCAtMzY3NCw2ICszNjkwLDI4IEBACiBGOglpbmNsdWRlL2tleXMvCiBGOglzZWN1cml0eS9rZXlzLwogCitLRVlTLVRSVVNURUQKK006CURhdmlkIFNhZmZvcmQgPHNhZmZvcmRAd2F0c29uLmlibS5jb20+CitNOglNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZworTDoJa2V5cmluZ3NAbGludXgtbmZzLm9yZworUzoJU3VwcG9ydGVkCitGOglEb2N1bWVudGF0aW9uL2tleXMtdHJ1c3RlZC1lbmNyeXB0ZWQudHh0CitGOglpbmNsdWRlL2tleXMvdHJ1c3RlZC10eXBlLmgKK0Y6CXNlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCitGOglzZWN1cml0eS9rZXlzL3RydXN0ZWQuaAorCitLRVlTLUVOQ1JZUFRFRAorTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KK006CURhdmlkIFNhZmZvcmQgPHNhZmZvcmRAd2F0c29uLmlibS5jb20+CitMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnCitMOglrZXlyaW5nc0BsaW51eC1uZnMub3JnCitTOglTdXBwb3J0ZWQKK0Y6CURvY3VtZW50YXRpb24va2V5cy10cnVzdGVkLWVuY3J5cHRlZC50eHQKK0Y6CWluY2x1ZGUva2V5cy9lbmNyeXB0ZWQtdHlwZS5oCitGOglzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5jCitGOglzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5oCisKIEtHREIgLyBLREIgL2RlYnVnX2NvcmUKIE06CUphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CiBXOglodHRwOi8va2dkYi53aWtpLmtlcm5lbC5vcmcvCkBAIC00NTYyLDcgKzQ2MDAsNyBAQAogCiBPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKIE06CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KLUw6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitMOglkZXZpY2V0cmVlLWRpc2N1c3NAbGlzdHMub3psYWJzLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQogVDoJZ2l0IGdpdDovL2dpdC5zZWNyZXRsYWIuY2EvZ2l0L2xpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKQEAgLTU1MjIsMTIgKzU1NjAsMTEgQEAKIEY6CWRyaXZlcnMvc2NzaS9iZTJpc2NzaS8KIAogU0VSVkVSIEVOR0lORVMgMTBHYnBzIE5JQyAtIEJsYWRlRW5naW5lIDIgRFJJVkVSCi1NOglTYXRoeWEgUGVybGEgPHNhdGh5YXBAc2VydmVyZW5naW5lcy5jb20+Ci1NOglTdWJidSBTZWV0aGFyYW1hbiA8c3ViYnVzQHNlcnZlcmVuZ2luZXMuY29tPgotTToJU2FydmVzaHdhciBCYW5kaSA8c2FydmVzaHdhcmJAc2VydmVyZW5naW5lcy5jb20+Ci1NOglBaml0IEtoYXBhcmRlIDxhaml0a0BzZXJ2ZXJlbmdpbmVzLmNvbT4KK006CVNhdGh5YSBQZXJsYSA8c2F0aHlhLnBlcmxhQGVtdWxleC5jb20+CitNOglTdWJidSBTZWV0aGFyYW1hbiA8c3ViYnUuc2VldGhhcmFtYW5AZW11bGV4LmNvbT4KK006CUFqaXQgS2hhcGFyZGUgPGFqaXQua2hhcGFyZGVAZW11bGV4LmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cuc2VydmVyZW5naW5lcy5jb20KK1c6CWh0dHA6Ly93d3cuZW11bGV4LmNvbQogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL25ldC9iZW5ldC8KIApAQCAtNTU4NywxOCArNTYyNCwyMCBAQAogCiBTSU1URUMgRUIxMTBBVFggKENoYWxpY2UgQ0FUUykKIFA6CUJlbiBEb29rcwotTToJVmluY2VudCBTYW5kZXJzIDxzdXBwb3J0QHNpbXRlYy5jby51az4KK1A6CVZpbmNlbnQgU2FuZGVycyA8dmluY2VAc2ltdGVjLmNvLnVrPgorTToJU2ltdGVjIExpbnV4IFRlYW0gPGxpbnV4QHNpbXRlYy5jby51az4KIFc6CWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL0VCMTEwQVRYLwogUzoJU3VwcG9ydGVkCiAKIFNJTVRFQyBFQjI0MTBJVFggKEJBU1QpCiBQOglCZW4gRG9va3MKLU06CVZpbmNlbnQgU2FuZGVycyA8c3VwcG9ydEBzaW10ZWMuY28udWs+CitQOglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KK006CVNpbXRlYyBMaW51eCBUZWFtIDxsaW51eEBzaW10ZWMuY28udWs+CiBXOglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvCiBTOglTdXBwb3J0ZWQKLUY6CWFyY2gvYXJtL21hY2gtczNjMjQxMC8KLUY6CWRyaXZlcnMvKi8qczNjMjQxMCoKLUY6CWRyaXZlcnMvKi8qLypzM2MyNDEwKgorRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCitGOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pZGUuYworRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKIAogVEkgREFWSU5DSSBNQUNISU5FIFNVUFBPUlQKIE06CUtldmluIEhpbG1hbiA8a2hpbG1hbkBkZWVwcm9vdHN5c3RlbXMuY29tPgpAQCAtNjU3Myw2ICs2NjEyLDE2IEBACiBGOglkcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwogRjoJaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCiAKK1ZJUlRJTyBDT1JFLCBORVQgQU5EIEJMT0NLIERSSVZFUlMKK006CVJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KK0w6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3ZpcnRpby8KK0Y6CWRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworRjoJZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKK0Y6CWluY2x1ZGUvbGludXgvdmlydGlvXyouaAorCiBWSVJUSU8gSE9TVCAoVkhPU1QpCiBNOgkiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+CiBMOglrdm1Admdlci5rZXJuZWwub3JnCkBAIC02NzQ2LDEyICs2Nzk1LDEyIEBACiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvKgogCiBXTDEyNzEgV0lSRUxFU1MgRFJJVkVSCi1NOglMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorTToJTHVjaWFubyBDb2VsaG8gPGNvZWxob0B0aS5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL3dsMTJ4eAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sdWNhL3dsMTJ4eC5naXQKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEqCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvCiBGOglpbmNsdWRlL2xpbnV4L3dsMTJ4eC5oCiAKIFdMMzUwMSBXSVJFTEVTUyBQQ01DSUEgQ0FSRCBEUklWRVIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMWY0NzQ5NS4uYzljOGM4ZiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMzgKLUVYVFJBVkVSU0lPTiA9IC1yYzIKK0VYVFJBVkVSU0lPTiA9IC1yYzQKIE5BTUUgPSBGbGVzaC1FYXRpbmcgQmF0cyB3aXRoIEZhbmdzCiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaAppbmRleCBhMTAxZjEwLi43MjE4NDdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmgKQEAgLTUwLDYgKzUwLDEyIEBACiAjZGVmaW5lIFNDUENFTExJRDIJCTB4RkY4CiAjZGVmaW5lIFNDUENFTExJRDMJCTB4RkZDCiAKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4wU0VMX1JFRkNMSwkoMCA8PCAxNSkKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4wU0VMX1RJTUNMSwkoMSA8PCAxNSkKKworI2RlZmluZSBTQ0NUUkxfVElNRVJFTjFTRUxfUkVGQ0xLCSgwIDw8IDE3KQorI2RlZmluZSBTQ0NUUkxfVElNRVJFTjFTRUxfVElNQ0xLCSgxIDw8IDE3KQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzY3RsX3NvZnRfcmVzZXQodm9pZCBfX2lvbWVtICpiYXNlKQogewogCS8qIHdyaXRpbmcgYW55IHZhbHVlIHRvIFNDU1lTU1RBVCByZWcgd2lsbCByZXNldCBzeXN0ZW0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDIwZTBmN2MuLmQ2NjYwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaApAQCAtOTUsNiArOTUsMTUgQEAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7CiB9CiAKKy8qIElPIGJhcnJpZXJzICovCisjaWZkZWYgQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEUKKyNkZWZpbmUgX19pb3JtYigpCQlybWIoKQorI2RlZmluZSBfX2lvd21iKCkJCXdtYigpCisjZWxzZQorI2RlZmluZSBfX2lvcm1iKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19pb3dtYigpCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogLyoKICAqIE5vdywgcGljayB1cCB0aGUgbWFjaGluZS1kZWZpbmVkIElPIGRlZmluaXRpb25zCiAgKi8KQEAgLTEyNSwxNyArMTM0LDE3IEBACiAgKiBUaGUge2luLG91dH1bYndsXSBtYWNyb3MgYXJlIGZvciBlbXVsYXRpbmcgeDg2LXN0eWxlIFBDSS9JU0EgSU8gc3BhY2UuCiAgKi8KICNpZmRlZiBfX2lvCi0jZGVmaW5lIG91dGIodixwKQkJX19yYXdfd3JpdGViKHYsX19pbyhwKSkKLSNkZWZpbmUgb3V0dyh2LHApCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpIFwKLQkJCQkJY3B1X3RvX2xlMTYodiksX19pbyhwKSkKLSNkZWZpbmUgb3V0bCh2LHApCQlfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKLQkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSkKKyNkZWZpbmUgb3V0Yih2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGViKHYsX19pbyhwKSk7IH0pCisjZGVmaW5lIG91dHcodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAorCQkJCQljcHVfdG9fbGUxNih2KSxfX2lvKHApKTsgfSkKKyNkZWZpbmUgb3V0bCh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKSBcCisJCQkJCWNwdV90b19sZTMyKHYpLF9faW8ocCkpOyB9KQogCi0jZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX3Y7IH0pCisjZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgaW53KHApCSh7IF9fdTE2IF9fdiA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikgXAotCQkJX19yYXdfcmVhZHcoX19pbyhwKSkpOyBfX3Y7IH0pCisJCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSBpbmwocCkJKHsgX191MzIgX192ID0gbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKSBcCi0JCQlfX3Jhd19yZWFkbChfX2lvKHApKSk7IF9fdjsgfSkKKwkJCV9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAKICNkZWZpbmUgb3V0c2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKF9faW8ocCksZCxsKQogI2RlZmluZSBvdXRzdyhwLGQsbCkJCV9fcmF3X3dyaXRlc3coX19pbyhwKSxkLGwpCkBAIC0xOTIsMTQgKzIwMSw2IEBACiAjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsYykJKCh2b2lkKV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIFwKIAkJCQkJY3B1X3RvX2xlMzIodiksX19tZW1fcGNpKGMpKSkKIAotI2lmZGVmIENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFCi0jZGVmaW5lIF9faW9ybWIoKQkJcm1iKCkKLSNkZWZpbmUgX19pb3dtYigpCQl3bWIoKQotI2Vsc2UKLSNkZWZpbmUgX19pb3JtYigpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9faW93bWIoKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgcmVhZGIoYykJCSh7IHU4ICBfX3YgPSByZWFkYl9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZHcoYykJCSh7IHUxNiBfX3YgPSByZWFkd19yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZGwoYykJCSh7IHUzMiBfX3YgPSByZWFkbF9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggMjNjMmU4ZS4uZDBlZTc0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKQEAgLTE4OCw3ICsxODgsNyBAQAogICogdHJhbnNsYXRpb24gZm9yIHRyYW5zbGF0aW5nIERNQSBhZGRyZXNzZXMuICBVc2UgdGhlIGRyaXZlcgogICogRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2lkICp4KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyhjb25zdCB2b2xhdGlsZSB2b2lkICp4KQogewogCXJldHVybiBfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKaW5kZXggZjE3ZDlhMC4uYzAyMjVkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCkBAIC0zOTIsMjQgKzM5MiwyMiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUF9PTl9VUAogX19maXh1cF9zbXA6Ci0JbW92CXI0LCAjMHgwMDA3MDAwMAotCW9ycglyMywgcjQsICMweGZmMDAwMDAwCUAgbWFzayAweGZmMDcwMDAwCi0Jb3JyCXI0LCByNCwgIzB4NDEwMDAwMDAJQCB2YWwgMHg0MTA3MDAwMAotCWFuZAlyMCwgcjksIHIzCi0JdGVxCXIwLCByNAkJCUAgQVJNIENQVSBhbmQgQVJNdjYvdjc/CisJYW5kCXIzLCByOSwgIzB4MDAwZjAwMDAJQCBhcmNoaXRlY3R1cmUgdmVyc2lvbgorCXRlcQlyMywgIzB4MDAwZjAwMDAJCUAgQ1BVIElEIHN1cHBvcnRlZD8KIAlibmUJX19maXh1cF9zbXBfb25fdXAJQCBubywgYXNzdW1lIFVQCiAKLQlvcnIJcjMsIHIzLCAjMHgwMDAwZmYwMAotCW9ycglyMywgcjMsICMweDAwMDAwMGYwCUAgbWFzayAweGZmMDdmZmYwCisJYmljCXIzLCByOSwgIzB4MDBmZjAwMDAKKwliaWMJcjMsIHIzLCAjMHgwMDAwMDAwZglAIG1hc2sgMHhmZjAwZmZmMAorCW1vdglyNCwgIzB4NDEwMDAwMDAKIAlvcnIJcjQsIHI0LCAjMHgwMDAwYjAwMAotCW9ycglyNCwgcjQsICMweDAwMDAwMDIwCUAgdmFsIDB4NDEwN2IwMjAKLQlhbmQJcjAsIHI5LCByMwotCXRlcQlyMCwgcjQJCQlAIEFSTSAxMU1QQ29yZT8KKwlvcnIJcjQsIHI0LCAjMHgwMDAwMDAyMAlAIHZhbCAweDQxMDBiMDIwCisJdGVxCXIzLCByNAkJCUAgQVJNIDExTVBDb3JlPwogCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIAltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCA1CUAgcmVhZCBNUElEUgotCXRzdAlyMCwgIzEgPDwgMzEKLQltb3ZuZQlwYywgbHIJCQlAIGJpdCAzMSA9PiBTTVAKKwlhbmQJcjAsIHIwLCAjMHhjMDAwMDAwMAlAIG11bHRpcHJvY2Vzc2luZyBleHRlbnNpb25zIGFuZAorCXRlcQlyMCwgIzB4ODAwMDAwMDAJCUAgbm90IHBhcnQgb2YgYSB1bmlwcm9jZXNzb3Igc3lzdGVtPworCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIF9fZml4dXBfc21wX29uX3VwOgogCWFkcglyMCwgMWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IGZkOTE1NjYuLjYwNjM2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMzYsNiArMzYsNyBAQAogCQkvKiB0aW1lciBsb2FkIGFscmVhZHkgc2V0IHVwICovCiAJCWN0cmwgPSBUV0RfVElNRVJfQ09OVFJPTF9FTkFCTEUgfCBUV0RfVElNRVJfQ09OVFJPTF9JVF9FTkFCTEUKIAkJCXwgVFdEX1RJTUVSX0NPTlRST0xfUEVSSU9ESUM7CisJCV9fcmF3X3dyaXRlbCh0d2RfdGltZXJfcmF0ZSAvIEhaLCB0d2RfYmFzZSArIFRXRF9USU1FUl9MT0FEKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgogCQkvKiBwZXJpb2Qgc2V0LCBhbmQgdGltZXIgZW5hYmxlZCBpbiAnbmV4dF9ldmVudCcgaG9vayAqLwpAQCAtODEsNyArODIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgdHdkX2NhbGlicmF0ZV9yYXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb2FkLCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGNvdW50OwogCXU2NCB3YWl0amlmZmllczsKIAogCS8qCkBAIC0xMTYsMTAgKzExNyw2IEBACiAJCXByaW50aygiJWx1LiUwMmx1TUh6LlxuIiwgdHdkX3RpbWVyX3JhdGUgLyAxMDAwMDAwLAogCQkJKHR3ZF90aW1lcl9yYXRlIC8gMTAwMDAwMCkgJSAxMDApOwogCX0KLQotCWxvYWQgPSB0d2RfdGltZXJfcmF0ZSAvIEhaOwotCi0JX19yYXdfd3JpdGVsKGxvYWQsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0xPQUQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IGZmZGY4N2IuLjgyMDc5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTgzOCw3ICs4MzgsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlcDkzeHhfYWM5N19yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAk9IEVQOTNYWF9BQUNfUEhZU19CQVNFLAotCQkuZW5kCT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UgKyAweGIwIC0gMSwKKwkJLmVuZAk9IEVQOTNYWF9BQUNfUEhZU19CQVNFICsgMHhhYyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCmluZGV4IGYzZGM3NmYuLmJlYzM0YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKQEAgLTQyNyw2ICs0MjcsMTMgQEAKIHsKIAlpbnQgaTsKIAorCS8qIFNldCBQb3J0cyBDLCBELCBFLCBHLCBhbmQgSCBmb3IgR1BJTyB1c2UgKi8KKwllcDkzeHhfZGV2Y2ZnX3NldF9iaXRzKEVQOTNYWF9TWVNDT05fREVWQ0ZHX0tFWVMgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19HT05LIHwKKwkJCQkgRVA5M1hYX1NZU0NPTl9ERVZDRkdfRU9OSURFIHwKKwkJCQkgRVA5M1hYX1NZU0NPTl9ERVZDRkdfR09OSURFIHwKKwkJCQkgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSE9OSURFKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVwOTN4eF9ncGlvX2JhbmtzKTsgaSsrKQogCQlncGlvY2hpcF9hZGQoJmVwOTN4eF9ncGlvX2JhbmtzW2ldLmNoaXApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDNjOWUwYzQuLjMwYjk3MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE3LDggKzE3LDggQEAKIAkvKiBGb3IgTmV0V2luZGVyIGRlYnVnZ2luZyAqLwogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydgogCQltb3YJXHJwLCAjMHgwMDAwMDNmOAotCQlvcnIJXHJ2LCBccnAsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKLQkJb3JyCVxycCwgXHJwLCAjMHhmZjAwMDAwMAlAIHZpcnR1YWwKKwkJb3JyCVxydiwgXHJwLCAjMHhmZjAwMDAwMAlAIHZpcnR1YWwKKwkJb3JyCVxycCwgXHJwLCAjMHg3YzAwMDAwMAlAIHBoeXNpY2FsCiAJCS5lbmRtCiAKICNkZWZpbmUgVUFSVF9TSElGVAkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKaW5kZXggYWE3NmNmZC4uODM4MmU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJS0VZKDMsIDMsIEtFWV9QT1dFUiksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDI1cGRrX2tleW1hcF9kYXRhIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDI1cGRrX2tleW1hcF9kYXRhIF9faW5pdGNvbnN0ID0gewogCS5rZXltYXAJCT0gbXgyNXBka19rZXltYXAsCiAJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShteDI1cGRrX2tleW1hcCksCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCA0ZGM2OGQ2Li45ZmQ4OTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotdW5zaWduZWQgbG9uZyBpeHA0eHhfdGltZXJfZnJlcSA9IEZSRVE7Cit1bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxID0gSVhQNFhYX1RJTUVSX0ZSRVE7CiBFWFBPUlRfU1lNQk9MKGl4cDR4eF90aW1lcl9mcmVxKTsKIHN0YXRpYyB2b2lkIF9faW5pdCBpeHA0eHhfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewpAQCAtNDk2LDcgKzQ5Niw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpeHA0eHhfY2xvY2tldmVudF9pbml0KHZvaWQpCiB7Ci0JY2xvY2tldmVudF9peHA0eHgubXVsdCA9IGRpdl9zYyhGUkVRLCBOU0VDX1BFUl9TRUMsCisJY2xvY2tldmVudF9peHA0eHgubXVsdCA9IGRpdl9zYyhJWFA0WFhfVElNRVJfRlJFUSwgTlNFQ19QRVJfU0VDLAogCQkJCQljbG9ja2V2ZW50X2l4cDR4eC5zaGlmdCk7CiAJY2xvY2tldmVudF9peHA0eHgubWF4X2RlbHRhX25zID0KIAkJY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZlLCAmY2xvY2tldmVudF9peHA0eHgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCAyYzNmOTNjLi5jOWU5MzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMTAsNiArMTAsNyBAQAogICogNjYuNjYuLi4gTUh6LiBXZSBkbyBhIGNvbnZ1bHRlZCBjYWxjdWxhdGlvbiBvZiBDTE9DS19USUNLX1JBVEUgYi9jIHRoZQogICogdGltZXIgcmVnaXN0ZXIgaWdub3JlcyB0aGUgYm90dG9tIDIgYml0cyBvZiB0aGUgTEFUQ0ggdmFsdWUuCiAgKi8KLSNkZWZpbmUgRlJFUSA2NjY2NjAwMAotI2RlZmluZSBDTE9DS19USUNLX1JBVEUgKCgoRlJFUSAvIEhaICYgfklYUDRYWF9PU1RfUkVMT0FEX01BU0spICsgMSkgKiBIWikKKyNkZWZpbmUgSVhQNFhYX1RJTUVSX0ZSRVEgNjY2NjYwMDAKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIFwKKwkoKChJWFA0WFhfVElNRVJfRlJFUSAvIEhaICYgfklYUDRYWF9PU1RfUkVMT0FEX01BU0spICsgMSkgKiBIWikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9xbWdyLmMKaW5kZXggYmZkYmU0Yi4uODUyZjdjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jCkBAIC0yNjUsNiArMjY1LDExIEBACiAJICAgICAgIHFtZ3JfcXVldWVfZGVzY3NbcXVldWVdLCBxdWV1ZSk7CiAJcW1ncl9xdWV1ZV9kZXNjc1txdWV1ZV1bMF0gPSAnXHgwJzsKICNlbmRpZgorCisJd2hpbGUgKChhZGRyID0gcW1ncl9nZXRfZW50cnkocXVldWUpKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJxbWdyOiByZWxlYXNlZCBxdWV1ZSAlaSBub3QgZW1wdHk6IDB4JTA4WFxuIiwKKwkJICAgICAgIHF1ZXVlLCBhZGRyKTsKKwogCV9fcmF3X3dyaXRlbCgwLCAmcW1ncl9yZWdzLT5zcmFtW3F1ZXVlXSk7CiAKIAl1c2VkX3NyYW1fYml0bWFwWzBdICY9IH5tYXNrWzBdOwpAQCAtMjc1LDEwICsyODAsNiBAQAogCXNwaW5fdW5sb2NrX2lycSgmcW1ncl9sb2NrKTsKIAogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCi0Jd2hpbGUgKChhZGRyID0gcW1ncl9nZXRfZW50cnkocXVldWUpKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJxbWdyOiByZWxlYXNlZCBxdWV1ZSAlaSBub3QgZW1wdHk6IDB4JTA4WFxuIiwKLQkJICAgICAgIHF1ZXVlLCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBxbWdyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYwppbmRleCBiMWEzNjJlLi5jYTcyYTA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNkcik7CQlcCiAJcmVnICY9IH5CTV9DTEtDVFJMXyMjZHIjI19ESVY7CQkJCQlcCiAJcmVnIHw9IGRpdiA8PCBCUF9DTEtDVFJMXyMjZHIjI19ESVY7CQkJCVwKLQlpZiAocmVnIHwgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpKSB7CQkJCVwKKwlpZiAocmVnICYgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpKSB7CQkJCVwKIAkJcHJfZXJyKCIlczogY2xvY2sgaXMgZ2F0ZWRcbiIsIF9fZnVuY19fKTsJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCX0JCQkJCQkJCVwKQEAgLTM0Nyw3ICszNDcsNyBAQAogewkJCQkJCQkJCVwKIAlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KSB7CQkJCQlcCiAJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfIyNiaXQsCQlcCi0JCQkgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJCQlcCisJCQkgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwlcCiAJCWNsay0+cGFyZW50ID0gcGFyZW50OwkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYwppbmRleCA1NjMxMmMwLi5mZDFjNGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCkBAIC0zNTUsMTIgKzM1NSwxMiBAQAogCX0gZWxzZSB7CQkJCQkJCVwKIAkJcmVnICY9IH5CTV9DTEtDVFJMXyMjZHIjI19ESVY7CQkJCVwKIAkJcmVnIHw9IGRpdiA8PCBCUF9DTEtDVFJMXyMjZHIjI19ESVY7CQkJXAotCQlpZiAocmVnIHwgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpKSB7CQkJXAorCQlpZiAocmVnICYgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpKSB7CQkJXAogCQkJcHJfZXJyKCIlczogY2xvY2sgaXMgZ2F0ZWRcbiIsIF9fZnVuY19fKTsJXAogCQkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJCX0JCQkJCQkJXAogCX0JCQkJCQkJCVwKLQlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ1BVKTsJCVwKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNkcik7CQlcCiAJCQkJCQkJCQlcCiAJZm9yIChpID0gMTAwMDA7IGk7IGktLSkJCQkJCQlcCiAJCWlmICghKF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsJCQlcCkBAIC00ODMsNyArNDgzLDcgQEAKIHsJCQkJCQkJCQlcCiAJaWYgKHBhcmVudCAhPSBjbGstPnBhcmVudCkgewkJCQkJXAogCQlfX3Jhd193cml0ZWwoQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTXyMjYml0LAkJXAotCQkJIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CQkJXAorCQkJIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJXAogCQljbGstPnBhcmVudCA9IHBhcmVudDsJCQkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC02MDksNyArNjA5LDYgQEAKIAlfUkVHSVNURVJfQ0xPQ0soImR1YXJ0IiwgTlVMTCwgdWFydF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgyOC1mZWMuMCIsIE5VTEwsIGZlY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgyOC1mZWMuMSIsIE5VTEwsIGZlY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJydGMiLCBOVUxMLCBydGNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygicGxsMiIsIE5VTEwsIHBsbDJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaGNsayIsIGhidXNfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLmMKaW5kZXggZTdkMjI2OS4uYTcwOTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jCkBAIC01Nyw3ICs1Nyw2IEBACiAJCWlmIChjbGstPmRpc2FibGUpCiAJCQljbGstPmRpc2FibGUoY2xrKTsKIAkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Ci0JCV9fY2xrX2Rpc2FibGUoY2xrLT5zZWNvbmRhcnkpOwogCX0KIH0KIApAQCAtNjgsNyArNjcsNiBAQAogCiAJaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7CiAJCV9fY2xrX2VuYWJsZShjbGstPnBhcmVudCk7Ci0JCV9fY2xrX2VuYWJsZShjbGstPnNlY29uZGFyeSk7CiAKIAkJaWYgKGNsay0+ZW5hYmxlKQogCQkJY2xrLT5lbmFibGUoY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYwppbmRleCBkN2FkN2E2Li5jYjBjMGU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCkBAIC0xMzksNiArMTM5LDggQEAKIAlzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqcG9ydCA9IChzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqKWdldF9pcnFfZGF0YShpcnEpOwogCXUzMiBncGlvX2lycV9ub19iYXNlID0gcG9ydC0+dmlydHVhbF9pcnFfc3RhcnQ7CiAKKwlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfYWNrKCZkZXNjLT5pcnFfZGF0YSk7CisKIAlpcnFfc3RhdCA9IF9fcmF3X3JlYWRsKHBvcnQtPmJhc2UgKyBQSU5DVFJMX0lSUVNUQVQocG9ydC0+aWQpKSAmCiAJCQlfX3Jhd19yZWFkbChwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFFTihwb3J0LT5pZCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oCmluZGV4IDA0MWUyNzYuLjU5MmM5YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oCkBAIC0yOSw4ICsyOSw2IEBACiAJaW50IGlkOwogCS8qIFNvdXJjZSBjbG9jayB0aGlzIGNsayBkZXBlbmRzIG9uICovCiAJc3RydWN0IGNsayAqcGFyZW50OwotCS8qIFNlY29uZGFyeSBjbG9jayB0byBlbmFibGUvZGlzYWJsZSB3aXRoIHRoaXMgY2xvY2sgKi8KLQlzdHJ1Y3QgY2xrICpzZWNvbmRhcnk7CiAJLyogUmVmZXJlbmNlIGNvdW50IG9mIGNsb2NrIGVuYWJsZS9kaXNhYmxlICovCiAJX19zOCB1c2Vjb3VudDsKIAkvKiBSZWdpc3RlciBiaXQgcG9zaXRpb24gZm9yIGNsb2NrJ3MgZW5hYmxlL2Rpc2FibGUgY29udHJvbC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCA4ZDJmMmRhLi5lMGEwMjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC05LDYgKzksNyBAQAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWJvb2wgIk9NQVA3MzAgQmFzZWQgU3lzdGVtIgogCXNlbGVjdCBDUFVfQVJNOTI2VAorCXNlbGVjdCBPTUFQX01QVV9USU1FUgogCXNlbGVjdCBBUkNIX09NQVBfT1RHCiAKIGNvbmZpZyBBUkNIX09NQVA4NTAKQEAgLTIyLDYgKzIzLDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJPTUFQMTV4eCBCYXNlZCBTeXN0ZW0iCiAJc2VsZWN0IENQVV9BUk05MjVUCisJc2VsZWN0IE9NQVBfTVBVX1RJTUVSCiAKIGNvbmZpZyBBUkNIX09NQVAxNlhYCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQppbmRleCA2ZWUxOTUwLi5iYTYwMDlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKQEAgLTMsMTIgKzMsMTEgQEAKICMKIAogIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gaW8ubyBpZC5vIHNyYW0ubyBpcnEubyBtdXgubyBmbGFzaC5vIHNlcmlhbC5vIGRldmljZXMubyBkbWEubworb2JqLXkgOj0gaW8ubyBpZC5vIHNyYW0ubyB0aW1lLm8gaXJxLm8gbXV4Lm8gZmxhc2gubyBzZXJpYWwubyBkZXZpY2VzLm8gZG1hLm8KIG9iai15ICs9IGNsb2NrLm8gY2xvY2tfZGF0YS5vIG9wcF9kYXRhLm8KIAogb2JqLSQoQ09ORklHX09NQVBfTUNCU1ApICs9IG1jYnNwLm8KIAotb2JqLSQoQ09ORklHX09NQVBfTVBVX1RJTUVSKQkrPSB0aW1lLm8KIG9iai0kKENPTkZJR19PTUFQXzMyS19USU1FUikJKz0gdGltZXIzMmsubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGM5YmU2ZDQuLmJmYjRmYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMTQsMTkgKzE0LDYgQEAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAKLS8qCi0gKiBXZSB1c2UgX19nbHVlIHRvIGF2b2lkIGVycm9ycyB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCi0gKiAuZ2xvYmwgb21hcF9pcnFfZmxhZ3MgYXMgaXQncyBpbmNsdWRlZCBmcm9tIGVudHJ5LWFybXYuUyBidXQgbm90Ci0gKiBmcm9tIGVudHJ5LWNvbW1vbi5TLgotICovCi0jaWZkZWYgX19nbHVlCi0JCS5wdXNoc2VjdGlvbiAuZGF0YQotCQkuZ2xvYmwJb21hcF9pcnFfZmxhZ3MKLW9tYXBfaXJxX2ZsYWdzOgotCQkud29yZAkwCi0JCS5wb3BzZWN0aW9uCi0jZW5kaWYKLQogIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IDQ3NzAxNTguLjczMWRkMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwpAQCAtNTcsNiArNTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgd2FrZV9lbmFibGU7CiB9OwogCit1MzIgb21hcF9pcnFfZmxhZ3M7CiBzdGF0aWMgdW5zaWduZWQgaW50IGlycV9iYW5rX2NvdW50Owogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rICppcnFfYmFua3M7CiAKQEAgLTE3Niw3ICsxNzcsNiBAQAogCiB2b2lkIF9faW5pdCBvbWFwX2luaXRfaXJxKHZvaWQpCiB7Ci0JZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwX2lycV9mbGFnczsKIAlpbnQgaSwgajsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xjZF9kbWEuYwppbmRleCBjOTA4OGQ4Li40NTM4MDkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xjZF9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xjZF9kbWEuYwpAQCAtMzcsNyArMzcsNyBAQAogCSAqIE9uIE9NQVAxNTEwLCBpbnRlcm5hbCBMQ0QgY29udHJvbGxlciB3aWxsIHN0YXJ0IHRoZSB0cmFuc2ZlcgogCSAqIHdoZW4gaXQgZ2V0cyBlbmFibGVkLCBzbyBhc3N1bWUgRE1BIHJ1bm5pbmcgaWYgTENEIGVuYWJsZWQuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKIAkJaWYgKG9tYXBfcmVhZHcoT01BUF9MQ0RDX0NPTlRST0wpICYgT01BUF9MQ0RDX0NUUkxfTENEX0VOKQogCQkJcmV0dXJuIDE7CiAKQEAgLTk1LDcgKzk1LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3JvdGF0aW9uKGludCByb3RhdGUpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHJvdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJCXJldHVybjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfbWlycm9yKGludCBtaXJyb3IpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIG1pcnJvciBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwogCX0KQEAgLTExNiw3ICsxMTYsNyBAQAogCiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfdnhyZXModW5zaWduZWQgbG9uZyB2eHJlcykKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgdmlydHVhbCByZXN1bG90aW9uIGlzIG5vdCBzdXBwb3J0ZWQgIgogCQkJCSJpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfc2NhbGUodW5zaWduZWQgaW50IHhzY2FsZSwgdW5zaWduZWQgaW50IHlzY2FsZSkKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgc2NhbGUgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAl9CkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJCWJvdHRvbSA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgbGNkX2RtYS55cmVzIC0gMSk7CiAJCQkvKiAxNTEwIERNQSByZXF1aXJlcyB0aGUgYm90dG9tIGFkZHJlc3MgdG8gYmUgMiBtb3JlCiAJCQkgKiB0aGFuIHRoZSBhY3R1YWwgbGFzdCBtZW1vcnkgYWNjZXNzIGxvY2F0aW9uLiAqLwotCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmCisJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkgJiYKIAkJCQlsY2RfZG1hLmRhdGFfdHlwZSA9PSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyKQogCQkJCQlib3R0b20gKz0gMjsKIAkJCWVpID0gUElYU1RFUCgwLCAwLCAxLCAwKTsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCQlyZXR1cm47CS8qIFN1cHByZXNzIHdhcm5pbmcgYWJvdXQgdW5pbml0aWFsaXplZCB2YXJzICovCiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCW9tYXBfd3JpdGV3KHRvcCA+PiAxNiwgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfVSk7CiAJCW9tYXBfd3JpdGV3KHRvcCwgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTCk7CiAJCW9tYXBfd3JpdGV3KGJvdHRvbSA+PiAxNiwgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfVSk7CkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJQlVHKCk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQogCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIH4xLAogCQkJICAgIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKIAlsY2RfZG1hLnJlc2VydmVkID0gMDsKQEAgLTM2MCw3ICszNjAsNyBAQAogCSAqIGNvbm5lY3RlZC4gT3RoZXJ3aXNlIHRoZSBPTUFQIGludGVybmFsIGNvbnRyb2xsZXIgd2lsbAogCSAqIHN0YXJ0IHRoZSB0cmFuc2ZlciB3aGVuIGl0IGdldHMgZW5hYmxlZC4KIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQogCQlyZXR1cm47CiAKIAl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOwpAQCAtMzc4LDE0ICszNzgsMTQgQEAKIHZvaWQgb21hcF9zZXR1cF9sY2RfZG1hKHZvaWQpCiB7CiAJQlVHX09OKGxjZF9kbWEuYWN0aXZlKTsKLQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgewogCQkvKiBTZXQgc29tZSByZWFzb25hYmxlIGRlZmF1bHRzICovCiAJCW9tYXBfd3JpdGV3KDB4NTQ0MCwgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwogCQlvbWFwX3dyaXRldygweDkxMDIsIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCk7CiAJCW9tYXBfd3JpdGV3KDB4MDAwNCwgT01BUDE2MTBfRE1BX0xDRF9MQ0hfQ1RSTCk7CiAJfQogCXNldF9iMV9yZWdzKCk7Ci0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJdTE2IHc7CiAKIAkJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJdTE2IHc7CiAKIAlsY2RfZG1hLmFjdGl2ZSA9IDA7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKIAkJcmV0dXJuOwogCiAJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwppbmRleCBlZDdhNjFmLi42ODg1ZDJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwpAQCAtNDksMTEgKzQ5LDE1IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KIAorI2lmZGVmIENPTkZJR19PTUFQX01QVV9USU1FUgorCiAjZGVmaW5lIE9NQVBfTVBVX1RJTUVSX0JBU0UJCU9NQVBfTVBVX1RJTUVSMV9CQVNFCiAjZGVmaW5lIE9NQVBfTVBVX1RJTUVSX09GRlNFVAkJMHgxMDAKIApAQCAtNjcsNyArNzEsNyBAQAogKCh2b2xhdGlsZSBvbWFwX21wdV90aW1lcl9yZWdzX3QqKU9NQVAxX0lPX0FERFJFU1MoT01BUF9NUFVfVElNRVJfQkFTRSArCVwKIAkJCQkgKG4pKk9NQVBfTVBVX1RJTUVSX09GRlNFVCkpCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwX21wdV90aW1lcl9yZWFkKGludCBucikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub3RyYWNlIG9tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQogewogCXZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCogdGltZXIgPSBvbWFwX21wdV90aW1lcl9iYXNlKG5yKTsKIAlyZXR1cm4gdGltZXItPnJlYWRfdGltOwpAQCAtMjEyLDYgKzIxNiwzMiBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3N0YXRpYyBERUZJTkVfQ0xPQ0tfREFUQShjZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2UgX29tYXBfbXB1X3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IG1wdV9yZWFkKCZjbG9ja3NvdXJjZV9tcHUpOworCXJldHVybiBjeWNfdG9fc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOworfQorCisjaWZuZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfbXB1X3NjaGVkX2Nsb2NrKCk7Cit9CisjZWxzZQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIG9tYXBfbXB1X3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIF9vbWFwX21wdV9zY2hlZF9jbG9jaygpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG5vdHJhY2UgbXB1X3VwZGF0ZV9zY2hlZF9jbG9jayh2b2lkKQoreworCXUzMiBjeWMgPSBtcHVfcmVhZCgmY2xvY2tzb3VyY2VfbXB1KTsKKwl1cGRhdGVfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlKHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKQEAgLTIxOSwxNyArMjQ5LDEzIEBACiAKIAlzZXR1cF9pcnEoSU5UX1RJTUVSMiwgJm9tYXBfbXB1X3RpbWVyMl9pcnEpOwogCW9tYXBfbXB1X3RpbWVyX3N0YXJ0KDEsIH4wLCAxKTsKKwlpbml0X3NjaGVkX2Nsb2NrKCZjZCwgbXB1X3VwZGF0ZV9zY2hlZF9jbG9jaywgMzIsIHJhdGUpOwogCiAJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9tcHUsIHJhdGUpKQogCQlwcmludGsoZXJyLCBjbG9ja3NvdXJjZV9tcHUubmFtZSk7CiB9CiAKLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRpbWVyIGluaXRpYWxpemF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbXB1X3RpbWVyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY2xrCSpja19yZWYgPSBjbGtfZ2V0KE5VTEwsICJja19yZWYiKTsKIAl1bnNpZ25lZCBsb25nCXJhdGU7CkBAIC0yNDYsNiArMjcyLDY2IEBACiAJb21hcF9pbml0X2Nsb2Nrc291cmNlKHJhdGUpOwogfQogCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbXB1X3RpbWVyX2luaXQodm9pZCkKK3sKKwlwcl9lcnIoIkJvZ3VzIHRpbWVyLCBzaG91bGQgbm90IGhhcHBlblxuIik7Cit9CisjZW5kaWYJLyogQ09ORklHX09NQVBfTVBVX1RJTUVSICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01QVV9USU1FUikgJiYgZGVmaW5lZChDT05GSUdfT01BUF8zMktfVElNRVIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICgqcHJlZmVycmVkX3NjaGVkX2Nsb2NrKSh2b2lkKTsKKwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlpZiAoIXByZWZlcnJlZF9zY2hlZF9jbG9jaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcHJlZmVycmVkX3NjaGVkX2Nsb2NrKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXJyZWRfc2NoZWRfY2xvY2tfaW5pdChib29sIHVzZV8zMmtfc2NoZWRfY2xvY2spCit7CisJaWYgKHVzZV8zMmtfc2NoZWRfY2xvY2spCisJCXByZWZlcnJlZF9zY2hlZF9jbG9jayA9IG9tYXBfMzJrX3NjaGVkX2Nsb2NrOworCWVsc2UKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrID0gb21hcF9tcHVfc2NoZWRfY2xvY2s7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHByZWZlcnJlZF9zY2hlZF9jbG9ja19pbml0KGJvb2wgdXNlXzMya19zY2hlZF9jbGNvaykKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBvbWFwXzMya190aW1lcl91c2FibGUodm9pZCkKK3sKKwlpbnQgcmVzID0gZmFsc2U7CisKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSkKKwkJcmV0dXJuIHJlczsKKworI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgorCXJlcyA9IG9tYXBfMzJrX3RpbWVyX2luaXQoKTsKKyNlbmRpZgorCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGltZXIgaW5pdGlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCit7CisJaWYgKG9tYXBfMzJrX3RpbWVyX3VzYWJsZSgpKSB7CisJCXByZWZlcnJlZF9zY2hlZF9jbG9ja19pbml0KDEpOworCX0gZWxzZSB7CisJCW9tYXBfbXB1X3RpbWVyX2luaXQoKTsKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoMCk7CisJfQorfQorCiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7CiAJLmluaXQJCT0gb21hcF90aW1lcl9pbml0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYwppbmRleCAyMGNmYmNjLi4xM2Q3YjhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyMzJrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCkBAIC01MiwxMCArNTIsOSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KIAotc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwotCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAzMktIeiBPUyB0aW1lcgpAQCAtMTgxLDE0ICsxODAsMTQgQEAKICAqIFRpbWVyIGluaXRpYWxpemF0aW9uCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQorYm9vbCBfX2luaXQgb21hcF8zMmtfdGltZXJfaW5pdCh2b2lkKQogeworCW9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsoKTsKKwogI2lmZGVmIENPTkZJR19PTUFQX0RNX1RJTUVSCiAJb21hcF9kbV90aW1lcl9pbml0KCk7CiAjZW5kaWYKIAlvbWFwX2luaXRfMzJrX3RpbWVyKCk7Ci19CiAKLXN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lciA9IHsKLQkuaW5pdAkJPSBvbWFwX3RpbWVyX2luaXQsCi19OworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCmluZGV4IDViMGM3NzcuLjhmOWE2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKQEAgLTEyNCw4ICsxMjQsOSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfVjMwMjApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfVjMwMjBfTU9EVUxFKQogI2RlZmluZSBSVENfSU9fR1BJTwkJKDE1MykKICNkZWZpbmUgUlRDX1dSX0dQSU8JCSgxNTQpCi0jZGVmaW5lIFJUQ19SRF9HUElPCQkoMTYwKQorI2RlZmluZSBSVENfUkRfR1BJTwkJKDUzKQogI2RlZmluZSBSVENfQ1NfR1BJTwkJKDE2MykKKyNkZWZpbmUgUlRDX0NTX0VOX0dQSU8JCSgxNjApCiAKIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhIGNtX3QzNTE3X3YzMDIwX3BkYXRhID0gewogCS51c2VfZ3Bpbwk9IDEsCkBAIC0xNDUsNiArMTQ2LDE2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbV90MzUxN19pbml0X3J0Yyh2b2lkKQogeworCWludCBlcnI7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoUlRDX0NTX0VOX0dQSU8sICJydGMgY3MgZW4iKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1MTc6IHJ0YyBjcyBlbiBncGlvIHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuOworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChSVENfQ1NfRU5fR1BJTywgMSk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNtX3QzNTE3X3J0Y19kZXZpY2UpOwogfQogI2Vsc2UKQEAgLTIxNCwxMiArMjI1LDEyIEBACiAJfSwKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJsaW51eCIsCi0JCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDJBMDAwMCAqLwogCQkuc2l6ZSAgICAgICAgICAgPSAzMiAqIE5BTkRfQkxPQ0tfU0laRSwKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgICAgID0gInJvb3RmcyIsCi0JCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg2ODAwMDAgKi8KKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDZBMDAwMCAqLwogCQkuc2l6ZSAgICAgICAgICAgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwpAQCAtMjU2LDExICsyNjcsMTkgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAkvKiBHUElPMTg2IC0gR3JlZW4gTEVEICovCiAJT01BUDNfTVVYKFNZU19DTEtPVVQyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCi0JLyogUlRDIEdQSU9zOiBJTywgV1IjLCBSRCMsIENTIyAqLworCisJLyogUlRDIEdQSU9zOiAqLworCS8qIElPIC0gR1BJTzE1MyAqLwogCU9NQVAzX01VWChNQ0JTUDRfRFIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVQpLAorCS8qIFdSIyAtIEdQSU8xNTQgKi8KIAlPTUFQM19NVVgoTUNCU1A0X0RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKLQlPTUFQM19NVVgoTUNCU1BfQ0xLUywgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogUkQjIC0gR1BJTzUzICovCisJT01BUDNfTVVYKEdQTUNfTkNTMiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogQ1MjIC0gR1BJTzE2MyAqLwogCU9NQVAzX01VWChVQVJUM19DVFNfUkNUWCwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogQ1MgRU4gLSBHUElPMTYwICovCisJT01BUDNfTVVYKE1DQlNQX0NMS1MsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVQpLAorCiAJLyogSFNVU0IxIFJFU0VUICovCiAJT01BUDNfTVVYKFVBUlQyX1RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCiAJLyogSFNVU0IyIFJFU0VUICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jCmluZGV4IDAwYmIxZmMuLjlhMmEzMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jCkBAIC0xMTUsOSArMTE1LDYgQEAKIAogc3RhdGljIGludCBkZXZraXQ4MDAwX3BhbmVsX2VuYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfR1BJTywgMHg4MCwgUkVHX0dQSU9EQVRBRElSMSk7Ci0JdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIDB4MCwgMHgwKTsKLQogCWlmIChncGlvX2lzX3ZhbGlkKGRzc2Rldi0+cmVzZXRfZ3BpbykpCiAJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRzc2Rldi0+cmVzZXRfZ3BpbywgMSk7CiAJcmV0dXJuIDA7CkBAIC0yNDcsNiArMjQ0LDggQEAKIHN0YXRpYyBpbnQgZGV2a2l0ODAwMF90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQogeworCWludCByZXQ7CisKIAlvbWFwX211eF9pbml0X2dwaW8oMjksIE9NQVBfUElOX0lOUFVUKTsKIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwpAQCAtMjU1LDE3ICsyNTQsMjMgQEAKIAkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMSA9PSBsZWRCLCBQTVVfU1RBVCAob3V0LCBhY3RpdmUgbG93IExFRCkgKi8KIAlncGlvX2xlZHNbMl0uZ3BpbyA9IGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYICsgMTsKIAotICAgICAgICAvKiBncGlvICsgMSBpcyAiTENEX1BXUkVOIiAob3V0LCBhY3RpdmUgaGlnaCkgKi8KLQlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IGdwaW8gKyAxOwotCWdwaW9fcmVxdWVzdChkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbywgIkxDRF9QV1JFTiIpOwotCS8qIERpc2FibGUgdW50aWwgbmVlZGVkICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLCAwKTsKKwkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMCBpcyAiTENEX1BXUkVOIiAob3V0LCBhY3RpdmUgaGlnaCkgKi8KKwlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYICsgMDsKKwlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLAorCQkJR1BJT0ZfRElSX09VVCB8IEdQSU9GX0lOSVRfTE9XLCAiTENEX1BXUkVOIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8gPSAtRUlOVkFMOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIExDRF9QV1JOXG4iKTsKKwl9CiAKIAkvKiBncGlvICsgNyBpcyAiRFZJX1BEIiAob3V0LCBhY3RpdmUgbG93KSAqLwogCWRldmtpdDgwMDBfZHZpX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIDc7Ci0JZ3Bpb19yZXF1ZXN0KGRldmtpdDgwMDBfZHZpX2RldmljZS5yZXNldF9ncGlvLCAiRFZJIFBvd2VyRG93biIpOwotCS8qIERpc2FibGUgdW50aWwgbmVlZGVkICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRldmtpdDgwMDBfZHZpX2RldmljZS5yZXNldF9ncGlvLCAwKTsKKwlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKGRldmtpdDgwMDBfZHZpX2RldmljZS5yZXNldF9ncGlvLAorCQkJR1BJT0ZfRElSX09VVCB8IEdQSU9GX0lOSVRfTE9XLCAiRFZJIFBvd2VyRG93biIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmtpdDgwMDBfZHZpX2RldmljZS5yZXNldF9ncGlvID0gLUVJTlZBTDsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBEVkkgUG93ZXJEb3duXG4iKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3NSw4ICsyODAsNyBAQAogCS5pcnFfYmFzZQk9IFRXTDQwMzBfR1BJT19JUlFfQkFTRSwKIAkuaXJxX2VuZAk9IFRXTDQwMzBfR1BJT19JUlFfRU5ELAogCS51c2VfbGVkcwk9IHRydWUsCi0JLnB1bGx1cHMJPSBCSVQoMSksCi0JLnB1bGxkb3ducwk9IEJJVCgyKSB8IEJJVCg2KSB8IEJJVCg3KSB8IEJJVCg4KSB8IEJJVCgxMykKKwkucHVsbGRvd25zCT0gQklUKDEpIHwgQklUKDIpIHwgQklUKDYpIHwgQklUKDgpIHwgQklUKDEzKQogCQkJCXwgQklUKDE1KSB8IEJJVCgxNikgfCBCSVQoMTcpLAogCS5zZXR1cAkJPSBkZXZraXQ4MDAwX3R3bF9ncGlvX3NldHVwLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMKaW5kZXggZTAwMWEwNC4uZTk0NDAyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMKQEAgLTQwOSw4ICs0MDksNiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBhbmRhX2RldmljZXMsIEFSUkFZX1NJWkUocGFuZGFfZGV2aWNlcykpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwNF90d2w2MDMwX2hzbW1jX2luaXQobW1jKTsKLQkvKiBPTUFQNCBQYW5kYSB1c2VzIGludGVybmFsIHRyYW5zY2VpdmVyIHNvIHJlZ2lzdGVyIG5vcCB0cmFuc2NlaXZlciAqLwotCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKIAlvbWFwNF9laGNpX2luaXQoKTsKIAl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCmluZGV4IGNiNzdiZTcuLjM5YTcxYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKQEAgLTQwLDkgKzQwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBybTY4MF92ZW1tYyA9IHsKIAkuY29uc3RyYWludHMgPQl7CiAJCS5uYW1lCQkJPSAicm02ODBfdmVtbWMiLAotCQkubWluX3VWCQkJPSAyOTAwMDAwLAotCQkubWF4X3VWCQkJPSAyOTAwMDAwLAotCQkuYXBwbHlfdVYJCT0gMSwKIAkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKIAkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAogCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwppbmRleCBlOGNiMzJmLi5kZTllYzhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiY20yXzQ0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCi0jaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAic2NybTQ0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCBlMjBiOTg2Li41OGU0MmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC00MjMsNiArNDIzLDEyIEBACiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDU4LDYgKzQ2NCwxMiBAQAogewogCXN0cnVjdCBjbGtkbV9kZXAgKmNkOwogCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXMvJXM6ICVzOiBub3QgeWV0IGltcGxlbWVudGVkXG4iLAorCQkgICAgICAgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTUwMCw2ICs1MTIsMTIgQEAKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghY3B1X2lzX29tYXAyNHh4KCkgJiYgIWNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzLyVzOiAlczogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwKKwkJICAgICAgIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT53a2RlcF9zcmNzKTsKIAlpZiAoSVNfRVJSKGNkKSkgewogCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCkBAIC01MjcsNiArNTQ1LDEyIEBACiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CiAJdTMyIG1hc2sgPSAwOwogCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6ICVzOiBub3QgeWV0IGltcGxlbWVudGVkXG4iLAorCQkgICAgICAgY2xrZG0tPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTgzMCw4ICs4NTQsNyBAQAogCSAqIGRlcGVuZGVuY3kgY29kZSBhbmQgZGF0YSBmb3IgT01BUDQuCiAJICovCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCVdBUk5fT05DRSgxLCAiY2xvY2tkb21haW46IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5ICIKLQkJCSAgInN1cHBvcnQgaXMgbm90IHlldCBpbXBsZW1lbnRlZFxuIik7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSBzdXBwb3J0OiBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBjbGtkbS0+bmFtZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwpAQCAtODcyLDggKzg5NSw3IEBACiAJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgotCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5IHN1cHBvcnQ6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGNsa2RtLT5uYW1lKTsKIAl9IGVsc2UgewogCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4X2RhdGEuYwppbmRleCA1MTkyMGZjLi4xMDYyMmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlICJjbTFfNDR4eC5oIgogI2luY2x1ZGUgImNtMl80NHh4LmgiCiAKLSNpbmNsdWRlICJjbTFfNDR4eC5oIgotI2luY2x1ZGUgImNtMl80NHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCiAjaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgInByY200NHh4LmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwppbmRleCBkMmYxNWY1Li4zNDkyMmIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCWlmIChJU19FUlIob2QpKSB7CiAJCXByX2VycigiJXM6IENhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKIAkJCV9fZnVuY19fLCBuYW1lLCBvaC0+bmFtZSk7Ci0JCXJldHVybiBJU19FUlIob2QpOworCQlyZXR1cm4gUFRSX0VSUihvZCk7CiAJfQogCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKCZvZC0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggYmVmYTMyMS4uODE5ODVhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0zOCwyMCArMzgsNiBAQAogICovCiAKICNpZmRlZiBNVUxUSV9PTUFQMgotCi0vKgotICogV2UgdXNlIF9fZ2x1ZSB0byBhdm9pZCBlcnJvcnMgd2l0aCBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgotICogLmdsb2JsIG9tYXBfaXJxX2Jhc2UgYXMgaXQncyBpbmNsdWRlZCBmcm9tIGVudHJ5LWFybXYuUyBidXQgbm90Ci0gKiBmcm9tIGVudHJ5LWNvbW1vbi5TLgotICovCi0jaWZkZWYgX19nbHVlCi0JCS5wdXNoc2VjdGlvbiAuZGF0YQotCQkuZ2xvYmwJb21hcF9pcnFfYmFzZQotb21hcF9pcnFfYmFzZToKLQkJLndvcmQJMAotCQkucG9wc2VjdGlvbgotI2VuZGlmCi0KIAkJLyoKIAkJICogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgYmFzZSBvbiB0aGUgZmlyc3QgaW50ZXJydXB0LgogCQkgKiBTZWUgYWxzbyBvbWFwX2lycV9iYXNlX2luaXQgZm9yIHNldHRpbmcgb21hcF9pcnFfYmFzZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCBlNjY2ODdiLi5jMjAzMjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0zMTQsMTQgKzMxNCwxMyBAQAogCXJldHVybiBvbWFwX2h3bW9kX3NldF9wb3N0c2V0dXBfc3RhdGUob2gsICoodTggKilkYXRhKTsKIH0KIAordm9pZCBfX2lvbWVtICpvbWFwX2lycV9iYXNlOworCiAvKgogICogSW5pdGlhbGl6ZSBhc21faXJxX2Jhc2UgZm9yIGVudHJ5LW1hY3JvLlMKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaXJxX2Jhc2VfaW5pdCh2b2lkKQogewotCWV4dGVybiB2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7Ci0KLSNpZmRlZiBNVUxUSV9PTUFQMgogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKIAkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCkBAIC0zMzAsNyArMzI5LDYgQEAKIAkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0WFhfR0lDX0NQVV9CQVNFKTsKIAllbHNlCiAJCXByX2VycigiQ291bGQgbm90IGluaXRpYWxpemUgb21hcF9pcnFfYmFzZVxuIik7Ci0jZW5kaWYKIH0KIAogdm9pZCBfX2luaXQgb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IGRmOGQyZjIuLjk4MTQ4YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJc3RydWN0IG9tYXBfbXV4ICptdXggPSBOVUxMOwogCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZTsKIAljb25zdCBjaGFyICptb2RlX25hbWU7Ci0JaW50IGZvdW5kID0gMCwgZm91bmRfbW9kZSwgbW9kZTBfbGVuID0gMDsKKwlpbnQgZm91bmQgPSAwLCBmb3VuZF9tb2RlID0gMCwgbW9kZTBfbGVuID0gMDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICptdXhtb2RlcyA9ICZwYXJ0aXRpb24tPm11eG1vZGVzOwogCiAJbW9kZV9uYW1lID0gc3RyY2hyKG11eG5hbWUsICcuJyk7CkBAIC0xMDAwLDYgKzEwMDAsNyBAQAogCWlmICghcGFydGl0aW9uLT5iYXNlKSB7CiAJCXByX2VycigiJXM6IENvdWxkIG5vdCBpb3JlbWFwIG11eCBwYXJ0aXRpb24gYXQgMHglMDh4XG4iLAogCQkJX19mdW5jX18sIHBhcnRpdGlvbi0+cGh5cyk7CisJCWtmcmVlKHBhcnRpdGlvbik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKaW5kZXggOWU1ZGM4ZS4uOTdmZWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCS8qIEJsb2NrIGNvbnNvbGUgb3V0cHV0IGluIGNhc2UgaXQgaXMgb24gb25lIG9mIHRoZSBPTUFQIFVBUlRzICovCiAJaWYgKCFpc19zdXNwZW5kaW5nKCkpCi0JCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQkJZ290byBub19zbGVlcDsKIAogCW9tYXBfdWFydF9wcmVwYXJlX2lkbGUoMCk7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAlvbWFwX3VhcnRfcmVzdW1lX2lkbGUoMCk7CiAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiBub19zbGVlcDoKIAlpZiAob21hcDJfcG1fZGVidWcpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDhjYmJlYWQuLjJmODY0ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtMTY4LDkgKzE2OCwxMCBAQAogICogb25jZSBkdXJpbmcgYm9vdCBzZXF1ZW5jZSwgYnV0IHRoaXMgd29ya3MgYXMgd2UgYXJlIG5vdCB1c2luZyBzZWN1cmUKICAqIHNlcnZpY2VzLgogICovCi1zdGF0aWMgdm9pZCBvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgdGFyZ2V0X21wdV9zdGF0ZSkKK3N0YXRpYyB2b2lkIG9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KHZvaWQpCiB7CiAJdTMyIHJldDsKKwlpbnQgbXB1X25leHRfc3RhdGUgPSBwd3JkbV9yZWFkX25leHRfcHdyc3QobXB1X3B3cmRtKTsKIAogCWlmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkgewogCQkvKgpAQCAtMTgxLDcgKzE4Miw3IEBACiAJCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgUFdSRE1fUE9XRVJfT04pOwogCQlyZXQgPSBfb21hcF9zYXZlX3NlY3VyZV9zcmFtKCh1MzIgKikKIAkJCQlfX3BhKG9tYXAzX3NlY3VyZV9yYW1fc3RvcmFnZSkpOwotCQlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcHdyZG0sIHRhcmdldF9tcHVfc3RhdGUpOworCQlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcHdyZG0sIG1wdV9uZXh0X3N0YXRlKTsKIAkJLyogRm9sbG93aW5nIGlzIGZvciBlcnJvciB0cmFja2luZywgaXQgc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzYXZlX3NlY3VyZV9zcmFtKCkgcmV0dXJucyAlMDh4XG4iLApAQCAtMzk4LDcgKzM5OSw3IEBACiAJaWYgKCFpc19zdXNwZW5kaW5nKCkpCiAJCWlmIChwZXJfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OIHx8CiAJCSAgICBjb3JlX25leHRfc3RhdGUgPCBQV1JETV9QT1dFUl9PTikKLQkJCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQkJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJCQlnb3RvIGNvbnNvbGVfc3RpbGxfYWN0aXZlOwogCiAJLyogUEVSICovCkBAIC00ODEsNyArNDgyLDcgQEAKIAl9CiAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiBjb25zb2xlX3N0aWxsX2FjdGl2ZToKIAkvKiBEaXNhYmxlIElPLVBBRCBhbmQgSU8tQ0hBSU4gd2FrZXVwICovCkBAIC0xMDk0LDcgKzEwOTUsNyBAQAogCQlsb2NhbF9maXFfZGlzYWJsZSgpOwogCiAJCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3NhdmUoKTsKLQkJb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQoUFdSRE1fUE9XRVJfT04pOworCQlvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCgpOwogCQlvbWFwX2RtYV9nbG9iYWxfY29udGV4dF9yZXN0b3JlKCk7CiAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jCmluZGV4IGQ1MjMzODkuLmNmNjAwZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCAzMDJkYTc0Li4zMmU5MWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb2gtPmRldl9hdHRyID0gdWFydDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsgLyogaW4gY2FzZSB0aGUgZWFybHljb24gaXMgb24gdGhlIFVBUlQgKi8KKwljb25zb2xlX2xvY2soKTsgLyogaW4gY2FzZSB0aGUgZWFybHljb24gaXMgb24gdGhlIFVBUlQgKi8KIAogCS8qCiAJICogQmVjYXVzZSBvZiBlYXJseSBVQVJUIHByb2JpbmcsIFVBUlQgZGlkIG5vdCBnZXQgaWRsZWQKQEAgLTgzOCw3ICs4MzgsNyBAQAogCW9tYXBfdWFydF9ibG9ja19zbGVlcCh1YXJ0KTsKIAl1YXJ0LT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHVhcnQtPnBhZGNvbmYpIHx8CiAJICAgICh1YXJ0LT53a19lbiAmJiB1YXJ0LT53a19tYXNrKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCmluZGV4IDc3ZWNlYmYuLmMzN2U4MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKQEAgLTc4MCw4ICs3ODAsNyBAQAogCXN0cnVjdCBvbWFwX3NyICpzcl9pbmZvID0gKHN0cnVjdCBvbWFwX3NyICopIGRhdGE7CiAKIAlpZiAoIXNyX2luZm8pIHsKLQkJcHJfd2FybmluZygiJXM6IG9tYXBfc3Igc3RydWN0IGZvciBzcl8lcyBub3QgZm91bmRcbiIsCi0JCQlfX2Z1bmNfXywgc3JfaW5mby0+dm9sdGRtLT5uYW1lKTsKKwkJcHJfd2FybmluZygiJXM6IG9tYXBfc3Igc3RydWN0IG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTc5NSw4ICs3OTQsNyBAQAogCXN0cnVjdCBvbWFwX3NyICpzcl9pbmZvID0gKHN0cnVjdCBvbWFwX3NyICopIGRhdGE7CiAKIAlpZiAoIXNyX2luZm8pIHsKLQkJcHJfd2FybmluZygiJXM6IG9tYXBfc3Igc3RydWN0IGZvciBzcl8lcyBub3QgZm91bmRcbiIsCi0JCQlfX2Z1bmNfXywgc3JfaW5mby0+dm9sdGRtLT5uYW1lKTsKKwkJcHJfd2FybmluZygiJXM6IG9tYXBfc3Igc3RydWN0IG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTgzNCw3ICs4MzIsOCBAQAogCiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9mcmVlX2RldmluZm87CiAJfQogCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTk2Niw3ICs5NjUsNyBAQAogCX0KIAogCXNyX2luZm8gPSBfc3JfbG9va3VwKHBkYXRhLT52b2x0ZG0pOwotCWlmICghc3JfaW5mbykgeworCWlmIChJU19FUlIoc3JfaW5mbykpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCmluZGV4IDRlNDhlNzguLjdiN2MyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTQyLDYgKzQyLDggQEAKIAogI2luY2x1ZGUgInRpbWVyLWdwLmgiCiAKKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorCiAvKiBNQVhfR1BUSU1FUl9JRDogbnVtYmVyIG9mIEdQVElNRVJzIG9uIHRoZSBjaGlwICovCiAjZGVmaW5lIE1BWF9HUFRJTUVSX0lECQkxMgogCkBAIC0xNzYsMTAgKzE3OCwxNCBAQAogLyogCiAgKiBXaGVuIDMyay10aW1lciBpcyBlbmFibGVkLCBkb24ndCB1c2UgR1BUaW1lciBmb3IgY2xvY2tzb3VyY2UKICAqIGluc3RlYWQsIGp1c3QgbGVhdmUgZGVmYXVsdCBjbG9ja3NvdXJjZSB3aGljaCB1c2VzIHRoZSAzMmsKLSAqIHN5bmMgY291bnRlci4gIFNlZSBjbG9ja3NvdXJjZSBzZXR1cCBpbiBzZWUgcGxhdC1vbWFwL2NvbW1vbi5jLiAKKyAqIHN5bmMgY291bnRlci4gIFNlZSBjbG9ja3NvdXJjZSBzZXR1cCBpbiBwbGF0LW9tYXAvY291bnRlcl8zMmsuYwogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKSB7fQorc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3sKKwlvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKCk7Cit9CisKICNlbHNlCiAvKgogICogY2xvY2tzb3VyY2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKaW5kZXggZWQ2MDc5Yy4uMTJiZTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCXN0cmNhdChuYW1lLCB2ZGQtPnZvbHRkbS5uYW1lKTsKIAogCXZkZC0+ZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHZvbHRhZ2VfZGlyKTsKKwlrZnJlZShuYW1lKTsKIAlpZiAoSVNfRVJSKHZkZC0+ZGVidWdfZGlyKSkgewogCQlwcl93YXJuaW5nKCIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IiCiAJCQkiIHZkZF8lc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCmluZGV4IGI0NTc1YWUuLjdjYTEzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKQEAgLTIsNTIgKzIsNTYgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcKIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfRUIKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L0VCIHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgRW11bGF0aW9uIEJhc2Vib2FyZCIKIAlzZWxlY3QgQVJNX0dJQwogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQKKwkgIHBsYXRmb3JtLgogCiBjb25maWcgUkVBTFZJRVdfRUJfQTlNUAotCWJvb2wgIlN1cHBvcnQgTXVsdGljb3JlIENvcnRleC1BOSIKKwlib29sICJTdXBwb3J0IE11bHRpY29yZSBDb3J0ZXgtQTkgVGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVX1Y3CiAJaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBDb3J0ZXgtQTlNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIENvcnRleC1BOU1QQ29yZSB0aWxlIGZpdHRlZCB0byB0aGUKKwkgIFJlYWx2aWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uCiAKIGNvbmZpZyBSRUFMVklFV19FQl9BUk0xMU1QCi0JYm9vbCAiU3VwcG9ydCBBUk0xMU1QQ29yZSB0aWxlIgorCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgVGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSQ0hfSEFTX0JBUlJJRVJTIGlmIFNNUAogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIHRpbGUgZml0dGVkIHRvIHRoZSBSZWFsdmlldyhSKQorCSAgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KIAogY29uZmlnIFJFQUxWSUVXX0VCX0FSTTExTVBfUkVWQgotCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgUmV2QiB0aWxlIgorCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgUmV2QiBUaWxlIgogCWRlcGVuZHMgb24gUkVBTFZJRVdfRUJfQVJNMTFNUAogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgUmV2QiB0aWxlIG9uIHRoZSBSZWFsdmlldwotCSAgcGxhdGZvcm0uIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UgYWRkcmVzcyBkaWZmZXJlbmNlcywgYQotCSAga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi0JICBvdGhlciByZXZpc2lvbnMgb2YgdGhlIEFSTTExTVBDb3JlIHRpbGUuCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIFJldmlzaW9uIEIgdGlsZSBvbiB0aGUKKwkgIFJlYWx2aWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UKKwkgIGFkZHJlc3MgZGlmZmVyZW5jZXMsIGEga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcworCSAgbm90IGNvbXBhdGlibGUgd2l0aCBvdGhlciByZXZpc2lvbnMgb2YgdGhlIEFSTTExTVBDb3JlIHRpbGUuCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCMTFNUAotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEIxMU1QQ29yZSBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNMTFNUENvcmUiCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBBUkNIX0hBU19CQVJSSUVSUyBpZiBTTVAKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgTVBDb3JlIFBsYXRmb3JtIEJhc2Vib2FyZC4KLQkgIFBCMTFNUENvcmUgaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yCisJICB0aGUgQVJNMTFNUENvcmUuICBUaGlzIHBsYXRmb3JtIGhhcyBhbiBvbi1ib2FyZCBBUk0xMU1QQ29yZSBhbmQgaGFzCiAJICBzdXBwb3J0IGZvciBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEIxMTc2Ci0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQjExNzYgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExNzZKWkYtUyIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSTV9HSUMKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQVJNMTE3NiBQbGF0Zm9ybSBCYXNlYm9hcmQuCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgQVJNMTE3NkpaRi1TLgogCiBjb25maWcgUkVBTFZJRVdfUEIxMTc2X1NFQ1VSRV9GTEFTSAogCWJvb2wgIkFsbG93IGFjY2VzcyB0byB0aGUgc2VjdXJlIGZsYXNoIG1lbW9yeSBibG9jayIKQEAgLTU5LDIzICs2MywyNCBAQAogCSAgYmxvY2sgKDY0TUIgQCAweDNjMDAwMDAwKSBpcyByZXF1aXJlZC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEJBOAotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEItQTggcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIENvcnRleCh0bSktQTggcGxhdGZvcm0iCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBDb3J0ZXgtQTggUGxhdGZvcm0gQmFzZWJvYXJkLgotCSAgUEItQTggaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIENvcnRleC1BOCBhbmQgaGFzIHN1cHBvcnQgZm9yCi0JICBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yCisJICBDb3J0ZXgodG0pLUE4LiAgVGhpcyBwbGF0Zm9ybSBoYXMgYW4gb24tYm9hcmQgQ29ydGV4LUE4IGFuZCBoYXMKKwkgIHN1cHBvcnQgZm9yIFBDSS1FIGFuZCBDb21wYWN0IEZsYXNoLgogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQlgKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCWCBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBFeHBsb3JlIgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUgaWYgQ1BVX1Y3ICYmICFSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCiAJc2VsZWN0IFpPTkVfRE1BIGlmIFNQQVJTRU1FTQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQQlggcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkCisJICBFeHBsb3JlLgogCiBjb25maWcgUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCWJvb2wgIkhpZ2ggcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGZvciB0aGUgUmVhbFZpZXcgcGxhdGZvcm0iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGEyMmJmNjcuLjY5NTlkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgogICovCi1zdGF0aWMgdm9pZCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCiB7CiAJcGVuX3JlbGVhc2UgPSB2YWw7CiAJc21wX3dtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwppbmRleCAwOWM0YzIxLi5iMmE5YWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMzCiAJc2VsZWN0IFM1UFYzMTBfREVWX1BECisJc2VsZWN0IFM1UFYzMTBfREVWX1NZU01NVQogCXNlbGVjdCBTNVBWMzEwX1NFVFVQX0kyQzEKIAlzZWxlY3QgUzVQVjMxMF9TRVRVUF9TREhDSQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDc0ZDQwMDYuLjMwNjBmNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMTI0LDggKzEyNCw2IEBACiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX1RWCQkweDEyRTIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19MCQkweDEzNjIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19SCQkweDEzNjMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCTE2Ci0jZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCVM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCiAKIC8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KICNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzbW11LmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCmluZGV4IDY2MmZlODUuLjU5OGZjNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzbW11LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaApAQCAtMTMsNiArMTMsOSBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9TWVNNTVVfSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9TWVNNTVVfSCBfX0ZJTEVfXwogCisjZGVmaW5lIFM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCTE2CisjZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCVM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCisKIGVudW0gczVwdjMxMF9zeXNtbXVfaXBzIHsKIAlTWVNNTVVfTURNQSwKIAlTWVNNTVVfU1NTLApAQCAtMzIsNyArMzUsNyBAQAogCVNZU01NVV9NRkNfUiwKIH07CiAKLXN0YXRpYyBjaGFyICpzeXNtbXVfaXBzX25hbWVbUzVQX1NZU01NVV9UT1RBTF9JUE5VTV0gPSB7CitzdGF0aWMgY2hhciAqc3lzbW11X2lwc19uYW1lW1M1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNXSA9IHsKIAkiU1lTTU1VX01ETUEiCSwKIAkiU1lTTU1VX1NTUyIJLAogCSJTWVNNTVVfRklNQzAiCSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwppbmRleCA0ZDFiNGM1Li4wYzhmNmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCkBAIC02MCw2ICs2MCw4IEBACiAKIGNvbmZpZyBNQUNIX0FHNUVWTQogCWJvb2wgIkFHNUVWTSBib2FyZCIKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgU0hfTENEX01JUElfRFNJCiAJZGVwZW5kcyBvbiBBUkNIX1NINzNBMAogCiBjb25maWcgTUFDSF9NQUNLRVJFTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKaW5kZXggYzE4YTc0MC4uMjEyM2I5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCkBAIC0zNCw5ICszNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0L3NoX2tleXNjLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW1jaWYuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NoX2Nsay5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbWlwaV9kc2kuaD4KICNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KLQogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3NoNzNhMC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CkBAIC0xODMsMTEgKzE4NCwxNjUgQEAKIAkucmVzb3VyY2UJPSBzaF9tbWNpZl9yZXNvdXJjZXMsCiB9OwogCisvKiBJckRBICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlyZGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweEU2RDAwMDAwLAorCQkuZW5kCT0gMHhFNkQwMUZENCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZ2ljX3NwaSg5NSksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX2lyZGEiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZSAgICAgICA9IGlyZGFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaXJkYV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGNkX2JhY2tsaWdodF9zZXFbM11bMl0gPSB7CisJeyAweDA0LCAweDA3IH0sCisJeyAweDIzLCAweDgwIH0sCisJeyAweDAzLCAweDAxIH0sCit9OworCitzdGF0aWMgdm9pZCBsY2RfYmFja2xpZ2h0X29uKHZvaWQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwlpbnQgazsKKworCWEgPSBpMmNfZ2V0X2FkYXB0ZXIoMSk7CisJZm9yIChrID0gMDsgYSAmJiBrIDwgMzsgaysrKSB7CisJCW1zZy5hZGRyID0gMHg2ZDsKKwkJbXNnLmJ1ZiA9ICZsY2RfYmFja2xpZ2h0X3NlcVtrXVswXTsKKwkJbXNnLmxlbiA9IDI7CisJCW1zZy5mbGFncyA9IDA7CisJCWlmIChpMmNfdHJhbnNmZXIoYSwgJm1zZywgMSkgIT0gMSkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgbGNkX2JhY2tsaWdodF9yZXNldCh2b2lkKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVDIzNSwgMCk7CisJbWRlbGF5KDI0KTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BPUlQyMzUsIDEpOworfQorCitzdGF0aWMgdm9pZCBsY2Rfb24odm9pZCAqYm9hcmRfZGF0YSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJbGNkX2JhY2tsaWdodF9vbigpOworfQorCitzdGF0aWMgdm9pZCBsY2Rfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpCit7CisJbGNkX2JhY2tsaWdodF9yZXNldCgpOworfQorCisvKiBMQ0RDMCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgbGNkYzBfbW9kZXNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJSNjMzMDIoUUhEKSIsCisJCS54cmVzCQk9IDU0NCwKKwkJLnlyZXMJCT0gOTYxLAorCQkubGVmdF9tYXJnaW4JPSA3MiwKKwkJLnJpZ2h0X21hcmdpbgk9IDYwMCwKKwkJLmhzeW5jX2xlbgk9IDE2LAorCQkudXBwZXJfbWFyZ2luCT0gOCwKKwkJLmxvd2VyX21hcmdpbgk9IDgsCisJCS52c3luY19sZW4JPSAyLAorCQkuc3luYwkJPSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgfCBGQl9TWU5DX0hPUl9ISUdIX0FDVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGMwX2luZm8gPSB7CisJLmNsb2NrX3NvdXJjZSA9IExDRENfQ0xLX1BFUklQSEVSQUwsCisJLmNoWzBdID0geworCQkuY2hhbiA9IExDRENfQ0hBTl9NQUlOTENELAorCQkuaW50ZXJmYWNlX3R5cGUgPSBSR0IyNCwKKwkJLmNsb2NrX2RpdmlkZXIgPSAxLAorCQkuZmxhZ3MgPSBMQ0RDX0ZMQUdTX0RXUE9MLAorCQkubGNkX3NpemVfY2ZnLndpZHRoID0gNDQsCisJCS5sY2Rfc2l6ZV9jZmcuaGVpZ2h0ID0gNzksCisJCS5icHAgPSAxNiwKKwkJLmxjZF9jZmcgPSBsY2RjMF9tb2RlcywKKwkJLm51bV9jZmcgPSBBUlJBWV9TSVpFKGxjZGMwX21vZGVzKSwKKwkJLmJvYXJkX2NmZyA9IHsKKwkJCS5kaXNwbGF5X29uID0gbGNkX29uLAorCQkJLmRpc3BsYXlfb2ZmID0gbGNkX29mZiwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGMwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiTENEQzAiLAorCQkuc3RhcnQJPSAweGZlOTQwMDAwLCAvKiBQNC1vbmx5IHNwYWNlICovCisJCS5lbmQJPSAweGZlOTQzZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gaW50Y3NfZXZ0MmlycSgweDU4MCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsY2RjMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9sY2RjX2ZiIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkYzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBsY2RjMF9yZXNvdXJjZXMsCisJLmlkICAgICAgICAgICAgID0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsY2RjMF9pbmZvLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSB+MCwKKwl9LAorfTsKKworLyogTUlQSS1EU0kgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlwaWRzaTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gMHhmZWFiMDAwMCwKKwkJLmVuZCAgICA9IDB4ZmVhYjNmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDB4ZmVhYjQwMDAsCisJCS5lbmQgICAgPSAweGZlYWI3ZmZmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWlwaV9kc2lfaW5mbyBtaXBpZHNpMF9pbmZvID0geworCS5kYXRhX2Zvcm1hdAk9IE1JUElfUkdCODg4LAorCS5sY2RfY2hhbgk9ICZsY2RjMF9pbmZvLmNoWzBdLAorCS52c3lud19vZmZzZXQJPSAyMCwKKwkuY2xrc3JjCQk9IDEsCisJLmZsYWdzCQk9IFNIX01JUElfRFNJX0hTQUJNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWlwaWRzaTBfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaC1taXBpLWRzaSIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShtaXBpZHNpMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IG1pcGlkc2kwX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1pcGlkc2kwX2luZm8sCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphZzVldm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmV0aF9kZXZpY2UsCiAJJmtleXNjX2RldmljZSwKIAkmZnNpX2RldmljZSwKIAkmbW1jX2RldmljZSwKKwkmaXJkYV9kZXZpY2UsCisJJmxjZGMwX2RldmljZSwKKwkmbWlwaWRzaTBfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhZzVldm1faW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yMjQsNiArMzc5LDggQEAKIAlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUElOVENSMEEpIHwgKDI8PDEwKSwgUElOVENSMEEpOwogfQogCisjZGVmaW5lIERTSTBQSFlDUgkweGU2MTUwMDZjCisKIHN0YXRpYyB2b2lkIF9faW5pdCBhZzVldm1faW5pdCh2b2lkKQogewogCXNoNzNhMF9waW5tdXhfaW5pdCgpOwpAQCAtMjg3LDYgKzQ0NCwyNSBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFJU0xELCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBT1NMRCwgTlVMTCk7CiAKKwkvKiBJckRBICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDI0MV9JUkRBX09VVCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDI0Ml9JUkRBX0lOLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDI0M19JUkRBX0ZJUlNFTCwgTlVMTCk7CisKKwkvKiBMQ0QgcGFuZWwgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMjE3LCBOVUxMKTsgLyogUkVTRVQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMjE3LCAwKTsKKwltZGVsYXkoMSk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUMjE3LCAxKTsKKworCS8qIExDRCBiYWNrbGlnaHQgY29udHJvbGxlciAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQyMzUsIE5VTEwpOyAvKiBSRVNFVCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQyMzUsIDApOworCWxjZF9iYWNrbGlnaHRfcmVzZXQoKTsKKworCS8qIE1JUEktRFNJIGNsb2NrIHNldHVwICovCisJX19yYXdfd3JpdGVsKDB4MmE4MDkwMTAsIERTSTBQSFlDUik7CisKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAogCS8qIFNoYXJlZCBhdHRyaWJ1dGUgb3ZlcnJpZGUgZW5hYmxlLCA2NEsqOHdheSAqLwogCWwyeDBfaW5pdChfX2lvKDB4ZjAxMDAwMDApLCAweDAwNDYwMDAwLCAweGMyMDAwZmZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYwppbmRleCA2ODZiMzA0Li5lZjQ2MTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCkBAIC0zNDcsNyArMzQ3LDYgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9GSVJTRUwsIE5VTEwpOwotCXNldF9pcnFfdHlwZShldnQyaXJxKDB4NDgwKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAogCXNoNzM2N19hZGRfc3RhbmRhcmRfZGV2aWNlcygpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggN2IxNWQyMS4uZmI0MjEzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtMTY5LDkgKzE2OSw4IEBACiAgKglTVzEJfAlTVzMzCiAgKgkJfCBiaXQxIHwgYml0MiB8IGJpdDMgfCBiaXQ0CiAgKiAtLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0KLSAqIE1NQzAJICBPRkYJfCAgT0ZGIHwgIE9OICB8ICBPTiAgfCAgWAotICogTU1DMQkgIE9OCXwgIE9GRiB8ICBPTiAgfCAgWCAgIHwgT04KLSAqIFNESEkxICBPRkYJfCAgT04gIHwgICBYICB8ICBPRkYgfCBPTgorICogTU1DMCAgIE9GRgl8ICBPRkYgfCAgIFggIHwgIE9OICB8ICBYICAgICAgIChVc2UgTU1DSUYpCisgKiBTREhJMSAgT0ZGCXwgIE9OICB8ICAgWCAgfCAgT0ZGIHwgIFggICAgICAgKFVzZSBNRkRfU0hfTU9CSUxFX1NESEkpCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCmluZGV4IDlhYThkNjguLmU5NzMxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwpAQCAtMjM0LDcgKzIzNCw5IEBACiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKFBMTEMyQ1IpICYgfigweDNmIDw8IDI0KTsKIAotCV9fcmF3X3dyaXRlbCgodmFsdWUgJiB+MHg4MDAwMDAwMCkgfCAoKGlkeCArIDE5KSA8PCAyNCksIFBMTEMyQ1IpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSB8ICgoaWR4ICsgMTkpIDw8IDI0KSwgUExMQzJDUik7CisKKwljbGstPnJhdGUgPSBjbGstPmZyZXFfdGFibGVbaWR4XS5mcmVxdWVuY3k7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCmluZGV4IDcyMGE3MTQuLmRkZDRhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwpAQCAtMTE4LDggKzExOCwxNiBAQAogewogCXVuc2lnbmVkIGxvbmcgbXVsdCA9IDE7CiAKLQlpZiAoX19yYXdfcmVhZGwoUExMRUNSKSAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpCisJaWYgKF9fcmF3X3JlYWRsKFBMTEVDUikgJiAoMSA8PCBjbGstPmVuYWJsZV9iaXQpKSB7CiAJCW11bHQgPSAoKChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpID4+IDI0KSAmIDB4M2YpICsgMSk7CisJCS8qIGhhbmRsZSBDRkcgYml0IGZvciBQTEwxIGFuZCBQTEwyICovCisJCXN3aXRjaCAoY2xrLT5lbmFibGVfYml0KSB7CisJCWNhc2UgMToKKwkJY2FzZSAyOgorCQkJaWYgKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJiAoMSA8PCAyMCkpCisJCQkJbXVsdCAqPSAyOworCQl9CisJfQogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdDsKIH0KQEAgLTIxMiw3ICsyMjAsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0gewogCVtESVY0X0ldID0gRElWNChGUlFDUkEsIDIwLCAweGZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9aR10gPSBESVY0KEZSUUNSQSwgMTYsIDB4YmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAotCVtESVY0X00zXSA9IERJVjQoRlJRQ1JBLCA4LCAweGZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9NM10gPSBESVY0KEZSUUNSQSwgMTIsIDB4ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X0JdID0gRElWNChGUlFDUkEsIDgsIDB4ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X00xXSA9IERJVjQoRlJRQ1JBLCA0LCAweGZmZiwgMCksCiAJW0RJVjRfTTJdID0gRElWNChGUlFDUkEsIDAsIDB4ZmZmLCAwKSwKQEAgLTI1NSwxMCArMjYzLDEwIEBACiB9OwogCiBlbnVtIHsgTVNUUDAwMSwKLQlNU1RQMTI1LCBNU1RQMTE2LAorCU1TVFAxMjUsIE1TVFAxMTgsIE1TVFAxMTYsIE1TVFAxMDAsCiAJTVNUUDIxOSwKIAlNU1RQMjA3LCBNU1RQMjA2LCBNU1RQMjA0LCBNU1RQMjAzLCBNU1RQMjAyLCBNU1RQMjAxLCBNU1RQMjAwLAotCU1TVFAzMzEsIE1TVFAzMjksIE1TVFAzMjMsIE1TVFAzMTIsCisJTVNUUDMzMSwgTVNUUDMyOSwgTVNUUDMyNSwgTVNUUDMyMywgTVNUUDMxMiwKIAlNU1RQNDExLCBNU1RQNDEwLCBNU1RQNDAzLAogCU1TVFBfTlIgfTsKIApAQCAtMjY4LDcgKzI3Niw5IEBACiBzdGF0aWMgc3RydWN0IGNsayBtc3RwX2Nsa3NbTVNUUF9OUl0gPSB7CiAJW01TVFAwMDFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMCwgMSwgMCksIC8qIElJQzIgKi8KIAlbTVNUUDEyNV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMSwgMjUsIDApLCAvKiBUTVUwICovCisJW01TVFAxMThdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAxOCwgMCksIC8qIERTSVRYMCAqLwogCVtNU1RQMTE2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjEsIDE2LCAwKSwgLyogSUlDMCAqLworCVtNU1RQMTAwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMCwgMCksIC8qIExDREMwICovCiAJW01TVFAyMTldID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDE5LCAwKSwgLyogU0NJRkE3ICovCiAJW01TVFAyMDddID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDcsIDApLCAvKiBTQ0lGQTUgKi8KIAlbTVNUUDIwNl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNiwgMCksIC8qIFNDSUZCICovCkBAIC0yNzksNiArMjg5LDcgQEAKIAlbTVNUUDIwMF0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMCwgMCksIC8qIFNDSUZBNCAqLwogCVtNU1RQMzMxXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IzLCAzMSwgMCksIC8qIFNDSUZBNiAqLwogCVtNU1RQMzI5XSA9IE1TVFAoJnJfY2xrLCBTTVNUUENSMywgMjksIDApLCAvKiBDTVQxMCAqLworCVtNU1RQMzI1XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IzLCAyNSwgMCksIC8qIElyREEgKi8KIAlbTVNUUDMyM10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAyMywgMCksIC8qIElJQzEgKi8KIAlbTVNUUDMxMl0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAxMiwgMCksIC8qIE1NQ0lGMCAqLwogCVtNU1RQNDExXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjQsIDExLCAwKSwgLyogSUlDMyAqLwpAQCAtMjg4LDE2ICsyOTksMjUgQEAKIAogI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9CiAjZGVmaW5lIENMS0RFVl9ERVZfSUQoX2lkLCBfY2xrKSB7IC5kZXZfaWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KKyNkZWZpbmUgQ0xLREVWX0lDS19JRChfY2lkLCBfZGlkLCBfY2xrKSB7IC5jb25faWQgPSBfY2lkLCAuZGV2X2lkID0gX2RpZCwgLmNsayA9IF9jbGsgfQogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgicl9jbGsiLCAmcl9jbGspLAogCisJLyogRElWNiBjbG9ja3MgKi8KKwlDTEtERVZfSUNLX0lEKCJkc2l0X2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKKwlDTEtERVZfSUNLX0lEKCJkc2l0X2NsayIsICJzaC1taXBpLWRzaS4xIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKKwlDTEtERVZfSUNLX0lEKCJkc2kwcF9jbGsiLCAic2gtbWlwaS1kc2kuMCIsICZkaXY2X2Nsa3NbRElWNl9EU0kwUF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaTFwX2NsayIsICJzaC1taXBpLWRzaS4xIiwgJmRpdjZfY2xrc1tESVY2X0RTSTFQXSksCisKIAkvKiBNU1RQMzIgY2xvY2tzICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4yIiwgJm1zdHBfY2xrc1tNU1RQMDAxXSksIC8qIEkyQzIgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4wIiwgJm1zdHBfY2xrc1tNU1RQMTAwXSksIC8qIExDREMwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfdG11LjAiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDAgKi8KIAlDTEtERVZfREVWX0lEKCJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDEyNV0pLCAvKiBUTVUwMSAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMCIsICZtc3RwX2Nsa3NbTVNUUDExNl0pLCAvKiBJMkMwICovCisJQ0xLREVWX0RFVl9JRCgic2gtbWlwaS1kc2kuMCIsICZtc3RwX2Nsa3NbTVNUUDExOF0pLCAvKiBEU0lUWCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS43IiwgJm1zdHBfY2xrc1tNU1RQMjE5XSksIC8qIFNDSUZBNyAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMjA3XSksIC8qIFNDSUZBNSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS44IiwgJm1zdHBfY2xrc1tNU1RQMjA2XSksIC8qIFNDSUZCICovCkBAIC0zMDgsNiArMzI4LDcgQEAKIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIwMF0pLCAvKiBTQ0lGQTQgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDMzMV0pLCAvKiBTQ0lGQTYgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9jbXQuMTAiLCAmbXN0cF9jbGtzW01TVFAzMjldKSwgLyogQ01UMTAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9pcmRhLjAiLCAmbXN0cF9jbGtzW01TVFAzMjVdKSwgLyogSXJEQSAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMSIsICZtc3RwX2Nsa3NbTVNUUDMyM10pLCAvKiBJMkMxICovCiAJQ0xLREVWX0RFVl9JRCgic2hfbW1jaWYuMCIsICZtc3RwX2Nsa3NbTVNUUDMxMl0pLCAvKiBNTUNJRjAgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjMiLCAmbXN0cF9jbGtzW01TVFA0MTFdKSwgLyogSTJDMyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCmluZGV4IGY3OGExZWEuLmNhNWY5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTM2NSw2ICszNjUsNyBAQAogCiBlbnVtIHsKIAlVTlVTRURfSU5UQ1MgPSAwLAorCUVOQUJMRURfSU5UQ1MsCiAKIAlJTlRDUywKIApAQCAtNDEzLDcgKzQxNCw3IEBACiAJQ01UNCwKIAlEU0lUWDFfRFNJVFgxXzAsCiAJRFNJVFgxX0RTSVRYMV8xLAotCS8qIE1GSVMyICovCisJTUZJUzJfSU5UQ1MsIC8qIFByaW9yaXR5IGFsd2F5cyBlbmFibGVkIHVzaW5nIEVOQUJMRURfSU5UQ1MgKi8KIAlDUE9SVFMyUiwKIAkvKiBDRUMgKi8KIAlKUFU2RSwKQEAgLTQ3Nyw3ICs0NzgsNyBAQAogCUlOVENTX1ZFQ1QoQ01UNCwgMHgxOTgwKSwKIAlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMCwgMHgxOWEwKSwKIAlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMSwgMHgxOWMwKSwKLQkvKiBNRklTMiAqLworCUlOVENTX1ZFQ1QoTUZJUzJfSU5UQ1MsIDB4MWEwMCksCiAJSU5UQ1NfVkVDVChDUE9SVFMyUiwgMHgxYTIwKSwKIAkvKiBDRUMgKi8KIAlJTlRDU19WRUNUKEpQVTZFLCAweDFhODApLApAQCAtNTQzLDcgKzU0NCw3IEBACiAJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCiAJICAgIENNVDQsIERTSVRYMV9EU0lUWDFfMCwgRFNJVFgxX0RTSVRYMV8xLCAwIH0gfSwKIAl7IDB4ZmZkNTAxOWMsIDB4ZmZkNTAxZGMsIDgsIC8qIElNUjdTQTMgLyBJTUNSN1NBMyAqLwotCSAgeyAwLCBDUE9SVFMyUiwgMCwgMCwKKwkgIHsgTUZJUzJfSU5UQ1MsIENQT1JUUzJSLCAwLCAwLAogCSAgICBKUFU2RSwgMCwgMCwgMCB9IH0sCiAJeyAweGZmZDIwMTA0LCAwLCAxNiwgLyogSU5UQU1BU0sgKi8KIAkgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKQEAgLTU3MSw3ICs1NzIsOCBAQAogCXsgMHhmZmQ1MDAzMCwgMCwgMTYsIDQsIC8qIElQUk1TMyAqLyB7IFRNVTEsIDAsIDAsIDAgfSB9LAogCXsgMHhmZmQ1MDAzNCwgMCwgMTYsIDQsIC8qIElQUk5TMyAqLyB7IENNVDQsIERTSVRYMV9EU0lUWDFfMCwKIAkJCQkJICAgICAgIERTSVRYMV9EU0lUWDFfMSwgMCB9IH0sCi0JeyAweGZmZDUwMDM4LCAwLCAxNiwgNCwgLyogSVBST1MzICovIHsgMCwgQ1BPUlRTMlIsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDAzOCwgMCwgMTYsIDQsIC8qIElQUk9TMyAqLyB7IEVOQUJMRURfSU5UQ1MsIENQT1JUUzJSLAorCQkJCQkgICAgICAgMCwgMCB9IH0sCiAJeyAweGZmZDUwMDNjLCAwLCAxNiwgNCwgLyogSVBSUFMzICovIHsgSlBVNkUsIDAsIDAsIDAgfSB9LAogfTsKIApAQCAtNTkwLDYgKzU5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNzX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkubmFtZSA9ICJzaDczNzItaW50Y3MiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVEX0lOVENTLAogCS5yZXNvdXJjZSA9IGludGNzX3Jlc291cmNlcywKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW50Y3NfcmVzb3VyY2VzKSwKIAkuaHcgPSBJTlRDX0hXX0RFU0MoaW50Y3NfdmVjdG9ycywgaW50Y3NfZ3JvdXBzLCBpbnRjc19tYXNrX3JlZ2lzdGVycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwppbmRleCAzMjJkOGQ1Li41ZDBlMTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCkBAIC0yNTIsMTAgKzI1MiwxMSBAQAogCiB2b2lkIF9faW5pdCBzaDczYTBfaW5pdF9pcnEodm9pZCkKIHsKLQl2b2lkIF9faW9tZW0gKmdpY19iYXNlID0gX19pbygweGYwMDAxMDAwKTsKKwl2b2lkIF9faW9tZW0gKmdpY19kaXN0X2Jhc2UgPSBfX2lvKDB4ZjAwMDEwMDApOworCXZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlID0gX19pbygweGYwMDAwMTAwKTsKIAl2b2lkIF9faW9tZW0gKmludGV2dHNhID0gaW9yZW1hcF9ub2NhY2hlKDB4ZmZkMjAxMDAsIFBBR0VfU0laRSk7CiAKLQlnaWNfaW5pdCgwLCAyOSwgZ2ljX2Jhc2UsIGdpY19iYXNlKTsKKwlnaWNfaW5pdCgwLCAyOSwgZ2ljX2Rpc3RfYmFzZSwgZ2ljX2NwdV9iYXNlKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y3NfZGVzYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKaW5kZXggYmQwNjYyMC4uYWQ4MDQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKQEAgLTIwNyw5ICsyMDcsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmx2bF9sb2NrW3BvcnRdLCBmbGFncyk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKLQkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoZC0+aXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAllbHNlIGlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfRkFMTElORyB8IElSUV9UWVBFX0VER0VfUklTSU5HKSkKLQkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChkLT5pcnEsIGhhbmRsZV9lZGdlX2lycSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsay5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKaW5kZXggZDc3MjM5NS4uYTIxN2Y2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpZm5kZWYgX19NQUNIX0NMS19ICiAjZGVmaW5lIF9fTUFDSF9DTEtfSAogCitzdHJ1Y3QgY2xrOworCiB2b2lkIHRlZ3JhX3BlcmlwaF9yZXNldF9kZWFzc2VydChzdHJ1Y3QgY2xrICpjKTsKIHZvaWQgdGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydChzdHJ1Y3QgY2xrICpjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAppbmRleCA0MTJmNWM2Li42NmNkM2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMjAsNiArMjAsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLREVWX0gKICNkZWZpbmUgX19NQUNIX0NMS0RFVl9ICiAKK3N0cnVjdCBjbGs7CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9rYmMuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWQyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9rYmMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogUGxhdGZvcm0gZGVmaW5pdGlvbnMgZm9yIHRlZ3JhLWtiYyBrZXlib2FyZCBpbnB1dCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEFTTUFSTV9BUkNIX1RFR1JBX0tCQ19ICisjZGVmaW5lIEFTTUFSTV9BUkNIX1RFR1JBX0tCQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzJ4X1NPQworI2RlZmluZSBLQkNfTUFYX0dQSU8JMjQKKyNkZWZpbmUgS0JDX01BWF9LUEVOVAk4CisjZWxzZQorI2RlZmluZSBLQkNfTUFYX0dQSU8JMjAKKyNkZWZpbmUgS0JDX01BWF9LUEVOVAk3CisjZW5kaWYKKworI2RlZmluZSBLQkNfTUFYX1JPVwkxNgorI2RlZmluZSBLQkNfTUFYX0NPTAk4CisjZGVmaW5lIEtCQ19NQVhfS0VZCShLQkNfTUFYX1JPVyAqIEtCQ19NQVhfQ09MKQorCitzdHJ1Y3QgdGVncmFfa2JjX3Bpbl9jZmcgeworCWJvb2wgaXNfcm93OworCXVuc2lnbmVkIGNoYXIgbnVtOworfTsKKworc3RydWN0IHRlZ3JhX2tiY193YWtlX2tleSB7CisJdTggcm93OjQ7CisJdTggY29sOjQ7Cit9OworCitzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdW5zaWduZWQgaW50IHJlcGVhdF9jbnQ7CisKKwl1bnNpZ25lZCBpbnQgd2FrZV9jbnQ7IC8qIDA6d2FrZSBvbiBhbnkga2V5ID4xOndha2Ugb24gd2FrZV9jZmcgKi8KKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3dha2Vfa2V5ICp3YWtlX2NmZzsKKworCXN0cnVjdCB0ZWdyYV9rYmNfcGluX2NmZyBwaW5fY2ZnW0tCQ19NQVhfR1BJT107CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisKKwlib29sIHdha2V1cDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCmluZGV4IGRlN2RmYWQuLjE3Yzc0ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpAQCAtNDYsMjQgKzQ2LDI0IEBACiAjZGVmaW5lIElDVExSX0NPUF9JRVJfQ0xSCTB4MzgKICNkZWZpbmUgSUNUTFJfQ09QX0lFUF9DTEFTUwkweDNjCiAKLXN0YXRpYyB2b2lkICgqZ2ljX21hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwotc3RhdGljIHZvaWQgKCpnaWNfdW5tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkICgqdGVncmFfZ2ljX21hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworc3RhdGljIHZvaWQgKCp0ZWdyYV9naWNfdW5tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKIAotI2RlZmluZSBpcnFfdG9faWN0bHIoaXJxKSAoKChpcnEpLTMyKSA+PiA1KQorI2RlZmluZSBpcnFfdG9faWN0bHIoaXJxKSAoKChpcnEpIC0gMzIpID4+IDUpCiBzdGF0aWMgdm9pZCBfX2lvbWVtICp0ZWdyYV9pY3Rscl9iYXNlID0gSU9fQUREUkVTUyhURUdSQV9QUklNQVJZX0lDVExSX0JBU0UpOwotI2RlZmluZSBpY3Rscl90b192aXJ0KGljdGxyKSAodGVncmFfaWN0bHJfYmFzZSArIChpY3RscikqMHgxMDApCisjZGVmaW5lIGljdGxyX3RvX3ZpcnQoaWN0bHIpICh0ZWdyYV9pY3Rscl9iYXNlICsgKGljdGxyKSAqIDB4MTAwKQogCiBzdGF0aWMgdm9pZCB0ZWdyYV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBpY3Rscl90b192aXJ0KGlycV90b19pY3RscihkLT5pcnEpKTsKLQlnaWNfbWFza19pcnEoZCk7Ci0Jd3JpdGVsKDE8PChkLT5pcnEmMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfQ0xSKTsKKwl0ZWdyYV9naWNfbWFza19pcnEoZCk7CisJd3JpdGVsKDEgPDwgKGQtPmlycSAmIDMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX0NMUik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlZ3JhX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gaWN0bHJfdG9fdmlydChpcnFfdG9faWN0bHIoZC0+aXJxKSk7Ci0JZ2ljX3VubWFza19pcnEoZCk7CisJdGVncmFfZ2ljX3VubWFza19pcnEoZCk7CiAJd3JpdGVsKDE8PChkLT5pcnEmMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfU0VUKTsKIH0KIApAQCAtOTgsOCArOTgsOCBAQAogCQkgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4MTAwKSk7CiAKIAlnaWMgPSBnZXRfaXJxX2NoaXAoMjkpOwotCWdpY191bm1hc2tfaXJxID0gZ2ljLT5pcnFfdW5tYXNrOwotCWdpY19tYXNrX2lycSA9IGdpYy0+aXJxX21hc2s7CisJdGVncmFfZ2ljX3VubWFza19pcnEgPSBnaWMtPmlycV91bm1hc2s7CisJdGVncmFfZ2ljX21hc2tfaXJxID0gZ2ljLT5pcnFfbWFzazsKIAl0ZWdyYV9pcnEuaXJxX2FjayA9IGdpYy0+aXJxX2FjazsKICNpZmRlZiBDT05GSUdfU01QCiAJdGVncmFfaXJxLmlycV9zZXRfYWZmaW5pdHkgPSBnaWMtPmlycV9zZXRfYWZmaW5pdHk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwppbmRleCAzZjdiNWU5Li45Y2RlYzVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKQEAgLTIsMTcgKzIsMTkgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfVkVSU0FUSUxFCiAKIGNvbmZpZyBBUkNIX1ZFUlNBVElMRV9QQgotCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlL1BCIHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNOTI2RUotUyIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlL1BCIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFZlcnNhdGlsZSBQbGF0Zm9ybSBCYXNlYm9hcmQKKwkgIGZvciB0aGUgQVJNOTI2RUotUy4KIAogY29uZmlnIE1BQ0hfVkVSU0FUSUxFX0FCCi0JYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUvQUIgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUgQXBwbGljYXRpb24gQmFzZWJvYXJkIGZvciBBUk05MjZFSi1TIgogCXNlbGVjdCBDUFVfQVJNOTI2VAogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUvQVAgcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlIEFwcGxpY2F0aW9uIEJhc2Vib2FyZAorCSAgZm9yIHRoZSBBUk05MjZFSi1TLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCmluZGV4IGIxNjg3YjYuLjYzNGJmMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgogICovCi1zdGF0aWMgdm9pZCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCiB7CiAJcGVuX3JlbGVhc2UgPSB2YWw7CiAJc21wX3dtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKaW5kZXggYTllZDM0Mi4uMWVkYWU2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdGltZXItc3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3A4MTAuaD4KIAogI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KIApAQCAtNTAsOCArNTEsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHYybV90aW1lcl9pbml0KHZvaWQpCiB7CisJdTMyIHNjY3RybDsKKwogCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KE1NSU9fUDJWKFYyTV9TWVNfMjRNSFopLCAyNDAwMDAwMCk7CiAKKwkvKiBTZWxlY3QgMU1IeiBUSU1DTEsgYXMgdGhlIHJlZmVyZW5jZSBjbG9jayBmb3IgU1A4MDQgdGltZXJzICovCisJc2NjdHJsID0gcmVhZGwoTU1JT19QMlYoVjJNX1NZU0NUTCArIFNDQ1RSTCkpOworCXNjY3RybCB8PSBTQ0NUUkxfVElNRVJFTjBTRUxfVElNQ0xLOworCXNjY3RybCB8PSBTQ0NUUkxfVElNRVJFTjFTRUxfVElNQ0xLOworCXdyaXRlbChzY2N0cmwsIE1NSU9fUDJWKFYyTV9TWVNDVEwgKyBTQ0NUUkwpKTsKKwogCXdyaXRlbCgwLCBNTUlPX1AyVihWMk1fVElNRVIwKSArIFRJTUVSX0NUUkwpOwogCXdyaXRlbCgwLCBNTUlPX1AyVihWMk1fVElNRVIxKSArIFRJTUVSX0NUUkwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggNTE2NDA2OS4uY2RkZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjk3LDYgKzI5NywxMiBAQAogCW1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RleHQpLCBfZW5kIC0gX3N0ZXh0KTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChwaHlzX2luaXRyZF9zaXplICYmCisJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSkpIHsKKwkJcHJfZXJyKCJJTklUUkQ6IDB4JTA4bHgrMHglMDhseCBvdmVybGFwcyBpbi11c2UgbWVtb3J5IHJlZ2lvbiAtIGRpc2FibGluZyBpbml0cmRcbiIsCisJCSAgICAgICBwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7CisJCXBoeXNfaW5pdHJkX3N0YXJ0ID0gcGh5c19pbml0cmRfc2l6ZSA9IDA7CisJfQogCWlmIChwaHlzX2luaXRyZF9zaXplKSB7CiAJCW1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCAzYTcwZWJmLi5mZjQ2OWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTk1LDYgKzk1LDcgQEAKIAljYXNlIE1BQ0hfVFlQRV9NWDM1XzNEUzoKIAljYXNlIE1BQ0hfVFlQRV9QQ00wNDM6CiAJY2FzZSBNQUNIX1RZUEVfTElMTFkxMTMxOgorCWNhc2UgTUFDSF9UWVBFX1ZQUjIwMDoKIAkJdWFydF9iYXNlID0gTVgzWF9VQVJUMV9CQVNFX0FERFI7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01BR1hfWk41OgpAQCAtMTAyLDYgKzEwMyw3IEBACiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTFfQkFCQkFHRToKIAljYXNlIE1BQ0hfVFlQRV9FVUtSRUFfQ1BVSU1YNTFTRDoKKwljYXNlIE1BQ0hfVFlQRV9NWDUxXzNEUzoKIAkJdWFydF9iYXNlID0gTVg1MV9VQVJUMV9CQVNFX0FERFI7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTBfUkRQOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCAxOGZlM2NiLi5iNjMzM2FlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMTQ0LDEyICsxNDQsOSBAQAogY29uZmlnIE9NQVBfSU9NTVVfSVZBMgogCWJvb2wKIAotY2hvaWNlCi0JcHJvbXB0ICJTeXN0ZW0gdGltZXIiCi0JZGVmYXVsdCBPTUFQXzMyS19USU1FUiBpZiAhQVJDSF9PTUFQMTVYWAotCiBjb25maWcgT01BUF9NUFVfVElNRVIKIAlib29sICJVc2UgbXB1IHRpbWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE9NQVAgbXB1IHRpbWVyLiBUaGlzCiAJICB0aW1lciBwcm92aWRlcyBtb3JlIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIHRoZSAzMktIeiB0aW1lciwKQEAgLTE1OCw2ICsxNTUsNyBAQAogY29uZmlnIE9NQVBfMzJLX1RJTUVSCiAJYm9vbCAiVXNlIDMyS0h6IHRpbWVyIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyUExVUworCWRlZmF1bHQgeSBpZiAoQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyUExVUykKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBPTUFQIDMyS0h6IHRpbWVyLgogCSAgVGhpcyB0aW1lciBzYXZlcyBwb3dlciBjb21wYXJlZCB0byB0aGUgT01BUF9NUFVfVElNRVIsIGFuZCBoYXMKQEAgLTE2NSw4ICsxNjMsNiBAQAogCSAgaW50cmEtdGljayByZXNvbHV0aW9uIHRoYW4gT01BUF9NUFVfVElNRVIuIFRoZSAzMktIeiB0aW1lciBpcwogCSAgY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBPTUFQMTZYWCwgMjRYWCwgMzRYWCBhbmQgT01BUDQuCiAKLWVuZGNob2ljZQotCiBjb25maWcgT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUKIAlib29sICJPTUFQMyBIUy9FTVUgc2F2ZSBhbmQgcmVzdG9yZSBmb3IgTDIgQVVYIGNvbnRyb2wgcmVnaXN0ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIFBNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCmluZGV4IGVhNDY0NDAuLjg2MmRkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCkBAIC0zNiw4ICszNiw2IEBACiAKICNkZWZpbmUgT01BUDE2WFhfVElNRVJfMzJLX1NZTkNIUk9OSVpFRAkJMHhmZmZiYzQxMAogCi0jaWYgIShkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpKQotCiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KIAogLyoKQEAgLTEyMiwxMiArMTIwLDI0IEBACiAjZGVmaW5lIFNDX01VTFQJCTQwMDAwMDAwMDB1CiAjZGVmaW5lIFNDX1NISUZUCTE3CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIF9vbWFwXzMya19zY2hlZF9jbG9jayh2b2lkKQogewogCXUzMiBjeWMgPSBjbG9ja3NvdXJjZV8zMmsucmVhZCgmY2xvY2tzb3VyY2VfMzJrKTsKIAlyZXR1cm4gY3ljX3RvX2ZpeGVkX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wLCBTQ19NVUxULCBTQ19TSElGVCk7CiB9CiAKKyNpZm5kZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF8zMmtfc2NoZWRfY2xvY2soKTsKK30KKyNlbHNlCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBvbWFwXzMya19zY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF8zMmtfc2NoZWRfY2xvY2soKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBub3RyYWNlIG9tYXBfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCiB7CiAJdTMyIGN5YyA9IGNsb2Nrc291cmNlXzMyay5yZWFkKCZjbG9ja3NvdXJjZV8zMmspOwpAQCAtMTYwLDcgKzE3MCw3IEBACiAJKnRzID0gKnRzcDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayh2b2lkKQoraW50IF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKHZvaWQpCiB7CiAJc3RhdGljIGNoYXIgZXJyW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSCiAJCQkiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlIVxuIjsKQEAgLTE5NSw3ICsyMDUsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLWFyY2hfaW5pdGNhbGwob21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayk7Ci0KLSNlbmRpZgkvKiAhKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkpICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBjNGIyYjQ3Li44NTM2MzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC01Myw3ICs1Myw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBPTUFQX0RNQV9BQ1RJVkUJCQkweDAxCi0jZGVmaW5lIE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSwkweGZmZQorI2RlZmluZSBPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0sJMHhmZmZmZmZmZgogCiAjZGVmaW5lIE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UJCSgweGZmZmUxMDAwICsgMHhlYykKIApAQCAtMTg3Myw3ICsxODczLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIG1pc2FsaWduZWQgZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCiAJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKIAotCXAtPmRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUiwgY2gpOworCXAtPmRtYV93cml0ZShzdGF0dXMsIENTUiwgY2gpOwogCXAtPmRtYV93cml0ZSgxIDw8IGNoLCBJUlFTVEFUVVNfTDAsIGNoKTsKIAkvKiByZWFkIGJhY2sgdGhlIHJlZ2lzdGVyIHRvIGZsdXNoIHRoZSB3cml0ZSAqLwogCXAtPmRtYV9yZWFkKElSUVNUQVRVU19MMCwgY2gpOwpAQCAtMTg5MywxMCArMTg5Myw5IEBACiAJCQlPTUFQX0RNQV9DSEFJTl9JTkNRSEVBRChjaGFpbl9pZCk7CiAKIAkJc3RhdHVzID0gcC0+ZG1hX3JlYWQoQ1NSLCBjaCk7CisJCXAtPmRtYV93cml0ZShzdGF0dXMsIENTUiwgY2gpOwogCX0KIAotCXAtPmRtYV93cml0ZShzdGF0dXMsIENTUiwgY2gpOwotCiAJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCiAJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCmluZGV4IDZiODA4OGUuLjI5YjJhZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaApAQCAtMzUsNiArMzUsOSBAQAogCiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOworZXh0ZXJuIGJvb2wgb21hcF8zMmtfdGltZXJfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF8zMmtfc2NoZWRfY2xvY2sodm9pZCk7CiAKIGV4dGVybiB2b2lkIG9tYXBfcmVzZXJ2ZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKaW5kZXggZGViMzk5NS4uNTU3ZjhjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCkBAIC0zNyw2ICszNywxNCBAQAogCWhlbHAKIAkgIENvbW1vbiBjb2RlIGZvciB0aGUgR1BJTyBpbnRlcnJ1cHRzIChvdGhlciB0aGFuIGV4dGVybmFsIGludGVycnVwdHMuKQogCitjb21tZW50ICJTeXN0ZW0gTU1VIgorCitjb25maWcgUzVQX1NZU1RFTV9NTVUKKwlib29sICJTNVAgU1lTVEVNIE1NVSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzVQVjMxMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFN5c3RlbSBNTVUKKwogY29uZmlnIFM1UF9ERVZfRklNQzAKIAlib29sCiAJaGVscApAQCAtNjYsMTkgKzc0LDMgQEAKIAlib29sCiAJaGVscAogCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIE1JUEktQ1NJUyBjaGFubmVsIDEKLQotbWVudWNvbmZpZyBTNVBfU1lTTU1VCi0JYm9vbCAiU1lTTU1VIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX1M1UFYzMTAKLQloZWxwCi0JICBUaGlzIGlzIGEgU3lzdGVtIE1NVSBkcml2ZXIgZm9yIFNhbXN1bmcgQVJNIGJhc2VkIFNvYy4KLQotaWYgUzVQX1NZU01NVQotCi1jb25maWcgUzVQX1NZU01NVV9ERUJVRwotCWJvb2wgIkVuYWJsZXMgZGVidWcgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBTNVBfU1lTTU1VCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIFNZU01NVSBkcml2ZXIgZGVidWcgbWFzc2FnZXMuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCmluZGV4IDkyZWZlMWEuLjRiZDVjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmoteQkJCQkrPSBpcnEubwogb2JqLSQoQ09ORklHX1M1UF9FWFRfSU5UKQkrPSBpcnEtZWludC5vCiBvYmotJChDT05GSUdfUzVQX0dQSU9fSU5UKQkrPSBpcnEtZ3Bpb2ludC5vCitvYmotJChDT05GSUdfUzVQX1NZU1RFTV9NTVUpCSs9IHN5c21tdS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwogCkBAIC0zMCw0ICszMSwzIEBACiBvYmotJChDT05GSUdfUzVQX0RFVl9PTkVOQU5EKQkrPSBkZXYtb25lbmFuZC5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9DU0lTMCkJKz0gZGV2LWNzaXMwLm8KIG9iai0kKENPTkZJR19TNVBfREVWX0NTSVMxKQkrPSBkZXYtY3NpczEubwotb2JqLSQoQ09ORklHX1M1UF9TWVNNTVUpCSs9IHN5c21tdS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMjk4ZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSAqCi0gKiBTYW1zdW5nIHN5c21tdSBkcml2ZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSAotI2RlZmluZSBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSCBfX0ZJTEVfXwotCi0vKiBkZWJ1ZyBtYWNybyAqLwotI2lmZGVmIENPTkZJR19TNVBfU1lTTU1VX0RFQlVHCi0jZGVmaW5lIHN5c21tdV9kZWJ1ZyhmbXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fSU5GTyAiWyVzXSAiIGZtdCwgX19mdW5jX18sICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHN5c21tdV9kZWJ1ZyhmbXQsIGFyZy4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwppbmRleCBkODA0OTE0Li5mZmU4YTQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1zeXNtbXUuaD4KICNpbmNsdWRlIDxtYWNoL3N5c21tdS5oPgogCi0jaW5jbHVkZSA8cGxhdC9zeXNtbXUuaD4KLQogc3RydWN0IHN5c21tdV9jb250cm9sbGVyIHM1cF9zeXNtbXVfY250bHJzW1M1UF9TWVNNTVVfVE9UQUxfSVBOVU1dOwogCiB2b2lkIHM1cF9zeXNtbXVfcmVnaXN0ZXIoc3RydWN0IHN5c21tdV9jb250cm9sbGVyICpzeXNtbXVjb25wKQpAQCAtMTIzLDcgKzEyMSw3IEBACiAJCTogIj1yIiAocGcpIDogOiAiY2MiKTsJCVwKIAkJcGcgJj0gfjB4M2ZmZjsKIAotCXN5c21tdV9kZWJ1ZygiQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIHBnKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIF9fZnVuY19fLCBwZyk7CiAKIAkvKiBTZXQgc3lzbW11IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzICovCiAJX19yYXdfd3JpdGVsKHBnLCBzeXNtbXVjb25wLT5yZWdzICsgUzVQX1BUX0JBU0VfQUREUik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKaW5kZXggZDkwMjVlMy4uMzA1MThjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaApAQCAtMTcsNiArMTcsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKK3N0cnVjdCBzeXNfZGV2aWNlOworCiAjaWZkZWYgQ09ORklHX1BNCiAKIGV4dGVybiBfX2luaXQgaW50IHMzY19wbV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggMmZlYTg5Ny4uOWQ2ZmVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogU3VuIERlYyAxMiAyMzoyNDoyNyAyMDEwCisjIExhc3QgdXBkYXRlOiBNb24gRmViIDcgMDg6NTk6MjcgMjAxMQogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0yMjQwLDcgKzIyNDAsNyBAQAogdnNfdjIxMAkJCU1BQ0hfVlNfVjIxMAkJVlNfVjIxMAkJCTIyNTIKIHZzX3YyMTIJCQlNQUNIX1ZTX1YyMTIJCVZTX1YyMTIJCQkyMjUzCiBobXQJCQlNQUNIX0hNVAkJSE1UCQkJMjI1NAotc3VlbjMJCQlNQUNIX1NVRU4zCQlTVUVOMwkJCTIyNTUKK2ttX2tpcmt3b29kCQlNQUNIX0tNX0tJUktXT09ECUtNX0tJUktXT09ECQkyMjU1CiB2ZXNwZXIJCQlNQUNIX1ZFU1BFUgkJVkVTUEVSCQkJMjI1Ngogc3RyOQkJCU1BQ0hfU1RSOQkJU1RSOQkJCTIyNTcKIG9tYXAzX3dsX2ZmCQlNQUNIX09NQVAzX1dMX0ZGCU9NQVAzX1dMX0ZGCQkyMjU4CkBAIC0yOTg3LDcgKzI5ODcsNyBAQAogZWEyMAkJCU1BQ0hfRUEyMAkJRUEyMAkJCTMwMDIKIGF3bTIJCQlNQUNIX0FXTTIJCUFXTTIJCQkzMDAzCiB0aTgxNDhldm0JCU1BQ0hfVEk4MTQ4RVZNCQlUSTgxNDhFVk0JCTMwMDQKLXRlZ3JhX3NlYWJvYXJkCQlNQUNIX1RFR1JBX1NFQUJPQVJECVRFR1JBX1NFQUJPQVJECQkzMDA1CitzZWFib2FyZAkJTUFDSF9TRUFCT0FSRAkJU0VBQk9BUkQJCTMwMDUKIGxpbmtzdGF0aW9uX2NobHYyCU1BQ0hfTElOS1NUQVRJT05fQ0hMVjIJTElOS1NUQVRJT05fQ0hMVjIJMzAwNgogdGVyYV9wcm8yX3JhY2sJCU1BQ0hfVEVSQV9QUk8yX1JBQ0sJVEVSQV9QUk8yX1JBQ0sJCTMwMDcKIHJ1YnlzCQkJTUFDSF9SVUJZUwkJUlVCWVMJCQkzMDA4CkBAIC0zMTkwLDcgKzMxOTAsNyBAQAogaWNzX2lmX3ZvaXAJCU1BQ0hfSUNTX0lGX1ZPSVAJSUNTX0lGX1ZPSVAJCTMyMDYKIHdsZl9jcmFnZ182NDEwCQlNQUNIX1dMRl9DUkFHR182NDEwCVdMRl9DUkFHR182NDEwCQkzMjA3CiBwdW5pY2EJCQlNQUNIX1BVTklDQQkJUFVOSUNBCQkJMzIwOAotc2JjX250MjUwCQlNQUNIX1NCQ19OVDI1MAkJU0JDX05UMjUwCQkzMjA5Cit0cmltc2xpY2UJCU1BQ0hfVFJJTVNMSUNFCQlUUklNU0xJQ0UJCTMyMDkKIG14Mjdfd211bHRyYQkJTUFDSF9NWDI3X1dNVUxUUkEJTVgyN19XTVVMVFJBCQkzMjEwCiBtYWNrZXJlbAkJTUFDSF9NQUNLRVJFTAkJTUFDS0VSRUwJCTMyMTEKIGZhOXgyNwkJCU1BQ0hfRkE5WDI3CQlGQTlYMjcJCQkzMjEzCkBAIC0zMjE5LDMgKzMyMTksMTAwIEBACiBwY20wNDgJCQlNQUNIX1BDTTA0OAkJUENNMDQ4CQkJMzIzNgogZGRzCQkJTUFDSF9ERFMJCUREUwkJCTMyMzcKIGNoYWx0ZW5feGExCQlNQUNIX0NIQUxURU5fWEExCUNIQUxURU5fWEExCQkzMjM4Cit0czQ4eHgJCQlNQUNIX1RTNDhYWAkJVFM0OFhYCQkJMzIzOQordG9uZ2EyX3RmdHRpbWVyCQlNQUNIX1RPTkdBMl9URlRUSU1FUglUT05HQTJfVEZUVElNRVIJCTMyNDAKK3doaXN0bGVyCQlNQUNIX1dISVNUTEVSCQlXSElTVExFUgkJMzI0MQorYXNsX3Bob2VuaXgJCU1BQ0hfQVNMX1BIT0VOSVgJQVNMX1BIT0VOSVgJCTMyNDIKK2F0OTFzYW05MjYzb3RsaXRlCU1BQ0hfQVQ5MVNBTTkyNjNPVExJVEUJQVQ5MVNBTTkyNjNPVExJVEUJMzI0MworZGRwbHVnCQkJTUFDSF9ERFBMVUcJCUREUExVRwkJCTMyNDQKK2QycGx1ZwkJCU1BQ0hfRDJQTFVHCQlEMlBMVUcJCQkzMjQ1Citrem05ZAkJCU1BQ0hfS1pNOUQJCUtaTTlECQkJMzI0NgordmVyZGlfbHRlCQlNQUNIX1ZFUkRJX0xURQkJVkVSRElfTFRFCQkzMjQ3CituYW5vem9vbQkJTUFDSF9OQU5PWk9PTQkJTkFOT1pPT00JCTMyNDgKK2RtMzczMF9zb21fbHYJCU1BQ0hfRE0zNzMwX1NPTV9MVglETTM3MzBfU09NX0xWCQkzMjQ5CitkbTM3MzBfdG9ycGVkbwkJTUFDSF9ETTM3MzBfVE9SUEVETwlETTM3MzBfVE9SUEVETwkJMzI1MAorYW5jaG92eQkJCU1BQ0hfQU5DSE9WWQkJQU5DSE9WWQkJCTMyNTEKK3JlMnJldjIwCQlNQUNIX1JFMlJFVjIwCQlSRTJSRVYyMAkJMzI1MworcmUycmV2MjEJCU1BQ0hfUkUyUkVWMjEJCVJFMlJFVjIxCQkzMjU0CitjbnMyMXh4CQkJTUFDSF9DTlMyMVhYCQlDTlMyMVhYCQkJMzI1NQorcmlkZXIJCQlNQUNIX1JJREVSCQlSSURFUgkJCTMyNTcKK25zazMzMAkJCU1BQ0hfTlNLMzMwCQlOU0szMzAJCQkzMjU4CitjbnMyMTMzZXZiCQlNQUNIX0NOUzIxMzNFVkIJCUNOUzIxMzNFVkIJCTMyNTkKK3ozXzgxNnhfbW9kCQlNQUNIX1ozXzgxNlhfTU9ECVozXzgxNlhfTU9ECQkzMjYwCit6M184MTR4X21vZAkJTUFDSF9aM184MTRYX01PRAlaM184MTRYX01PRAkJMzI2MQorYmVlY3QJCQlNQUNIX0JFRUNUCQlCRUVDVAkJCTMyNjIKK2RtYV90aHVuZGVyYnVnCQlNQUNIX0RNQV9USFVOREVSQlVHCURNQV9USFVOREVSQlVHCQkzMjYzCitvbW5fYXQ5MXNhbTlnMjAJCU1BQ0hfT01OX0FUOTFTQU05RzIwCU9NTl9BVDkxU0FNOUcyMAkJMzI2NAorbXgyNV9lMnNfdWMJCU1BQ0hfTVgyNV9FMlNfVUMJTVgyNV9FMlNfVUMJCTMyNjUKK21pb25lCQkJTUFDSF9NSU9ORQkJTUlPTkUJCQkzMjY2Cit0b3A5MDAwX3RjdQkJTUFDSF9UT1A5MDAwX1RDVQlUT1A5MDAwX1RDVQkJMzI2NwordG9wOTAwMF9ic2wJCU1BQ0hfVE9QOTAwMF9CU0wJVE9QOTAwMF9CU0wJCTMyNjgKK2tpbmdkb20JCQlNQUNIX0tJTkdET00JCUtJTkdET00JCQkzMjY5Cithcm1hZGlsbG80NjAJCU1BQ0hfQVJNQURJTExPNDYwCUFSTUFESUxMTzQ2MAkJMzI3MAorbHEyCQkJTUFDSF9MUTIJCUxRMgkJCTMyNzEKK3N3ZWRhX3RtczIJCU1BQ0hfU1dFREFfVE1TMgkJU1dFREFfVE1TMgkJMzI3MgorbXg1M19sb2NvCQlNQUNIX01YNTNfTE9DTwkJTVg1M19MT0NPCQkzMjczCithY2VyX2E4CQkJTUFDSF9BQ0VSX0E4CQlBQ0VSX0E4CQkJMzI3NQorYWNlcl9nYXVndWluCQlNQUNIX0FDRVJfR0FVR1VJTglBQ0VSX0dBVUdVSU4JCTMyNzYKK2d1cHB5CQkJTUFDSF9HVVBQWQkJR1VQUFkJCQkzMjc3CitteDYxX2FyZAkJTUFDSF9NWDYxX0FSRAkJTVg2MV9BUkQJCTMyNzgKK3R4NTMJCQlNQUNIX1RYNTMJCVRYNTMJCQkzMjc5CitvbWFwbDEzOF9jYXNlX2EzCU1BQ0hfT01BUEwxMzhfQ0FTRV9BMwlPTUFQTDEzOF9DQVNFX0EzCTMyODAKK3VlbWQJCQlNQUNIX1VFTUQJCVVFTUQJCQkzMjgxCitjY3dteDUxbXV0CQlNQUNIX0NDV01YNTFNVVQJCUNDV01YNTFNVVQJCTMyODIKK3JvY2tob3BwZXIJCU1BQ0hfUk9DS0hPUFBFUgkJUk9DS0hPUFBFUgkJMzI4Mworbm9va2NvbG9yCQlNQUNIX05PT0tDT0xPUgkJTk9PS0NPTE9SCQkzMjg0Citoa2RrYzEwMAkJTUFDSF9IS0RLQzEwMAkJSEtES0MxMDAJCTMyODUKK3RzNDJ4eAkJCU1BQ0hfVFM0MlhYCQlUUzQyWFgJCQkzMjg2CithZWJsCQkJTUFDSF9BRUJMCQlBRUJMCQkJMzI4Nword2FyaW8JCQlNQUNIX1dBUklPCQlXQVJJTwkJCTMyODgKK2dmc19zcG0JCQlNQUNIX0dGU19TUE0JCUdGU19TUE0JCQkzMjg5CitjbV90MzczMAkJTUFDSF9DTV9UMzczMAkJQ01fVDM3MzAJCTMyOTAKK2lzYzMJCQlNQUNIX0lTQzMJCUlTQzMJCQkzMjkxCityYXNjYWwJCQlNQUNIX1JBU0NBTAkJUkFTQ0FMCQkJMzI5MgoraHJlZnY2MAkJCU1BQ0hfSFJFRlY2MAkJSFJFRlY2MAkJCTMyOTMKK3RwdF8yXzAJCQlNQUNIX1RQVF8yXzAJCVRQVF8yXzAJCQkzMjk0CitweXJhbWlkX3RkCQlNQUNIX1BZUkFNSURfVEQJCVBZUkFNSURfVEQJCTMyOTUKK3NwbGVuZG9yCQlNQUNIX1NQTEVORE9SCQlTUExFTkRPUgkJMzI5NgorZ3VmX3BsYW5ldAkJTUFDSF9HVUZfUExBTkVUCQlHVUZfUExBTkVUCQkzMjk3Cittc204eDYwX3F0CQlNQUNIX01TTThYNjBfUVQJCU1TTThYNjBfUVQJCTMyOTgKK2h0Y19oZF9taW5pCQlNQUNIX0hUQ19IRF9NSU5JCUhUQ19IRF9NSU5JCQkzMjk5CithdGhlbmUJCQlNQUNIX0FUSEVORQkJQVRIRU5FCQkJMzMwMAorZGVlcF9yX2VrXzEJCU1BQ0hfREVFUF9SX0VLXzEJREVFUF9SX0VLXzEJCTMzMDEKK3Zpdm93X2N0CQlNQUNIX1ZJVk9XX0NUCQlWSVZPV19DVAkJMzMwMgorbmVyeV8xMDAwCQlNQUNIX05FUllfMTAwMAkJTkVSWV8xMDAwCQkzMzAzCityZmwxMDkxNDVfc3NydgkJTUFDSF9SRkwxMDkxNDVfU1NSVglSRkwxMDkxNDVfU1NSVgkJMzMwNAorbm1oCQkJTUFDSF9OTUgJCU5NSAkJCTMzMDUKK3duODAydAkJCU1BQ0hfV044MDJUCQlXTjgwMlQJCQkzMzA2CitkcmFnb25ldAkJTUFDSF9EUkFHT05FVAkJRFJBR09ORVQJCTMzMDcKK2dlbmV2YV9iCQlNQUNIX0dFTkVWQV9CCQlHRU5FVkFfQgkJMzMwOAorYXQ5MXNhbTkyNjNkZXNrMTZsCU1BQ0hfQVQ5MVNBTTkyNjNERVNLMTZMCUFUOTFTQU05MjYzREVTSzE2TAkzMzA5CitiY21oYW5hX3N2CQlNQUNIX0JDTUhBTkFfU1YJCUJDTUhBTkFfU1YJCTMzMTAKK2JjbWhhbmFfdGFibGV0CQlNQUNIX0JDTUhBTkFfVEFCTEVUCUJDTUhBTkFfVEFCTEVUCQkzMzExCitrb2kJCQlNQUNIX0tPSQkJS09JCQkJMzMxMgordHM0ODAwCQkJTUFDSF9UUzQ4MDAJCVRTNDgwMAkJCTMzMTMKK3RxbWE5MjYzCQlNQUNIX1RRTUE5MjYzCQlUUU1BOTI2MwkJMzMxNAoraG9saWRheQkJCU1BQ0hfSE9MSURBWQkJSE9MSURBWQkJCTMzMTUKK2RtYV82NDEwCQlNQUNIX0RNQTY0MTAJCURNQTY0MTAJCQkzMzE2CitwY2F0c19vdmVybGF5CQlNQUNIX1BDQVRTX09WRVJMQVkJUENBVFNfT1ZFUkxBWQkJMzMxNworaHdndzY0MTAJCU1BQ0hfSFdHVzY0MTAJCUhXR1c2NDEwCQkzMzE4CitzaGVuemhvdQkJTUFDSF9TSEVOWkhPVQkJU0hFTlpIT1UJCTMzMTkKK2N3bWU5MjEwCQlNQUNIX0NXTUU5MjEwCQlDV01FOTIxMAkJMzMyMAorY3dtZTkyMTBqcwkJTUFDSF9DV01FOTIxMEpTCQlDV01FOTIxMEpTCQkzMzIxCitwZ3NfdjEJCQlNQUNIX1BHU19TSVRBUkEJCVBHU19TSVRBUkEJCTMzMjIKK2NvbGlicmlfdGVncmEyCQlNQUNIX0NPTElCUklfVEVHUkEyCUNPTElCUklfVEVHUkEyCQkzMzIzCit3MjEJCQlNQUNIX1cyMQkJVzIxCQkJMzMyNAorcG9seXNhdDEJCU1BQ0hfUE9MWVNBVDEJCVBPTFlTQVQxCQkzMzI1CitkYXRhd2F5CQkJTUFDSF9EQVRBV0FZCQlEQVRBV0FZCQkJMzMyNgorY29icmFsMTM4CQlNQUNIX0NPQlJBTDEzOAkJQ09CUkFMMTM4CQkzMzI3Cityb3ZlcnBjczgJCU1BQ0hfUk9WRVJQQ1M4CQlST1ZFUlBDUzgJCTMzMjgKK21hcnZlbGMJCQlNQUNIX01BUlZFTEMJCU1BUlZFTEMJCQkzMzI5CituYXZlZmloaWQJCU1BQ0hfTkFWRUZJSElECQlOQVZFRklISUQJCTMzMzAKK2RtMzY1X2N2MTAwCQlNQUNIX0RNMzY1X0NWMTAwCURNMzY1X0NWMTAwCQkzMzMxCithYmxlCQkJTUFDSF9BQkxFCQlBQkxFCQkJMzMzMgorbGVnYWN5CQkJTUFDSF9MRUdBQ1kJCUxFR0FDWQkJCTMzMzMKK2ljb25nCQkJTUFDSF9JQ09ORwkJSUNPTkcJCQkzMzM0Cityb3Zlcl9nOAkJTUFDSF9ST1ZFUl9HOAkJUk9WRVJfRzgJCTMzMzUKK3Q1Mzg4cAkJCU1BQ0hfVDUzODhQCQlUNTM4OFAJCQkzMzM2CitkaW5nbwkJCU1BQ0hfRElOR08JCURJTkdPCQkJMzMzNworZ29mbGV4aG9tZQkJTUFDSF9HT0ZMRVhIT01FCQlHT0ZMRVhIT01FCQkzMzM4CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDkyZWNkODQuLmJjN2U4YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC04LDYgKzgsNyBAQAogI2lmbmRlZiBfX0FTTV9BVlIzMl9QR0FMTE9DX0gKICNkZWZpbmUgX19BU01fQVZSMzJfUEdBTExPQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZXJpYWwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZXJpYWwuaAppbmRleCAxZmY5ZjE0Li43ZGJjNjY0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIF9fQkZJTl9BU01fU0VSSUFMX0hfXwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPG1hY2gvYW5vbWFseS5oPgogI2luY2x1ZGUgPG1hY2gvYmZpbl9zZXJpYWwuaD4KIApAQCAtNDEsNiArNDIsNyBAQAogCXN0cnVjdCBjaXJjX2J1ZiByeF9kbWFfYnVmOwogCXN0cnVjdCB0aW1lcl9saXN0IHJ4X2RtYV90aW1lcjsKIAlpbnQgcnhfZG1hX25yb3dzOworCXNwaW5sb2NrX3QgcnhfbG9jazsKIAl1bnNpZ25lZCBpbnQgdHhfZG1hX2NoYW5uZWw7CiAJdW5zaWduZWQgaW50IHJ4X2RtYV9jaGFubmVsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF9kbWFfd29ya3F1ZXVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggZjc0NWMxMi4uNzZlYWYzOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC04MCw3ICs4MCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIAkvKiBGSVhNRSBNMzJSICovCiAjZW5kaWYKLQlfX2RvX0lSUShpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IGIxNTc3ZjcuLjgyYTRiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTYxMCwxNyArNjEwLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFtaWdhX3NhdmVrbXNnX3NldHVwKGNoYXIgKmFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGRlYnVnX3JlcyA9IHsgLm5hbWUgPSAiRGVidWciIH07Ci0KIAlpZiAoIU1BQ0hfSVNfQU1JR0EgfHwgc3RyY21wKGFyZywgIm1lbSIpKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiAwOwogCi0JaWYgKCFBTUlHQUhXX1BSRVNFTlQoQ0hJUF9SQU0pKSB7Ci0JCXByaW50aygiV2FybmluZzogbm8gY2hpcHJhbSBwcmVzZW50IGZvciBkZWJ1Z2dpbmdcbiIpOwotCQlnb3RvIGRvbmU7CisJaWYgKGFtaWdhX2NoaXBfc2l6ZSA8IFNBVkVLTVNHX01BWE1FTSkgeworCQlwcl9lcnIoIk5vdCBlbm91Z2ggY2hpcHJhbSBmb3IgZGVidWdnaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2F2ZWttc2cgPSBhbWlnYV9jaGlwX2FsbG9jX3JlcyhTQVZFS01TR19NQVhNRU0sICZkZWJ1Z19yZXMpOworCS8qIEp1c3Qgc3RlYWwgdGhlIGJsb2NrLCB0aGUgY2hpcHJhbSBhbGxvY2F0b3IgaXNuJ3QgZnVuY3Rpb25hbCB5ZXQgKi8KKwlhbWlnYV9jaGlwX3NpemUgLT0gU0FWRUtNU0dfTUFYTUVNOworCXNhdmVrbXNnID0gKHZvaWQgKilaVFdPX1ZBRERSKENISVBfUEhZU0FERFIgKyBhbWlnYV9jaGlwX3NpemUpOwogCXNhdmVrbXNnLT5tYWdpYzEgPSBTQVZFS01TR19NQUdJQzE7CiAJc2F2ZWttc2ctPm1hZ2ljMiA9IFNBVkVLTVNHX01BR0lDMjsKIAlzYXZla21zZy0+bWFnaWNwdHIgPSBaVFdPX1BBRERSKHNhdmVrbXNnKTsKQEAgLTYyOCw4ICs2MjgsNiBAQAogCiAJYW1pZ2FfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhbWlnYV9tZW1fY29uc29sZV93cml0ZTsKIAlyZWdpc3Rlcl9jb25zb2xlKCZhbWlnYV9jb25zb2xlX2RyaXZlcik7Ci0KLWRvbmU6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMgYi9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCmluZGV4IDM5NDc4ZGQuLjI2YTgwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwpAQCAtMzg4LDkgKzM4OCw5IEBACiAJfQogCiAJaWYgKEFUQVJJSFdfUFJFU0VOVChTQ0MpICYmICFhdGFyaV9TQ0NfcmVzZXRfZG9uZSkgewotCQlzY2MuY2hhX2FfY3RybCA9IDk7CisJCWF0YXJpX3NjYy5jaGFfYV9jdHJsID0gOTsKIAkJTUZQREVMQVkoKTsKLQkJc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KKwkJYXRhcmlfc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KIAl9CiAKIAlpZiAoQVRBUklIV19QUkVTRU5UKFNDVSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCBhZTJkOTZlLi40MjAzZDEwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJQVRBUklIV19TRVQoU0NDX0RNQSk7CiAJCXByaW50aygiU0NDX0RNQSAiKTsKIAl9Ci0JaWYgKHNjY190ZXN0KCZzY2MuY2hhX2FfY3RybCkpIHsKKwlpZiAoc2NjX3Rlc3QoJmF0YXJpX3NjYy5jaGFfYV9jdHJsKSkgewogCQlBVEFSSUhXX1NFVChTQ0MpOwogCQlwcmludGsoIlNDQyAiKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCmluZGV4IDI4ZWZkYzMuLjVhNDg0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCkBAIC01Myw5ICs1Myw5IEBACiB7CiAJZG8gewogCQlNRlBERUxBWSgpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwogCU1GUERFTEFZKCk7Ci0Jc2NjLmNoYV9iX2RhdGEgPSBjOworCWF0YXJpX3NjYy5jaGFfYl9kYXRhID0gYzsKIH0KIAogc3RhdGljIHZvaWQgYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCkBAIC0xNDAsOSArMTQwLDkgQEAKIHsKIAlkbyB7CiAJCU1GUERFTEFZKCk7Ci0JfSB3aGlsZSAoIShzY2MuY2hhX2JfY3RybCAmIDB4MDEpKTsgLyogd2FpdCBmb3IgcnggYnVmIGZpbGxlZCAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDAxKSk7IC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KIAlNRlBERUxBWSgpOwotCXJldHVybiBzY2MuY2hhX2JfZGF0YTsKKwlyZXR1cm4gYXRhcmlfc2NjLmNoYV9iX2RhdGE7CiB9CiAKIGludCBhdGFyaV9taWRpX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQpAQCAtMTg1LDkgKzE4NSw5IEBACiAKICNkZWZpbmUgU0NDX1dSSVRFKHJlZywgdmFsKQkJCQlcCiAJZG8gewkJCQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlyZWczID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4YzAgOiAweDQwOwogCXJlZzUgPSAoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4ID8gMHg2MCA6IDB4MjAgfCAweDgyIC8qIGFzc2VydCBEVFIvUlRTICovOwogCi0JKHZvaWQpc2NjLmNoYV9iX2N0cmw7CQkvKiByZXNldCByZWcgcG9pbnRlciAqLworCSh2b2lkKWF0YXJpX3NjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwogCVNDQ19XUklURSg5LCAweGMwKTsJCS8qIHJlc2V0ICovCiAJTE9OR19ERUxBWSgpOwkJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KIAlTQ0NfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaAppbmRleCBhNzE0ZTFhLi5mNTFmNzA5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKQEAgLTQ0OSw3ICs0NDksNyBAQAogICB1X2NoYXIgY2hhcl9kdW1teTM7CiAgIHVfY2hhciBjaGFfYl9kYXRhOwogIH07Ci0jIGRlZmluZSBzY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKVNDQ19CQVMpKQorIyBkZWZpbmUgYXRhcmlfc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKIAogLyogVGhlIEVTQ0MgKFo4NTIzMCkgaW4gYW4gQXRhcmkgU1QuIFRoZSBjaGFubmVscyBhcmUgcmV2ZXJzZWQhICovCiAjIGRlZmluZSBzdF9lc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKikweGZmZmZmYTMxKSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCAyOTM2ZGRhLi42NWIxMzEyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC04MSwxOCArODEsNiBAQAogCXN0cmNweShfX2QgKyBzdHJsZW4oX19kKSwgKHMpKTsJCVwKIH0pCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCi1zdGF0aWMgaW5saW5lIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYykKLXsKLQljaGFyIHNjLCBjaCA9IGM7Ci0KLQlmb3IgKDsgKHNjID0gKnMrKykgIT0gY2g7ICkgewotCQlpZiAoIXNjKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAoY2hhciAqKXMgLSAxOwotfQotCiAjaWZuZGVmIENPTkZJR19DT0xERklSRQogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKIHN0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmluZGV4IDVmZDMxOTAuLmM0NTMyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CiAKLSNpZmRlZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKKyNpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfbG9jYWxfaXJxX3NhdmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGIyM2Y2ODAuLjg4NTU3NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDExLDIwICs0MTEsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdXBkYXRlKHB0ZV90ICpwLCB1bnNpZ25lZCBsb25nIGNsciwKIAkJCQl1bnNpZ25lZCBsb25nIHNldCkKIHsKLQl1bnNpZ25lZCBsb25nIG9sZCwgdG1wLCBtc3I7CisJdW5zaWduZWQgbG9uZyBmbGFncywgb2xkLCB0bXA7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAotCW1zcmNscgklMiwgMHgyXG5cCi0Jbm9wXG5cCi0JbHcJJTAsICU0LCByMFxuXAotCWFuZG4JJTEsICUwLCAlNVxuXAotCW9yCSUxLCAlMSwgJTZcblwKLQlzdwklMSwgJTQsIHIwXG5cCi0JbXRzICAgICBybXNyLCAlMlxuXAotCW5vcCIKLQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj0mciIgKG1zciksICI9bSIgKCpwKQotCTogInIiICgodW5zaWduZWQgbG9uZykocCArIDEpIC0gNCksICJyIiAoY2xyKSwgInIiIChzZXQpLCAibSIgKCpwKQotCTogImNjIik7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAkibHcJJTAsICUyLCByMAlcbiIKKwkJCQkiYW5kbgklMSwgJTAsICUzCVxuIgorCQkJCSJvcgklMSwgJTEsICU0CVxuIgorCQkJCSJzdwklMSwgJTIsIHIwCVxuIgorCQkJOiAiPSZyIiAob2xkKSwgIj0mciIgKHRtcCkKKwkJCTogInIiICgodW5zaWduZWQgbG9uZykocCArIDEpIC0gNCksICJyIiAoY2xyKSwgInIiIChzZXQpCisJCQk6ICJjYyIpOworCisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiBvbGQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9wdnIuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jCmluZGV4IGUwMWFmYTYuLjQ4OGMxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jCkBAIC0yNyw3ICsyNyw3IEBACiAJcmVnaXN0ZXIgdW5zaWduZWQgdG1wIF9fYXNtX18oInIzIik7CQkJXAogCXRtcCA9IDB4MDsJLyogUHJldmVudCB3YXJuaW5nIGFib3V0IHVudXNlZCAqLwlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJXAotCQkJIm1mcwklMCwgcnB2ciIgI3B2cmlkICI7IglcCisJCQkibWZzCSUwLCBycHZyIiAjcHZyaWQgIjsiCQlcCiAJCQk6ICI9ciIgKHRtcCkgOiA6ICJtZW1vcnkiKTsgCQlcCiAJdmFsID0gdG1wOwkJCQkJCVwKIH0KQEAgLTU0LDcgKzU0LDcgQEAKIAlpZiAoIShmbGFncyAmIFBWUl9NU1JfQklUKSkKIAkJcmV0dXJuIDA7CiAKLQlnZXRfc2luZ2xlX3B2cigweDAwLCBwdnIwKTsKKwlnZXRfc2luZ2xlX3B2cigwLCBwdnIwKTsKIAlwcl9kZWJ1ZygiJXM6IHB2cjAgaXMgMHglMDh4XG4iLCBfX2Z1bmNfXywgcHZyMCk7CiAKIAlpZiAocHZyMCAmIFBWUjBfUFZSX0ZVTExfTUFTSykKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMKaW5kZXggNDI0MzQwMC4uNzc4YTVjZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMKQEAgLTYyLDIzICs2MiwzMiBAQAogCWFuZGkJcjEsIHIxLCB+MgogCW10cwlybXNyLCByMQogLyoKLSAqIEhlcmUgaXMgY2hlY2tpbmcgbWVjaGFuaXNtIHdoaWNoIGNoZWNrIGlmIE1pY3JvYmxhemUgaGFzIG1zciBpbnN0cnVjdGlvbnMKLSAqIFdlIGxvYWQgbXNyIGFuZCBjb21wYXJlIGl0IHdpdGggcHJldmlvdXMgcjEgdmFsdWUgLSBpZiBpcyB0aGUgc2FtZSwKLSAqIG1zciBpbnN0cnVjdGlvbnMgd29ya3MgaWYgbm90IC0gY3B1IGRvbid0IGhhdmUgdGhlbS4KKyAqIEFjY29yZGluZyB0byBYaWxpbngsIG1zcmNsciBpbnN0cnVjdGlvbiBiZWhhdmVzIGxpa2UgJ21mcyByWCxycGMnCisgKiBpZiB0aGUgbXNyY2xyIGluc3RydWN0aW9uIGlzIG5vdCBlbmFibGVkLiBXZSB1c2UgdGhpcyB0byBkZXRlY3QKKyAqIGlmIHRoZSBvcGNvZGUgaXMgYXZhaWxhYmxlLCBieSBpc3N1aW5nIG1zcmNsciBhbmQgdGhlbiB0ZXN0aW5nIHRoZSByZXN1bHQuCisgKiByOCA9PSAwIC0gbXNyIGluc3RydWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQKKyAqIHI4ICE9IDAgLSBtc3IgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQKICAqLwotCS8qIHI4PTAgLSBJIGhhdmUgbXNyIGluc3RyLCAxIC0gSSBkb24ndCBoYXZlIHRoZW0gKi8KLQlyc3ViaQlyMCwgcjAsIDEJLyogc2V0IHRoZSBjYXJyeSBiaXQgKi8KLQltc3JjbHIJcjAsIDB4NAkJLyogdHJ5IHRvIGNsZWFyIGl0ICovCi0JLyogcmVhZCB0aGUgY2FycnkgYml0LCByOCB3aWxsIGJlICcwJyBpZiBtc3JjbHIgZXhpc3RzICovCi0JYWRkaWsJcjgsIHIwLCAwCisJbXNyY2xyCXI4LCAwIC8qIGNsZWFyIG5vdGhpbmcgLSBqdXN0IHJlYWQgbXNyIGZvciB0ZXN0ICovCisJY21wdQlyOCwgcjgsIHIxIC8qIHIxIG11c3QgY29udGFpbiBtc3IgcmVnIGNvbnRlbnQgKi8KIAogLyogcjcgbWF5IHBvaW50IHRvIGFuIEZEVCwgb3IgdGhlcmUgbWF5IGJlIG9uZSBsaW5rZWQgaW4uCiAgICBpZiBpdCdzIGluIHI3LCB3ZSd2ZSBnb3QgdG8gc2F2ZSBpdCBhd2F5IEFTQVAuCiAgICBXZSBlbnN1cmUgcjcgcG9pbnRzIHRvIGEgdmFsaWQgRkRULCBqdXN0IGluIGNhc2UgdGhlIGJvb3Rsb2FkZXIKICAgIGlzIGJyb2tlbiBvciBub24tZXhpc3RlbnQgKi8KIAliZXFpCXI3LCBub19mZHRfYXJnCQkJLyogTlVMTCBwb2ludGVyPyAgZG9uJ3QgY29weSAqLwotCWx3CXIxMSwgcjAsIHI3CQkJLyogRG9lcyByNyBwb2ludCB0byBhICovCi0JcnN1YmkJcjExLCByMTEsIE9GX0RUX0hFQURFUgkJLyogdmFsaWQgRkRUPyAqLworLyogRG9lcyByNyBwb2ludCB0byBhIHZhbGlkIEZEVD8gTG9hZCBIRUFERVIgbWFnaWMgbnVtYmVyICovCisJLyogUnVuIHRpbWUgQmlnL0xpdHRsZSBlbmRpYW4gcGxhdGZvcm0gKi8KKwkvKiBTYXZlIDEgYXMgd29yZCBhbmQgbG9hZCBieXRlIC0gMCAtIEJJRywgMSAtIExJVFRMRSAqLworCWFkZGlrCXIxMSwgcjAsIDB4MSAvKiBCSUcvTElUVExFIGNoZWNraW5nIHZhbHVlICovCisJLyogX19ic3Nfc3RhcnQgd2lsbCBiZSB6ZXJvZWQgbGF0ZXIgLSBpdCBpcyBqdXN0IHRlbXAgbG9jYXRpb24gKi8KKwlzd2kJcjExLCByMCwgVE9QSFlTKF9fYnNzX3N0YXJ0KQorCWxidWkJcjExLCByMCwgVE9QSFlTKF9fYnNzX3N0YXJ0KQorCWJlcWlkCXIxMSwgYmlnX2VuZGlhbiAvKiBETyBOT1QgYnJlYWsgZGVsYXkgc3RvcCBkZXBlbmRlbmN5ICovCisJbHcJcjExLCByMCwgcjcgLyogQmlnIGVuZGlhbiBsb2FkIGluIGRlbGF5IHNsb3QgKi8KKwlsd3IJcjExLCByMCwgcjcgLyogTGl0dGxlIGVuZGlhbiBsb2FkICovCitiaWdfZW5kaWFuOgorCXJzdWJpCXIxMSwgcjExLCBPRl9EVF9IRUFERVIJLyogQ2hlY2sgRkRUIGhlYWRlciAqLwogCWJlcWkJcjExLCBfcHJlcGFyZV9jb3B5X2ZkdAogCW9yCXI3LCByMCwgcjAJCS8qIGNsZWFyIFI3IHdoZW4gbm90IHZhbGlkIERUQiAqLwogCWJuZWkJcjExLCBub19mZHRfYXJnCQkJLyogTm8gLSBnZXQgb3V0IG9mIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwppbmRleCAyNWY2ZTA3Li43ODI2ODBkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCkBAIC0xNDcsMTAgKzE0Nyw2IEBACiAJI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX0JBUlJFTCA+IDAKIAkjZGVmaW5lIEJTUkxJKHJELCByQSwgaW1tKQlcCiAJCWJzcmxpIHJELCByQSwgaW1tCi0JI2VsaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfRElWID4gMAotCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pCVwKLQkJb3JpIHJELCByMCwgKDEgPDwgaW1tKTsJXAotCQlpZGl2dSByRCwgckQsIHJBCiAJI2Vsc2UKIAkjZGVmaW5lIEJTUkxJKHJELCByQSwgaW1tKSBCU1JMSSAjIyBpbW0gKHJELCByQSkKIAkvKiBPbmx5IHRoZSB1c2VkIHNoaWZ0IGNvbnN0YW50cyBkZWZpbmVkIGhlcmUgLSBhZGQgbW9yZSBpZiBuZWVkZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYwppbmRleCBiYjE1NThlLi45MzEyZmJiIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCkBAIC0xNjEsMTEgKzE2MSwxMSBAQAogI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgogCWlmIChtc3IpCiAJCWVwcmludGsoIiEhIVlvdXIga2VybmVsIGhhcyBzZXR1cCBNU1IgaW5zdHJ1Y3Rpb24gYnV0ICIKLQkJCQkiQ1BVIGRvbid0IGhhdmUgaXQgJWRcbiIsIG1zcik7CisJCQkJIkNQVSBkb24ndCBoYXZlIGl0ICV4XG4iLCBtc3IpOwogI2Vsc2UKIAlpZiAoIW1zcikKIAkJZXByaW50aygiISEhWW91ciBrZXJuZWwgbm90IHNldHVwIE1TUiBpbnN0cnVjdGlvbiBidXQgIgotCQkJCSJDUFUgaGF2ZSBpdCAlZFxuIiwgbXNyKTsKKwkJCQkiQ1BVIGhhdmUgaXQgJXhcbiIsIG1zcik7CiAjZW5kaWYKIAogCWZvciAoc3JjID0gX19pdnRfc3RhcnQ7IHNyYyA8IF9faXZ0X2VuZDsgc3JjKyssIGRzdCsrKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TIGIvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TCmluZGV4IGZkYzQ4YmIuLjYyMDIxZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9saWIvZmFzdGNvcHkuUworKysgYi9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMKQEAgLTI5LDYgKzI5LDEwIEBACiAgKgliZXR3ZWVuIG1lbSBsb2NhdGlvbnMgd2l0aCBzaXplIG9mIHhmZXIgc3BlYydkIGluIGJ5dGVzCiAgKi8KIAorI2lmZGVmIF9fTUlDUk9CTEFaRUVMX18KKyNlcnJvciBNaWNyb2JsYXplIExFIG5vdCBzdXBwb3J0IEFTTSBvcHRpbWl6ZWQgbGliIGZ1bmMuIERpc2FibGUgT1BUX0xJQl9BU00uCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAkudGV4dAogCS5nbG9ibAltZW1jcHkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKaW5kZXggMTFiZGQ2OC4uZmM3NzBiZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKQEAgLTE2OSwxMSArMTY5LDExIEBACiAKIAlzdHJ1Y3QgY29uc29sZSAqdG1wOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZvcl9lYWNoX2NvbnNvbGUodG1wKQogCQlpZiAodG1wID09ICZwZGNfY29ucykKIAkJCWJyZWFrOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKCF0bXApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUERDIGNvbnNvbGUgZHJpdmVyIG5vdCByZWdpc3RlcmVkIGFueW1vcmUsIG5vdCBjcmVhdGluZyAlc1xuIiwgcGRjX2NvbnMubmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAppbmRleCA4ZWFlZDgxLi4xNzE5NGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTQwLDggKzQwLDggQEAKIAogLyogTUFTIHJlZ2lzdGVycyBiaXQgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkJKCh4IDw8IDI4KSAmIDB4MzAwMDAwMDApCi0jZGVmaW5lIE1BUzBfRVNFTCh4KQkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIE1BUzBfVExCU0VMKHgpCQkoKCh4KSA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoKHgpIDw8IDE2KSAmIDB4MEZGRjAwMDApCiAjZGVmaW5lIE1BUzBfTlYoeCkJCSgoeCkgJiAweDAwMDAwRkZGKQogI2RlZmluZSBNQVMwX0hFUwkJMHgwMDAwNDAwMAogI2RlZmluZSBNQVMwX1dRX0FMTFdBWVMJCTB4MDAwMDAwMDAKQEAgLTUwLDEyICs1MCwxMiBAQAogCiAjZGVmaW5lIE1BUzFfVkFMSUQJCTB4ODAwMDAwMDAKICNkZWZpbmUgTUFTMV9JUFJPVAkJMHg0MDAwMDAwMAotI2RlZmluZSBNQVMxX1RJRCh4KQkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCisjZGVmaW5lIE1BUzFfVElEKHgpCQkoKCh4KSA8PCAxNikgJiAweDNGRkYwMDAwKQogI2RlZmluZSBNQVMxX0lORAkJMHgwMDAwMjAwMAogI2RlZmluZSBNQVMxX1RTCQkJMHgwMDAwMTAwMAogI2RlZmluZSBNQVMxX1RTSVpFX01BU0sJCTB4MDAwMDBmODAKICNkZWZpbmUgTUFTMV9UU0laRV9TSElGVAk3Ci0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJCSgoeCA8PCBNQVMxX1RTSVpFX1NISUZUKSAmIE1BUzFfVFNJWkVfTUFTSykKKyNkZWZpbmUgTUFTMV9UU0laRSh4KQkJKCgoeCkgPDwgTUFTMV9UU0laRV9TSElGVCkgJiBNQVMxX1RTSVpFX01BU0spCiAKICNkZWZpbmUgTUFTMl9FUE4JCTB4RkZGRkYwMDAKICNkZWZpbmUgTUFTMl9YMAkJCTB4MDAwMDAwNDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDUzYjY0YmUuLmRhNGIyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCShNRU1PUllfU1RBUlQgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKHBmbikgPCAoQVJDSF9QRk5fT0ZGU0VUICsgbWF4X21hcG5yKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKIAogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCmluZGV4IDU1Y2JhNGEuLmY4Y2Q5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiBfR0xPQkFMKF9fc2V0dXBfY3B1XzYwMykKLQltZmxyCXI0CisJbWZscglyNQogQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCiAJbGkJcjEwLDAKIAltdHNwcglTUFJOX1NQUkdfNjAzX0xSVSxyMTAJCS8qIGluaXQgU1cgTFJVIHRyYWNraW5nICovCkBAIC0yNyw2MCArMjcsNjAgQEAKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfRlBVX1VOQVZBSUxBQkxFKQogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV82MDQpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNjA0X2hpZDAKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTApCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwY3gpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJYmwJc2V0dXBfNzUwY3gKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTBmeCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlibAlzZXR1cF83NTBmeAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0MDApCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwXzc0MDBfd29ya2Fyb3VuZHMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0MTApCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwXzc0MTBfd29ya2Fyb3VuZHMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWxpCXIzLDAKIAltdHNwcglTUFJOX0wyQ1IyLHIzCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzQ1eCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NDV4X3NwZWNpZmljcwotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiAKIC8qIEVuYWJsZSBjYWNoZXMgZm9yIDYwMydzLCA2MDQsIDc1MCAmIDc0MDAgKi8KQEAgLTE5NCwxMCArMTk0LDEwIEBACiAJY3Jvcgk0KmNyMCtlcSw0KmNyMCtlcSw0KmNyMStlcQogCWNyb3IJNCpjcjArZXEsNCpjcjArZXEsNCpjcjIrZXEKIAlibmVscgotCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJbGkJcjcsQ1BVX0ZUUl9DQU5fTkFQCiAJYW5kYwlyNixyNixyNwotCXN0dwlyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJYmxyCiAKIC8qIDc1MGZ4IHNwZWNpZmljCkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogCWFuZGlzLglyMTEscjExLEwzQ1JfTDNFQGgKIAliZXEJMWYKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0wzQ1IpCi0JbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI1KQorCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNCkKIAlhbmRpLglyMCxyNixDUFVfRlRSX0wzX0RJU0FCTEVfTkFQCiAJYmVxCTFmCiAJbGkJcjcsQ1BVX0ZUUl9DQU5fTkFQCiAJYW5kYwlyNixyNixyNwotCXN0dwlyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAxOgogCW1mc3ByCXIxMSxTUFJOX0hJRDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDhkNzRhMjQuLmU4ZTkxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTIwNzYsOCArMjA3Niw4IEBACiAJICogcG9pbnRlciBvbiBwcGM2NCBhbmQgYm9va2UgYXMgd2UgYXJlIHJ1bm5pbmcgYXQgMCBpbiByZWFsIG1vZGUKIAkgKiBvbiBwcGM2NCBhbmQgcmVsb2Nfb2Zmc2V0IGlzIGFsd2F5cyAwIG9uIGJvb2tlLgogCSAqLwotCWlmIChzLT5jcHVfc2V0dXApIHsKLQkJcy0+Y3B1X3NldHVwKG9mZnNldCwgcyk7CisJaWYgKHQtPmNwdV9zZXR1cCkgeworCQl0LT5jcHVfc2V0dXAob2Zmc2V0LCB0KTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0IHx8IENPTkZJR19CT09LRSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKaW5kZXggNGRjZjVmOC4uYjBkYzhmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCkBAIC01OTYsNiArNTk2LDcgQEAKIAkJCWlmIChsZWZ0IDw9IDApCiAJCQkJbGVmdCA9IHBlcmlvZDsKIAkJCXJlY29yZCA9IDE7CisJCQlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKIAkJfQogCQlpZiAobGVmdCA8IDB4ODAwMDAwMDBMTCkKIAkJCXZhbCA9IDB4ODAwMDAwMDBMTCAtIGxlZnQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCBiZjVjYjkxLi5mZDQ4MTIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCWRiZygicmVtb3ZpbmcgY3B1ICVsdSBmcm9tIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7CiAKIAlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pKSB7Ci0JCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogY3B1ICVsdSBub3QgZm91bmQgaW4gbm9kZSAlZFxuIiwKIAkJICAgICAgIGNwdSwgbm9kZSk7CkBAIC0xMjg5LDEwICsxMjg5LDkgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAotLyogVnJ0dWFsIFByb2Nlc3NvciBIb21lIE5vZGUgKFZQSE4pIHN1cHBvcnQgKi8KKy8qIFZpcnR1YWwgUHJvY2Vzc29yIEhvbWUgTm9kZSAoVlBITikgc3VwcG9ydCAqLwogI2lmZGVmIENPTkZJR19QUENfU1BMUEFSCi0jZGVmaW5lIFZQSE5fTlJfQ0hBTkdFX0NUUlMgKDgpCi1zdGF0aWMgdTggdnBobl9jcHVfY2hhbmdlX2NvdW50c1tOUl9DUFVTXVtWUEhOX05SX0NIQU5HRV9DVFJTXTsKK3N0YXRpYyB1OCB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW05SX0NQVVNdW01BWF9ESVNUQU5DRV9SRUZfUE9JTlRTXTsKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrOwogc3RhdGljIGludCB2cGhuX2VuYWJsZWQ7CiBzdGF0aWMgdm9pZCBzZXRfdG9wb2xvZ3lfdGltZXIodm9pZCk7CkBAIC0xMzAzLDE2ICsxMzAyLDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNldHVwX2NwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZV9jb3VudGVycyh2b2lkKQogewotCWludCBjcHUgPSAwOworCWludCBjcHU7CisKKwkvKiBUaGUgVlBITiBmZWF0dXJlIHN1cHBvcnRzIGEgbWF4aW11bSBvZiA4IHJlZmVyZW5jZSBwb2ludHMgKi8KKwlCVUlMRF9CVUdfT04oTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFMgPiA4KTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJaW50IGkgPSAwOworCQlpbnQgaTsKIAkJdTggKmNvdW50cyA9IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbY3B1XTsKIAkJdm9sYXRpbGUgdTggKmh5cGVydmlzb3JfY291bnRzID0gbHBwYWNhW2NwdV0udnBobl9hc3NvY19jb3VudHM7CiAKLQkJZm9yIChpID0gMDsgaSA8IFZQSE5fTlJfQ0hBTkdFX0NUUlM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aDsgaSsrKQogCQkJY291bnRzW2ldID0gaHlwZXJ2aXNvcl9jb3VudHNbaV07Ci0JCX0KIAl9CiB9CiAKQEAgLTEzMjksNyArMTMzMCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdXBkYXRlX2NwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzayh2b2lkKQogewotCWludCBjcHUgPSAwLCBucl9jcHVzID0gMDsKKwlpbnQgY3B1LCBucl9jcHVzID0gMDsKIAljcHVtYXNrX3QgKmNoYW5nZXMgPSAmY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrOwogCiAJY3B1bWFza19jbGVhcihjaGFuZ2VzKTsKQEAgLTEzMzksOCArMTM0MCw4IEBACiAJCXU4ICpjb3VudHMgPSB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW2NwdV07CiAJCXZvbGF0aWxlIHU4ICpoeXBlcnZpc29yX2NvdW50cyA9IGxwcGFjYVtjcHVdLnZwaG5fYXNzb2NfY291bnRzOwogCi0JCWZvciAoaSA9IDA7IGkgPCBWUEhOX05SX0NIQU5HRV9DVFJTOyBpKyspIHsKLQkJCWlmIChoeXBlcnZpc29yX2NvdW50c1tpXSA+IGNvdW50c1tpXSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aDsgaSsrKSB7CisJCQlpZiAoaHlwZXJ2aXNvcl9jb3VudHNbaV0gIT0gY291bnRzW2ldKSB7CiAJCQkJY291bnRzW2ldID0gaHlwZXJ2aXNvcl9jb3VudHNbaV07CiAJCQkJY2hhbmdlZCA9IDE7CiAJCQl9CkBAIC0xMzU0LDggKzEzNTUsMTEgQEAKIAlyZXR1cm4gbnJfY3B1czsKIH0KIAotLyogNiA2NC1iaXQgcmVnaXN0ZXJzIHVucGFja2VkIGludG8gMTIgMzItYml0IGFzc29jaWF0aXZpdHkgdmFsdWVzICovCi0jZGVmaW5lIFZQSE5fQVNTT0NfQlVGU0laRSAoNipzaXplb2YodTY0KS9zaXplb2YodTMyKSkKKy8qCisgKiA2IDY0LWJpdCByZWdpc3RlcnMgdW5wYWNrZWQgaW50byAxMiAzMi1iaXQgYXNzb2NpYXRpdml0eSB2YWx1ZXMuIFRvIGZvcm0KKyAqIHRoZSBjb21wbGV0ZSBwcm9wZXJ0eSB3ZSBoYXZlIHRvIGFkZCB0aGUgbGVuZ3RoIGluIHRoZSBmaXJzdCBjZWxsLgorICovCisjZGVmaW5lIFZQSE5fQVNTT0NfQlVGU0laRSAoNipzaXplb2YodTY0KS9zaXplb2YodTMyKSArIDEpCiAKIC8qCiAgKiBDb252ZXJ0IHRoZSBhc3NvY2lhdGl2aXR5IGRvbWFpbiBudW1iZXJzIHJldHVybmVkIGZyb20gdGhlIGh5cGVydmlzb3IKQEAgLTEzNjMsMTUgKzEzNjcsMTQgQEAKICAqLwogc3RhdGljIGludCB2cGhuX3VucGFja19hc3NvY2lhdGl2aXR5KGNvbnN0IGxvbmcgKnBhY2tlZCwgdW5zaWduZWQgaW50ICp1bnBhY2tlZCkKIHsKLQlpbnQgaSA9IDA7Ci0JaW50IG5yX2Fzc29jX2RvbXMgPSAwOworCWludCBpLCBucl9hc3NvY19kb21zID0gMDsKIAljb25zdCB1MTYgKmZpZWxkID0gKGNvbnN0IHUxNiopIHBhY2tlZDsKIAogI2RlZmluZSBWUEhOX0ZJRUxEX1VOVVNFRAkoMHhmZmZmKQogI2RlZmluZSBWUEhOX0ZJRUxEX01TQgkJKDB4ODAwMCkKICNkZWZpbmUgVlBITl9GSUVMRF9NQVNLCQkoflZQSE5fRklFTERfTVNCKQogCi0JZm9yIChpID0gMDsgaSA8IFZQSE5fQVNTT0NfQlVGU0laRTsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IFZQSE5fQVNTT0NfQlVGU0laRTsgaSsrKSB7CiAJCWlmICgqZmllbGQgPT0gVlBITl9GSUVMRF9VTlVTRUQpIHsKIAkJCS8qIEFsbCBzaWduaWZpY2FudCBmaWVsZHMgcHJvY2Vzc2VkLCBhbmQgcmVtYWluaW5nCiAJCQkgKiBmaWVsZHMgY29udGFpbiB0aGUgcmVzZXJ2ZWQgdmFsdWUgb2YgYWxsIDEncy4KQEAgLTEzNzksMTQgKzEzODIsMTIgQEAKIAkJCSAqLwogCQkJdW5wYWNrZWRbaV0gPSAqKCh1MzIqKWZpZWxkKTsKIAkJCWZpZWxkICs9IDI7Ci0JCX0KLQkJZWxzZSBpZiAoKmZpZWxkICYgVlBITl9GSUVMRF9NU0IpIHsKKwkJfSBlbHNlIGlmICgqZmllbGQgJiBWUEhOX0ZJRUxEX01TQikgewogCQkJLyogRGF0YSBpcyBpbiB0aGUgbG93ZXIgMTUgYml0cyBvZiB0aGlzIGZpZWxkICovCiAJCQl1bnBhY2tlZFtpXSA9ICpmaWVsZCAmIFZQSE5fRklFTERfTUFTSzsKIAkJCWZpZWxkKys7CiAJCQlucl9hc3NvY19kb21zKys7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBEYXRhIGlzIGluIHRoZSBsb3dlciAxNSBiaXRzIG9mIHRoaXMgZmllbGQKIAkJCSAqIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBuZXh0IDE2IGJpdCBmaWVsZAogCQkJICovCkBAIC0xMzk2LDYgKzEzOTcsOSBAQAogCQl9CiAJfQogCisJLyogVGhlIGZpcnN0IGNlbGwgY29udGFpbnMgdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgKi8KKwl1bnBhY2tlZFswXSA9IG5yX2Fzc29jX2RvbXM7CisKIAlyZXR1cm4gbnJfYXNzb2NfZG9tczsKIH0KIApAQCAtMTQwNSw3ICsxNDA5LDcgQEAKICAqLwogc3RhdGljIGxvbmcgaGNhbGxfdnBobih1bnNpZ25lZCBsb25nIGNwdSwgdW5zaWduZWQgaW50ICphc3NvY2lhdGl2aXR5KQogewotCWxvbmcgcmMgPSAwOworCWxvbmcgcmM7CiAJbG9uZyByZXRidWZbUExQQVJfSENBTEw5X0JVRlNJWkVdID0gezB9OwogCXU2NCBmbGFncyA9IDE7CiAJaW50IGh3Y3B1ID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpOwpAQCAtMTQxOSw3ICsxNDIzLDcgQEAKIHN0YXRpYyBsb25nIHZwaG5fZ2V0X2Fzc29jaWF0aXZpdHkodW5zaWduZWQgbG9uZyBjcHUsCiAJCQkJCXVuc2lnbmVkIGludCAqYXNzb2NpYXRpdml0eSkKIHsKLQlsb25nIHJjID0gMDsKKwlsb25nIHJjOwogCiAJcmMgPSBoY2FsbF92cGhuKGNwdSwgYXNzb2NpYXRpdml0eSk7CiAKQEAgLTE0NDUsOSArMTQ0OSw5IEBACiAgKi8KIGludCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCkKIHsKLQlpbnQgY3B1ID0gMCwgbmlkID0gMCwgb2xkX25pZCA9IDA7CisJaW50IGNwdSwgbmlkLCBvbGRfbmlkOwogCXVuc2lnbmVkIGludCBhc3NvY2lhdGl2aXR5W1ZQSE5fQVNTT0NfQlVGU0laRV0gPSB7MH07Ci0Jc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiA9IE5VTEw7CisJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKSB7CiAJCXZwaG5fZ2V0X2Fzc29jaWF0aXZpdHkoY3B1LCBhc3NvY2lhdGl2aXR5KTsKQEAgLTE1MTIsNyArMTUxNiw4IEBACiB7CiAJaW50IHJjID0gMDsKIAotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1ZQSE4pKSB7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfVlBITikgJiYKKwkgICAgZ2V0X2xwcGFjYSgpLT5zaGFyZWRfcHJvYykgewogCQl2cGhuX2VuYWJsZWQgPSAxOwogCQlzZXR1cF9jcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VfY291bnRlcnMoKTsKIAkJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZ0b3BvbG9neV90aW1lcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwppbmRleCA1ZDNlYTlmLi5jYTVkNTg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKQEAgLTcxMyw2ICs3MTMsMTMgQEAKIC8qIE5COiByZWcvdW5yZWcgYXJlIGNhbGxlZCB3aGlsZSBndWFyZGVkIHdpdGggdGhlIHRyYWNlcG9pbnRzX211dGV4ICovCiBleHRlcm4gbG9uZyBoY2FsbF90cmFjZXBvaW50X3JlZmNvdW50OwogCisvKiAKKyAqIFNpbmNlIHRoZSB0cmFjaW5nIGNvZGUgbWlnaHQgZXhlY3V0ZSBoY2FsbHMgd2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0CisgKiByZWN1cnNpb24uIE9uZSBleGFtcGxlIG9mIHRoaXMgYXJlIHNwaW5sb2NrcyBjYWxsaW5nIEhfWUlFTEQgb24KKyAqIHNoYXJlZCBwcm9jZXNzb3IgcGFydGl0aW9ucy4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgaGNhbGxfdHJhY2VfZGVwdGgpOworCiB2b2lkIGhjYWxsX3RyYWNlcG9pbnRfcmVnZnVuYyh2b2lkKQogewogCWhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQrKzsKQEAgLTcyNSwxMiArNzMyLDQyIEBACiAKIHZvaWQgX190cmFjZV9oY2FsbF9lbnRyeSh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyAqYXJncykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqZGVwdGg7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlkZXB0aCA9ICZfX2dldF9jcHVfdmFyKGhjYWxsX3RyYWNlX2RlcHRoKTsKKworCWlmICgqZGVwdGgpCisJCWdvdG8gb3V0OworCisJKCpkZXB0aCkrKzsKIAl0cmFjZV9oY2FsbF9lbnRyeShvcGNvZGUsIGFyZ3MpOworCSgqZGVwdGgpLS07CisKK291dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHZvaWQgX190cmFjZV9oY2FsbF9leGl0KGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIHJldHZhbCwKIAkJCXVuc2lnbmVkIGxvbmcgKnJldGJ1ZikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqZGVwdGg7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlkZXB0aCA9ICZfX2dldF9jcHVfdmFyKGhjYWxsX3RyYWNlX2RlcHRoKTsKKworCWlmICgqZGVwdGgpCisJCWdvdG8gb3V0OworCisJKCpkZXB0aCkrKzsKIAl0cmFjZV9oY2FsbF9leGl0KG9wY29kZSwgcmV0dmFsLCByZXRidWYpOworCSgqZGVwdGgpLS07CisKK291dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggZmYxOWVmZGYuLjYzNmJjYjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC00MDYsNyArNDA2LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBDSFNDX1NDSAotCWRlZl90cmlzdGF0ZSB5CisJZGVmX3RyaXN0YXRlIG0KIAlwcm9tcHQgIlN1cHBvcnQgZm9yIENIU0Mgc3ViY2hhbm5lbHMiCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIENIU0Mgc3ViY2hhbm5lbHMuIEEgQ0hTQyBzdWJjaGFubmVsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA0MDVjYzk3Li43ZTFmNzc2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTEsMjkgKzEsOCBAQAogI2lmbmRlZiBfUzM5MF9DQUNIRUZMVVNIX0gKICNkZWZpbmUgX1MzOTBfQ0FDSEVGTFVTSF9ICiAKLS8qIEtlZXAgaW5jbHVkZXMgdGhlIHNhbWUgYWNyb3NzIGFyY2hlcy4gICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQogLyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBzMzkwLiAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAwCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLQltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jYWNoZWZsdXNoLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiB2b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggZjFmNjQ0Zi4uOTA3NGE1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaApAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKaW5kZXggMDdkZWFlZS4uYTZjNGY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwpAQCAtMTI1LDkgKzEyNSw5IEBACiAJdW5zaWduZWQgbG9uZyB0bXAxOwogCiAJYXNtIHZvbGF0aWxlKAorCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICJBSEkiICAlMCwtMVxuIgogCQkiICAgam8gICAgNWZcbiIKLQkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAgYnJhcyAgJTMsM2ZcbiIKIAkJIjA6IkFISSIgICUwLDI1N1xuIgogCQkiMTogbXZjICAgMCgxLCUxKSwwKCUyKVxuIgpAQCAtMTQyLDkgKzE0Miw4IEBACiAJCSIzOiJBSEkiICAlMCwtMjU2XG4iCiAJCSIgICBqbm0gICAyYlxuIgogCQkiNDogZXggICAgJTAsMWItMGIoJTMpXG4iCi0JCSIgICBzYWNmICAwXG4iCiAJCSI1OiAiU0xSIiAgJTAsJTBcbiIKLQkJIjY6XG4iCisJCSI2OiBzYWNmICAwXG4iCiAJCUVYX1RBQkxFKDFiLDZiKSBFWF9UQUJMRSgyYiwwYikgRVhfVEFCTEUoNGIsMGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHRvKSwgIithIiAoZnJvbSksICI9YSIgKHRtcDEpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0xNTYsOSArMTU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CiAKIAlhc20gdm9sYXRpbGUoCisJCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIkFISSIgICUwLC0xXG4iCiAJCSIgICBqbyAgICA1ZlxuIgotCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICBicmFzICAlMywzZlxuIgogCQkiICAgeGMgICAgMCgxLCUxKSwwKCUxKVxuIgogCQkiMDoiQUhJIiAgJTAsMjU3XG4iCkBAIC0xNzgsOSArMTc3LDggQEAKIAkJIjM6IkFISSIgICUwLC0yNTZcbiIKIAkJIiAgIGpubSAgIDJiXG4iCiAJCSI0OiBleCAgICAlMCwwKCUzKVxuIgotCQkiICAgc2FjZiAgMFxuIgogCQkiNTogIlNMUiIgICUwLCUwXG4iCi0JCSI2OlxuIgorCQkiNjogc2FjZiAgMFxuIgogCQlFWF9UQUJMRSgxYiw2YikgRVhfVEFCTEUoMmIsMGIpIEVYX1RBQkxFKDRiLDBiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiICh0byksICI9YSIgKHRtcDEpLCAiPWEiICh0bXAyKQogCQk6IDogImNjIiwgIm1lbW9yeSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggMGM3MTljNi4uZTE4NTBjMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0zMzYsNyArMzM2LDggQEAKIAlwYWdlLT5mbGFncyBePSBiaXRzOwogCWlmIChwYWdlLT5mbGFncyAmIEZSQUdfTUFTSykgewogCQkvKiBQYWdlIG5vdyBoYXMgc29tZSBmcmVlIHBndGFibGUgZnJhZ21lbnRzLiAqLwotCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CisJCWlmICghbGlzdF9lbXB0eSgmcGFnZS0+bHJ1KSkKKwkJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKIAkJcGFnZSA9IE5VTEw7CiAJfSBlbHNlCiAJCS8qIEFsbCBmcmFnbWVudHMgb2YgdGhlIDRLIHBhZ2UgaGF2ZSBiZWVuIGZyZWVkLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGFlNTU1NTYuLjhhOTAxMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCisJc2VsZWN0IEhBVkVfS0VSTkVMX1haCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTwogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCA5YzhjNmUxLi5lM2Q4MTcwIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTIwMCw3ICsyMDAsNyBAQAogbGlicy0kKENPTkZJR19TVVBFUkgzMikJCTo9IGFyY2gvc2gvbGliLwkkKGxpYnMteSkKIGxpYnMtJChDT05GSUdfU1VQRVJINjQpCQk6PSBhcmNoL3NoL2xpYjY0LyAkKGxpYnMteSkKIAotQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5sem8gXAorQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS54eiB1SW1hZ2UubHpvIFwKIAkgICAgICAgdUltYWdlLnNyZWMgdUltYWdlLmJpbiB6SW1hZ2Ugdm1saW51eC5iaW4gdm1saW51eC5zcmVjIFwKIAkgICAgICAgcm9tSW1hZ2UKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKQpAQCAtMjMwLDUgKzIzMCw2IEBACiAJQGVjaG8gJyogdUltYWdlLmd6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChnemlwKScKIAlAZWNobyAnICB1SW1hZ2UuYnoyCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiemlwMiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bWEJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6bWEpJworCUBlY2hvICcgIHVJbWFnZS54egkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoeHopJwogCUBlY2hvICcgIHVJbWFnZS5sem8JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6byknCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCmluZGV4IDMzYjY2MjkuLjcwMTY2N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKQEAgLTEyOTQsNiArMTI5NCw3IEBACiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjMV9kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUoaTJjMV9kZXZpY2VzKSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19TSF9WT1UpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX1NIX1ZPVV9NT0RVTEUpCiAJLyogVk9VICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRFZfRDE1LCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9EVl9EMTQsIE5VTEwpOwpAQCAtMTMyNSw2ICsxMzI2LDcgQEAKIAogCS8qIFJlbW92ZSByZXNldCAqLwogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRHNCwgMSk7CisjZW5kaWYKIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlY292ZWNfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShlY292ZWNfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IDFjZTYzNjIuLmJhNTE1ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTI0LDEyICsyNCwxMyBAQAogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKQk6PSBnegogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikJOj0gYnoyCiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpCTo9IGx6bWEKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfWFopCTo9IHh6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTykJOj0gbHpvCiAKIHRhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IFwKLQkgICB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5sem8gdUltYWdlLmJpbgorCSAgIHVJbWFnZS5iejIgdUltYWdlLmx6bWEgdUltYWdlLnh6IHVJbWFnZS5sem8gdUltYWdlLmJpbgogZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCi0JICAgdm1saW51eC5iaW4ubHpvCisJICAgdm1saW51eC5iaW4ueHogdm1saW51eC5iaW4ubHpvCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIAogJChvYmopL3pJbWFnZTogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQpAQCAtNzYsNiArNzcsOSBAQAogJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiAKKyQob2JqKS92bWxpbnV4LmJpbi54ejogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQseHprZXJuKQorCiAkKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCiAKQEAgLTg4LDYgKzkyLDkgQEAKICQob2JqKS91SW1hZ2UubHptYTogJChvYmopL3ZtbGludXguYmluLmx6bWEKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UsbHptYSkKIAorJChvYmopL3VJbWFnZS54ejogJChvYmopL3ZtbGludXguYmluLnh6CisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLHh6KQorCiAkKG9iaikvdUltYWdlLmx6bzogJChvYmopL3ZtbGludXguYmluLmx6bwogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem8pCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggY2ZhNWEwOC4uZTBiMDI5MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAKIHRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogXAogCQkgICB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCi0JCSAgIHZtbGludXguYmluLmx6byBcCisJCSAgIHZtbGludXguYmluLnh6IHZtbGludXguYmluLmx6byBcCiAJCSAgIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIE9CSkVDVFMgPSAkKG9iaikvaGVhZF8kKEJJVFMpLm8gJChvYmopL21pc2MubyAkKG9iaikvY2FjaGUubwpAQCAtNTAsNiArNTAsOCBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLGJ6aXAyKQogJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQodm1saW51eC5iaW4uYWxsLXkpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKKyQob2JqKS92bWxpbnV4LmJpbi54ejogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx4emtlcm4pCiAkKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDI3MTQwYTYuLjk1NDcwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTYxLDYgKzYxLDEwIEBACiAjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LRVJORUxfWFoKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bnh6LmMiCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCiAjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAwODNlYTA2Li5kYjg1OTE2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM0LDYgKzEzNCw3IEBACiBleHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CiAKIGV4dGVybiB2b2lkIF9fdXBkYXRlX2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggYzJiMGFhYS4uNjcyOTQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogc3RhdGljIGludCBfX2luaXQgc2g3NzUwX2RldmljZXNfc2V0dXAodm9pZCkKIHsKIAlpZiAobWFjaF9pc19ydHM3NzUxcjJkKCkpIHsKLQkJcGxhdGZvcm1fcmVnaXN0ZXJfZGV2aWNlKCZzY2lmX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NpZl9kZXZpY2UpOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpX2RldmljZSk7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpZl9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaV9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaWZfZGV2aWNlKTsKIAl9CiAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3NzUwX2RldmljZXMsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCA5NDhmZGI2Li4zOGU4NjI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMKQEAgLTE3LDYgKzE3LDcgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1LCBjcHVfZGV2aWNlcyk7CiAKIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CitFWFBPUlRfU1lNQk9MKGNwdV9jb3JlX21hcCk7CiAKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA2M2UzNWVjLi42MmYwODQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xLDQ4ICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BU01fWDg2X0NBQ0hFRkxVU0hfSAogCi0vKiBLZWVwIGluY2x1ZGVzIHRoZSBzYW1lIGFjcm9zcyBhcmNoZXMuICAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgaW50ZWwuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9kdXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdm1hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikgeyB9Ci0jZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAwCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxlbikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdnVubWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkgICAgIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJICAgICAgIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci19CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2FjaGVmbHVzaC5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDRmYWIyNGQuLjZlNmU3NTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0zMiw1ICszMiw2IEBACiAKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CiAKK2ludCBfX2NwdWluaXQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKIAogI2VuZGlmIC8qIF9BU01fWDg2X0NQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKaW5kZXggZjUyZDQyZS4uNTc0ZGJjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtMTQsNyArMTQsNyBAQAogCWRvIHsJCQkJCQkJXAogCQlhc20gZ290bygiMToiCQkJCQlcCiAJCQlKVU1QX0xBQkVMX0lOSVRJQUxfTk9QCQkJXAotCQkJIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsICBcImFcIiBcblx0IlwKKwkJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhd1wiIFxuXHQiXAogCQkJX0FTTV9QVFIgIjFiLCAlbFsiICNsYWJlbCAiXSwgJWMwIFxuXHQiIFwKIAkJCSIucG9wc2VjdGlvbiBcblx0IgkJCVwKIAkJCTogOiAgImkiIChrZXkpIDogIDogbGFiZWwpOwkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNGEyZDRlMC4uOGI1MzkzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0zNiw4ICszNiw2IEBACiAJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7Ci0JCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCi0JCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhwcmV2KSk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLnN0YXRlLCBUTEJTVEFURV9PSyk7CiAJCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuYWN0aXZlX21tLCBuZXh0KTsKQEAgLTQ3LDYgKzQ1LDkgQEAKIAkJLyogUmUtbG9hZCBwYWdlIHRhYmxlcyAqLwogCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOwogCisJCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhwcmV2KSk7CisKIAkJLyoKIAkJICogbG9hZCB0aGUgTERULCBpZiB0aGUgTERUIGlzIGRpZmZlcmVudDoKIAkJICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCAyMDcxYThiLi5lYmJjNGQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTU1OCwxMyArNTU4LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIHsKLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKIAlpZiAoc2l6ZW9mKHBtZHZhbF90KSA+IHNpemVvZihsb25nKSkKIAkJLyogNSBhcmcgd29yZHMgKi8KIAkJcHZfbW11X29wcy5zZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWRwLCBwbWQpOwogCWVsc2UKLQkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwgcG1kLnBtZCk7Ci0jZW5kaWYKKwkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwKKwkJCSAgICBuYXRpdmVfcG1kX3ZhbChwbWQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDM3ODhmNDYuLjdlMTcyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCkBAIC0yNzMsMzQgKzI3MywzNCBAQAogCXR5cGVvZih2YXIpIHB4b19uZXdfXyA9IChudmFsKTsJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hnYiAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAicSIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSAyOgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGd3ICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ3cgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVlYXgiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVyYXgiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlcmF4IgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA0YzJmNjNjLi4xZjQ2OTUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNDAsMTAgKzQwLDcgQEAKIERFQ0xBUkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpOwogCiAvKiBTdGF0aWMgc3RhdGUgaW4gaGVhZC5TIHVzZWQgdG8gc2V0IHVwIGEgQ1BVICovCi1leHRlcm4gc3RydWN0IHsKLQl2b2lkICpzcDsKLQl1bnNpZ25lZCBzaG9ydCBzczsKLX0gc3RhY2tfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFja19zdGFydDsgLyogSW5pdGlhbCBzdGFjayBwb2ludGVyIGFkZHJlc3MgKi8KIAogc3RydWN0IHNtcF9vcHMgewogCXZvaWQgKCpzbXBfcHJlcGFyZV9ib290X2NwdSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTU5ZTA5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9TWVNURU1fNjRfSAotI2RlZmluZSBfQVNNX1g4Nl9TWVNURU1fNjRfSAotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vY21weGNoZy5oPgotCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyOCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3I4OwotCWFzbSB2b2xhdGlsZSgibW92cSAlJWNyOCwlMCIgOiAiPXIiIChjcjgpKTsKLQlyZXR1cm4gY3I4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I4KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSgibW92cSAlMCwlJWNyOCIgOjogInIiICh2YWwpIDogIm1lbW9yeSIpOwotfQotCi0jaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KLQotI2VuZGlmIC8qIF9BU01fWDg2X1NZU1RFTV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwppbmRleCA2OWZkNzJhLi42OGQxNTM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKQEAgLTEyLDEwICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLQotI2lmZGVmIENPTkZJR19YODZfMzIKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgInJlYWxtb2RlL3dha2V1cC5oIgogI2luY2x1ZGUgInNsZWVwLmgiCkBAIC0xMDAsNyArOTgsNyBAQAogI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAJaGVhZGVyLT50cmFtcG9saW5lX3NlZ21lbnQgPSBzZXR1cF90cmFtcG9saW5lKCkgPj4gNDsKICNpZmRlZiBDT05GSUdfU01QCi0Jc3RhY2tfc3RhcnQuc3AgPSB0ZW1wX3N0YWNrICsgc2l6ZW9mKHRlbXBfc3RhY2spOworCXN0YWNrX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdGVtcF9zdGFjayArIHNpemVvZih0ZW1wX3N0YWNrKTsKIAllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9CiAJCQkodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWluaXRpYWxfZ3MgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpOwpAQCAtMTQ5LDYgKzE0NywxNSBAQAogCW1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKG1lbSwgbWVtICsgV0FLRVVQX1NJWkUsICJBQ1BJIFdBS0VVUCIpOwogfQogCitpbnQgX19pbml0IGFjcGlfY29uZmlndXJlX3dha2V1cF9tZW1vcnkodm9pZCkKK3sKKwlpZiAoYWNwaV9yZWFsbW9kZSkKKwkJc2V0X21lbW9yeV94KGFjcGlfcmVhbG1vZGUsIFdBS0VVUF9TSVpFID4+IFBBR0VfU0hJRlQpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGFjcGlfY29uZmlndXJlX3dha2V1cF9tZW1vcnkpOworCiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2xlZXBfc2V0dXAoY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggNzI4M2U5OC4uZWMyYzE5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC00NSw2ICs0NSw3IEBACiAJeyAweDBhLCBMVkxfMV9EQVRBLCA4IH0sCS8qIDIgd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MGMsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MGQsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MGUsIExWTF8xX0RBVEEsIDI0IH0sCS8qIDYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjEsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIyLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjMsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCkBAIC02Niw2ICs2Nyw3IEBACiAJeyAweDQ1LCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDQ2LCBMVkxfMywgICAgICBNQig0KSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDQ3LCBMVkxfMywgICAgICBNQig4KSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ4LCBMVkxfMiwgICAgICBNQigzKSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0OSwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NGEsIExWTF8zLCAgICAgIE1CKDYpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDRiLCBMVkxfMywgICAgICBNQig4KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtODcsNiArODksNyBAQAogCXsgMHg3YywgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4N2QsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4N2YsIExWTF8yLCAgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDgwLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg4MiwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4ODMsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDg0LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwppbmRleCBlMTIyNDZmLi42ZjhjNWU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKQEAgLTU5LDYgKzU5LDcgQEAKIAogLyogQ2FsbGJhY2sgdG8gaGFuZGxlIGNvcmUgdGhyZXNob2xkIGludGVycnVwdHMgKi8KIGludCAoKnBsYXRmb3JtX3RoZXJtYWxfbm90aWZ5KShfX3U2NCBtc3JfdmFsKTsKK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fdGhlcm1hbF9ub3RpZnkpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRoZXJtYWxfc3RhdGUsIHRoZXJtYWxfc3RhdGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAwMWMwZjNlLi5iZWJhYmVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTc5MywxMyArNzkzLDIxIEBACiB9CiAKIC8qCi0gKiBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncworICogRGVsYXllZCBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncwogICovCiB2b2lkIG10cnJfYXBzX2luaXQodm9pZCkKIHsKIAlpZiAoIXVzZV9pbnRlbCgpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIENoZWNrIGlmIHNvbWVvbmUgaGFzIHJlcXVlc3RlZCB0aGUgZGVsYXkgb2YgQVAgTVRSUiBpbml0aWFsaXphdGlvbiwKKwkgKiBieSBkb2luZyBzZXRfbXRycl9hcHNfZGVsYXllZF9pbml0KCksIHByaW9yIHRvIHRoaXMgcG9pbnQuIElmIG5vdCwKKwkgKiB0aGVuIHdlIGFyZSBkb25lLgorCSAqLworCWlmICghbXRycl9hcHNfZGVsYXllZF9pbml0KQorCQlyZXR1cm47CisKIAlzZXRfbXRycih+MFUsIDAsIDAsIDApOwogCW10cnJfYXBzX2RlbGF5ZWRfaW5pdCA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwppbmRleCBlNTZiOWJmLi5mN2EwOTkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwpAQCAtNjgyLDcgKzY4Miw3IEBACiAJICogaWYgYW4gZXZlbnQgaXMgc2hhcmVkIGFjY3Jvc3MgdGhlIGxvZ2ljYWwgdGhyZWFkcwogCSAqIHRoZSB1c2VyIG5lZWRzIHNwZWNpYWwgcGVybWlzc2lvbnMgdG8gYmUgYWJsZSB0byB1c2UgaXQKIAkgKi8KLQlpZiAocDRfZXZlbnRfYmluZF9tYXBbdl0uc2hhcmVkKSB7CisJaWYgKHA0X2h0X2FjdGl2ZSgpICYmIHA0X2V2ZW50X2JpbmRfbWFwW3ZdLnNoYXJlZCkgewogCQlpZiAocGVyZl9wYXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTcyNyw3ICs3MjcsOCBAQAogCQlldmVudC0+aHcuY29uZmlnID0gcDRfc2V0X2h0X2JpdChldmVudC0+aHcuY29uZmlnKTsKIAogCWlmIChldmVudC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKLQorCQlzdHJ1Y3QgcDRfZXZlbnRfYmluZCAqYmluZDsKKwkJdW5zaWduZWQgaW50IGVzZWw7CiAJCS8qCiAJCSAqIENsZWFyIGJpdHMgd2UgcmVzZXJ2ZSB0byBiZSBtYW5hZ2VkIGJ5IGtlcm5lbCBpdHNlbGYKIAkJICogYW5kIG5ldmVyIGFsbG93ZWQgZnJvbSBhIHVzZXIgc3BhY2UKQEAgLTc0Myw2ICs3NDQsMTMgQEAKIAkJICogYml0cyBzaW5jZSB3ZSBrZWVwIGFkZGl0aW9uYWwgaW5mbyBoZXJlIChmb3IgY2FjaGUgZXZlbnRzIGFuZCBldGMpCiAJCSAqLwogCQlldmVudC0+aHcuY29uZmlnIHw9IGV2ZW50LT5hdHRyLmNvbmZpZzsKKwkJYmluZCA9IHA0X2NvbmZpZ19nZXRfYmluZChldmVudC0+YXR0ci5jb25maWcpOworCQlpZiAoIWJpbmQpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVzZWwgPSBQNF9PUENPREVfRVNFTChiaW5kLT5vcGNvZGUpOworCQlldmVudC0+aHcuY29uZmlnIHw9IHA0X2NvbmZpZ19wYWNrX2NjY3IoUDRfQ0NDUl9FU0VMKGVzZWwpKTsKIAl9CiAKIAlyYyA9IHg4Nl9zZXR1cF9wZXJmY3RyKGV2ZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCA2NDEwMTMzLi5hNmI2ZmNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xNDksMTMgKzE0OSwxMyBAQAogCXVuc2lnbmVkIHVzZWQgPSAwOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAJaW50IGdyYXBoID0gMDsKKwl1bnNpZ25lZCBsb25nIGR1bW15OwogCXVuc2lnbmVkIGxvbmcgYnA7CiAKIAlpZiAoIXRhc2spCiAJCXRhc2sgPSBjdXJyZW50OwogCiAJaWYgKCFzdGFjaykgewotCQl1bnNpZ25lZCBsb25nIGR1bW15OwogCQlzdGFjayA9ICZkdW1teTsKIAkJaWYgKHRhc2sgJiYgdGFzayAhPSBjdXJyZW50KQogCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGZjMjkzZGMuLjc2N2Q2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtODUsNiArODUsOCBAQAogICovCiBfX0hFQUQKIEVOVFJZKHN0YXJ0dXBfMzIpCisJbW92bCBwYShzdGFja19zdGFydCksJWVjeAorCQogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkJdXMgdG8gbm90IHJlbG9hZCBzZWdtZW50cyAqLwogCXRlc3RiICQoMTw8NiksIEJQX2xvYWRmbGFncyglZXNpKQpAQCAtOTksNyArMTAxLDkgQEAKIAltb3ZsICVlYXgsJWVzCiAJbW92bCAlZWF4LCVmcwogCW1vdmwgJWVheCwlZ3MKKwltb3ZsICVlYXgsJXNzCiAyOgorCWxlYWwgLV9fUEFHRV9PRkZTRVQoJWVjeCksJWVzcAogCiAvKgogICogQ2xlYXIgQlNTIGZpcnN0IHNvIHRoYXQgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4uLgpAQCAtMTQ1LDggKzE0OSw2IEBACiAgKiBfYnJrX2VuZCBpcyBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0ICJzYWZlIiBsb2NhdGlvbi4KICAqIE1hcHBpbmdzIGFyZSBjcmVhdGVkIGJvdGggYXQgdmlydHVhbCBhZGRyZXNzIDAgKGlkZW50aXR5IG1hcHBpbmcpCiAgKiBhbmQgUEFHRV9PRkZTRVQgZm9yIHVwIHRvIF9lbmQuCi0gKgotICogTm90ZSB0aGF0IHRoZSBzdGFjayBpcyBub3QgeWV0IHNldCB1cCEKICAqLwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAKQEAgLTI4Miw2ICsyODQsOSBAQAogCW1vdmwgJWVheCwlZXMKIAltb3ZsICVlYXgsJWZzCiAJbW92bCAlZWF4LCVncworCW1vdmwgcGEoc3RhY2tfc3RhcnQpLCVlY3gKKwltb3ZsICVlYXgsJXNzCisJbGVhbCAtX19QQUdFX09GRlNFVCglZWN4KSwlZXNwCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogZGVmYXVsdF9lbnRyeToKIApAQCAtMzQ3LDggKzM1Miw4IEBACiAJbW92bCAlZWF4LCVjcjAJCS8qIC4uYW5kIHNldCBwYWdpbmcgKFBHKSBiaXQgKi8KIAlsam1wICRfX0JPT1RfQ1MsJDFmCS8qIENsZWFyIHByZWZldGNoIGFuZCBub3JtYWxpemUgJWVpcCAqLwogMToKLQkvKiBTZXQgdXAgdGhlIHN0YWNrIHBvaW50ZXIgKi8KLQlsc3Mgc3RhY2tfc3RhcnQsJWVzcAorCS8qIFNoaWZ0IHRoZSBzdGFjayBwb2ludGVyIHRvIGEgdmlydHVhbCBhZGRyZXNzICovCisJYWRkbCAkX19QQUdFX09GRlNFVCwgJWVzcAogCiAvKgogICogSW5pdGlhbGl6ZSBlZmxhZ3MuICBTb21lIEJJT1MncyBsZWF2ZSBiaXRzIGxpa2UgTlQgc2V0LiAgVGhpcyB3b3VsZApAQCAtMzYwLDkgKzM2NSw3IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJY21wYiAkMCwgcmVhZHkKLQlqeiAgMWYJCQkJLyogSW5pdGlhbCBDUFUgY2xlYW5zIEJTUyAqLwotCWptcCBjaGVja0NQVXR5cGUKLTE6CisJam56IGNoZWNrQ1BVdHlwZQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKQEAgLTQ3MCwxNCArNDczLDcgQEAKIAogCWNsZAkJCSMgZ2NjMiB3YW50cyB0aGUgZGlyZWN0aW9uIGZsYWcgY2xlYXJlZCBhdCBhbGwgdGltZXMKIAlwdXNobCAkMAkJIyBmYWtlIHJldHVybiBhZGRyZXNzIGZvciB1bndpbmRlcgotI2lmZGVmIENPTkZJR19TTVAKLQltb3ZiIHJlYWR5LCAlY2wKIAltb3ZiICQxLCByZWFkeQotCWNtcGIgJDAsJWNsCQkjIHRoZSBmaXJzdCBDUFUgY2FsbHMgc3RhcnRfa2VybmVsCi0JamUgICAxZgotCW1vdmwgKHN0YWNrX3N0YXJ0KSwgJWVzcAotMToKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJam1wICooaW5pdGlhbF9jb2RlKQogCiAvKgpAQCAtNjcwLDE1ICs2NjYsMTUgQEAKICNlbmRpZgogCiAuZGF0YQorLmJhbGlnbiA0CiBFTlRSWShzdGFja19zdGFydCkKIAkubG9uZyBpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRQotCS5sb25nIF9fQk9PVF9EUwotCi1yZWFkeToJLmJ5dGUgMAogCiBlYXJseV9yZWN1cnNpb25fZmxhZzoKIAkubG9uZyAwCiAKK3JlYWR5OgkuYnl0ZSAwCisKIGludF9tc2c6CiAJLmFzY2l6ICJVbmtub3duIGludGVycnVwdCBvciBmYXVsdCBhdDogJXAgJXAgJXBcbiIKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZDgyODZlZC4uZTc2NGZjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CkBAIC01MDUsNyArNTA2LDcgQEAKICNkZWZpbmUgTVdBSVRfRUNYX0VYVEVOREVEX0lORk8JCTB4MDEKICNkZWZpbmUgTVdBSVRfRURYX0MxCQkJMHhmMAogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQoraW50IF9fY3B1aW5pdCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXUzMiBlYXgsIGVieCwgZWN4LCBlZHg7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDc2M2RmNzcuLjAzMjczYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJICogdGFyZ2V0IHByb2Nlc3NvciBzdGF0ZS4KIAkgKi8KIAlzdGFydHVwX2lwaV9ob29rKHBoeXNfYXBpY2lkLCAodW5zaWduZWQgbG9uZykgc3RhcnRfc2Vjb25kYXJ5LAotCQkJICh1bnNpZ25lZCBsb25nKXN0YWNrX3N0YXJ0LnNwKTsKKwkJCSBzdGFja19zdGFydCk7CiAKIAkvKgogCSAqIFJ1biBTVEFSVFVQIElQSSBsb29wLgpAQCAtNzg1LDcgKzc4NSw3IEBACiAjZW5kaWYKIAllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CiAJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpc3RhcnRfc2Vjb25kYXJ5OwotCXN0YWNrX3N0YXJ0LnNwID0gKHZvaWQgKikgY19pZGxlLmlkbGUtPnRocmVhZC5zcDsKKwlzdGFja19zdGFydCAgPSBjX2lkbGUuaWRsZS0+dGhyZWFkLnNwOwogCiAJLyogc3RhcnRfaXAgaGFkIGJldHRlciBiZSBwYWdlLWFsaWduZWQhICovCiAJc3RhcnRfaXAgPSBzZXR1cF90cmFtcG9saW5lKCk7CkBAIC0xNDAyLDggKzE0MDIsOSBAQAogCXVuc2lnbmVkIGludCBoaWdoZXN0X3N1YmNzdGF0ZSA9IDA7CiAJaW50IGk7CiAJdm9pZCAqbXdhaXRfcHRyOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyk7CiAKLQlpZiAoIWNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfTVdBSVQpKQorCWlmICghKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTVdBSVQpICYmIG13YWl0X3VzYWJsZShjKSkpCiAJCXJldHVybjsKIAlpZiAoIWNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDI1YmQxYmMuLjU0Y2UyNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTExNTAsOCArMTE1MCw4IEBACiAJa3ZtX2xvYWRfbGR0KHN2bS0+aG9zdC5sZHQpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAlsb2Fkc2VnbWVudChmcywgc3ZtLT5ob3N0LmZzKTsKLQlsb2FkX2dzX2luZGV4KHN2bS0+aG9zdC5ncyk7CiAJd3Jtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgY3VycmVudC0+dGhyZWFkLmdzKTsKKwlsb2FkX2dzX2luZGV4KHN2bS0+aG9zdC5ncyk7CiAjZWxzZQogCWxvYWRzZWdtZW50KGdzLCBzdm0tPmhvc3QuZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA4YjgzMGNhLi5kMzQzYjNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTI1Niw3ICsyNTYsNiBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGZuKQogewogCXBncHJvdF90IGZvcmJpZGRlbiA9IF9fcGdwcm90KDApOwotCXBncHJvdF90IHJlcXVpcmVkID0gX19wZ3Byb3QoMCk7CiAKIAkvKgogCSAqIFRoZSBCSU9TIGFyZWEgYmV0d2VlbiA2NDBrIGFuZCAxTWIgbmVlZHMgdG8gYmUgZXhlY3V0YWJsZSBmb3IKQEAgLTI4MiwxMiArMjgxLDYgQEAKIAlpZiAod2l0aGluKHBmbiwgX19wYSgodW5zaWduZWQgbG9uZylfX3N0YXJ0X3JvZGF0YSkgPj4gUEFHRV9TSElGVCwKIAkJICAgX19wYSgodW5zaWduZWQgbG9uZylfX2VuZF9yb2RhdGEpID4+IFBBR0VfU0hJRlQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfUlc7Ci0JLyoKLQkgKiAuZGF0YSBhbmQgLmJzcyBzaG91bGQgYWx3YXlzIGJlIHdyaXRhYmxlLgotCSAqLwotCWlmICh3aXRoaW4oYWRkcmVzcywgKHVuc2lnbmVkIGxvbmcpX3NkYXRhLCAodW5zaWduZWQgbG9uZylfZWRhdGEpIHx8Ci0JICAgIHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfX2Jzc19zdGFydCwgKHVuc2lnbmVkIGxvbmcpX19ic3Nfc3RvcCkpCi0JCXBncHJvdF92YWwocmVxdWlyZWQpIHw9IF9QQUdFX1JXOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19ST0RBVEEpCiAJLyoKQEAgLTMyNyw3ICszMjAsNiBAQAogI2VuZGlmCiAKIAlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5wZ3Byb3RfdmFsKGZvcmJpZGRlbikpOwotCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgcGdwcm90X3ZhbChyZXF1aXJlZCkpOwogCiAJcmV0dXJuIHByb3Q7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vcDJtLmMgYi9hcmNoL3g4Ni94ZW4vcDJtLmMKaW5kZXggZGRjODFhMC4uZmQxMmQ3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3AybS5jCisrKyBiL2FyY2gveDg2L3hlbi9wMm0uYwpAQCAtMjQxLDIxICsyNDEsMTUgQEAKIAkJICogQXMgbG9uZyBhcyB0aGUgbWZuX2xpc3QgaGFzIGVub3VnaCBlbnRyaWVzIHRvIGNvbXBsZXRlbHkKIAkJICogZmlsbCBhIHAybSBwYWdlLCBwb2ludGluZyBpbnRvIHRoZSBhcnJheSBpcyBvay4gQnV0IGlmCiAJCSAqIG5vdCB0aGUgZW50cmllcyBiZXlvbmQgdGhlIGxhc3QgcGZuIHdpbGwgYmUgdW5kZWZpbmVkLgotCQkgKiBBbmQgZ3Vlc3NpbmcgdGhhdCB0aGUgJ3doYXQtZXZlci10aGVyZS1pcycgZG9lcyBub3QgdGFrZSBpdAotCQkgKiB0b28ga2luZGx5IHdoZW4gY2hhbmdpbmcgaXQgdG8gaW52YWxpZCBtYXJrZXJzLCBhIG5ldyBwYWdlCi0JCSAqIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQgYW5kIGZpbGxlZCB3aXRoIHRoZSB2YWxpZCBwYXJ0LgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHBmbiArIFAyTV9QRVJfUEFHRSA+IG1heF9wZm4pKSB7CiAJCQl1bnNpZ25lZCBsb25nIHAybWlkeDsKLQkJCXVuc2lnbmVkIGxvbmcgKnAybSA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwotCQkJcDJtX2luaXQocDJtKTsKIAotCQkJZm9yIChwMm1pZHggPSAwOyBwZm4gKyBwMm1pZHggPCBtYXhfcGZuOyBwMm1pZHgrKykgewotCQkJCXAybVtwMm1pZHhdID0gbWZuX2xpc3RbcGZuICsgcDJtaWR4XTsKLQkJCX0KLQkJCXAybV90b3BbdG9waWR4XVttaWRpZHhdID0gcDJtOwotCQl9IGVsc2UKLQkJCXAybV90b3BbdG9waWR4XVttaWRpZHhdID0gJm1mbl9saXN0W3Bmbl07CisJCQlwMm1pZHggPSBtYXhfcGZuICUgUDJNX1BFUl9QQUdFOworCQkJZm9yICggOyBwMm1pZHggPCBQMk1fUEVSX1BBR0U7IHAybWlkeCsrKQorCQkJCW1mbl9saXN0W3BmbiArIHAybWlkeF0gPSBJTlZBTElEX1AyTV9FTlRSWTsKKwkJfQorCQlwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSA9ICZtZm5fbGlzdFtwZm5dOwogCX0KIAogCW0ycF9vdmVycmlkZV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCmluZGV4IGI1YTdmOTIuLmE4YTY2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zZXR1cC5jCisrKyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCkBAIC0xNzksOCArMTc5LDEzIEBACiAJZTgyMC5ucl9tYXAgPSAwOwogCXhlbl9leHRyYV9tZW1fc3RhcnQgPSBtZW1fZW5kOwogCWZvciAoaSA9IDA7IGkgPCBtZW1tYXAubnJfZW50cmllczsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQgPSBtYXBbaV0uYWRkciArIG1hcFtpXS5zaXplOworCQl1bnNpZ25lZCBsb25nIGxvbmcgZW5kOwogCisJCS8qIEd1YXJkIGFnYWluc3Qgbm9uLXBhZ2UgYWxpZ25lZCBFODIwIGVudHJpZXMuICovCisJCWlmIChtYXBbaV0udHlwZSA9PSBFODIwX1JBTSkKKwkJCW1hcFtpXS5zaXplIC09IChtYXBbaV0uc2l6ZSArIG1hcFtpXS5hZGRyKSAlIFBBR0VfU0laRTsKKworCQllbmQgPSBtYXBbaV0uYWRkciArIG1hcFtpXS5zaXplOwogCQlpZiAobWFwW2ldLnR5cGUgPT0gRTgyMF9SQU0gJiYgZW5kID4gbWVtX2VuZCkgewogCQkJLyogUkFNIG9mZiB0aGUgZW5kIC0gbWF5IGJlIHBhcnRpYWxseSBpbmNsdWRlZCAqLwogCQkJdTY0IGRlbHRhID0gbWluKG1hcFtpXS5zaXplLCBlbmQgLSBtZW1fZW5kKTsKQEAgLTM1MCw2ICszNTUsNyBAQAogCWJvb3RfY3B1X2RhdGEuaGx0X3dvcmtzX29rID0gMTsKICNlbmRpZgogCXBtX2lkbGUgPSBkZWZhdWx0X2lkbGU7CisJYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSA9IElETEVfSEFMVDsKIAogCWZpZGRsZV92ZHNvKCk7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCmluZGV4IDM4MWIwOWIuLmE4OTA0M2EgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jCisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCkBAIC0xNjgsNyArMTY4LDE1IEBACiAJICogdHJlZSBvZiBibGtnIChpbnN0ZWFkIG9mIHRyYXZlcnNpbmcgdGhyb3VnaCBoYXNoIGxpc3QgYWxsCiAJICogdGhlIHRpbWUuCiAJICovCi0JdGcgPSB0Z19vZl9ibGtnKGJsa2lvY2dfbG9va3VwX2dyb3VwKGJsa2NnLCBrZXkpKTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgY29tbW9uIGNhc2Ugd2hlbiB0aGVyZSBhcmUgbm8gYmxraW8gY2dyb3Vwcy4KKyAJICogQXZvaWQgbG9va3VwIGluIHRoaXMgY2FzZQorIAkgKi8KKwlpZiAoYmxrY2cgPT0gJmJsa2lvX3Jvb3RfY2dyb3VwKQorCQl0ZyA9ICZ0ZC0+cm9vdF90ZzsKKwllbHNlCisJCXRnID0gdGdfb2ZfYmxrZyhibGtpb2NnX2xvb2t1cF9ncm91cChibGtjZywga2V5KSk7CiAKIAkvKiBGaWxsIGluIGRldmljZSBkZXRhaWxzIGZvciByb290IGdyb3VwICovCiAJaWYgKHRnICYmICF0Zy0+YmxrZy5kZXYgJiYgYmRpLT5kZXYgJiYgZGV2X25hbWUoYmRpLT5kZXYpKSB7CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA1MDFmZmRmLi43YmU0Yzc5IDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1jZnFfc2NhbGVkX2dyb3VwX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK2NmcV9zY2FsZWRfY2ZxcV9zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJdW5zaWduZWQgc2xpY2UgPSBjZnFfcHJpb190b19zbGljZShjZnFkLCBjZnFxKTsKIAlpZiAoY2ZxZC0+Y2ZxX2xhdGVuY3kpIHsKQEAgLTYzMSw3ICs2MzEsNyBAQAogc3RhdGljIGlubGluZSB2b2lkCiBjZnFfc2V0X3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewotCXVuc2lnbmVkIHNsaWNlID0gY2ZxX3NjYWxlZF9ncm91cF9zbGljZShjZnFkLCBjZnFxKTsKKwl1bnNpZ25lZCBzbGljZSA9IGNmcV9zY2FsZWRfY2ZxcV9zbGljZShjZnFkLCBjZnFxKTsKIAogCWNmcXEtPnNsaWNlX3N0YXJ0ID0gamlmZmllczsKIAljZnFxLT5zbGljZV9lbmQgPSBqaWZmaWVzICsgc2xpY2U7CkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogCSAqLwogCWlmICh0aW1lZF9vdXQpIHsKIAkJaWYgKGNmcV9jZnFxX3NsaWNlX25ldyhjZnFxKSkKLQkJCWNmcXEtPnNsaWNlX3Jlc2lkID0gY2ZxX3NjYWxlZF9ncm91cF9zbGljZShjZnFkLCBjZnFxKTsKKwkJCWNmcXEtPnNsaWNlX3Jlc2lkID0gY2ZxX3NjYWxlZF9jZnFxX3NsaWNlKGNmcWQsIGNmcXEpOwogCQllbHNlCiAJCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcXEtPnNsaWNlX2VuZCAtIGppZmZpZXM7CiAJCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAicmVzaWQ9JWxkIiwgY2ZxcS0+c2xpY2VfcmVzaWQpOwpAQCAtMzQzMiw2ICszNDMyLDEwIEBACiB7CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBjZnFkLT5hY3RpdmVfY2ljOwogCisJLyogSWYgdGhlIHF1ZXVlIGFscmVhZHkgaGFzIHJlcXVlc3RzLCBkb24ndCB3YWl0ICovCisJaWYgKCFSQl9FTVBUWV9ST09UKCZjZnFxLT5zb3J0X2xpc3QpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKiBJZiB0aGVyZSBhcmUgb3RoZXIgcXVldWVzIGluIHRoZSBncm91cCwgZG9uJ3Qgd2FpdCAqLwogCWlmIChjZnFxLT5jZnFnLT5ucl9jZnFxID4gMSkKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IDMyODgyNjMuLmI4ZDk2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTI2MCw2ICsyNjAsNyBAQAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwMiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIEFIQ0kgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDQpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDA2KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjMyMyksIGJvYXJkX2FoY2kgfSwgLyogREg4OXh4Q0MgQUhDSSAqLwogCiAJLyogSk1pY3JvbiAzNjAvMS8zLzUvNiwgbWF0Y2ggY2xhc3MgdG8gYXZvaWQgSURFIGZ1bmN0aW9uICovCiAJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCkBAIC0zNzksNiArMzgwLDggQEAKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjE0NSksIGJvYXJkX2FoY2lfbXYgfSwJLyogNjE0NSAqLwogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTIxKSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTIxICovCiAJeyBQQ0lfREVWSUNFKDB4MWI0YiwgMHg5MTIzKSwKKwkgIC5jbGFzcyA9IFBDSV9DTEFTU19TVE9SQUdFX1NBVEFfQUhDSSwKKwkgIC5jbGFzc19tYXNrID0gMHhmZmZmZmYsCiAJICAuZHJpdmVyX2RhdGEgPSBib2FyZF9haGNpX3llc19mYnMgfSwJCQkvKiA4OHNlOTEyOCAqLwogCiAJLyogUHJvbWlzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggYTMxZmU5Ni4uZDRlNTJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC00MTM4LDYgKzQxMzgsNyBAQAogCSAqIGRldmljZSBhbmQgY29udHJvbGxlciBhcmUgU0FUQS4KIAkgKi8KIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSVEQwOCIsCSIxLjAwIiwJQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCisJeyAiUElPTkVFUiBEVkQtUlcgIERWUi0yMTJEIiwJIjEuMjgiLCBBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAogCS8qIEVuZCBNYXJrZXIgKi8KIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDVkZWZjNzQuLjYwMGY2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAKIAkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwogCQl2b2lkICpidWY7CiAKLQkJLyogc2V0IHRoZSBtaW4gYWxpZ25tZW50IGFuZCBwYWRkaW5nICovCi0JCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAotCQkJCQkgICAgICAgQVRBX0RNQV9QQURfU1ogLSAxKTsKKwkJc2Rldi0+c2VjdG9yX3NpemUgPSBBVEFfU0VDVF9TSVpFOworCisJCS8qIHNldCBETUEgcGFkZGluZyAqLwogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9wYWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJIEFUQV9ETUFfUEFEX1NaIC0gMSk7CiAKQEAgLTExMTUsMTMgKzExMTUsMjUgQEAKIAogCQlibGtfcXVldWVfZG1hX2RyYWluKHEsIGF0YXBpX2RyYWluX25lZWRlZCwgYnVmLCBBVEFQSV9NQVhfRFJBSU4pOwogCX0gZWxzZSB7Ci0JCS8qIEFUQSBkZXZpY2VzIG11c3QgYmUgc2VjdG9yIGFsaWduZWQgKi8KIAkJc2Rldi0+c2VjdG9yX3NpemUgPSBhdGFfaWRfbG9naWNhbF9zZWN0b3Jfc2l6ZShkZXYtPmlkKTsKLQkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCi0JCQkJCSAgICAgICBzZGV2LT5zZWN0b3Jfc2l6ZSAtIDEpOwogCQlzZGV2LT5tYW5hZ2Vfc3RhcnRfc3RvcCA9IDE7CiAJfQogCisJLyoKKwkgKiBhdGFfcGlvX3NlY3RvcnMoKSBleHBlY3RzIGJ1ZmZlciBmb3IgZWFjaCBzZWN0b3IgdG8gbm90IGNyb3NzCisJICogcGFnZSBib3VuZGFyeS4gIEVuZm9yY2UgaXQgYnkgcmVxdWlyaW5nIGJ1ZmZlcnMgdG8gYmUgc2VjdG9yCisJICogYWxpZ25lZCwgd2hpY2ggd29ya3MgaWZmIHNlY3Rvcl9zaXplIGlzIG5vdCBsYXJnZXIgdGhhbgorCSAqIFBBR0VfU0laRS4gIEFUQVBJIGRldmljZXMgYWxzbyBuZWVkIHRoZSBhbGlnbm1lbnQgYXMKKwkgKiBJREVOVElGWV9QQUNLRVQgaXMgZXhlY3V0ZWQgYXMgQVRBX1BST1RfUElPLgorCSAqLworCWlmIChzZGV2LT5zZWN0b3Jfc2l6ZSA+IFBBR0VfU0laRSkKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkic2VjdG9yX3NpemU9JXUgPiBQQUdFX1NJWkUsIFBJTyBtYXkgbWFsZnVuY3Rpb25cbiIsCisJCQlzZGV2LT5zZWN0b3Jfc2l6ZSk7CisKKwlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJCQkgICAgICAgc2Rldi0+c2VjdG9yX3NpemUgLSAxKTsKKwogCWlmIChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0FOKQogCQlzZXRfYml0KFNERVZfRVZUX01FRElBX0NIQU5HRSwgc2Rldi0+c3VwcG9ydGVkX2V2ZW50cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCmluZGV4IGQ3ZTU3ZGIuLjUzOGVjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM2NiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi45IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjEwIgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX21vZGU7CkBAIC0xNjAsOCArMTYwLDggQEAKIAogCXdoaWxlIChsaXN0W2ldICE9IE5VTEwpIHsKIAkJaWYgKCFzdHJjbXAobGlzdFtpXSwgbW9kZWxfbnVtKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCi0JCQkJbW9kZXN0ciwgbGlzdFtpXSk7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKKwkJCQkgICBtb2Rlc3RyLCBsaXN0W2ldKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWkrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IGVmZGQxOGIuLjRjNWI1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM3eCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4xOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4yMiIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9zcGVlZDsKQEAgLTIyOSw4ICsyMjksOCBAQAogCiAJd2hpbGUgKGxpc3RbaV0gIT0gTlVMTCkgewogCQlpZiAoIXN0cmNtcChsaXN0W2ldLCBtb2RlbF9udW0pKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKLQkJCQltb2Rlc3RyLCBsaXN0W2ldKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAorCQkJCSAgIG1vZGVzdHIsIGxpc3RbaV0pOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaSsrOwpAQCAtNjQyLDcgKzY0Miw2IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHB0Mzc0X2ZuMV9wb3J0X29wcyA9IHsKIAkuaW5oZXJpdHMJPSAmaHB0MzcyX3BvcnRfb3BzLAogCS5jYWJsZV9kZXRlY3QJPSBocHQzNzRfZm4xX2NhYmxlX2RldGVjdCwKLQkucHJlcmVzZXQJPSBocHQzN3hfcHJlX3Jlc2V0LAogfTsKIAogLyoqCkBAIC04MDMsNyArODAyLDcgQEAKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDMwMl9wb3J0X29wcwogCX07Ci0JLyogSFBUMzc0IC0gVURNQTEwMCwgZnVuY3Rpb24gMSB1c2VzIGRpZmZlcmVudCBwcmVyZXNldCBtZXRob2QgKi8KKwkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IGNhYmxlX2RldGVjdCBtZXRob2QgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4wID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSBBVEFfUElPNCwKQEAgLTgzOCw3ICs4MzcsOCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NikgeworCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NjoKIAkJLyogTWF5IGJlIGEgbGF0ZXIgY2hpcCBpbiBkaXNndWlzZS4gQ2hlY2sgKi8KIAkJLyogT2xkZXIgY2hpcHMgYXJlIGluIHRoZSBIUFQzNjYgZHJpdmVyLiBJZ25vcmUgdGhlbSAqLwogCQlpZiAocmV2IDwgMykKQEAgLTg2Myw1NCArODYzLDUwIEBACiAJCQljaGlwX3RhYmxlID0gJmhwdDM3MjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogVW5rbm93biBIUFQzNjYgc3VidHlwZSwgIgorCQkJcHJfZXJyKERSVl9OQU1FICI6IFVua25vd24gSFBUMzY2IHN1YnR5cGUsICIKIAkJCSAgICAgICAicGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChkZXYtPmRldmljZSkgewotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MjoKLQkJCS8qIDM3Mk4gaWYgcmV2ID49IDIgKi8KLQkJCWlmIChyZXYgPj0gMikKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKLQkJCWNoaXBfdGFibGUgPSAmaHB0MzcyYTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKLQkJCS8qIDMwMk4gaWYgcmV2ID4gMSAqLwotCQkJaWYgKHJldiA+IDEpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7Ci0JCQkvKiBDaGVjayB0aGlzICovCi0JCQljaGlwX3RhYmxlID0gJmhwdDMwMjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKLQkJCWlmIChyZXYgPiAxKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJcHBpWzBdID0gJmluZm9faHB0MzAyOwotCQkJY2hpcF90YWJsZSA9ICZocHQzNzE7Ci0JCQkvKgotCQkJICogU2luZ2xlIGNoYW5uZWwgZGV2aWNlLCBtYXN0ZXIgaXMgbm90IHByZXNlbnQKLQkJCSAqIGJ1dCB0aGUgQklPUyAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdAotCQkJICogYWJzZW50Ci0JCQkgKi8KLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOwotCQkJbWNyMSAmPSB+MHgwNDsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzc0OgotCQkJY2hpcF90YWJsZSA9ICZocHQzNzQ7Ci0JCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQotCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4wOwotCQkJZWxzZQotCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAicGF0YV9ocHQzN3g6IFBDSSB0YWJsZSBpcyBib2d1cywgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwKLQkJCSAgICAgICBkZXYtPmRldmljZSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzI6CisJCS8qIDM3Mk4gaWYgcmV2ID49IDIgKi8KKwkJaWYgKHJldiA+PSAyKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKKwkJY2hpcF90YWJsZSA9ICZocHQzNzJhOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKKwkJLyogMzAyTiBpZiByZXYgPiAxICovCisJCWlmIChyZXYgPiAxKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJLyogQ2hlY2sgdGhpcyAqLworCQljaGlwX3RhYmxlID0gJmhwdDMwMjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzE6CisJCWlmIChyZXYgPiAxKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJY2hpcF90YWJsZSA9ICZocHQzNzE7CisJCS8qCisJCSAqIFNpbmdsZSBjaGFubmVsIGRldmljZSwgbWFzdGVyIGlzIG5vdCBwcmVzZW50IGJ1dCB0aGUgQklPUworCQkgKiAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdCBhYnNlbnQKKwkJICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOworCQltY3IxICY9IH4weDA0OworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCBtY3IxKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQ6CisJCWNoaXBfdGFibGUgPSAmaHB0Mzc0OworCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQorCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjA7CisJCWVsc2UKKwkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoRFJWX05BTUUgIjogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQkgICAgICAgZGV2LT5kZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJLyogT2sgc28gdGhpcyBpcyBhIGNoaXAgd2Ugc3VwcG9ydCAqLwogCkBAIC05NTcsOCArOTUzLDcgQEAKIAkJdTggc3I7CiAJCXUzMiB0b3RhbCA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgInBhdGFfaHB0Mzd4OiBCSU9TIGhhcyBub3Qgc2V0IHRpbWluZyBjbG9ja3MuXG4iKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBCSU9TIGhhcyBub3Qgc2V0IHRpbWluZyBjbG9ja3MuXG4iKTsKIAogCQkvKiBUaGlzIGlzIHRoZSBwcm9jZXNzIHRoZSBIUFQzNzEgQklPUyBpcyByZXBvcnRlZCB0byB1c2UgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CkBAIC0xMDE0LDcgKzEwMDksNyBAQAogCQkJCQkgICAgICAgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyB8IDB4MTAwKTsKIAkJfQogCQlpZiAoYWRqdXN0ID09IDgpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzN3g6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKKwkJCXByX2VycihEUlZfTkFNRSAiOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlpZiAoZHBsbCA9PSAzKQpAQCAtMTAyMiw4ICsxMDE3LDggQEAKIAkJZWxzZQogCQkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKilocHQzN3hfdGltaW5nc181MDsKIAotCQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogYnVzIGNsb2NrICVkTUh6LCB1c2luZyAlZE1IeiBEUExMLlxuIiwKLQkJICAgICAgIE1IeltjbG9ja19zbG90XSwgTUh6W2RwbGxdKTsKKwkJcHJfaW5mbyhEUlZfTkFNRSAiOiBidXMgY2xvY2sgJWRNSHosIHVzaW5nICVkTUh6IERQTEwuXG4iLAorCQkJTUh6W2Nsb2NrX3Nsb3RdLCBNSHpbZHBsbF0pOwogCX0gZWxzZSB7CiAJCXByaXZhdGVfZGF0YSA9ICh2b2lkICopY2hpcF90YWJsZS0+Y2xvY2tzW2Nsb2NrX3Nsb3RdOwogCQkvKgpAQCAtMTAzNiw4ICsxMDMxLDkgQEAKIAkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MF8zMzsKIAkJaWYgKGNsb2NrX3Nsb3QgPCAyICYmIHBwaVswXSA9PSAmaW5mb19ocHQzNzBhKQogCQkJcHBpWzBdID0gJmluZm9faHB0MzcwYV8zMzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6ICVzIHVzaW5nICVkTUh6IGJ1cyBjbG9jay5cbiIsCi0JCSAgICAgICBjaGlwX3RhYmxlLT5uYW1lLCBNSHpbY2xvY2tfc2xvdF0pOworCisJCXByX2luZm8oRFJWX05BTUUgIjogJXMgdXNpbmcgJWRNSHogYnVzIGNsb2NrLlxuIiwKKwkJCWNoaXBfdGFibGUtPm5hbWUsIE1IeltjbG9ja19zbG90XSk7CiAJfQogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggZDIyMzliYi4uZWNhNjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzeDJuIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjEzIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjE0IgogCiBlbnVtIHsKIAlIUFRfUENJX0ZBU1QJPQkoMSA8PCAzMSksCkBAIC00MTgsNyArNDE4LDcgQEAKIAkJdTE2IHNyOwogCQl1MzIgdG90YWwgPSAwOwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBhdGFfaHB0M3gybjogQklPUyBjbG9jayBkYXRhIG5vdCBzZXQuXG4iKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBCSU9TIGNsb2NrIGRhdGEgbm90IHNldC5cbiIpOwogCiAJCS8qIFRoaXMgaXMgdGhlIHByb2Nlc3MgdGhlIEhQVDM3MSBCSU9TIGlzIHJlcG9ydGVkIHRvIHVzZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKQEAgLTUyOCw4ICs1MjgsNyBAQAogCQlwcGlbMF0gPSAmaW5mb19ocHQzNzJuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJwYXRhX2hwdDN4Mm46IFBDSSB0YWJsZSBpcyBib2d1cyBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQlwcl9lcnIoRFJWX05BTUUgIjogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAogCQkgICAgICAgZGV2LT5kZXZpY2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC01NzksMTIgKzU3OCwxMSBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1QywgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyk7CiAJfQogCWlmIChhZGp1c3QgPT0gOCkgewotCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0M3gybjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOworCQlwcl9lcnIoRFJWX05BTUUgIjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogYnVzIGNsb2NrICVkTUh6LCB1c2luZyA2Nk1IeiBEUExMLlxuIiwKLQkgICAgICAgcGNpX21oeik7CisJcHJfaW5mbyhEUlZfTkFNRSAiOiBidXMgY2xvY2sgJWRNSHosIHVzaW5nIDY2TUh6IERQTEwuXG4iLCBwY2lfbWh6KTsKIAogCS8qCiAJICogU2V0IG91ciBwcml2YXRlIGRhdGEgdXAuIFdlIG9ubHkgbmVlZCBhIGZldyBmbGFncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwppbmRleCA4Y2M1MzZlLi5kN2Q4MDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNjEwLDcgKzYxMCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXBjNTJ4eF9hdGFfcG9ydF9vcHMgPSB7Ci0JLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5zZmZfZGV2X3NlbGVjdAkJPSBtcGM1Mnh4X2F0YV9kZXZfc2VsZWN0LAogCS5zZXRfcGlvbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gbXBjNTJ4eF9hdGFfc2V0X2RtYW1vZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwppbmRleCBiY2E5Y2I4Li40ODdhNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkdDc3MTA1X3ByaXZfbG9jaywgZmxhZ3MpOwogCWlmIChhcmcgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZQUklWKGRldiktPnN0YXRzLAorCXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmc3RhdHMsCiAJCSAgICBzaXplb2Yoc3RydWN0IGlkdDc3MTA1X3N0YXRzKSkgPyAtRUZBVUxUIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggNjU2NDkzYS4uNDI2MTViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC00MDcsMTIgKzQwNywxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBNYXliZSB0aGUgcGFyZW50IGlzIG5vdyBhYmxlIHRvIHN1c3BlbmQuICovCiAJaWYgKHBhcmVudCAmJiAhcGFyZW50LT5wb3dlci5pZ25vcmVfY2hpbGRyZW4gJiYgIWRldi0+cG93ZXIuaXJxX3NhZmUpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlzcGluX3VubG9jaygmZGV2LT5wb3dlci5sb2NrKTsKIAotCQlwbV9yZXF1ZXN0X2lkbGUocGFyZW50KTsKKwkJc3Bpbl9sb2NrKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCQlycG1faWRsZShwYXJlbnQsIFJQTV9BU1lOQyk7CisJCXNwaW5fdW5sb2NrKCZwYXJlbnQtPnBvd2VyLmxvY2spOwogCi0JCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCXNwaW5fbG9jaygmZGV2LT5wb3dlci5sb2NrKTsKIAl9CiAKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQppbmRleCBkN2Y0NjNkLi40MDUyOGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKQEAgLTM5LDQgKzM5LDQgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX0RSQkQpICAgICArPSBkcmJkLwogb2JqLSQoQ09ORklHX0JMS19ERVZfUkJEKSAgICAgKz0gcmJkLm8KIAotc3dpbV9tb2Qtb2Jqcwk6PSBzd2ltLm8gc3dpbV9hc20ubworc3dpbV9tb2QteQk6PSBzd2ltLm8gc3dpbV9hc20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL2FvZS9NYWtlZmlsZQppbmRleCBlNzZkOTk3Li4wNmVhODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKICMKIAogb2JqLSQoQ09ORklHX0FUQV9PVkVSX0VUSCkJKz0gYW9lLm8KLWFvZS1vYmpzIDo9IGFvZWJsay5vIGFvZWNoci5vIGFvZWNtZC5vIGFvZWRldi5vIGFvZW1haW4ubyBhb2VuZXQubworYW9lLXkgOj0gYW9lYmxrLm8gYW9lY2hyLm8gYW9lY21kLm8gYW9lZGV2Lm8gYW9lbWFpbi5vIGFvZW5ldC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggNTE2ZDViYi4uOTI3OTI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMjgzMyw3ICsyODMzLDcgQEAKIAlzZWN0b3JfdCB0b3RhbF9zaXplOwogCUlucXVpcnlEYXRhX3N0cnVjdCAqaW5xX2J1ZmYgPSBOVUxMOwogCi0JZm9yIChsb2d2b2wgPSAwOyBsb2d2b2wgPCBDSVNTX01BWF9MVU47IGxvZ3ZvbCsrKSB7CisJZm9yIChsb2d2b2wgPSAwOyBsb2d2b2wgPD0gaC0+aGlnaGVzdF9sdW47IGxvZ3ZvbCsrKSB7CiAJCWlmICghaC0+ZHJ2W2xvZ3ZvbF0pCiAJCQljb250aW51ZTsKIAkJaWYgKG1lbWNtcChoLT5kcnZbbG9ndm9sXS0+THVuSUQsIGRydi0+THVuSUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDQ0ZTE4YzAuLjQ5ZTZhNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC0xNjQxLDYgKzE2NDEsOSBAQAogCiBzdGF0aWMgdm9pZCBsb29wX2ZyZWUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKKwlpZiAoIWxvLT5sb19xdWV1ZS0+cXVldWVfbG9jaykKKwkJbG8tPmxvX3F1ZXVlLT5xdWV1ZV9sb2NrID0gJmxvLT5sb19xdWV1ZS0+X19xdWV1ZV9sb2NrOworCiAJYmxrX2NsZWFudXBfcXVldWUobG8tPmxvX3F1ZXVlKTsKIAlwdXRfZGlzayhsby0+bG9fZGlzayk7CiAJbGlzdF9kZWwoJmxvLT5sb19saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IGEzMmZiNDEuLmU2ZmM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtNTMsNyArNTMsNiBAQAogI2RlZmluZSBEQkdfQkxLREVWICAgICAgMHgwMTAwCiAjZGVmaW5lIERCR19SWCAgICAgICAgICAweDAyMDAKICNkZWZpbmUgREJHX1RYICAgICAgICAgIDB4MDQwMAotc3RhdGljIERFRklORV9NVVRFWChuYmRfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z2ZsYWdzOwogI2VuZGlmIC8qIE5ERUJVRyAqLwogCkBAIC03MTgsMTEgKzcxNyw5IEBACiAJZHByaW50ayhEQkdfSU9DVEwsICIlczogbmJkX2lvY3RsIGNtZD0lcygweCV4KSBhcmc9JWx1XG4iLAogCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgaW9jdGxfY21kX3RvX2FzY2lpKGNtZCksIGNtZCwgYXJnKTsKIAotCW11dGV4X2xvY2soJm5iZF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCWVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbG8sIGNtZCwgYXJnKTsKIAltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKLQltdXRleF91bmxvY2soJm5iZF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwppbmRleCA5NDllZDA5Li5hMTI2ZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKQEAgLTQ3LDMzICs0NywxNiBAQAogI2RlZmluZSBVU0JfUkVRX0RGVV9ETkxPQUQJMQogI2RlZmluZSBCVUxLX1NJWkUJCTQwOTYKIAotc3RydWN0IGF0aDNrX2RhdGEgewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXU4ICpmd19kYXRhOwotCXUzMiBmd19zaXplOwotCXUzMiBmd19zZW50OwotfTsKLQotc3RhdGljIGludCBhdGgza19sb2FkX2Zpcm13YXJlKHN0cnVjdCBhdGgza19kYXRhICpkYXRhLAotCQkJCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlLAotCQkJCWludCBjb3VudCkKK3N0YXRpYyBpbnQgYXRoM2tfbG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlKQogewogCXU4ICpzZW5kX2J1ZjsKIAlpbnQgZXJyLCBwaXBlLCBsZW4sIHNpemUsIHNlbnQgPSAwOworCWludCBjb3VudCA9IGZpcm13YXJlLT5zaXplOwogCi0JQlRfREJHKCJhdGgzayAlcCB1ZGV2ICVwIiwgZGF0YSwgZGF0YS0+dWRldik7CisJQlRfREJHKCJ1ZGV2ICVwIiwgdWRldik7CiAKLQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVkZXYsIDApOwotCi0JaWYgKCh1c2JfY29udHJvbF9tc2coZGF0YS0+dWRldiwgcGlwZSwKLQkJCQlVU0JfUkVRX0RGVV9ETkxPQUQsCi0JCQkJVVNCX1RZUEVfVkVORE9SLCAwLCAwLAotCQkJCWZpcm13YXJlLCAyMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpKSA8IDApIHsKLQkJQlRfRVJSKCJDYW4ndCBjaGFuZ2UgdG8gbG9hZGluZyBjb25maWd1cmF0aW9uIGVyciIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlzZW50ICs9IDIwOwotCWNvdW50IC09IDIwOworCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUodWRldiwgMCk7CiAKIAlzZW5kX2J1ZiA9IGttYWxsb2MoQlVMS19TSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNlbmRfYnVmKSB7CkBAIC04MSwxMiArNjQsMjMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJbWVtY3B5KHNlbmRfYnVmLCBmaXJtd2FyZS0+ZGF0YSwgMjApOworCWlmICgoZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHBpcGUsCisJCQkJVVNCX1JFUV9ERlVfRE5MT0FELAorCQkJCVVTQl9UWVBFX1ZFTkRPUiwgMCwgMCwKKwkJCQlzZW5kX2J1ZiwgMjAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSkgPCAwKSB7CisJCUJUX0VSUigiQ2FuJ3QgY2hhbmdlIHRvIGxvYWRpbmcgY29uZmlndXJhdGlvbiBlcnIiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2VudCArPSAyMDsKKwljb3VudCAtPSAyMDsKKwogCXdoaWxlIChjb3VudCkgewogCQlzaXplID0gbWluX3QodWludCwgY291bnQsIEJVTEtfU0laRSk7Ci0JCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGF0YS0+dWRldiwgMHgwMik7Ci0JCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUgKyBzZW50LCBzaXplKTsKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1ZGV2LCAweDAyKTsKKwkJbWVtY3B5KHNlbmRfYnVmLCBmaXJtd2FyZS0+ZGF0YSArIHNlbnQsIHNpemUpOwogCi0JCWVyciA9IHVzYl9idWxrX21zZyhkYXRhLT51ZGV2LCBwaXBlLCBzZW5kX2J1Ziwgc2l6ZSwKKwkJZXJyID0gdXNiX2J1bGtfbXNnKHVkZXYsIHBpcGUsIHNlbmRfYnVmLCBzaXplLAogCQkJCQkmbGVuLCAzMDAwKTsKIAogCQlpZiAoZXJyIHx8IChsZW4gIT0gc2l6ZSkpIHsKQEAgLTExMiw1NyArMTA2LDI4IEBACiB7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IGF0aDNrX2RhdGEgKmRhdGE7Ci0JaW50IHNpemU7CiAKIAlCVF9EQkcoImludGYgJXAgaWQgJXAiLCBpbnRmLCBpZCk7CiAKIAlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkYXRhLT51ZGV2ID0gdWRldjsKLQogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgImF0aDNrLTEuZnciLCAmdWRldi0+ZGV2KSA8IDApIHsKLQkJa2ZyZWUoZGF0YSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCXNpemUgPSBtYXhfdCh1aW50LCBmaXJtd2FyZS0+c2l6ZSwgNDA5Nik7Ci0JZGF0YS0+ZndfZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhLT5md19kYXRhKSB7CisJaWYgKGF0aDNrX2xvYWRfZmlybXdhcmUodWRldiwgZmlybXdhcmUpKSB7CiAJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtY3B5KGRhdGEtPmZ3X2RhdGEsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7Ci0JZGF0YS0+Zndfc2l6ZSA9IGZpcm13YXJlLT5zaXplOwotCWRhdGEtPmZ3X3NlbnQgPSAwOwotCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTsKLQlpZiAoYXRoM2tfbG9hZF9maXJtd2FyZShkYXRhLCBkYXRhLT5md19kYXRhLCBkYXRhLT5md19zaXplKSkgewotCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCQlrZnJlZShkYXRhLT5md19kYXRhKTsKLQkJa2ZyZWUoZGF0YSk7CiAJCXJldHVybiAtRUlPOwogCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBhdGgza19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCBhdGgza19kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQogCUJUX0RCRygiYXRoM2tfZGlzY29ubmVjdCBpbnRmICVwIiwgaW50Zik7Ci0KLQlrZnJlZShkYXRhLT5md19kYXRhKTsKLQlrZnJlZShkYXRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDNrX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwppbmRleCAxNDAzM2EzLi5lMmM0OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCkBAIC00MDksNyArNDA5LDggQEAKIAl9CiAKIAlFTlNVUkUoZHJpdmVfc3RhdHVzLCBDRENfRFJJVkVfU1RBVFVTICk7Ci0JRU5TVVJFKG1lZGlhX2NoYW5nZWQsIENEQ19NRURJQV9DSEFOR0VEKTsKKwlpZiAoY2RvLT5jaGVja19ldmVudHMgPT0gTlVMTCAmJiBjZG8tPm1lZGlhX2NoYW5nZWQgPT0gTlVMTCkKKwkJKmNoYW5nZV9jYXBhYmlsaXR5ID0gfihDRENfTUVESUFfQ0hBTkdFRCB8IENEQ19TRUxFQ1RfRElTQyk7CiAJRU5TVVJFKHRyYXlfbW92ZSwgQ0RDX0NMT1NFX1RSQVkgfCBDRENfT1BFTl9UUkFZKTsKIAlFTlNVUkUobG9ja19kb29yLCBDRENfTE9DSyk7CiAJRU5TVVJFKHNlbGVjdF9zcGVlZCwgQ0RDX1NFTEVDVF9TUEVFRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggNWJjNzY1ZC4uODIzOGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMzAsNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwubwogb2JqLSQoQ09ORklHX1NYKQkJKz0gc3gubyBnZW5lcmljX3NlcmlhbC5vCiBvYmotJChDT05GSUdfUklPKQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vCitvYmotJChDT05GSUdfVklSVElPX0NPTlNPTEUpCSs9IHZpcnRpb19jb25zb2xlLm8KIG9iai0kKENPTkZJR19SQVdfRFJJVkVSKQkrPSByYXcubwogb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01TUEVDKQkJKz0gbXNwZWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCmluZGV4IGZjZDg2N2QuLmQ4YjFiNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKQEAgLTUwLDcgKzUwLDcgQEAKIAogY29uZmlnIEFHUF9BTUQKIAl0cmlzdGF0ZSAiQU1EIElyb25nYXRlLCA3NjEsIGFuZCA3NjIgY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQUdQICYmIChYODZfMzIgfHwgQUxQSEEpCisJZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgogCSAgWCBvbiBBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggYjFiNDM2Mi4uNDU2ODFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTQxLDIyICs0MSw4IEBACiAJaWYgKHBhZ2VfbWFwLT5yZWFsID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0jaWZuZGVmIENPTkZJR19YODYKLQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JcGFnZV9tYXAtPnJlbWFwcGVkID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhwYWdlX21hcC0+cmVhbCksCi0JCQkJCSAgICBQQUdFX1NJWkUpOwotCWlmIChwYWdlX21hcC0+cmVtYXBwZWQgPT0gTlVMTCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX21hcC0+cmVhbCk7Ci0JCXBhZ2VfbWFwLT5yZWFsID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotI2Vsc2UKIAlzZXRfbWVtb3J5X3VjKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKIAlwYWdlX21hcC0+cmVtYXBwZWQgPSBwYWdlX21hcC0+cmVhbDsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIHBhZ2VfbWFwLT5yZW1hcHBlZCtpKTsKQEAgLTY4LDEyICs1NCw3IEBACiAKIHN0YXRpYyB2b2lkIGFtZF9mcmVlX3BhZ2VfbWFwKHN0cnVjdCBhbWRfcGFnZV9tYXAgKnBhZ2VfbWFwKQogewotI2lmbmRlZiBDT05GSUdfWDg2Ci0JaW91bm1hcChwYWdlX21hcC0+cmVtYXBwZWQpOwotCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotI2Vsc2UKIAlzZXRfbWVtb3J5X3diKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKLSNlbmRpZgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9tYXAtPnJlYWwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA4NTdkZjEwLi5iMGEwZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTc3NCwyMCArNzc0LDE0IEBACiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsICVzIENoaXBzZXRcbiIsIGludGVsX2FncF9jaGlwc2V0c1tpXS5uYW1lKTsKIAogCS8qCi0JKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCi0JKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgotCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZwotCSovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKLQkJYWdwX3B1dF9icmlkZ2UoYnJpZGdlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKIAkqIFRoZSBmb2xsb3dpbmcgZml4ZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIEJJT1MgaGFzICJmb3Jnb3R0ZW4iIHRvCiAJKiBwcm92aWRlIGFuIGFkZHJlc3MgcmFuZ2UgZm9yIHRoZSBHQVJULgogCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZworCSogVGhpcyBoYXBwZW5zIGJlZm9yZSBwY2lfZW5hYmxlX2RldmljZSgpIGludGVudGlvbmFsbHk7CisJKiBjYWxsaW5nIHBjaV9lbmFibGVfZGV2aWNlKCkgYmVmb3JlIGFzc2lnbmluZyB0aGUgcmVzb3VyY2UKKwkqIHdpbGwgcmVzdWx0IGluIHRoZSBHQVJUIGJlaW5nIGRpc2FibGVkIG9uIG1hY2hpbmVzIHdpdGggc3VjaAorCSogQklPU3MgKHRoZSBHQVJUIGVuZHMgdXAgd2l0aCBhIEJBUiBzdGFydGluZyBhdCAwLCB3aGljaAorCSogY29uZmxpY3RzIGEgbG90IG9mIG90aGVyIGRldmljZXMpLgogCSovCiAJciA9ICZwZGV2LT5yZXNvdXJjZVswXTsKIAlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkgewpAQCAtNzk4LDYgKzc5MiwxNyBAQAogCQl9CiAJfQogCisJLyoKKwkqIElmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHByb3Blcmx5IHNldHVwLCB0aGUgZm9sbG93aW5nIHdpbGwgY2F0Y2gKKwkqIHRoZSBwcm9ibGVtIGFuZCBzaG91bGQgc3RvcCB0aGUgc3lzdGVtIGZyb20gY3Jhc2hpbmcuCisJKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCisJKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkvKiBGaWxsIGluIHRoZSBtb2RlIHJlZ2lzdGVyICovCiAJaWYgKGNhcF9wdHIpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwppbmRleCA4MjZhYjA5Li5mYWIzZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKQEAgLTY4LDYgKzY4LDcgQEAKIAlwaHlzX2FkZHJfdCBnbWFfYnVzX2FkZHI7CiAJdTMyIFBHRVRCTF9zYXZlOwogCXUzMiBfX2lvbWVtICpndHQ7CQkvKiBJOTE1RyAqLworCWJvb2wgY2xlYXJfZmFrZV9hZ3A7IC8qIG9uIGZpcnN0IGFjY2VzcyB2aWEgYWdwLCBmaWxsIHdpdGggc2NyYXRjaCAqLwogCWludCBudW1fZGNhY2hlX2VudHJpZXM7CiAJdW5pb24gewogCQl2b2lkIF9faW9tZW0gKmk5eHhfZmx1c2hfcGFnZTsKQEAgLTg2OSwyMSArODcwLDEyIEBACiAKIHN0YXRpYyBpbnQgaW50ZWxfZmFrZV9hZ3BfY29uZmlndXJlKHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAlpZiAoIWludGVsX2VuYWJsZV9ndHQoKSkKIAkgICAgcmV0dXJuIC1FSU87CiAKKwlpbnRlbF9wcml2YXRlLmNsZWFyX2Zha2VfYWdwID0gdHJ1ZTsKIAlhZ3BfYnJpZGdlLT5nYXJ0X2J1c19hZGRyID0gaW50ZWxfcHJpdmF0ZS5nbWFfYnVzX2FkZHI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzOyBpKyspIHsKLQkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPndyaXRlX2VudHJ5KGludGVsX3ByaXZhdGUuc2NyYXRjaF9wYWdlX2RtYSwKLQkJCQkJCSAgaSwgMCk7Ci0JfQotCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2ktMSk7CS8qIFBDSSBQb3N0aW5nLiAqLwotCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQ1LDYgKzkzNywxMyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCisJaWYgKGludGVsX3ByaXZhdGUuY2xlYXJfZmFrZV9hZ3ApIHsKKwkJaW50IHN0YXJ0ID0gaW50ZWxfcHJpdmF0ZS5iYXNlLnN0b2xlbl9zaXplIC8gUEFHRV9TSVpFOworCQlpbnQgZW5kID0gaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF9tYXBwYWJsZV9lbnRyaWVzOworCQlpbnRlbF9ndHRfY2xlYXJfcmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwkJaW50ZWxfcHJpdmF0ZS5jbGVhcl9mYWtlX2FncCA9IGZhbHNlOworCX0KKwogCWlmIChJTlRFTF9HVFRfR0VOID09IDEgJiYgdHlwZSA9PSBBR1BfRENBQ0hFX01FTU9SWSkKIAkJcmV0dXJuIGk4MTBfaW5zZXJ0X2RjYWNoZV9lbnRyaWVzKG1lbSwgcGdfc3RhcnQsIHR5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYyBiL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCmluZGV4IGUzOTdkZjMuLjE2NDAyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCisrKyBiL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCkBAIC0xODMsMTYgKzE4MywxNiBAQAogfQogCiAjaWZuZGVmIENPTkZJR19CRklOX0pUQUdfQ09NTV9DT05TT0xFCi0jIGRlZmluZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkKLSMgZGVmaW5lIHJlbGVhc2VfY29uc29sZV9zZW0oKQorIyBkZWZpbmUgY29uc29sZV9sb2NrKCkKKyMgZGVmaW5lIGNvbnNvbGVfdW5sb2NrKCkKICNlbmRpZgogc3RhdGljIGludAogYmZpbl9qY193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlpbnQgaTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaSA9IGJmaW5famNfY2lyY193cml0ZShidWYsIGNvdW50KTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl3YWtlX3VwX3Byb2Nlc3MoYmZpbl9qY19rdGhyZWFkKTsKIAlyZXR1cm4gaTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggYjZhZTZlOS4uNzg1NWY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTMyMCw2ICszMjAsNyBAQAogc3RhdGljIGludCBhZGRfc21pKHN0cnVjdCBzbWlfaW5mbyAqc21pKTsKIHN0YXRpYyBpbnQgdHJ5X3NtaV9pbml0KHN0cnVjdCBzbWlfaW5mbyAqc21pKTsKIHN0YXRpYyB2b2lkIGNsZWFudXBfb25lX3NpKHN0cnVjdCBzbWlfaW5mbyAqdG9fY2xlYW4pOworc3RhdGljIHZvaWQgY2xlYW51cF9pcG1pX3NpKHZvaWQpOwogCiBzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQoeGFjdGlvbl9ub3RpZmllcl9saXN0KTsKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfeGFjdGlvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQpAQCAtMzQ1MCwxNiArMzQ1MSw3IEBACiAJbXV0ZXhfbG9jaygmc21pX2luZm9zX2xvY2spOwogCWlmICh1bmxvYWRfd2hlbl9lbXB0eSAmJiBsaXN0X2VtcHR5KCZzbWlfaW5mb3MpKSB7CiAJCW11dGV4X3VubG9jaygmc21pX2luZm9zX2xvY2spOwotI2lmZGVmIENPTkZJR19QQ0kKLQkJaWYgKHBjaV9yZWdpc3RlcmVkKQotCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpcG1pX3BjaV9kcml2ZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUFBDX09GCi0JCWlmIChvZl9yZWdpc3RlcmVkKQotCQkJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlwbWlfb2ZfcGxhdGZvcm1fZHJpdmVyKTsKLSNlbmRpZgotCQlkcml2ZXJfdW5yZWdpc3RlcigmaXBtaV9kcml2ZXIuZHJpdmVyKTsKKwkJY2xlYW51cF9pcG1pX3NpKCk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCiAJCSAgICAgICAiVW5hYmxlIHRvIGZpbmQgYW55IFN5c3RlbSBJbnRlcmZhY2UocylcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDFmNDZmMWMuLmZhZjVhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtMzY0LDEyICszNjQsMTQgQEAKIAkJICAgIHRwbV9wcm90ZWN0ZWRfb3JkaW5hbF9kdXJhdGlvbltvcmRpbmFsICYKIAkJCQkJCSAgIFRQTV9QUk9URUNURURfT1JESU5BTF9NQVNLXTsKIAotCWlmIChkdXJhdGlvbl9pZHggIT0gVFBNX1VOREVGSU5FRCkKKwlpZiAoZHVyYXRpb25faWR4ICE9IFRQTV9VTkRFRklORUQpIHsKIAkJZHVyYXRpb24gPSBjaGlwLT52ZW5kb3IuZHVyYXRpb25bZHVyYXRpb25faWR4XTsKLQlpZiAoZHVyYXRpb24gPD0gMCkKKwkJLyogaWYgZHVyYXRpb24gaXMgMCwgaXQncyBiZWNhdXNlIGNoaXAtPnZlbmRvci5kdXJhdGlvbiB3YXNuJ3QgKi8KKwkJLyogZmlsbGVkIHlldCwgc28gd2Ugc2V0IHRoZSBsb3dlc3QgdGltZW91dCBqdXN0IHRvIGdpdmUgZW5vdWdoICovCisJCS8qIHRpbWUgZm9yIHRwbV9nZXRfdGltZW91dHMoKSB0byBzdWNjZWVkICovCisJCXJldHVybiAoZHVyYXRpb24gPD0gMCA/IEhaIDogZHVyYXRpb24pOworCX0gZWxzZQogCQlyZXR1cm4gMiAqIDYwICogSFo7Ci0JZWxzZQotCQlyZXR1cm4gZHVyYXRpb247CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKTsKIApAQCAtNTc1LDkgKzU3NywxMSBAQAogCWlmIChyYykKIAkJcmV0dXJuOwogCi0JaWYgKGJlMzJfdG9fY3B1KHRwbV9jbWQuaGVhZGVyLm91dC5yZXR1cm5fY29kZSkKLQkgICAgIT0gMyAqIHNpemVvZih1MzIpKQorCWlmIChiZTMyX3RvX2NwdSh0cG1fY21kLmhlYWRlci5vdXQucmV0dXJuX2NvZGUpICE9IDAgfHwKKwkgICAgYmUzMl90b19jcHUodHBtX2NtZC5oZWFkZXIub3V0Lmxlbmd0aCkKKwkgICAgIT0gc2l6ZW9mKHRwbV9jbWQuaGVhZGVyLm91dCkgKyBzaXplb2YodTMyKSArIDMgKiBzaXplb2YodTMyKSkKIAkJcmV0dXJuOworCiAJZHVyYXRpb25fY2FwID0gJnRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwLmR1cmF0aW9uOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fU0hPUlRdID0KIAkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9zaG9ydCkpOwpAQCAtOTM3LDYgKzk0MSwxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwc18xXzIpOwogCitzc2l6ZV90IHRwbV9zaG93X3RpbWVvdXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkICVkICVkXG4iLAorCSAgICAgICAgICAgICAgIGppZmZpZXNfdG9fdXNlY3MoY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0pLAorCSAgICAgICAgICAgICAgIGppZmZpZXNfdG9fdXNlY3MoY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9NRURJVU1dKSwKKwkgICAgICAgICAgICAgICBqaWZmaWVzX3RvX3VzZWNzKGNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10pKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3RpbWVvdXRzKTsKKwogc3NpemVfdCB0cG1fc3RvcmVfY2FuY2VsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmggYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCmluZGV4IDcyZGRiMDMuLmQ4NGZmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaApAQCAtNTYsNiArNTYsOCBAQAogCQkJCWNoYXIgKik7CiBleHRlcm4gc3NpemVfdCB0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKHN0cnVjdCBkZXZpY2UgKiwKIAkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICopOworZXh0ZXJuIHNzaXplX3QgdHBtX3Nob3dfdGltZW91dHMoc3RydWN0IGRldmljZSAqLAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKIAogc3RydWN0IHRwbV9jaGlwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IGMxN2EzMDUuLjBkMWQzOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC0zNzYsNiArMzc2LDcgQEAKIAkJICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FwcywgU19JUlVHTywgdHBtX3Nob3dfY2Fwc18xXzIsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGNhbmNlbCwgU19JV1VTUiB8IFNfSVdHUlAsIE5VTEwsIHRwbV9zdG9yZV9jYW5jZWwpOworc3RhdGljIERFVklDRV9BVFRSKHRpbWVvdXRzLCBTX0lSVUdPLCB0cG1fc2hvd190aW1lb3V0cywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0aXNfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfcHViZWsuYXR0ciwKQEAgLTM4NSw3ICszODYsOCBAQAogCSZkZXZfYXR0cl9vd25lZC5hdHRyLAogCSZkZXZfYXR0cl90ZW1wX2RlYWN0aXZhdGVkLmF0dHIsCiAJJmRldl9hdHRyX2NhcHMuYXR0ciwKLQkmZGV2X2F0dHJfY2FuY2VsLmF0dHIsIE5VTEwsCisJJmRldl9hdHRyX2NhbmNlbC5hdHRyLAorCSZkZXZfYXR0cl90aW1lb3V0cy5hdHRyLCBOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdGlzX2F0dHJfZ3JwID0gewpAQCAtNDkzLDkgKzQ5NSw2IEBACiAJCSAiMS4yIFRQTSAoZGV2aWNlLWlkIDB4JVgsIHJldi1pZCAlZClcbiIsCiAJCSB2ZW5kb3IgPj4gMTYsIGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9SSUQoMCkpKTsKIAotCWlmIChpc19pdHBtKHRvX3BucF9kZXYoZGV2KSkpCi0JCWl0cG0gPSAxOwotCiAJaWYgKGl0cG0pCiAJCWRldl9pbmZvKGRldiwgIkludGVsIGlUUE0gd29ya2Fyb3VuZCBlbmFibGVkXG4iKTsKIApAQCAtNjM3LDYgKzYzNiw5IEBACiAJZWxzZQogCQlpbnRlcnJ1cHRzID0gMDsKIAorCWlmIChpc19pdHBtKHBucF9kZXYpKQorCQlpdHBtID0gMTsKKwogCXJldHVybiB0cG1fdGlzX2luaXQoJnBucF9kZXYtPmRldiwgc3RhcnQsIGxlbiwgaXJxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3R0eS9odmMvdmlydGlvX2NvbnNvbGUuYwpyZW5hbWUgdG8gZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggODk2YTJjZS4uNDkwMzkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvaHZjL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMxLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlICJodmNfY29uc29sZS5oIgorI2luY2x1ZGUgIi4uL3R0eS9odmMvaHZjX2NvbnNvbGUuaCIKIAogLyoKICAqIFRoaXMgaXMgYSBnbG9iYWwgc3RydWN0IGZvciBzdG9yaW5nIGNvbW1vbiBkYXRhIGZvciBhbGwgdGhlIGRldmljZXMKQEAgLTE0NjIsNiArMTQ2MywxNyBAQAogCXNwaW5fdW5sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIG91dF9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworfQorCiBzdGF0aWMgdm9pZCBpbl9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCBwb3J0ICpwb3J0OwpAQCAtMTU2Niw3ICsxNTc4LDcgQEAKIAkgKi8KIAlqID0gMDsKIAlpb19jYWxsYmFja3Nbal0gPSBpbl9pbnRyOwotCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CiAJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CiAJaiArPSAyOwpAQCAtMTU4MCw3ICsxNTkyLDcgQEAKIAkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKIAkJCWogKz0gMjsKIAkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7Ci0JCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKIAkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCmluZGV4IGNmYjBmNTIuLmVmZmU3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCkBAIC0yMDIsMTcgKzIwMiwyMSBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiUE0tVGltZXIgaGFkIGluY29uc2lzdGVudCByZXN1bHRzOiIKIAkJCSAgICAgICAiIDB4JSNsbHgsIDB4JSNsbHggLSBhYm9ydGluZy5cbiIsCiAJCQkgICAgICAgdmFsdWUxLCB2YWx1ZTIpOworCQkJcG10bXJfaW9wb3J0ID0gMDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChpID09IEFDUElfUE1fUkVBRF9DSEVDS1MpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlBNLVRpbWVyIGZhaWxlZCBjb25zaXN0ZW5jeSBjaGVjayAiCiAJCQkgICAgICAgIiAoMHglI2xseCkgLSBhYm9ydGluZy5cbiIsIHZhbHVlMSk7CisJCQlwbXRtcl9pb3BvcnQgPSAwOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpZiAodmVyaWZ5X3BtdG1yX3JhdGUoKSAhPSAwKQorCWlmICh2ZXJpZnlfcG10bXJfcmF0ZSgpICE9IDApeworCQlwbXRtcl9pb3BvcnQgPSAwOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2FjcGlfcG0sCiAJCQkJCQlQTVRNUl9USUNLU19QRVJfU0VDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKaW5kZXggMDFiODg2ZS4uNzljNDdlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKQEAgLTE5Niw5ICsxOTYsOSBAQAogCWNsa2V2dC5jbGtldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xrZXZ0LmNsa2V2dCkgKyAxOwogCWNsa2V2dC5jbGtldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAKLQlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKLQogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xrZXZ0LmNsa2V2dCk7CisKKwlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCA0YTVlY2M1Li4yM2UwMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTgyNiw4ICs4MjYsNiBAQAogLyogRGlzcGxheSBhbmQgZGVjb2RlIHZhcmlvdXMgTkIgcmVnaXN0ZXJzIGZvciBkZWJ1ZyBwdXJwb3Nlcy4gKi8KIHN0YXRpYyB2b2lkIGFtZDY0X2R1bXBfbWlzY19yZWdzKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQlpbnQgZ2FuZ2VkOwotCiAJZGVidWdmMSgiRjN4RTggKE5CIENhcCk6IDB4JTA4eFxuIiwgcHZ0LT5uYmNhcCk7CiAKIAlkZWJ1Z2YxKCIgIE5CIHR3byBjaGFubmVsIERSQU0gY2FwYWJsZTogJXNcbiIsCkBAIC04NTEsMjggKzg0OSwxOSBAQAogCWRlYnVnZjEoIiAgRHJhbUhvbGVWYWxpZDogJXNcbiIsCiAJCShwdnQtPmRoYXIgJiBESEFSX1ZBTElEKSA/ICJ5ZXMiIDogIm5vIik7CiAKKwlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKKwogCS8qIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBwb2ludCBpcyBGYW0xMGggYW5kIGFib3ZlICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikgewotCQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKQogCQlyZXR1cm47Ci0JfQorCisJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDEsIHB2dCk7CiAKIAlhbWQ2NF9pbmZvKCJ1c2luZyAlcyBzeW5kcm9tZXMuXG4iLCAoKHB2dC0+c3luX3R5cGUgPT0gOCkgPyAieDgiIDogIng0IikpOwogCiAJLyogT25seSBpZiBOT1QgZ2FuZ2VkIGRvZXMgZGNscjEgaGF2ZSB2YWxpZCBpbmZvICovCiAJaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpCiAJCWFtZDY0X2R1bXBfZHJhbWNmZ19sb3cocHZ0LT5kY2xyMSwgMSk7Ci0KLQkvKgotCSAqIERldGVybWluZSBpZiBnYW5nZWQgYW5kIHRoZW4gZHVtcCBtZW1vcnkgc2l6ZXMgZm9yIGZpcnN0IGNvbnRyb2xsZXIsCi0JICogYW5kIGlmIE5PVCBnYW5nZWQgZHVtcCBpbmZvIGZvciAybmQgY29udHJvbGxlci4KLQkgKi8KLQlnYW5nZWQgPSBkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCk7Ci0KLQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKLQotCWlmICghZ2FuZ2VkKQotCQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMSwgcHZ0KTsKIH0KIAogLyogUmVhZCBpbiBib3RoIG9mIERCQU0gcmVnaXN0ZXJzICovCkBAIC0xNjQ0LDExICsxNjMzLDEwIEBACiAJCSAgICAgICBXQVJOX09OKGN0cmwgIT0gMCk7CiAJfQogCi0JZGVidWdmMSgiRjJ4JWQ4MCAoRFJBTSBCYW5rIEFkZHJlc3MgTWFwcGluZyk6IDB4JTA4eFxuIiwKLQkJY3RybCwgY3RybCA/IHB2dC0+ZGJhbTEgOiBwdnQtPmRiYW0wKTsKKwlkYmFtID0gKGN0cmwgJiYgIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgPyBwdnQtPmRiYW0xIDogcHZ0LT5kYmFtMDsKKwlkY3NiID0gKGN0cmwgJiYgIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgPyBwdnQtPmRjc2IxIDogcHZ0LT5kY3NiMDsKIAotCWRiYW0gPSBjdHJsID8gcHZ0LT5kYmFtMSA6IHB2dC0+ZGJhbTA7Ci0JZGNzYiA9IGN0cmwgPyBwdnQtPmRjc2IxIDogcHZ0LT5kY3NiMDsKKwlkZWJ1Z2YxKCJGMnglZDgwIChEUkFNIEJhbmsgQWRkcmVzcyBNYXBwaW5nKTogMHglMDh4XG4iLCBjdHJsLCBkYmFtKTsKIAogCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJEQ1QlZCBjaGlwIHNlbGVjdHM6XG4iLCBjdHJsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggZDgxY2M3NC4uNTRkNzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIHZvaWQgbG53X2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gKHN0cnVjdCBsbndfZ3BpbyAqKWdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGJhc2UsIGdwaW87CiAJdm9pZCBfX2lvbWVtICpnZWRyOwogCXUzMiBnZWRyX3Y7CkBAIC0yMDYsNyArMjA2LDEyIEBACiAJCS8qIGNsZWFyIHRoZSBlZGdlIGRldGVjdCBzdGF0dXMgYml0ICovCiAJCXdyaXRlbChnZWRyX3YsIGdlZHIpOwogCX0KLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQorCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7CisJZWxzZQorCQlkZXZfd2FybihsbnctPmNoaXAuZGV2LCAibWlzc2luZyBFT0kgaGFuZGxlciBmb3IgaXJxICVkXG4iLCBpcnEpOworCiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxud19ncGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggYTI2MTk3Mi4uYjQ3MzQyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtNjAsNiArNjAsNyBAQAogCXVuc2lnbmVkIGdwaW9fc3RhcnQ7CiAJdWludDE2X3QgcmVnX291dHB1dDsKIAl1aW50MTZfdCByZWdfZGlyZWN0aW9uOworCXN0cnVjdCBtdXRleCBpMmNfbG9jazsKIAogI2lmZGVmIENPTkZJR19HUElPX1BDQTk1M1hfSVJRCiAJc3RydWN0IG11dGV4IGlycV9sb2NrOwpAQCAtMTE5LDEzICsxMjAsMTcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJcmVnX3ZhbCA9IGNoaXAtPnJlZ19kaXJlY3Rpb24gfCAoMXUgPDwgb2ZmKTsKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX0RJUkVDVElPTiwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBleGl0OwogCiAJY2hpcC0+cmVnX2RpcmVjdGlvbiA9IHJlZ192YWw7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwY2E5NTN4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKQEAgLTEzNyw2ICsxNDIsNyBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAkvKiBzZXQgb3V0cHV0IGxldmVsICovCiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKQEAgLTE0NSw3ICsxNTEsNyBAQAogCiAJcmV0ID0gcGNhOTUzeF93cml0ZV9yZWcoY2hpcCwgUENBOTUzWF9PVVRQVVQsIHJlZ192YWwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXhpdDsKIAogCWNoaXAtPnJlZ19vdXRwdXQgPSByZWdfdmFsOwogCkBAIC0xNTMsMTAgKzE1OSwxMyBAQAogCXJlZ192YWwgPSBjaGlwLT5yZWdfZGlyZWN0aW9uICYgfigxdSA8PCBvZmYpOwogCXJldCA9IHBjYTk1M3hfd3JpdGVfcmVnKGNoaXAsIFBDQTk1M1hfRElSRUNUSU9OLCByZWdfdmFsKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfZGlyZWN0aW9uID0gcmVnX3ZhbDsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXhpdDoKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKQEAgLTE2Nyw3ICsxNzYsOSBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlyZXQgPSBwY2E5NTN4X3JlYWRfcmVnKGNoaXAsIFBDQTk1M1hfSU5QVVQsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlpZiAocmV0IDwgMCkgewogCQkvKiBOT1RFOiAgZGlhZ25vc3RpYyBhbHJlYWR5IGVtaXR0ZWQ7IHRoYXQncyBhbGwgd2Ugc2hvdWxkCiAJCSAqIGRvIHVubGVzcyBncGlvXypfdmFsdWVfY2Fuc2xlZXAoKSBjYWxscyBiZWNvbWUgZGlmZmVyZW50CkBAIC0xODcsNiArMTk4LDcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKIAllbHNlCkBAIC0xOTQsOSArMjA2LDExIEBACiAKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX09VVFBVVCwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfb3V0cHV0ID0gcmVnX3ZhbDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjYTk1M3hfc2V0dXBfZ3BpbyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLCBpbnQgZ3Bpb3MpCkBAIC01MTcsNiArNTMxLDggQEAKIAogCWNoaXAtPm5hbWVzID0gcGRhdGEtPm5hbWVzOwogCisJbXV0ZXhfaW5pdCgmY2hpcC0+aTJjX2xvY2spOworCiAJLyogaW5pdGlhbGl6ZSBjYWNoZWQgcmVnaXN0ZXJzIGZyb20gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLgogCSAqIHdlIGNhbid0IHNoYXJlIHRoaXMgY2hpcCB3aXRoIGFub3RoZXIgaTJjIG1hc3Rlci4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggYmVhOTY2Zi4uMDkwMmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTEwMCw3ICsxMDAsMTAgQEAKIGNvbmZpZyBEUk1fSTkxNQogCXRyaXN0YXRlICJpOTE1IGRyaXZlciIKIAlkZXBlbmRzIG9uIEFHUF9JTlRFTAorCSMgd2UgbmVlZCBzaG1mcyBmb3IgdGhlIHN3YXBwYWJsZSBiYWNraW5nIHN0b3JlLCBhbmQgaW4gcGFydGljdWxhcgorCSMgdGhlIHNobWVtX3JlYWRwYWdlKCkgd2hpY2ggZGVwZW5kcyB1cG9uIHRtcGZzCiAJc2VsZWN0IFNITUVNCisJc2VsZWN0IFRNUEZTCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKaW5kZXggMmJhYTY3MC4uNjU0ZmFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKQEAgLTI2NzQsMyArMjY3NCwyMyBAQAogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KKwordm9pZCBkcm1fbW9kZV9jb25maWdfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKKwkJaWYgKGNydGMtPmZ1bmNzLT5yZXNldCkKKwkJCWNydGMtPmZ1bmNzLT5yZXNldChjcnRjKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQorCQlpZiAoZW5jb2Rlci0+ZnVuY3MtPnJlc2V0KQorCQkJZW5jb2Rlci0+ZnVuY3MtPnJlc2V0KGVuY29kZXIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKQorCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+cmVzZXQpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5yZXNldChjb25uZWN0b3IpOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25maWdfcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDk1MmIzZDQuLjkyMzY5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTM0MywxMyArMzQzLDEyIEBACiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWJvb2wgcmV0ID0gdHJ1ZTsKIAotCWFkanVzdGVkX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBtb2RlKTsKLQogCWNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpOwotCiAJaWYgKCFjcnRjLT5lbmFibGVkKQogCQlyZXR1cm4gdHJ1ZTsKIAorCWFkanVzdGVkX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBtb2RlKTsKKwogCXNhdmVkX2h3bW9kZSA9IGNydGMtPmh3bW9kZTsKIAlzYXZlZF9tb2RlID0gY3J0Yy0+bW9kZTsKIAlzYXZlZF94ID0gY3J0Yy0+eDsKQEAgLTQzNywxMCArNDM2LDkgQEAKIAkgKi8KIAlkcm1fY2FsY190aW1lc3RhbXBpbmdfY29uc3RhbnRzKGNydGMpOwogCi0JLyogWFhYIGZyZWUgYWRqdXN0ZWRtb2RlICovCi0JZHJtX21vZGVfZGVzdHJveShkZXYsIGFkanVzdGVkX21vZGUpOwogCS8qIEZJWE1FOiBhZGQgc3VicGl4ZWwgb3JkZXIgKi8KIGRvbmU6CisJZHJtX21vZGVfZGVzdHJveShkZXYsIGFkanVzdGVkX21vZGUpOwogCWlmICghcmV0KSB7CiAJCWNydGMtPmh3bW9kZSA9IHNhdmVkX2h3bW9kZTsKIAkJY3J0Yy0+bW9kZSA9IHNhdmVkX21vZGU7CkBAIC00OTcsMTQgKzQ5NSwxNyBAQAogCiAJY3J0Y19mdW5jcyA9IHNldC0+Y3J0Yy0+aGVscGVyX3ByaXZhdGU7CiAKKwlpZiAoIXNldC0+bW9kZSkKKwkJc2V0LT5mYiA9IE5VTEw7CisKIAlpZiAoc2V0LT5mYikgewogCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gW0ZCOiVkXSAjY29ubmVjdG9ycz0lZCAoeCB5KSAoJWkgJWkpXG4iLAogCQkJCXNldC0+Y3J0Yy0+YmFzZS5pZCwgc2V0LT5mYi0+YmFzZS5pZCwKIAkJCQkoaW50KXNldC0+bnVtX2Nvbm5lY3RvcnMsIHNldC0+eCwgc2V0LT55KTsKIAl9IGVsc2UgewotCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gW05PRkJdICNjb25uZWN0b3JzPSVkICh4IHkpICglaSAlaSlcbiIsCi0JCQkJc2V0LT5jcnRjLT5iYXNlLmlkLCAoaW50KXNldC0+bnVtX2Nvbm5lY3RvcnMsCi0JCQkJc2V0LT54LCBzZXQtPnkpOworCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gW05PRkJdXG4iLCBzZXQtPmNydGMtPmJhc2UuaWQpOworCQlzZXQtPm1vZGUgPSBOVUxMOworCQlzZXQtPm51bV9jb25uZWN0b3JzID0gMDsKIAl9CiAKIAlkZXYgPSBzZXQtPmNydGMtPmRldjsKQEAgLTY0OSw4ICs2NTAsOCBAQAogCQltb2RlX2NoYW5nZWQgPSB0cnVlOwogCiAJaWYgKG1vZGVfY2hhbmdlZCkgewotCQlzZXQtPmNydGMtPmVuYWJsZWQgPSAoc2V0LT5tb2RlICE9IE5VTEwpOwotCQlpZiAoc2V0LT5tb2RlICE9IE5VTEwpIHsKKwkJc2V0LT5jcnRjLT5lbmFibGVkID0gZHJtX2hlbHBlcl9jcnRjX2luX3VzZShzZXQtPmNydGMpOworCQlpZiAoc2V0LT5jcnRjLT5lbmFibGVkKSB7CiAJCQlEUk1fREVCVUdfS01TKCJhdHRlbXB0aW5nIHRvIHNldCBtb2RlIGZyb20iCiAJCQkJCSIgdXNlcnNwYWNlXG4iKTsKIAkJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc2V0LT5tb2RlKTsKQEAgLTY2NSw2ICs2NjYsMTIgQEAKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KKwkJCURSTV9ERUJVR19LTVMoIlNldHRpbmcgY29ubmVjdG9yIERQTVMgc3RhdGUgdG8gb25cbiIpOworCQkJZm9yIChpID0gMDsgaSA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgeworCQkJCURSTV9ERUJVR19LTVMoIlx0W0NPTk5FQ1RPUjolZDolc10gc2V0IERQTVMgb25cbiIsIHNldC0+Y29ubmVjdG9yc1tpXS0+YmFzZS5pZCwKKwkJCQkJICAgICAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShzZXQtPmNvbm5lY3RvcnNbaV0pKTsKKwkJCQlzZXQtPmNvbm5lY3RvcnNbaV0tPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09OOworCQkJfQogCQl9CiAJCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CiAJfSBlbHNlIGlmIChmYl9jaGFuZ2VkKSB7CkBAIC02ODEsMTIgKzY4OCw2IEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9Ci0JRFJNX0RFQlVHX0tNUygiU2V0dGluZyBjb25uZWN0b3IgRFBNUyBzdGF0ZSB0byBvblxuIik7Ci0JZm9yIChpID0gMDsgaSA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewotCQlEUk1fREVCVUdfS01TKCJcdFtDT05ORUNUT1I6JWQ6JXNdIHNldCBEUE1TIG9uXG4iLCBzZXQtPmNvbm5lY3RvcnNbaV0tPmJhc2UuaWQsCi0JCQkgICAgICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKHNldC0+Y29ubmVjdG9yc1tpXSkpOwotCQlzZXQtPmNvbm5lY3RvcnNbaV0tPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09OOwotCX0KIAogCWtmcmVlKHNhdmVfY29ubmVjdG9ycyk7CiAJa2ZyZWUoc2F2ZV9lbmNvZGVycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCAwMDU0ZTk1Li4zZGFkZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTEyNTAsNyArMTI1MCw3IEBACiAgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBpbiB0aGVpciB2YmxhbmsgaW50ZXJydXB0IGhhbmRsZXJzIHRvCiAgKiB1cGRhdGUgdGhlIHZibGFuayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCiAgKi8KLXZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCitib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewogCXUzMiB2Ymxjb3VudDsKIAlzNjQgZGlmZl9uczsKQEAgLTEyNTgsNyArMTI1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlmICghZGV2LT5udW1fY3J0Y3MpCi0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogTmVlZCB0aW1lc3RhbXAgbG9jayB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZXhlY3V0aW9uIHdpdGgKIAkgKiB2YmxhbmsgZW5hYmxlL2Rpc2FibGUsIGFzIHRoaXMgd291bGQgY2F1c2UgaW5jb25zaXN0ZW50CkBAIC0xMjY5LDcgKzEyNjksNyBAQAogCS8qIFZibGFuayBpcnEgaGFuZGxpbmcgZGlzYWJsZWQuIE5vdGhpbmcgdG8gZG8uICovCiAJaWYgKCFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBGZXRjaCBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCBmb3IgdGhpcyB2YmxhbmsgaW50ZXJ2YWwgZnJvbQpAQCAtMTMxMSw1ICsxMzExLDYgQEAKIAlkcm1faGFuZGxlX3ZibGFua19ldmVudHMoZGV2LCBjcnRjKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOworCXJldHVybiB0cnVlOwogfQogRVhQT1JUX1NZTUJPTChkcm1faGFuZGxlX3ZibGFuayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA4NDRmM2M5Li4xN2JkNzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7Ci0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTFBfUklORyhkZXZfcHJpdik7CisJaW50IHJldDsKIAogCW1hc3Rlcl9wcml2LT5zYXJlYSA9IGRybV9nZXRzYXJlYShkZXYpOwogCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWEpIHsKQEAgLTE2MywzMyArMTYzLDIyIEBACiAJfQogCiAJaWYgKGluaXQtPnJpbmdfc2l6ZSAhPSAwKSB7Ci0JCWlmIChyaW5nLT5vYmogIT0gTlVMTCkgeworCQlpZiAoTFBfUklORyhkZXZfcHJpdiktPm9iaiAhPSBOVUxMKSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CiAJCQlEUk1fRVJST1IoIkNsaWVudCB0cmllZCB0byBpbml0aWFsaXplIHJpbmdidWZmZXIgaW4gIgogCQkJCSAgIkdFTSBtb2RlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcmluZy0+c2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKLQotCQlyaW5nLT5tYXAub2Zmc2V0ID0gaW5pdC0+cmluZ19zdGFydDsKLQkJcmluZy0+bWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JCXJpbmctPm1hcC50eXBlID0gMDsKLQkJcmluZy0+bWFwLmZsYWdzID0gMDsKLQkJcmluZy0+bWFwLm10cnIgPSAwOwotCi0JCWRybV9jb3JlX2lvcmVtYXBfd2MoJnJpbmctPm1hcCwgZGV2KTsKLQotCQlpZiAocmluZy0+bWFwLmhhbmRsZSA9PSBOVUxMKSB7CisJCXJldCA9IGludGVsX3JlbmRlcl9yaW5nX2luaXRfZHJpKGRldiwKKwkJCQkJCSBpbml0LT5yaW5nX3N0YXJ0LAorCQkJCQkJIGluaXQtPnJpbmdfc2l6ZSk7CisJCWlmIChyZXQpIHsKIAkJCWk5MTVfZG1hX2NsZWFudXAoZGV2KTsKLQkJCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCi0JCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAotCXJpbmctPnZpcnR1YWxfc3RhcnQgPSByaW5nLT5tYXAuaGFuZGxlOwotCiAJZGV2X3ByaXYtPmNwcCA9IGluaXQtPmNwcDsKIAlkZXZfcHJpdi0+YmFja19vZmZzZXQgPSBpbml0LT5iYWNrX29mZnNldDsKIAlkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ID0gaW5pdC0+ZnJvbnRfb2Zmc2V0OwpAQCAtMTIyNiw5ICsxMjE1LDE1IEBACiAJaWYgKHJldCkKIAkJRFJNX0lORk8oImZhaWxlZCB0byBmaW5kIFZCSU9TIHRhYmxlc1xuIik7CiAKLQkvKiBpZiB3ZSBoYXZlID4gMSBWR0EgY2FyZHMsIHRoZW4gZGlzYWJsZSB0aGUgcmFkZW9uIFZHQSByZXNvdXJjZXMgKi8KKwkvKiBJZiB3ZSBoYXZlID4gMSBWR0EgY2FyZHMsIHRoZW4gd2UgbmVlZCB0byBhcmJpdHJhdGUgYWNjZXNzCisJICogdG8gdGhlIGNvbW1vbiBWR0EgcmVzb3VyY2VzLgorCSAqCisJICogSWYgd2UgYXJlIGEgc2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAoIVBDSV9ESVNQTEFZX0NMQVNTX1ZHQSksCisJICogdGhlbiB3ZSBkbyBub3QgdGFrZSBwYXJ0IGluIFZHQSBhcmJpdHJhdGlvbiBhbmQgdGhlCisJICogdmdhX2NsaWVudF9yZWdpc3RlcigpIGZhaWxzIHdpdGggLUVOT0RFVi4KKwkgKi8KIAlyZXQgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBpOTE1X3ZnYV9zZXRfZGVjb2RlKTsKLQlpZiAocmV0KQorCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYpCiAJCWdvdG8gY2xlYW51cF9yaW5nYnVmZmVyOwogCiAJaW50ZWxfcmVnaXN0ZXJfZHNtX2hhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDcyZmVhMmIuLmNmYjU2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNjAsNyArNjAsNyBAQAogCiAjZGVmaW5lIElOVEVMX1ZHQV9ERVZJQ0UoaWQsIGluZm8pIHsJCVwKIAkuY2xhc3MgPSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwJXAotCS5jbGFzc19tYXNrID0gMHhmZmZmMDAsCQkJXAorCS5jbGFzc19tYXNrID0gMHhmZjAwMDAsCQkJXAogCS52ZW5kb3IgPSAweDgwODYsCQkJXAogCS5kZXZpY2UgPSBpZCwJCQkJXAogCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAkJXApAQCAtMzU0LDYgKzM1NCw3IEBACiAJCWVycm9yID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZXYpOwogCQlkcm1faXJxX2luc3RhbGwoZGV2KTsKIAogCQkvKiBSZXN1bWUgdGhlIG1vZGVzZXQgZm9yIGV2ZXJ5IGFjdGl2YXRlZCBDUlRDICovCkBAIC01NDIsNiArNTQzLDcgQEAKIAogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwkJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAJCWRybV9pcnFfaW5zdGFsbChkZXYpOwogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQpAQCAtNTY2LDYgKzU2OCwxNCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGk5MTVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogeworCS8qIE9ubHkgYmluZCB0byBmdW5jdGlvbiAwIG9mIHRoZSBkZXZpY2UuIEVhcmx5IGdlbmVyYXRpb25zCisJICogdXNlZCBmdW5jdGlvbiAxIGFzIGEgcGxhY2Vob2xkZXIgZm9yIG11bHRpLWhlYWQuIFRoaXMgY2F1c2VzCisJICogdXMgY29uZnVzaW9uIGluc3RlYWQsIGVzcGVjaWFsbHkgb24gdGhlIHN5c3RlbXMgd2hlcmUgYm90aAorCSAqIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIFBDSS1JRCEKKwkgKi8KKwlpZiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBkcm1fZ2V0X3BjaV9kZXYocGRldiwgZW50LCAmZHJpdmVyKTsKIH0KIApAQCAtNzUyLDYgKzc2Miw5IEBACiAJCWRyaXZlci5kcml2ZXJfZmVhdHVyZXMgJj0gfkRSSVZFUl9NT0RFU0VUOwogI2VuZGlmCiAKKwlpZiAoIShkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpKQorCQlkcml2ZXIuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBOVUxMOworCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA1OTY5ZjQ2Li5hMDE0OWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTU0Myw4ICs1NDMsMTEgQEAKIAkJLyoqIExpc3Qgb2YgYWxsIG9iamVjdHMgaW4gZ3R0X3NwYWNlLiBVc2VkIHRvIHJlc3RvcmUgZ3R0CiAJCSAqIG1hcHBpbmdzIG9uIHJlc3VtZSAqLwogCQlzdHJ1Y3QgbGlzdF9oZWFkIGd0dF9saXN0OwotCQkvKiogRW5kIG9mIG1hcHBhYmxlIHBhcnQgb2YgR1RUICovCisKKwkJLyoqIFVzYWJsZSBwb3J0aW9uIG9mIHRoZSBHVFQgZm9yIEdFTSAqLworCQl1bnNpZ25lZCBsb25nIGd0dF9zdGFydDsKIAkJdW5zaWduZWQgbG9uZyBndHRfbWFwcGFibGVfZW5kOworCQl1bnNpZ25lZCBsb25nIGd0dF9lbmQ7CiAKIAkJc3RydWN0IGlvX21hcHBpbmcgKmd0dF9tYXBwaW5nOwogCQlpbnQgZ3R0X210cnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAzZGZjODQ4Li5jZjRmNzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTE0MCwxMiArMTQwLDE2IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlkcm1fbW1faW5pdCgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwgc3RhcnQsCi0JCSAgICBlbmQgLSBzdGFydCk7CisJZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAKKwlkZXZfcHJpdi0+bW0uZ3R0X3N0YXJ0ID0gc3RhcnQ7CisJZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQgPSBtYXBwYWJsZV9lbmQ7CisJZGV2X3ByaXYtPm1tLmd0dF9lbmQgPSBlbmQ7CiAJZGV2X3ByaXYtPm1tLmd0dF90b3RhbCA9IGVuZCAtIHN0YXJ0OwogCWRldl9wcml2LT5tbS5tYXBwYWJsZV9ndHRfdG90YWwgPSBtaW4oZW5kLCBtYXBwYWJsZV9lbmQpIC0gc3RhcnQ7Ci0JZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQgPSBtYXBwYWJsZV9lbmQ7CisKKwkvKiBUYWtlIG92ZXIgdGhpcyBwb3J0aW9uIG9mIHRoZSBHVFQgKi8KKwlpbnRlbF9ndHRfY2xlYXJfcmFuZ2Uoc3RhcnQgLyBQQUdFX1NJWkUsIChlbmQtc3RhcnQpIC8gUEFHRV9TSVpFKTsKIH0KIAogaW50CkBAIC0xODU3LDcgKzE4NjEsNyBAQAogCiAJc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyaW5nLT5zeW5jX3NlcW5vKTsgaSsrKQogCQlpZiAoc2Vxbm8gPj0gcmluZy0+c3luY19zZXFub1tpXSkKIAkJCXJpbmctPnN5bmNfc2Vxbm9baV0gPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggZGNmZGY0MS4uZDJmNDQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAKIAkJZ290byBlcnI7CiAKIAlzZXFubyA9IGk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHJpbmcpOwotCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUy0xOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyaW5nLT5zeW5jX3NlcW5vKTsgaSsrKSB7CiAJCWlmIChzZXFubyA8IHJpbmctPnN5bmNfc2Vxbm9baV0pIHsKIAkJCS8qIFRoZSBHUFUgY2FuIG5vdCBoYW5kbGUgaXRzIHNlbWFwaG9yZSB2YWx1ZSB3cmFwcGluZywKIAkJCSAqIHNvIGV2ZXJ5IGJpbGxpb24gb3Igc28gZXhlY2J1ZmZlcnMsIHdlIG5lZWQgdG8gc3RhbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXggNzA0MzNhZS4uYjBhYmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKQEAgLTM0LDYgKzM0LDEwIEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCisJLyogRmlyc3QgZmlsbCBvdXIgcG9ydGlvbiBvZiB0aGUgR1RUIHdpdGggc2NyYXRjaCBwYWdlcyAqLworCWludGVsX2d0dF9jbGVhcl9yYW5nZShkZXZfcHJpdi0+bW0uZ3R0X3N0YXJ0IC8gUEFHRV9TSVpFLAorCQkJICAgICAgKGRldl9wcml2LT5tbS5ndHRfZW5kIC0gZGV2X3ByaXYtPm1tLmd0dF9zdGFydCkgLyBQQUdFX1NJWkUpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uZ3R0X2xpc3QsIGd0dF9saXN0KSB7CiAJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGI4ZTUwOWEuLjk3Zjk0NmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTI3NCwyNCArMjc0LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGk5MTVfZ2V0X3ZibGFua190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCitpbnQgaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwKIAkJCSAgICAgIGludCAqbWF4X2Vycm9yLAogCQkJICAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua190aW1lLAogCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGRybV9jcnRjICpkcm1jcnRjOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCi0JaWYgKGNydGMgPCAwIHx8IGNydGMgPj0gZGV2LT5udW1fY3J0Y3MpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNydGMgJWRcbiIsIGNydGMpOworCWlmIChwaXBlIDwgMCB8fCBwaXBlID49IGRldl9wcml2LT5udW1fcGlwZSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgcGlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEdldCBkcm1fY3J0YyB0byB0aW1lc3RhbXA6ICovCi0JZHJtY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgY3J0Yyk7CisJY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgcGlwZSk7CisJaWYgKGNydGMgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgcGlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghY3J0Yy0+ZW5hYmxlZCkgeworCQlEUk1fREVCVUdfS01TKCJjcnRjICVkIGlzIGRpc2FibGVkXG4iLCBwaXBlKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAkvKiBIZWxwZXIgcm91dGluZSBpbiBEUk0gY29yZSBkb2VzIGFsbCB0aGUgd29yazogKi8KLQlyZXR1cm4gZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyhkZXYsIGNydGMsIG1heF9lcnJvciwKLQkJCQkJCSAgICAgdmJsYW5rX3RpbWUsIGZsYWdzLCBkcm1jcnRjKTsKKwlyZXR1cm4gZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyhkZXYsIHBpcGUsIG1heF9lcnJvciwKKwkJCQkJCSAgICAgdmJsYW5rX3RpbWUsIGZsYWdzLAorCQkJCQkJICAgICBjcnRjKTsKIH0KIAogLyoKQEAgLTM0OCw4ICszNTksMTIgQEAKIAkJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKKwl1MzIgc2Vxbm87CiAKKwlpZiAocmluZy0+b2JqID09IE5VTEwpCisJCXJldHVybjsKKworCXNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcpOwogCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGUoZGV2LCBzZXFubyk7CiAKIAlyaW5nLT5pcnFfc2Vxbm8gPSBzZXFubzsKQEAgLTgzMSw2ICs4NDYsOCBAQAogCQlpKys7CiAJZXJyb3ItPnBpbm5lZF9ib19jb3VudCA9IGkgLSBlcnJvci0+YWN0aXZlX2JvX2NvdW50OwogCisJZXJyb3ItPmFjdGl2ZV9ibyA9IE5VTEw7CisJZXJyb3ItPnBpbm5lZF9ibyA9IE5VTEw7CiAJaWYgKGkpIHsKIAkJZXJyb3ItPmFjdGl2ZV9ibyA9IGttYWxsb2Moc2l6ZW9mKCplcnJvci0+YWN0aXZlX2JvKSppLAogCQkJCQkgICBHRlBfQVRPTUlDKTsKQEAgLTExNzksMTggKzExOTYsMTggQEAKIAkJCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwX3BsYW5lKGRldiwgMSk7CiAJCX0KIAotCQlpZiAocGlwZWFfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzKSB7CisJCWlmIChwaXBlYV9zdGF0cyAmIHZibGFua19zdGF0dXMgJiYKKwkJICAgIGRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCkpIHsKIAkJCXZibGFuaysrOwotCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJCWlmICghZGV2X3ByaXYtPmZsaXBfcGVuZGluZ19pc19kb25lKSB7CiAJCQkJaTkxNV9wYWdlZmxpcF9zdGFsbF9jaGVjayhkZXYsIDApOwogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAwKTsKIAkJCX0KIAkJfQogCi0JCWlmIChwaXBlYl9zdGF0cyAmIHZibGFua19zdGF0dXMpIHsKKwkJaWYgKHBpcGViX3N0YXRzICYgdmJsYW5rX3N0YXR1cyAmJgorCQkgICAgZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKSkgewogCQkJdmJsYW5rKys7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpOwogCQkJaWYgKCFkZXZfcHJpdi0+ZmxpcF9wZW5kaW5nX2lzX2RvbmUpIHsKIAkJCQlpOTE1X3BhZ2VmbGlwX3N0YWxsX2NoZWNrKGRldiwgMSk7CiAJCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcChkZXYsIDEpOwpAQCAtMTI3OCwxMiArMTI5NSwxMiBAQAogCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKIAkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfV0FJVDsKIAotCXJldCA9IC1FTk9ERVY7CiAJaWYgKHJpbmctPmlycV9nZXQocmluZykpIHsKIAkJRFJNX1dBSVRfT04ocmV0LCByaW5nLT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCiAJCQkgICAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIpOwogCQlyaW5nLT5pcnFfcHV0KHJpbmcpOwotCX0KKwl9IGVsc2UgaWYgKHdhaXRfZm9yKFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yLCAzMDAwKSkKKwkJcmV0ID0gLUVCVVNZOwogCiAJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJRFJNX0VSUk9SKCJFQlVTWSAtLSByZWM6ICVkIGVtaXR0ZWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggNDBhNDA3Zi4uNWNmYzY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC01MTMsNiArNTEzLDEwIEBACiAjZGVmaW5lICAgR0VONl9CTElUVEVSX1NZTkNfU1RBVFVTCQkJKDEgPDwgMjQpCiAjZGVmaW5lICAgR0VONl9CTElUVEVSX1VTRVJfSU5URVJSVVBUCQkJKDEgPDwgMjIpCiAKKyNkZWZpbmUgR0VONl9CTElUVEVSX0VDT1NLUEQJMHgyMjFkMAorI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9MT0NLX1NISUZUCQkJMTYKKyNkZWZpbmUgICBHRU42X0JMSVRURVJfRkJDX05PVElGWQkJCSgxPDwzKQorCiAjZGVmaW5lIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTAkweDEyMDUwCiAjZGVmaW5lICAgR0VONl9CU0RfU0xFRVBfUFNNSV9DT05UUk9MX1JDX0lMRExfTUVTU0FHRV9NT0RJRllfTUFTSwkoMSA8PCAxNikKICNkZWZpbmUgICBHRU42X0JTRF9TTEVFUF9QU01JX0NPTlRST0xfUkNfSUxETF9NRVNTQUdFX0RJU0FCTEUJCSgxIDw8IDApCkBAIC0yNjI2LDYgKzI2MzAsOCBAQAogI2RlZmluZSBESVNQTEFZX1BPUlRfUExMX0JJT1NfMiAgICAgICAgIDB4NDYwMTQKIAogI2RlZmluZSBQQ0hfRFNQQ0xLX0dBVEVfRAkweDQyMDIwCisjIGRlZmluZSBEUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDkpCisjIGRlZmluZSBEUEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA4KQogIyBkZWZpbmUgRFBGRFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA3KQogIyBkZWZpbmUgRFBBUkJVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCAxNzAzNWI4Li44YTc3ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtNTM1LDYgKzUzNSwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGludGVsX2NydCAqY3J0ID0gaW50ZWxfYXR0YWNoZWRfY3J0KGNvbm5lY3Rvcik7CisKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQorCQljcnQtPmZvcmNlX2hvdHBsdWdfcmVxdWlyZWQgPSAxOworfQorCiAvKgogICogUm91dGluZXMgZm9yIGNvbnRyb2xsaW5nIHN0dWZmIG9uIHRoZSBhbmFsb2cgcG9ydAogICovCkBAIC01NDgsNiArNTU3LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpbnRlbF9jcnRfY29ubmVjdG9yX2Z1bmNzID0geworCS5yZXNldCA9IGludGVsX2NydF9yZXNldCwKIAkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCiAJLmRldGVjdCA9IGludGVsX2NydF9kZXRlY3QsCiAJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggOTg5NjdmMy4uN2U0MmFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTIxMyw2ICsxMjEzLDI2IEBACiAJcmV0dXJuIEk5MTVfUkVBRChEUEZDX0NPTlRST0wpICYgRFBGQ19DVExfRU47CiB9CiAKK3N0YXRpYyB2b2lkIHNhbmR5YnJpZGdlX2JsaXRfZmJjX3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGJsdF9lY29za3BkOworCisJLyogTWFrZSBzdXJlIGJsaXR0ZXIgbm90aWZpZXMgRkJDIG9mIHdyaXRlcyAqLworCV9fZ2VuNl9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CisJYmx0X2Vjb3NrcGQgPSBJOTE1X1JFQUQoR0VONl9CTElUVEVSX0VDT1NLUEQpOworCWJsdF9lY29za3BkIHw9IEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZIDw8CisJCUdFTjZfQkxJVFRFUl9MT0NLX1NISUZUOworCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKKwlibHRfZWNvc2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElGWTsKKwlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7CisJYmx0X2Vjb3NrcGQgJj0gfihHRU42X0JMSVRURVJfRkJDX05PVElGWSA8PAorCQkJIEdFTjZfQkxJVFRFUl9MT0NLX1NISUZUKTsKKwlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7CisJUE9TVElOR19SRUFEKEdFTjZfQkxJVFRFUl9FQ09TS1BEKTsKKwlfX2dlbjZfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOworfQorCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9lbmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAtMTI2Niw2ICsxMjg2LDcgQEAKIAkJSTkxNV9XUklURShTTkJfRFBGQ19DVExfU0EsCiAJCQkgICBTTkJfQ1BVX0ZFTkNFX0VOQUJMRSB8IGRldl9wcml2LT5jZmJfZmVuY2UpOwogCQlJOTE1X1dSSVRFKERQRkNfQ1BVX0ZFTkNFX09GRlNFVCwgY3J0Yy0+eSk7CisJCXNhbmR5YnJpZGdlX2JsaXRfZmJjX3VwZGF0ZShkZXYpOwogCX0KIAogCURSTV9ERUJVR19LTVMoImVuYWJsZWQgZmJjIG9uIHBsYW5lICVkXG4iLCBpbnRlbF9jcnRjLT5wbGFuZSk7CkBAIC01NTMwLDYgKzU1NTEsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwkvKiBSZXNldCBmbGFncyBiYWNrIHRvIHRoZSAndW5rbm93bicgc3RhdHVzIHNvIHRoYXQgdGhleQorCSAqIHdpbGwgYmUgY29ycmVjdGx5IHNldCBvbiB0aGUgaW5pdGlhbCBtb2Rlc2V0LgorCSAqLworCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gMDsKKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKKwlpbnRlbF9jcnRjLT5hY3RpdmUgPSB0cnVlOyAvKiBmb3JjZSB0aGUgcGlwZSBvZmYgb24gc2V0dXBfaW5pdF9jb25maWcgKi8KK30KKwogc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewogCS5kcG1zID0gaW50ZWxfY3J0Y19kcG1zLAogCS5tb2RlX2ZpeHVwID0gaW50ZWxfY3J0Y19tb2RlX2ZpeHVwLApAQCAtNTU0MSw2ICs1NTc0LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAogCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAogCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LApAQCAtNTYzMSw5ICs1NjY1LDcgQEAKIAlkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBsYW5lXSA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1tpbnRlbF9jcnRjLT5waXBlXSA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCi0JaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSAwOwotCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IC0xOwotCWludGVsX2NydGMtPmFjdGl2ZSA9IHRydWU7IC8qIGZvcmNlIHRoZSBwaXBlIG9mZiBvbiBzZXR1cF9pbml0X2NvbmZpZyAqLworCWludGVsX2NydGNfcmVzZXQoJmludGVsX2NydGMtPmJhc2UpOwogCiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQlpbnRlbF9oZWxwZXJfZnVuY3MucHJlcGFyZSA9IGlyb25sYWtlX2NydGNfcHJlcGFyZTsKQEAgLTYyODYsNyArNjMxOCw5IEBACiAKIAkJaWYgKElTX0dFTjUoZGV2KSkgewogCQkJLyogUmVxdWlyZWQgZm9yIEZCQyAqLwotCQkJZHNwY2xrX2dhdGUgfD0gRFBGRFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOworCQkJZHNwY2xrX2dhdGUgfD0gRFBGQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJCQlEUEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJCQlEUEZEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAJCQkvKiBSZXF1aXJlZCBmb3IgQ3hTUiAqLwogCQkJZHNwY2xrX2dhdGUgfD0gRFBBUkJVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKaW5kZXggZjI5NWE3YS4uNjRmZDY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX2lvLmg+CiAjaW5jbHVkZSA8YWNwaS92aWRlby5oPgogCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtNDc2LDcgKzQ3Nyw3IEBACiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JYmFzZSA9IGlvcmVtYXAoYXNscywgT1BSRUdJT05fU0laRSk7CisJYmFzZSA9IGFjcGlfb3NfaW9yZW1hcChhc2xzLCBPUFJFR0lPTl9TSVpFKTsKIAlpZiAoIWJhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggZjZiOWJhYS4uNjIxOGZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMzQsNiArMzQsMTQgQEAKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAKK3N0YXRpYyBpbmxpbmUgaW50IHJpbmdfc3BhY2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCWludCBzcGFjZSA9IChyaW5nLT5oZWFkICYgSEVBRF9BRERSKSAtIChyaW5nLT50YWlsICsgOCk7CisJaWYgKHNwYWNlIDwgMCkKKwkJc3BhY2UgKz0gcmluZy0+c2l6ZTsKKwlyZXR1cm4gc3BhY2U7Cit9CisKIHN0YXRpYyB1MzIgaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yMDQsMTEgKzIxMiw5IEBACiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKHJpbmctPmRldiwgRFJJVkVSX01PREVTRVQpKQogCQlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQocmluZy0+ZGV2KTsKIAllbHNlIHsKLQkJcmluZy0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpICYgSEVBRF9BRERSOworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7CiAJCXJpbmctPnRhaWwgPSBJOTE1X1JFQURfVEFJTChyaW5nKSAmIFRBSUxfQUREUjsKLQkJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKLQkJaWYgKHJpbmctPnNwYWNlIDwgMCkKLQkJCXJpbmctPnNwYWNlICs9IHJpbmctPnNpemU7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTkyMSwzMiArOTI3LDM0IEBACiAJfQogCiAJcmluZy0+dGFpbCA9IDA7Ci0JcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gODsKKwlyaW5nLT5zcGFjZSA9IHJpbmdfc3BhY2UocmluZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IGludGVsX3dhaXRfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLCBpbnQgbikKIHsKLQlpbnQgcmVyZWFkID0gMDsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAJdTMyIGhlYWQ7CiAKKwkvKiBJZiB0aGUgcmVwb3J0ZWQgaGVhZCBwb3NpdGlvbiBoYXMgd3JhcHBlZCBvciBoYXNuJ3QgYWR2YW5jZWQsCisJICogZmFsbGJhY2sgdG8gdGhlIHNsb3cgYW5kIGFjY3VyYXRlIHBhdGguCisJICovCisJaGVhZCA9IGludGVsX3JlYWRfc3RhdHVzX3BhZ2UocmluZywgNCk7CisJaWYgKGhlYWQgPiByaW5nLT5oZWFkKSB7CisJCXJpbmctPmhlYWQgPSBoZWFkOworCQlyaW5nLT5zcGFjZSA9IHJpbmdfc3BhY2UocmluZyk7CisJCWlmIChyaW5nLT5zcGFjZSA+PSBuKQorCQkJcmV0dXJuIDA7CisJfQorCiAJdHJhY2VfaTkxNV9yaW5nX3dhaXRfYmVnaW4gKGRldik7CiAJZW5kID0gamlmZmllcyArIDMgKiBIWjsKIAlkbyB7Ci0JCS8qIElmIHRoZSByZXBvcnRlZCBoZWFkIHBvc2l0aW9uIGhhcyB3cmFwcGVkIG9yIGhhc24ndCBhZHZhbmNlZCwKLQkJICogZmFsbGJhY2sgdG8gdGhlIHNsb3cgYW5kIGFjY3VyYXRlIHBhdGguCi0JCSAqLwotCQloZWFkID0gaW50ZWxfcmVhZF9zdGF0dXNfcGFnZShyaW5nLCA0KTsKLQkJaWYgKHJlcmVhZCkKLQkJCWhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKTsKLQkJcmluZy0+aGVhZCA9IGhlYWQgJiBIRUFEX0FERFI7Ci0JCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7Ci0JCWlmIChyaW5nLT5zcGFjZSA8IDApCi0JCQlyaW5nLT5zcGFjZSArPSByaW5nLT5zaXplOworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAkJaWYgKHJpbmctPnNwYWNlID49IG4pIHsKIAkJCXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZChkZXYpOwogCQkJcmV0dXJuIDA7CkBAIC05NjEsNyArOTY5LDYgQEAKIAkJbXNsZWVwKDEpOwogCQlpZiAoYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKQogCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXJlcmVhZCA9IDE7CiAJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSk7CiAJdHJhY2VfaTkxNV9yaW5nX3dhaXRfZW5kIChkZXYpOwogCXJldHVybiAtRUJVU1k7CkBAIC0xMjkyLDYgKzEyOTksNDggQEAKIAlyZXR1cm4gaW50ZWxfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIHJpbmcpOwogfQogCitpbnQgaW50ZWxfcmVuZGVyX3JpbmdfaW5pdF9kcmkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKKworCSpyaW5nID0gcmVuZGVyX3Jpbmc7CisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpIHsKKwkJcmluZy0+YWRkX3JlcXVlc3QgPSBnZW42X2FkZF9yZXF1ZXN0OworCQlyaW5nLT5pcnFfZ2V0ID0gZ2VuNl9yZW5kZXJfcmluZ19nZXRfaXJxOworCQlyaW5nLT5pcnFfcHV0ID0gZ2VuNl9yZW5kZXJfcmluZ19wdXRfaXJxOworCX0gZWxzZSBpZiAoSVNfR0VONShkZXYpKSB7CisJCXJpbmctPmFkZF9yZXF1ZXN0ID0gcGNfcmVuZGVyX2FkZF9yZXF1ZXN0OworCQlyaW5nLT5nZXRfc2Vxbm8gPSBwY19yZW5kZXJfZ2V0X3NlcW5vOworCX0KKworCXJpbmctPmRldiA9IGRldjsKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+YWN0aXZlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5yZXF1ZXN0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5ncHVfd3JpdGVfbGlzdCk7CisKKwlyaW5nLT5zaXplID0gc2l6ZTsKKwlyaW5nLT5lZmZlY3RpdmVfc2l6ZSA9IHJpbmctPnNpemU7CisJaWYgKElTX0k4MzAocmluZy0+ZGV2KSkKKwkJcmluZy0+ZWZmZWN0aXZlX3NpemUgLT0gMTI4OworCisJcmluZy0+bWFwLm9mZnNldCA9IHN0YXJ0OworCXJpbmctPm1hcC5zaXplID0gc2l6ZTsKKwlyaW5nLT5tYXAudHlwZSA9IDA7CisJcmluZy0+bWFwLmZsYWdzID0gMDsKKwlyaW5nLT5tYXAubXRyciA9IDA7CisKKwlkcm1fY29yZV9pb3JlbWFwX3djKCZyaW5nLT5tYXAsIGRldik7CisJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgorCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmluZy0+dmlydHVhbF9zdGFydCA9ICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKXJpbmctPm1hcC5oYW5kbGU7CisJcmV0dXJuIDA7Cit9CisKIGludCBpbnRlbF9pbml0X2JzZF9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4IDViMGFiZmEuLjZkNmZkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTE2Niw0ICsxNjYsNyBAQAogdTMyIGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7CiB2b2lkIGludGVsX3Jpbmdfc2V0dXBfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKIAorLyogRFJJIHdhcnRzICovCitpbnQgaW50ZWxfcmVuZGVyX3JpbmdfaW5pdF9kcmkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSk7CisKICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IDQ1Y2QzNzYuLjZhMDljMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTQ3MywyMCArNDczLDYgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWkgPSAzOwotCXdoaWxlIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1BFTkRJTkcgJiYgaS0tKSB7Ci0JCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKLQkJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAotCQkJCQkgICZzdGF0dXMpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURSTV9ERUJVR19LTVMoImNvbW1hbmQgcmV0dXJucyByZXNwb25zZSAlcyBbJWRdXG4iLAotCQkJICAgICAgc3RhdHVzIDw9IFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQID8gY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdIDogIj8/PyIsCi0JCQkgICAgICBzdGF0dXMpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ5Nyw2ICs0ODMsOCBAQAogCXU4IHN0YXR1czsKIAlpbnQgaTsKIAorCURSTV9ERUJVR19LTVMoIiVzOiBSOiAiLCBTRFZPX05BTUUoaW50ZWxfc2R2bykpOworCiAJLyoKIAkgKiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBhbGwgY29tbWFuZHMgd2lsbCBiZQogCSAqIHByb2Nlc3NlZCB3aXRoaW4gMTXCtXMsIGFuZCB0aGF0IHdlIG5lZWQgb25seSBwb2xsCkBAIC01MDUsMTQgKzQ5MywxOSBAQAogCSAqCiAJICogQ2hlY2sgNSB0aW1lcyBpbiBjYXNlIHRoZSBoYXJkd2FyZSBmYWlsZWQgdG8gcmVhZCB0aGUgZG9jcy4KIAkgKi8KLQlkbyB7CisJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAorCQkJCSAgU0RWT19JMkNfQ01EX1NUQVRVUywKKwkJCQkgICZzdGF0dXMpKQorCQlnb3RvIGxvZ19mYWlsOworCisJd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiByZXRyeS0tKSB7CisJCXVkZWxheSgxNSk7CiAJCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKIAkJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAogCQkJCQkgICZzdGF0dXMpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0gd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiAtLXJldHJ5KTsKKwkJCWdvdG8gbG9nX2ZhaWw7CisJfQogCi0JRFJNX0RFQlVHX0tNUygiJXM6IFI6ICIsIFNEVk9fTkFNRShpbnRlbF9zZHZvKSk7CiAJaWYgKHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKIAkJRFJNX0xPR19LTVMoIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOwogCWVsc2UKQEAgLTUzMyw3ICs1MjYsNyBAQAogCXJldHVybiB0cnVlOwogCiBsb2dfZmFpbDoKLQlEUk1fTE9HX0tNUygiXG4iKTsKKwlEUk1fTE9HX0tNUygiLi4uIGZhaWxlZFxuIik7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC01NTAsNiArNTQzLDcgQEAKIHN0YXRpYyBib29sIGludGVsX3Nkdm9fc2V0X2NvbnRyb2xfYnVzX3N3aXRjaChzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2bywKIAkJCQkJICAgICAgdTggZGRjX2J1cykKIHsKKwkvKiBUaGlzIG11c3QgYmUgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB3cml0ZSBiZWZvcmUgdGhlIGkyYyB4ZmVyICovCiAJcmV0dXJuIGludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sCiAJCQkJICAgIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gsCiAJCQkJICAgICZkZGNfYnVzLCAxKTsKQEAgLTU1Nyw3ICs1NTEsMTAgQEAKIAogc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfdmFsdWUoc3RydWN0IGludGVsX3Nkdm8gKmludGVsX3Nkdm8sIHU4IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKLQlyZXR1cm4gaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgY21kLCBkYXRhLCBsZW4pOworCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgY21kLCBkYXRhLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX3Nkdm8sIE5VTEwsIDApOwogfQogCiBzdGF0aWMgYm9vbApAQCAtODU5LDE4ICs4NTYsMjEgQEAKIAogCWludGVsX2RpcF9pbmZvZnJhbWVfY3N1bSgmYXZpX2lmKTsKIAotCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgsCisJaWYgKCFpbnRlbF9zZHZvX3NldF92YWx1ZShpbnRlbF9zZHZvLAorCQkJCSAgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgsCiAJCQkJICBzZXRfYnVmX2luZGV4LCAyKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihhdmlfaWYpOyBpICs9IDgpIHsKLQkJaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9EQVRBLAorCQlpZiAoIWludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJCSAgU0RWT19DTURfU0VUX0hCVUZfREFUQSwKIAkJCQkJICBkYXRhLCA4KSkKIAkJCXJldHVybiBmYWxzZTsKIAkJZGF0YSsrOwogCX0KIAotCXJldHVybiBpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9UWFJBVEUsCisJcmV0dXJuIGludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJICAgIFNEVk9fQ01EX1NFVF9IQlVGX1RYUkFURSwKIAkJCQkgICAgJnR4X3JhdGUsIDEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDJhZWY1Y2QuLjQ5ZTVlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC02MzEwLDYgKzYzMTAsOSBAQAogc3RhdGljIGJvb2wKIGFwcGx5X2RjYl9lbmNvZGVyX3F1aXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaWR4LCB1MzIgKmNvbm4sIHUzMiAqY29uZikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiOworCiAJLyogRGVsbCBQcmVjaXNpb24gTTYzMDAKIAkgKiAgIERDQiBlbnRyeSAyOiAwMjAyNTMxMiAwMDAwMDAxMAogCSAqICAgRENCIGVudHJ5IDM6IDAyMDI2MzEyIDAwMDAwMDIwCkBAIC02MzI3LDYgKzYzMzAsMTggQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkvKiBHZUZvcmNlMyBUaSAyMDAKKwkgKgorCSAqIERDQiByZXBvcnRzIGFuIExWRFMgb3V0cHV0IHRoYXQgc2hvdWxkIGJlIFRNRFM6CisJICogICBEQ0IgZW50cnkgMTogZjIwMDUwMTQgZmZmZmZmZmYKKwkgKi8KKwlpZiAobnZfbWF0Y2hfZGV2aWNlKGRldiwgMHgwMjAxLCAweDE0NjIsIDB4ODg1MSkpIHsKKwkJaWYgKCpjb25uID09IDB4ZjIwMDUwMTQgJiYgKmNvbmYgPT0gMHhmZmZmZmZmZikgeworCQkJZmFicmljYXRlX2RjYl9vdXRwdXQoZGNiLCBPVVRQVVRfVE1EUywgMSwgMSwgMSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKaW5kZXggMTNiYjY3Mi4uZjY1OGEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCkBAIC0yMzQsOSArMjM0LDkgQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlub3V2ZWF1X2ZiY29uX3NldF9zdXNwZW5kKGRldiwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbm91dmVhdV9mYmNvbl9yZXN0b3JlX2FjY2VsKGRldik7CiAJcmV0dXJuIDA7CiAKQEAgLTM1OSw5ICszNTksOSBAQAogCQludl9jcnRjLT5sdXQuZGVwdGggPSAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlub3V2ZWF1X2ZiY29uX3NldF9zdXNwZW5kKGRldiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsX2FsbChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCAwMWJmZmM0Li45ODIxZmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTg0OCw5ICs4NDgsNiBAQAogCQkJCSAgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBub3V2ZWF1X3ZyYW1fbWFuYWdlcjsKIAotLyogbnZjMF92cmFtLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBudmMwX3ZyYW1fbWFuYWdlcjsKLQogLyogbm91dmVhdV9ub3RpZmllci5jICovCiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2luaXRfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ub3RpZmllcl90YWtlZG93bl9jaGFubmVsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKaW5kZXggZmI4NDZhMy4uZjA1YzBjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJc3RydWN0IG5vdXZlYXVfcG1fZW5naW5lICpwbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnBtOwogCiAJaWYgKHBtLT5od21vbikgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBtLT5od21vbi0+a29iaiwgJmh3bW9uX2F0dHJncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5wZGV2LT5kZXYua29iaiwgJmh3bW9uX2F0dHJncm91cCk7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHBtLT5od21vbik7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3RlbXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jCmluZGV4IDdlY2M0YWQuLjhkOTk2OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jCkBAIC0yNjUsOCArMjY1LDggQEAKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mb1tdID0gewogCQl7IEkyQ19CT0FSRF9JTkZPKCJ3ODNsNzg1dHMiLCAweDJkKSB9LAogCQl7IEkyQ19CT0FSRF9JTkZPKCJ3ODM3ODFkIiwgMHgyZCkgfSwKLQkJeyBJMkNfQk9BUkRfSU5GTygiZjc1Mzc1IiwgMHgyZSkgfSwKIAkJeyBJMkNfQk9BUkRfSU5GTygiYWR0NzQ3MyIsIDB4MmUpIH0sCisJCXsgSTJDX0JPQVJEX0lORk8oImY3NTM3NSIsIDB4MmUpIH0sCiAJCXsgSTJDX0JPQVJEX0lORk8oImxtOTkiLCAweDRjKSB9LAogCQl7IH0KIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKaW5kZXggMTRlMjRlOS4uMGVhMDkwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCkBAIC0yODMsOCArMjgzLDcgQEAKIAkJCW52NTBfZXZvX2NoYW5uZWxfZGVsKCZkZXZfcHJpdi0+ZXZvKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQl9IGVsc2UKLQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkgeworCX0gZWxzZSB7CiAJCXJldCA9IG52NTBfZXZvX2RtYW9ial9uZXcoZXZvLCAweDNkLCBOdkV2b0ZCMTYsIDB4NzAsIDB4MTksCiAJCQkJCSAgMCwgMHhmZmZmZmZmZiwgMHgwMDAxMDAwMCk7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCAyZDdlYTc1Li4zN2UyMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0yNTYsNiArMjU2LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJc3RydWN0IG5vdXZlYXVfZmlmb19lbmdpbmUgKnBmaWZvID0gJmRldl9wcml2LT5lbmdpbmUuZmlmbzsKIAlpbnQgaSwgaGRyID0gKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApID8gMHgyMDAgOiAweDIwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI2NSw2ICsyNjYsNyBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwlwZmlmby0+cmVhc3NpZ24oZGV2LCBmYWxzZSk7CiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIGZhbHNlKTsKIAogCWlmIChwZ3JhcGgtPmNoYW5uZWwoZGV2KSA9PSBjaGFuKQpAQCAtMjc1LDYgKzI3Nyw3IEBACiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZsdXNoKGRldik7CiAKIAlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKIAogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmY2hhbi0+cmFtaW5fZ3JjdHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCmluZGV4IDM4ZTUyM2UuLjQ1OWZmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKQEAgLTQ1LDExICs0NSw2IEBACiAJfQogCiAJaWYgKHBoeXMgJiAxKSB7Ci0JCWlmIChkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZSkgewotCQkJcGh5cyArPSBkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZTsKLQkJCXBoeXMgfD0gMHgzMDsKLQkJfQotCiAJCWlmIChjb3ZlcmFnZSA8PSAzMiAqIDEwMjQgKiAxMDI0KQogCQkJcGh5cyB8PSAweDYwOwogCQllbHNlIGlmIChjb3ZlcmFnZSA8PSA2NCAqIDEwMjQgKiAxMDI0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCmluZGV4IGU2ZWE3ZDguLmViMThhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJudmMwX2dyYXBoLmgiCiAKIHN0YXRpYyB2b2lkIG52YzBfZ3JhcGhfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICopOworc3RhdGljIHZvaWQgbnZjMF9ydW5rMTQwX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgIG52YzBfZ3JhcGhfdW5sb2FkX2NvbnRleHRfdG8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTY0IGNoYW4pOwogCiB2b2lkCkBAIC0yODEsNiArMjgyLDcgQEAKIAkJcmV0dXJuOwogCiAJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDEyKTsKKwlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgMjUpOwogCiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwcml2LT51bms0MTg4YjgpOwogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+dW5rNDE4OGI0KTsKQEAgLTM5MCw2ICszOTIsNyBAQAogCX0KIAogCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMTIsIG52YzBfZ3JhcGhfaXNyKTsKKwlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDI1LCBudmMwX3J1bmsxNDBfaXNyKTsKIAlOVk9CSl9DTEFTUyhkZXYsIDB4OTAyZCwgR1IpOyAvKiAyRCAqLwogCU5WT0JKX0NMQVNTKGRldiwgMHg5MDM5LCBHUik7IC8qIE0yTUYgKi8KIAlOVk9CSl9DTEFTUyhkZXYsIDB4OTA5NywgR1IpOyAvKiAzRCAqLwpAQCAtNTEyLDggKzUxNSw4IEBACiAJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDIyNCksIDB4YzAwMDAwMDApOwogCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg0OGMpLCAweGMwMDAwMDAwKTsKIAkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4MDg0KSwgMHhjMDAwMDAwMCk7Ci0JCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweGU0NCksIDB4MDAxZmZmZmUpOwotCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHhlNGMpLCAweDAwMDAwMDBmKTsKKwkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NjQ0KSwgMHgwMDFmZmZmZSk7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY0YyksIDB4MDAwMDAwMGYpOwogCQl9CiAJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MmM5MCksIDB4ZmZmZmZmZmYpOwogCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDJjOTQpLCAweGZmZmZmZmZmKTsKQEAgLTc3NywzICs3ODAsMTkgQEAKIAogCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgMHgwMDAxMDAwMSk7CiB9CisKK3N0YXRpYyB2b2lkCitudmMwX3J1bmsxNDBfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdTMyIHVuaXRzID0gbnZfcmQzMihkZXYsIDB4MDAwMTdjKSAmIDB4MWY7CisKKwl3aGlsZSAodW5pdHMpIHsKKwkJdTMyIHVuaXQgPSBmZnModW5pdHMpIC0gMTsKKwkJdTMyIHJlZyA9IDB4MTQwMDAwICsgdW5pdCAqIDB4MjAwMDsKKwkJdTMyIHN0MCA9IG52X21hc2soZGV2LCByZWcgKyAweDEwMjAsIDAsIDApOworCQl1MzIgc3QxID0gbnZfbWFzayhkZXYsIHJlZyArIDB4MTQyMCwgMCwgMCk7CisKKwkJTlZfSU5GTyhkZXYsICJQUlVOSzE0MDogJWQgMHglMDh4IDB4JTA4eFxuIiwgdW5pdCwgc3QwLCBzdDEpOworCQl1bml0cyAmPSB+KDEgPDwgdW5pdCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCmluZGV4IGI5ZTY4YjIuLmY4ODBmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKQEAgLTE4MzAsNyArMTgzMCw3IEBACiAKIAlmb3IgKHRwID0gMCwgaWQgPSAwOyB0cCA8IDQ7IHRwKyspIHsKIAkJZm9yIChncGMgPSAwOyBncGMgPCBwcml2LT5ncGNfbnI7IGdwYysrKSB7Ci0JCQlpZiAodHAgPD0gcHJpdi0+dHBfbnJbZ3BjXSkgeworCQkJaWYgKHRwIDwgcHJpdi0+dHBfbnJbZ3BjXSkgewogCQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4Njk4KSwgaWQpOwogCQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NGU4KSwgaWQpOwogCQkJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MGMxMCArIHRwICogNCksIGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKaW5kZXggYjBhYjE4NS4uYjE1MzcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTU1NSw2ICs1NTUsNyBAQAogCQkJCQlkcF9jbG9jayA9IGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrOwogCQkJCX0KIAkJCX0KKy8qIHRoaXMgbWlnaHQgd29yayBwcm9wZXJseSB3aXRoIHRoZSBuZXcgcGxsIGFsZ28gKi8KICNpZiAwIC8qIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBvbiBzb21lIGxhcHRvcHMgKi8KIAkJCS8qIHVzZSByZWNvbW1lbmRlZCByZWZfZGl2IGZvciBzcyAqLwogCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewpAQCAtNTcyLDYgKzU3MywxMSBAQAogCQkJCQlhZGp1c3RlZF9jbG9jayA9IG1vZGUtPmNsb2NrICogMjsKIAkJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9QUkVGRVJfQ0xPU0VTVF9MT1dFUjsKKwkJCQkvKiBydjUxNSBuZWVkcyBtb3JlIHRlc3Rpbmcgd2l0aCB0aGlzIG9wdGlvbiAqLworCQkJCWlmIChyZGV2LT5mYW1pbHkgIT0gQ0hJUF9SVjUxNSkgeworCQkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKQorCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX0lTX0xDRDsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgIT0gRFJNX01PREVfRU5DT0RFUl9EQUMpCiAJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9OT19PRERfUE9TVF9ESVY7CkBAIC02MDYsMTQgKzYxMiw5IEBACiAJCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKIAkJCQlhcmdzLnYxLnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOwogCQkJCWFyZ3MudjEudWNFbmNvZGVNb2RlID0gZW5jb2Rlcl9tb2RlOwotCQkJCWlmIChlbmNvZGVyX21vZGUgPT0gQVRPTV9FTkNPREVSX01PREVfRFApIHsKLQkJCQkJaWYgKHNzX2VuYWJsZWQpCi0JCQkJCQlhcmdzLnYxLnVjQ29uZmlnIHw9Ci0JCQkJCQkJQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRTsKLQkJCQl9IGVsc2UgaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9MVkRTKSB7CisJCQkJaWYgKHNzX2VuYWJsZWQpCiAJCQkJCWFyZ3MudjEudWNDb25maWcgfD0KIAkJCQkJCUFESlVTVF9ESVNQTEFZX0NPTkZJR19TU19FTkFCTEU7Ci0JCQkJfQogCiAJCQkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCiAJCQkJCQkgICBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwpAQCAtNjI0LDEyICs2MjUsMTIgQEAKIAkJCQlhcmdzLnYzLnNJbnB1dC51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKIAkJCQlhcmdzLnYzLnNJbnB1dC51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7CiAJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnID0gMDsKKwkJCQlpZiAoc3NfZW5hYmxlZCkKKwkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CisJCQkJCQlESVNQUExMX0NPTkZJR19TU19FTkFCTEU7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkgewogCQkJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAkJCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQkJaWYgKHNzX2VuYWJsZWQpCi0JCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9Ci0JCQkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQogCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CiAJCQkJCQkvKiAxNjIwMCBvciAyNzAwMCAqLwpAQCAtNjQ5LDE4ICs2NTAsMTEgQEAKIAkJCQkJfQogCQkJCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CiAJCQkJCWlmIChlbmNvZGVyX21vZGUgPT0gQVRPTV9FTkNPREVSX01PREVfRFApIHsKLQkJCQkJCWlmIChzc19lbmFibGVkKQotCQkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQotCQkJCQkJCQlESVNQUExMX0NPTkZJR19TU19FTkFCTEU7CiAJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KIAkJCQkJCQlESVNQUExMX0NPTkZJR19DT0hFUkVOVF9NT0RFOwogCQkJCQkJLyogMTYyMDAgb3IgMjcwMDAgKi8KIAkJCQkJCWFyZ3MudjMuc0lucHV0LnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KGRwX2Nsb2NrIC8gMTApOwotCQkJCQl9IGVsc2UgaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9MVkRTKSB7Ci0JCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KLQkJCQkJCQkJRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFOwotCQkJCQl9IGVsc2UgeworCQkJCQl9IGVsc2UgaWYgKGVuY29kZXJfbW9kZSAhPSBBVE9NX0VOQ09ERVJfTU9ERV9MVkRTKSB7CiAJCQkJCQlpZiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApCiAJCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CiAJCQkJCQkJCURJU1BQTExfQ09ORklHX0RVQUxfTElOSzsKQEAgLTk2Myw4ICs5NTcsMTYgQEAKIAkvKiBhZGp1c3QgcGl4ZWwgY2xvY2sgYXMgbmVlZGVkICovCiAJYWRqdXN0ZWRfY2xvY2sgPSBhdG9tYmlvc19hZGp1c3RfcGxsKGNydGMsIG1vZGUsIHBsbCwgc3NfZW5hYmxlZCwgJnNzKTsKIAotCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCi0JCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwkvKiBydjUxNSBzZWVtcyBoYXBwaWVyIHdpdGggdGhlIG9sZCBhbGdvICovCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNTE1KQorCQlyYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKKwkJCQkJICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwllbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQlyYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8ocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgJnJlZl9kaXYsICZwb3N0X2Rpdik7CisJZWxzZQorCQlyYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKKwkJCQkJICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKIAogCWF0b21iaW9zX2NydGNfcHJvZ3JhbV9zcyhjcnRjLCBBVE9NX0RJU0FCTEUsIHJhZGVvbl9jcnRjLT5wbGxfaWQsICZzcyk7CiAKQEAgLTEwMDYsNiArMTAwOCw3IEBACiAJc3RydWN0IHJhZGVvbl9ibyAqcmJvOwogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CisJdTMyIGZiX3N3YXAgPSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fU1dBUChFVkVSR1JFRU5fR1JQSF9FTkRJQU5fTk9ORSk7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTA1NywxMSArMTA2MCwxNyBAQAogCWNhc2UgMTY6CiAJCWZiX2Zvcm1hdCA9IChFVkVSR1JFRU5fR1JQSF9ERVBUSChFVkVSR1JFRU5fR1JQSF9ERVBUSF8xNkJQUCkgfAogCQkJICAgICBFVkVSR1JFRU5fR1JQSF9GT1JNQVQoRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0I1NjUpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU4xNik7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgogCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMzJCUFApIHwKIAkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCODg4OCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOXzhJTjMyKTsKKyNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKQEAgLTExMDYsNiArMTExNSw3IEBACiAJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh1MzIpIGZiX2xvY2F0aW9uICYgRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9BRERSRVNTX01BU0spOwogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TV0FQX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGZiX3N3YXApOwogCiAJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTExNjIsNiArMTE3Miw3IEBACiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqdGFyZ2V0X2ZiOwogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CisJdTMyIGZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FOwogCWludCByOwogCiAJLyogbm8gZmIgYm91bmQgKi8KQEAgLTEyMTUsMTIgKzEyMjYsMTggQEAKIAkJZmJfZm9ybWF0ID0KIAkJICAgIEFWSVZPX0QxR1JQSF9DT05UUk9MX0RFUFRIXzE2QlBQIHwKIAkJICAgIEFWSVZPX0QxR1JQSF9DT05UUk9MXzE2QlBQX1JHQjU2NTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZmJfc3dhcCA9IFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzE2QklUOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJZmJfZm9ybWF0ID0KIAkJICAgIEFWSVZPX0QxR1JQSF9DT05UUk9MX0RFUFRIXzMyQlBQIHwKIAkJICAgIEFWSVZPX0QxR1JQSF9DT05UUk9MXzMyQlBQX0FSR0I4ODg4OworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMzJCSVQ7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBzY3JlZW4gZGVwdGggJWRcbiIsCkBAIC0xMjYwLDYgKzEyNzcsOCBAQAogCVdSRUczMihBVklWT19EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArCiAJICAgICAgIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgKHUzMikgZmJfbG9jYXRpb24pOwogCVdSRUczMihBVklWT19EMUdSUEhfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfZm9ybWF0KTsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKKwkJV1JFRzMyKFI2MDBfRDFHUlBIX1NXQVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfc3dhcCk7CiAKIAlXUkVHMzIoQVZJVk9fRDFHUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwogCVdSRUczMihBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggNGU3Nzc4ZC4uNjk1ZGU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMTg3LDkgKzE4Nyw5IEBACiBpbnQgZHBfbW9kZV92YWxpZCh1OCBkcGNkW0RQX0RQQ0RfU0laRV0sIGludCBtb2RlX2Nsb2NrKQogewogCWludCBsYW5lcyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOwotCWludCBidyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOworCWludCBkcF9jbG9jayA9IGRwX2xpbmtfY2xvY2tfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7CiAKLQlpZiAoKGxhbmVzID09IDApIHx8IChidyA9PSAwKSkKKwlpZiAoKGxhbmVzID09IDApIHx8IChkcF9jbG9jayA9PSAwKSkKIAkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAogCXJldHVybiBNT0RFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggYTg5NzNhYy4uZmZkYzgzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC05NywyNiArOTcsMjkgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKIAl1MzIgYWN0dWFsX3RlbXAgPSAwOwogCi0JaWYgKCh0ZW1wID4+IDEwKSAmIDEpCi0JCWFjdHVhbF90ZW1wID0gMDsKLQllbHNlIGlmICgodGVtcCA+PiA5KSAmIDEpCisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKIAkJYWN0dWFsX3RlbXAgPSAyNTU7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAotdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IFJSRUczMihDR19USEVSTUFMX1NUQVRVUykgJiAweGZmOwotCXUzMiBhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wIC0gNDk7CiAKIAlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQpAQCAtMTE4Miw2ICsxMTg1LDE4IEBACiAvKgogICogQ1AuCiAgKi8KK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJLyogc2V0IHRvIERYMTAvMTEgbW9kZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19NT0RFX0NPTlRST0wsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5ncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworfQorCiAKIHN0YXRpYyBpbnQgZXZlcmdyZWVuX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewpAQCAtMTIzMyw3ICsxMjQ4LDcgQEAKIAljcF9tZSA9IDB4ZmY7CiAJV1JFRzMyKENQX01FX0NOVEwsIGNwX21lKTsKIAotCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIGV2ZXJncmVlbl9kZWZhdWx0X3NpemUgKyAxNSk7CisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZSArIDE5KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtMTI2Niw2ICsxMjgxLDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDI2OTAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMzE2KTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDBlKTsgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAxMCk7IC8qICAqLworCiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMjA3Miw2ICsyMDkyLDcgQEAKIAlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgdmd0X2NhY2hlX2ludmFsaWRhdGlvbik7CiAKIAlXUkVHMzIoVkdUX0dTX1ZFUlRFWF9SRVVTRSwgMTYpOworCVdSRUczMihQQV9TVV9MSU5FX1NUSVBQTEVfVkFMVUUsIDApOwogCVdSRUczMihQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUsIDApOwogCiAJV1JFRzMyKFZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCwgMTQpOwpAQCAtMjIwMSw2ICsyMjIyLDkgQEAKIAlzdHJ1Y3QgZXZlcmdyZWVuX21jX3NhdmUgc2F2ZTsKIAl1MzIgZ3JibV9yZXNldCA9IDA7CiAKKwlpZiAoIShSUkVHMzIoR1JCTV9TVEFUVVMpICYgR1VJX0FDVElWRSkpCisJCXJldHVybiAwOworCiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOwogCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgR1JCTV9TVEFUVVM9MHglMDhYXG4iLAogCQlSUkVHMzIoR1JCTV9TVEFUVVMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCmluZGV4IGI3NThkYzcuLmExYmE0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKIH0KIAotLyogZW1pdHMgMzAgKi8KKy8qIGVtaXRzIDM2ICovCiBzdGF0aWMgdm9pZAogc2V0X2RlZmF1bHRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CkBAIC0yNDUsNiArMjQ1LDggQEAKIAlpbnQgbnVtX2hzX3RocmVhZHMsIG51bV9sc190aHJlYWRzOwogCWludCBudW1fcHNfc3RhY2tfZW50cmllcywgbnVtX3ZzX3N0YWNrX2VudHJpZXMsIG51bV9nc19zdGFja19lbnRyaWVzLCBudW1fZXNfc3RhY2tfZW50cmllczsKIAlpbnQgbnVtX2hzX3N0YWNrX2VudHJpZXMsIG51bV9sc19zdGFja19lbnRyaWVzOworCXU2NCBncHVfYWRkcjsKKwlpbnQgZHdvcmRzOwogCiAJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKIAljYXNlIENISVBfQ0VEQVI6CkBAIC00OTcsNiArNDk5LDE4IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAwMCk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAwMCk7CiAKKwkvKiBzZXQgdG8gRFgxMC8xMSBtb2RlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX01PREVfQ09OVFJPTCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEpOworCisJLyogZW1pdCBhbiBJQiBwb2ludGluZyBhdCBkZWZhdWx0IHN0YXRlICovCisJZHdvcmRzID0gQUxJR04ocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiwgMHgxMCk7CisJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldDsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGR3b3Jkcyk7CisKIH0KIAogc3RhdGljIGlubGluZSB1aW50MzJfdCBpMmYodWludDMyX3QgaW5wdXQpCkBAIC01MjcsOCArNTQxLDEwIEBACiBpbnQgZXZlcmdyZWVuX2JsaXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgb2JqX3NpemU7Ci0JaW50IHI7CisJaW50IHIsIGR3b3JkczsKIAl2b2lkICpwdHI7CisJdTMyIHBhY2tldDJzWzE2XTsKKwlpbnQgbnVtX3BhY2tldDJzID0gMDsKIAogCS8qIHBpbiBjb3B5IHNoYWRlciBpbnRvIHZyYW0gaWYgYWxyZWFkeSBpbml0aWFsaXplZCAqLwogCWlmIChyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaikKQEAgLTUzNiw4ICs1NTIsMTcgQEAKIAogCW11dGV4X2luaXQoJnJkZXYtPnI2MDBfYmxpdC5tdXRleCk7CiAJcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCA9IDA7Ci0JcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IDA7Ci0Jb2JqX3NpemUgPSAwOworCisJcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IGV2ZXJncmVlbl9kZWZhdWx0X3NpemU7CisKKwlkd29yZHMgPSByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuOworCXdoaWxlIChkd29yZHMgJiAweGYpIHsKKwkJcGFja2V0MnNbbnVtX3BhY2tldDJzKytdID0gUEFDS0VUMigwKTsKKwkJZHdvcmRzKys7CisJfQorCisJb2JqX3NpemUgPSBkd29yZHMgKiA0OworCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ID0gb2JqX3NpemU7CiAJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OwpAQCAtNTY3LDYgKzU5MiwxMiBAQAogCQlyZXR1cm4gcjsKIAl9CiAKKwltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkgICAgZXZlcmdyZWVuX2RlZmF1bHRfc3RhdGUsIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KTsKKworCWlmIChudW1fcGFja2V0MnMpCisJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKIAltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCwgZXZlcmdyZWVuX3ZzLCBldmVyZ3JlZW5fdnNfc2l6ZSAqIDQpOwogCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0LCBldmVyZ3JlZW5fcHMsIGV2ZXJncmVlbl9wc19zaXplICogNCk7CiAJcmFkZW9uX2JvX2t1bm1hcChyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CkBAIC02NTIsNyArNjgzLDcgQEAKIAkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIGxvb3BzIGNvcnJlY3RseSAqLwogCXJpbmdfc2l6ZSA9IG51bV9sb29wcyAqIGR3b3Jkc19wZXJfbG9vcDsKIAkvKiBzZXQgZGVmYXVsdCAgKyBzaGFkZXJzICovCi0JcmluZ19zaXplICs9IDQ2OyAvKiBzaGFkZXJzICsgZGVmIHN0YXRlICovCisJcmluZ19zaXplICs9IDUyOyAvKiBzaGFkZXJzICsgZGVmIHN0YXRlICovCiAJcmluZ19zaXplICs9IDEwOyAvKiBmZW5jZSBlbWl0IGZvciBWQiBJQiAqLwogCXJpbmdfc2l6ZSArPSA1OyAvKiBkb25lIGNvcHkgKi8KIAlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIGRvbmUgY29weSAqLwpAQCAtNjYwLDcgKzY5MSw3IEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0Jc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDMwICovCisJc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDM2ICovCiAJc2V0X3NoYWRlcnMocmRldik7IC8qIDE2ICovCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IDM2ZDMyZDguLmFmZWMxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC0yNDAsNiArMjQwLDcgQEAKICNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfUkVaX0NOVCh4KQkJCSgoeCkgPDwgMTYpCiAjZGVmaW5lIFBBX1NDX0xJTkVfU1RJUFBMRQkJCQkweDI4QTBDCisjZGVmaW5lCVBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRQkJCTB4OEE2MAogI2RlZmluZQlQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUJCQkweDhCMTAKIAogI2RlZmluZQlTQ1JBVENIX1JFRzAJCQkJCTB4ODUwMApAQCAtNjUyLDYgKzY1Myw3IEBACiAjZGVmaW5lCVBBQ0tFVDNfRElTUEFUQ0hfRElSRUNUCQkJCTB4MTUKICNkZWZpbmUJUEFDS0VUM19ESVNQQVRDSF9JTkRJUkVDVAkJCTB4MTYKICNkZWZpbmUJUEFDS0VUM19JTkRJUkVDVF9CVUZGRVJfRU5ECQkJMHgxNworI2RlZmluZQlQQUNLRVQzX01PREVfQ09OVFJPTAkJCQkweDE4CiAjZGVmaW5lCVBBQ0tFVDNfU0VUX1BSRURJQ0FUSU9OCQkJCTB4MjAKICNkZWZpbmUJUEFDS0VUM19SRUdfUk1XCQkJCQkweDIxCiAjZGVmaW5lCVBBQ0tFVDNfQ09ORF9FWEVDCQkJCTB4MjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggNDZkYTUxNC4uNWYxNTgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTEwMzEsOCArMTAzMSw4IEBACiAJV1JFRzMyKFJBREVPTl9DUF9DU1FfTU9ERSwKIAkgICAgICAgUkVHX1NFVChSQURFT05fSU5ESVJFQ1QyX1NUQVJULCBpbmRpcmVjdDJfc3RhcnQpIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fSU5ESVJFQ1QxX1NUQVJULCBpbmRpcmVjdDFfc3RhcnQpKTsKLQlXUkVHMzIoMHg3MTgsIDApOwotCVdSRUczMigweDc0NCwgMHgwMDAwNEQ0RCk7CisJV1JFRzMyKFJBREVPTl9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKKwlXUkVHMzIoUkFERU9OX0NQX0NTUV9NT0RFLCAweDAwMDA0RDREKTsKIAlXUkVHMzIoUkFERU9OX0NQX0NTUV9DTlRMLCBSQURFT05fQ1NRX1BSSUJNX0lOREJNKTsKIAlyYWRlb25fcmluZ19zdGFydChyZGV2KTsKIAlyID0gcmFkZW9uX3JpbmdfdGVzdChyZGV2KTsKQEAgLTIzNDcsMTAgKzIzNDcsMTAgQEAKIAogCXRlbXAgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19DTlRMKTsKIAlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJdGVtcCAmPSB+KDE8PDgpOwotCQl0ZW1wIHw9ICgxPDw5KTsKKwkJdGVtcCAmPSB+UkFERU9OX0NGR19WR0FfUkFNX0VOOworCQl0ZW1wIHw9IFJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9IGVsc2UgewotCQl0ZW1wICY9IH4oMTw8OSk7CisJCXRlbXAgJj0gflJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9CiAJV1JFRzMyKFJBREVPTl9DT05GSUdfQ05UTCwgdGVtcCk7CiB9CkBAIC0zNTIyLDcgKzM1MjIsNyBAQAogCWlmIChpIDwgcmRldi0+dXNlY190aW1lb3V0KSB7CiAJCURSTV9JTkZPKCJyaW5nIHRlc3Qgc3VjY2VlZGVkIGluICVkIHVzZWNzXG4iLCBpKTsKIAl9IGVsc2UgewotCQlEUk1fRVJST1IoInJhZGVvbjogcmluZyB0ZXN0IGZhaWxlZCAoc3JhY3RoKDB4JTA0WCk9MHglMDhYKVxuIiwKKwkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNjcmF0Y2goMHglMDRYKT0weCUwOFgpXG4iLAogCQkJICBzY3JhdGNoLCB0bXApOwogCQlyID0gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGNmODYyY2EuLjU1ZmU1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC02OSw2ICs2OSw5IEBACiAJbWIoKTsKIH0KIAorI2RlZmluZSBSMzAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUjMwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCisKIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKQogewogCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucHRyOwpAQCAtNzgsNyArODEsNyBAQAogCX0KIAlhZGRyID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgPj4gOCkgfAogCSAgICAgICAoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCAyNCkgfAotCSAgICAgICAweGM7CisJICAgICAgIFIzMDBfUFRFX1dSSVRFQUJMRSB8IFIzMDBfUFRFX1JFQURBQkxFOwogCS8qIG9uIHg4NiB3ZSB3YW50IHRoaXMgdG8gYmUgQ1BVIGVuZGlhbiwgb24gcG93ZXJwYwogCSAqIG9uIHBvd2VycGMgd2l0aG91dCBIVyBzd2FwcGVycywgaXQnbGwgZ2V0IHN3YXBwZWQgb24gd2F5CiAJICogaW50byBWUkFNIC0gc28gbm8gbmVlZCBmb3IgY3B1X3RvX2xlMzIgb24gVlJBTSB0YWJsZXMgKi8KQEAgLTEzNSw3ICsxMzgsNyBAQAogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9MTywgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0hJLCAwKTsKIAkvKiBDbGVhciBlcnJvciAqLwotCVdSRUczMl9QQ0lFKDB4MTgsIDApOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfRVJST1IsIDApOwogCXRtcCA9IFJSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfRU47CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfVU5NQVBQRURfQUNDRVNTX0RJU0NBUkQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IGMzODczNDYuLjBiNTllZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC05Niw3ICs5Niw3IEBACiAJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CiAJfQogCS8qIGdldCBtYXggbnVtYmVyIG9mIHBpcGVzICovCi0JZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKKwlnYl9waXBlX3NlbGVjdCA9IFJSRUczMihSNDAwX0dCX1BJUEVfU0VMRUNUKTsKIAludW1fcGlwZXMgPSAoKGdiX3BpcGVfc2VsZWN0ID4+IDEyKSAmIDMpICsgMTsKIAogCS8qIFNFIGNoaXBzIGhhdmUgMSBwaXBlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IDNjODY3N2YuLjJjZTgwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC03OSw4ICs3OSw4IEBACiAJCVdSRUczMigweDQxMjgsIDB4RkYpOwogCX0KIAlyNDIwX3BpcGVzX2luaXQocmRldik7Ci0JZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKLQl0bXAgPSBSUkVHMzIoMHgxNzBDKTsKKwlnYl9waXBlX3NlbGVjdCA9IFJSRUczMihSNDAwX0dCX1BJUEVfU0VMRUNUKTsKKwl0bXAgPSBSUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcpOwogCXBpcGVfc2VsZWN0X2N1cnJlbnQgPSAodG1wID4+IDIpICYgMzsKIAl0bXAgPSAoMSA8PCBwaXBlX3NlbGVjdF9jdXJyZW50KSB8CiAJICAgICAgKCgoZ2JfcGlwZV9zZWxlY3QgPj4gOCkgJiAweEYpIDw8IDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBhY2EyMjM2Li42NTA2NzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtOTcsMTIgKzk3LDE2IEBACiBzdGF0aWMgdm9pZCByNjAwX3BjaWVfZ2VuMl9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBnZXQgdGVtcGVyYXR1cmUgaW4gbWlsbGlkZWdyZWVzICovCi11MzIgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7CisJaW50IGFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CiAKLQlyZXR1cm4gdGVtcCAqIDEwMDA7CisJaWYgKHRlbXAgJiAweDEwMCkKKwkJYWN0dWFsX3RlbXAgLT0gMjU2OworCisJcmV0dXJuIGFjdHVhbF90ZW1wICogMTAwMDsKIH0KIAogdm9pZCByNjAwX3BtX2dldF9keW5wbV9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTEyODcsNiArMTI5MSw5IEBACiAJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOwogCXUzMiB0bXA7CiAKKwlpZiAoIShSUkVHMzIoR1JCTV9TVEFUVVMpICYgR1VJX0FDVElWRSkpCisJCXJldHVybiAwOworCiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOwogCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAogCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaAppbmRleCAzM2NkYTAxLi5mODY5ODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCkBAIC04MSw3ICs4MSwxMSBAQAogI2RlZmluZSBSNjAwX01FRElVTV9WSURfTE9XRVJfR1BJT19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIwCiAjZGVmaW5lIFI2MDBfTE9XX1ZJRF9MT1dFUl9HUElPX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MjQKIAotCisjZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMEMKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkUgICAgICAgICAgICAgICAgICAgICgwIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8xNkJJVCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMzJCSVQgICAgICAgICAgICAgICAgICAgKDIgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzY0QklUICAgICAgICAgICAgICAgICAgICgzIDw8IDApCiAKICNkZWZpbmUgUjYwMF9IRFBfTk9OU1VSRkFDRV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjMDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggNzFkMmE1NS4uNTZjNDhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUxNiBsZXZlbCk7CiB2b2lkIHJzNjkwX3BtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgZXZlcmdyZWVuX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnY3NzBfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBzdW1vX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIEZlbmNlcy4KQEAgLTgxMiw4ICs4MTIsNyBAQAogCWZpeGVkMjBfMTIJCXNjbGs7CiAJZml4ZWQyMF8xMgkJbWNsazsKIAlmaXhlZDIwXzEyCQluZWVkZWRfYmFuZHdpZHRoOwotCS8qIFhYWDogdXNlIGEgZGVmaW5lIGZvciBudW0gcG93ZXIgbW9kZXMgKi8KLQlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlIHBvd2VyX3N0YXRlWzhdOworCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnBvd2VyX3N0YXRlOwogCS8qIG51bWJlciBvZiB2YWxpZCBwb3dlciBzdGF0ZXMgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICBudW1fcG93ZXJfc3RhdGVzOwogCWludCAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKaW5kZXggM2ExYjE2MS4uZTc1ZDYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwpAQCAtNzU5LDcgKzc1OSw3IEBACiAJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKLQkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZSwKIAkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKQEAgLTgwNSw3ICs4MDUsNyBAQAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCi0JLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkucmluZ19pYl9leGVjdXRlID0gJmV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUsCiAJLmlycV9zZXQgPSAmZXZlcmdyZWVuX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJmV2ZXJncmVlbl9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC04NDgsNyArODQ4LDcgQEAKIAkuZ2FydF90bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAotCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlLAogCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IGUwMWYwNzcuLmM1OWJkOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTM1NSw2ICszNTUsNyBAQAogYm9vbCBldmVyZ3JlZW5fZ3B1X2lzX2xvY2t1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgZXZlcmdyZWVuX2FzaWNfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCBldmVyZ3JlZW5fYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIGV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKIGludCBldmVyZ3JlZW5fY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJCXVuc2lnbmVkIG51bV9wYWdlcywgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggMTU3MzIwMi4uNWMxY2M3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0zODcsMTUgKzM4NywxMSBAQAogCQkJKmxpbmVfbXV4ID0gMHg5MDsKIAl9CiAKLQkvKiBtYWMgcnY2MzAgKi8KLQlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTU4OCkgJiYKLQkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNmIpICYmCi0JICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMGE2KSkgewotCQlpZiAoKHN1cHBvcnRlZF9kZXZpY2UgPT0gQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpICYmCi0JCSAgICAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSkgewotCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU47Ci0JCQkqbGluZV9tdXggPSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDE7Ci0JCX0KKwkvKiBtYWMgcnY2MzAsIHJ2NzMwLCBvdGhlcnMgKi8KKwlpZiAoKHN1cHBvcnRlZF9kZXZpY2UgPT0gQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpICYmCisJICAgICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpKSB7CisJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOworCQkqbGluZV9tdXggPSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDE7CiAJfQogCiAJLyogQVNVUyBIRCAzNjAwIFhUIGJvYXJkIGxpc3RzIHRoZSBEVkkgcG9ydCBhcyBIRE1JICovCkBAIC0xMTY3LDE2ICsxMTYzLDYgQEAKIAkJCQlwMXBsbC0+cGxsX291dF9taW4gPSA2NDgwMDsKIAkJCWVsc2UKIAkJCQlwMXBsbC0+cGxsX291dF9taW4gPSAyMDAwMDsKLQkJfSBlbHNlIGlmIChwMXBsbC0+cGxsX291dF9taW4gPiA2NDgwMCkgewotCQkJLyogTGltaXRpbmcgdGhlIHBsbCBvdXRwdXQgcmFuZ2UgaXMgYSBnb29kIHRoaW5nIGdlbmVyYWxseSBhcwotCQkJICogaXQgbGltaXRzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgcGxsIGNvbWJpbmF0aW9ucyBmb3IgYSBnaXZlbgotCQkJICogZnJlcXVlbmN5IHByZXN1bWFibHkgdG8gdGhlIG9uZXMgdGhhdCB3b3JrIGJlc3Qgb24gZWFjaCBjYXJkLgotCQkJICogSG93ZXZlciwgY2VydGFpbiBkdWFsbGluayBEVkkgbW9uaXRvcnMgc2VlbSB0byBsaWtlCi0JCQkgKiBwbGwgY29tYmluYXRpb25zIHRoYXQgd291bGQgYmUgbGltaXRlZCBieSB0aGlzIGF0IGxlYXN0IG9uCi0JCQkgKiBwcmUtRENFIDMuMCByNnh4IGhhcmR3YXJlLiAgVGhpcyBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIHBlcgotCQkJICogZmFtaWx5LgotCQkJICovCi0JCQlwMXBsbC0+cGxsX291dF9taW4gPSA2NDgwMDsKIAkJfQogCiAJCXAxcGxsLT5wbGxfaW5fbWluID0KQEAgLTE5OTEsNiArMTk3Nyw5IEBACiAJbnVtX21vZGVzID0gcG93ZXJfaW5mby0+aW5mby51Y051bU9mUG93ZXJNb2RlRW50cmllczsKIAlpZiAobnVtX21vZGVzID4gQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0spCiAJCW51bV9tb2RlcyA9IEFUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSkgKiBudW1fbW9kZXMsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKIAkvKiBsYXN0IG1vZGUgaXMgdXN1YWxseSBkZWZhdWx0LCBhcnJheSBpcyBsb3cgdG8gaGlnaCAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykgewogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7CkBAIC0yMzQyLDYgKzIzMzEsMTAgQEAKIAlwb3dlcl9pbmZvID0gKHVuaW9uIHBvd2VyX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CiAKIAlyYWRlb25fYXRvbWJpb3NfYWRkX3BwbGliX3RoZXJtYWxfY29udHJvbGxlcihyZGV2LCAmcG93ZXJfaW5mby0+cHBsaWIuc1RoZXJtYWxDb250cm9sbGVyKTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICoKKwkJCQkgICAgICAgcG93ZXJfaW5mby0+cHBsaWIudWNOdW1TdGF0ZXMsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKIAkvKiBmaXJzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgZm9sbG93ZWQgYnkgbG93IHRvIGhpZ2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgcG93ZXJfaW5mby0+cHBsaWIudWNOdW1TdGF0ZXM7IGkrKykgewogCQltb2RlX2luZGV4ID0gMDsKQEAgLTI0MjIsNiArMjQxNSwxMCBAQAogCW5vbl9jbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBOb25DbG9ja0luZm9BcnJheSAqKQogCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCiAJCSBwb3dlcl9pbmZvLT5wcGxpYi51c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0KTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICoKKwkJCQkgICAgICAgc3RhdGVfYXJyYXktPnVjTnVtRW50cmllcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIHN0YXRlX2luZGV4OwogCWZvciAoaSA9IDA7IGkgPCBzdGF0ZV9hcnJheS0+dWNOdW1FbnRyaWVzOyBpKyspIHsKIAkJbW9kZV9pbmRleCA9IDA7CiAJCXBvd2VyX3N0YXRlID0gKHVuaW9uIHBwbGliX3Bvd2VyX3N0YXRlICopJnN0YXRlX2FycmF5LT5zdGF0ZXNbaV07CkBAIC0yNDk1LDE5ICsyNDkyLDIyIEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIGFkZCB0aGUgZGVmYXVsdCBtb2RlICovCi0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQotCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0gMTY7Ci0JCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzID0gMDsKLQkJc3RhdGVfaW5kZXgrKzsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkgeworCQkJLyogYWRkIHRoZSBkZWZhdWx0IG1vZGUgKi8KKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPSAxNjsKKwkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyA9IDA7CisJCQlzdGF0ZV9pbmRleCsrOworCQl9CiAJfQogCiAJcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA9IHN0YXRlX2luZGV4OwpAQCAtMjYyMyw3ICsyNjIzLDcgQEAKIAliaW9zXzJfc2NyYXRjaCAmPSB+QVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRTsKIAogCS8qIHRlbGwgdGhlIGJpb3Mgbm90IHRvIGhhbmRsZSBtb2RlIHN3aXRjaGluZyAqLwotCWJpb3NfNl9zY3JhdGNoIHw9IChBVE9NX1M2X0FDQ19CTE9DS19ESVNQTEFZX1NXSVRDSCB8IEFUT01fUzZfQUNDX01PREUpOworCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX0JMT0NLX0RJU1BMQVlfU1dJVENIOwogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKIAkJV1JFRzMyKFI2MDBfQklPU18yX1NDUkFUQ0gsIGJpb3NfMl9zY3JhdGNoKTsKQEAgLTI2NzQsMTAgKzI2NzQsMTMgQEAKIAllbHNlCiAJCWJpb3NfNl9zY3JhdGNoID0gUlJFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCk7CiAKLQlpZiAobG9jaykKKwlpZiAobG9jaykgewogCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFOwotCWVsc2UKKwkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQUNDX01PREU7CisJfSBlbHNlIHsKIAkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQ1JJVElDQUxfU1RBVEU7CisJCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX01PREU7CisJfQogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCVdSRUczMihSNjAwX0JJT1NfNl9TQ1JBVENILCBiaW9zXzZfc2NyYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggNTkxZmNhZS4uZDI3ZWY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtMjQ0Miw2ICsyNDQyLDE3IEBACiAKIAlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gLTE7CiAKKwkvKiBhbGxvY2F0ZSAyIHBvd2VyIHN0YXRlcyAqLworCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKSB7CisJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKKwkJcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA9IDA7CisKKwkJcmRldi0+cG0uY3VycmVudF9wb3dlcl9zdGF0ZV9pbmRleCA9IHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXg7CisJCXJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZV9pbmRleCA9IDA7CisJCXJldHVybjsKKwl9CisKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKIAkJb2Zmc2V0ID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19QT1dFUlBMQVlfSU5GT19UQUJMRSk7CiAJCWlmIChvZmZzZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggMjYwOTFkNi4uMGQ0Nzg5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTg5MSw5ICs4OTEsOSBAQAogCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2LT5wZGV2KTsKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyYWRlb25fZmJkZXZfc2V0X3N1c3BlbmQocmRldiwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwNSwxMSArOTA1LDExIEBACiAJaWYgKGRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID09IERSTV9TV0lUQ0hfUE9XRVJfT0ZGKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYtPnBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYpOwpAQCAtOTIwLDcgKzkyMCw3IEBACiAJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAKIAlyYWRlb25fZmJkZXZfc2V0X3N1c3BlbmQocmRldiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAkvKiByZXNldCBocGQgc3RhdGUgKi8KIAlyYWRlb25faHBkX2luaXQocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggZDI2ZGFiZi4uMmVmZjk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtNzgwLDYgKzc4MCwxMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBhdml2byAqLworc3RhdGljIHZvaWQgYXZpdm9fZ2V0X2ZiX2RpdihzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICB1MzIgdGFyZ2V0X2Nsb2NrLAorCQkJICAgICB1MzIgcG9zdF9kaXYsCisJCQkgICAgIHUzMiByZWZfZGl2LAorCQkJICAgICB1MzIgKmZiX2RpdiwKKwkJCSAgICAgdTMyICpmcmFjX2ZiX2RpdikKK3sKKwl1MzIgdG1wID0gcG9zdF9kaXYgKiByZWZfZGl2OworCisJdG1wICo9IHRhcmdldF9jbG9jazsKKwkqZmJfZGl2ID0gdG1wIC8gcGxsLT5yZWZlcmVuY2VfZnJlcTsKKwkqZnJhY19mYl9kaXYgPSB0bXAgJSBwbGwtPnJlZmVyZW5jZV9mcmVxOworfQorCitzdGF0aWMgdTMyIGF2aXZvX2dldF9wb3N0X2RpdihzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgdTMyIHRhcmdldF9jbG9jaykKK3sKKwl1MzIgdmNvLCBwb3N0X2RpdiwgdG1wOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9QT1NUX0RJVikKKwkJcmV0dXJuIHBsbC0+cG9zdF9kaXY7CisKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQKSB7CisJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9JU19MQ0QpCisJCQl2Y28gPSBwbGwtPmxjZF9wbGxfb3V0X21pbjsKKwkJZWxzZQorCQkJdmNvID0gcGxsLT5wbGxfb3V0X21pbjsKKwl9IGVsc2UgeworCQlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfSVNfTENEKQorCQkJdmNvID0gcGxsLT5sY2RfcGxsX291dF9tYXg7CisJCWVsc2UKKwkJCXZjbyA9IHBsbC0+cGxsX291dF9tYXg7CisJfQorCisJcG9zdF9kaXYgPSB2Y28gLyB0YXJnZXRfY2xvY2s7CisJdG1wID0gdmNvICUgdGFyZ2V0X2Nsb2NrOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUCkgeworCQlpZiAodG1wKQorCQkJcG9zdF9kaXYrKzsKKwl9IGVsc2UgeworCQlpZiAoIXRtcCkKKwkJCXBvc3RfZGl2LS07CisJfQorCisJcmV0dXJuIHBvc3RfZGl2OworfQorCisjZGVmaW5lIE1BWF9UT0xFUkFOQ0UgMTAKKwordm9pZCByYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8oc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCSAgICAgIHUzMiBmcmVxLAorCQkJICAgICAgdTMyICpkb3RfY2xvY2tfcCwKKwkJCSAgICAgIHUzMiAqZmJfZGl2X3AsCisJCQkgICAgICB1MzIgKmZyYWNfZmJfZGl2X3AsCisJCQkgICAgICB1MzIgKnJlZl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqcG9zdF9kaXZfcCkKK3sKKwl1MzIgdGFyZ2V0X2Nsb2NrID0gZnJlcSAvIDEwOworCXUzMiBwb3N0X2RpdiA9IGF2aXZvX2dldF9wb3N0X2RpdihwbGwsIHRhcmdldF9jbG9jayk7CisJdTMyIHJlZl9kaXYgPSBwbGwtPm1pbl9yZWZfZGl2OworCXUzMiBmYl9kaXYgPSAwLCBmcmFjX2ZiX2RpdiA9IDAsIHRtcDsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUkVGX0RJVikKKwkJcmVmX2RpdiA9IHBsbC0+cmVmZXJlbmNlX2RpdjsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfRlJBQ19GQl9ESVYpIHsKKwkJYXZpdm9fZ2V0X2ZiX2RpdihwbGwsIHRhcmdldF9jbG9jaywgcG9zdF9kaXYsIHJlZl9kaXYsICZmYl9kaXYsICZmcmFjX2ZiX2Rpdik7CisJCWZyYWNfZmJfZGl2ID0gKDEwMCAqIGZyYWNfZmJfZGl2KSAvIHBsbC0+cmVmZXJlbmNlX2ZyZXE7CisJCWlmIChmcmFjX2ZiX2RpdiA+PSA1KSB7CisJCQlmcmFjX2ZiX2RpdiAtPSA1OworCQkJZnJhY19mYl9kaXYgPSBmcmFjX2ZiX2RpdiAvIDEwOworCQkJZnJhY19mYl9kaXYrKzsKKwkJfQorCQlpZiAoZnJhY19mYl9kaXYgPj0gMTApIHsKKwkJCWZiX2RpdisrOworCQkJZnJhY19mYl9kaXYgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKHJlZl9kaXYgPD0gcGxsLT5tYXhfcmVmX2RpdikgeworCQkJYXZpdm9fZ2V0X2ZiX2RpdihwbGwsIHRhcmdldF9jbG9jaywgcG9zdF9kaXYsIHJlZl9kaXYsCisJCQkJCSAmZmJfZGl2LCAmZnJhY19mYl9kaXYpOworCQkJaWYgKGZyYWNfZmJfZGl2ID49IChwbGwtPnJlZmVyZW5jZV9mcmVxIC8gMikpCisJCQkJZmJfZGl2Kys7CisJCQlmcmFjX2ZiX2RpdiA9IDA7CisJCQl0bXAgPSAocGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZiX2RpdikgLyAocG9zdF9kaXYgKiByZWZfZGl2KTsKKwkJCXRtcCA9ICh0bXAgKiAxMDAwMCkgLyB0YXJnZXRfY2xvY2s7CisKKwkJCWlmICh0bXAgPiAoMTAwMDAgKyBNQVhfVE9MRVJBTkNFKSkKKwkJCQlyZWZfZGl2Kys7CisJCQllbHNlIGlmICh0bXAgPj0gKDEwMDAwIC0gTUFYX1RPTEVSQU5DRSkpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJcmVmX2RpdisrOworCQl9CisJfQorCisJKmRvdF9jbG9ja19wID0gKChwbGwtPnJlZmVyZW5jZV9mcmVxICogZmJfZGl2ICogMTApICsgKHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiBmcmFjX2ZiX2RpdikpIC8KKwkJKHJlZl9kaXYgKiBwb3N0X2RpdiAqIDEwKTsKKwkqZmJfZGl2X3AgPSBmYl9kaXY7CisJKmZyYWNfZmJfZGl2X3AgPSBmcmFjX2ZiX2RpdjsKKwkqcmVmX2Rpdl9wID0gcmVmX2RpdjsKKwkqcG9zdF9kaXZfcCA9IHBvc3RfZGl2OworCURSTV9ERUJVR19LTVMoIiVkLCBwbGwgZGl2aWRlcnMgLSBmYjogJWQuJWQgcmVmOiAlZCwgcG9zdCAlZFxuIiwKKwkJICAgICAgKmRvdF9jbG9ja19wLCBmYl9kaXYsIGZyYWNfZmJfZGl2LCByZWZfZGl2LCBwb3N0X2Rpdik7Cit9CisKKy8qIHByZS1hdml2byAqLwogc3RhdGljIGlubGluZSB1aW50MzJfdCByYWRlb25fZGl2KHVpbnQ2NF90IG4sIHVpbnQzMl90IGQpCiB7CiAJdWludDY0X3QgbW9kOwpAQCAtNzkwLDEzICs4OTksMTMgQEAKIAlyZXR1cm4gbjsKIH0KIAotdm9pZCByYWRlb25fY29tcHV0ZV9wbGwoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKLQkJCXVpbnQ2NF90IGZyZXEsCi0JCQl1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQl1aW50MzJfdCAqZmJfZGl2X3AsCi0JCQl1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQl1aW50MzJfdCAqcG9zdF9kaXZfcCkKK3ZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgIHVpbnQ2NF90IGZyZXEsCisJCQkgICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJICAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCSAgICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKKwkJCSAgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKQogewogCXVpbnQzMl90IG1pbl9yZWZfZGl2ID0gcGxsLT5taW5fcmVmX2RpdjsKIAl1aW50MzJfdCBtYXhfcmVmX2RpdiA9IHBsbC0+bWF4X3JlZl9kaXY7CkBAIC04MjYsNiArOTM1LDkgQEAKIAkJcGxsX291dF9tYXggPSBwbGwtPnBsbF9vdXRfbWF4OwogCX0KIAorCWlmIChwbGxfb3V0X21pbiA+IDY0ODAwKQorCQlwbGxfb3V0X21pbiA9IDY0ODAwOworCiAJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9SRUZfRElWKQogCQltaW5fcmVmX2RpdiA9IG1heF9yZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OwogCWVsc2UgewpAQCAtODQ5LDcgKzk2MSw3IEBACiAJCW1heF9mcmFjdGlvbmFsX2ZlZWRfZGl2ID0gcGxsLT5tYXhfZnJhY19mZWVkYmFja19kaXY7CiAJfQogCi0JZm9yIChwb3N0X2RpdiA9IG1heF9wb3N0X2RpdjsgcG9zdF9kaXYgPj0gbWluX3Bvc3RfZGl2OyAtLXBvc3RfZGl2KSB7CisJZm9yIChwb3N0X2RpdiA9IG1pbl9wb3N0X2RpdjsgcG9zdF9kaXYgPD0gbWF4X3Bvc3RfZGl2OyArK3Bvc3RfZGl2KSB7CiAJCXVpbnQzMl90IHJlZl9kaXY7CiAKIAkJaWYgKChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9OT19PRERfUE9TVF9ESVYpICYmIChwb3N0X2RpdiAmIDEpKQpAQCAtOTY1LDYgKzEwNzcsMTAgQEAKIAkqZnJhY19mYl9kaXZfcCA9IGJlc3RfZnJhY19mZWVkYmFja19kaXY7CiAJKnJlZl9kaXZfcCA9IGJlc3RfcmVmX2RpdjsKIAkqcG9zdF9kaXZfcCA9IGJlc3RfcG9zdF9kaXY7CisJRFJNX0RFQlVHX0tNUygiJWQgJWQsIHBsbCBkaXZpZGVycyAtIGZiOiAlZC4lZCByZWY6ICVkLCBwb3N0ICVkXG4iLAorCQkgICAgICBmcmVxLCBiZXN0X2ZyZXEgLyAxMDAwLCBiZXN0X2ZlZWRiYWNrX2RpdiwgYmVzdF9mcmFjX2ZlZWRiYWNrX2RpdiwKKwkJICAgICAgYmVzdF9yZWZfZGl2LCBiZXN0X3Bvc3RfZGl2KTsKKwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBkNTY4MGEwLi4yNzViMjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNDgsNyArNDgsNyBAQAogICogLSAyLjUuMCAtIGFkZCBnZXQgYWNjZWwgMiB0byB3b3JrIGFyb3VuZCBkZHggYnJlYWthZ2UgZm9yIGV2ZXJncmVlbgogICogLSAyLjYuMCAtIGFkZCB0aWxpbmcgY29uZmlnIHF1ZXJ5IChyNnh4KyksIGFkZCBpbml0aWFsIEhpWiBzdXBwb3J0IChyMzAwLT5yNTAwKQogICogICAyLjcuMCAtIGZpeHVwcyBmb3IgcjYwMCAyRCB0aWxpbmcgc3VwcG9ydC4gKG5vIGV4dGVybmFsIEFCSSBjaGFuZ2UpLCBhZGQgZWcgZHluIGdwciByZWdzCi0gKiAgIDIuOC4wIC0gcGFnZWZsaXAgc3VwcG9ydCwgcjUwMCBVU19GT1JNQVQgcmVncy4gcjUwMCBBUkdCMjEwMTAxMCBjb2xvcmJ1ZiwgcjMwMC0+cjUwMCBDTUFTSworICogICAyLjguMCAtIHBhZ2VmbGlwIHN1cHBvcnQsIHI1MDAgVVNfRk9STUFUIHJlZ3MuIHI1MDAgQVJHQjIxMDEwMTAgY29sb3JidWYsIHIzMDAtPnI1MDAgQ01BU0ssIGNsb2NrIGNyeXN0YWwgcXVlcnkKICAqLwogI2RlZmluZSBLTVNfRFJJVkVSX01BSk9SCTIKICNkZWZpbmUgS01TX0RSSVZFUl9NSU5PUgk4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCA4ZmQxODQyLi5kNGE1NDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI6IC8qIEhETUktQiBpcyBiYXNpY2FsbHkgREwtRFZJOyBhbmFsb2cgd29ya3MgZmluZSAqLwotCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgJiYgcmFkZW9uX2F1ZGlvKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTY1NSw3ICs2NTUsNyBAQAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CiAJZGVmYXVsdDoKLQkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpICYmIHJhZGVvbl9hdWRpbykgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC02NzMsNyArNjczLDcgQEAKIAkJaWYgKChkaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCkgfHwKIAkJICAgIChkaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9lRFApKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RQOwotCQllbHNlIGlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJZWxzZSBpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpICYmIHJhZGVvbl9hdWRpbykgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCWlmICghQVNJQ19JU19EQ0U0KHJkZXYpKQogCQlyZXR1cm47CiAKLQlpZiAoKGFjdGlvbiAhPSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PTikgfHwKKwlpZiAoKGFjdGlvbiAhPSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PTikgJiYKIAkgICAgKGFjdGlvbiAhPSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PRkYpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwppbmRleCBhMjg5NjQ2Li45ZWM4MzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCkBAIC0xMTAsMTEgKzExMCwxNCBAQAogCiBpbnQgcmFkZW9uX2lycV9rbXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlpbnQgaTsKIAlpbnQgciA9IDA7CiAKIAlJTklUX1dPUksoJnJkZXYtPmhvdHBsdWdfd29yaywgcmFkZW9uX2hvdHBsdWdfd29ya19mdW5jKTsKIAogCXNwaW5fbG9ja19pbml0KCZyZGV2LT5pcnEuc3dfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPm51bV9jcnRjOyBpKyspCisJCXNwaW5fbG9ja19pbml0KCZyZGV2LT5pcnEucGZsaXBfbG9ja1tpXSk7CiAJciA9IGRybV92YmxhbmtfaW5pdChyZGV2LT5kZGV2LCByZGV2LT5udW1fY3J0Yyk7CiAJaWYgKHIpIHsKIAkJcmV0dXJuIHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCmluZGV4IDI4YTUzZTQuLjgzODdkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC0yMDEsNiArMjAxLDEwIEBACiAJCX0KIAkJcmFkZW9uX3NldF9maWxwX3JpZ2h0cyhkZXYsICZyZGV2LT5jbWFza19maWxwLCBmaWxwLCAmdmFsdWUpOwogCQlicmVhazsKKwljYXNlIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUToKKwkJLyogcmV0dXJuIGNsb2NrIHZhbHVlIGluIEtIeiAqLworCQl2YWx1ZSA9IHJkZXYtPmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXEgKiAxMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNDMsNiArMjQ3LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKHJkZXYtPmh5cGVyel9maWxwID09IGZpbGVfcHJpdikKIAkJcmRldi0+aHlwZXJ6X2ZpbHAgPSBOVUxMOworCWlmIChyZGV2LT5jbWFza19maWxwID09IGZpbGVfcHJpdikKKwkJcmRldi0+Y21hc2tfZmlscCA9IE5VTEw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCBhY2UyZTYzLi5jZjA2MzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTc3OCw5ICs3NzgsOSBAQAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAoIXVzZV9iaW9zX2RpdnMpIHsKLQkJcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgbW9kZS0+Y2xvY2ssCi0JCQkJICAgJmZyZXEsICZmZWVkYmFja19kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCQkgICAmcmVmZXJlbmNlX2RpdiwgJnBvc3RfZGl2aWRlcik7CisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBtb2RlLT5jbG9jaywKKwkJCQkJICAmZnJlcSwgJmZlZWRiYWNrX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZlcmVuY2VfZGl2LCAmcG9zdF9kaXZpZGVyKTsKIAogCQlmb3IgKHBvc3RfZGl2ID0gJnBvc3RfZGl2c1swXTsgcG9zdF9kaXYtPmRpdmlkZXI7ICsrcG9zdF9kaXYpIHsKIAkJCWlmIChwb3N0X2Rpdi0+ZGl2aWRlciA9PSBwb3N0X2RpdmlkZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggMTJiZGVhYi4uNjc5NGNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVIgKDEgPDwgMTEpCiAjZGVmaW5lIFJBREVPTl9QTExfVVNFX1BPU1RfRElWICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIFJBREVPTl9QTExfSVNfTENEICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQICgxIDw8IDE0KQogCiBzdHJ1Y3QgcmFkZW9uX3BsbCB7CiAJLyogcmVmZXJlbmNlIGZyZXF1ZW5jeSAqLwpAQCAtNTEwLDEzICs1MTEsMjEgQEAKIAkJCQkJICAgICBzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzLAogCQkJCQkgICAgIGludCBpZCwgdTMyIGNsb2NrKTsKIAotZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQkgICAgICAgdWludDY0X3QgZnJlcSwKLQkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJCSAgICAgIHVpbnQ2NF90IGZyZXEsCisJCQkJICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKTsKKworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgICB1MzIgZnJlcSwKKwkJCQkgICAgIHUzMiAqZG90X2Nsb2NrX3AsCisJCQkJICAgICB1MzIgKmZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpyZWZfZGl2X3AsCisJCQkJICAgICB1MzIgKnBvc3RfZGl2X3ApOwogCiBleHRlcm4gdm9pZCByYWRlb25fc2V0dXBfZW5jb2Rlcl9jbG9uZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDNiMWIyYmYuLjJhZWQwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtNDMwLDcgKzQzMCw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRkZXYtPmRldl9wcml2YXRlOwotCXUzMiB0ZW1wOworCWludCB0ZW1wOwogCiAJc3dpdGNoIChyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlKSB7CiAJY2FzZSBUSEVSTUFMX1RZUEVfUlY2WFg6CkBAIC02NDYsNiArNjQ2LDkgQEAKICNlbmRpZgogCX0KIAorCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJa2ZyZWUocmRldi0+cG0ucG93ZXJfc3RhdGUpOworCiAJcmFkZW9uX2h3bW9uX2ZpbmkocmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggM2NkNGRhYy4uZWM5M2E3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTM3NSw2ICszNzUsOCBAQAogI2RlZmluZSBSQURFT05fQ09ORklHX0FQRVJfU0laRSAgICAgICAgICAgICAweDAxMDgKICNkZWZpbmUgUkFERU9OX0NPTkZJR19CT05EUyAgICAgICAgICAgICAgICAgMHgwMGU4CiAjZGVmaW5lIFJBREVPTl9DT05GSUdfQ05UTCAgICAgICAgICAgICAgICAgIDB4MDBlMAorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfUkFNX0VOICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfSU9fRElTICAgICAgICAoMSA8PCA5KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMSAgICAgICAoMCAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMiAgICAgICAoMSAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMyAgICAgICAoMiAgIDw8IDE2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IDU1MTJlNGUuLmM3NjI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIwMyw2ICsyMDMsOSBAQAogCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwogfQogCisjZGVmaW5lIFJTNDAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUlM0MDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQorCiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCiB7CiAJdWludDMyX3QgZW50cnk7CkBAIC0yMTMsNyArMjE2LDcgQEAKIAogCWVudHJ5ID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgJiBQQUdFX01BU0spIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgNCkgfAotCQkweGM7CisJCVJTNDAwX1BURV9XUklURUFCTEUgfCBSUzQwMF9QVEVfUkVBREFCTEU7CiAJZW50cnkgPSBjcHVfdG9fbGUzMihlbnRyeSk7CiAJcmRldi0+Z2FydC50YWJsZS5yYW0ucHRyW2ldID0gZW50cnk7CiAJcmV0dXJuIDA7CkBAIC0yMjYsOCArMjI5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzIoMHgwMTUwKTsKLQkJaWYgKHRtcCAmICgxIDw8IDIpKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fTUNfU1RBVFVTKTsKKwkJaWYgKHRtcCAmIFJBREVPTl9NQ19JRExFKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlEUk1fVURFTEFZKDEpOwpAQCAtMjQxLDcgKzI0NCw3IEBACiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwogCWlmIChyczQwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJzNDAwOiBGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uICUwOHhcbiIsIFJSRUczMigweDE1MCkpOworCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gJTA4eFxuIiwgUlJFRzMyKFJBREVPTl9NQ19TVEFUVVMpKTsKIAl9CiB9CiAKQEAgLTMwMCw5ICszMDMsOSBAQAogCQlzZXFfcHJpbnRmKG0sICJNQ0NGR19BR1BfQkFTRV8yIDB4JTA4eFxuIiwgdG1wKTsKIAkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DQ0ZHX0FHUF9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0FHUF9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7Ci0JCXRtcCA9IFJSRUczMl9NQygweDEwMCk7CisJCXRtcCA9IFJSRUczMl9NQyhSUzY5MF9NQ0NGR19GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0ZCX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKLQkJdG1wID0gUlJFRzMyKDB4MTM0KTsKKwkJdG1wID0gUlJFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIkhEUF9GQl9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7CiAJfSBlbHNlIHsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9BR1BfQkFTRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNWQ1NjlmNC4uNjRiNTdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtNjksMTMgKzY5LDEzIEBACiAJCQkgIElTWU5DX0NQU0NSQVRDSF9JRExFR1VJKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFdBSVRfVU5USUwsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfM0RfSURMRUNMRUFOKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcwQywgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMzEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9EU1RfUElQRV9DT05GSUcsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1BJUEVfQVVUT19DT05GSUcpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoR0JfU0VMRUNULCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChHQl9FTkFCTEUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4NDJDOCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjUwMF9TVV9SRUdfREVTVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IHJkZXYtPm51bV9nYl9waXBlcykgLSAxKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFZBUF9JTkRFWF9PRkZTRVQsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogCX0KIAlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKDB4NDAyQyk7Ci0JdG1wID0gUlJFRzMyKDB4MTcwQyk7CisJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoUjQwMF9HQl9QSVBFX1NFTEVDVCk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKIAlwaXBlX3NlbGVjdF9jdXJyZW50ID0gKHRtcCA+PiAyKSAmIDM7CiAJdG1wID0gKDEgPDwgcGlwZV9zZWxlY3RfY3VycmVudCkgfAogCSAgICAgICgoKGdiX3BpcGVfc2VsZWN0ID4+IDgpICYgMHhGKSA8PCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA0OTFkYzkwLi4yMjExYTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC03OCwxOCArNzgsMjMgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7Ci0JdTMyIGFjdHVhbF90ZW1wID0gMDsKKwlpbnQgYWN0dWFsX3RlbXA7CiAKLQlpZiAoKHRlbXAgPj4gOSkgJiAxKQotCQlhY3R1YWxfdGVtcCA9IDA7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpZiAodGVtcCAmIDB4NDAwKQorCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJZWxzZSBpZiAodGVtcCAmIDB4MjAwKQorCQlhY3R1YWxfdGVtcCA9IDI1NTsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAogdm9pZCBydjc3MF9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCmluZGV4IDA5YWVhNWYuLjcwZTYwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKQEAgLTEsMTEgKzEsMTMgQEAKIGNvbmZpZyBTVFVCX1BPVUxTQk8KIAl0cmlzdGF0ZSAiSW50ZWwgR01BNTAwIFN0dWIgRHJpdmVyIgogCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBORVQgIyBmb3IgVEhFUk1BTAogCSMgUG91bHNibyBzdHViIGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFDUEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3QgQUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaWYgQUNQSQogCXNlbGVjdCBJTlBVVCBpZiBBQ1BJCiAJc2VsZWN0IEFDUElfVklERU8gaWYgQUNQSQorCXNlbGVjdCBUSEVSTUFMIGlmIEFDUEkKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgSW50ZWwgR01BNTAwCiAJICAoUG91bHNibykgaW50ZWdyYXRlZCBncmFwaGljcy4gSWYgTSBpcyBzZWxlY3RlZCwgdGhlIG1vZHVsZSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKaW5kZXggYzM4MGM2NS4uYWNlMmIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwpAQCAtNjM2LDcgKzYzNiw3IEBACiAJCQl2b2lkICgqaXJxX3NldF9zdGF0ZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSwKIAkJCXVuc2lnbmVkIGludCAoKnNldF92Z2FfZGVjb2RlKSh2b2lkICpjb29raWUsIGJvb2wgZGVjb2RlKSkKIHsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldCA9IC1FTk9ERVY7CiAJc3RydWN0IHZnYV9kZXZpY2UgKnZnYWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggY2UwMzcyZi4uNGMwNzQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpAQCAtMTA3Miw2ICsxMDcyLDcgQEAKIAkJCW5vZGUtPnNkYS5kZXZfYXR0ci5zaG93ID0gZ3JwLT5zaG93OwogCQkJbm9kZS0+c2RhLmRldl9hdHRyLnN0b3JlID0gZ3JwLT5zdG9yZTsKIAkJCWF0dHIgPSAmbm9kZS0+c2RhLmRldl9hdHRyLmF0dHI7CisJCQlzeXNmc19hdHRyX2luaXQoYXR0cik7CiAJCQlhdHRyLT5uYW1lID0gbm9kZS0+bmFtZTsKIAkJCWF0dHItPm1vZGUgPSBTX0lSVUdPIHwgKGdycC0+c3RvcmUgPyBTX0lXVVNSIDogMCk7CiAJCQlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggMmQ2OGNmMy4uYjVlODkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaXhmLmg+CkBAIC0yMiw2ICsyMywyMSBAQAogCiAjZGVmaW5lIEFUS19ISUQgIkFUSzAxMTAiCiAKK3N0YXRpYyBib29sIG5ld19pZjsKK21vZHVsZV9wYXJhbShuZXdfaWYsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhuZXdfaWYsICJPdmVycmlkZSBkZXRlY3Rpb24gaGV1cmlzdGljIGFuZCBmb3JjZSB0aGUgdXNlIG9mIHRoZSBuZXcgQVRLMDExMCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGNvbnN0IGF0a19mb3JjZV9uZXdfaWZbXSA9IHsKKwl7CisJCS8qIE9sZCBpbnRlcmZhY2UgaGFzIGJyb2tlbiBNQ0ggdGVtcCBtb25pdG9yaW5nICovCisJCS5pZGVudCA9ICJBc3VzIFNhYmVydG9vdGggWDU4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJTQUJFUlRPT1RIIFg1OCIpCisJCX0KKwl9LAorCXsgfQorfTsKKwogLyogTWluaW11bSB0aW1lIGJldHdlZW4gcmVhZGluZ3MsIGVuZm9yY2VkIGluIG9yZGVyIHRvIGF2b2lkCiAgKiBob2dnaW5nIHRoZSBDUFUuCiAgKi8KQEAgLTEzMDIsNyArMTMxOCw5IEBACiAJICogYW5hbHlzaXMgb2YgbXVsdGlwbGUgRFNEVHMgaW5kaWNhdGVzIHRoYXQgd2hlbiBib3RoIGludGVyZmFjZXMKIAkgKiBhcmUgcHJlc2VudCB0aGUgbmV3IG9uZSAoR0dSUC9HSVRNKSBpcyBub3QgZnVuY3Rpb25hbC4KIAkgKi8KLQlpZiAoZGF0YS0+cnRtcF9oYW5kbGUgJiYgZGF0YS0+cnZsdF9oYW5kbGUgJiYgZGF0YS0+cmZhbl9oYW5kbGUpCisJaWYgKG5ld19pZikKKwkJZGV2X2luZm8oZGV2LCAiT3ZlcnJpZGluZyBpbnRlcmZhY2UgZGV0ZWN0aW9uXG4iKTsKKwlpZiAoZGF0YS0+cnRtcF9oYW5kbGUgJiYgZGF0YS0+cnZsdF9oYW5kbGUgJiYgZGF0YS0+cmZhbl9oYW5kbGUgJiYgIW5ld19pZikKIAkJZGF0YS0+b2xkX2ludGVyZmFjZSA9IHRydWU7CiAJZWxzZSBpZiAoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSAmJiBkYXRhLT5yZWFkX2hhbmRsZSAmJgogCQkJZGF0YS0+d3JpdGVfaGFuZGxlKQpAQCAtMTQyMCw2ICsxNDM4LDkgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShhdGtfZm9yY2VfbmV3X2lmKSkKKwkJbmV3X2lmID0gdHJ1ZTsKKwogCXJldCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYXRrX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcHJfaW5mbygiYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZDogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYyBiL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jCmluZGV4IDVkZWE5ZmEuLmNkMmE2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jCkBAIC0zNDQsNyArMzQ0LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGVtYzE0MDNfYWRkcmVzc19saXN0W10gPSB7Ci0JMHgxOCwgMHgyYSwgMHg0YywgMHg0ZCwgSTJDX0NMSUVOVF9FTkQKKwkweDE4LCAweDI5LCAweDRjLCAweDRkLCBJMkNfQ0xJRU5UX0VORAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGVtYzE0MDNfaWR0YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKaW5kZXggMWI2NzRiNy4uZDgwNWU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYworKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCkBAIC05NTcsNyArOTU3LDcgQEAKIAogCS8qIGJhaWwgaWYgd2UgZGlkIG5vdCBnZXQgYW4gSVJRIGZyb20gdGhlIGJ1cyBsYXllciAqLwogCWlmICghZGV2LT5pcnEpIHsKLQkJcHJfZXJyKCJObyBJUlEuIERpc2FibGluZyAvZGV2L2ZyZWVmYWxsXG4iKTsKKwkJcHJfZGVidWcoIk5vIElSUS4gRGlzYWJsaW5nIC9kZXYvZnJlZWZhbGxcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG02My5jIGIvZHJpdmVycy9od21vbi9sbTYzLmMKaW5kZXggNzc2YWViMy4uNTA4Y2IyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTYzLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTYzLmMKQEAgLTk4LDYgKzk4LDkgQEAKICAqIHZhbHVlLCBpdCB1c2VzIHNpZ25lZCA4LWJpdCB2YWx1ZXMgd2l0aCBMU0IgPSAxIGRlZ3JlZSBDZWxzaXVzLgogICogRm9yIHJlbW90ZSB0ZW1wZXJhdHVyZSwgbG93IGFuZCBoaWdoIGxpbWl0cywgaXQgdXNlcyBzaWduZWQgMTEtYml0IHZhbHVlcwogICogd2l0aCBMU0IgPSAwLjEyNSBkZWdyZWUgQ2Vsc2l1cywgbGVmdC1qdXN0aWZpZWQgaW4gMTYtYml0IHJlZ2lzdGVycy4KKyAqIEZvciBMTTY0IHRoZSBhY3R1YWwgcmVtb3RlIGRpb2RlIHRlbXBlcmF0dXJlIGlzIDE2IGRlZ3JlZSBDZWxzaXVzIGhpZ2hlcgorICogdGhhbiB0aGUgcmVnaXN0ZXIgcmVhZGluZy4gUmVtb3RlIHRlbXBlcmF0dXJlIHNldHBvaW50cyBoYXZlIHRvIGJlCisgKiBhZGFwdGVkIGFjY29yZGluZ2x5LgogICovCiAKICNkZWZpbmUgRkFOX0ZST01fUkVHKHJlZykJKChyZWcpID09IDB4RkZGQyB8fCAocmVnKSA9PSAwID8gMCA6IFwKQEAgLTE2NSw2ICsxNjgsOCBAQAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KKwlpbnQga2luZDsKKwlpbnQgdGVtcDJfb2Zmc2V0OwogCiAJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLwogCXU4IGNvbmZpZywgY29uZmlnX2ZhbjsKQEAgLTI0NywxNiArMjUyLDM0IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmNvbmZpZ19mYW4gJiAweDIwID8gMSA6IDIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgIGNoYXIgKmJ1ZikKKy8qCisgKiBUaGVyZSBhcmUgOGJpdCByZWdpc3RlcnMgZm9yIGJvdGggbG9jYWwodGVtcDEpIGFuZCByZW1vdGUodGVtcDIpIHNlbnNvci4KKyAqIEZvciByZW1vdGUgc2Vuc29yIHJlZ2lzdGVycyB0ZW1wMl9vZmZzZXQgaGFzIHRvIGJlIGNvbnNpZGVyZWQsCisgKiBmb3IgbG9jYWwgc2Vuc29yIGl0IG11c3Qgbm90LgorICogU28gd2UgbmVlZCBzZXBhcmF0ZSA4Yml0IGFjY2Vzc29ycyBmb3IgbG9jYWwgYW5kIHJlbW90ZSBzZW5zb3IuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfbG9jYWxfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmR1bW15LAotCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2hvd19yZW1vdGVfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkKKwkJICAgICAgICsgZGF0YS0+dGVtcDJfb2Zmc2V0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2xvY2FsX3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZHVtbXksCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC0yNzQsNyArMjk3LDggQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMTFfRlJPTV9SRUcoZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMTFfRlJPTV9SRUcoZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSkKKwkJICAgICAgICsgZGF0YS0+dGVtcDJfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAxMShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApAQCAtMjk0LDcgKzMxOCw3IEBACiAJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+dGVtcDExW25yXSA9IFRFTVAxMV9UT19SRUcodmFsKTsKKwlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDExX1RPX1JFRyh2YWwgLSBkYXRhLT50ZW1wMl9vZmZzZXQpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbKG5yIC0gMSkgKiAyXSwKIAkJCQkgIGRhdGEtPnRlbXAxMVtucl0gPj4gOCk7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDIgKyAxXSwKQEAgLTMxMCw2ICszMzQsNyBAQAogewogCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbMl0pCisJCSAgICAgICArIGRhdGEtPnRlbXAyX29mZnNldAogCQkgICAgICAgLSBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wMl9jcml0X2h5c3QpKTsKIH0KIApAQCAtMzI0LDcgKzM0OSw3IEBACiAJbG9uZyBoeXN0OwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWh5c3QgPSBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFsyXSkgLSB2YWw7CisJaHlzdCA9IFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4WzJdKSArIGRhdGEtPnRlbXAyX29mZnNldCAtIHZhbDsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE02M19SRUdfUkVNT1RFX1RDUklUX0hZU1QsCiAJCQkJICBIWVNUX1RPX1JFRyhoeXN0KSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC0zNTUsMTYgKzM4MCwyMSBAQAogc3RhdGljIERFVklDRV9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bTEsIHNldF9wd20xKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwgU19JUlVHTywgc2hvd19wd20xX2VuYWJsZSwgTlVMTCk7CiAKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LAotCXNldF90ZW1wOCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X2xvY2FsX3RlbXA4LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sb2NhbF90ZW1wOCwKKwlzZXRfbG9jYWxfdGVtcDgsIDEpOwogCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAyKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMik7CisvKgorICogT24gTE02MywgdGVtcDJfY3JpdCBjYW4gYmUgc2V0IG9ubHkgb25jZSwgd2hpY2ggc2hvdWxkIGJlIGpvYgorICogb2YgdGhlIGJvb3Rsb2FkZXIuCisgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdCwgU19JUlVHTywgc2hvd19yZW1vdGVfdGVtcDgsCisJTlVMTCwgMik7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMl9jcml0X2h5c3QsCiAJc2V0X3RlbXAyX2NyaXRfaHlzdCk7CiAKQEAgLTQ3OSw3ICs1MDksMTIgQEAKIAlkYXRhLT52YWxpZCA9IDA7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgTE02MyBjaGlwICovCisJLyogU2V0IHRoZSBkZXZpY2UgdHlwZSAqLworCWRhdGEtPmtpbmQgPSBpZC0+ZHJpdmVyX2RhdGE7CisJaWYgKGRhdGEtPmtpbmQgPT0gbG02NCkKKwkJZGF0YS0+dGVtcDJfb2Zmc2V0ID0gMTYwMDA7CisKKwkvKiBJbml0aWFsaXplIGNoaXAgKi8KIAlsbTYzX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCmluZGV4IDdhY2IzMmUuLjFmYTA5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKKysrIGIvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJY2xvY2tldmVudHNfbm90aWZ5KHJlYXNvbiwgJmNwdSk7CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IHNldHVwX2Jyb2FkY2FzdF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAorc3RhdGljIGludCBzZXR1cF9icm9hZGNhc3RfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKIAkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJaW50IGhvdGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CkBAIC0yNzMsMTUgKzI3MywxMSBAQAogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaG90Y3B1LCBfX3NldHVwX2Jyb2FkY2FzdF90aW1lciwKIAkJCSh2b2lkICopdHJ1ZSwgMSk7CiAJCWJyZWFrOwotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGhvdGNwdSwgX19zZXR1cF9icm9hZGNhc3RfdGltZXIsCi0JCQkodm9pZCAqKWZhbHNlLCAxKTsKLQkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBzZXR1cF9icm9hZGNhc3Rfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNldHVwX2Jyb2FkY2FzdF9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IHNldHVwX2Jyb2FkY2FzdF9jcHVocF9ub3RpZnksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCBlMzhiZTFiLi5mYmJmYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAKIAlpYl91bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoJnNhX2Rldi0+ZXZlbnRfaGFuZGxlcik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtxdWV1ZShpYl93cSk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IHNhX2Rldi0+ZW5kX3BvcnQgLSBzYV9kZXYtPnN0YXJ0X3BvcnQ7ICsraSkgewogCQlpZiAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGRldmljZSwgaSArIDEpID09IElCX0xJTktfTEFZRVJfSU5GSU5JQkFORCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCmluZGV4IGNhMTJhY2YuLmVjMWU5ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKQEAgLTYzNiw2ICs2MzYsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVjbWFfY29weV9pd19yb3V0ZShzdHJ1Y3QgcmRtYV91Y21fcXVlcnlfcm91dGVfcmVzcCAqcmVzcCwKKwkJCSAgICAgICBzdHJ1Y3QgcmRtYV9yb3V0ZSAqcm91dGUpCit7CisJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCisJZGV2X2FkZHIgPSAmcm91dGUtPmFkZHIuZGV2X2FkZHI7CisJcmRtYV9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZyZXNwLT5pYl9yb3V0ZVswXS5kZ2lkKTsKKwlyZG1hX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLnNnaWQpOworfQorCiBzdGF0aWMgc3NpemVfdCB1Y21hX3F1ZXJ5X3JvdXRlKHN0cnVjdCB1Y21hX2ZpbGUgKmZpbGUsCiAJCQkJY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAogCQkJCWludCBpbl9sZW4sIGludCBvdXRfbGVuKQpAQCAtNjcwLDggKzY4MCwxMCBAQAogCiAJcmVzcC5ub2RlX2d1aWQgPSAoX19mb3JjZSBfX3U2NCkgY3R4LT5jbV9pZC0+ZGV2aWNlLT5ub2RlX2d1aWQ7CiAJcmVzcC5wb3J0X251bSA9IGN0eC0+Y21faWQtPnBvcnRfbnVtOwotCWlmIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChjdHgtPmNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSkgPT0gUkRNQV9UUkFOU1BPUlRfSUIpIHsKLQkJc3dpdGNoIChyZG1hX3BvcnRfZ2V0X2xpbmtfbGF5ZXIoY3R4LT5jbV9pZC0+ZGV2aWNlLCBjdHgtPmNtX2lkLT5wb3J0X251bSkpIHsKKwlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CisJCXN3aXRjaCAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGN0eC0+Y21faWQtPmRldmljZSwKKwkJCWN0eC0+Y21faWQtPnBvcnRfbnVtKSkgewogCQljYXNlIElCX0xJTktfTEFZRVJfSU5GSU5JQkFORDoKIAkJCXVjbWFfY29weV9pYl9yb3V0ZSgmcmVzcCwgJmN0eC0+Y21faWQtPnJvdXRlKTsKIAkJCWJyZWFrOwpAQCAtNjgxLDYgKzY5MywxMiBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KKwkJYnJlYWs7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKKwkJdWNtYV9jb3B5X2l3X3JvdXRlKCZyZXNwLCAmY3R4LT5jbV9pZC0+cm91dGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKaW5kZXggOWNlNzgxOWIuLjJlYzcxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGMyX3ZxX3JlcSksIEdGUF9LRVJORUwpOwogCWlmIChyKSB7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnItPndhaXRfb2JqZWN0KTsKLQkJci0+cmVwbHlfbXNnID0gKHU2NCkgTlVMTDsKKwkJci0+cmVwbHlfbXNnID0gMDsKIAkJci0+ZXZlbnQgPSAwOwogCQlyLT5jbV9pZCA9IE5VTEw7CiAJCXItPnFwID0gTlVMTDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICovCiB2b2lkIHZxX3JlcV9mcmVlKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfdnFfcmVxICpyKQogewotCXItPnJlcGx5X21zZyA9ICh1NjQpIE5VTEw7CisJci0+cmVwbHlfbXNnID0gMDsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmci0+cmVmY250KSkgewogCQlrZnJlZShyKTsKIAl9CkBAIC0xNTEsNyArMTUxLDcgQEAKIHZvaWQgdnFfcmVxX3B1dChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcikKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmci0+cmVmY250KSkgewotCQlpZiAoci0+cmVwbHlfbXNnICE9ICh1NjQpIE5VTEwpCisJCWlmIChyLT5yZXBseV9tc2cgIT0gMCkKIAkJCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LAogCQkJCSAgICAgICAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgci0+cmVwbHlfbXNnKTsKIAkJa2ZyZWUocik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCmluZGV4IDBkYzYyYjEuLjhiMDBlNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJCQkJICAxNikpIHwgRldfV1JfRkxPV0lEKGVwLT5od3RpZCkpOwogCiAJZmxvd2MtPm1uZW12YWxbMF0ubW5lbW9uaWMgPSBGV19GTE9XQ19NTkVNX1BGTlZGTjsKLQlmbG93Yy0+bW5lbXZhbFswXS52YWwgPSBjcHVfdG9fYmUzMigwKTsKKwlmbG93Yy0+bW5lbXZhbFswXS52YWwgPSBjcHVfdG9fYmUzMihQQ0lfRlVOQyhlcC0+Y29tLmRldi0+cmRldi5sbGRpLnBkZXYtPmRldmZuKSA8PCA4KTsKIAlmbG93Yy0+bW5lbXZhbFsxXS5tbmVtb25pYyA9IEZXX0ZMT1dDX01ORU1fQ0g7CiAJZmxvd2MtPm1uZW12YWxbMV0udmFsID0gY3B1X3RvX2JlMzIoZXAtPnR4X2NoYW4pOwogCWZsb3djLT5tbmVtdmFsWzJdLm1uZW1vbmljID0gRldfRkxPV0NfTU5FTV9QT1JUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYwppbmRleCAyMDgwMDkwLi40ZjBiZTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJCVZfRldfUklfUkVTX1dSX0RDQUVOKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRENBQ1BVKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAotCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgzKSB8CisJCVZfRldfUklfUkVTX1dSX0ZCTUFYKDIpIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0goMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9FUVNJWkUoZXFzaXplKSk7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJVl9GV19SSV9SRVNfV1JfRENBRU4oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FDUFUoMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9GQk1JTigyKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUFYKDMpIHwKKwkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMikgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0VRU0laRShlcXNpemUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwppbmRleCA1MGNjZWIzLi5iMDE4MDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCkBAIC02MjMsNyArNjIzLDYgQEAKIAl1OCBpYm1hbGZ1c2VzbmFwOwogCXN0cnVjdCBxaWJfcXNmcF9kYXRhIHFzZnBfZGF0YTsKIAljaGFyIGVwbXNnYnVmWzE5Ml07IC8qIGZvciBwb3J0IGVycm9yIGludGVycnVwdCBtc2cgYnVmZmVyICovCi0JdTggYm91bmNlZDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMTg4MSwyMyArMTg4MCw3IEBACiAJCSAgICBJQl9QSFlTUE9SVFNUQVRFX0RJU0FCTEVEKQogCQkJcWliX3NldF9pYl83MzIyX2xzdGF0ZShwcGQsIDAsCiAJCQkgICAgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7Ci0JCWVsc2UgewotCQkJdTMyIGxzdGF0ZTsKLQkJCS8qCi0JCQkgKiBXZSBuZWVkIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluayBzdGF0ZSBiZWZvcmUKLQkJCSAqIGxmbGFncyBhcmUgc2V0IGluIGhhbmRsZV9lX2lic3RhdHVzY2hhbmdlZC4KLQkJCSAqLwotCQkJbHN0YXRlID0gcWliXzczMjJfaWJsaW5rX3N0YXRlKGliY3MpOwotCi0JCQlpZiAoSVNfUU1IKGRkKSAmJiAhcHBkLT5jcHNwZWMtPmJvdW5jZWQgJiYKLQkJCSAgICBsdHN0YXRlID09IElCX1BIWVNQT1JUU1RBVEVfTElOS1VQICYmCi0JCQkgICAgKGxzdGF0ZSA+PSBJQl9QT1JUX0lOSVQgJiYKLQkJCQlsc3RhdGUgPD0gSUJfUE9SVF9BQ1RJVkUpKSB7Ci0JCQkJcHBkLT5jcHNwZWMtPmJvdW5jZWQgPSAxOwotCQkJCXFpYl83MzIyX3NldF9pYl9jZmcocHBkLCBRSUJfSUJfQ0ZHX0xTVEFURSwKLQkJCQkJSUJfTElOS0NNRF9ET1dOIHwgSUJfTElOS0lOSVRDTURfUE9MTCk7Ci0JCQl9Ci0KKwkJZWxzZQogCQkJLyoKIAkJCSAqIFNpbmNlIGdvaW5nIGludG8gYSByZWNvdmVyeSBzdGF0ZSBjYXVzZXMgdGhlIGxpbmsKIAkJCSAqIHN0YXRlIHRvIGdvIGRvd24gYW5kIHNpbmNlIHJlY292ZXJ5IGlzIHRyYW5zaXRvcnksCkBAIC0xOTExLDcgKzE4OTQsNiBAQAogCQkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9XQUlUUk1UICYmCiAJCQkgICAgbHRzdGF0ZSAhPSBJQl9QSFlTUE9SVFNUQVRFX1JFQ09WRVJZX0lETEUpCiAJCQkJcWliX2hhbmRsZV9lX2lic3RhdHVzY2hhbmdlZChwcGQsIGliY3MpOwotCQl9CiAJfQogCWlmICgqbXNnICYmIGlzZXJyKQogCQlxaWJfZGV2X3BvcnRlcnIoZGQsIHBwZC0+cG9ydCwgIiVzIGVycm9yXG4iLCBtc2cpOwpAQCAtMjM4MSw2ICsyMzYzLDExIEBACiAJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9yY3ZjdHJsLCBwcGQtPnBfcmN2Y3RybCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmNzcGVjLT5yY3Ztb2RfbG9jaywgZmxhZ3MpOwogCisJLyogSG9sZCB0aGUgbGluayBzdGF0ZSBtYWNoaW5lIGZvciBtZXp6IGJvYXJkcyAqLworCWlmIChJU19RTUgoZGQpIHx8IElTX1FNRShkZCkpCisJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAorCQkJCSAgICAgICBRTE9HSUNfSUJfSUJDQ19MSU5LSU5JVENNRF9ESVNBQkxFKTsKKwogCS8qIEFsc28gZW5hYmxlIElCU1RBVFVTQ0hHIGludGVycnVwdC4gICovCiAJdmFsID0gcWliX3JlYWRfa3JlZ19wb3J0KHBwZCwga3JwX2Vycm1hc2spOwogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfZXJybWFzaywKQEAgLTU3MDIsNiArNTY4OSwxMSBAQAogCQkJCXBwZC0+Y3BzcGVjLT5oMV92YWwgPSBoMTsKIAkJCS8qIG5vdyBjaGFuZ2UgdGhlIElCQyBhbmQgc2VyZGVzLCBvdmVycmlkaW5nIGdlbmVyaWMgKi8KIAkJCWluaXRfdHhkZHNfdGFibGUocHBkLCAxKTsKKwkJCS8qIFJlLWVuYWJsZSB0aGUgcGh5c2ljYWwgc3RhdGUgbWFjaGluZSBvbiBtZXp6IGJvYXJkcworCQkJICogbm93IHRoYXQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MgaGF2ZSBiZWVuIHNldC4gKi8KKwkJCWlmIChJU19RTUgoZGQpIHx8IElTX1FNRShkZCkpCisJCQkJcWliX3NldF9pYl83MzIyX2xzdGF0ZShwcGQsIDAsCisJCQkJCSAgICBRTE9HSUNfSUJfSUJDQ19MSU5LSU5JVENNRF9TTEVFUCk7CiAJCQlhbnkrKzsKIAkJfQogCQlpZiAoKm54dCA9PSAnXG4nKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDQxNzUwNzMuLmM3YTkyMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTM0Myw2ICszNDMsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5tay1za2Uta2V5cGFkLgogCitjb25maWcgS0VZQk9BUkRfVEVHUkEKKwl0cmlzdGF0ZSAiTlZJRElBIFRlZ3JhIGludGVybmFsIG1hdHJpeCBrZXlib2FyZCBjb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX1RFR1JBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBtYXRyaXgga2V5Ym9hcmQgY29ubmVjdGVkIGRpcmVjdGx5CisJICB0byB0aGUgaW50ZXJuYWwga2V5Ym9hcmQgY29udHJvbGxlciBvbiBUZWdyYSBTb0NzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0ZWdyYS1rYmMuCisKIGNvbmZpZyBLRVlCT0FSRF9PUEVOQ09SRVMKIAl0cmlzdGF0ZSAiT3BlbkNvcmVzIEtleWJvYXJkIENvbnRyb2xsZXIiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggNGU1NTcxYi4uNDY4YzYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkpCQkrPSBzdG93YXdheS5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1VOS0JEKQkJKz0gc3Vua2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9UQzM1ODlYKQkJKz0gdGMzNTg5eC1rZXlwYWQubworb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RFR1JBKQkJKz0gdGVncmEta2JjLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9UTkVUVjEwN1gpCSs9IHRuZXR2MTA3eC1rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RXTDQwMzApCQkrPSB0d2w0MDMwX2tleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfWFRLQkQpCQkrPSB4dGtiZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwppbmRleCA2MDY5YWJlLi5lYjMwMDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSBiZGF0YS0+YnV0dG9uOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gYmRhdGEtPmlucHV0OwogCXVuc2lnbmVkIGludCB0eXBlID0gYnV0dG9uLT50eXBlID86IEVWX0tFWTsKLQlpbnQgc3RhdGUgPSAoZ3Bpb19nZXRfdmFsdWUoYnV0dG9uLT5ncGlvKSA/IDEgOiAwKSBeIGJ1dHRvbi0+YWN0aXZlX2xvdzsKKwlpbnQgc3RhdGUgPSAoZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoYnV0dG9uLT5ncGlvKSA/IDEgOiAwKSBeIGJ1dHRvbi0+YWN0aXZlX2xvdzsKIAogCWlucHV0X2V2ZW50KGlucHV0LCB0eXBlLCBidXR0b24tPmNvZGUsICEhc3RhdGUpOwogCWlucHV0X3N5bmMoaW5wdXQpOwpAQCAtNDEwLDggKzQxMCw4IEBACiAJaWYgKCFidXR0b24tPmNhbl9kaXNhYmxlKQogCQlpcnFmbGFncyB8PSBJUlFGX1NIQVJFRDsKIAotCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLCBpcnFmbGFncywgZGVzYywgYmRhdGEpOwotCWlmIChlcnJvcikgeworCWVycm9yID0gcmVxdWVzdF9hbnlfY29udGV4dF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLCBpcnFmbGFncywgZGVzYywgYmRhdGEpOworCWlmIChlcnJvciA8IDApIHsKIAkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwKIAkJCWlycSwgZXJyb3IpOwogCQlnb3RvIGZhaWwzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGVncmEta2JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0NzFiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGVncmEta2JjLmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qCisgKiBLZXlib2FyZCBjbGFzcyBpbnB1dCBkcml2ZXIgZm9yIHRoZSBOVklESUEgVGVncmEgU29DIGludGVybmFsIG1hdHJpeAorICoga2V5Ym9hcmQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDExLCBOVklESUEgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bWFjaC9jbGsuaD4KKyNpbmNsdWRlIDxtYWNoL2tiYy5oPgorCisjZGVmaW5lIEtCQ19NQVhfREVCT1VOQ0VfQ05UCTB4M2ZmdQorCisvKiBLQkMgcm93IHNjYW4gdGltZSBhbmQgZGVsYXkgZm9yIGJlZ2lubmluZyB0aGUgcm93IHNjYW4uICovCisjZGVmaW5lIEtCQ19ST1dfU0NBTl9USU1FCTE2CisjZGVmaW5lIEtCQ19ST1dfU0NBTl9ETFkJNQorCisvKiBLQkMgdXNlcyBhIDMyS0h6IGNsb2NrIHNvIGEgY3ljbGUgPSAxLzMyS2h6ICovCisjZGVmaW5lIEtCQ19DWUNMRV9VU0VDCTMyCisKKy8qIEtCQyBSZWdpc3RlcnMgKi8KKworLyogS0JDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS0JDX0NPTlRST0xfMAkweDAKKyNkZWZpbmUgS0JDX0ZJRk9fVEhfQ05UX1NISUZUKGNudCkJKGNudCA8PCAxNCkKKyNkZWZpbmUgS0JDX0RFQk9VTkNFX0NOVF9TSElGVChjbnQpCShjbnQgPDwgNCkKKyNkZWZpbmUgS0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOCSgxIDw8IDMpCisjZGVmaW5lIEtCQ19DT05UUk9MX0tCQ19FTgkJKDEgPDwgMCkKKworLyogS0JDIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZSBLQkNfSU5UXzAJMHg0CisjZGVmaW5lIEtCQ19JTlRfRklGT19DTlRfSU5UX1NUQVRVUwkoMSA8PCAyKQorCisjZGVmaW5lIEtCQ19ST1dfQ0ZHMF8wCTB4OAorI2RlZmluZSBLQkNfQ09MX0NGRzBfMAkweDE4CisjZGVmaW5lIEtCQ19JTklUX0RMWV8wCTB4MjgKKyNkZWZpbmUgS0JDX1JQVF9ETFlfMAkweDJjCisjZGVmaW5lIEtCQ19LUF9FTlQwXzAJMHgzMAorI2RlZmluZSBLQkNfS1BfRU5UMV8wCTB4MzQKKyNkZWZpbmUgS0JDX1JPVzBfTUFTS18wCTB4MzgKKworI2RlZmluZSBLQkNfUk9XX1NISUZUCTMKKworc3RydWN0IHRlZ3JhX2tiYyB7CisJdm9pZCBfX2lvbWVtICptbWlvOworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgd2FrZV9lbmFibGVfcm93czsKKwl1bnNpZ25lZCBpbnQgd2FrZV9lbmFibGVfY29sczsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IHJlcG9sbF9kbHk7CisJdW5zaWduZWQgbG9uZyBjcF9kbHlfamlmZmllczsKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVbS0JDX01BWF9LRVldOworCXVuc2lnbmVkIHNob3J0IGN1cnJlbnRfa2V5c1tLQkNfTUFYX0tQRU5UXTsKKwl1bnNpZ25lZCBpbnQgbnVtX3ByZXNzZWRfa2V5czsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgY2xrICpjbGs7Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcFtdID0geworCUtFWSgwLCAyLCBLRVlfVyksCisJS0VZKDAsIDMsIEtFWV9TKSwKKwlLRVkoMCwgNCwgS0VZX0EpLAorCUtFWSgwLCA1LCBLRVlfWiksCisJS0VZKDAsIDcsIEtFWV9GTiksCisKKwlLRVkoMSwgNywgS0VZX0xFRlRNRVRBKSwKKworCUtFWSgyLCA2LCBLRVlfUklHSFRBTFQpLAorCUtFWSgyLCA3LCBLRVlfTEVGVEFMVCksCisKKwlLRVkoMywgMCwgS0VZXzUpLAorCUtFWSgzLCAxLCBLRVlfNCksCisJS0VZKDMsIDIsIEtFWV9SKSwKKwlLRVkoMywgMywgS0VZX0UpLAorCUtFWSgzLCA0LCBLRVlfRiksCisJS0VZKDMsIDUsIEtFWV9EKSwKKwlLRVkoMywgNiwgS0VZX1gpLAorCisJS0VZKDQsIDAsIEtFWV83KSwKKwlLRVkoNCwgMSwgS0VZXzYpLAorCUtFWSg0LCAyLCBLRVlfVCksCisJS0VZKDQsIDMsIEtFWV9IKSwKKwlLRVkoNCwgNCwgS0VZX0cpLAorCUtFWSg0LCA1LCBLRVlfViksCisJS0VZKDQsIDYsIEtFWV9DKSwKKwlLRVkoNCwgNywgS0VZX1NQQUNFKSwKKworCUtFWSg1LCAwLCBLRVlfOSksCisJS0VZKDUsIDEsIEtFWV84KSwKKwlLRVkoNSwgMiwgS0VZX1UpLAorCUtFWSg1LCAzLCBLRVlfWSksCisJS0VZKDUsIDQsIEtFWV9KKSwKKwlLRVkoNSwgNSwgS0VZX04pLAorCUtFWSg1LCA2LCBLRVlfQiksCisJS0VZKDUsIDcsIEtFWV9CQUNLU0xBU0gpLAorCisJS0VZKDYsIDAsIEtFWV9NSU5VUyksCisJS0VZKDYsIDEsIEtFWV8wKSwKKwlLRVkoNiwgMiwgS0VZX08pLAorCUtFWSg2LCAzLCBLRVlfSSksCisJS0VZKDYsIDQsIEtFWV9MKSwKKwlLRVkoNiwgNSwgS0VZX0spLAorCUtFWSg2LCA2LCBLRVlfQ09NTUEpLAorCUtFWSg2LCA3LCBLRVlfTSksCisKKwlLRVkoNywgMSwgS0VZX0VRVUFMKSwKKwlLRVkoNywgMiwgS0VZX1JJR0hUQlJBQ0UpLAorCUtFWSg3LCAzLCBLRVlfRU5URVIpLAorCUtFWSg3LCA3LCBLRVlfTUVOVSksCisKKwlLRVkoOCwgNCwgS0VZX1JJR0hUU0hJRlQpLAorCUtFWSg4LCA1LCBLRVlfTEVGVFNISUZUKSwKKworCUtFWSg5LCA1LCBLRVlfUklHSFRDVFJMKSwKKwlLRVkoOSwgNywgS0VZX0xFRlRDVFJMKSwKKworCUtFWSgxMSwgMCwgS0VZX0xFRlRCUkFDRSksCisJS0VZKDExLCAxLCBLRVlfUCksCisJS0VZKDExLCAyLCBLRVlfQVBPU1RST1BIRSksCisJS0VZKDExLCAzLCBLRVlfU0VNSUNPTE9OKSwKKwlLRVkoMTEsIDQsIEtFWV9TTEFTSCksCisJS0VZKDExLCA1LCBLRVlfRE9UKSwKKworCUtFWSgxMiwgMCwgS0VZX0YxMCksCisJS0VZKDEyLCAxLCBLRVlfRjkpLAorCUtFWSgxMiwgMiwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDEyLCAzLCBLRVlfMyksCisJS0VZKDEyLCA0LCBLRVlfMiksCisJS0VZKDEyLCA1LCBLRVlfVVApLAorCUtFWSgxMiwgNiwgS0VZX1BSSU5UKSwKKwlLRVkoMTIsIDcsIEtFWV9QQVVTRSksCisKKwlLRVkoMTMsIDAsIEtFWV9JTlNFUlQpLAorCUtFWSgxMywgMSwgS0VZX0RFTEVURSksCisJS0VZKDEzLCAzLCBLRVlfUEFHRVVQKSwKKwlLRVkoMTMsIDQsIEtFWV9QQUdFRE9XTiksCisJS0VZKDEzLCA1LCBLRVlfUklHSFQpLAorCUtFWSgxMywgNiwgS0VZX0RPV04pLAorCUtFWSgxMywgNywgS0VZX0xFRlQpLAorCisJS0VZKDE0LCAwLCBLRVlfRjExKSwKKwlLRVkoMTQsIDEsIEtFWV9GMTIpLAorCUtFWSgxNCwgMiwgS0VZX0Y4KSwKKwlLRVkoMTQsIDMsIEtFWV9RKSwKKwlLRVkoMTQsIDQsIEtFWV9GNCksCisJS0VZKDE0LCA1LCBLRVlfRjMpLAorCUtFWSgxNCwgNiwgS0VZXzEpLAorCUtFWSgxNCwgNywgS0VZX0Y3KSwKKworCUtFWSgxNSwgMCwgS0VZX0VTQyksCisJS0VZKDE1LCAxLCBLRVlfR1JBVkUpLAorCUtFWSgxNSwgMiwgS0VZX0Y1KSwKKwlLRVkoMTUsIDMsIEtFWV9UQUIpLAorCUtFWSgxNSwgNCwgS0VZX0YxKSwKKwlLRVkoMTUsIDUsIEtFWV9GMiksCisJS0VZKDE1LCA2LCBLRVlfQ0FQU0xPQ0spLAorCUtFWSgxNSwgNywgS0VZX0Y2KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gdGVncmFfa2JjX2RlZmF1bHRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUodGVncmFfa2JjX2RlZmF1bHRfa2V5bWFwKSwKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19yZXBvcnRfcmVsZWFzZWRfa2V5cyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkJICAgdW5zaWduZWQgc2hvcnQgb2xkX2tleWNvZGVzW10sCisJCQkJCSAgIHVuc2lnbmVkIGludCBvbGRfbnVtX2tleXMsCisJCQkJCSAgIHVuc2lnbmVkIHNob3J0IG5ld19rZXljb2Rlc1tdLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbmV3X251bV9rZXlzKQoreworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IG9sZF9udW1fa2V5czsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBuZXdfbnVtX2tleXM7IGorKykKKwkJCWlmIChvbGRfa2V5Y29kZXNbaV0gPT0gbmV3X2tleWNvZGVzW2pdKQorCQkJCWJyZWFrOworCisJCWlmIChqID09IG5ld19udW1fa2V5cykKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIG9sZF9rZXljb2Rlc1tpXSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X3ByZXNzZWRfa2V5cyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkJICB1bnNpZ25lZCBjaGFyIHNjYW5jb2Rlc1tdLAorCQkJCQkgIHVuc2lnbmVkIHNob3J0IGtleWNvZGVzW10sCisJCQkJCSAgdW5zaWduZWQgaW50IG51bV9wcmVzc2VkX2tleXMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3ByZXNzZWRfa2V5czsgaSsrKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBzY2FuY29kZXNbaV0pOworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2Rlc1tpXSwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X2tleXMoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCXVuc2lnbmVkIGNoYXIgc2NhbmNvZGVzW0tCQ19NQVhfS1BFTlRdOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVzW0tCQ19NQVhfS1BFTlRdOworCXUzMiB2YWwgPSAwOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBudW1fZG93biA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9LUEVOVDsgaSsrKSB7CisJCWlmICgoaSAlIDQpID09IDApCisJCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfS1BfRU5UMF8wICsgaSk7CisKKwkJaWYgKHZhbCAmIDB4ODApIHsKKwkJCXVuc2lnbmVkIGludCBjb2wgPSB2YWwgJiAweDA3OworCQkJdW5zaWduZWQgaW50IHJvdyA9ICh2YWwgPj4gMykgJiAweDBmOworCQkJdW5zaWduZWQgY2hhciBzY2FuY29kZSA9CisJCQkJTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwgS0JDX1JPV19TSElGVCk7CisKKwkJCXNjYW5jb2Rlc1tudW1fZG93bl0gPSBzY2FuY29kZTsKKwkJCWtleWNvZGVzW251bV9kb3duKytdID0ga2JjLT5rZXljb2RlW3NjYW5jb2RlXTsKKwkJfQorCisJCXZhbCA+Pj0gODsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2JjLT5sb2NrLCBmbGFncyk7CisKKwl0ZWdyYV9rYmNfcmVwb3J0X3JlbGVhc2VkX2tleXMoa2JjLT5pZGV2LAorCQkJCSAgICAgICBrYmMtPmN1cnJlbnRfa2V5cywga2JjLT5udW1fcHJlc3NlZF9rZXlzLAorCQkJCSAgICAgICBrZXljb2RlcywgbnVtX2Rvd24pOworCXRlZ3JhX2tiY19yZXBvcnRfcHJlc3NlZF9rZXlzKGtiYy0+aWRldiwgc2NhbmNvZGVzLCBrZXljb2RlcywgbnVtX2Rvd24pOworCWlucHV0X3N5bmMoa2JjLT5pZGV2KTsKKworCW1lbWNweShrYmMtPmN1cnJlbnRfa2V5cywga2V5Y29kZXMsIHNpemVvZihrYmMtPmN1cnJlbnRfa2V5cykpOworCWtiYy0+bnVtX3ByZXNzZWRfa2V5cyA9IG51bV9kb3duOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfa2V5cHJlc3NfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IChzdHJ1Y3QgdGVncmFfa2JjICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisJdW5zaWduZWQgaW50IGk7CisKKwl2YWwgPSAocmVhZGwoa2JjLT5tbWlvICsgS0JDX0lOVF8wKSA+PiA0KSAmIDB4ZjsKKwlpZiAodmFsKSB7CisJCXVuc2lnbmVkIGxvbmcgZGx5OworCisJCXRlZ3JhX2tiY19yZXBvcnRfa2V5cyhrYmMpOworCisJCS8qCisJCSAqIElmIG1vcmUgdGhhbiBvbmUga2V5cyBhcmUgcHJlc3NlZCB3ZSBuZWVkIG5vdCB3YWl0CisJCSAqIGZvciB0aGUgcmVwb2xsIGRlbGF5LgorCQkgKi8KKwkJZGx5ID0gKHZhbCA9PSAxKSA/IGtiYy0+cmVwb2xsX2RseSA6IDE7CisJCW1vZF90aW1lcigma2JjLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoZGx5KSk7CisJfSBlbHNlIHsKKwkJLyogUmVsZWFzZSBhbnkgcHJlc3NlZCBrZXlzIGFuZCBleGl0IHRoZSBwb2xsaW5nIGxvb3AgKi8KKwkJZm9yIChpID0gMDsgaSA8IGtiYy0+bnVtX3ByZXNzZWRfa2V5czsgaSsrKQorCQkJaW5wdXRfcmVwb3J0X2tleShrYmMtPmlkZXYsIGtiYy0+Y3VycmVudF9rZXlzW2ldLCAwKTsKKwkJaW5wdXRfc3luYyhrYmMtPmlkZXYpOworCisJCWtiYy0+bnVtX3ByZXNzZWRfa2V5cyA9IDA7CisKKwkJLyogQWxsIGtleXMgYXJlIHJlbGVhc2VkIHNvIGVuYWJsZSB0aGUga2V5cHJlc3MgaW50ZXJydXB0ICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJCXZhbCB8PSBLQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU47CisJCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0ZWdyYV9rYmNfaXNyKGludCBpcnEsIHZvaWQgKmFyZ3MpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gYXJnczsKKwl1MzIgdmFsLCBjdGw7CisKKwkvKgorCSAqIFVudGlsIGFsbCBrZXlzIGFyZSByZWxlYXNlZCwgZGVmZXIgZnVydGhlciBwcm9jZXNzaW5nIHRvCisJICogdGhlIHBvbGxpbmcgbG9vcCBpbiB0ZWdyYV9rYmNfa2V5cHJlc3NfdGltZXIKKwkgKi8KKwljdGwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwljdGwgJj0gfktCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsKKwl3cml0ZWwoY3RsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKworCS8qCisJICogUXVpY2tseSBiYWlsIG91dCAmIHJlZW5hYmxlIGludGVycnVwdHMgaWYgdGhlIGZpZm8gdGhyZXNob2xkCisJICogY291bnQgaW50ZXJydXB0IHdhc24ndCB0aGUgaW50ZXJydXB0IHNvdXJjZQorCSAqLworCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKworCWlmICh2YWwgJiBLQkNfSU5UX0ZJRk9fQ05UX0lOVF9TVEFUVVMpIHsKKwkJLyoKKwkJICogU2NoZWR1bGUgdGltZXIgdG8gcnVuIHdoZW4gaGFyZHdhcmUgaXMgaW4gY29udGludW91cworCQkgKiBwb2xsaW5nIG1vZGUuCisJCSAqLworCQltb2RfdGltZXIoJmtiYy0+dGltZXIsIGppZmZpZXMgKyBrYmMtPmNwX2RseV9qaWZmaWVzKTsKKwl9IGVsc2UgeworCQljdGwgfD0gS0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOworCQl3cml0ZWwoY3RsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhzdHJ1Y3QgdGVncmFfa2JjICprYmMsIGJvb2wgZmlsdGVyKQoreworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrYmMtPnBkYXRhOworCWludCBpOworCXVuc2lnbmVkIGludCByc3RfdmFsOworCisJQlVHX09OKHBkYXRhLT53YWtlX2NudCA+IEtCQ19NQVhfS0VZKTsKKwlyc3RfdmFsID0gKGZpbHRlciAmJiBwZGF0YS0+d2FrZV9jbnQpID8gfjAgOiAwOworCisJZm9yIChpID0gMDsgaSA8IEtCQ19NQVhfUk9XOyBpKyspCisJCXdyaXRlbChyc3RfdmFsLCBrYmMtPm1taW8gKyBLQkNfUk9XMF9NQVNLXzAgKyBpICogNCk7CisKKwlpZiAoZmlsdGVyKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+d2FrZV9jbnQ7IGkrKykgeworCQkJdTMyIHZhbCwgYWRkcjsKKwkJCWFkZHIgPSBwZGF0YS0+d2FrZV9jZmdbaV0ucm93ICogNCArIEtCQ19ST1cwX01BU0tfMDsKKwkJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIGFkZHIpOworCQkJdmFsICY9IH4oMSA8PCBwZGF0YS0+d2FrZV9jZmdbaV0uY29sKTsKKwkJCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIGFkZHIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfY29uZmlnX3BpbnMoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrYmMtPnBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEtCQ19NQVhfR1BJTzsgaSsrKSB7CisJCXUzMiByX3NoZnQgPSA1ICogKGkgJSA2KTsKKwkJdTMyIGNfc2hmdCA9IDQgKiAoaSAlIDgpOworCQl1MzIgcl9tYXNrID0gMHgxZiA8PCByX3NoZnQ7CisJCXUzMiBjX21hc2sgPSAweDBmIDw8IGNfc2hmdDsKKwkJdTMyIHJfb2ZmcyA9IChpIC8gNikgKiA0ICsgS0JDX1JPV19DRkcwXzA7CisJCXUzMiBjX29mZnMgPSAoaSAvIDgpICogNCArIEtCQ19DT0xfQ0ZHMF8wOworCQl1MzIgcm93X2NmZyA9IHJlYWRsKGtiYy0+bW1pbyArIHJfb2Zmcyk7CisJCXUzMiBjb2xfY2ZnID0gcmVhZGwoa2JjLT5tbWlvICsgY19vZmZzKTsKKworCQlyb3dfY2ZnICY9IH5yX21hc2s7CisJCWNvbF9jZmcgJj0gfmNfbWFzazsKKworCQlpZiAocGRhdGEtPnBpbl9jZmdbaV0uaXNfcm93KQorCQkJcm93X2NmZyB8PSAoKHBkYXRhLT5waW5fY2ZnW2ldLm51bSA8PCAxKSB8IDEpIDw8IHJfc2hmdDsKKwkJZWxzZQorCQkJY29sX2NmZyB8PSAoKHBkYXRhLT5waW5fY2ZnW2ldLm51bSA8PCAxKSB8IDEpIDw8IGNfc2hmdDsKKworCQl3cml0ZWwocm93X2NmZywga2JjLT5tbWlvICsgcl9vZmZzKTsKKwkJd3JpdGVsKGNvbF9jZmcsIGtiYy0+bW1pbyArIGNfb2Zmcyk7CisJfQorfQorCitzdGF0aWMgaW50IHRlZ3JhX2tiY19zdGFydChzdHJ1Y3QgdGVncmFfa2JjICprYmMpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtiYy0+cGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZGVib3VuY2VfY250OworCXUzMiB2YWwgPSAwOworCisJY2xrX2VuYWJsZShrYmMtPmNsayk7CisKKwkvKiBSZXNldCB0aGUgS0JDIGNvbnRyb2xsZXIgdG8gY2xlYXIgYWxsIHByZXZpb3VzIHN0YXR1cy4qLworCXRlZ3JhX3BlcmlwaF9yZXNldF9hc3NlcnQoa2JjLT5jbGspOworCXVkZWxheSgxMDApOworCXRlZ3JhX3BlcmlwaF9yZXNldF9kZWFzc2VydChrYmMtPmNsayk7CisJdWRlbGF5KDEwMCk7CisKKwl0ZWdyYV9rYmNfY29uZmlnX3BpbnMoa2JjKTsKKwl0ZWdyYV9rYmNfc2V0dXBfd2FrZWtleXMoa2JjLCBmYWxzZSk7CisKKwl3cml0ZWwocGRhdGEtPnJlcGVhdF9jbnQsIGtiYy0+bW1pbyArIEtCQ19SUFRfRExZXzApOworCisJLyogS2V5Ym9hcmQgZGVib3VuY2UgY291bnQgaXMgbWF4aW11bSBvZiAxMiBiaXRzLiAqLworCWRlYm91bmNlX2NudCA9IG1pbihwZGF0YS0+ZGVib3VuY2VfY250LCBLQkNfTUFYX0RFQk9VTkNFX0NOVCk7CisJdmFsID0gS0JDX0RFQk9VTkNFX0NOVF9TSElGVChkZWJvdW5jZV9jbnQpOworCXZhbCB8PSBLQkNfRklGT19USF9DTlRfU0hJRlQoMSk7IC8qIHNldCBmaWZvIGludGVycnVwdCB0aHJlc2hvbGQgdG8gMSAqLworCXZhbCB8PSBLQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU47ICAvKiBpbnRlcnJ1cHQgb24gRklGTyB0aHJlc2hvbGQgKi8KKwl2YWwgfD0gS0JDX0NPTlRST0xfS0JDX0VOOyAgICAgLyogZW5hYmxlICovCisJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisKKwkvKgorCSAqIENvbXB1dGUgdGhlIGRlbGF5KG5zKSBmcm9tIGludGVycnVwdCBtb2RlIHRvIGNvbnRpbnVvdXMgcG9sbGluZworCSAqIG1vZGUgc28gdGhlIHRpbWVyIHJvdXRpbmUgaXMgc2NoZWR1bGVkIGFwcHJvcHJpYXRlbHkuCisJICovCisJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0lOSVRfRExZXzApOworCWtiYy0+Y3BfZGx5X2ppZmZpZXMgPSB1c2Vjc190b19qaWZmaWVzKCh2YWwgJiAweGZmZmZmKSAqIDMyKTsKKworCWtiYy0+bnVtX3ByZXNzZWRfa2V5cyA9IDA7CisKKwkvKgorCSAqIEF0b21pY2FsbHkgY2xlYXIgb3V0IGFueSByZW1haW5pbmcgZW50cmllcyBpbiB0aGUga2V5IEZJRk8KKwkgKiBhbmQgZW5hYmxlIGtleWJvYXJkIGludGVycnVwdHMuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCXdoaWxlICgxKSB7CisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisJCXZhbCA+Pj0gNDsKKwkJaWYgKCF2YWwpCisJCQlicmVhazsKKworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfS1BfRU5UMF8wKTsKKwkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0tQX0VOVDFfMCk7CisJfQorCXdyaXRlbCgweDcsIGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2JjLT5sb2NrLCBmbGFncyk7CisKKwllbmFibGVfaXJxKGtiYy0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfc3RvcChzdHJ1Y3QgdGVncmFfa2JjICprYmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCXZhbCAmPSB+MTsKKwl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKworCWRpc2FibGVfaXJxKGtiYy0+aXJxKTsKKwlkZWxfdGltZXJfc3luYygma2JjLT50aW1lcik7CisKKwljbGtfZGlzYWJsZShrYmMtPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfa2JjX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gdGVncmFfa2JjX3N0YXJ0KGtiYyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiB0ZWdyYV9rYmNfc3RvcChrYmMpOworfQorCitzdGF0aWMgYm9vbCBfX2RldmluaXQKK3RlZ3JhX2tiY19jaGVja19waW5fY2ZnKGNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEsCisJCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqbnVtX3Jvd3MpCit7CisJaW50IGk7CisKKwkqbnVtX3Jvd3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEtCQ19NQVhfR1BJTzsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGluX2NmZyAqcGluX2NmZyA9ICZwZGF0YS0+cGluX2NmZ1tpXTsKKworCQlpZiAocGluX2NmZy0+aXNfcm93KSB7CisJCQlpZiAocGluX2NmZy0+bnVtID49IEtCQ19NQVhfUk9XKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJwaW5fY2ZnWyVkXTogaW52YWxpZCByb3cgbnVtYmVyICVkXG4iLAorCQkJCQlpLCBwaW5fY2ZnLT5udW0pOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCSgqbnVtX3Jvd3MpKys7CisJCX0gZWxzZSB7CisJCQlpZiAocGluX2NmZy0+bnVtID49IEtCQ19NQVhfQ09MKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJwaW5fY2ZnWyVkXTogaW52YWxpZCBjb2x1bW4gbnVtYmVyICVkXG4iLAorCQkJCQlpLCBwaW5fY2ZnLT5udW0pOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0ZWdyYV9rYmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCBlcnI7CisJaW50IGk7CisJaW50IG51bV9yb3dzID0gMDsKKwl1bnNpZ25lZCBpbnQgZGVib3VuY2VfY250OworCXVuc2lnbmVkIGludCBzY2FuX3RpbWVfcm93czsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCF0ZWdyYV9rYmNfY2hlY2tfcGluX2NmZyhwZGF0YSwgJnBkZXYtPmRldiwgJm51bV9yb3dzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleWJvYXJkIElSUVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJa2JjID0ga3phbGxvYyhzaXplb2YoKmtiYyksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICgha2JjIHx8ICFpbnB1dF9kZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJa2JjLT5wZGF0YSA9IHBkYXRhOworCWtiYy0+aWRldiA9IGlucHV0X2RldjsKKwlrYmMtPmlycSA9IGlycTsKKwlzcGluX2xvY2tfaW5pdCgma2JjLT5sb2NrKTsKKwlzZXR1cF90aW1lcigma2JjLT50aW1lciwgdGVncmFfa2JjX2tleXByZXNzX3RpbWVyLCAodW5zaWduZWQgbG9uZylrYmMpOworCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJa2JjLT5tbWlvID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICgha2JjLT5tbWlvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9mcmVlX21lbV9yZWdpb247CisJfQorCisJa2JjLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoa2JjLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQga2V5Ym9hcmQgY2xvY2tcbiIpOworCQllcnIgPSBQVFJfRVJSKGtiYy0+Y2xrKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlrYmMtPndha2VfZW5hYmxlX3Jvd3MgPSAwOworCWtiYy0+d2FrZV9lbmFibGVfY29scyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT53YWtlX2NudDsgaSsrKSB7CisJCWtiYy0+d2FrZV9lbmFibGVfcm93cyB8PSAoMSA8PCBwZGF0YS0+d2FrZV9jZmdbaV0ucm93KTsKKwkJa2JjLT53YWtlX2VuYWJsZV9jb2xzIHw9ICgxIDw8IHBkYXRhLT53YWtlX2NmZ1tpXS5jb2wpOworCX0KKworCS8qCisJICogVGhlIHRpbWUgZGVsYXkgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgcmVhZHMgb2YgdGhlIEZJRk8gaXMKKwkgKiB0aGUgc3VtIG9mIHRoZSByZXBlYXQgdGltZSBhbmQgdGhlIHRpbWUgdGFrZW4gZm9yIHNjYW5uaW5nCisJICogdGhlIHJvd3MuIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgZGVsYXkgYmVmb3JlIHRoZSByb3cgc2Nhbm5pbmcKKwkgKiBzdGFydHMuIFRoZSByZXBvbGwgZGVsYXkgaXMgY29tcHV0ZWQgaW4gbWlsbGlzZWNvbmRzLgorCSAqLworCWRlYm91bmNlX2NudCA9IG1pbihwZGF0YS0+ZGVib3VuY2VfY250LCBLQkNfTUFYX0RFQk9VTkNFX0NOVCk7CisJc2Nhbl90aW1lX3Jvd3MgPSAoS0JDX1JPV19TQ0FOX1RJTUUgKyBkZWJvdW5jZV9jbnQpICogbnVtX3Jvd3M7CisJa2JjLT5yZXBvbGxfZGx5ID0gS0JDX1JPV19TQ0FOX0RMWSArIHNjYW5fdGltZV9yb3dzICsgcGRhdGEtPnJlcGVhdF9jbnQ7CisJa2JjLT5yZXBvbGxfZGx5ID0gKChrYmMtPnJlcG9sbF9kbHkgKiBLQkNfQ1lDTEVfVVNFQykgKyA5OTkpIC8gMTAwMDsKKworCWlucHV0X2Rldi0+bmFtZSA9IHBkZXYtPm5hbWU7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlpbnB1dF9kZXYtPm9wZW4gPSB0ZWdyYV9rYmNfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gdGVncmFfa2JjX2Nsb3NlOworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrYmMpOworCisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtiYy0+a2V5Y29kZTsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGtiYy0+a2V5Y29kZVswXSk7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrYmMtPmtleWNvZGUpOworCisJa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGEgPzogJnRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcF9kYXRhOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCBLQkNfUk9XX1NISUZULAorCQkJCSAgIGlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJZXJyID0gcmVxdWVzdF9pcnEoa2JjLT5pcnEsIHRlZ3JhX2tiY19pc3IsIElSUUZfVFJJR0dFUl9ISUdILAorCQkJICBwZGV2LT5uYW1lLCBrYmMpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qga2V5Ym9hcmQgSVJRXG4iKTsKKwkJZ290byBlcnJfcHV0X2NsazsKKwl9CisKKwlkaXNhYmxlX2lycShrYmMtPmlycSk7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoa2JjLT5pZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrYmMpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCBwZGF0YS0+d2FrZXVwKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoa2JjLT5pcnEsIHBkZXYpOworZXJyX3B1dF9jbGs6CisJY2xrX3B1dChrYmMtPmNsayk7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGtiYy0+bW1pbyk7CitlcnJfZnJlZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGtiYy0+aWRldik7CisJa2ZyZWUoa2JjKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX2tiY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWZyZWVfaXJxKGtiYy0+aXJxLCBwZGV2KTsKKwljbGtfcHV0KGtiYy0+Y2xrKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtiYy0+aWRldik7CisJaW91bm1hcChrYmMtPm1taW8pOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlrZnJlZShrYmMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCB0ZWdyYV9rYmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CisJCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIHRydWUpOworCQllbmFibGVfaXJxX3dha2Uoa2JjLT5pcnEpOworCQkvKiBGb3JjZWZ1bGx5IGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCXdyaXRlbCgweDcsIGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisJCW1zbGVlcCgzMCk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygma2JjLT5pZGV2LT5tdXRleCk7CisJCWlmIChrYmMtPmlkZXYtPnVzZXJzKQorCQkJdGVncmFfa2JjX3N0b3Aoa2JjKTsKKwkJbXV0ZXhfdW5sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJZGlzYWJsZV9pcnFfd2FrZShrYmMtPmlycSk7CisJCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIGZhbHNlKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwkJaWYgKGtiYy0+aWRldi0+dXNlcnMpCisJCQllcnIgPSB0ZWdyYV9rYmNfc3RhcnQoa2JjKTsKKwkJbXV0ZXhfdW5sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyh0ZWdyYV9rYmNfcG1fb3BzLCB0ZWdyYV9rYmNfc3VzcGVuZCwgdGVncmFfa2JjX3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX2tiY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRlZ3JhX2tiY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRlZ3JhX2tiY19yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInRlZ3JhLWtiYyIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnRlZ3JhX2tiY19wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9rYmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9rYmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRlZ3JhX2tiY19leGl0KTsKKworc3RhdGljIGludCBfX2luaXQgdGVncmFfa2JjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0ZWdyYV9rYmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHRlZ3JhX2tiY19pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiUmFrZXNoIEl5ZXIgPHJpeWVyQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhIG1hdHJpeCBrZXlib2FyZCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0ZWdyYS1rYmMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG5ldHYxMDd4LWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKaW5kZXggYjRhODFlYi4uYzhmMDk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjE5LDkgKzIyMCw5IEBACiAJfQogCiAJa3AtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQlpZiAoIWtwLT5jbGspIHsKKwlpZiAoSVNfRVJSKGtwLT5jbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGRldmljZSBjbG9ja1xuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKKwkJZXJyb3IgPSBQVFJfRVJSKGtwLT5jbGspOwogCQlnb3RvIGVycm9yX2NsazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCmluZGV4IDlkZmQ2ZTUuLjFmMzgzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwpAQCAtNjksMTEgKzY5LDcgQEAKIAl9CiAKIAlpZiAodmFsdWUgPiAyMCAmJiB2YWx1ZSA8IDMyNzY3KQotI2lmbmRlZiBGUkVRCi0JCWNvdW50ID0gKGl4cDR4eF9nZXRfYm9hcmRfdGlja19yYXRlKCkgLyAodmFsdWUgKiA0KSkgLSAxOwotI2Vsc2UKLQkJY291bnQgPSAoRlJFUSAvICh2YWx1ZSAqIDQpKSAtIDE7Ci0jZW5kaWYKKwkJY291bnQgPSAoSVhQNFhYX1RJTUVSX0ZSRVEgLyAodmFsdWUgKiA0KSkgLSAxOwogCiAJaXhwNHh4X3Nwa3JfY29udHJvbChwaW4sIGNvdW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggZGEzOTJjMi4uYWExODZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC03NTUsMjMgKzc1NSwyNiBAQAogewogCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CiAJc3RydWN0IHN5bmFwdGljc19kYXRhIG9sZF9wcml2ID0gKnByaXY7CisJaW50IHJldHJ5ID0gMDsKKwlpbnQgZXJyb3I7CiAKLQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCWRvIHsKKwkJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwkJZXJyb3IgPSBzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIDApOworCX0gd2hpbGUgKGVycm9yICYmICsrcmV0cnkgPCAzKTsKIAotCWlmIChzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIDApKQorCWlmIChlcnJvcikKIAkJcmV0dXJuIC0xOwogCisJaWYgKHJldHJ5ID4gMSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5bmFwdGljcyByZWNvbm5lY3RlZCBhZnRlciAlZCB0cmllc1xuIiwKKwkJCXJldHJ5KTsKKwogCWlmIChzeW5hcHRpY3NfcXVlcnlfaGFyZHdhcmUocHNtb3VzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcXVlcnkgU3luYXB0aWNzIGhhcmR3YXJlLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAob2xkX3ByaXYuaWRlbnRpdHkgIT0gcHJpdi0+aWRlbnRpdHkgfHwKLQkgICAgb2xkX3ByaXYubW9kZWxfaWQgIT0gcHJpdi0+bW9kZWxfaWQgfHwKLQkgICAgb2xkX3ByaXYuY2FwYWJpbGl0aWVzICE9IHByaXYtPmNhcGFiaWxpdGllcyB8fAotCSAgICBvbGRfcHJpdi5leHRfY2FwICE9IHByaXYtPmV4dF9jYXApCi0JCXJldHVybiAtMTsKLQogCWlmIChzeW5hcHRpY3Nfc2V0X2Fic29sdXRlX21vZGUocHNtb3VzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTeW5hcHRpY3MgaGFyZHdhcmUuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtNzgyLDYgKzc4NSwxOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKG9sZF9wcml2LmlkZW50aXR5ICE9IHByaXYtPmlkZW50aXR5IHx8CisJICAgIG9sZF9wcml2Lm1vZGVsX2lkICE9IHByaXYtPm1vZGVsX2lkIHx8CisJICAgIG9sZF9wcml2LmNhcGFiaWxpdGllcyAhPSBwcml2LT5jYXBhYmlsaXRpZXMgfHwKKwkgICAgb2xkX3ByaXYuZXh0X2NhcCAhPSBwcml2LT5leHRfY2FwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3luYXB0aWNzIGhhcmR3YXJlIGFwcGVhcnMgdG8gYmUgZGlmZmVyZW50OiAiCisJCQkiaWQoJWxkLSVsZCksIG1vZGVsKCVsZC0lbGQpLCBjYXBzKCVseC0lbHgpLCBleHQoJWx4LSVseCkuXG4iLAorCQkJb2xkX3ByaXYuaWRlbnRpdHksIHByaXYtPmlkZW50aXR5LAorCQkJb2xkX3ByaXYubW9kZWxfaWQsIHByaXYtPm1vZGVsX2lkLAorCQkJb2xkX3ByaXYuY2FwYWJpbGl0aWVzLCBwcml2LT5jYXBhYmlsaXRpZXMsCisJCQlvbGRfcHJpdi5leHRfY2FwLCBwcml2LT5leHRfY2FwKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKaW5kZXggNDQ4Yzc3Mi4uODUyODE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYwpAQCAtMTExLDkgKzExMSwxMSBAQAogc3RhdGljIGludCBjdDgyYzcxMF9vcGVuKHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IGVycjsKIAotCWlmIChyZXF1ZXN0X2lycShDVDgyQzcxMF9JUlEsIGN0ODJjNzEwX2ludGVycnVwdCwgMCwgImN0ODJjNzEwIiwgTlVMTCkpCi0JCXJldHVybiAtMTsKKwllcnIgPSByZXF1ZXN0X2lycShDVDgyQzcxMF9JUlEsIGN0ODJjNzEwX2ludGVycnVwdCwgMCwgImN0ODJjNzEwIiwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCXN0YXR1cyA9IGluYl9wKENUODJDNzEwX1NUQVRVUyk7CiAKQEAgLTEzMSw3ICsxMzMsNyBAQAogCQlzdGF0dXMgJj0gfihDVDgyQzcxMF9FTkFCTEUgfCBDVDgyQzcxMF9JTlRTX09OKTsKIAkJb3V0Yl9wKHN0YXR1cywgQ1Q4MkM3MTBfU1RBVFVTKTsKIAkJZnJlZV9pcnEoQ1Q4MkM3MTBfSVJRLCBOVUxMKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwppbmRleCA2ZTM2MmRlLi44NzU1ZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwpAQCAtMTE2LDE0ICsxMTYsMTUgQEAKIAogLyoKICAqIHNlcnBvcnRfbGRpc2NfcmVjZWl2ZSgpIGlzIGNhbGxlZCBieSB0aGUgbG93IGxldmVsIHR0eSBkcml2ZXIgd2hlbiBjaGFyYWN0ZXJzCi0gKiBhcmUgcmVhZHkgZm9yIHVzLiBXZSBmb3J3YXJkIHRoZSBjaGFyYWN0ZXJzLCBvbmUgYnkgb25lIHRvIHRoZSAnaW50ZXJydXB0JwotICogcm91dGluZS4KKyAqIGFyZSByZWFkeSBmb3IgdXMuIFdlIGZvcndhcmQgdGhlIGNoYXJhY3RlcnMgYW5kIGZsYWdzLCBvbmUgYnkgb25lIHRvIHRoZQorICogJ2ludGVycnVwdCcgcm91dGluZS4KICAqLwogCiBzdGF0aWMgdm9pZCBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNlcnBvcnQgKnNlcnBvcnQgPSAoc3RydWN0IHNlcnBvcnQqKSB0dHktPmRpc2NfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjaF9mbGFnczsKIAlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJwb3J0LT5sb2NrLCBmbGFncyk7CkBAIC0xMzEsOCArMTMyLDIzIEBACiAJaWYgKCF0ZXN0X2JpdChTRVJQT1JUX0FDVElWRSwgJnNlcnBvcnQtPmZsYWdzKSkKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJc2VyaW9faW50ZXJydXB0KHNlcnBvcnQtPnNlcmlvLCBjcFtpXSwgMCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3dpdGNoIChmcFtpXSkgeworCQljYXNlIFRUWV9GUkFNRToKKwkJCWNoX2ZsYWdzID0gU0VSSU9fRlJBTUU7CisJCQlicmVhazsKKworCQljYXNlIFRUWV9QQVJJVFk6CisJCQljaF9mbGFncyA9IFNFUklPX1BBUklUWTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQljaF9mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXNlcmlvX2ludGVycnVwdChzZXJwb3J0LT5zZXJpbywgY3BbaV0sIGNoX2ZsYWdzKTsKKwl9CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJwb3J0LT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYyBiL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jCmluZGV4IGEyOWE3ODEyLi43NzI5ZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYworKysgYi9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYwpAQCAtMjAxLDYgKzIwMSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEtFX1NXOgorCQljYXNlIEtFX1ZTVzoKIAkJCV9fc2V0X2JpdChFVl9TVywgZGV2LT5ldmJpdCk7CiAJCQlfX3NldF9iaXQoZW50cnktPnN3LmNvZGUsIGRldi0+c3diaXQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDUxODc4MjkuLjM2N2ZhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC0xMTAxLDYgKzExMDEsMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3Jlcyh1bnNpZ25lZCBpbnQgbG9naWNhbF9tYXgsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBwaHlzaWNhbF9tYXgpCit7CisgICAgICAgLyogVG91Y2ggcGh5c2ljYWwgZGltZW5zaW9ucyBhcmUgaW4gMTAwdGggb2YgbW0gKi8KKyAgICAgICByZXR1cm4gKGxvZ2ljYWxfbWF4ICogMTAwKSAvIHBoeXNpY2FsX21heDsKK30KKwogdm9pZCB3YWNvbV9zZXR1cF9pbnB1dF9jYXBhYmlsaXRpZXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAogCQkJCSAgICBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7CkBAIC0xMjI4LDggKzEyMzUsMTIgQEAKIAljYXNlIFRBQkxFVFBDOgogCQlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCB8fAogCQkgICAgZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1RSSVBMRVRBUCkgewotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlgsIDAsIGZlYXR1cmVzLT54X3BoeSwgMCwgMCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWSwgMCwgZmVhdHVyZXMtPnlfcGh5LCAwLCAwKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1gsCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eF9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnhfcGh5KSk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19ZLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnlfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT55X3BoeSkpOwogCQkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQl9CiAKQEAgLTEyNzIsNiArMTI4MywxMiBAQAogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfUFJFU1NVUkUsCiAJCQkJCSAgICAgMCwgZmVhdHVyZXMtPnByZXNzdXJlX21heCwKIAkJCQkJICAgICBmZWF0dXJlcy0+cHJlc3N1cmVfZnV6eiwgMCk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19YLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnhfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWSwKKwkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT55X21heCwKKwkJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKIAkJfSBlbHNlIGlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfUEVOKSB7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUlVCQkVSLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dF9kZXYtPmtleWJpdCk7CkBAIC0xNDI2LDYgKzE0NDMsMTAgQEAKIAl7ICJXYWNvbSBCYW1ib28gMkZHIDZ4OCIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDIxNjQ4LCAxMzUzMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ0ID0KIAl7ICJXYWNvbSBCYW1ib28gUGVuIiwgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzIwLCAgOTIwMCwgIDI1NSwgNjMsIEJBTUJPT19QVCB9Oworc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ2ID0KKwl7ICJXYWNvbSBCYW1ib29QVCAyRkcgNHg1IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Oworc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ3ID0KKwl7ICJXYWNvbSBCYW1ib29QVCAyRkcgU21hbGwiLCBXQUNPTV9QS0dMRU5fQkJGVU4sIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owogc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ4ID0KIAl7ICJXYWNvbSBCYW1ib28gQ29taWMgMkZHIiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDIxNjQ4LCAxMzUzMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owogc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weERBID0KQEAgLTE1MDcsNiArMTUyOCw4IEBACiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDIpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDMpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDYpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDcpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RDgpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4REEpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4REIpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jCmluZGV4IGY3ZmE5ZWYuLjE1MDdjZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9idTIxMDEzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjZGVmaW5lIFBFTl9ET1dOX0lOVFIJMAogI2RlZmluZSBNQVhfRklOR0VSUwkyCkBAIC0xMzksNiArMTQwLDcgQEAKICAqIEBjaGlwOiBwb2ludGVyIHRvIHRoZSB0b3VjaCBwYW5lbCBjb250cm9sbGVyCiAgKiBAaW5fZGV2OiBwb2ludGVyIHRvIHRoZSBpbnB1dCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaW50cl9waW46IGludGVycnVwdCBwaW4gdmFsdWUKKyAqIEByZWd1bGF0b3I6IHBvaW50ZXIgdG8gdGhlIFJlZ3VsYXRvciB1c2VkIGZvciB0b3VjaCBzY3JlZW4KICAqCiAgKiBUb3VjaCBwYW5lbCBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUKICAqLwpAQCAtMTQ5LDYgKzE1MSw3IEBACiAJY29uc3Qgc3RydWN0IGJ1MjEwMTNfcGxhdGZvcm1fZGV2aWNlICpjaGlwOwogCXN0cnVjdCBpbnB1dF9kZXYgKmluX2RldjsKIAl1bnNpZ25lZCBpbnQgaW50cl9waW47CisJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOwogfTsKIAogLyoqCkBAIC00NTYsNiArNDU5LDIwIEBACiAJYnUyMTAxM19kYXRhLT5pbl9kZXYgPSBpbl9kZXY7CiAJYnUyMTAxM19kYXRhLT5jaGlwID0gcGRhdGE7CiAJYnUyMTAxM19kYXRhLT5jbGllbnQgPSBjbGllbnQ7CisKKwlidTIxMDEzX2RhdGEtPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9nZXQoJmNsaWVudC0+ZGV2LCAiVi1UT1VDSCIpOworCWlmIChJU19FUlIoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicmVndWxhdG9yX2dldCBmYWlsZWRcbiIpOworCQllcnJvciA9IFBUUl9FUlIoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwllcnJvciA9IHJlZ3VsYXRvcl9lbmFibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJyZWd1bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3B1dF9yZWd1bGF0b3I7CisJfQorCiAJYnUyMTAxM19kYXRhLT50b3VjaF9zdG9wcGVkID0gZmFsc2U7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYnUyMTAxM19kYXRhLT53YWl0KTsKIApAQCAtNDY0LDcgKzQ4MSw3IEBACiAJCWVycm9yID0gcGRhdGEtPmNzX2VuKHBkYXRhLT5jc19waW4pOwogCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImNoaXAgaW5pdCBmYWlsZWRcbiIpOwotCQkJZ290byBlcnJfZnJlZV9tZW07CisJCQlnb3RvIGVycl9kaXNhYmxlX3JlZ3VsYXRvcjsKIAkJfQogCX0KIApAQCAtNDg1LDkgKzUwMiw5IEBACiAJX19zZXRfYml0KEVWX0FCUywgaW5fZGV2LT5ldmJpdCk7CiAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbl9kZXYsIEFCU19NVF9QT1NJVElPTl9YLCAwLAotCQkJCQkJcGRhdGEtPnhfbWF4X3JlcywgMCwgMCk7CisJCQkJCQlwZGF0YS0+dG91Y2hfeF9tYXgsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGluX2RldiwgQUJTX01UX1BPU0lUSU9OX1ksIDAsCi0JCQkJCQlwZGF0YS0+eV9tYXhfcmVzLCAwLCAwKTsKKwkJCQkJCXBkYXRhLT50b3VjaF95X21heCwgMCwgMCk7CiAJaW5wdXRfc2V0X2RydmRhdGEoaW5fZGV2LCBidTIxMDEzX2RhdGEpOwogCiAJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwZGF0YS0+aXJxLCBOVUxMLCBidTIxMDEzX2dwaW9faXJxLApAQCAtNTEzLDYgKzUzMCwxMCBAQAogCWJ1MjEwMTNfZnJlZV9pcnEoYnUyMTAxM19kYXRhKTsKIGVycl9jc19kaXNhYmxlOgogCXBkYXRhLT5jc19kaXMocGRhdGEtPmNzX3Bpbik7CitlcnJfZGlzYWJsZV9yZWd1bGF0b3I6CisJcmVndWxhdG9yX2Rpc2FibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworZXJyX3B1dF9yZWd1bGF0b3I6CisJcmVndWxhdG9yX3B1dChidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CiBlcnJfZnJlZV9tZW06CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5fZGV2KTsKIAlrZnJlZShidTIxMDEzX2RhdGEpOwpAQCAtNTM1LDYgKzU1NiwxMCBAQAogCWJ1MjEwMTNfZGF0YS0+Y2hpcC0+Y3NfZGlzKGJ1MjEwMTNfZGF0YS0+Y2hpcC0+Y3NfcGluKTsKIAogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1MjEwMTNfZGF0YS0+aW5fZGV2KTsKKworCXJlZ3VsYXRvcl9kaXNhYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwlyZWd1bGF0b3JfcHV0KGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwogCWtmcmVlKGJ1MjEwMTNfZGF0YSk7CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJmNsaWVudC0+ZGV2LCBmYWxzZSk7CkBAIC01NjEsNiArNTg2LDggQEAKIAllbHNlCiAJCWRpc2FibGVfaXJxKGJ1MjEwMTNfZGF0YS0+Y2hpcC0+aXJxKTsKIAorCXJlZ3VsYXRvcl9kaXNhYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01NzcsNiArNjA0LDEyIEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGJ1MjEwMTNfZGF0YS0+Y2xpZW50OwogCWludCByZXR2YWw7CiAKKwlyZXR2YWwgPSByZWd1bGF0b3JfZW5hYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1MjEwMTMgcmVndWxhdG9yIGVuYWJsZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwogCXJldHZhbCA9IGJ1MjEwMTNfaW5pdF9jaGlwKGJ1MjEwMTNfZGF0YSk7CiAJaWYgKHJldHZhbCA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJidTIxMDEzIGNvbnRyb2xsZXIgY29uZmlnIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYwppbmRleCBjZjFkYmEyLi4yMmEzNDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjg5LDkgKzI5MCw5IEBACiAJfQogCiAJdHMtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQlpZiAoIXRzLT5jbGspIHsKKwlpZiAoSVNfRVJSKHRzLT5jbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGRldmljZSBjbG9ja1xuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKKwkJZXJyb3IgPSBQVFJfRVJSKHRzLT5jbGspOwogCQlnb3RvIGVycm9yX2NsazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmggYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCmluZGV4IDcyOWRmNDAuLjE4YjgwMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaApAQCAtMjI3LDcgKzIyNyw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGltL2V4cG9ydGVkIGZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi1leHRlcm4gY2hhciAqaHlzZG5fZ2V0cmV2KGNvbnN0IGNoYXIgKik7CiAKIC8qIGh5c2RuX3Byb2Njb25mLmMgKi8KIGV4dGVybiBpbnQgaHlzZG5fcHJvY2NvbmZfaW5pdCh2b2lkKTsJLyogaW5pdCBwcm9jIGNvbmZpZyBmaWxlc3lzICovCkBAIC0yNTksNyArMjU4LDYgQEAKIAogLyogaHlzZG5fbmV0LmMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlOyAKLWV4dGVybiBjaGFyICpoeXNkbl9uZXRfcmV2aXNpb247CiBleHRlcm4gaW50IGh5c2RuX25ldF9jcmVhdGUoaHlzZG5fY2FyZCAqKTsJLyogY3JlYXRlIGEgbmV3IG5ldCBkZXZpY2UgKi8KIGV4dGVybiBpbnQgaHlzZG5fbmV0X3JlbGVhc2UoaHlzZG5fY2FyZCAqKTsJLyogZGVsZXRlIHRoZSBkZXZpY2UgKi8KIGV4dGVybiBjaGFyICpoeXNkbl9uZXRfZ2V0bmFtZShoeXNkbl9jYXJkICopOwkvKiBnZXQgbmFtZSBvZiBuZXQgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwppbmRleCBiN2NjNWMyLi4wYWI0MmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKQEAgLTM2LDcgKzM2LDYgQEAKIE1PRFVMRV9BVVRIT1IoIldlcm5lciBDb3JuZWxpdXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGNoYXIgKmh5c2RuX2luaXRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjYuNi42ICQiOwogc3RhdGljIGludCBjYXJkbWF4OwkJLyogbnVtYmVyIG9mIGZvdW5kIGNhcmRzICovCiBoeXNkbl9jYXJkICpjYXJkX3Jvb3QgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNhcmQgKi8KIHN0YXRpYyBoeXNkbl9jYXJkICpjYXJkX2xhc3QgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNhcmQgKi8KQEAgLTQ5LDI1ICs0OCw2IEBACiAvKiBBZGRpdGlvbmFsbHkgbmV3ZXIgdmVyc2lvbnMgbWF5IGJlIGFjdGl2YXRlZCB3aXRob3V0IHJlYm9vdGluZy4gICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogZXh0cmFjdCByZXZpc2lvbiBudW1iZXIgZnJvbSBzdHJpbmcgZm9yIGxvZyBvdXRwdXQgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1jaGFyICoKLWh5c2RuX2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbikKLXsKLQljaGFyICpyZXY7Ci0JY2hhciAqcDsKLQotCWlmICgocCA9IHN0cmNocihyZXZpc2lvbiwgJzonKSkpIHsKLQkJcmV2ID0gcCArIDI7Ci0JCXAgPSBzdHJjaHIocmV2LCAnJCcpOwotCQkqLS1wID0gMDsKLQl9IGVsc2UKLQkJcmV2ID0gIj8/PyI7Ci0JcmV0dXJuIHJldjsKLX0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGluaXRfbW9kdWxlIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQgdG8gZG8gYWxsIG5lY2Vzc2FyeSAqLwogLyogdGhpbmdzIGxpa2UgYXV0b2RldGVjdC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzUsMTMgKzE1NSw5IEBACiBzdGF0aWMgaW50IF9faW5pdAogaHlzZG5faW5pdCh2b2lkKQogewotCWNoYXIgdG1wWzUwXTsKIAlpbnQgcmM7CiAKLQlzdHJjcHkodG1wLCBoeXNkbl9pbml0X3JldmlzaW9uKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBtb2R1bGUgUmV2OiAlcyBsb2FkZWRcbiIsIGh5c2RuX2dldHJldih0bXApKTsKLQlzdHJjcHkodG1wLCBoeXNkbl9uZXRfcmV2aXNpb24pOwotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IG5ldHdvcmsgaW50ZXJmYWNlIFJldjogJXMgXG4iLCBoeXNkbl9nZXRyZXYodG1wKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogbW9kdWxlIGxvYWRlZFxuIik7CiAKIAlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmh5c2RuX3BjaV9kcml2ZXIpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYwppbmRleCBmZWVjOGQ4Li4xMWYyY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCkBAIC0yNiw5ICsyNiw2IEBACiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlID0gMHhmZmZmZmZmZjsgCiBtb2R1bGVfcGFyYW0oaHluZXRfZW5hYmxlLCB1aW50LCAwKTsKIAotLyogc3RvcmUgdGhlIGFjdHVhbCB2ZXJzaW9uIGZvciBsb2cgcmVwb3J0aW5nICovCi1jaGFyICpoeXNkbl9uZXRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjguNi40ICQiOwotCiAjZGVmaW5lIE1BWF9TS0JfQlVGRkVSUyAyMAkvKiBudW1iZXIgb2YgYnVmZmVycyBmb3Iga2VlcGluZyBUWC1kYXRhICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA5NmIzZTM5Li41ZmU4M2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImh5c2RuX2RlZnMuaCIKIAogc3RhdGljIERFRklORV9NVVRFWChoeXNkbl9jb25mX211dGV4KTsKLXN0YXRpYyBjaGFyICpoeXNkbl9wcm9jY29uZl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuOC42LjQgJCI7CiAKICNkZWZpbmUgSU5GT19PVVRfTEVOIDgwCQkvKiBsZW5ndGggb2YgaW5mbyBsaW5lIGluY2x1ZGluZyBsZiAqLwogCkBAIC00MDQsNyArNDAzLDcgQEAKIAkJY2FyZCA9IGNhcmQtPm5leHQ7CS8qIG5leHQgZW50cnkgKi8KIAl9CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBwcm9jZnMgUmV2LiAlcyBpbml0aWFsaXNlZFxuIiwgaHlzZG5fZ2V0cmV2KGh5c2RuX3Byb2Njb25mX3JldmlzaW9uKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogcHJvY2ZzIGluaXRpYWxpc2VkXG4iKTsKIAlyZXR1cm4gKDApOwogfQkJCQkvKiBoeXNkbl9wcm9jY29uZl9pbml0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMgYi9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCmluZGV4IGYyYjViYWIuLjFmMzU1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKKysrIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGljbl9pbml0KHZvaWQpCiB7CiAJY2hhciAqcDsKLQljaGFyIHJldlsyMF07CisJY2hhciByZXZbMjFdOwogCiAJbWVtc2V0KCZkZXYsIDAsIHNpemVvZihpY25fZGV2KSk7CiAJZGV2Lm1lbWFkZHIgPSAobWVtYmFzZSAmIDB4MGZmYzAwMCk7CkBAIC0xNjM4LDYgKzE2MzgsNyBAQAogCiAJaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSkgewogCQlzdHJuY3B5KHJldiwgcCArIDEsIDIwKTsKKwkJcmV2WzIwXSA9ICdcMCc7CiAJCXAgPSBzdHJjaHIocmV2LCAnJCcpOwogCQlpZiAocCkKIAkJCSpwID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKaW5kZXggZGEzZmE4ZC4uNjY2ZGFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAkJbGVkX2RhdC0+cHdtID0gcHdtX3JlcXVlc3QoY3VyX2xlZC0+cHdtX2lkLAogCQkJCWN1cl9sZWQtPm5hbWUpOwogCQlpZiAoSVNfRVJSKGxlZF9kYXQtPnB3bSkpIHsKKwkJCXJldCA9IFBUUl9FUlIobGVkX2RhdC0+cHdtKTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IFBXTSAlZFxuIiwKIAkJCQkJY3VyX2xlZC0+cHdtX2lkKTsKIAkJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGI3NmNmYzguLjBjYzMwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTI4Nyw2ICsyODcsNyBAQAogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwogCWludCBydjsKIAlpbnQgY3B1OworCXVuc2lnbmVkIGludCBzZWN0b3JzOwogCiAJaWYgKG1kZGV2ID09IE5VTEwgfHwgbWRkZXYtPnBlcnMgPT0gTlVMTAogCSAgICB8fCAhbWRkZXYtPnJlYWR5KSB7CkBAIC0zMTEsMTIgKzMxMiwxNiBAQAogCWF0b21pY19pbmMoJm1kZGV2LT5hY3RpdmVfaW8pOwogCXJjdV9yZWFkX3VubG9jaygpOwogCisJLyoKKwkgKiBzYXZlIHRoZSBzZWN0b3JzIG5vdyBzaW5jZSBvdXIgYmlvIGNhbgorCSAqIGdvIGF3YXkgaW5zaWRlIG1ha2VfcmVxdWVzdAorCSAqLworCXNlY3RvcnMgPSBiaW9fc2VjdG9ycyhiaW8pOwogCXJ2ID0gbWRkZXYtPnBlcnMtPm1ha2VfcmVxdWVzdChtZGRldiwgYmlvKTsKIAogCWNwdSA9IHBhcnRfc3RhdF9sb2NrKCk7CiAJcGFydF9zdGF0X2luYyhjcHUsICZtZGRldi0+Z2VuZGlzay0+cGFydDAsIGlvc1tyd10pOwotCXBhcnRfc3RhdF9hZGQoY3B1LCAmbWRkZXYtPmdlbmRpc2stPnBhcnQwLCBzZWN0b3JzW3J3XSwKLQkJICAgICAgYmlvX3NlY3RvcnMoYmlvKSk7CisJcGFydF9zdGF0X2FkZChjcHUsICZtZGRldi0+Z2VuZGlzay0+cGFydDAsIHNlY3RvcnNbcnddLCBzZWN0b3JzKTsKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWRkZXYtPmFjdGl2ZV9pbykgJiYgbWRkZXYtPnN1c3BlbmRlZCkKQEAgLTE5NDcsOCArMTk1Miw2IEBACiAJCQlfX2JkZXZuYW1lKGRldiwgYikpOwogCQlyZXR1cm4gUFRSX0VSUihiZGV2KTsKIAl9Ci0JaWYgKCFzaGFyZWQpCi0JCXNldF9iaXQoQWxsUmVzZXJ2ZWQsICZyZGV2LT5mbGFncyk7CiAJcmRldi0+YmRldiA9IGJkZXY7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0NjUsNiArMjQ2OCw5IEBACiAJCWlmIChyZGV2LT5yYWlkX2Rpc2sgIT0gLTEpCiAJCQlyZXR1cm4gLUVCVVNZOwogCisJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmcmRldi0+bWRkZXYtPnJlY292ZXJ5KSkKKwkJCXJldHVybiAtRUJVU1k7CisKIAkJaWYgKHJkZXYtPm1kZGV2LT5wZXJzLT5ob3RfYWRkX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yNjEwLDEyICsyNjE2LDExIEBACiAKIAkJCW1kZGV2X2xvY2sobWRkZXYpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCQkJaWYgKHRlc3RfYml0KEFsbFJlc2VydmVkLCAmcmRldjItPmZsYWdzKSB8fAotCQkJCSAgICAocmRldi0+YmRldiA9PSByZGV2Mi0+YmRldiAmJgotCQkJCSAgICAgcmRldiAhPSByZGV2MiAmJgotCQkJCSAgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCi0JCQkJCSAgICAgIHJkZXYyLT5kYXRhX29mZnNldCwKLQkJCQkJICAgICAgcmRldjItPnNlY3RvcnMpKSkgeworCQkJCWlmIChyZGV2LT5iZGV2ID09IHJkZXYyLT5iZGV2ICYmCisJCQkJICAgIHJkZXYgIT0gcmRldjIgJiYKKwkJCQkgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCisJCQkJCSAgICAgcmRldjItPmRhdGFfb2Zmc2V0LAorCQkJCQkgICAgIHJkZXYyLT5zZWN0b3JzKSkgewogCQkJCQlvdmVybGFwID0gMTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNTU3OCw2ICs1NTgzLDggQEAKIAltZGRldi0+ZGVsdGFfZGlza3MgPSByYWlkX2Rpc2tzIC0gbWRkZXYtPnJhaWRfZGlza3M7CiAKIAlydiA9IG1kZGV2LT5wZXJzLT5jaGVja19yZXNoYXBlKG1kZGV2KTsKKwlpZiAocnYgPCAwKQorCQltZGRldi0+ZGVsdGFfZGlza3MgPSAwOwogCXJldHVybiBydjsKIH0KIApAQCAtNjk4NSw5ICs2OTkyLDYgQEAKIAl9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCW1kZGV2LT5yZXN5bmNfbWluID0gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZDsKIAltZGRldi0+Y3Vycl9yZXN5bmMgPSAwOwotCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpCi0JCW1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPSAwOwotCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCXdha2VfdXAoJnJlc3luY193YWl0KTsKIAlzZXRfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CkBAIC03MDI4LDcgKzcwMzIsNyBAQAogCQkJfQogCQl9CiAKLQlpZiAobWRkZXYtPmRlZ3JhZGVkICYmICEgbWRkZXYtPnJvICYmICFtZGRldi0+cmVjb3ZlcnlfZGlzYWJsZWQpIHsKKwlpZiAobWRkZXYtPmRlZ3JhZGVkICYmICFtZGRldi0+cmVjb3ZlcnlfZGlzYWJsZWQpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKQEAgLTcxNTEsNyArNzE1NSwyMCBAQAogCQkJLyogT25seSB0aGluZyB3ZSBkbyBvbiBhIHJvIGFycmF5IGlzIHJlbW92ZQogCQkJICogZmFpbGVkIGRldmljZXMuCiAJCQkgKi8KLQkJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldik7CisJCQltZGtfcmRldl90ICpyZGV2OworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKKwkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKKwkJCQkgICAgIXRlc3RfYml0KEJsb2NrZWQsICZyZGV2LT5mbGFncykgJiYKKwkJCQkgICAgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmCisJCQkJICAgIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKT09MCkgeworCQkJCQlpZiAobWRkZXYtPnBlcnMtPmhvdF9yZW1vdmVfZGlzaygKKwkJCQkJCSAgICBtZGRldiwgcmRldi0+cmFpZF9kaXNrKT09MCkgeworCQkJCQkJY2hhciBubVsyMF07CisJCQkJCQlzcHJpbnRmKG5tLCJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJCQkJCXN5c2ZzX3JlbW92ZV9saW5rKCZtZGRldi0+a29iaiwgbm0pOworCQkJCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CisJCQkJCX0KKwkJCQl9CiAJCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmgKaW5kZXggZWVjNTE3Yy4uN2U5MGI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5oCisrKyBiL2RyaXZlcnMvbWQvbWQuaApAQCAtOTMsOCArOTMsNiBAQAogI2RlZmluZQlGYXVsdHkJCTEJCS8qIGRldmljZSBpcyBrbm93biB0byBoYXZlIGEgZmF1bHQgKi8KICNkZWZpbmUJSW5fc3luYwkJMgkJLyogZGV2aWNlIGlzIGluX3N5bmMgd2l0aCByZXN0IG9mIGFycmF5ICovCiAjZGVmaW5lCVdyaXRlTW9zdGx5CTQJCS8qIEF2b2lkIHJlYWRpbmcgaWYgYXQgYWxsIHBvc3NpYmxlICovCi0jZGVmaW5lCUFsbFJlc2VydmVkCTYJCS8qIElmIHdob2xlIGRldmljZSBpcyByZXNlcnZlZCBmb3IKLQkJCQkJICogb25lIGFycmF5ICovCiAjZGVmaW5lCUF1dG9EZXRlY3RlZAk3CQkvKiBhZGRlZCBieSBhdXRvLWRldGVjdCAqLwogI2RlZmluZSBCbG9ja2VkCQk4CQkvKiBBbiBlcnJvciBvY2N1cmVkIG9uIGFuIGV4dGVybmFsbHkKIAkJCQkJICogbWFuYWdlZCBhcnJheSwgZG9uJ3QgYWxsb3cgd3JpdGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQwLmMgYi9kcml2ZXJzL21kL3JhaWQwLmMKaW5kZXggYTM5ZjRjMy4uNjM3YTk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDAuYwpAQCAtMTc5LDYgKzE3OSwxNCBAQAogCQkJcmRldjEtPm5ld19yYWlkX2Rpc2sgPSBqOwogCQl9CiAKKwkJaWYgKG1kZGV2LT5sZXZlbCA9PSAxKSB7CisJCQkvKiB0YWlraW5nIG92ZXIgYSByYWlkMSBhcnJheS0KKwkJCSAqIHdlIGhhdmUgb25seSBvbmUgYWN0aXZlIGRpc2sKKwkJCSAqLworCQkJaiA9IDA7CisJCQlyZGV2MS0+bmV3X3JhaWRfZGlzayA9IGo7CisJCX0KKwogCQlpZiAoaiA8IDAgfHwgaiA+PSBtZGRldi0+cmFpZF9kaXNrcykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMDolczogYmFkIGRpc2sgbnVtYmVyICVkIC0gIgogCQkJICAgICAgICJhYm9ydGluZyFcbiIsIG1kbmFtZShtZGRldiksIGopOwpAQCAtNjQ0LDEyICs2NTIsMzggQEAKIAlyZXR1cm4gcHJpdl9jb25mOwogfQogCitzdGF0aWMgdm9pZCAqcmFpZDBfdGFrZW92ZXJfcmFpZDEobWRkZXZfdCAqbWRkZXYpCit7CisJcmFpZDBfY29uZl90ICpwcml2X2NvbmY7CisKKwkvKiBDaGVjayBsYXlvdXQ6CisJICogIC0gKE4gLSAxKSBtaXJyb3IgZHJpdmVzIG11c3QgYmUgYWxyZWFkeSBmYXVsdHkKKwkgKi8KKwlpZiAoKG1kZGV2LT5yYWlkX2Rpc2tzIC0gMSkgIT0gbWRkZXYtPmRlZ3JhZGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWQvcmFpZDA6JXM6IChOIC0gMSkgbWlycm9ycyBkcml2ZXMgbXVzdCBiZSBhbHJlYWR5IGZhdWx0eSFcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogU2V0IG5ldyBwYXJhbWV0ZXJzICovCisJbWRkZXYtPm5ld19sZXZlbCA9IDA7CisJbWRkZXYtPm5ld19sYXlvdXQgPSAwOworCW1kZGV2LT5uZXdfY2h1bmtfc2VjdG9ycyA9IDEyODsgLyogYnkgZGVmYXVsdCBzZXQgY2h1bmsgc2l6ZSB0byA2NGsgKi8KKwltZGRldi0+ZGVsdGFfZGlza3MgPSAxIC0gbWRkZXYtPnJhaWRfZGlza3M7CisJLyogbWFrZSBzdXJlIGl0IHdpbGwgYmUgbm90IG1hcmtlZCBhcyBkaXJ0eSAqLworCW1kZGV2LT5yZWNvdmVyeV9jcCA9IE1heFNlY3RvcjsKKworCWNyZWF0ZV9zdHJpcF96b25lcyhtZGRldiwgJnByaXZfY29uZik7CisJcmV0dXJuIHByaXZfY29uZjsKK30KKwogc3RhdGljIHZvaWQgKnJhaWQwX3Rha2VvdmVyKG1kZGV2X3QgKm1kZGV2KQogewogCS8qIHJhaWQwIGNhbiB0YWtlIG92ZXI6CiAJICogIHJhaWQ0IC0gaWYgYWxsIGRhdGEgZGlza3MgYXJlIGFjdGl2ZS4KIAkgKiAgcmFpZDUgLSBwcm92aWRpbmcgaXQgaXMgUmFpZDQgbGF5b3V0IGFuZCBvbmUgZGlzayBpcyBmYXVsdHkKIAkgKiAgcmFpZDEwIC0gYXNzdW1pbmcgd2UgaGF2ZSBhbGwgbmVjZXNzYXJ5IGFjdGl2ZSBkaXNrcworCSAqICByYWlkMSAtIHdpdGggKE4gLTEpIG1pcnJvciBkcml2ZXMgZmF1bHR5CiAJICovCiAJaWYgKG1kZGV2LT5sZXZlbCA9PSA0KQogCQlyZXR1cm4gcmFpZDBfdGFrZW92ZXJfcmFpZDQ1KG1kZGV2KTsKQEAgLTY2NSw2ICs2OTksMTIgQEAKIAlpZiAobWRkZXYtPmxldmVsID09IDEwKQogCQlyZXR1cm4gcmFpZDBfdGFrZW92ZXJfcmFpZDEwKG1kZGV2KTsKIAorCWlmIChtZGRldi0+bGV2ZWwgPT0gMSkKKwkJcmV0dXJuIHJhaWQwX3Rha2VvdmVyX3JhaWQxKG1kZGV2KTsKKworCXByaW50ayhLRVJOX0VSUiAiVGFrZW92ZXIgZnJvbSByYWlkJWkgdG8gcmFpZDAgbm90IHN1cHBvcnRlZFxuIiwKKwkJbWRkZXYtPmxldmVsKTsKKwogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA2OWI2NTk1Li4zYjYwN2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTI0NjMsMTEgKzI0NjMsMTMgQEAKIAltZGRldi0+cmVjb3ZlcnlfY3AgPSBNYXhTZWN0b3I7CiAKIAljb25mID0gc2V0dXBfY29uZihtZGRldik7Ci0JaWYgKCFJU19FUlIoY29uZikpCisJaWYgKCFJU19FUlIoY29uZikpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCkKIAkJCQlyZGV2LT5uZXdfcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrICogMjsKLQkJCisJCWNvbmYtPmJhcnJpZXIgPSAxOworCX0KKwogCXJldHVybiBjb25mOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggNTA0NGJhYi4uNzAyODEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtNTUxNyw3ICs1NTE3LDYgQEAKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAltZGtfcmRldl90ICpyZGV2OwogCWludCBzcGFyZXMgPSAwOwotCWludCBhZGRlZF9kZXZpY2VzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpKQpAQCAtNTUyNyw4ICs1NTI2LDggQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQotCQlpZiAoKHJkZXYtPnJhaWRfZGlzayA8IDAgfHwgcmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnJhaWRfZGlza3MpCi0JCSAgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKKwkJaWYgKCF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJc3BhcmVzKys7CiAKIAlpZiAoc3BhcmVzIC0gbWRkZXYtPmRlZ3JhZGVkIDwgbWRkZXYtPmRlbHRhX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKQpAQCAtNTU3MSwzNCArNTU3MCwzNSBAQAogCSAqIHRvIGNvcnJlY3RseSByZWNvcmQgdGhlICJwYXJ0aWFsbHkgcmVjb25zdHJ1Y3RlZCIgc3RhdGUgb2YKIAkgKiBzdWNoIGRldmljZXMgZHVyaW5nIHRoZSByZXNoYXBlIGFuZCBjb25mdXNpb24gY291bGQgcmVzdWx0LgogCSAqLwotCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPj0gMCkKLQkgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDAgJiYKLQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKLQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewotCQkJCWNoYXIgbm1bMjBdOwotCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykgewotCQkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCQkJCWFkZGVkX2RldmljZXMrKzsKLQkJCQl9IGVsc2UKLQkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKLQkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7Ci0JCQkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwKLQkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCi0JCQkJCS8qIEZhaWx1cmUgaGVyZSBpcyBPSyAqLzsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzCi0JCQkgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCQkvKiBUaGlzIGlzIGEgc3BhcmUgdGhhdCB3YXMgbWFudWFsbHkgYWRkZWQgKi8KLQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJCWFkZGVkX2RldmljZXMrKzsKLQkJfQorCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPj0gMCkgeworCQlpbnQgYWRkZWRfZGV2aWNlcyA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCisJCQlpZiAocmRldi0+cmFpZF9kaXNrIDwgMCAmJgorCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCQlpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKKwkJCQkJY2hhciBubVsyMF07CisJCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sKKwkJCQkJICAgID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpIHsKKwkJCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQkJCWFkZGVkX2RldmljZXMrKzsKKwkJCQkJfSBlbHNlCisJCQkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSAwOworCQkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CisJCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCisJCQkJCQkJICAgICAgJnJkZXYtPmtvYmosIG5tKSkKKwkJCQkJCS8qIEZhaWx1cmUgaGVyZSBpcyBPSyAqLzsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzCisJCQkJICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJCS8qIFRoaXMgaXMgYSBzcGFyZSB0aGF0IHdhcyBtYW51YWxseSBhZGRlZCAqLworCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQlhZGRlZF9kZXZpY2VzKys7CisJCQl9CiAKLQkvKiBXaGVuIGEgcmVzaGFwZSBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgZGV2aWNlcywgLT5kZWdyYWRlZAotCSAqIGlzIG1lYXN1cmVkIGFnYWluc3QgdGhlIGxhcmdlciBvZiB0aGUgcHJlIGFuZCBwb3N0IG51bWJlciBvZgotCSAqIGRldmljZXMuKi8KLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID4gMCkgeworCQkvKiBXaGVuIGEgcmVzaGFwZSBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgZGV2aWNlcywKKwkJICogLT5kZWdyYWRlZCBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSBsYXJnZXIgb2YgdGhlCisJCSAqIHByZSBhbmQgcG9zdCBudW1iZXIgb2YgZGV2aWNlcy4KKwkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQltZGRldi0+ZGVncmFkZWQgKz0gKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQogCQkJLSBhZGRlZF9kZXZpY2VzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMgYi9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYwppbmRleCBmMDExYzVkLi4xYzVjYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGlyLWxpcmMtY29kZWMuYyAtIGlyLWNvcmUgdG8gY2xhc3NpYyBsaXJjIGludGVyZmFjZSBicmlkZ2UKKy8qIGlyLWxpcmMtY29kZWMuYyAtIHJjLWNvcmUgdG8gY2xhc3NpYyBsaXJjIGludGVyZmFjZSBicmlkZ2UKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgogICoKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkvKiBDYXJyaWVyIHJlcG9ydHMgKi8KIAlpZiAoZXYuY2Fycmllcl9yZXBvcnQpIHsKIAkJc2FtcGxlID0gTElSQ19GUkVRVUVOQ1koZXYuY2Fycmllcik7CisJCUlSX2RwcmludGsoMiwgImNhcnJpZXIgcmVwb3J0IChmcmVxOiAlZClcbiIsIHNhbXBsZSk7CiAKIAkvKiBQYWNrZXQgZW5kICovCiAJfSBlbHNlIGlmIChldi50aW1lb3V0KSB7CkBAIC02Miw2ICs2Myw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQlzYW1wbGUgPSBMSVJDX1RJTUVPVVQoZXYuZHVyYXRpb24gLyAxMDAwKTsKKwkJSVJfZHByaW50aygyLCAidGltZW91dCByZXBvcnQgKGR1cmF0aW9uOiAlZClcbiIsIHNhbXBsZSk7CiAKIAkvKiBOb3JtYWwgc2FtcGxlICovCiAJfSBlbHNlIHsKQEAgLTg1LDYgKzg3LDggQEAKIAogCQlzYW1wbGUgPSBldi5wdWxzZSA/IExJUkNfUFVMU0UoZXYuZHVyYXRpb24gLyAxMDAwKSA6CiAJCQkJCUxJUkNfU1BBQ0UoZXYuZHVyYXRpb24gLyAxMDAwKTsKKwkJSVJfZHByaW50aygyLCAiZGVsaXZlcmluZyAldXVzICVzIHRvIGxpcmNfZGV2XG4iLAorCQkJICAgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKIAl9CiAKIAlsaXJjX2J1ZmZlcl93cml0ZShkZXYtPnJhdy0+bGlyYy5kcnYtPnJidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYwppbmRleCAzYmYzMzM3Li4yZjVkYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKQEAgLTMsNiArMyw5IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCisgKiBTZWUgaHR0cDovL21lZGlhY2VudGVyZ3VpZGVzLmNvbS9ib29rL2V4cG9ydC9odG1sLzMxIGZvciBkZXRhaWxzIG9uCisgKiBrZXkgbWFwcGluZ3MuCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNjAsNiArNjMsOSBAQAogCXsgMHg4MDBmMDQyNiwgS0VZX0VQRyB9LAkJLyogR3VpZGUgKi8KIAl7IDB4ODAwZjA0MjcsIEtFWV9aT09NIH0sCQkvKiBBc3BlY3QgKi8KIAorCXsgMHg4MDBmMDQzMiwgS0VZX01PREUgfSwJCS8qIFZpc3VhbGl6YXRpb24gKi8KKwl7IDB4ODAwZjA0MzMsIEtFWV9QUkVTRU5UQVRJT04gfSwJLyogU2xpZGUgU2hvdyAqLworCXsgMHg4MDBmMDQzNCwgS0VZX0VKRUNUQ0QgfSwKIAl7IDB4ODAwZjA0M2EsIEtFWV9CUklHSFRORVNTVVAgfSwKIAogCXsgMHg4MDBmMDQ0NiwgS0VZX1RWIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwppbmRleCAwNzkzNTNlLi42ZGYwYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKQEAgLTgxNiw3ICs4MTYsNyBAQAogCXN3aXRjaCAoaXItPmJ1Zl9pbltpbmRleF0pIHsKIAkvKiAyLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCiAJY2FzZSBNQ0VfQ01EX1NfVElNRU9VVDoKLQkJaXItPnJjLT50aW1lb3V0ID0gTVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKKwkJaXItPnJjLT50aW1lb3V0ID0gVVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKIAkJYnJlYWs7CiAKIAkvKiAxLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCkBAIC04NTUsOSArODU1LDEwIEBACiAJCQlicmVhazsKIAkJY2FzZSBQQVJTRV9JUkRBVEE6CiAJCQlpci0+cmVtLS07CisJCQlpbml0X2lyX3Jhd19ldmVudCgmcmF3aXIpOwogCQkJcmF3aXIucHVsc2UgPSAoKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfQklUKSAhPSAwKTsKIAkJCXJhd2lyLmR1cmF0aW9uID0gKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfTUFTSykKLQkJCQkJICogTVNfVE9fVVMoTUNFX1RJTUVfVU5JVCk7CisJCQkJCSAqIFVTX1RPX05TKE1DRV9USU1FX1VOSVQpOwogCiAJCQlkZXZfZGJnKGlyLT5kZXYsICJTdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJWRcbiIsCiAJCQkJcmF3aXIucHVsc2UgPyAicHVsc2UiIDogInNwYWNlIiwKQEAgLTg4Myw2ICs4ODQsOCBAQAogCQkJCQkgICAgIGksIGlyLT5yZW0gKyAxLCBmYWxzZSk7CiAJCQlpZiAoaXItPnJlbSkKIAkJCQlpci0+cGFyc2VyX3N0YXRlID0gUEFSU0VfSVJEQVRBOworCQkJZWxzZQorCQkJCWlyX3Jhd19ldmVudF9yZXNldChpci0+cmMpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA2MCw3ICsxMDYzLDcgQEAKIAlyYy0+cHJpdiA9IGlyOwogCXJjLT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CiAJcmMtPmFsbG93ZWRfcHJvdG9zID0gUkNfVFlQRV9BTEw7Ci0JcmMtPnRpbWVvdXQgPSBNU19UT19OUygxMDAwKTsKKwlyYy0+dGltZW91dCA9IFVTX1RPX05TKDEwMDApOwogCWlmICghaXItPmZsYWdzLm5vX3R4KSB7CiAJCXJjLT5zX3R4X21hc2sgPSBtY2V1c2Jfc2V0X3R4X21hc2s7CiAJCXJjLT5zX3R4X2NhcnJpZXIgPSBtY2V1c2Jfc2V0X3R4X2NhcnJpZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKaW5kZXggZGQ0Y2FmOC4uMjczZDlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWNhcnJpZXIgPSAoY291bnQgKiAxMDAwMDAwKSAvIGR1cmF0aW9uOworCWNhcnJpZXIgPSBNU19UT19OUyhjb3VudCkgLyBkdXJhdGlvbjsKIAogCWlmICgoY2FycmllciA+IE1BWF9DQVJSSUVSKSB8fCAoY2FycmllciA8IE1JTl9DQVJSSUVSKSkKIAkJbnZ0X2RiZygiV1RGPyBDYXJyaWVyIGZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2UhIik7CkBAIC02MTIsOCArNjEyLDggQEAKIAkJc2FtcGxlID0gbnZ0LT5idWZbaV07CiAKIAkJcmF3aXIucHVsc2UgPSAoKHNhbXBsZSAmIEJVRl9QVUxTRV9CSVQpICE9IDApOwotCQlyYXdpci5kdXJhdGlvbiA9IChzYW1wbGUgJiBCVUZfTEVOX01BU0spCi0JCQkJCSogU0FNUExFX1BFUklPRCAqIDEwMDA7CisJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykKKwkJCQkJICAqIFNBTVBMRV9QRVJJT0QpOwogCiAJCWlmICgoc2FtcGxlICYgQlVGX0xFTl9NQVNLKSA9PSBCVUZfTEVOX01BU0spIHsKIAkJCWlmIChudnQtPnJhd2lyLnB1bHNlID09IHJhd2lyLnB1bHNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCA3MmJlOGEwLi41MTJhMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtNDU4LDIxICs0NTgsMjcgQEAKIAkJaW5kZXggPSBpcl9sb29rdXBfYnlfc2NhbmNvZGUocmNfbWFwLCBzY2FuY29kZSk7CiAJfQogCi0JaWYgKGluZGV4ID49IHJjX21hcC0+bGVuKSB7Ci0JCWlmICghKGtlLT5mbGFncyAmIElOUFVUX0tFWU1BUF9CWV9JTkRFWCkpCi0JCQlJUl9kcHJpbnRrKDEsICJ1bmtub3duIGtleSBmb3Igc2NhbmNvZGUgMHglMDR4XG4iLAotCQkJCSAgIHNjYW5jb2RlKTsKKwlpZiAoaW5kZXggPCByY19tYXAtPmxlbikgeworCQllbnRyeSA9ICZyY19tYXAtPnNjYW5baW5kZXhdOworCisJCWtlLT5pbmRleCA9IGluZGV4OworCQlrZS0+a2V5Y29kZSA9IGVudHJ5LT5rZXljb2RlOworCQlrZS0+bGVuID0gc2l6ZW9mKGVudHJ5LT5zY2FuY29kZSk7CisJCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKKworCX0gZWxzZSBpZiAoIShrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpKSB7CisJCS8qCisJCSAqIFdlIGRvIG5vdCByZWFsbHkga25vdyB0aGUgdmFsaWQgcmFuZ2Ugb2Ygc2NhbmNvZGVzCisJCSAqIHNvIGxldCdzIHJlc3BvbmQgd2l0aCBLRVlfUkVTRVJWRUQgdG8gYW55dGhpbmcgd2UKKwkJICogZG8gbm90IGhhdmUgbWFwcGluZyBmb3IgW3lldF0uCisJCSAqLworCQlrZS0+aW5kZXggPSBpbmRleDsKKwkJa2UtPmtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7CisJfSBlbHNlIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKLQotCWtlLT5pbmRleCA9IGluZGV4OwotCWtlLT5rZXljb2RlID0gZW50cnktPmtleWNvZGU7Ci0Ja2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOwotCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKLQogCXJldHZhbCA9IDA7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMgYi9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCmluZGV4IDZlMjkxMWMuLmU0MzVkOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCQkJc3otPnNpZ25hbF9zdGFydC50dl91c2VjIC0KIAkJCQlzei0+c2lnbmFsX2xhc3QudHZfdXNlYyk7CiAJCQlyYXdpci5kdXJhdGlvbiAtPSBzei0+c3VtOwotCQkJcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwkJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMocmF3aXIuZHVyYXRpb24pOwogCQkJcmF3aXIuZHVyYXRpb24gJj0gSVJfTUFYX0RVUkFUSU9OOwogCQl9CiAJCXN6X3B1c2goc3osIHJhd2lyKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNaX1JFU09MVVRJT047CiAJcmF3aXIuZHVyYXRpb24gKz0gU1pfUkVTT0xVVElPTiAvIDI7CiAJc3otPnN1bSArPSByYXdpci5kdXJhdGlvbjsKLQlyYXdpci5kdXJhdGlvbiAqPSAxMDAwOworCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMocmF3aXIuZHVyYXRpb24pOwogCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKIAlzel9wdXNoKHN6LCByYXdpcik7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwogCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwogCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAlzel9wdXNoKHN6LCByYXdpcik7CiB9CiAKQEAgLTI3Myw2ICsyNzMsNyBAQAogCQkJCWlmIChzei0+dGltZW91dF9lbmFibGVkKQogCQkJCQlzel9wdXNoKHN6LCByYXdpcik7CiAJCQkJaXJfcmF3X2V2ZW50X2hhbmRsZShzei0+cmRldik7CisJCQkJaXJfcmF3X2V2ZW50X3Jlc2V0KHN6LT5yZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJc3pfcHVzaF9mdWxsX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKIAkJCX0KQEAgLTI5MCw2ICsyOTEsNyBAQAogCQl9CiAJfQogCisJaXJfcmF3X2V2ZW50X2hhbmRsZShzei0+cmRldik7CiAJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAogCXJldHVybjsKQEAgLTQzMCwxMyArNDMyLDEzIEBACiAJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOwogCS8qIEZJWE1FOiBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byBzZXQgdGhpcyAqLwogCXN6LT50aW1lb3V0X2VuYWJsZWQgPSB0cnVlOwotCXN6LT5yZGV2LT50aW1lb3V0ID0gKCgoU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwKSAmCisJc3otPnJkZXYtPnRpbWVvdXQgPSAoKFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKSAmCiAJCQkJSVJfTUFYX0RVUkFUSU9OKSB8IDB4MDMwMDAwMDApOwogCSNpZiAwCiAJLyogbm90IHlldCBzdXBwb3J0ZWQsIGRlcGVuZHMgb24gcGF0Y2hlcyBmcm9tIG1heGltICovCiAJLyogc2VlIGFsc286IExJUkNfR0VUX1JFQ19SRVNPTFVUSU9OIGFuZCBMSVJDX1NFVF9SRUNfVElNRU9VVCAqLwotCXN6LT5taW5fdGltZW91dCA9IFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMDsKLQlzei0+bWF4X3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7CisJc3otPm1pbl90aW1lb3V0ID0gVVNfVE9fTlMoU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04pOworCXN6LT5tYXhfdGltZW91dCA9IFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKTsKIAkjZW5kaWYKIAogCWRvX2dldHRpbWVvZmRheSgmc3otPnNpZ25hbF9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKaW5kZXggODY1MjE2ZS4uNDcyMzZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwpAQCAtNTc5Myw3ICs1NzkzLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogLyoJCWNhc2UgMHhkZDoJICogZGVsYXkgKi8KLQkJCW1zbGVlcChhY3Rpb24tPnZhbCAvIDY0ICsgMTApOworCQkJbXNsZWVwKGFjdGlvbi0+aWR4KTsKIAkJCWJyZWFrOwogCQl9CiAJCWFjdGlvbisrOwpAQCAtNTgzMCw3ICs1ODMwLDcgQEAKIAkJW1NFTlNPUl9HQzAzMDVdID0JZ2MwMzA1X21hdHJpeCwKIAkJW1NFTlNPUl9IRENTMjAyMGJdID0JTlVMTCwKIAkJW1NFTlNPUl9IVjcxMzFCXSA9CU5VTEwsCi0JCVtTRU5TT1JfSFY3MTMxUl0gPQlOVUxMLAorCQlbU0VOU09SX0hWNzEzMVJdID0JcG8yMDMwX21hdHJpeCwKIAkJW1NFTlNPUl9JQ00xMDVBXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfTUM1MDFDQl0gPQlOVUxMLAogCQlbU0VOU09SX01UOVYxMTFfMV0gPQlnYzAzMDVfbWF0cml4LApAQCAtNTkzNiw2ICs1OTM2LDcgQEAKIAljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX09WNzYyMDoKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKQEAgLTYxMDgsMTEgKzYxMDksMTMgQEAKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDAwM2IpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAzOCk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAweDAwM2IpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGMsIDB4MDAzYSk7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM5KTsKLQkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzgpOworCQlpZiAoc2Vuc29yID09IFNFTlNPUl9QQVMyMDJCKQorCQkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzgpOwogCQlicmVhazsKIAl9CiB9CkBAIC02NzA0LDEwICs2NzA3LDEzIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2EpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOSk7CisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9IVjcxMzFSKQorCQkJcmVnX3coZ3NwY2FfZGV2LCAweDUwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU4pOwogCQlicmVhazsKIAl9CiAKQEAgLTY3MjAsNiArNjcyNiw3IEBACiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgorCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJY2FzZSBTRU5TT1JfVEFTNTEzMEM6CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKIAkJLyogZmFsbCB0aHJ1ICovCkBAIC02NzYwLDYgKzY3NjcsMTIgQEAKIAkJCQkJCS8qIG1zLXdpbiArICovCiAJCXJlZ193KGdzcGNhX2RldiwgMHg0MCwgMHgwMTE3KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyNSwgMHgwNCwgMHgwMCk7CS8qIGV4cG9zdXJlICovCisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MjYsIDB4OTMsIDB4MDApOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDI3LCAweGUwLCAweDAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOKTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCkBAIC02ODA4LDkgKzY4MjEsMTcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhkOCkgewkvKiBzdGFydCBvZiBmcmFtZSAqLworCS8qIGNoZWNrIHRoZSBKUEVHIGVuZCBvZiBmcmFtZSAqLworCWlmIChsZW4gPj0gMworCSAmJiBkYXRhW2xlbiAtIDNdID09IDB4ZmYgJiYgZGF0YVtsZW4gLSAyXSA9PSAweGQ5KSB7CisvKmZpeG1lOiB3aGF0IGRvZXMgdGhlIGxhc3QgYnl0ZSBtZWFuPyovCiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAotCQkJCQlOVUxMLCAwKTsKKwkJCQkJZGF0YSwgbGVuIC0gMSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayB0aGUgSlBFRyBzdGFydCBvZiBhIGZyYW1lICovCisJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsKIAkJLyogcHV0IHRoZSBKUEVHIGhlYWRlciBpbiB0aGUgbmV3IGZyYW1lICovCiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKIAkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCBhNjU3MmU1Li5hMjdkOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMjgzLDYgKzI4Myw3IEBACiAJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXNpemVfdCBidWZmZXJfc2l6ZTsKIAlpbnQgaTsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKQEAgLTM4MSwxMyArMzgyLDIxIEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQogCXJldHZhbCA9IGhkcHZyX3JlZ2lzdGVyX2kyY19hZGFwdGVyKGRldik7CiAJaWYgKHJldHZhbCA8IDApIHsKLQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJyZWdpc3RlcmluZyBpMmMgYWRhcHRlciBmYWlsZWRcbiIpOworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBhZGFwdGVyIHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcmV0dmFsID0gaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKGRldik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIElSIGRldmljZXMgZmFpbGVkXG4iKTsKKwljbGllbnQgPSBoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBJUiBSWCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byByZWdfZmFpbDsKKwl9CisKKwljbGllbnQgPSBoZHB2cl9yZWdpc3Rlcl9pcl90eF9pMmMoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBJUiBUWCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byByZWdfZmFpbDsKKwl9CiAjZW5kaWYKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KQEAgLTM5NSw2ICs0MDQsMTAgQEAKIAkJICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmlkZW9fZGV2KSk7CiAJcmV0dXJuIDA7CiAKK3JlZ19mYWlsOgorI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXB0ZXIpOworI2VuZGlmCiBlcnJvcjoKIAlpZiAoZGV2KSB7CiAJCS8qIERlc3Ryb3kgc2luZ2xlIHRocmVhZCAqLwpAQCAtNDI0LDYgKzQzNyw5IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CiAJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwdGVyKTsKKyNlbmRpZgogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2KTsKIAlhdG9taWNfZGVjKCZkZXZfbnIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKaW5kZXggODliNzFmYS4uZTUzZmE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCkBAIC0zMSwyNiArMzEsMzQgQEAKICNkZWZpbmUgWjhGMDgxMV9JUl9SWF9JMkNfQUREUgkweDcxCiAKIAotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pMmNfYm9hcmRfaW5mbyA9IHsKLQlJMkNfQk9BUkRfSU5GTygiaXJfdHhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfVFhfSTJDX0FERFIpLAotCUkyQ19CT0FSRF9JTkZPKCJpcl9yeF96OGYwODExX2hkcHZyIiwgWjhGMDgxMV9JUl9SWF9JMkNfQUREUiksCi19OwotCi1pbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3N0cnVjdCBpMmNfY2xpZW50ICpoZHB2cl9yZWdpc3Rlcl9pcl90eF9pMmMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwogCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmZGV2LT5pcl9pMmNfaW5pdF9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1RYX0kyQ19BRERSKSwKKwl9OworCisJaW5pdF9kYXRhLT5uYW1lID0gIkhELVBWUiI7CisJaGRwdnJfaXJfdHhfaTJjX2JvYXJkX2luZm8ucGxhdGZvcm1fZGF0YSA9IGluaXRfZGF0YTsKKworCXJldHVybiBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2lyX3R4X2kyY19ib2FyZF9pbmZvKTsKK30KKworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3J4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IElSX2kyY19pbml0X2RhdGEgKmluaXRfZGF0YSA9ICZkZXYtPmlyX2kyY19pbml0X2RhdGE7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvID0geworCQlJMkNfQk9BUkRfSU5GTygiaXJfcnhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIpLAorCX07CiAKIAkvKiBPdXIgZGVmYXVsdCBpbmZvcm1hdGlvbiBmb3IgaXIta2JkLWkyYy5jIHRvIHVzZSAqLwogCWluaXRfZGF0YS0+aXJfY29kZXMgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKIAlpbml0X2RhdGEtPmludGVybmFsX2dldF9rZXlfZnVuYyA9IElSX0tCRF9HRVRfS0VZX0hBVVBfWFZSOwogCWluaXRfZGF0YS0+dHlwZSA9IFJDX1RZUEVfUkM1OwotCWluaXRfZGF0YS0+bmFtZSA9ICJIRCBQVlIiOwotCWhkcHZyX2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisJaW5pdF9kYXRhLT5uYW1lID0gIkhELVBWUiI7CisJaGRwdnJfaXJfcnhfaTJjX2JvYXJkX2luZm8ucGxhdGZvcm1fZGF0YSA9IGluaXRfZGF0YTsKIAotCWMgPSBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2kyY19ib2FyZF9pbmZvKTsKLQotCXJldHVybiAoYyA9PSBOVUxMKSA/IC1FTk9ERVYgOiAwOworCXJldHVybiBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvKTsKIH0KIAogc3RhdGljIGludCBoZHB2cl9pMmNfcmVhZChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIGludCBidXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKaW5kZXggZWU3NGUzYi4uMDcyZjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMzEzLDcgKzMxMyw4IEBACiAvKiBpMmMgYWRhcHRlciByZWdpc3RyYXRpb24gKi8KIGludCBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCi1pbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfcnhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIGJ1ZmZlciBtYW5hZ2VtZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGQyYjIwYWQuLmEyMjFhZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0xMjgsNiArMTI4LDE5IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2tleV9oYXVwX3h2cihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogeworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMV0gPSB7IDAgfTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgc2FtZSBhcHBhcmVudCAiYXJlIHlvdSByZWFkeT8iIHBvbGwgY29tbWFuZCBvYnNlcnZlZAorCSAqIHdhdGNoaW5nIFdpbmRvd3MgZHJpdmVyIHRyYWZmaWMgYW5kIGltcGxlbWVudGVkIGluIGxpcmNfemlsb2cuIFdpdGgKKwkgKiB0aGlzIGFkZGVkLCB3ZSBnZXQgZmFyIHNhbmVyIHJlbW90ZSBiZWhhdmlvciB3aXRoIHo4IGNoaXBzIG9uIHVzYgorCSAqIGNvbm5lY3RlZCBkZXZpY2VzLCBldmVuIHdpdGggdGhlIGRlZmF1bHQgcG9sbGluZyBpbnRlcnZhbCBvZiAxMDBtcy4KKwkgKi8KKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaXItPmMsIGJ1ZiwgMSk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVJTlZBTDsKKwogCXJldHVybiBnZXRfa2V5X2hhdXBfY29tbW9uIChpciwgaXJfa2V5LCBpcl9yYXcsIDYsIDMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCBjY2M4ODQ5Li40NTFlY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKQEAgLTU5Nyw3ICs1OTcsNiBAQAogCQlpbml0X2RhdGEtPmludGVybmFsX2dldF9rZXlfZnVuYyA9IElSX0tCRF9HRVRfS0VZX0hBVVBfWFZSOwogCQlpbml0X2RhdGEtPnR5cGUgICAgICAgICAgICAgICAgICA9IFJDX1RZUEVfUkM1OwogCQlpbml0X2RhdGEtPm5hbWUgICAgICAgICAgICAgICAgICA9IGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uOwotCQlpbml0X2RhdGEtPnBvbGxpbmdfaW50ZXJ2YWwgICAgICA9IDI2MDsgLyogbXMgRnJvbSBsaXJjX3ppbG9nICovCiAJCS8qIElSIFJlY2VpdmVyICovCiAJCWluZm8uYWRkciAgICAgICAgICA9IDB4NzE7CiAJCWluZm8ucGxhdGZvcm1fZGF0YSA9IGluaXRfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggZjM1NDU5ZC4uMGRiOTA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTE1NjUsNyArMTU2NSw3IEBACiAJY2hpcF9pZCA9IG5hbWVbNV07CiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoaXMgY2hpcCBpcyBwYXJ0IG9mIHRoZSBzYWE3MTF4IHNlcmllcyAqLwotCWlmIChtZW1jbXAobmFtZSwgIjFmNzExIiwgNSkpIHsKKwlpZiAobWVtY21wKG5hbWUgKyAxLCAiZjcxMSIsIDQpKSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4IChJRCAlcykgZG9lcyBub3QgbWF0Y2ggYSBrbm93biBzYWE3MTF4IGNoaXAuXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIG5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYyBiL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYwppbmRleCBiYWM3ZDYyLi4wMzcxYmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCkBAIC00NjIsNyArNDYyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKCptbWMpLCAmcGRldi0+ZGV2KTsKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IHNkaF9ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jCmluZGV4IGIzYTBhYjAuLjc0MjE4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTgyNyw4ICs4MjgsOCBAQAogCX0KIAogCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tYyIpOwotCWlmICghaG9zdC0+Y2xrKSB7Ci0JCXJldCA9IC1FTk9FTlQ7CisJaWYgKElTX0VSUihob3N0LT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoaG9zdC0+Y2xrKTsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBtbWMgY2xvY2tcbiIpOwogCQlnb3RvIGVycl9mcmVlX2hvc3Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCA1NjMwMjI4Li4yZDZkZTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtNDYsMTAgKzQ3LDYgQEAKICAqCSAgICAgIGlzIGFzc2VydGVkIChsaWtld2lzZSBmb3IgUlgpCiAgKiBAZmlmb2hhbGZzaXplOiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgd3JpdHRlbiB3aGVuIE1DSV9UWEZJRk9IQUxGRU1QVFkKICAqCQkgIGlzIGFzc2VydGVkIChsaWtld2lzZSBmb3IgUlgpCi0gKiBAYnJva2VuX2Jsb2NrZW5kOiB0aGUgTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4gb24gdGhlIGhhcmR3YXJlCi0gKgkJYW5kIHdpbGwgbm90IHdvcmsgYXQgYWxsLgotICogQGJyb2tlbl9ibG9ja2VuZF9kbWE6IHRoZSBNQ0lfREFUQUJMT0NLRU5EIGlzIGJyb2tlbiBvbiB0aGUgaGFyZHdhcmUgd2hlbgotICoJCXVzaW5nIERNQS4KICAqIEBzZGlvOiB2YXJpYW50IHN1cHBvcnRzIFNESU8KICAqIEBzdF9jbGtkaXY6IHRydWUgaWYgdXNpbmcgYSBTVC1zcGVjaWZpYyBjbG9jayBkaXZpZGVyIGFsZ29yaXRobQogICovCkBAIC01OSw4ICs1Niw2IEBACiAJdW5zaWduZWQgaW50CQlkYXRhbGVuZ3RoX2JpdHM7CiAJdW5zaWduZWQgaW50CQlmaWZvc2l6ZTsKIAl1bnNpZ25lZCBpbnQJCWZpZm9oYWxmc2l6ZTsKLQlib29sCQkJYnJva2VuX2Jsb2NrZW5kOwotCWJvb2wJCQlicm9rZW5fYmxvY2tlbmRfZG1hOwogCWJvb2wJCQlzZGlvOwogCWJvb2wJCQlzdF9jbGtkaXY7CiB9OwpAQCAtNzYsNyArNzEsNiBAQAogCS5maWZvaGFsZnNpemUJCT0gOCAqIDQsCiAJLmNsa3JlZ19lbmFibGUJCT0gMSA8PCAxMywgLyogSFdGQ0VOICovCiAJLmRhdGFsZW5ndGhfYml0cwk9IDE2LAotCS5icm9rZW5fYmxvY2tlbmRfZG1hCT0gdHJ1ZSwKIAkuc2RpbwkJCT0gdHJ1ZSwKIH07CiAKQEAgLTg2LDcgKzgwLDYgQEAKIAkuY2xrcmVnCQkJPSBNQ0lfQ0xLX0VOQUJMRSwKIAkuY2xrcmVnX2VuYWJsZQkJPSAxIDw8IDE0LCAvKiBIV0ZDRU4gKi8KIAkuZGF0YWxlbmd0aF9iaXRzCT0gMjQsCi0JLmJyb2tlbl9ibG9ja2VuZAk9IHRydWUsCiAJLnNkaW8JCQk9IHRydWUsCiAJLnN0X2Nsa2RpdgkJPSB0cnVlLAogfTsKQEAgLTIxMCw4ICsyMDMsNiBAQAogCWhvc3QtPmRhdGEgPSBkYXRhOwogCWhvc3QtPnNpemUgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAlob3N0LT5kYXRhX3hmZXJlZCA9IDA7Ci0JaG9zdC0+YmxvY2tlbmQgPSBmYWxzZTsKLQlob3N0LT5kYXRhZW5kID0gZmFsc2U7CiAKIAltbWNpX2luaXRfc2coaG9zdCwgZGF0YSk7CiAKQEAgLTI4OCwyMSArMjc5LDI2IEBACiBtbWNpX2RhdGFfaXJxKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKIAkgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzKQogewotCXN0cnVjdCB2YXJpYW50X2RhdGEgKnZhcmlhbnQgPSBob3N0LT52YXJpYW50OwotCiAJLyogRmlyc3QgY2hlY2sgZm9yIGVycm9ycyAqLwogCWlmIChzdGF0dXMgJiAoTUNJX0RBVEFDUkNGQUlMfE1DSV9EQVRBVElNRU9VVHxNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkgewotCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1DSSBFUlJPUiBJUlEgKHN0YXR1cyAlMDh4KVxuIiwgc3RhdHVzKTsKLQkJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQ1JDRkFJTCkKLQkJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKLQkJZWxzZSBpZiAoc3RhdHVzICYgTUNJX0RBVEFUSU1FT1VUKQotCQkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOwotCQllbHNlIGlmIChzdGF0dXMgJiAoTUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpCi0JCQlkYXRhLT5lcnJvciA9IC1FSU87CisJCXUzMiByZW1haW4sIHN1Y2Nlc3M7CiAKLQkJLyogRm9yY2UtY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uICovCi0JCWhvc3QtPmJsb2NrZW5kID0gdHJ1ZTsKLQkJaG9zdC0+ZGF0YWVuZCA9IHRydWU7CisJCS8qIENhbGN1bGF0ZSBob3cgZmFyIHdlIGFyZSBpbnRvIHRoZSB0cmFuc2ZlciAqLworCQlyZW1haW4gPSByZWFkbChob3N0LT5iYXNlICsgTU1DSURBVEFDTlQpOworCQlzdWNjZXNzID0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3MgLSByZW1haW47CisKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNQ0kgRVJST1IgSVJRIChzdGF0dXMgJTA4eClcbiIsIHN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBNQ0lfREFUQUNSQ0ZBSUwpIHsKKwkJCS8qIExhc3QgYmxvY2sgd2FzIG5vdCBzdWNjZXNzZnVsICovCisJCQlob3N0LT5kYXRhX3hmZXJlZCA9IHJvdW5kX2Rvd24oc3VjY2VzcyAtIDEsIGRhdGEtPmJsa3N6KTsKKwkJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiBNQ0lfREFUQVRJTUVPVVQpIHsKKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzLCBkYXRhLT5ibGtzeik7CisJCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCX0gZWxzZSBpZiAoc3RhdHVzICYgKE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKSB7CisJCQlob3N0LT5kYXRhX3hmZXJlZCA9IHJvdW5kX2Rvd24oc3VjY2VzcywgZGF0YS0+Ymxrc3opOworCQkJZGF0YS0+ZXJyb3IgPSAtRUlPOworCQl9CiAKIAkJLyoKIAkJICogV2UgaGl0IGFuIGVycm9yIGNvbmRpdGlvbi4gIEVuc3VyZSB0aGF0IGFueSBkYXRhCkBAIC0zMjEsNjEgKzMxNywxNCBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBPbiBBUk0gdmFyaWFudHMgaW4gUElPIG1vZGUsIE1DSV9EQVRBQkxPQ0tFTkQKLQkgKiBpcyBhbHdheXMgc2VudCBmaXJzdCwgYW5kIHdlIGluY3JlYXNlIHRoZQotCSAqIHRyYW5zZmVyZWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGF0IElSUS4gVGhlbgotCSAqIE1DSV9EQVRBRU5EIGZvbGxvd3MgYW5kIHdlIGNvbmNsdWRlIHRoZSB0cmFuc2FjdGlvbi4KLQkgKgotCSAqIE9uIHRoZSBVeDUwMCBzaW5nbGUtSVJRIHZhcmlhbnQgTUNJX0RBVEFCTE9DS0VORAotCSAqIGRvZXNuJ3Qgc2VlbSB0byBpbW1lZGlhdGVseSBjbGVhciBmcm9tIHRoZSBzdGF0dXMsCi0JICogc28gd2UgY2FuJ3QgdXNlIGl0IGtlZXAgY291bnQgd2hlbiBvbmx5IG9uZSBpcnEgaXMKLQkgKiB1c2VkIGJlY2F1c2UgdGhlIGlycSB3aWxsIGhpdCBmb3Igb3RoZXIgcmVhc29ucywgYW5kCi0JICogdGhlbiB0aGUgZmxhZyBpcyBzdGlsbCB1cC4gU28gd2UgdXNlIHRoZSBNQ0lfREFUQUVORAotCSAqIElSUSBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgdHJhbnNmZXIgYmVjYXVzZQotCSAqIE1DSV9EQVRBQkxPQ0tFTkQgaXMgYnJva2VuLgotCSAqCi0JICogSW4gdGhlIFUzMDAsIHRoZSBJUlFzIGNhbiBhcnJpdmUgb3V0LW9mLW9yZGVyLAotCSAqIGUuZy4gTUNJX0RBVEFCTE9DS0VORCBzb21ldGltZXMgYXJyaXZlcyBhZnRlciBNQ0lfREFUQUVORCwKLQkgKiBzbyBmb3IgdGhpcyBjYXNlIHdlIHVzZSB0aGUgZmxhZ3MgImJsb2NrZW5kIiBhbmQKLQkgKiAiZGF0YWVuZCIgdG8gbWFrZSBzdXJlIGJvdGggSVJRcyBoYXZlIGFycml2ZWQgYmVmb3JlCi0JICogY29uY2x1ZGluZyB0aGUgdHJhbnNhY3Rpb24uIChUaGlzIGRvZXMgbm90IGFwcGx5Ci0JICogdG8gdGhlIFV4NTAwIHdoaWNoIGRvZXNuJ3QgZmlyZSBNQ0lfREFUQUJMT0NLRU5ECi0JICogYXQgYWxsLikgSW4gRE1BIG1vZGUgaXQgc3VmZmVycyBmcm9tIHRoZSBzYW1lIHByb2JsZW0KLQkgKiBhcyB0aGUgVXg1MDAuCi0JICovCi0JaWYgKHN0YXR1cyAmIE1DSV9EQVRBQkxPQ0tFTkQpIHsKLQkJLyoKLQkJICogSnVzdCBiZWluZyBhIGxpdHRsZSBvdmVyLWNhdXRpb3VzLCB3ZSBkbyBub3QKLQkJICogdXNlIHRoaXMgcHJvZ3Jlc3NpdmUgdXBkYXRlIGlmIHRoZSBoYXJkd2FyZSBibG9ja2VuZAotCQkgKiBmbGFnIGlzIHVucmVsaWFibGU6IHNpbmNlIGl0IGNhbiBzdGF5IGhpZ2ggYmV0d2VlbgotCQkgKiBJUlFzIGl0IHdpbGwgY29ycnVwdCB0aGUgdHJhbnNmZXIgY291bnRlci4KLQkJICovCi0JCWlmICghdmFyaWFudC0+YnJva2VuX2Jsb2NrZW5kKQotCQkJaG9zdC0+ZGF0YV94ZmVyZWQgKz0gZGF0YS0+Ymxrc3o7Ci0JCWhvc3QtPmJsb2NrZW5kID0gdHJ1ZTsKLQl9CisJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQkxPQ0tFTkQpCisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAic3RyYXkgTUNJX0RBVEFCTE9DS0VORCBpbnRlcnJ1cHRcbiIpOwogCi0JaWYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EKQotCQlob3N0LT5kYXRhZW5kID0gdHJ1ZTsKLQotCS8qCi0JICogT24gdmFyaWFudHMgd2l0aCBicm9rZW4gYmxvY2tlbmQgd2Ugc2hhbGwgb25seSB3YWl0IGZvciBkYXRhZW5kLAotCSAqIG9uIG90aGVycyB3ZSBtdXN0IHN5bmMgd2l0aCB0aGUgYmxvY2tlbmQgc2lnbmFsIHNpbmNlIHRoZXkgY2FuCi0JICogYXBwZWFyIG91dC1vZi1vcmRlci4KLQkgKi8KLQlpZiAoaG9zdC0+ZGF0YWVuZCAmJiAoaG9zdC0+YmxvY2tlbmQgfHwgdmFyaWFudC0+YnJva2VuX2Jsb2NrZW5kKSkgeworCWlmIChzdGF0dXMgJiBNQ0lfREFUQUVORCB8fCBkYXRhLT5lcnJvcikgewogCQltbWNpX3N0b3BfZGF0YShob3N0KTsKIAotCQkvKiBSZXNldCB0aGVzZSBmbGFncyAqLwotCQlob3N0LT5ibG9ja2VuZCA9IGZhbHNlOwotCQlob3N0LT5kYXRhZW5kID0gZmFsc2U7Ci0KLQkJLyoKLQkJICogVmFyaWFudHMgd2l0aCBicm9rZW4gYmxvY2tlbmQgZmxhZ3MgbmVlZCB0byBoYW5kbGUgdGhlCi0JCSAqIGVuZCBvZiB0aGUgZW50aXJlIHRyYW5zZmVyIGhlcmUuCi0JCSAqLwotCQlpZiAodmFyaWFudC0+YnJva2VuX2Jsb2NrZW5kICYmICFkYXRhLT5lcnJvcikKKwkJaWYgKCFkYXRhLT5lcnJvcikKKwkJCS8qIFRoZSBlcnJvciBjbGF1c2UgaXMgaGFuZGxlZCBhYm92ZSwgc3VjY2VzcyEgKi8KIAkJCWhvc3QtPmRhdGFfeGZlcmVkICs9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzOwogCiAJCWlmICghZGF0YS0+c3RvcCkgewpAQCAtMzk0LDE1ICszNDMsMTUgQEAKIAogCWhvc3QtPmNtZCA9IE5VTEw7CiAKLQljbWQtPnJlc3BbMF0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMCk7Ci0JY21kLT5yZXNwWzFdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTEpOwotCWNtZC0+cmVzcFsyXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UyKTsKLQljbWQtPnJlc3BbM10gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMyk7Ci0KIAlpZiAoc3RhdHVzICYgTUNJX0NNRFRJTUVPVVQpIHsKIAkJY21kLT5lcnJvciA9IC1FVElNRURPVVQ7CiAJfSBlbHNlIGlmIChzdGF0dXMgJiBNQ0lfQ01EQ1JDRkFJTCAmJiBjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpIHsKIAkJY21kLT5lcnJvciA9IC1FSUxTRVE7CisJfSBlbHNlIHsKKwkJY21kLT5yZXNwWzBdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTApOworCQljbWQtPnJlc3BbMV0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMSk7CisJCWNtZC0+cmVzcFsyXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UyKTsKKwkJY21kLT5yZXNwWzNdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTMpOwogCX0KIAogCWlmICghY21kLT5kYXRhIHx8IGNtZC0+ZXJyb3IpIHsKQEAgLTc3MCw3ICs3MTksNiBAQAogCXN0cnVjdCB2YXJpYW50X2RhdGEgKnZhcmlhbnQgPSBpZC0+ZGF0YTsKIAlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0OwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwotCXVuc2lnbmVkIGludCBtYXNrOwogCWludCByZXQ7CiAKIAkvKiBtdXN0IGhhdmUgcGxhdGZvcm0gZGF0YSAqLwpAQCAtOTUxLDEyICs4OTksNyBAQAogCQkJZ290byBpcnEwX2ZyZWU7CiAJfQogCi0JbWFzayA9IE1DSV9JUlFFTkFCTEU7Ci0JLyogRG9uJ3QgdXNlIHRoZSBkYXRhYmxvY2tlbmQgZmxhZyBpZiBpdCdzIGJyb2tlbiAqLwotCWlmICh2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQpCi0JCW1hc2sgJj0gfk1DSV9EQVRBQkxPQ0tFTkQ7Ci0KLQl3cml0ZWwobWFzaywgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisJd3JpdGVsKE1DSV9JUlFFTkFCTEUsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOwogCiAJYW1iYV9zZXRfZHJ2ZGF0YShkZXYsIG1tYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKaW5kZXggZGYwNmYwMS4uYzFkZjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKQEAgLTEzNyw3ICsxMzcsNyBAQAogI2RlZmluZSBNQ0lfSVJRRU5BQkxFCVwKIAkoTUNJX0NNRENSQ0ZBSUxNQVNLfE1DSV9EQVRBQ1JDRkFJTE1BU0t8TUNJX0NNRFRJTUVPVVRNQVNLfAlcCiAJTUNJX0RBVEFUSU1FT1VUTUFTS3xNQ0lfVFhVTkRFUlJVTk1BU0t8TUNJX1JYT1ZFUlJVTk1BU0t8CVwKLQlNQ0lfQ01EUkVTUEVORE1BU0t8TUNJX0NNRFNFTlRNQVNLfE1DSV9EQVRBQkxPQ0tFTkRNQVNLKQorCU1DSV9DTURSRVNQRU5ETUFTS3xNQ0lfQ01EU0VOVE1BU0spCiAKIC8qIFRoZXNlIGludGVycnVwdHMgYXJlIGRpcmVjdGVkIHRvIElSUTEgd2hlbiB0d28gSVJRIGxpbmVzIGFyZSBhdmFpbGFibGUgKi8KICNkZWZpbmUgTUNJX0lSUTFNQVNLIFwKQEAgLTE3Nyw5ICsxNzcsNiBAQAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCXVuc2lnbmVkIGludAkJb2xkc3RhdDsKIAotCWJvb2wJCQlibG9ja2VuZDsKLQlib29sCQkJZGF0YWVuZDsKLQogCS8qIHBpbyBzdHVmZiAqLwogCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIJc2dfbWl0ZXI7CiAJdW5zaWduZWQgaW50CQlzaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCmluZGV4IDVkZWNmZDAuLjE1M2FiOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKQEAgLTM4MywxNCArMzgzLDMwIEBACiAJaG9zdC0+Y3Vyci51c2VyX3BhZ2VzID0gMDsKIAogCWJveCA9ICZuYy0+Y21kWzBdOwotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWEubnVtX2VudHM7IGkrKykgeworCisJLyogbG9jYXRpb24gb2YgY29tbWFuZCBibG9jayBtdXN0IGJlIDY0IGJpdCBhbGlnbmVkICovCisJQlVHX09OKGhvc3QtPmRtYS5jbWRfYnVzYWRkciAmIDB4MDcpOworCisJbmMtPmNtZHB0ciA9IChob3N0LT5kbWEuY21kX2J1c2FkZHIgPj4gMykgfCBDTURfUFRSX0xQOworCWhvc3QtPmRtYS5oZHIuY21kcHRyID0gRE1PVl9DTURfUFRSX0xJU1QgfAorCQkJICAgICAgIERNT1ZfQ01EX0FERFIoaG9zdC0+ZG1hLmNtZHB0cl9idXNhZGRyKTsKKwlob3N0LT5kbWEuaGRyLmNvbXBsZXRlX2Z1bmMgPSBtc21zZGNjX2RtYV9jb21wbGV0ZV9mdW5jOworCisJbiA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5kbWEuc2csCisJCQlob3N0LT5kbWEubnVtX2VudHMsIGhvc3QtPmRtYS5kaXIpOworCWlmIChuID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIG1hcCBpbiBhbGwgc2cgZWxlbWVudHNcbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCWhvc3QtPmRtYS5zZyA9IE5VTEw7CisJCWhvc3QtPmRtYS5udW1fZW50cyA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvcl9lYWNoX3NnKGhvc3QtPmRtYS5zZywgc2csIG4sIGkpIHsKKwogCQlib3gtPmNtZCA9IENNRF9NT0RFX0JPWDsKIAotCS8qIEluaXRpYWxpemUgc2cgZG1hIGFkZHJlc3MgKi8KLQlzZy0+ZG1hX2FkZHJlc3MgPSBwYWdlX3RvX2RtYShtbWNfZGV2KGhvc3QtPm1tYyksIHNnX3BhZ2Uoc2cpKQotCQkJCSsgc2ctPm9mZnNldDsKLQotCWlmIChpID09IChob3N0LT5kbWEubnVtX2VudHMgLSAxKSkKKwkJaWYgKGkgPT0gbiAtIDEpCiAJCQlib3gtPmNtZCB8PSBDTURfTEM7CiAJCXJvd3MgPSAoc2dfZG1hX2xlbihzZykgJSBNQ0lfRklGT1NJWkUpID8KIAkJCShzZ19kbWFfbGVuKHNnKSAvIE1DSV9GSUZPU0laRSkgKyAxIDoKQEAgLTQxOCwyNyArNDM0LDYgQEAKIAkJCWJveC0+Y21kIHw9IENNRF9EU1RfQ1JDSShjcmNpKTsKIAkJfQogCQlib3grKzsKLQkJc2crKzsKLQl9Ci0KLQkvKiBsb2NhdGlvbiBvZiBjb21tYW5kIGJsb2NrIG11c3QgYmUgNjQgYml0IGFsaWduZWQgKi8KLQlCVUdfT04oaG9zdC0+ZG1hLmNtZF9idXNhZGRyICYgMHgwNyk7Ci0KLQluYy0+Y21kcHRyID0gKGhvc3QtPmRtYS5jbWRfYnVzYWRkciA+PiAzKSB8IENNRF9QVFJfTFA7Ci0JaG9zdC0+ZG1hLmhkci5jbWRwdHIgPSBETU9WX0NNRF9QVFJfTElTVCB8Ci0JCQkgICAgICAgRE1PVl9DTURfQUREUihob3N0LT5kbWEuY21kcHRyX2J1c2FkZHIpOwotCWhvc3QtPmRtYS5oZHIuY29tcGxldGVfZnVuYyA9IG1zbXNkY2NfZG1hX2NvbXBsZXRlX2Z1bmM7Ci0KLQluID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmRtYS5zZywKLQkJCWhvc3QtPmRtYS5udW1fZW50cywgaG9zdC0+ZG1hLmRpcik7Ci0vKiBkc2IgaW5zaWRlIGRtYV9tYXBfc2cgd2lsbCB3cml0ZSBuYyBvdXQgdG8gbWVtIGFzIHdlbGwgKi8KLQotCWlmIChuICE9IGhvc3QtPmRtYS5udW1fZW50cykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbWFwIGluIGFsbCBzZyBlbGVtZW50c1xuIiwKLQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKLQkJaG9zdC0+ZG1hLnNnID0gTlVMTDsKLQkJaG9zdC0+ZG1hLm51bV9lbnRzID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzMxLDkgKzEzMjYsNiBAQAogCWlmIChob3N0LT50aW1lci5mdW5jdGlvbikKIAkJcHJfaW5mbygiJXM6IFBvbGxpbmcgc3RhdHVzIG1vZGUgZW5hYmxlZFxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOwogCi0jaWYgQlVTQ0xLX1BXUlNBVkUKLQltc21zZGNjX2Rpc2FibGVfY2xvY2tzKGhvc3QsIDEpOwotI2VuZGlmCiAJcmV0dXJuIDA7CiAgY21kX2lycV9mcmVlOgogCWZyZWVfaXJxKGNtZF9pcnFyZXMtPnN0YXJ0LCBob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCmluZGV4IDE3MjAzNTguLjUzMDlhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwpAQCAtMjc3LDEwICsyNzcsNDMgQEAKIAlob3N0LT5jbG9jayA9IGNsb2NrOwogfQogCisvKioKKyAqIHNkaGNpX3MzY19wbGF0Zm9ybV84Yml0X3dpZHRoIC0gc3VwcG9ydCA4Yml0IGJ1c3dpZHRoCisgKiBAaG9zdDogVGhlIFNESENJIGhvc3QgYmVpbmcgcXVlcmllZAorICogQHdpZHRoOiBNTUNfQlVTX1dJRFRIXyBtYWNybyBmb3IgdGhlIGJ1cyB3aWR0aCBiZWluZyByZXF1ZXN0ZWQKKyAqCisgKiBXZSBoYXZlIDgtYml0IHdpZHRoIHN1cHBvcnQgYnV0IGlzIG5vdCBhIHYzIGNvbnRyb2xsZXIuCisgKiBTbyB3ZSBhZGQgcGxhdGZvcm1fOGJpdF93aWR0aCgpIGFuZCBzdXBwb3J0IDhiaXQgd2lkdGguCisgKi8KK3N0YXRpYyBpbnQgc2RoY2lfczNjX3BsYXRmb3JtXzhiaXRfd2lkdGgoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCB3aWR0aCkKK3sKKwl1OCBjdHJsOworCisJY3RybCA9IHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7CisKKwlzd2l0Y2ggKHdpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzg6CisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF84QklUQlVTOworCQljdHJsICY9IH5TREhDSV9DVFJMXzRCSVRCVVM7CisJCWJyZWFrOworCWNhc2UgTU1DX0JVU19XSURUSF80OgorCQljdHJsIHw9IFNESENJX0NUUkxfNEJJVEJVUzsKKwkJY3RybCAmPSB+U0RIQ0lfQ1RSTF84QklUQlVTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNkaGNpX29wcyBzZGhjaV9zM2Nfb3BzID0gewogCS5nZXRfbWF4X2Nsb2NrCQk9IHNkaGNpX3MzY19nZXRfbWF4X2NsaywKIAkuc2V0X2Nsb2NrCQk9IHNkaGNpX3MzY19zZXRfY2xvY2ssCiAJLmdldF9taW5fY2xvY2sJCT0gc2RoY2lfczNjX2dldF9taW5fY2xvY2ssCisJLnBsYXRmb3JtXzhiaXRfd2lkdGgJPSBzZGhjaV9zM2NfcGxhdGZvcm1fOGJpdF93aWR0aCwKIH07CiAKIHN0YXRpYyB2b2lkIHNkaGNpX3MzY19ub3RpZnlfY2hhbmdlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHN0YXRlKQpAQCAtNDczLDYgKzUwNiw5IEBACiAJaWYgKHBkYXRhLT5jZF90eXBlID09IFMzQ19TREhDSV9DRF9QRVJNQU5FTlQpCiAJCWhvc3QtPm1tYy0+Y2FwcyA9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOwogCisJaWYgKHBkYXRhLT5ob3N0X2NhcHMpCisJCWhvc3QtPm1tYy0+Y2FwcyB8PSBwZGF0YS0+aG9zdF9jYXBzOworCiAJaG9zdC0+cXVpcmtzIHw9IChTREhDSV9RVUlSS18zMkJJVF9ETUFfQUREUiB8CiAJCQkgU0RIQ0lfUVVJUktfMzJCSVRfRE1BX1NJWkUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdXNoYy5jCmluZGV4IGY4ZjY1ZGYuLmYwOGY5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdXNoYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdXNoYy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggZjQ5ZTQ5ZC4uNWViZTI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTY3MiwzMyArNjcyLDcgQEAKIAkJdWJpLT5ub3JfZmxhc2ggPSAxOwogCX0KIAotCS8qCi0JICogU2V0IFVCSSBtaW4uIEkvTyBzaXplIChAdWJpLT5taW5faW9fc2l6ZSkuIFdlIHVzZSBAbXRkLT53cml0ZWJ1ZnNpemUKLQkgKiBmb3IgdGhlc2UgcHVycG9zZXMsIG5vdCBAbXRkLT53cml0ZXNpemUuIEF0IHRoZSBtb21lbnQgdGhpcyBkb2VzIG5vdAotCSAqIG1hdHRlciBmb3IgTkFORCwgYmVjYXVzZSBjdXJyZW50bHkgQG10ZC0+d3JpdGVidWZzaXplIGlzIGVxdWl2YWxlbnQgdG8KLQkgKiBAbXRkLT53cml0ZXNpemUgZm9yIGFsbCBOQU5Ecy4gSG93ZXZlciwgc29tZSBDRkkgTk9SIGZsYXNoZXMgbWF5Ci0JICogaGF2ZSBAbXRkLT53cml0ZWJ1ZnNpemUgd2hpY2ggaXMgbXVsdGlwbGUgb2YgQG10ZC0+d3JpdGVzaXplLgotCSAqCi0JICogVGhlIHJlYXNvbiB3ZSB1c2UgQG10ZC0+d3JpdGVidWZzaXplIGZvciBAdWJpLT5taW5faW9fc2l6ZSBpcyB0aGF0Ci0JICogVUJJIGFuZCBVQklGUyByZWNvdmVyeSBhbGdvcml0aG1zIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBpZiB0aGVyZSB3YXMKLQkgKiBhbiB1bmNsZWFuIHBvd2VyIGN1dCwgdGhlbiB3ZSBjYW4gZmluZCBvZmZzZXQgb2YgdGhlIGxhc3QgY29ycnVwdGVkCi0JICogbm9kZSwgYWxpZ24gdGhlIG9mZnNldCB0byBAdWJpLT5taW5faW9fc2l6ZSwgcmVhZCB0aGUgcmVzdCBvZiB0aGUKLQkgKiBlcmFzZWJsb2NrIHN0YXJ0aW5nIGZyb20gdGhpcyBvZmZzZXQsIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZQotCSAqIG9ubHkgMHhGRiBieXRlcy4gSWYgeWVzLCB0aGVuIHdlIGFyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYQotCSAqIGNvcnJ1cHRpb24gY2F1c2VkIGJ5IGEgcG93ZXIgY3V0LCBpZiBub3QsIHRoZW4gdGhpcyBpcyBwcm9iYWJseSBzb21lCi0JICogc2V2ZXJlIGNvcnJ1cHRpb24uCi0JICoKLQkgKiBUaHVzLCB3ZSBoYXZlIHRvIHVzZSB0aGUgbWF4aW11bSB3cml0ZSB1bml0IHNpemUgb2YgdGhlIGZsYXNoLCB3aGljaAotCSAqIGlzIEBtdGQtPndyaXRlYnVmc2l6ZSwgYmVjYXVzZSBAbXRkLT53cml0ZXNpemUgaXMgdGhlIG1pbmltdW0gd3JpdGUKLQkgKiBzaXplLCBub3QgdGhlIG1heGltdW0uCi0JICovCi0JaWYgKHViaS0+bXRkLT50eXBlID09IE1URF9OQU5ERkxBU0gpCi0JCXViaV9hc3NlcnQodWJpLT5tdGQtPndyaXRlYnVmc2l6ZSA9PSB1YmktPm10ZC0+d3JpdGVzaXplKTsKLQllbHNlIGlmICh1YmktPm10ZC0+dHlwZSA9PSBNVERfTk9SRkxBU0gpCi0JCXViaV9hc3NlcnQodWJpLT5tdGQtPndyaXRlYnVmc2l6ZSAlIHViaS0+bXRkLT53cml0ZXNpemUgPT0gMCk7Ci0KLQl1YmktPm1pbl9pb19zaXplID0gdWJpLT5tdGQtPndyaXRlYnVmc2l6ZTsKLQorCXViaS0+bWluX2lvX3NpemUgPSB1YmktPm10ZC0+d3JpdGVzaXplOwogCXViaS0+aGRyc19taW5faW9fc2l6ZSA9IHViaS0+bXRkLT53cml0ZXNpemUgPj4gdWJpLT5tdGQtPnN1YnBhZ2Vfc2Z0OwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwppbmRleCA2MmQ2Zjg4Li5hYTA3NjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCkBAIC0xNjQ0LDcgKzE2NDQsNyBAQAogbW9kdWxlX2luaXQoa3M4Njk1X2luaXQpOwogbW9kdWxlX2V4aXQoa3M4Njk1X2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJTaW10ZWMgRWxlY3Ryb25pY3MiKQorTU9EVUxFX0FVVEhPUigiU2ltdGVjIEVsZWN0cm9uaWNzIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JlbCBLUzg2OTUgKENlbnRhdXIpIEV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIE1PRFVMRU5BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCmluZGV4IGE2OTliYmYuLjM4MjQzODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IyKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wxRCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMURfMl8wKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDBjNzgxMWYuLmExNzljYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTE3ODYsNiArMTc4NiwxMCBAQAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCiAJd3JiID0gd3JiX2Zyb21fbWNjcShhZGFwdGVyKTsKKwlpZiAoIXdyYikgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZXJyOworCX0KIAlyZXEgPSBub25lbWJfY21kLT52YTsKIAlzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKIApAQCAtMTgwMSw2ICsxODA1LDcgQEAKIAogCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChhZGFwdGVyKTsKIAorZXJyOgogCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCBkZTQwZDNiLi4yOGEzMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0zMTIsMTEgKzMxMiw5IEBACiAJaWYgKGFkYXB0ZXItPmxpbmtfdXAgIT0gbGlua191cCkgewogCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gLTE7CiAJCWlmIChsaW5rX3VwKSB7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgdXBcbiIsIG5ldGRldi0+bmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgZG93blxuIiwgbmV0ZGV2LT5uYW1lKTsKIAkJfQpAQCAtMjYyOCw4ICsyNjI2LDYgQEAKIAogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnR4X2VxLm5hcGksIGJlX3BvbGxfdHhfbWNjLAogCQlCRV9OQVBJX1dFSUdIVCk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3VubWFwX3BjaV9iYXJzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IGRmOTllZGYuLjBiYTU5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTc1NTMsNiArNzU1MywxMCBAQAogCSAgICAhKGRhdGEgJiBFVEhfRkxBR19SWFZMQU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIFRTTyB3aXRoIFZMQU4gdGFnIHdvbid0IHdvcmsgd2l0aCBjdXJyZW50IGZpcm13YXJlICovCisJaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1RYVkxBTikpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCB8IEVUSF9GTEFHX1JYVkxBTiB8CiAJCQkJICBFVEhfRkxBR19UWFZMQU4pOwogCWlmIChyYykKQEAgLTc5NjIsMTEgKzc5NjYsOCBAQAogCiAJCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLwogCQllcnIgPSBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nICIKLQkJCQkJICAgICJmYWlsZWQgMHgleFxuIiwgZXJyKTsKLQkJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KLQkJfQorCQlpZiAoIWVycikKKwkJCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CiAKIAl9IGVsc2UgewogCQlicC0+cGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUENJWCk7CkBAIC04MjI5LDggKzgyMzAsMTAgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dF91bm1hcDoKLQlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1BDSUUpCisJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19BRVJfRU5BQkxFRCkgewogCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5CTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CisJfQogCiAJaWYgKGJwLT5yZWd2aWV3KSB7CiAJCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOwpAQCAtODQxOCw4ICs4NDIxLDEwIEBACiAKIAlrZnJlZShicC0+dGVtcF9zdGF0c19ibGspOwogCi0JaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lFKQorCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQpIHsKIAkJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJCWJwLT5mbGFncyAmPSB+Qk5YMl9GTEFHX0FFUl9FTkFCTEVEOworCX0KIAogCWZyZWVfbmV0ZGV2KGRldik7CiAKQEAgLTg1MzUsNyArODU0MCw3IEBACiAJfQogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZiAoIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJRSkpCisJaWYgKCEoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0FFUl9FTkFCTEVEKSkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCWVyciA9IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5oIGIvZHJpdmVycy9uZXQvYm54Mi5oCmluZGV4IDU0ODhhMmUuLmY0NTlmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTY3NDEsNiArNjc0MSw3IEBACiAjZGVmaW5lIEJOWDJfRkxBR19KVU1CT19CUk9LRU4JCTB4MDAwMDA4MDAKICNkZWZpbmUgQk5YMl9GTEFHX0NBTl9LRUVQX1ZMQU4JCTB4MDAwMDEwMDAKICNkZWZpbmUgQk5YMl9GTEFHX0JST0tFTl9TVEFUUwkJMHgwMDAwMjAwMAorI2RlZmluZSBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQJCTB4MDAwMDQwMDAKIAogCXN0cnVjdCBibngyX25hcGkJYm54Ml9uYXBpW0JOWDJfTUFYX01TSVhfVkVDXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKaW5kZXggOGU0MTgzNy4uNjUzYzYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCkBAIC0yMiw4ICsyMiw4IEBACiAgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykgKi8KIC8qICNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiAqLwogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjYyLjAwLTQiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDExLzAxLzE4IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4wMC01IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMS8wMS8zMCIKICNkZWZpbmUgQk5YMlhfQkNfVkVSICAgICAgICAgICAgMHgwNDAyMDAKIAogI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCmluZGV4IDcxNjBlYzUuLmRkMTIxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKQEAgLTM5NDgsNDggKzM5NDgsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgYm54MnggKmJwLAotCQkJCQkgICAgICAgc3RydWN0IGJueDJ4X3BoeSAqcGh5KQotewotCXUxNiB2YWw7Ci0JYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCi0JCQlNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOwotCi0JaWYgKHZhbCA9PSAwKSB7Ci0JCS8qIE11c3RuJ3Qgc2V0IGxvdyBwb3dlciBtb2RlIGluIDgwNzMgQTAgKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIERpc2FibGUgUExMIHNlcXVlbmNlciAodXNlIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIGNsZWFyIGJpdCAxMykgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKLQkJCU1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgJnZhbCk7Ci0JdmFsICY9IH4oMTw8MTMpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKLQotCS8qIFBMTCBjb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVFLCAweDEwNzcpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVELCAweDAwMDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVDLCAweDAzMEIpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVCLCAweDEyNDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVBLCAweDI0OTApOwotCi0JLyogVHggQ29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBBNywgMHgwQzc0KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBBNiwgMHg5MDQxKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBBNSwgMHg0NjQwKTsKLQotCS8qIFJ4IENvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwRkUsIDB4MDFDNCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwRkQsIDB4OTI0OSk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwRkMsIDB4MjAxNSk7Ci0KLQkvKiBFbmFibGUgUExMIHNlcXVlbmNlciAgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBzZXQgYml0IDEzKSAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LCBNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOwotCXZhbCB8PSAoMTw8MTMpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCB2YWwpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoJCQlCQ004MDczIFBIWSBTRUNUSU9OCQkJICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxNDgsOCArNDEwNiw2IEBACiAKIAlibngyeF84MDczX3NldF9wYXVzZV9jbDM3KHBhcmFtcywgcGh5LCB2YXJzKTsKIAotCWJueDJ4XzgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUoYnAsIHBoeSk7Ci0KIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKIAkJCU1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywgJnRtcDEpOwogCkBAIC02NTE5LDYgKzY0NzUsMTggQEAKIAkJCQkJIE1ESU9fUE1BX0RFVkFELAogCQkJCQkgTURJT19QTUFfUkVHXzg0ODFfTEVEMV9NQVNLLAogCQkJCQkgMHg4MCk7CisKKwkJCS8qIFRlbGwgTEVEMyB0byBibGluayBvbiBzb3VyY2UgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAorCQkJCQlNRElPX1BNQV9ERVZBRCwKKwkJCQkJTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCQkJCSZ2YWwpOworCQkJdmFsICY9IH4oNzw8Nik7CisJCQl2YWwgfD0gKDE8PDYpOyAvKiBBODNCWzg6Nl09IDEgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKKwkJCQkJIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCQkJCSB2YWwpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTc3MjAsMTAgKzc2ODgsMTMgQEAKIAlzdHJ1Y3QgYm54MnhfcGh5IHBoeVtQT1JUX01BWF07CiAJc3RydWN0IGJueDJ4X3BoeSAqcGh5X2Jsa1tQT1JUX01BWF07CiAJdTE2IHZhbDsKLQlzOCBwb3J0OworCXM4IHBvcnQgPSAwOwogCXM4IHBvcnRfb2ZfcGF0aCA9IDA7Ci0KLQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAwKTsKKwl1MzIgc3dhcF92YWwsIHN3YXBfb3ZlcnJpZGU7CisJc3dhcF92YWwgPSBSRUdfUkQoYnAsICBOSUdfUkVHX1BPUlRfU1dBUCk7CisJc3dhcF9vdmVycmlkZSA9IFJFR19SRChicCwgIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOworCXBvcnQgXj0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpOworCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBvcnQpOwogCS8qIFBBUlQxIC0gUmVzZXQgYm90aCBwaHlzICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7CiAJCXUzMiBzaG1lbV9iYXNlLCBzaG1lbTJfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwppbmRleCA4Y2RjZjViLi5kNTg0ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCkBAIC0yMzAxLDE1ICsyMzAxLDEwIEBACiAJCS8qIGFjY2VwdCBtYXRjaGVkIHVjYXN0ICovCiAJCWRyb3BfYWxsX3VjYXN0ID0gMDsKIAl9Ci0JaWYgKGZpbHRlcnMgJiBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKSB7CisJaWYgKGZpbHRlcnMgJiBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKQogCQkvKiBhY2NlcHQgbWF0Y2hlZCBtY2FzdCAqLwogCQlkcm9wX2FsbF9tY2FzdCA9IDA7Ci0JCWlmIChJU19NRl9TSShicCkpCi0JCQkvKiBzaW5jZSBtY2FzdCBhZGRyZXNzZXMgd29uJ3QgYXJyaXZlIHdpdGggb3ZsYW4sCi0JCQkgKiBmdyBuZWVkcyB0byBhY2NlcHQgYWxsIG9mIHRoZW0gaW4KLQkJCSAqIHN3aXRjaC1pbmRlcGVuZGVudCBtb2RlICovCi0JCQlhY2NwX2FsbF9tY2FzdCA9IDE7Ci0JfQorCiAJaWYgKGZpbHRlcnMgJiBCTlgyWF9BQ0NFUFRfQUxMX1VOSUNBU1QpIHsKIAkJLyogYWNjZXB0IGFsbCBtY2FzdCAqLwogCQlkcm9wX2FsbF91Y2FzdCA9IDA7CkBAIC00MjgxLDkgKzQyNzYsMTIgQEAKIAkJZGVmX3FfZmlsdGVycyB8PSBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8IEJOWDJYX0FDQ0VQVF9CUk9BRENBU1QgfAogCQkJCUJOWDJYX0FDQ0VQVF9NVUxUSUNBU1Q7CiAjaWZkZWYgQkNNX0NOSUMKLQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7Ci0JCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8Ci0JCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCWlmICghTk9fRkNPRShicCkpIHsKKwkJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsCisJCQkJCQkgIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKKwkJCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCX0KICNlbmRpZgogCQlicmVhazsKIApAQCAtNDI5MSwxOCArNDI4OSwyOSBAQAogCQlkZWZfcV9maWx0ZXJzIHw9IEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwgQk5YMlhfQUNDRVBUX0JST0FEQ0FTVCB8CiAJCQkJQk5YMlhfQUNDRVBUX0FMTF9NVUxUSUNBU1Q7CiAjaWZkZWYgQkNNX0NOSUMKLQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7Ci0JCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8Ci0JCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCS8qCisJCSAqICBQcmV2ZW50IGR1cGxpY2F0aW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzIGJ5IGNvbmZpZ3VyaW5nIEZDb0UKKwkJICogIEwyIENsaWVudCB0byByZWNlaXZlIG9ubHkgbWF0Y2hlZCB1bmljYXN0IGZyYW1lcy4KKwkJICovCisJCWlmICghTk9fRkNPRShicCkpIHsKKwkJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsCisJCQkJCQkgIEJOWDJYX0FDQ0VQVF9VTklDQVNUKTsKKwkJfQogI2VuZGlmCiAJCWJyZWFrOwogCiAJY2FzZSBCTlgyWF9SWF9NT0RFX1BST01JU0M6CiAJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfUFJPTUlTQ1VPVVNfTU9ERTsKICNpZmRlZiBCQ01fQ05JQwotCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKLQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKLQkJCQkJICBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJLyoKKwkJICogIFByZXZlbnQgcGFja2V0cyBkdXBsaWNhdGlvbiBieSBjb25maWd1cmluZyBEUk9QX0FMTCBmb3IgRkNvRQorCQkgKiAgTDIgQ2xpZW50LgorCQkgKi8KKwkJaWYgKCFOT19GQ09FKGJwKSkgeworCQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7CisJCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX05PTkUpOworCQl9CiAjZW5kaWYKIAkJLyogcGFzcyBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBhcyB3ZWxsICovCiAJCWxsaF9tYXNrIHw9IE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19VTkNTVDsKQEAgLTUyOTYsMTAgKzUzMDUsNiBAQAogCQl9CiAJfQogCi0JYnAtPnBvcnQubmVlZF9od19sb2NrID0gYm54MnhfaHdfbG9ja19yZXF1aXJlZChicCwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtX2Jhc2UsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7Ci0KIAlibngyeF9zZXR1cF9mYW5fZmFpbHVyZV9kZXRlY3Rpb24oYnApOwogCiAJLyogY2xlYXIgUFhQMiBhdHRlbnRpb25zICovCkBAIC01NTAzLDkgKzU1MDgsNiBAQAogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgTUNQX0JMT0NLLCBpbml0X3N0YWdlKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBETUFFX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSBibngyeF9od19sb2NrX3JlcXVpcmVkKGJwLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW1fYmFzZSwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKIAlpZiAoYm54MnhfZmFuX2ZhaWx1cmVfZGV0X3JlcShicCwgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAogCQkJCSAgICAgIGJwLT5jb21tb24uc2htZW0yX2Jhc2UsIHBvcnQpKSB7CiAJCXUzMiByZWdfYWRkciA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKQEAgLTgzNzksNiArODM4MSwxNyBAQAogCQkgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikpCiAJCWJwLT5tZGlvLnBydGFkID0KIAkJCVhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKTsKKworCS8qCisJICogQ2hlY2sgaWYgaHcgbG9jayBpcyByZXF1aXJlZCB0byBhY2Nlc3MgTURDL01ESU8gYnVzIHRvIHRoZSBQSFkocykKKwkgKiBJbiBNRiBtb2RlLCBpdCBpcyBzZXQgdG8gY292ZXIgc2VsZiB0ZXN0IGNhc2VzCisJICovCisJaWYgKElTX01GKGJwKSkKKwkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKKwllbHNlCisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IGJueDJ4X2h3X2xvY2tfcmVxdWlyZWQoYnAsCisJCQkJCQkJYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAorCQkJCQkJCWJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X21hY19od2luZm8oc3RydWN0IGJueDJ4ICpicCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCAxNzE3ODJlLi4xMDI0YWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC0yNDcwLDYgKzI0NzAsMTAgQEAKIAlpZiAoIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCiAJCWdvdG8gb3V0OwogCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsYWNwZHUpKSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCBmNGU2MzhjLi41YzZmYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0zMjYsNiArMzI2LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGJvbmRfZGV2KSkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBiMTAyNWI4Li4xNjNlMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTI3MzMsNiArMjczMywxMCBAQAogCWlmICghc2xhdmUgfHwgIXNsYXZlX2RvX2FycF92YWxpZGF0ZShib25kLCBzbGF2ZSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihkZXYpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IGQ1YTlkYjYuLjVkZWM0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC0yMyw3ICsyMyw3IEBACiAKIAkgIEFzIG9ubHkgdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBvZiBDQU4gZnJhbWVzIGlzIGltcGxlbWVudGVkLCB0aGlzCiAJICBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGUgKHNlcmlhbC9VU0IpIENBTiBoYXJkd2FyZSBmcm9tOgotCSAgd3d3LmNhbnVzYi5jb20gLyB3d3cuY2FuMjMyLmNvbSAvIHd3dy5taWN0cm9uaWMuY29tIC8gd3d3LmNhbmhhY2suZGUKKwkgIHd3dy5jYW51c2IuY29tIC8gd3d3LmNhbjIzMi5jb20gLyB3d3cubWljdHJvbmljcy5kZSAvIHd3dy5jYW5oYWNrLmRlCiAKIAkgIFVzZXJzcGFjZSB0b29scyB0byBhdHRhY2ggdGhlIFNMQ0FOIGxpbmUgZGlzY2lwbGluZSAoc2xjYW5fYXR0YWNoLAogCSAgc2xjYW5kKSBjYW4gYmUgZm91bmQgaW4gdGhlIGNhbi11dGlscyBhdCB0aGUgU29ja2V0Q0FOIFNWTiwgc2VlCkBAIC0xMTcsNiArMTE3LDggQEAKIAogc291cmNlICJkcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZyIKKwogY29uZmlnIENBTl9ERUJVR19ERVZJQ0VTCiAJYm9vbCAiQ0FOIGRldmljZXMgZGVidWdnaW5nIG1lc3NhZ2VzIgogCWRlcGVuZHMgb24gQ0FOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKaW5kZXggMDdjYTE1OS4uNTNjODJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIGNhbi1kZXYteQkJCTo9IGRldi5vCiAKIG9iai15CQkJCSs9IHVzYi8KK29iai15CQkJCSs9IHNvZnRpbmcvCiAKIG9iai0kKENPTkZJR19DQU5fU0pBMTAwMCkJKz0gc2phMTAwMC8KIG9iai0kKENPTkZJR19DQU5fTVNDQU4pCQkrPSBtc2Nhbi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKaW5kZXggN2VmODNkMC4uNTdkMmZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKiBhdDkxX2Nhbi5jIC0gQ0FOIG5ldHdvcmsgZHJpdmVyIGZvciBBVDkxIFNvQyBDQU4gY29udHJvbGxlcgogICoKICAqIChDKSAyMDA3IGJ5IEhhbnMgSi4gS29jaCA8aGprQGhhbnNqa29jaC5kZT4KLSAqIChDKSAyMDA4LCAyMDA5LCAyMDEwIGJ5IE1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKiAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBieSBNYXJjIEtsZWluZS1CdWRkZSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgogICoKICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIGRpc3RyaWJ1dGVkIGluIHRoZSAnQ09QWUlORycKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDAsMjIgKzQxLDIzIEBACiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKLSNkZWZpbmUgQVQ5MV9OQVBJX1dFSUdIVAkxMgorI2RlZmluZSBBVDkxX05BUElfV0VJR0hUCTExCiAKIC8qCiAgKiBSWC9UWCBNYWlsYm94IHNwbGl0CiAgKiBkb24ndCBkYXJlIHRvIHRvdWNoCiAgKi8KLSNkZWZpbmUgQVQ5MV9NQl9SWF9OVU0JCTEyCisjZGVmaW5lIEFUOTFfTUJfUlhfTlVNCQkxMQogI2RlZmluZSBBVDkxX01CX1RYX1NISUZUCTIKIAotI2RlZmluZSBBVDkxX01CX1JYX0ZJUlNUCTAKKyNkZWZpbmUgQVQ5MV9NQl9SWF9GSVJTVAkxCiAjZGVmaW5lIEFUOTFfTUJfUlhfTEFTVAkJKEFUOTFfTUJfUlhfRklSU1QgKyBBVDkxX01CX1JYX05VTSAtIDEpCiAKICNkZWZpbmUgQVQ5MV9NQl9SWF9NQVNLKGkpCSgoMSA8PCAoaSkpIC0gMSkKICNkZWZpbmUgQVQ5MV9NQl9SWF9TUExJVAk4CiAjZGVmaW5lIEFUOTFfTUJfUlhfTE9XX0xBU1QJKEFUOTFfTUJfUlhfU1BMSVQgLSAxKQotI2RlZmluZSBBVDkxX01CX1JYX0xPV19NQVNLCShBVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9TUExJVCkpCisjZGVmaW5lIEFUOTFfTUJfUlhfTE9XX01BU0sJKEFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX1NQTElUKSAmIFwKKwkJCQkgfkFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX0ZJUlNUKSkKIAogI2RlZmluZSBBVDkxX01CX1RYX05VTQkJKDEgPDwgQVQ5MV9NQl9UWF9TSElGVCkKICNkZWZpbmUgQVQ5MV9NQl9UWF9GSVJTVAkoQVQ5MV9NQl9SWF9MQVNUICsgMSkKQEAgLTE2OCw2ICsxNzAsOCBAQAogCiAJc3RydWN0IGNsawkJKmNsazsKIAlzdHJ1Y3QgYXQ5MV9jYW5fZGF0YQkqcGRhdGE7CisKKwljYW5pZF90CQkJbWIwX2lkOwogfTsKIAogc3RhdGljIHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGF0OTFfYml0dGltaW5nX2NvbnN0ID0gewpAQCAtMjIwLDYgKzIyNCwxOCBAQAogCXNldF9tYl9tb2RlX3ByaW8ocHJpdiwgbWIsIG1vZGUsIDApOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKGNhbmlkX3QgY2FuX2lkKQoreworCXUzMiByZWdfbWlkOworCisJaWYgKGNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJcmVnX21pZCA9IChjYW5faWQgJiBDQU5fRUZGX01BU0spIHwgQVQ5MV9NSURfTUlERTsKKwllbHNlCisJCXJlZ19taWQgPSAoY2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAxODsKKworCXJldHVybiByZWdfbWlkOworfQorCiAvKgogICogU3d0aWNoIHRyYW5zY2VpdmVyIG9uIG9yIG9mZgogICovCkBAIC0yMzMsMTIgKzI0OSwyMiBAQAogewogCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpOworCXUzMiByZWdfbWlkOwogCiAJLyoKLQkgKiBUaGUgZmlyc3QgMTIgbWFpbGJveGVzIGFyZSB1c2VkIGFzIGEgcmVjZXB0aW9uIEZJRk8uIFRoZQotCSAqIGxhc3QgbWFpbGJveCBpcyBjb25maWd1cmVkIHdpdGggb3ZlcndyaXRlIG9wdGlvbi4gVGhlCi0JICogb3ZlcndyaXRlIGZsYWcgaW5kaWNhdGVzIGEgRklGTyBvdmVyZmxvdy4KKwkgKiBEdWUgdG8gYSBjaGlwIGJ1ZyAoZXJyYXRhIDUwLjIuNi4zICYgNTAuMy41LjMpIHRoZSBmaXJzdAorCSAqIG1haWxib3ggaXMgZGlzYWJsZWQuIFRoZSBuZXh0IDExIG1haWxib3hlcyBhcmUgdXNlZCBhcyBhCisJICogcmVjZXB0aW9uIEZJRk8uIFRoZSBsYXN0IG1haWxib3ggaXMgY29uZmlndXJlZCB3aXRoCisJICogb3ZlcndyaXRlIG9wdGlvbi4gVGhlIG92ZXJ3cml0ZSBmbGFnIGluZGljYXRlcyBhIEZJRk8KKwkgKiBvdmVyZmxvdy4KIAkgKi8KKwlyZWdfbWlkID0gYXQ5MV9jYW5faWRfdG9fcmVnX21pZChwcml2LT5tYjBfaWQpOworCWZvciAoaSA9IDA7IGkgPCBBVDkxX01CX1JYX0ZJUlNUOyBpKyspIHsKKwkJc2V0X21iX21vZGUocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX0RJU0FCTEVEKTsKKwkJYXQ5MV93cml0ZShwcml2LCBBVDkxX01JRChpKSwgcmVnX21pZCk7CisJCWF0OTFfd3JpdGUocHJpdiwgQVQ5MV9NQ1IoaSksIDB4MCk7CS8qIGNsZWFyIGRsYyAqLworCX0KKwogCWZvciAoaSA9IEFUOTFfTUJfUlhfRklSU1Q7IGkgPCBBVDkxX01CX1JYX0xBU1Q7IGkrKykKIAkJc2V0X21iX21vZGUocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX1JYKTsKIAlzZXRfbWJfbW9kZShwcml2LCBBVDkxX01CX1JYX0xBU1QsIEFUOTFfTUJfTU9ERV9SWF9PVlJXUik7CkBAIC0yNTQsNyArMjgwLDggQEAKIAkJc2V0X21iX21vZGVfcHJpbyhwcml2LCBpLCBBVDkxX01CX01PREVfVFgsIDApOwogCiAJLyogUmVzZXQgdHggYW5kIHJ4IGhlbHBlciBwb2ludGVycyAqLwotCXByaXYtPnR4X25leHQgPSBwcml2LT50eF9lY2hvID0gcHJpdi0+cnhfbmV4dCA9IDA7CisJcHJpdi0+dHhfbmV4dCA9IHByaXYtPnR4X2VjaG8gPSAwOworCXByaXYtPnJ4X25leHQgPSBBVDkxX01CX1JYX0ZJUlNUOwogfQogCiBzdGF0aWMgaW50IGF0OTFfc2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzcyLDEyICszOTksNyBAQAogCQluZXRkZXZfZXJyKGRldiwgIkJVRyEgVFggYnVmZmVyIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCi0JaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpCi0JCXJlZ19taWQgPSAoY2YtPmNhbl9pZCAmIENBTl9FRkZfTUFTSykgfCBBVDkxX01JRF9NSURFOwotCWVsc2UKLQkJcmVnX21pZCA9IChjZi0+Y2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAxODsKLQorCXJlZ19taWQgPSBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKGNmLT5jYW5faWQpOwogCXJlZ19tY3IgPSAoKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpID8gQVQ5MV9NQ1JfTVJUUiA6IDApIHwKIAkJKGNmLT5jYW5fZGxjIDw8IDE2KSB8IEFUOTFfTUNSX01UQ1I7CiAKQEAgLTUzOSwyNyArNTYxLDMxIEBACiAgKgogICogVGhlb3J5IG9mIE9wZXJhdGlvbjoKICAqCi0gKiAxMiBvZiB0aGUgMTYgbWFpbGJveGVzIG9uIHRoZSBjaGlwIGFyZSByZXNlcnZlZCBmb3IgUlguIHdlIHNwbGl0Ci0gKiB0aGVtIGludG8gMiBncm91cHMuIFRoZSBsb3dlciBncm91cCBob2xkcyA4IGFuZCB1cHBlciA0IG1haWxib3hlcy4KKyAqIDExIG9mIHRoZSAxNiBtYWlsYm94ZXMgb24gdGhlIGNoaXAgYXJlIHJlc2VydmVkIGZvciBSWC4gd2Ugc3BsaXQKKyAqIHRoZW0gaW50byAyIGdyb3Vwcy4gVGhlIGxvd2VyIGdyb3VwIGhvbGRzIDcgYW5kIHVwcGVyIDQgbWFpbGJveGVzLgogICoKICAqIExpa2UgaXQgb3Igbm90LCBidXQgdGhlIGNoaXAgYWx3YXlzIHNhdmVzIGEgcmVjZWl2ZWQgQ0FOIG1lc3NhZ2UKICAqIGludG8gdGhlIGZpcnN0IGZyZWUgbWFpbGJveCBpdCBmaW5kcyAoc3RhcnRpbmcgd2l0aCB0aGUKICAqIGxvd2VzdCkuIFRoaXMgbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHQgdG8gcmVhZCB0aGUgbWVzc2FnZXMgaW4gdGhlCiAgKiByaWdodCBvcmRlciBmcm9tIHRoZSBjaGlwLiBUaGlzIGlzIGhvdyB3ZSB3b3JrIGFyb3VuZCB0aGF0IHByb2JsZW06CiAgKgotICogVGhlIGZpcnN0IG1lc3NhZ2UgZ29lcyBpbnRvIG1iIG5yLiAwIGFuZCBpc3N1ZXMgYW4gaW50ZXJydXB0LiBBbGwKKyAqIFRoZSBmaXJzdCBtZXNzYWdlIGdvZXMgaW50byBtYiBuci4gMSBhbmQgaXNzdWVzIGFuIGludGVycnVwdC4gQWxsCiAgKiByeCBpbnRzIGFyZSBkaXNhYmxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYW5kIGEgbmFwaSBwb2xsIGlzCiAgKiBzY2hlZHVsZWQuIFdlIHJlYWQgdGhlIG1haWxib3gsIGJ1dCBkbyBfbm90XyByZWVuYWJsZSB0aGUgbWIgKHRvCiAgKiByZWNlaXZlIGFub3RoZXIgbWVzc2FnZSkuCiAgKgogICogICAgbG93ZXIgbWJ4cyAgICAgIHVwcGVyCi0gKiAgIF9fX19fX15fX19fX18gICAgX19eX18KLSAqICAvICAgICAgICAgICAgIFwgIC8gICAgIFwKKyAqICAgICBfX19fXl9fX19fXyAgICBfX15fXworICogICAgLyAgICAgICAgICAgXCAgLyAgICAgXAogICogKy0rLSstKy0rLSstKy0rLSsrLSstKy0rLSsKLSAqIHx4fHh8eHx4fHh8eHx4fHh8fCB8IHwgfCB8CisgKiB8IHx4fHh8eHx4fHh8eHx4fHwgfCB8IHwgfAogICogKy0rLSstKy0rLSstKy0rLSsrLSstKy0rLSsKICAqICAwIDAgMCAwIDAgMCAgMCAwIDAgMCAxIDEgIFwgbWFpbAogICogIDAgMSAyIDMgNCA1ICA2IDcgOCA5IDAgMSAgLyBib3gKKyAqICBeCisgKiAgfAorICogICBcCisgKiAgICAgdW51c2VkLCBkdWUgdG8gY2hpcCBidWcKICAqCiAgKiBUaGUgdmFyaWFibGUgcHJpdi0+cnhfbmV4dCBwb2ludHMgdG8gdGhlIG5leHQgbWFpbGJveCB0byByZWFkIGEKICAqIG1lc3NhZ2UgZnJvbS4gQXMgbG9uZyB3ZSdyZSBpbiB0aGUgbG93ZXIgbWFpbGJveGVzIHdlIGp1c3QgcmVhZCB0aGUKQEAgLTU5MCwxMCArNjE2LDEwIEBACiAJCQkib3JkZXIgb2YgaW5jb21pbmcgZnJhbWVzIGNhbm5vdCBiZSBndWFyYW50ZWVkXG4iKTsKIAogIGFnYWluOgotCWZvciAobWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTlVNLCBwcml2LT5yeF9uZXh0KTsKLQkgICAgIG1iIDwgQVQ5MV9NQl9SWF9OVU0gJiYgcXVvdGEgPiAwOworCWZvciAobWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTEFTVCArIDEsIHByaXYtPnJ4X25leHQpOworCSAgICAgbWIgPCBBVDkxX01CX1JYX0xBU1QgKyAxICYmIHF1b3RhID4gMDsKIAkgICAgIHJlZ19zciA9IGF0OTFfcmVhZChwcml2LCBBVDkxX1NSKSwKLQkgICAgIG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX05VTSwgKytwcml2LT5yeF9uZXh0KSkgeworCSAgICAgbWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTEFTVCArIDEsICsrcHJpdi0+cnhfbmV4dCkpIHsKIAkJYXQ5MV9yZWFkX21zZyhkZXYsIG1iKTsKIAogCQkvKiByZWFjdGl2YXRlIG1haWxib3hlcyAqLwpAQCAtNjEwLDggKzYzNiw4IEBACiAKIAkvKiB1cHBlciBncm91cCBjb21wbGV0ZWQsIGxvb2sgYWdhaW4gaW4gbG93ZXIgKi8KIAlpZiAocHJpdi0+cnhfbmV4dCA+IEFUOTFfTUJfUlhfTE9XX0xBU1QgJiYKLQkgICAgcXVvdGEgPiAwICYmIG1iID49IEFUOTFfTUJfUlhfTlVNKSB7Ci0JCXByaXYtPnJ4X25leHQgPSAwOworCSAgICBxdW90YSA+IDAgJiYgbWIgPiBBVDkxX01CX1JYX0xBU1QpIHsKKwkJcHJpdi0+cnhfbmV4dCA9IEFUOTFfTUJfUlhfRklSU1Q7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC0xMDM3LDYgKzEwNjMsNjQgQEAKIAkubmRvX3N0YXJ0X3htaXQJPSBhdDkxX3N0YXJ0X3htaXQsCiB9OwogCitzdGF0aWMgc3NpemVfdCBhdDkxX3N5c2ZzX3Nob3dfbWIwX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKworCWlmIChwcml2LT5tYjBfaWQgJiBDQU5fRUZGX0ZMQUcpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgcHJpdi0+bWIwX2lkKTsKKwllbHNlCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTAzeFxuIiwgcHJpdi0+bWIwX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgYXQ5MV9zeXNmc19zZXRfbWIwX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBsb25nIGNhbl9pZDsKKwlzc2l6ZV90IHJldDsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZjYW5faWQpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gZXJyOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2FuX2lkICYgQ0FOX0VGRl9GTEFHKQorCQljYW5faWQgJj0gQ0FOX0VGRl9NQVNLIHwgQ0FOX0VGRl9GTEFHOworCWVsc2UKKwkJY2FuX2lkICY9IENBTl9TRkZfTUFTSzsKKworCXByaXYtPm1iMF9pZCA9IGNhbl9pZDsKKwlyZXQgPSBjb3VudDsKKworIG91dDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtYjBfaWQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCWF0OTFfc3lzZnNfc2hvd19tYjBfaWQsIGF0OTFfc3lzZnNfc2V0X21iMF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdDkxX3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX21iMF9pZC5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhdDkxX3N5c2ZzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYXQ5MV9zeXNmc19hdHRycywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF0OTFfY2FuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwODIsNiArMTE2Niw3IEBACiAJZGV2LT5uZXRkZXZfb3BzCT0gJmF0OTFfbmV0ZGV2X29wczsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOworCWRldi0+c3lzZnNfZ3JvdXBzWzBdID0gJmF0OTFfc3lzZnNfYXR0cl9ncm91cDsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXYtPmNhbi5jbG9jay5mcmVxID0gY2xrX2dldF9yYXRlKGNsayk7CkBAIC0xMDkzLDYgKzExNzgsNyBAQAogCXByaXYtPmRldiA9IGRldjsKIAlwcml2LT5jbGsgPSBjbGs7CiAJcHJpdi0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlwcml2LT5tYjBfaWQgPSAweDdmZjsKIAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIGF0OTFfcG9sbCwgQVQ5MV9OQVBJX1dFSUdIVCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCmluZGV4IGI5YTZkN2EuLjM2NmY1Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZXJtaW5hdGlvbiwgU19JV1VHTyB8IFNfSVJVR08sIGljYW4zX3N5c2ZzX3Nob3dfdGVybSwKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXJtaW5hdGlvbiwgU19JV1VTUiB8IFNfSVJVR08sIGljYW4zX3N5c2ZzX3Nob3dfdGVybSwKIAkJCQkJCSAgIGljYW4zX3N5c2ZzX3NldF90ZXJtKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmljYW4zX3N5c2ZzX2F0dHJzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYwppbmRleCBjNDJlOTcyLi5lNTQ3MTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgcGNoX2Nhbl9iaXR0aW1pbmdfY29uc3QgPSB7CiAJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKLQkudHNlZzFfbWluID0gMSwKKwkudHNlZzFfbWluID0gMiwKIAkudHNlZzFfbWF4ID0gMTYsCiAJLnRzZWcyX21pbiA9IDEsCiAJLnRzZWcyX21heCA9IDgsCkBAIC05NTksMTMgKzk1OSwxMyBAQAogCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCXVucmVnaXN0ZXJfY2FuZGV2KHByaXYtPm5kZXYpOwotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOwogCWlmIChwcml2LT51c2VfbXNpKQogCQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+ZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcGNoX2Nhbl9yZXNldChwcml2KTsKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKIAlmcmVlX2NhbmRldihwcml2LT5uZGV2KTsKIH0KIApAQCAtMTIzOCw2ICsxMjM4LDcgQEAKIAkJcHJpdi0+dXNlX21zaSA9IDA7CiAJfSBlbHNlIHsKIAkJbmV0ZGV2X2VycihuZGV2LCAiUENIIENBTiBvcGVuZWQgd2l0aCBNU0lcbiIpOworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAkJcHJpdi0+dXNlX21zaSA9IDE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE4MWIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACitjb25maWcgQ0FOX1NPRlRJTkcKKwl0cmlzdGF0ZSAiU29mdGluZyBHbWJoIENBTiBnZW5lcmljIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDQU5fREVWICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIENBTiBjYXJkcyBmcm9tIFNvZnRpbmcgR21iaCAmIHNvbWUgY2FyZHMKKwkgIGZyb20gVmVjdG9yIEdtYmguCisJICBTb2Z0aW5nIEdtYmggQ0FOIGNhcmRzIGNvbWUgd2l0aCAxIG9yIDIgcGh5c2ljYWwgYnVzc2VzLgorCSAgVGhvc2UgY2FyZHMgdHlwaWNhbGx5IHVzZSBEdWFsIFBvcnQgUkFNIHRvIGNvbW11bmljYXRlCisJICB3aXRoIHRoZSBob3N0IENQVS4gVGhlIGludGVyZmFjZSBpcyB0aGVuIGlkZW50aWNhbCBmb3IgUENJCisJICBhbmQgUENNQ0lBIGNhcmRzLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBvbiBhIHBsYXRmb3JtIGRldmljZSwKKwkgIHdoaWNoIGhhcyBiZWVuIGNyZWF0ZWQgYnkgc29mdGluZ19jcyBvciBzb2Z0aW5nX3BjaSBkcml2ZXIuCisJICBXYXJuaW5nOgorCSAgVGhlIEFQSSBvZiB0aGUgY2FyZCBkb2VzIG5vdCBhbGxvdyBmaW5lIGNvbnRyb2wgcGVyIGJ1cywgYnV0CisJICBjb250cm9scyB0aGUgMiBidXNzZXMgb24gdGhlIGNhcmQgdG9nZXRoZXIuCisJICBBcyBzdWNoLCBzb21lIGFjdGlvbnMgKHN0YXJ0L3N0b3AvYnVzb2ZmIHJlY292ZXJ5KSBvbiAxIGJ1cworCSAgbXVzdCBicmluZyBkb3duIHRoZSBvdGhlciBidXMgdG9vIHRlbXBvcmFyaWx5LgorCitjb25maWcgQ0FOX1NPRlRJTkdfQ1MKKwl0cmlzdGF0ZSAiU29mdGluZyBHbWJoIENBTiBwY21jaWEgY2FyZHMiCisJZGVwZW5kcyBvbiBQQ01DSUEKKwlzZWxlY3QgQ0FOX1NPRlRJTkcKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgZnJvbSBTb2Z0aW5nIEdtYmggJiBzb21lIGNhcmRzCisJICBmcm9tIFZlY3RvciBHbWJoLgorCSAgWW91IG5lZWQgZmlybXdhcmUgZm9yIHRoZXNlLCB3aGljaCB5b3UgY2FuIGdldCBhdAorCSAgaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL3NvY2tldGNhbi8KKwkgIFRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGlzIHdyaXR0ZW4gYWdhaW5zdAorCSAgZmlybXdhcmUgdmVyc2lvbiA0LjYgKHNvZnRpbmctZnctNC42LWJpbmFyaWVzLnRhci5neikKKwkgIEluIG9yZGVyIHRvIHVzZSB0aGUgY2FyZCBhcyBDQU4gZGV2aWNlLCB5b3UgbmVlZCB0aGUgU29mdGluZyBnZW5lcmljCisJICBzdXBwb3J0IHRvby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlNTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorCitzb2Z0aW5nLXkgOj0gc29mdGluZ19tYWluLm8gc29mdGluZ19mdy5vCitvYmotJChDT05GSUdfQ0FOX1NPRlRJTkcpICs9IHNvZnRpbmcubworb2JqLSQoQ09ORklHX0NBTl9TT0ZUSU5HX0NTKSArPSBzb2Z0aW5nX2NzLm8KKworY2NmbGFncy0kKENPTkZJR19DQU5fREVCVUdfREVWSUNFUykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzlmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBzb2Z0aW5nIGNvbW1vbiBpbnRlcmZhY2VzCisgKgorICogYnkgS3VydCBWYW4gRGlqY2ssIDIwMDgtMjAxMAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nX3BsYXRmb3JtLmgiCisKK3N0cnVjdCBzb2Z0aW5nOworCitzdHJ1Y3Qgc29mdGluZ19wcml2IHsKKwlzdHJ1Y3QgY2FuX3ByaXYgY2FuOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIhICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgeworCQlpbnQgcGVuZGluZzsKKwkJLyogdmFyaWFibGVzIHdpY2ggaG9sZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWludCBlY2hvX3B1dDsKKwkJaW50IGVjaG9fZ2V0OworCX0gdHg7CisJc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgYnRyX2NvbnN0OworCWludCBpbmRleDsKKwl1aW50OF90IG91dHB1dDsKKwl1aW50MTZfdCBjaGlwOworfTsKKyNkZWZpbmUgbmV0ZGV2MnNvZnRpbmcobmV0ZGV2KQkoKHN0cnVjdCBzb2Z0aW5nX3ByaXYgKiluZXRkZXZfcHJpdihuZXRkZXYpKQorCitzdHJ1Y3Qgc29mdGluZyB7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRbMl07CisJc3BpbmxvY2tfdCBzcGluOyAvKiBwcm90ZWN0IHRoaXMgc3RydWN0dXJlICYgRFBSQU0gYWNjZXNzICovCisJa3RpbWVfdCB0c19yZWY7CisJa3RpbWVfdCB0c19vdmVyZmxvdzsgLyogdGltZXN0YW1wIG92ZXJmbG93IHZhbHVlLCBpbiBrdGltZSAqLworCisJc3RydWN0IHsKKwkJLyogaW5kaWNhdGlvbiBvZiBmaXJtd2FyZSBzdGF0dXMgKi8KKwkJaW50IHVwOworCQkvKiBwcm90ZWN0aW9uIG9mIHRoZSAndXAnIHZhcmlhYmxlICovCisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gZnc7CisJc3RydWN0IHsKKwkJaW50IG5yOworCQlpbnQgcmVxdWVzdGVkOworCQlpbnQgc3ZjX2NvdW50OworCQl1bnNpZ25lZCBpbnQgZHByYW1fcG9zaXRpb247CisJfSBpcnE7CisJc3RydWN0IHsKKwkJaW50IHBlbmRpbmc7CisJCWludCBsYXN0X2J1czsKKwkJLyoKKwkJICoga2VlcCB0aGUgYnVzIHRoYXQgbGFzdCB0eCdkIGEgbWVzc2FnZSwKKwkJICogaW4gb3JkZXIgdG8gbGV0IGV2ZXJ5IG5ldGRldiBxdWV1ZSByZXN1bWUKKwkJICovCisJfSB0eDsKKwlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtOworCXVuc2lnbmVkIGxvbmcgZHByYW1fcGh5czsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3NpemU7CisJc3RydWN0IHsKKwkJdWludDE2X3QgZndfdmVyc2lvbiwgaHdfdmVyc2lvbiwgbGljZW5zZSwgc2VyaWFsOworCQl1aW50MTZfdCBjaGlwWzJdOworCQl1bnNpZ25lZCBpbnQgZnJlcTsgLyogcmVtb3RlIGNwdSdzIG9wZXJhdGluZyBmcmVxdWVuY3kgKi8KKwl9IGlkOworfTsKKworZXh0ZXJuIGludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitleHRlcm4ga3RpbWVfdCBzb2Z0aW5nX3JhdzJrdGltZShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgdTMyIHJhdyk7CisKK2V4dGVybiBpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCitleHRlcm4gaW50IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwKKwkJY29uc3QgY2hhciAqbXNnKTsKKworLyogTG9hZCBmaXJtd2FyZSBhZnRlciByZXNldCAqLworZXh0ZXJuIGludCBzb2Z0aW5nX2xvYWRfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCQlfX2lvbWVtIHVpbnQ4X3QgKnZpcnQsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgb2Zmc2V0KTsKKworLyogTG9hZCBmaW5hbCBhcHBsaWNhdGlvbiBmaXJtd2FyZSBhZnRlciBib290bG9hZGVyICovCitleHRlcm4gaW50IHNvZnRpbmdfbG9hZF9hcHBfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCisvKgorICogZW5hYmxlIG9yIGRpc2FibGUgaXJxCisgKiBvbmx5IGNhbGxlZCB3aXRoIGZ3LmxvY2sgbG9ja2VkCisgKi8KK2V4dGVybiBpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKTsKKworLyogc3RhcnQvc3RvcCAxIGJ1cyBvbiBjYXJkICovCitleHRlcm4gaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB1cCk7CisKKy8qIG5ldGlmX3J4KCkgKi8KK2V4dGVybiBpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLCBrdGltZV90IGt0aW1lKTsKKworLyogU09GVElORyBEUFJBTSBtYXBwaW5ncyAqLworI2RlZmluZSBEUFJBTV9SWAkJMHgwMDAwCisJI2RlZmluZSBEUFJBTV9SWF9TSVpFCTMyCisJI2RlZmluZSBEUFJBTV9SWF9DTlQJMTYKKyNkZWZpbmUgRFBSQU1fUlhfUkQJCTB4MDIwMQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX1dSCQkweDAyMDUJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SWF9MT1NUCQkweDAyMDcJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX0ZDVF9QQVJBTQkJMHgwMzAwCS8qIGludDE2X3QgWzIwXSAqLworI2RlZmluZSBEUFJBTV9GQ1RfUkVTVUxUCTB4MDMyOAkvKiBpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0ZDVF9IT1NUCQkweDAzMmIJLyogdWludDE2X3QgKi8KKworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFCTB4MDMzMQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFMgkweDAzMzUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURQkweDAzMzkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURTIJMHgwMzNkCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUCQkweDAzNDEJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fQ0xSX1JFQ1ZfRklGTwkweDAzNDUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVRfVElNRQkweDAzNGQJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fVElNRQkJMHgwMzUwCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lIERQUkFNX1dSX1NUQVJUCQkweDAzNTgJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9XUl9FTkQJCTB4MDM1OQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1JYX0ZJRk8JMHgwMzYxCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1RYX0ZJRk8JMHgwMzY0CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVBRF9GSUZPX0xFVkVMCTB4MDM2NQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1RYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisKKyNkZWZpbmUgRFBSQU1fVFgJCTB4MDQwMAkvKiB1aW50MTZfdCAqLworCSNkZWZpbmUgRFBSQU1fVFhfU0laRQkxNgorCSNkZWZpbmUgRFBSQU1fVFhfQ05UCTMyCisjZGVmaW5lIERQUkFNX1RYX1JECQkweDA2MDEJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9UWF9XUgkJMHgwNjA1CS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBEUFJBTV9DT01NQU5ECQkweDA3ZTAJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVDRUlQVAkJMHgwN2YwCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lSUV9UT0hPU1QJMHgwN2ZlCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fSVJRX1RPQ0FSRAkweDA3ZmYJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX1YyX1JFU0VUCQkweDBlMDAJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9WMl9JUlFfVE9IT1NUCTB4MGUwMgkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgVFhNQVgJKERQUkFNX1RYX0NOVCAtIDEpCisKKy8qIERQUkFNIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBSRVNfTk9ORQkwCisjZGVmaW5lIFJFU19PSwkJMQorI2RlZmluZSBSRVNfTk9LCQkyCisjZGVmaW5lIFJFU19VTktOT1dOCTMKKy8qIERQUkFNIGZsYWdzICovCisjZGVmaW5lIENNRF9UWAkJMHgwMQorI2RlZmluZSBDTURfQUNLCQkweDAyCisjZGVmaW5lIENNRF9YVEQJCTB4MDQKKyNkZWZpbmUgQ01EX1JUUgkJMHgwOAorI2RlZmluZSBDTURfRVJSCQkweDEwCisjZGVmaW5lIENNRF9CVVMyCTB4ODAKKworLyogcmV0dXJuZWQgZmlmbyBlbnRyeSBidXMgc3RhdGUgbWFza3MgKi8KKyNkZWZpbmUgU0ZfTUFTS19CVVNPRkYJCTB4ODAKKyNkZWZpbmUgU0ZfTUFTS19FUEFTU0lWRQkweDYwCisKKy8qIGJ1cyBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVfQlVTT0ZGCTIKKyNkZWZpbmUgU1RBVEVfRVBBU1NJVkUJMQorI2RlZmluZSBTVEFURV9FQUNUSVZFCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFiYjRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19jcy5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworI2luY2x1ZGUgInNvZnRpbmdfcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBzb2Z0aW5nY3NfaW5kZXg7CitzdGF0aWMgc3BpbmxvY2tfdCBzb2Z0aW5nY3NfaW5kZXhfbG9jazsKKworc3RhdGljIGludCBzb2Z0aW5nY3NfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpOworc3RhdGljIGludCBzb2Z0aW5nY3NfZW5hYmxlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdik7CisKKy8qCisgKiBwbGF0Zm9ybV9kYXRhIGRlc2NyaXB0aW9ucworICovCisjZGVmaW5lIE1IWiAoMTAwMCoxMDAwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgc29mdGluZ2NzX3BsYXRmb3JtX2RhdGFbXSA9IHsKK3sKKwkubmFtZSA9ICJDQU5jYXJkIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwMSwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtTkVDIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwMiwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtU0pBIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwNCwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjAgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbnNqYS5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwNSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZCIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwODEsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZC1TSkEiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDg0LAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyMCAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2Fuc2phLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDA4NSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkubmFtZSA9ICJFRElDY2FyZC1ORUMiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MTAyLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiRURJQ2NhcmQtMiIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgxMDUsCisJLmdlbmVyYXRpb24gPSAyLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDI0ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDEwMDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZDIuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkMi5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNyZDIuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IE5VTEwsCit9LCB7CisJMCwgMCwKK30sCit9OworCitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJiY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImxkY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbmNhcmQuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5zamEuYmluIik7CisKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImJjYXJkMi5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImxkY2FyZDIuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5jcmQyLmJpbiIpOworCitzdGF0aWMgX19kZXZpbml0IGNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEKKypzb2Z0aW5nY3NfZmluZF9wbGF0Zm9ybV9kYXRhKHVuc2lnbmVkIGludCBtYW5mLCB1bnNpZ25lZCBpbnQgcHJvZCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpscDsKKworCWZvciAobHAgPSBzb2Z0aW5nY3NfcGxhdGZvcm1fZGF0YTsgbHAtPm1hbmY7ICsrbHApIHsKKwkJaWYgKChscC0+bWFuZiA9PSBtYW5mKSAmJiAobHAtPnByb2QgPT0gcHJvZCkpCisJCQlyZXR1cm4gbHA7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogcGxhdGZvcm1kYXRhIGNhbGxiYWNrcworICovCitzdGF0aWMgaW50IHNvZnRpbmdjc19yZXNldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhID0gdG9fcGNtY2lhX2RldihwZGV2LT5kZXYucGFyZW50KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInBjbWNpYSBjb25maWcgWzJdICUwMnhcbiIsIHYgPyAwIDogMHgyMCk7CisJcmV0dXJuIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShwY21jaWEsIDIsIHYgPyAwIDogMHgyMCk7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ2NzX2VuYWJsZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSA9IHRvX3BjbWNpYV9kZXYocGRldi0+ZGV2LnBhcmVudCk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJwY21jaWEgY29uZmlnIFswXSAlMDJ4XG4iLCB2ID8gMHg2MCA6IDApOworCXJldHVybiBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUocGNtY2lhLCAwLCB2ID8gMHg2MCA6IDApOworfQorCisvKgorICogcGNtY2lhIGNoZWNrCisgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdjc19wcm9iZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSwKKwkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQgPSBwcml2X2RhdGE7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCWludCBtZW1zcGVlZCA9IDA7CisKKwlXQVJOX09OKCFwZGF0KTsKKwlwcmVzID0gcGNtY2lhLT5yZXNvdXJjZVtQQ01DSUFfSU9NRU1fMF07CisJaWYgKHJlc291cmNlX3NpemUocHJlcykgPCAweDEwMDApCisJCXJldHVybiAtRVJBTkdFOworCisJcHJlcy0+ZmxhZ3MgfD0gV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKKwlpZiAocGRhdC0+Z2VuZXJhdGlvbiA8IDIpIHsKKwkJcHJlcy0+ZmxhZ3MgfD0gV0lOX1VTRV9XQUlUIHwgV0lOX0RBVEFfV0lEVEhfODsKKwkJbWVtc3BlZWQgPSAzOworCX0gZWxzZSB7CisJCXByZXMtPmZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2OworCX0KKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBjbWNpYSwgcHJlcywgbWVtc3BlZWQpOworfQorCitzdGF0aWMgX19kZXZleGl0IHZvaWQgc29mdGluZ2NzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwY21jaWEtPnByaXY7CisKKwkvKiBmcmVlIGJpdHMgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwkvKiByZWxlYXNlIHBjbWNpYSBzdHVmZiAqLworCXBjbWNpYV9kaXNhYmxlX2RldmljZShwY21jaWEpOworfQorCisvKgorICogcGxhdGZvcm1fZGV2aWNlIHdyYXBwZXIKKyAqIHBkZXYtPnJlc291cmNlIGhhcyAyIGVudHJpZXM6IGlvICYgaXJxCisgKi8KK3N0YXRpYyB2b2lkIHNvZnRpbmdjc19wZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlrZnJlZShwZGV2KTsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQ7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCXN0cnVjdCBkZXYgeworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBkZXY7CisJCXN0cnVjdCByZXNvdXJjZSByZXNbMl07CisJfSAqZGV2OworCisJLyogZmluZCBtYXRjaGluZyBwbGF0Zm9ybV9kYXRhICovCisJcGRhdCA9IHNvZnRpbmdjc19maW5kX3BsYXRmb3JtX2RhdGEocGNtY2lhLT5tYW5mX2lkLCBwY21jaWEtPmNhcmRfaWQpOworCWlmICghcGRhdCkKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwkvKiBzZXR1cCBwY21jaWEgZGV2aWNlICovCisJcGNtY2lhLT5jb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JT01FTSB8CisJCUNPTkZfQVVUT19TRVRfVlBQIHwgQ09ORl9BVVRPX0NIRUNLX1ZDQzsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcocGNtY2lhLCBzb2Z0aW5nY3NfcHJvYmVfY29uZmlnLCAodm9pZCAqKXBkYXQpOworCWlmIChyZXQpCisJCWdvdG8gcGNtY2lhX2ZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9lbmFibGVfZGV2aWNlKHBjbWNpYSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGNtY2lhX2ZhaWxlZDsKKworCXByZXMgPSBwY21jaWEtPnJlc291cmNlW1BDTUNJQV9JT01FTV8wXTsKKwlpZiAoIXByZXMpIHsKKwkJcmV0ID0gLUVCQURGOworCQlnb3RvIHBjbWNpYV9iYWQ7CisJfQorCisJLyogY3JlYXRlIHNvZnRpbmcgcGxhdGZvcm0gZGV2aWNlICovCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gbWVtX2ZhaWxlZDsKKwl9CisJZGV2LT5wZGV2LnJlc291cmNlID0gZGV2LT5yZXM7CisJZGV2LT5wZGV2Lm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGRldi0+cmVzKTsKKwlkZXYtPnBkZXYuZGV2LnJlbGVhc2UgPSBzb2Z0aW5nY3NfcGRldl9yZWxlYXNlOworCisJcGRldiA9ICZkZXYtPnBkZXY7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKXBkYXQ7CisJcGRldi0+ZGV2LnBhcmVudCA9ICZwY21jaWEtPmRldjsKKwlwY21jaWEtPnByaXYgPSBwZGV2OworCisJLyogcGxhdGZvcm0gZGV2aWNlIHJlc291cmNlcyAqLworCXBkZXYtPnJlc291cmNlWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSBwcmVzLT5zdGFydDsKKwlwZGV2LT5yZXNvdXJjZVswXS5lbmQgPSBwcmVzLT5lbmQ7CisKKwlwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROworCXBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ID0gcGNtY2lhLT5pcnE7CisJcGRldi0+cmVzb3VyY2VbMV0uZW5kID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisKKwkvKiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAgKi8KKwlzcGluX2xvY2soJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlwZGV2LT5pZCA9IHNvZnRpbmdjc19pbmRleCsrOworCXNwaW5fdW5sb2NrKCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcGRldi0+bmFtZSA9ICJzb2Z0aW5nIjsKKwlkZXZfc2V0X25hbWUoJnBkZXYtPmRldiwgInNvZnRpbmdjcy4laSIsIHBkZXYtPmlkKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGxhdGZvcm1fZmFpbGVkOworCisJZGV2X2luZm8oJnBjbWNpYS0+ZGV2LCAiY3JlYXRlZCAlc1xuIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCXJldHVybiAwOworCitwbGF0Zm9ybV9mYWlsZWQ6CisJa2ZyZWUoZGV2KTsKK21lbV9mYWlsZWQ6CitwY21jaWFfYmFkOgorcGNtY2lhX2ZhaWxlZDoKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocGNtY2lhKTsKKwlwY21jaWEtPnByaXYgPSBOVUxMOworCXJldHVybiByZXQgPzogLUVOT0RFVjsKK30KKworc3RhdGljIC8qY29uc3QqLyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBzb2Z0aW5nY3NfaWRzW10gPSB7CisJLyogc29mdGluZyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDAxKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwMiksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDA1KSwKKwkvKiB2ZWN0b3IsIG1hbnVmYWN0dXJlcj8gKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDA4MSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwODQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDg1KSwKKwkvKiBFRElDICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAxMDIpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMTA1KSwKKwlQQ01DSUFfREVWSUNFX05VTEwsCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgc29mdGluZ2NzX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBzb2Z0aW5nY3NfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAic29mdGluZ2NzIiwKKwkuaWRfdGFibGUJPSBzb2Z0aW5nY3NfaWRzLAorCS5wcm9iZQkJPSBzb2Z0aW5nY3NfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzb2Z0aW5nY3NfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRpbmdjc19zdGFydCh2b2lkKQoreworCXNwaW5fbG9ja19pbml0KCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcmV0dXJuIHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnNvZnRpbmdjc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc29mdGluZ2NzX3N0b3Aodm9pZCkKK3sKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvZnRpbmdjc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb2Z0aW5nY3Nfc3RhcnQpOworbW9kdWxlX2V4aXQoc29mdGluZ2NzX3N0b3ApOworCitNT0RVTEVfREVTQ1JJUFRJT04oInNvZnRpbmcgQ0FOY2FyZCBkcml2ZXIiCisJCSIsIGxpbmtzIFBDTUNJQSBjYXJkIHRvIHNvZnRpbmcgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyMDc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYwpAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwCisgKgorICogLSBLdXJ0IFZhbiBEaWpjaywgRUlBIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nLmgiCisKKy8qCisgKiBsb3cgbGV2ZWwgRFBSQU0gY29tbWFuZC4KKyAqIE1ha2Ugc3VyZSB0aGF0IGNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUXSBpcyBwcmVzZXQKKyAqLworc3RhdGljIGludCBfc29mdGluZ19mY3RfY21kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwgdWludDE2X3QgdmVjdG9yLAorCQljb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHN0YW1wOworCisJaW93cml0ZTE2KGNtZCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTV0pOworCWlvd3JpdGU4KHZlY3RvciA+PiA4LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1QgKyAxXSk7CisJaW93cml0ZTgodmVjdG9yLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1RdKTsKKwkvKiBiZSBzdXJlIHRvIGZsdXNoIHRoaXMgdG8gdGhlIGNhcmQgKi8KKwl3bWIoKTsKKwlzdGFtcCA9IGppZmZpZXMgKyAxICogSFo7CisJLyogd2FpdCBmb3IgY2FyZCAqLworCWRvIHsKKwkJLyogRFBSQU1fRkNUX0hPU1QgaXMgX25vdF8gYWxpZ25lZCAqLworCQlyZXQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVF0pICsKKwkJCShpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVCArIDFdKSA8PCA4KTsKKwkJLyogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIHZhcmlhYmxlcyAqLworCQlybWIoKTsKKwkJaWYgKHJldCA9PSBSRVNfT0spCisJCQkvKiByZWFkIHJldHVybi12YWx1ZSBub3cgKi8KKwkJCXJldHVybiBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1JFU1VMVF0pOworCisJCWlmICgocmV0ICE9IHZlY3RvcikgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFtcCkpCisJCQlicmVhazsKKwkJLyogcHJvY2VzcyBjb250ZXh0ID0+IHJlbGF4ICovCisJCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDAwKTsKKwl9IHdoaWxlICgxKTsKKworCXJldCA9IChyZXQgPT0gUkVTX05PTkUpID8gLUVUSU1FRE9VVCA6IC1FQ0FOQ0VMRUQ7CisJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWQgKCVpKVxuIiwgbXNnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19mY3RfY21kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwgY29uc3QgY2hhciAqbXNnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfc29mdGluZ19mY3RfY21kKGNhcmQsIGNtZCwgMCwgbXNnKTsKKwlpZiAocmV0ID4gMCkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIiVzIHJldHVybmVkICV1XG4iLCBtc2csIHJldCk7CisJCXJldCA9IC1FSU87CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50MTZfdCBjbWQsCisJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisKKwlpb3dyaXRlMTYoUkVTX05PTkUsICZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUXSk7CisJaW93cml0ZTE2KGNtZCwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkRdKTsKKwkvKiBiZSBzdXJlIHRvIGZsdXNoIHRoaXMgdG8gdGhlIGNhcmQgKi8KKwl3bWIoKTsKKwlzdGFtcCA9IGppZmZpZXMgKyAzICogSFo7CisJLyogd2FpdCBmb3IgY2FyZCAqLworCWRvIHsKKwkJcmV0ID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFRdKTsKKwkJLyogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIHZhcmlhYmxlcyAqLworCQlybWIoKTsKKwkJaWYgKHJldCA9PSBSRVNfT0spCisJCQlyZXR1cm4gMDsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhbXApKQorCQkJYnJlYWs7CisJCS8qIHByb2Nlc3MgY29udGV4dCA9PiByZWxheCAqLworCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwMCk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworCXJldCA9IChyZXQgPT0gUkVTX05PTkUpID8gLUVUSU1FRE9VVCA6IC1FQ0FOQ0VMRUQ7CisJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJib290bG9hZGVyICVzIGZhaWxlZCAoJWkpXG4iLCBtc2csIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmd19wYXJzZShjb25zdCB1aW50OF90ICoqcG1lbSwgdWludDE2X3QgKnB0eXBlLCB1aW50MzJfdCAqcGFkZHIsCisJCXVpbnQxNl90ICpwbGVuLCBjb25zdCB1aW50OF90ICoqcGRhdCkKK3sKKwl1aW50MTZfdCBjaGVja3N1bVsyXTsKKwljb25zdCB1aW50OF90ICptZW07CisJY29uc3QgdWludDhfdCAqZW5kOworCisJLyoKKwkgKiBmaXJtd2FyZSByZWNvcmRzIGFyZSBhIGJpbmFyeSwgdW5hbGlnbmVkIHN0cmVhbSBjb21wb3NlZCBvZjoKKwkgKiB1aW50MTZfdCB0eXBlOworCSAqIHVpbnQzMl90IGFkZHI7CisJICogdWludDE2X3QgbGVuOworCSAqIHVpbnQ4X3QgZGF0W2xlbl07CisJICogdWludDE2X3QgY2hlY2tzdW07CisJICogYWxsIHZhbHVlcyBpbiBsaXR0bGUgZW5kaWFuLgorCSAqIFdlIGNvdWxkIGRlZmluZSBhIHN0cnVjdCBmb3IgdGhpcywgd2l0aCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSwKKwkgKiBidXQgd291bGQgdGhhdCBzb2x2ZSB0aGUgYWxpZ25tZW50IGluIF9hbGxfIGNhc2VzIChjZnIuIHRoZQorCSAqIHN0cnVjdCBpdHNlbGYgbWF5IGJlIGFuIG9kZCBhZGRyZXNzKT8KKwkgKgorCSAqIEkgY2hvc2UgdG8gdXNlIGxlWFhfdG9fY3B1cCgpIHNpbmNlIHRoaXMgc29sdmVzIGJvdGgKKwkgKiBlbmRpYW5uZXNzICYgYWxpZ25tZW50LgorCSAqLworCW1lbSA9ICpwbWVtOworCSpwdHlwZSA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKSZtZW1bMF0pOworCSpwYWRkciA9IGxlMzJfdG9fY3B1cCgodm9pZCAqKSZtZW1bMl0pOworCSpwbGVuID0gbGUxNl90b19jcHVwKCh2b2lkICopJm1lbVs2XSk7CisJKnBkYXQgPSAmbWVtWzhdOworCS8qIHZlcmlmeSBjaGVja3N1bSAqLworCWVuZCA9ICZtZW1bOCArICpwbGVuXTsKKwljaGVja3N1bVswXSA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKWVuZCk7CisJZm9yIChjaGVja3N1bVsxXSA9IDA7IG1lbSA8IGVuZDsgKyttZW0pCisJCWNoZWNrc3VtWzFdICs9ICptZW07CisJaWYgKGNoZWNrc3VtWzBdICE9IGNoZWNrc3VtWzFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBpbmNyZW1lbnQgKi8KKwkqcG1lbSArPSAxMCArICpwbGVuOworCXJldHVybiAwOworfQorCitpbnQgc29mdGluZ19sb2FkX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisJY29uc3QgdWludDhfdCAqbWVtLCAqZW5kLCAqZGF0OworCXVpbnQxNl90IHR5cGUsIGxlbjsKKwl1aW50MzJfdCBhZGRyOworCXVpbnQ4X3QgKmJ1ZiA9IE5VTEw7CisJaW50IGJ1ZmxlbiA9IDA7CisJaW50OF90IHR5cGVfZW5kID0gMDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlLCAmY2FyZC0+cGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZfZGJnKCZjYXJkLT5wZGV2LT5kZXYsICIlcywgZmlybXdhcmUoJXMpIGdvdCAldSBieXRlcyIKKwkJIiwgb2Zmc2V0ICVjMHglMDR4XG4iLAorCQljYXJkLT5wZGF0LT5uYW1lLCBmaWxlLCAodW5zaWduZWQgaW50KWZ3LT5zaXplLAorCQkob2Zmc2V0ID49IDApID8gJysnIDogJy0nLCAodW5zaWduZWQgaW50KWFicyhvZmZzZXQpKTsKKwkvKiBwYXJzZSB0aGUgZmlybXdhcmUgKi8KKwltZW0gPSBmdy0+ZGF0YTsKKwllbmQgPSAmbWVtW2Z3LT5zaXplXTsKKwkvKiBsb29rIGZvciBoZWFkZXIgcmVjb3JkICovCisJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaWYgKHR5cGUgIT0gMHhmZmZmKQorCQlnb3RvIGZhaWxlZDsKKwlpZiAoc3RybmNtcCgiU3RydWN0dXJlZCBCaW5hcnkgRm9ybWF0LCBTb2Z0aW5nIEdtYkgiICwgZGF0LCBsZW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbGVkOworCX0KKwkvKiBvaywgd2UgaGFkIGEgaGVhZGVyICovCisJd2hpbGUgKG1lbSA8IGVuZCkgeworCQlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQlpZiAodHlwZSA9PSAzKSB7CisJCQkvKiBzdGFydCBhZGRyZXNzLCBub3QgdXNlZCBoZXJlICovCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eXBlID09IDEpIHsKKwkJCS8qIGVvZiAqLworCQkJdHlwZV9lbmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodHlwZSAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlpZiAoKGFkZHIgKyBsZW4gKyBvZmZzZXQpID4gc2l6ZSkKKwkJCWdvdG8gZmFpbGVkOworCQltZW1jcHlfdG9pbygmZHByYW1bYWRkciArIG9mZnNldF0sIGRhdCwgbGVuKTsKKwkJLyogYmUgc3VyZSB0byBmbHVzaCBjYWNoZXMgZnJvbSBJTyBzcGFjZSAqLworCQltYigpOworCQlpZiAobGVuID4gYnVmbGVuKSB7CisJCQkvKiBhbGlnbiBidWZsZW4gKi8KKwkJCWJ1ZmxlbiA9IChsZW4gKyAoMTAyNC0xKSkgJiB+KDEwMjQtMSk7CisJCQlidWYgPSBrcmVhbGxvYyhidWYsIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1ZikgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0KKwkJLyogdmVyaWZ5IHJlY29yZCBkYXRhICovCisJCW1lbWNweV9mcm9taW8oYnVmLCAmZHByYW1bYWRkciArIG9mZnNldF0sIGxlbik7CisJCWlmIChtZW1jbXAoYnVmLCBkYXQsIGxlbikpIHsKKwkJCS8qIGlzIG5vdCBvayAqLworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJEUFJBTSByZWFkYmFjayBmYWlsZWRcbiIpOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICghdHlwZV9lbmQpCisJCS8qIG5vIGVuZCByZWNvcmQgc2VlbiAqLworCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAwOworZmFpbGVkOgorCWtmcmVlKGJ1Zik7CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaWYgKHJldCA8IDApCisJCWRldl9pbmZvKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWRcbiIsIGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2xvYWRfYXBwX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgdWludDhfdCAqbWVtLCAqZW5kLCAqZGF0OworCWludCByZXQsIGo7CisJdWludDE2X3QgdHlwZSwgbGVuOworCXVpbnQzMl90IGFkZHIsIHN0YXJ0X2FkZHIgPSAwOworCXVuc2lnbmVkIGludCBzdW0sIHJ4X3N1bTsKKwlpbnQ4X3QgdHlwZV9lbmQgPSAwLCB0eXBlX2VudHJ5cG9pbnQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZjYXJkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJyZXF1ZXN0X2Zpcm13YXJlKCVzKSBnb3QgJWlcbiIsCisJCQlmaWxlLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXZfZGJnKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSglcykgZ290ICVsdSBieXRlc1xuIiwKKwkJZmlsZSwgKHVuc2lnbmVkIGxvbmcpZnctPnNpemUpOworCS8qIHBhcnNlIHRoZSBmaXJtd2FyZSAqLworCW1lbSA9IGZ3LT5kYXRhOworCWVuZCA9ICZtZW1bZnctPnNpemVdOworCS8qIGxvb2sgZm9yIGhlYWRlciByZWNvcmQgKi8KKwlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCXJldCA9IC1FSU5WQUw7CisJaWYgKHR5cGUgIT0gMHhmZmZmKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgc3RhcnRzIHdpdGggdHlwZSAweCV4XG4iLAorCQkJdHlwZSk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoc3RybmNtcCgiU3RydWN0dXJlZCBCaW5hcnkgRm9ybWF0LCBTb2Z0aW5nIEdtYkgiLCBkYXQsIGxlbikpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBzdHJpbmcgJyUuKnMnIGZhdWx0XG4iLAorCQkJCWxlbiwgZGF0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIG9rLCB3ZSBoYWQgYSBoZWFkZXIgKi8KKwl3aGlsZSAobWVtIDwgZW5kKSB7CisJCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKKworCQlpZiAodHlwZSA9PSAzKSB7CisJCQkvKiBzdGFydCBhZGRyZXNzICovCisJCQlzdGFydF9hZGRyID0gYWRkcjsKKwkJCXR5cGVfZW50cnlwb2ludCA9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eXBlID09IDEpIHsKKwkJCS8qIGVvZiAqLworCQkJdHlwZV9lbmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodHlwZSAhPSAwKSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJInVua25vd24gcmVjb3JkIHR5cGUgMHglMDR4XG4iLCB0eXBlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIHJlZ3VhbGFyIGRhdGEgKi8KKwkJZm9yIChzdW0gPSAwLCBqID0gMDsgaiA8IGxlbjsgKytqKQorCQkJc3VtICs9IGRhdFtqXTsKKwkJLyogd29yayBpbiAxNmJpdCAodGFyZ2V0KSAqLworCQlzdW0gJj0gMHhmZmZmOworCisJCW1lbWNweV90b2lvKCZjYXJkLT5kcHJhbVtjYXJkLT5wZGF0LT5hcHAub2Zmc10sIGRhdCwgbGVuKTsKKwkJaW93cml0ZTMyKGNhcmQtPnBkYXQtPmFwcC5vZmZzICsgY2FyZC0+cGRhdC0+YXBwLmFkZHIsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAyXSk7CisJCWlvd3JpdGUzMihhZGRyLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDZdKTsKKwkJaW93cml0ZTE2KGxlbiwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAxMF0pOworCQlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDEyXSk7CisJCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDEsICJsb2FkaW5nIGFwcC4iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogdmVyaWZ5IGNoZWNrc3VtICovCisJCXJ4X3N1bSA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUICsgMl0pOworCQlpZiAocnhfc3VtICE9IHN1bSkgeworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJTUkFNIHNlZW1zIHRvIGJlIGRhbWFnZWQiCisJCQkJIiwgd2FudGVkIDB4JTA0eCwgZ290IDB4JTA0eFxuIiwgc3VtLCByeF9zdW0pOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICghdHlwZV9lbmQgfHwgIXR5cGVfZW50cnlwb2ludCkKKwkJZ290byBmYWlsZWQ7CisJLyogc3RhcnQgYXBwbGljYXRpb24gaW4gY2FyZCAqLworCWlvd3JpdGUzMihzdGFydF9hZGRyLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDJdKTsKKwlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDZdKTsKKwlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAzLCAic3RhcnQgYXBwLiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAwOworZmFpbGVkOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWlmIChyZXQgPCAwKQorCQlkZXZfaW5mbygmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgJXMgZmFpbGVkXG4iLCBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvZnRpbmdfcmVzZXRfY2hpcChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0OworCisJZG8geworCQkvKiByZXNldCBjaGlwICovCisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF9SWF9GSUZPXSk7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF9SWF9GSUZPKzFdKTsKKwkJaW93cml0ZTgoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUXSk7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVCsxXSk7CisKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDAsICJyZXNldF9jYW4iKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJLyogZG9uJ3Qgd2FpdCBhbnkgbG9uZ2VyICovCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKwljYXJkLT50eC5wZW5kaW5nID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IHJldDsKKwkvKiBzeW5jICovCisJcmV0ID0gX3NvZnRpbmdfZmN0X2NtZChjYXJkLCA5OSwgMHg1NSwgInN5bmMtYSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IF9zb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgOTksIDB4YWEsICJzeW5jLWIiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGdldF9zZXJpYWwgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNDMsICJnZXRfc2VyaWFsX251bWJlciIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwljYXJkLT5pZC5zZXJpYWwgPSBpb3JlYWQzMigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNXSk7CisJLyogZ2V0X3ZlcnNpb24gKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTIsICJnZXRfdmVyc2lvbiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwljYXJkLT5pZC5md192ZXJzaW9uID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwljYXJkLT5pZC5od192ZXJzaW9uID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwljYXJkLT5pZC5saWNlbnNlID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwljYXJkLT5pZC5jaGlwWzBdID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwljYXJkLT5pZC5jaGlwWzFdID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJcmV0dXJuIDA7CitmYWlsZWQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19pbml0aWFsaXplX3RpbWVzdGFtcChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwl1aW50NjRfdCBvdmY7CisKKwljYXJkLT50c19yZWYgPSBrdGltZV9nZXQoKTsKKworCS8qIDE2TUh6IGlzIHRoZSByZWZlcmVuY2UgKi8KKwlvdmYgPSAweDEwMDAwMDAwMFVMTCAqIDE2OworCWRvX2RpdihvdmYsIGNhcmQtPnBkYXQtPmZyZXEgPzogMTYpOworCisJY2FyZC0+dHNfb3ZlcmZsb3cgPSBrdGltZV9hZGRfdXMoa3RpbWVfc2V0KDAsIDApLCBvdmYpOworfQorCitrdGltZV90IHNvZnRpbmdfcmF3Mmt0aW1lKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCB1MzIgcmF3KQoreworCXVpbnQ2NF90IHJhd2w7CisJa3RpbWVfdCBub3csIHJlYWxfb2Zmc2V0OworCWt0aW1lX3QgdGFyZ2V0OworCWt0aW1lX3QgdG1wOworCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJcmVhbF9vZmZzZXQgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X3JlYWwoKSwgbm93KTsKKworCS8qIGZpbmQgbnNlYyBmcm9tIGNhcmQgKi8KKwlyYXdsID0gcmF3ICogMTY7CisJZG9fZGl2KHJhd2wsIGNhcmQtPnBkYXQtPmZyZXEgPzogMTYpOworCXRhcmdldCA9IGt0aW1lX2FkZF91cyhjYXJkLT50c19yZWYsIHJhd2wpOworCS8qIHRlc3QgZm9yIG92ZXJmbG93cyAqLworCXRtcCA9IGt0aW1lX2FkZCh0YXJnZXQsIGNhcmQtPnRzX292ZXJmbG93KTsKKwl3aGlsZSAodW5saWtlbHkoa3RpbWVfdG9fbnModG1wKSA+IGt0aW1lX3RvX25zKG5vdykpKSB7CisJCWNhcmQtPnRzX3JlZiA9IGt0aW1lX2FkZChjYXJkLT50c19yZWYsIGNhcmQtPnRzX292ZXJmbG93KTsKKwkJdGFyZ2V0ID0gdG1wOworCQl0bXAgPSBrdGltZV9hZGQodGFyZ2V0LCBjYXJkLT50c19vdmVyZmxvdyk7CisJfQorCXJldHVybiBrdGltZV9hZGQodGFyZ2V0LCByZWFsX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlyZXR1cm4gKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORykKKwkJPyAxIDogMDsKK30KKworaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB1cCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzb2Z0aW5nICpjYXJkOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlpbnQgYnVzX2JpdG1hc2tfc3RhcnQ7CisJaW50IGosIGVycm9yX3JlcG9ydGluZzsKKwlzdHJ1Y3QgY2FuX2ZyYW1lIG1zZzsKKwljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQ7CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljYXJkID0gcHJpdi0+Y2FyZDsKKworCWlmICghY2FyZC0+ZncudXApCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYnVzX2JpdG1hc2tfc3RhcnQgPSAwOworCWlmIChkZXYgJiYgdXApCisJCS8qIHByZXBhcmUgdG8gc3RhcnQgdGhpcyBidXMgYXMgd2VsbCAqLworCQlidXNfYml0bWFza19zdGFydCB8PSAoMSA8PCBwcml2LT5pbmRleCk7CisJLyogYnJpbmcgbmV0ZGV2cyBkb3duICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkJaWYgKGRldiAhPSBuZXRkZXYpCisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJaWYgKGRldiAhPSBuZXRkZXYpCisJCQkJYnVzX2JpdG1hc2tfc3RhcnQgfD0gKDEgPDwgaik7CisJCQlwcml2LT50eC5wZW5kaW5nID0gMDsKKwkJCXByaXYtPnR4LmVjaG9fcHV0ID0gMDsKKwkJCXByaXYtPnR4LmVjaG9fZ2V0ID0gMDsKKwkJCS8qCisJCQkgKiB0aGlzIGJ1cycgbWF5IGp1c3QgaGF2ZSBjYWxsZWQgb3Blbl9jYW5kZXYoKQorCQkJICogd2hpY2ggaXMgcmF0aGVyIHN0dXBpZCB0byBjYWxsIGNsb3NlX2NhbmRldigpCisJCQkgKiBhbHJlYWR5CisJCQkgKiBidXQgd2UgbWF5IGNvbWUgaGVyZSBmcm9tIGJ1c29mZiByZWNvdmVyeSB0b28KKwkJCSAqIGluIHdoaWNoIGNhc2UgdGhlIGVjaG9fc2tiIF9uZWVkc18gZmx1c2hpbmcgdG9vLgorCQkJICoganVzdCBiZSBzdXJlIHRvIGNhbGwgb3Blbl9jYW5kZXYoKSBhZ2FpbgorCQkJICovCisJCQljbG9zZV9jYW5kZXYobmV0ZGV2KTsKKwkJfQorCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKKwl9CisJY2FyZC0+dHgucGVuZGluZyA9IDA7CisKKwlzb2Z0aW5nX2VuYWJsZV9pcnEoY2FyZCwgMCk7CisJcmV0ID0gc29mdGluZ19yZXNldF9jaGlwKGNhcmQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCWlmICghYnVzX2JpdG1hc2tfc3RhcnQpCisJCS8qIG5vIGJ1c3NlcyB0byBiZSBicm91Z2h0IHVwICovCisJCWdvdG8gY2FyZF9kb25lOworCisJaWYgKChidXNfYml0bWFza19zdGFydCAmIDEpICYmIChidXNfYml0bWFza19zdGFydCAmIDIpCisJCQkmJiAoc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoY2FyZC0+bmV0WzBdKQorCQkJCSE9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKGNhcmQtPm5ldFsxXSkpKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCSJlcnJfcmVwb3J0aW5nIGZsYWcgZGlmZmVycyBmb3IgYnVzc2VzXG4iKTsKKwkJZ290byBpbnZhbGlkOworCX0KKwllcnJvcl9yZXBvcnRpbmcgPSAwOworCWlmIChidXNfYml0bWFza19zdGFydCAmIDEpIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WzBdOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJZXJyb3JfcmVwb3J0aW5nICs9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKG5ldGRldik7CisJCS8qIGluaXQgY2hpcCAxICovCisJCWJ0ID0gJnByaXYtPmNhbi5iaXR0aW1pbmc7CisJCWlvd3JpdGUxNihidC0+YnJwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoYnQtPnNqdywgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKSA/IDEgOiAwLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMSwgImluaXRpYWxpemVfY2hpcFswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgbW9kZSAqLworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAzLCAic2V0X21vZGVbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IGZpbHRlciAqLworCQkvKiAxMWJpdCBpZCAmIG1hc2sgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDB4MDdmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJLyogMjliaXQgaWQubG8gJiBtYXNrLmxvICYgaWQuaGkgJiBtYXNrLmhpICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNigweGZmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlpb3dyaXRlMTYoMHgxZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDcsICJzZXRfZmlsdGVyWzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBvdXRwdXQgY29udHJvbCAqLworCQlpb3dyaXRlMTYocHJpdi0+b3V0cHV0LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNSwgInNldF9vdXRwdXRbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJaWYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMikgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbMV07CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQllcnJvcl9yZXBvcnRpbmcgKz0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcobmV0ZGV2KTsKKwkJLyogaW5pdCBjaGlwMiAqLworCQlidCA9ICZwcml2LT5jYW4uYml0dGltaW5nOworCQlpb3dyaXRlMTYoYnQtPmJycCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KGJ0LT5zancsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMSArIGJ0LT5wcm9wX3NlZywKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzIsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykgPyAxIDogMCwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDIsICJpbml0aWFsaXplX2NoaXBbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG1vZGUyICovCisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDQsICJzZXRfbW9kZVsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgZmlsdGVyMiAqLworCQkvKiAxMWJpdCBpZCAmIG1hc2sgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDB4MDdmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJLyogMjliaXQgaWQubG8gJiBtYXNrLmxvICYgaWQuaGkgJiBtYXNrLmhpICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNigweGZmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlpb3dyaXRlMTYoMHgxZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDgsICJzZXRfZmlsdGVyWzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBvdXRwdXQgY29udHJvbDIgKi8KKwkJaW93cml0ZTE2KHByaXYtPm91dHB1dCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDYsICJzZXRfb3V0cHV0WzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJfQorCS8qIGVuYWJsZV9lcnJvcl9mcmFtZSAqLworCS8qCisJICogRXJyb3IgcmVwb3J0aW5nIGlzIHN3aXRjaGVkIG9mZiBhdCB0aGUgbW9tZW50IHNpbmNlCisJICogdGhlIHJlY2VpdmluZyBvZiB0aGVtIGlzIG5vdCB5ZXQgMTAwJSB2ZXJpZmllZAorCSAqIFRoaXMgc2hvdWxkIGJlIGVuYWJsZWQgc29vbmVyIG9yIGxhdGVyCisJICoKKwlpZiAoZXJyb3JfcmVwb3J0aW5nKSB7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA1MSwgImVuYWJsZV9lcnJvcl9mcmFtZSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwkqLworCS8qIGluaXRpYWxpemUgaW50ZXJmYWNlICovCisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDE0XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxNl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMThdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDIwXSk7CisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDE3LCAiaW5pdGlhbGl6ZV9pbnRlcmZhY2UiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZW5hYmxlX2ZpZm8gKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMzYsICJlbmFibGVfZmlmbyIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGUgZmlmbyB0eCBhY2sgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTMsICJmaWZvX3R4X2Fja1swXSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGUgZmlmbyB0eCBhY2syICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDE0LCAiZmlmb190eF9hY2tbMV0iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogc3RhcnRfY2hpcCAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMSwgInN0YXJ0X2NoaXAiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lORk9fQlVTU1RBVEVdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSU5GT19CVVNTVEFURTJdKTsKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA8IDIpIHsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwkJLyogZmx1c2ggdGhlIERQUkFNIGNhY2hlcyAqLworCQl3bWIoKTsKKwl9CisKKwlzb2Z0aW5nX2luaXRpYWxpemVfdGltZXN0YW1wKGNhcmQpOworCisJLyoKKwkgKiBkbyBzb2NrZXRjYW4gbm90aWZpY2F0aW9ucy9zdGF0dXMgY2hhbmdlcworCSAqIGZyb20gaGVyZSwgbm8gZXJyb3JzIHNob3VsZCBvY2N1ciwgb3IgdGhlIGZhaWxlZDogcGFydAorCSAqIG11c3QgYmUgcmV2aWV3ZWQKKwkgKi8KKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUcgfCBDQU5fRVJSX1JFU1RBUlRFRDsKKwltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIShidXNfYml0bWFza19zdGFydCAmICgxIDw8IGopKSkKKwkJCWNvbnRpbnVlOworCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCWlmICghbmV0ZGV2KQorCQkJY29udGludWU7CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQlvcGVuX2NhbmRldihuZXRkZXYpOworCQlpZiAoZGV2ICE9IG5ldGRldikgeworCQkJLyogbm90aWZ5IG90aGVyIGJ1c3NlcyBvbiB0aGUgcmVzdGFydCAqLworCQkJc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZV9zZXQoMCwgMCkpOworCQkJKytwcml2LT5jYW4uY2FuX3N0YXRzLnJlc3RhcnRzOworCQl9CisJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwl9CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCXJldCA9IHNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKK2NhcmRfZG9uZToKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiAwOworaW52YWxpZDoKKwlyZXQgPSAtRUlOVkFMOworZmFpbGVkOgorCXNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAwKTsKKwlzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkvKiBicmluZyBhbGwgb3RoZXIgaW50ZXJmYWNlcyBkb3duICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJZGV2X2Nsb3NlKG5ldGRldik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCisJc3dpdGNoIChwcml2LT5jaGlwKSB7CisJY2FzZSAxMDAwOgorCQlyZXR1cm4gKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPCAyKSA/IDB4ZmIgOiAweGZhOworCWNhc2UgNToKKwkJcmV0dXJuIDB4NjA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDB4NDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTU3ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKQEAgLTAsMCArMSw4OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMAorICoKKyAqIC0gS3VydCBWYW4gRGlqY2ssIEVJQSBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgInNvZnRpbmcuaCIKKworI2RlZmluZSBUWF9FQ0hPX1NLQl9NQVggKCgoVFhNQVgrMSkvMiktMSkKKworLyoKKyAqIHRlc3QgaXMgYSBzcGVjaWZpYyBDQU4gbmV0ZGV2CisgKiBpcyBvbmxpbmUgKGllLiB1cCAnbiBydW5uaW5nLCBub3Qgc2xlZXBpbmcsIG5vdCBidXNvZmYKKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FuaWZfaXNfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhbl9wcml2ICpjYW4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAwOworCXJldHVybiAoY2FuLT5zdGF0ZSA8PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSk7Cit9CisKKy8qIHJlc2V0IERQUkFNICovCitzdGF0aWMgaW5saW5lIHZvaWQgc29mdGluZ19zZXRfcmVzZXRfZHByYW0oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaWYgKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgeworCQlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCQlpb3dyaXRlOChpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pICYgfjEsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSk7CisJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0aW5nX2Nscl9yZXNldF9kcHJhbShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSB7CisJCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJCWlvd3JpdGU4KGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSkgfCAxLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pOworCQlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJfQorfQorCisvKiB0cmlnZ2VyIHRoZSB0eCBxdWV1ZS1pbmcgKi8KK3N0YXRpYyBuZXRkZXZfdHhfdCBzb2Z0aW5nX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCWludCByZXQ7CisJdWludDhfdCAqcHRyOworCXVpbnQ4X3QgZmlmb193ciwgZmlmb19yZDsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOworCXVpbnQ4X3QgYnVmW0RQUkFNX1RYX1NJWkVdOworCisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKGRldiwgc2tiKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworCXNwaW5fbG9jaygmY2FyZC0+c3Bpbik7CisKKwlyZXQgPSBORVRERVZfVFhfQlVTWTsKKwlpZiAoIWNhcmQtPmZ3LnVwIHx8CisJCQkoY2FyZC0+dHgucGVuZGluZyA+PSBUWE1BWCkgfHwKKwkJCShwcml2LT50eC5wZW5kaW5nID49IFRYX0VDSE9fU0tCX01BWCkpCisJCWdvdG8geG1pdF9kb25lOworCWZpZm9fd3IgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9UWF9XUl0pOworCWZpZm9fcmQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9UWF9SRF0pOworCWlmIChmaWZvX3dyID09IGZpZm9fcmQpCisJCS8qIGZpZm8gZnVsbCAqLworCQlnb3RvIHhtaXRfZG9uZTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJcHRyID0gYnVmOworCSpwdHIgPSBDTURfVFg7CisJaWYgKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpCisJCSpwdHIgfD0gQ01EX1JUUjsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJKnB0ciB8PSBDTURfWFREOworCWlmIChwcml2LT5pbmRleCkKKwkJKnB0ciB8PSBDTURfQlVTMjsKKwkrK3B0cjsKKwkqcHRyKysgPSBjZi0+Y2FuX2RsYzsKKwkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAwKTsKKwkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiA4KTsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykgeworCQkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAxNik7CisJCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDI0KTsKKwl9IGVsc2UgeworCQkvKiBpbmNyZW1lbnQgMSwgbm90IDIgYXMgeW91IG1pZ2h0IHRoaW5rICovCisJCXB0ciArPSAxOworCX0KKwlpZiAoIShjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJbWVtY3B5KHB0ciwgJmNmLT5kYXRhWzBdLCBjZi0+Y2FuX2RsYyk7CisJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW0RQUkFNX1RYICsgRFBSQU1fVFhfU0laRSAqIGZpZm9fd3JdLAorCQkJYnVmLCBEUFJBTV9UWF9TSVpFKTsKKwlpZiAoKytmaWZvX3dyID49IERQUkFNX1RYX0NOVCkKKwkJZmlmb193ciA9IDA7CisJaW93cml0ZTgoZmlmb193ciwgJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1dSXSk7CisJY2FyZC0+dHgubGFzdF9idXMgPSBwcml2LT5pbmRleDsKKwkrK2NhcmQtPnR4LnBlbmRpbmc7CisJKytwcml2LT50eC5wZW5kaW5nOworCWNhbl9wdXRfZWNob19za2Ioc2tiLCBkZXYsIHByaXYtPnR4LmVjaG9fcHV0KTsKKwkrK3ByaXYtPnR4LmVjaG9fcHV0OworCWlmIChwcml2LT50eC5lY2hvX3B1dCA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCXByaXYtPnR4LmVjaG9fcHV0ID0gMDsKKwkvKiBjYW5fcHV0X2VjaG9fc2tiKCkgc2F2ZXMgdGhlIHNrYiwgc2FmZSB0byByZXR1cm4gVFhfT0sgKi8KKwlyZXQgPSBORVRERVZfVFhfT0s7Cit4bWl0X2RvbmU6CisJc3Bpbl91bmxvY2soJmNhcmQtPnNwaW4pOworCWlmIChjYXJkLT50eC5wZW5kaW5nID49IFRYTUFYKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJCWlmIChjYXJkLT5uZXRbal0pCisJCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5uZXRbal0pOworCQl9CisJfQorCWlmIChyZXQgIT0gTkVUREVWX1RYX09LKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2hvcnRjdXQgZm9yIHNrYiBkZWxpdmVyeQorICovCitpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLAorCQlrdGltZV90IGt0aW1lKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGNhbl9mcmFtZSAqY2Y7CisKKwlza2IgPSBhbGxvY19jYW5fc2tiKG5ldGRldiwgJmNmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNmLCBtc2csIHNpemVvZigqbXNnKSk7CisJc2tiLT50c3RhbXAgPSBrdGltZTsKKwlyZXR1cm4gbmV0aWZfcngoc2tiKTsKK30KKworLyoKKyAqIHNvZnRpbmdfaGFuZGxlXzEKKyAqIHBvcCAxIGVudHJ5IGZyb20gdGhlIERQUkFNIHF1ZXVlLCBhbmQgcHJvY2VzcworICovCitzdGF0aWMgaW50IHNvZnRpbmdfaGFuZGxlXzEoc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCWt0aW1lX3Qga3RpbWU7CisJc3RydWN0IGNhbl9mcmFtZSBtc2c7CisJaW50IGNudCA9IDAsIGxvc3RfbXNnOworCXVpbnQ4X3QgZmlmb19yZCwgZmlmb193ciwgY21kOworCXVpbnQ4X3QgKnB0cjsKKwl1aW50MzJfdCB0bXBfdTMyOworCXVpbnQ4X3QgYnVmW0RQUkFNX1JYX1NJWkVdOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkvKiB0ZXN0IGZvciBsb3N0IG1zZ3MgKi8KKwlsb3N0X21zZyA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX0xPU1RdKTsKKwlpZiAobG9zdF9tc2cpIHsKKwkJaW50IGo7CisJCS8qIHJlc2V0IGNvbmRpdGlvbiAqLworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlhfTE9TVF0pOworCQkvKiBwcmVwYXJlIG1zZyAqLworCQltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHIHwgQ0FOX0VSUl9DUlRMOworCQltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCQltc2cuZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKKwkJLyoKKwkJICogc2VydmljZSB0byBhbGwgYnVzc2VzLCB3ZSBkb24ndCBrbm93IHdoaWNoIGl0IHdhcyBhcHBsaWNhYmxlCisJCSAqIGJ1dCBvbmx5IHNlcnZpY2UgYnVzc2VzIHRoYXQgYXJlIG9ubGluZQorCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCQlpZiAoIW5ldGRldikKKwkJCQljb250aW51ZTsKKwkJCWlmICghY2FuaWZfaXNfYWN0aXZlKG5ldGRldikpCisJCQkJLyogYSBkZWFkIGJ1cyBoYXMgbm8gb3ZlcmZsb3dzICovCisJCQkJY29udGludWU7CisJCQkrK25ldGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJCQlzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lX3NldCgwLCAwKSk7CisJCX0KKwkJLyogcHJlcGFyZSBmb3Igb3RoZXIgdXNlICovCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCSsrY250OworCX0KKworCWZpZm9fcmQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9SRF0pOworCWZpZm9fd3IgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9XUl0pOworCisJaWYgKCsrZmlmb19yZCA+PSBEUFJBTV9SWF9DTlQpCisJCWZpZm9fcmQgPSAwOworCWlmIChmaWZvX3dyID09IGZpZm9fcmQpCisJCXJldHVybiBjbnQ7CisKKwltZW1jcHlfZnJvbWlvKGJ1ZiwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYICsgRFBSQU1fUlhfU0laRSpmaWZvX3JkXSwKKwkJCURQUkFNX1JYX1NJWkUpOworCW1iKCk7CisJLyogdHJpZ2dlciBkdWFsIHBvcnQgUkFNICovCisJaW93cml0ZTgoZmlmb19yZCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1JEXSk7CisKKwlwdHIgPSBidWY7CisJY21kID0gKnB0cisrOworCWlmIChjbWQgPT0gMHhmZikKKwkJLyogbm90IHF1aXRlIHVzZWZ1bGwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCisJCXJldHVybiAwOworCW5ldGRldiA9IGNhcmQtPm5ldFswXTsKKwlpZiAoY21kICYgQ01EX0JVUzIpCisJCW5ldGRldiA9IGNhcmQtPm5ldFsxXTsKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChjbWQgJiBDTURfRVJSKSB7CisJCXVpbnQ4X3QgY2FuX3N0YXRlLCBzdGF0ZTsKKworCQlzdGF0ZSA9ICpwdHIrKzsKKworCQltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHOworCQltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCisJCWlmIChzdGF0ZSAmIFNGX01BU0tfQlVTT0ZGKSB7CisJCQljYW5fc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CisJCQlzdGF0ZSA9IFNUQVRFX0JVU09GRjsKKwkJfSBlbHNlIGlmIChzdGF0ZSAmIFNGX01BU0tfRVBBU1NJVkUpIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CisJCQltc2cuZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFOworCQkJc3RhdGUgPSBTVEFURV9FUEFTU0lWRTsKKwkJfSBlbHNlIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCXN0YXRlID0gU1RBVEVfRUFDVElWRTsKKwkJfQorCQkvKiB1cGRhdGUgRFBSQU0gKi8KKwkJaW93cml0ZTgoc3RhdGUsICZjYXJkLT5kcHJhbVtwcml2LT5pbmRleCA/CisJCQkJRFBSQU1fSU5GT19CVVNTVEFURTIgOiBEUFJBTV9JTkZPX0JVU1NUQVRFXSk7CisJCS8qIHRpbWVzdGFtcCAqLworCQl0bXBfdTMyID0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJcHRyICs9IDQ7CisJCWt0aW1lID0gc29mdGluZ19yYXcya3RpbWUoY2FyZCwgdG1wX3UzMik7CisKKwkJKytuZXRkZXYtPnN0YXRzLnJ4X2Vycm9yczsKKwkJLyogdXBkYXRlIGludGVybmFsIHN0YXR1cyAqLworCQlpZiAoY2FuX3N0YXRlICE9IHByaXYtPmNhbi5zdGF0ZSkgeworCQkJcHJpdi0+Y2FuLnN0YXRlID0gY2FuX3N0YXRlOworCQkJaWYgKGNhbl9zdGF0ZSA9PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSkKKwkJCQkrK3ByaXYtPmNhbi5jYW5fc3RhdHMuZXJyb3JfcGFzc2l2ZTsKKwkJCWVsc2UgaWYgKGNhbl9zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikgeworCQkJCS8qIHRoaXMgY2FsbHMgY2FuX2Nsb3NlX2NsZWFudXAoKSAqLworCQkJCWNhbl9idXNfb2ZmKG5ldGRldik7CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJfQorCQkJLyogdHJpZ2dlciBzb2NrZXRjYW4gKi8KKwkJCXNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWUpOworCQl9CisKKwl9IGVsc2UgeworCQlpZiAoY21kICYgQ01EX1JUUikKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOworCQltc2cuY2FuX2RsYyA9IGdldF9jYW5fZGxjKCpwdHIrKyk7CisJCWlmIChjbWQgJiBDTURfWFREKSB7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FRkZfRkxBRzsKKwkJCW1zZy5jYW5faWQgfD0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJCXB0ciArPSA0OworCQl9IGVsc2UgeworCQkJbXNnLmNhbl9pZCB8PSBsZTE2X3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQkJcHRyICs9IDI7CisJCX0KKwkJLyogdGltZXN0YW1wICovCisJCXRtcF91MzIgPSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQlwdHIgKz0gNDsKKwkJa3RpbWUgPSBzb2Z0aW5nX3JhdzJrdGltZShjYXJkLCB0bXBfdTMyKTsKKwkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQltZW1jcHkoJm1zZy5kYXRhWzBdLCBwdHIsIDgpOworCQlwdHIgKz0gODsKKwkJLyogdXBkYXRlIHNvY2tldCAqLworCQlpZiAoY21kICYgQ01EX0FDSykgeworCQkJLyogYWNrbm93bGVkZ2UsIHdhcyB0eCBtc2cgKi8KKwkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQlza2IgPSBwcml2LT5jYW4uZWNob19za2JbcHJpdi0+dHguZWNob19nZXRdOworCQkJaWYgKHNrYikKKwkJCQlza2ItPnRzdGFtcCA9IGt0aW1lOworCQkJY2FuX2dldF9lY2hvX3NrYihuZXRkZXYsIHByaXYtPnR4LmVjaG9fZ2V0KTsKKwkJCSsrcHJpdi0+dHguZWNob19nZXQ7CisJCQlpZiAocHJpdi0+dHguZWNob19nZXQgPj0gVFhfRUNIT19TS0JfTUFYKQorCQkJCXByaXYtPnR4LmVjaG9fZ2V0ID0gMDsKKwkJCWlmIChwcml2LT50eC5wZW5kaW5nKQorCQkJCS0tcHJpdi0+dHgucGVuZGluZzsKKwkJCWlmIChjYXJkLT50eC5wZW5kaW5nKQorCQkJCS0tY2FyZC0+dHgucGVuZGluZzsKKwkJCSsrbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtc2cuY2FuX2RsYzsKKwkJfSBlbHNlIHsKKwkJCWludCByZXQ7CisKKwkJCXJldCA9IHNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWUpOworCQkJaWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUykgeworCQkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQkJCWlmICghKG1zZy5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQkJCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG1zZy5jYW5fZGxjOworCQkJfSBlbHNlIHsKKwkJCQkrK25ldGRldi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCX0KKwkJfQorCX0KKwkrK2NudDsKKwlyZXR1cm4gY250OworfQorCisvKgorICogcmVhbCBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJaW50IGosIG9mZnNldCwgd29ya19kb25lOworCisJd29ya19kb25lID0gMDsKKwlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCXdoaWxlIChzb2Z0aW5nX2hhbmRsZV8xKGNhcmQpID4gMCkgeworCQkrK2NhcmQtPmlycS5zdmNfY291bnQ7CisJCSsrd29ya19kb25lOworCX0KKwlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJLyogcmVzdW1lIHR4IHF1ZXVlJ3MgKi8KKwlvZmZzZXQgPSBjYXJkLT50eC5sYXN0X2J1czsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKGNhcmQtPnR4LnBlbmRpbmcgPj0gVFhNQVgpCisJCQlicmVhazsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WyhqICsgb2Zmc2V0ICsgMSkgJSBjYXJkLT5wZGF0LT5uYnVzXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCWlmICghY2FuaWZfaXNfYWN0aXZlKG5ldGRldikpCisJCQkvKiBpdCBtYWtlcyBubyBzZW5zZSB0byB3YWtlIGRlYWQgYnVzc2VzICovCisJCQljb250aW51ZTsKKwkJaWYgKHByaXYtPnR4LnBlbmRpbmcgPj0gVFhfRUNIT19TS0JfTUFYKQorCQkJY29udGludWU7CisJCSsrd29ya19kb25lOworCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJfQorCXJldHVybiB3b3JrX2RvbmUgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorCisvKgorICogaW50ZXJydXB0IHJvdXRpbmVzOgorICogc2NoZWR1bGUgdGhlICdyZWFsIGludGVycnVwdCBoYW5kbGVyJworICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdjIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXVpbnQ4X3QgaXI7CisKKwlpciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCXJldHVybiAoMSA9PSBpcikgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNvZnRpbmdfaXJxX3YxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwl1aW50OF90IGlyOworCisJaXIgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9JUlFfVE9IT1NUXSk7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lSUV9UT0hPU1RdKTsKKwlyZXR1cm4gaXIgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKK30KKworLyoKKyAqIG5ldGRldi9jYW5kZXYgaW50ZXItb3BlcmFiaWxpdHkKKyAqLworc3RhdGljIGludCBzb2Z0aW5nX25ldGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCByZXQ7CisKKwkvKiBjaGVjayBvciBkZXRlcm1pbmUgYW5kIHNldCBiaXR0aW1lICovCisJcmV0ID0gb3Blbl9jYW5kZXYobmRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19uZXRkZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgcmV0OworCisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKworCS8qIHNvZnRpbmcgY3ljbGUgZG9lcyBjbG9zZV9jYW5kZXYoKSAqLworCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19jYW5kZXZfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gY2FuX21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDQU5fTU9ERV9TVEFSVDoKKwkJLyogc29mdGluZ19zdGFydHN0b3AgZG9lcyBjbG9zZV9jYW5kZXYoKSAqLworCQlyZXQgPSBzb2Z0aW5nX3N0YXJ0c3RvcChuZGV2LCAxKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIENBTl9NT0RFX1NUT1A6CisJY2FzZSBDQU5fTU9ERV9TTEVFUDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNvZnRpbmcgZGV2aWNlIG1hbmFnZW1lbnQgaGVscGVycworICovCitpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcmQtPmlycS5ucikgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgIWVuYWJsZSkgeworCQlmcmVlX2lycShjYXJkLT5pcnEubnIsIGNhcmQpOworCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMDsKKwl9IGVsc2UgaWYgKCFjYXJkLT5pcnEucmVxdWVzdGVkICYmIGVuYWJsZSkgeworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjYXJkLT5pcnEubnIsCisJCQkJKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgPworCQkJCQlzb2Z0aW5nX2lycV92MiA6IHNvZnRpbmdfaXJxX3YxLAorCQkJCXNvZnRpbmdfaXJxX3RocmVhZCwgSVJRRl9TSEFSRUQsCisJCQkJZGV2X25hbWUoJmNhcmQtPnBkZXYtPmRldiksIGNhcmQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJInJlcXVlc3RfdGhyZWFkZWRfaXJxKCV1KSBmYWlsZWRcbiIsCisJCQkJCWNhcmQtPmlycS5ucik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19jYXJkX3NodXRkb3duKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCBmd191cCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKSkKKwkJLyogcmV0dXJuIC1FUkVTVEFSVFNZUyAqLzsKKwlmd191cCA9IGNhcmQtPmZ3LnVwOworCWNhcmQtPmZ3LnVwID0gMDsKKworCWlmIChjYXJkLT5pcnEucmVxdWVzdGVkICYmIGNhcmQtPmlycS5ucikgeworCQlmcmVlX2lycShjYXJkLT5pcnEubnIsIGNhcmQpOworCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMDsKKwl9CisJaWYgKGZ3X3VwKSB7CisJCWlmIChjYXJkLT5wZGF0LT5lbmFibGVfaXJxKQorCQkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAwKTsKKwkJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJCWlmIChjYXJkLT5wZGF0LT5yZXNldCkKKwkJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCX0KKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nX2NhcmRfYm9vdChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0LCBqOworCXN0YXRpYyBjb25zdCB1aW50OF90IHN0cmVhbVtdID0geworCQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCB9OworCXVuc2lnbmVkIGNoYXIgYmFja1tzaXplb2Yoc3RyZWFtKV07CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoY2FyZC0+ZncudXApIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHJlc2V0IGJvYXJkICovCisJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMSk7CisJLyogYm9vdCBjYXJkICovCisJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwlmb3IgKGogPSAwOyAoaiArIHNpemVvZihzdHJlYW0pKSA8IGNhcmQtPmRwcmFtX3NpemU7CisJCQlqICs9IHNpemVvZihzdHJlYW0pKSB7CisKKwkJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW2pdLCBzdHJlYW0sIHNpemVvZihzdHJlYW0pKTsKKwkJLyogZmx1c2ggSU8gY2FjaGUgKi8KKwkJbWIoKTsKKwkJbWVtY3B5X2Zyb21pbyhiYWNrLCAmY2FyZC0+ZHByYW1bal0sIHNpemVvZihzdHJlYW0pKTsKKworCQlpZiAoIW1lbWNtcChiYWNrLCBzdHJlYW0sIHNpemVvZihzdHJlYW0pKSkKKwkJCWNvbnRpbnVlOworCQkvKiBtZW1vcnkgaXMgbm90IGVxdWFsICovCisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZHByYW0gZmFpbGVkIGF0IDB4JTA0eFxuIiwgaik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwl3bWIoKTsKKwkvKiBsb2FkIGJvb3QgZmlybXdhcmUgKi8KKwlyZXQgPSBzb2Z0aW5nX2xvYWRfZncoY2FyZC0+cGRhdC0+Ym9vdC5mdywgY2FyZCwgY2FyZC0+ZHByYW0sCisJCQkJY2FyZC0+ZHByYW1fc2l6ZSwKKwkJCQljYXJkLT5wZGF0LT5ib290Lm9mZnMgLSBjYXJkLT5wZGF0LT5ib290LmFkZHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBsb2FkIGxvYWRlciBmaXJtd2FyZSAqLworCXJldCA9IHNvZnRpbmdfbG9hZF9mdyhjYXJkLT5wZGF0LT5sb2FkLmZ3LCBjYXJkLCBjYXJkLT5kcHJhbSwKKwkJCQljYXJkLT5kcHJhbV9zaXplLAorCQkJCWNhcmQtPnBkYXQtPmxvYWQub2ZmcyAtIGNhcmQtPnBkYXQtPmxvYWQuYWRkcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAwKTsKKwlzb2Z0aW5nX2Nscl9yZXNldF9kcHJhbShjYXJkKTsKKwlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAwLCAiY2FyZCBib290Iik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCXJldCA9IHNvZnRpbmdfbG9hZF9hcHBfZncoY2FyZC0+cGRhdC0+YXBwLmZ3LCBjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBzb2Z0aW5nX2NoaXBfcG93ZXJvbihjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwljYXJkLT5mdy51cCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZDoKKwljYXJkLT5mdy51cCA9IDA7CisJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMCk7CisJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBuZXRkZXYgc3lzZnMKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2MnNvZnRpbmcobmRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcHJpdi0+aW5kZXgpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2NoaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBwcml2LT5jaGlwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAyeFxuIiwgcHJpdi0+b3V0cHV0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJdmFsICY9IDB4RkY7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcHJpdi0+b3V0cHV0ID0gdmFsOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIoY2hhbm5lbCwgU19JUlVHTywgc2hvd19jaGFubmVsLCBOVUxMKTsKK3N0YXRpYyBjb25zdCBERVZJQ0VfQVRUUihjaGlwLCBTX0lSVUdPLCBzaG93X2NoaXAsIE5VTEwpOworc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKG91dHB1dCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfb3V0cHV0LCBzdG9yZV9vdXRwdXQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgbmV0ZGV2X3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NoYW5uZWwuYXR0ciwKKwkmZGV2X2F0dHJfY2hpcC5hdHRyLAorCSZkZXZfYXR0cl9vdXRwdXQuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5ldGRldl9zeXNmc19ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopbmV0ZGV2X3N5c2ZzX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzb2Z0aW5nX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gc29mdGluZ19uZXRkZXZfb3BlbiwKKwkubmRvX3N0b3AgPSBzb2Z0aW5nX25ldGRldl9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAk9IHNvZnRpbmdfbmV0ZGV2X3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3Qgc29mdGluZ19idHJfY29uc3QgPSB7CisJLnRzZWcxX21pbiA9IDEsCisJLnRzZWcxX21heCA9IDE2LAorCS50c2VnMl9taW4gPSAxLAorCS50c2VnMl9tYXggPSA4LAorCS5zandfbWF4ID0gNCwgLyogb3ZlcnJ1bGVkICovCisJLmJycF9taW4gPSAxLAorCS5icnBfbWF4ID0gMzIsIC8qIG92ZXJydWxlZCAqLworCS5icnBfaW5jID0gMSwKK307CisKKworc3RhdGljIF9fZGV2aW5pdCBzdHJ1Y3QgbmV0X2RldmljZSAqc29mdGluZ19uZXRkZXZfY3JlYXRlKHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQl1aW50MTZfdCBjaGlwX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKworCW5ldGRldiA9IGFsbG9jX2NhbmRldihzaXplb2YoKnByaXYpLCBUWF9FQ0hPX1NLQl9NQVgpOworCWlmICghbmV0ZGV2KSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiYWxsb2NfY2FuZGV2IGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlwcml2LT5uZXRkZXYgPSBuZXRkZXY7CisJcHJpdi0+Y2FyZCA9IGNhcmQ7CisJbWVtY3B5KCZwcml2LT5idHJfY29uc3QsICZzb2Z0aW5nX2J0cl9jb25zdCwgc2l6ZW9mKHByaXYtPmJ0cl9jb25zdCkpOworCXByaXYtPmJ0cl9jb25zdC5icnBfbWF4ID0gY2FyZC0+cGRhdC0+bWF4X2JycDsKKwlwcml2LT5idHJfY29uc3Quc2p3X21heCA9IGNhcmQtPnBkYXQtPm1heF9zanc7CisJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZwcml2LT5idHJfY29uc3Q7CisJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSA4MDAwMDAwOworCXByaXYtPmNoaXAgPSBjaGlwX2lkOworCXByaXYtPm91dHB1dCA9IHNvZnRpbmdfZGVmYXVsdF9vdXRwdXQobmV0ZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZjYXJkLT5wZGV2LT5kZXYpOworCisJbmV0ZGV2LT5mbGFncyB8PSBJRkZfRUNITzsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmc29mdGluZ19uZXRkZXZfb3BzOworCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IHNvZnRpbmdfY2FuZGV2X3NldF9tb2RlOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTOworCisJcmV0dXJuIG5ldGRldjsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ19uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmV0OworCisJbmV0ZGV2LT5zeXNmc19ncm91cHNbMF0gPSAmbmV0ZGV2X3N5c2ZzX2dyb3VwOworCXJldCA9IHJlZ2lzdGVyX2NhbmRldihuZXRkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2FsZXJ0KCZuZXRkZXYtPmRldiwgInJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX25ldGRldl9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJdW5yZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsKKwlmcmVlX2NhbmRldihuZXRkZXYpOworfQorCisvKgorICogc3lzZnMgZm9yIFBsYXRmb3JtIGRldmljZQorICovCisjZGVmaW5lIERFVl9BVFRSX1JPKG5hbWUsIG1lbWJlcikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGNhcmQtPm1lbWJlcik7IFwKK30gXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIDA0NDQsIHNob3dfIyNuYW1lLCBOVUxMKQorCisjZGVmaW5lIERFVl9BVFRSX1JPX1NUUihuYW1lLCBtZW1iZXIpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjYXJkLT5tZW1iZXIpOyBcCit9IFwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCBzaG93XyMjbmFtZSwgTlVMTCkKKworREVWX0FUVFJfUk8oc2VyaWFsLCBpZC5zZXJpYWwpOworREVWX0FUVFJfUk9fU1RSKGZpcm13YXJlLCBwZGF0LT5hcHAuZncpOworREVWX0FUVFJfUk8oZmlybXdhcmVfdmVyc2lvbiwgaWQuZndfdmVyc2lvbik7CitERVZfQVRUUl9ST19TVFIoaGFyZHdhcmUsIHBkYXQtPm5hbWUpOworREVWX0FUVFJfUk8oaGFyZHdhcmVfdmVyc2lvbiwgaWQuaHdfdmVyc2lvbik7CitERVZfQVRUUl9STyhsaWNlbnNlLCBpZC5saWNlbnNlKTsKK0RFVl9BVFRSX1JPKGZyZXF1ZW5jeSwgaWQuZnJlcSk7CitERVZfQVRUUl9STyh0eHBlbmRpbmcsIHR4LnBlbmRpbmcpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc29mdGluZ19wZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3NlcmlhbC5hdHRyLAorCSZkZXZfYXR0cl9maXJtd2FyZS5hdHRyLAorCSZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX2hhcmR3YXJlLmF0dHIsCisJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24uYXR0ciwKKwkmZGV2X2F0dHJfbGljZW5zZS5hdHRyLAorCSZkZXZfYXR0cl9mcmVxdWVuY3kuYXR0ciwKKwkmZGV2X2F0dHJfdHhwZW5kaW5nLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNvZnRpbmdfcGRldl9ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gc29mdGluZ19wZGV2X2F0dHJzLAorfTsKKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlcgorICovCitzdGF0aWMgX19kZXZleGl0IGludCBzb2Z0aW5nX3BkZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgajsKKworCS8qIGZpcnN0LCBkaXNhYmxlIGNhcmQqLworCXNvZnRpbmdfY2FyZF9zaHV0ZG93bihjYXJkKTsKKworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIWNhcmQtPm5ldFtqXSkKKwkJCWNvbnRpbnVlOworCQlzb2Z0aW5nX25ldGRldl9jbGVhbnVwKGNhcmQtPm5ldFtqXSk7CisJCWNhcmQtPm5ldFtqXSA9IE5VTEw7CisJfQorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworCisJaW91bm1hcChjYXJkLT5kcHJhbSk7CisJa2ZyZWUoY2FyZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdfcGRldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCWludCByZXQ7CisJaW50IGo7CisKKwlpZiAoIXBkYXQpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHBkYXQtPm5idXMgPiBBUlJBWV9TSVpFKGNhcmQtPm5ldCkpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiV1IG5ldHM/P1xuIiwgcGRhdC0+bmJ1cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2FyZC0+cGRhdCA9IHBkYXQ7CisJY2FyZC0+cGRldiA9IHBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+ZncubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnNwaW4pOworCisJcmV0ID0gLUVJTlZBTDsKKwlwcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXByZXMpCisJCWdvdG8gcGxhdGZvcm1fcmVzb3VyY2VfZmFpbGVkOzsKKwljYXJkLT5kcHJhbV9waHlzID0gcHJlcy0+c3RhcnQ7CisJY2FyZC0+ZHByYW1fc2l6ZSA9IHByZXMtPmVuZCAtIHByZXMtPnN0YXJ0ICsgMTsKKwljYXJkLT5kcHJhbSA9IGlvcmVtYXBfbm9jYWNoZShjYXJkLT5kcHJhbV9waHlzLCBjYXJkLT5kcHJhbV9zaXplKTsKKwlpZiAoIWNhcmQtPmRwcmFtKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZHByYW0gaW9yZW1hcCBmYWlsZWRcbiIpOworCQlnb3RvIGlvcmVtYXBfZmFpbGVkOworCX0KKworCXByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChwcmVzKQorCQljYXJkLT5pcnEubnIgPSBwcmVzLT5zdGFydDsKKworCS8qIHJlc2V0IGNhcmQgKi8KKwlyZXQgPSBzb2Z0aW5nX2NhcmRfYm9vdChjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfYWxlcnQoJnBkZXYtPmRldiwgImZhaWxlZCB0byBib290XG4iKTsKKwkJZ290byBib290X2ZhaWxlZDsKKwl9CisKKwkvKiBvbmx5IG5vdywgdGhlIGNoaXAncyBhcmUga25vd24gKi8KKwljYXJkLT5pZC5mcmVxID0gY2FyZC0+cGRhdC0+ZnJlcTsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAic3lzZnMgZmFpbGVkXG4iKTsKKwkJZ290byBzeXNmc19mYWlsZWQ7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJY2FyZC0+bmV0W2pdID0gbmV0ZGV2ID0KKwkJCXNvZnRpbmdfbmV0ZGV2X2NyZWF0ZShjYXJkLCBjYXJkLT5pZC5jaGlwW2pdKTsKKwkJaWYgKCFuZXRkZXYpIHsKKwkJCWRldl9hbGVydCgmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1ha2UgY2FuWyVpXSIsIGopOworCQkJZ290byBuZXRkZXZfZmFpbGVkOworCQl9CisJCXByaXYgPSBuZXRkZXZfcHJpdihjYXJkLT5uZXRbal0pOworCQlwcml2LT5pbmRleCA9IGo7CisJCXJldCA9IHNvZnRpbmdfbmV0ZGV2X3JlZ2lzdGVyKG5ldGRldik7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfY2FuZGV2KG5ldGRldik7CisJCQljYXJkLT5uZXRbal0gPSBOVUxMOworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FuWyVpXVxuIiwgaik7CisJCQlnb3RvIG5ldGRldl9mYWlsZWQ7CisJCX0KKwl9CisJZGV2X2luZm8oJmNhcmQtPnBkZXYtPmRldiwgIiVzIHJlYWR5LlxuIiwgY2FyZC0+cGRhdC0+bmFtZSk7CisJcmV0dXJuIDA7CisKK25ldGRldl9mYWlsZWQ6CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghY2FyZC0+bmV0W2pdKQorCQkJY29udGludWU7CisJCXNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoY2FyZC0+bmV0W2pdKTsKKwl9CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CitzeXNmc19mYWlsZWQ6CisJc29mdGluZ19jYXJkX3NodXRkb3duKGNhcmQpOworYm9vdF9mYWlsZWQ6CisJaW91bm1hcChjYXJkLT5kcHJhbSk7Citpb3JlbWFwX2ZhaWxlZDoKK3BsYXRmb3JtX3Jlc291cmNlX2ZhaWxlZDoKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2Z0aW5nX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzb2Z0aW5nIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBzb2Z0aW5nX3BkZXZfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNvZnRpbmdfcGRldl9yZW1vdmUpLAorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzb2Z0aW5nIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRpbmdfc3RhcnQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb2Z0aW5nX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2Z0aW5nX3N0b3Aodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc29mdGluZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb2Z0aW5nX3N0YXJ0KTsKK21vZHVsZV9leGl0KHNvZnRpbmdfc3RvcCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29mdGluZyBEUFJBTSBDQU4gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJLdXJ0IFZhbiBEaWpjayA8a3VydC52YW4uZGlqY2tAZWlhLmJlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmgKQEAgLTAsMCArMSw0MCBAQAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpZm5kZWYgX1NPRlRJTkdfREVWSUNFX0hfCisjZGVmaW5lIF9TT0ZUSU5HX0RFVklDRV9IXworCisvKiBzb2Z0aW5nIGZpcm13YXJlIGRpcmVjdG9yeSBwcmVmaXggKi8KKyNkZWZpbmUgZndfZGlyICJzb2Z0aW5nLTQuNi8iCisKK3N0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBtYW5mOworCXVuc2lnbmVkIGludCBwcm9kOworCS8qCisJICogZ2VuZXJhdGlvbgorCSAqIDFzdCB3aXRoIE5FQyBvciBTSkExMDAwCisJICogOGJpdCwgZXhjbHVzaXZlIGludGVycnVwdCwgLi4uCisJICogMm5kIG9ubHkgU0pBMTAwMAorCSAqIDE2Yml0LCBzaGFyZWQgaW50ZXJydXB0CisJICovCisJaW50IGdlbmVyYXRpb247CisJaW50IG5idXM7IC8qICMgYnVzc2VzIG9uIGRldmljZSAqLworCXVuc2lnbmVkIGludCBmcmVxOyAvKiBvcGVyYXRpbmcgZnJlcXVlbmN5IGluIEh6ICovCisJdW5zaWduZWQgaW50IG1heF9icnA7CisJdW5zaWduZWQgaW50IG1heF9zanc7CisJdW5zaWduZWQgbG9uZyBkcHJhbV9zaXplOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCWNvbnN0IGNoYXIgKmZ3OworCX0gYm9vdCwgbG9hZCwgYXBwOworCS8qCisJICogcmVzZXQoKSBmdW5jdGlvbgorCSAqIGJyaW5nIHBkZXYgaW4gb3Igb3V0IG9mIHJlc2V0LCBkZXBlbmRpbmcgb24gdmFsdWUKKwkgKi8KKwlpbnQgKCpyZXNldCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKKwlpbnQgKCplbmFibGVfaXJxKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggMjYzYTI5NC4uN2ZmMTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtNjk5LDEzICs2OTksMTMgQEAKIHN0YXRpYyB2b2lkIGNuaWNfc2V0dXBfcGFnZV90Ymwoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBjbmljX2RtYSAqZG1hKQogewogCWludCBpOwotCXUzMiAqcGFnZV90YWJsZSA9IGRtYS0+cGd0Ymw7CisJX19sZTMyICpwYWdlX3RhYmxlID0gKF9fbGUzMiAqKSBkbWEtPnBndGJsOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJLyogRWFjaCBlbnRyeSBuZWVkcyB0byBiZSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gKi8KLQkJKnBhZ2VfdGFibGUgPSAodTMyKSAoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMigodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOwogCQlwYWdlX3RhYmxlKys7Ci0JCSpwYWdlX3RhYmxlID0gKHUzMikgZG1hLT5wZ19tYXBfYXJyW2ldOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmYpOwogCQlwYWdlX3RhYmxlKys7CiAJfQogfQpAQCAtNzEzLDEzICs3MTMsMTMgQEAKIHN0YXRpYyB2b2lkIGNuaWNfc2V0dXBfcGFnZV90YmxfbGUoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBjbmljX2RtYSAqZG1hKQogewogCWludCBpOwotCXUzMiAqcGFnZV90YWJsZSA9IGRtYS0+cGd0Ymw7CisJX19sZTMyICpwYWdlX3RhYmxlID0gKF9fbGUzMiAqKSBkbWEtPnBndGJsOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJLyogRWFjaCBlbnRyeSBuZWVkcyB0byBiZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdC4gKi8KLQkJKnBhZ2VfdGFibGUgPSBkbWEtPnBnX21hcF9hcnJbaV0gJiAweGZmZmZmZmZmOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmYpOwogCQlwYWdlX3RhYmxlKys7Ci0JCSpwYWdlX3RhYmxlID0gKHUzMikgKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKIAkJcGFnZV90YWJsZSsrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwppbmRleCAwNTljMWVlLi5lYzM1ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC0yNzEwLDYgKzI3MTAsOCBAQAogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOwogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgRlVMTF9JTklUX0RPTkUpKSB7CiAJCWVyciA9IGN4Z2JfdXAoYWRhcHRlcik7CiAJCWlmIChlcnIgPCAwKQpAQCAtMzY2MSw3ICszNjYzLDYgQEAKIAkJcGktPnhhY3RfYWRkcl9maWx0ID0gLTE7CiAJCXBpLT5yeF9vZmZsb2FkID0gUlhfQ1NPOwogCQlwaS0+cG9ydF9pZCA9IGk7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwogCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IFRTT19GTEFHUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDFiNDhiNjguLjhiMDA4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAKIAkJCQl9CiAJCQl9CiAJCQkvKiBDaGFuZ2UgYnVmZmVyIG93bmVyc2hpcCBmb3IgdGhpcyBsYXN0IGZyYW1lLCBiYWNrIHRvIHRoZSBhZGFwdGVyICovCi0JCQlmb3IgKDsgbHAtPnJ4X29sZCAhPSBlbnRyeTsgbHAtPnJ4X29sZCA9ICgrK2xwLT5yeF9vbGQpICYgbHAtPnJ4UmluZ01hc2spIHsKKwkJCWZvciAoOyBscC0+cnhfb2xkICE9IGVudHJ5OyBscC0+cnhfb2xkID0gKGxwLT5yeF9vbGQgKyAxKSAmIGxwLT5yeFJpbmdNYXNrKSB7CiAJCQkJd3JpdGVsKHJlYWRsKCZscC0+cnhfcmluZ1tscC0+cnhfb2xkXS5iYXNlKSB8IFJfT1dOLCAmbHAtPnJ4X3JpbmdbbHAtPnJ4X29sZF0uYmFzZSk7CiAJCQl9CiAJCQl3cml0ZWwocmVhZGwoJmxwLT5yeF9yaW5nW2VudHJ5XS5iYXNlKSB8IFJfT1dOLCAmbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UpOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJLyoKIAkJICAgKiogVXBkYXRlIGVudHJ5IGluZm9ybWF0aW9uCiAJCSAqLwotCQlscC0+cnhfbmV3ID0gKCsrbHAtPnJ4X25ldykgJiBscC0+cnhSaW5nTWFzazsKKwkJbHAtPnJ4X25ldyA9IChscC0+cnhfbmV3ICsgMSkgJiBscC0+cnhSaW5nTWFzazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExNDgsNyArMTE0OCw3IEBACiAJCX0KIAogCQkvKiBVcGRhdGUgYWxsIHRoZSBwb2ludGVycyAqLwotCQlscC0+dHhfb2xkID0gKCsrbHAtPnR4X29sZCkgJiBscC0+dHhSaW5nTWFzazsKKwkJbHAtPnR4X29sZCA9IChscC0+dHhfb2xkICsgMSkgJiBscC0+dHhSaW5nTWFzazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCBlMWE4MjE2Li5jMDVkYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0xNzUzLDggKzE3NTMsNiBAQAogCiAJLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIHF1ZXVlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwotCQlucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyA9IDA7CiAJCXNrYiA9IG5wLT5yeF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBkZXYsCkBAIC0xNzYzLDYgKzE3NjEsOCBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCW5wLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwogCQl9CisJCW5wLT5yeF9yaW5nW2ldLnN0YXR1cyA9IDA7CisJCW5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvID0gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7CiAJCXNrYiA9IG5wLT50eF9za2J1ZmZbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwppbmRleCBhZWQyMjNiLi43NTAxZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKQEAgLTEyNCw2ICsxMjQsNyBAQAogCWNhc2UgTTg4RTEwMDBfSV9QSFlfSUQ6CiAJY2FzZSBNODhFMTAxMV9JX1BIWV9JRDoKIAljYXNlIE04OEUxMTExX0lfUEhZX0lEOgorCWNhc2UgTTg4RTExMThfRV9QSFlfSUQ6CiAJCWh3LT5waHlfdHlwZSA9IGUxMDAwX3BoeV9tODg7CiAJCWJyZWFrOwogCWNhc2UgSUdQMDFFMTAwMF9JX1BIWV9JRDoKQEAgLTMyMjIsNyArMzIyMyw4IEBACiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfY2U0MTAwOgogCQlpZiAoKGh3LT5waHlfaWQgPT0gUlRMODIxMUJfUEhZX0lEKSB8fAotCQkgICAgKGh3LT5waHlfaWQgPT0gUlRMODIwMU5fUEhZX0lEKSkKKwkJICAgIChody0+cGh5X2lkID09IFJUTDgyMDFOX1BIWV9JRCkgfHwKKwkJICAgIChody0+cGh5X2lkID09IE04OEUxMTE4X0VfUEhZX0lEKSkKIAkJCW1hdGNoID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU0MToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IDE5NmVlZGEuLmM3MGIyM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtMjkxNyw2ICsyOTE3LDcgQEAKICNkZWZpbmUgTTg4RTEwMDBfMTRfUEhZX0lEIE04OEUxMDAwX0VfUEhZX0lECiAjZGVmaW5lIE04OEUxMDExX0lfUkVWXzQgICAweDA0CiAjZGVmaW5lIE04OEUxMTExX0lfUEhZX0lEICAweDAxNDEwQ0MwCisjZGVmaW5lIE04OEUxMTE4X0VfUEhZX0lEICAweDAxNDEwRTQwCiAjZGVmaW5lIEwxTFhUOTcxQV9QSFlfSUQgICAweDAwMTM3OEUwCiAKICNkZWZpbmUgUlRMODIxMUJfUEhZX0lEICAgIDB4MDAxQ0M5MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwppbmRleCAxYzE4ZjI2Li4zMDY1ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC00MzA5LDcgKzQzMDksNiBAQAogCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiAJCQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgogCQkJICovCi0JCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAkJCS8qIHJldHVybiBpbW1lZGlhdGVseSBzaW5jZSByZXNldCBpcyBpbW1pbmVudCAqLwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKaW5kZXggMTEyYzVhYS4uOTA3YjA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYworKysgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCkBAIC04MTIsNyArODEyLDcgQEAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKQogCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiByZWFkaW5nIFRTViBhdCBhZGRyOjB4JTA0eFxuIiwKIAkJCSBlbmRwdHIgKyAxKTsKLQllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBzaXplb2YodHN2KSwgdHN2KTsKKwllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBUU1ZfU0laRSwgdHN2KTsKIH0KIAogc3RhdGljIHZvaWQgZW5jMjhqNjBfZHVtcF90c3Yoc3RydWN0IGVuYzI4ajYwX25ldCAqcHJpdiwgY29uc3QgY2hhciAqbXNnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBkNWVkZTJkLi5lYmJkYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtMTM3MCw2ICsxMzcwLDkgQEAKIAkJaHdfZGJnKGh3LCAiIE5ldyBNQUMgQWRkciA9JXBNXG4iLCBody0+bWFjLmFkZHIpOwogCiAJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKworCQkvKiAgY2xlYXIgVk1EcSBwb29sL3F1ZXVlIHNlbGVjdGlvbiBmb3IgUkFSIDAgKi8KKwkJaHctPm1hYy5vcHMuY2xlYXJfdm1kcShodywgMCwgSVhHQkVfQ0xFQVJfVk1EUV9BTEwpOwogCX0KIAlody0+YWRkcl9jdHJsLm92ZXJmbG93X3Byb21pc2MgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggNjM0MmQ0OC4uODc1Mzk4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJdW5zaWduZWQgaW50IHRoaXNvZmYgPSAwOwogCXVuc2lnbmVkIGludCB0aGlzbGVuID0gMDsKIAl1MzIgZmNidWZmLCBmY2RtYXJ3LCBmY2ZsdHJ3OwotCWRtYV9hZGRyX3QgYWRkcjsKKwlkbWFfYWRkcl90IGFkZHIgPSAwOwogCiAJaWYgKCFuZXRkZXYgfHwgIXNnbCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggNjAyMDc4Yi4uZmJhZTcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KIAkJCSAgICAgICJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIjsKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMy4wLjEyLWsyIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMy4yLjktazIiCiBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjaGFyIGl4Z2JlX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDEwIEludGVsIENvcnBvcmF0aW9uLiI7CiAKQEAgLTMxNzYsOSArMzE3NiwxNiBAQAogCXUzMiBtaGFkZCwgaGxyZWcwOwogCiAJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIHBhY2tldCBzcGxpdCBtb2RlIG9yIG5vdCAqLworCS8qIE9uIGJ5IGRlZmF1bHQgKi8KKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisKIAkvKiBEbyBub3QgdXNlIHBhY2tldCBzcGxpdCBpZiB3ZSdyZSBpbiBTUi1JT1YgTW9kZSAqLwotCWlmICghYWRhcHRlci0+bnVtX3ZmcykKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCWlmIChhZGFwdGVyLT5udW1fdmZzKQorCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCisJLyogRGlzYWJsZSBwYWNrZXQgc3BsaXQgZHVlIHRvIDgyNTk5IGVycmF0dW0gIzQ1ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKIAogCS8qIFNldCB0aGUgUlggYnVmZmVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKQEAgLTQ4NjMsMTYgKzQ4NzAsMTMgQEAKIHsKIAlpbnQgcV9pZHgsIG51bV9xX3ZlY3RvcnM7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcjsKLQlpbnQgbmFwaV92ZWN0b3JzOwogCWludCAoKnBvbGwpKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKIAkJbnVtX3FfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOwotCQluYXBpX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOwogCQlwb2xsID0gJml4Z2JlX2NsZWFuX3J4dHhfbWFueTsKIAl9IGVsc2UgewogCQludW1fcV92ZWN0b3JzID0gMTsKLQkJbmFwaV92ZWN0b3JzID0gMTsKIAkJcG9sbCA9ICZpeGdiZV9wb2xsOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKaW5kZXggNDdiMTU3My4uMTg3YjNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCkBAIC0xMTAsMTIgKzExMCwxMCBAQAogCXJldHVybiBhZGFwdGVyLT5ody5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgdmlkLCB2ZiwgKGJvb2wpYWRkKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfdm1vbHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZmLCBib29sIGF1cGUpCiB7CiAJdTMyIHZtb2xyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZNT0xSKHZmKSk7CiAJdm1vbHIgfD0gKElYR0JFX1ZNT0xSX1JPTVBFIHwKLQkJICBJWEdCRV9WTU9MUl9ST1BFIHwKIAkJICBJWEdCRV9WTU9MUl9CQU0pOwogCWlmIChhdXBlKQogCQl2bW9sciB8PSBJWEdCRV9WTU9MUl9BVVBFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCmluZGV4IDNhODkyMzkuLmYyNTE4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKQEAgLTEzMywxNyArMTMzLDE3IEBACiAJfQogCiAJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgSVhHQkVfQ1RSTF9SU1QpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgcmVzZXRfYml0KSk7CiAJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwogCiAJLyogUG9sbCBmb3IgcmVzZXQgYml0IHRvIHNlbGYtY2xlYXIgaW5kaWNhdGluZyByZXNldCBpcyBjb21wbGV0ZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXVkZWxheSgxKTsKIAkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKLQkJaWYgKCEoY3RybCAmIElYR0JFX0NUUkxfUlNUKSkKKwkJaWYgKCEoY3RybCAmIHJlc2V0X2JpdCkpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGN0cmwgJiBJWEdCRV9DVFJMX1JTVCkgeworCWlmIChjdHJsICYgcmVzZXRfYml0KSB7CiAJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CiAJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA0ZmZkYzE4Li4yNzY1YTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtMTI4Niw2ICsxMjg2LDIxIEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzY0KSB9LCAvKiBNVDI2NDY4IENvbm5lY3RYIEVOIDEwR2lnRSBQQ0llIGdlbjIqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc0NikgfSwgLyogTVQyNjQzOCBDb25uZWN0WCBFTiA0MEdpZ0UgUENJZSBnZW4yIDVHVC9zICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzZlKSB9LCAvKiBNVDI2NDc4IENvbm5lY3RYMiA0MEdpZ0UgUENJZSBnZW4yICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDAyKSB9LCAvKiBNVDI1NDAwIEZhbWlseSBbQ29ubmVjdFgtMiBWaXJ0dWFsIEZ1bmN0aW9uXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwMykgfSwgLyogTVQyNzUwMCBGYW1pbHkgW0Nvbm5lY3RYLTNdICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA0KSB9LCAvKiBNVDI3NTAwIEZhbWlseSBbQ29ubmVjdFgtMyBWaXJ0dWFsIEZ1bmN0aW9uXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNSkgfSwgLyogTVQyNzUxMCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDYpIH0sIC8qIE1UMjc1MTEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA3KSB9LCAvKiBNVDI3NTIwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwOCkgfSwgLyogTVQyNzUyMSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDkpIH0sIC8qIE1UMjc1MzAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBhKSB9LCAvKiBNVDI3NTMxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwYikgfSwgLyogTVQyNzU0MCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGMpIH0sIC8qIE1UMjc1NDEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBkKSB9LCAvKiBNVDI3NTUwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwZSkgfSwgLyogTVQyNzU1MSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGYpIH0sIC8qIE1UMjc1NjAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDEwKSB9LCAvKiBNVDI3NTYxIEZhbWlseSAqLwogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAyNTQxMzIxLi45ZmI1OWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtNDQ4OSw2ICs0NDg5LDkgQEAKIHsKIAlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKIAlpbnQgZmlyc3RfcnhfY2hhbm5lbCwgZmlyc3RfdHhfY2hhbm5lbDsKKwlpbnQgbnVtX3J4X3JpbmdzLCBudW1fdHhfcmluZ3M7CisJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnhfcmluZ3M7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfcmluZ3M7CiAJaW50IGksIHBvcnQsIGVycjsKIAogCXBvcnQgPSBucC0+cG9ydDsKQEAgLTQ0OTgsMTggKzQ1MDEsMjEgQEAKIAkJZmlyc3RfdHhfY2hhbm5lbCArPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtpXTsKIAl9CiAKLQlucC0+bnVtX3J4X3JpbmdzID0gcGFyZW50LT5yeGNoYW5fcGVyX3BvcnRbcG9ydF07Ci0JbnAtPm51bV90eF9yaW5ncyA9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W3BvcnRdOworCW51bV9yeF9yaW5ncyA9IHBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W3BvcnRdOworCW51bV90eF9yaW5ncyA9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W3BvcnRdOwogCi0JbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhucC0+ZGV2LCBucC0+bnVtX3J4X3JpbmdzKTsKLQluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5wLT5kZXYsIG5wLT5udW1fdHhfcmluZ3MpOwotCi0JbnAtPnJ4X3JpbmdzID0ga2NhbGxvYyhucC0+bnVtX3J4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJcnhfcmluZ3MgPSBrY2FsbG9jKG51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCByeF9yaW5nX2luZm8pLAorCQkJICAgR0ZQX0tFUk5FTCk7CiAJZXJyID0gLUVOT01FTTsKLQlpZiAoIW5wLT5yeF9yaW5ncykKKwlpZiAoIXJ4X3JpbmdzKQogCQlnb3RvIG91dF9lcnI7CiAKKwlucC0+bnVtX3J4X3JpbmdzID0gbnVtX3J4X3JpbmdzOworCXNtcF93bWIoKTsKKwlucC0+cnhfcmluZ3MgPSByeF9yaW5nczsKKworCW5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobnAtPmRldiwgbnVtX3J4X3JpbmdzKTsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKIAkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnJ4X3JpbmdzW2ldOwogCkBAIC00NTM4LDEyICs0NTQ0LDE4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCW5wLT50eF9yaW5ncyA9IGtjYWxsb2MobnAtPm51bV90eF9yaW5ncywgc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pLAotCQkJICAgICAgIEdGUF9LRVJORUwpOworCXR4X3JpbmdzID0ga2NhbGxvYyhudW1fdHhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgdHhfcmluZ19pbmZvKSwKKwkJCSAgIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFucC0+dHhfcmluZ3MpCisJaWYgKCF0eF9yaW5ncykKIAkJZ290byBvdXRfZXJyOwogCisJbnAtPm51bV90eF9yaW5ncyA9IG51bV90eF9yaW5nczsKKwlzbXBfd21iKCk7CisJbnAtPnR4X3JpbmdzID0gdHhfcmluZ3M7CisKKwluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5wLT5kZXYsIG51bV90eF9yaW5ncyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV90eF9yaW5nczsgaSsrKSB7CiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJm5wLT50eF9yaW5nc1tpXTsKIApAQCAtNjI0NiwxMSArNjI1OCwxNyBAQAogc3RhdGljIHZvaWQgbml1X2dldF9yeF9zdGF0cyhzdHJ1Y3Qgbml1ICpucCkKIHsKIAl1bnNpZ25lZCBsb25nIHBrdHMsIGRyb3BwZWQsIGVycm9ycywgYnl0ZXM7CisJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnhfcmluZ3M7CiAJaW50IGk7CiAKIAlwa3RzID0gZHJvcHBlZCA9IGVycm9ycyA9IGJ5dGVzID0gMDsKKworCXJ4X3JpbmdzID0gQUNDRVNTX09OQ0UobnAtPnJ4X3JpbmdzKTsKKwlpZiAoIXJ4X3JpbmdzKQorCQlnb3RvIG5vX3JpbmdzOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fcnhfcmluZ3M7IGkrKykgewotCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCA9ICZucC0+cnhfcmluZ3NbaV07CisJCXN0cnVjdCByeF9yaW5nX2luZm8gKnJwID0gJnJ4X3JpbmdzW2ldOwogCiAJCW5pdV9zeW5jX3J4X2Rpc2NhcmRfc3RhdHMobnAsIHJwLCAwKTsKIApAQCAtNjI1OSw2ICs2Mjc3LDggQEAKIAkJZHJvcHBlZCArPSBycC0+cnhfZHJvcHBlZDsKIAkJZXJyb3JzICs9IHJwLT5yeF9lcnJvcnM7CiAJfQorCitub19yaW5nczoKIAlucC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzID0gcGt0czsKIAlucC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyA9IGJ5dGVzOwogCW5wLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgPSBkcm9wcGVkOwpAQCAtNjI2OCwxNiArNjI4OCwyNCBAQAogc3RhdGljIHZvaWQgbml1X2dldF90eF9zdGF0cyhzdHJ1Y3Qgbml1ICpucCkKIHsKIAl1bnNpZ25lZCBsb25nIHBrdHMsIGVycm9ycywgYnl0ZXM7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfcmluZ3M7CiAJaW50IGk7CiAKIAlwa3RzID0gZXJyb3JzID0gYnl0ZXMgPSAwOworCisJdHhfcmluZ3MgPSBBQ0NFU1NfT05DRShucC0+dHhfcmluZ3MpOworCWlmICghdHhfcmluZ3MpCisJCWdvdG8gbm9fcmluZ3M7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV90eF9yaW5nczsgaSsrKSB7Ci0JCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJm5wLT50eF9yaW5nc1tpXTsKKwkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcnAgPSAmdHhfcmluZ3NbaV07CiAKIAkJcGt0cyArPSBycC0+dHhfcGFja2V0czsKIAkJYnl0ZXMgKz0gcnAtPnR4X2J5dGVzOwogCQllcnJvcnMgKz0gcnAtPnR4X2Vycm9yczsKIAl9CisKK25vX3JpbmdzOgogCW5wLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMgPSBwa3RzOwogCW5wLT5kZXYtPnN0YXRzLnR4X2J5dGVzID0gYnl0ZXM7CiAJbnAtPmRldi0+c3RhdHMudHhfZXJyb3JzID0gZXJyb3JzOwpAQCAtNjI4Nyw5ICs2MzE1LDEwIEBACiB7CiAJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jbml1X2dldF9yeF9zdGF0cyhucCk7Ci0Jbml1X2dldF90eF9zdGF0cyhucCk7Ci0KKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5pdV9nZXRfcnhfc3RhdHMobnApOworCQluaXVfZ2V0X3R4X3N0YXRzKG5wKTsKKwl9CiAJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYwppbmRleCBkNzM1NTMwLi40YzlhN2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKQEAgLTUxOSw3ICs1MTksOSBAQAogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCXJ0bmxfbG9jaygpOwogCXBjaF9nYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwlydG5sX3VubG9jaygpOwogfQogCiAvKioKQEAgLTUyOCwxNCArNTMwLDggQEAKICAqLwogdm9pZCBwY2hfZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCi0JcnRubF9sb2NrKCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlwY2hfZ2JlX2Rvd24oYWRhcHRlcik7Ci0JCXBjaF9nYmVfdXAoYWRhcHRlcik7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CisJcGNoX2diZV9kb3duKGFkYXB0ZXIpOworCXBjaF9nYmVfdXAoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtMjI0Nyw3ICsyMjQzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJcGNoX2diZV9oYWxfcGh5X2h3X3Jlc2V0KCZhZGFwdGVyLT5odyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDFmNDJmNmEuLmQzY2I3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0xNDg4LDEyICsxNDg4LDEwIEBACiAgICAgCiAJLyogCiAJICogV2FpdCBhIGZ1bGwgVHggdGltZSAoMS4ybXMpICsgc29tZSBndWFyZCB0aW1lLCBOUyBzYXlzIDEuNm1zIHRvdGFsLgotCSAqIEVhcmx5IGRhdGFzaGVldHMgc2FpZCB0byBwb2xsIHRoZSByZXNldCBiaXQsIGJ1dCBub3cgdGhleSBzYXkgdGhhdAotCSAqIGl0ICJpcyBub3QgYSByZWxpYWJsZSBpbmRpY2F0b3IgYW5kIHN1YnNlcXVlbnRseSBzaG91bGQgYmUgaWdub3JlZC4iCi0JICogV2Ugd2FpdCBhdCBsZWFzdCAxMG1zLgorCSAqIFdlIHdhaXQgYXQgbGVhc3QgMm1zLgogCSAqLwogCi0JbWRlbGF5KDEwKTsKKwltZGVsYXkoMik7CiAKIAkvKgogCSAqIFJlc2V0IFJCQ1JbMDFdIGJhY2sgdG8gemVybyBhcyBwZXIgbWFnaWMgaW5jYW50YXRpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBiZGU3ZDYxLi41OWNjZjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTk3Myw3ICs5NzMsOCBAQAogCQlpZiAocG0pCiAJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmdHAtPnBjaV9kZXYtPmRldik7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJbmV0aWZfaW5mbyh0cCwgaWZ1cCwgZGV2LCAibGluayB1cFxuIik7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRpZl9pbmZvKHRwLCBpZnVwLCBkZXYsICJsaW5rIHVwXG4iKTsKIAl9IGVsc2UgewogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQluZXRpZl9pbmZvKHRwLCBpZmRvd24sIGRldiwgImxpbmsgZG93blxuIik7CkBAIC0zNzU3LDcgKzM3NTgsOCBAQAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDUxNTEpOwogCiAJLyogV29yayBhcm91bmQgZm9yIFJ4RklGTyBvdmVyZmxvdy4gKi8KLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjIpIHsKIAkJdHAtPmludHJfZXZlbnQgfD0gUnhGSUZPT3ZlciB8IFBDU1RpbWVvdXQ7CiAJCXRwLT5pbnRyX2V2ZW50ICY9IH5SeE92ZXJmbG93OwogCX0KQEAgLTQ2MzksMTIgKzQ2NDEsMzMgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpICYmCi0JCSh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOwotCQkJYnJlYWs7CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBSeEZJRk9PdmVyKSkgeworCQkJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKKwkJCS8qIFdvcmsgYXJvdW5kIGZvciByeCBmaWZvIG92ZXJmbG93ICovCisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOworCQkJCWdvdG8gZG9uZTsKKwkJCS8qIFRlc3RlcnMgbmVlZGVkLiAqLworCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIwOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIxOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIzOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCQkJLyogRXhwZXJpbWVudGFsIHNjaWVuY2UuIFBrdGdlbiBwcm9vZi4gKi8KKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMjoKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKKwkJCQlpZiAoc3RhdHVzID09IFJ4RklGT092ZXIpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgU1lTRXJyKSkgewpAQCAtNDY4MCw3ICs0NzAzLDcgQEAKIAkJCShzdGF0dXMgJiBSeEZJRk9PdmVyKSA/IChzdGF0dXMgfCBSeE92ZXJmbG93KSA6IHN0YXR1cyk7CiAJCXN0YXR1cyA9IFJUTF9SMTYoSW50clN0YXR1cyk7CiAJfQotCitkb25lOgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IDU5NzZkMWQuLjY0MGUzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0xNzc3LDYgKzE3NzcsNyBAQAogCQkJCQkgICAgICAiY3VyX3J4OiU0LjRkLCBkaXJ0eV9yeDolNC40ZFxuIiwKIAkJCQkJICAgICAgbmV0X2Rldi0+bmFtZSwgc2lzX3ByaXYtPmN1cl9yeCwKIAkJCQkJICAgICAgc2lzX3ByaXYtPmRpcnR5X3J4KTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNzg0MWE4Zi4uOTNiMzJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTYwLDEyICs2MCw2IEBACiAjZGVmaW5lIEJBUl8wCTAKICNkZWZpbmUgQkFSXzIJMgogCi0jaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCi0jZGVmaW5lIFRHM19WTEFOX1RBR19VU0VEIDEKLSNlbHNlCi0jZGVmaW5lIFRHM19WTEFOX1RBR19VU0VEIDAKLSNlbmRpZgotCiAjaW5jbHVkZSAidGczLmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgpAQCAtMTM0LDkgKzEyOCw2IEBACiAJCQkJIFRHM19UWF9SSU5HX1NJWkUpCiAjZGVmaW5lIE5FWFRfVFgoTikJCSgoKE4pICsgMSkgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKQogCi0jZGVmaW5lIFRHM19SWF9ETUFfQUxJR04JCTE2Ci0jZGVmaW5lIFRHM19SWF9IRUFEUk9PTQkJCUFMSUdOKFZMQU5fSExFTiwgVEczX1JYX0RNQV9BTElHTikKLQogI2RlZmluZSBURzNfRE1BX0JZVEVfRU5BQgkJNjQKIAogI2RlZmluZSBURzNfUlhfU1REX0RNQV9TWgkJMTUzNgpAQCAtNDcyMiw4ICs0NzEzLDYgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAkJdTMyIG9wYXF1ZV9rZXksIGRlc2NfaWR4LCAqcG9zdF9wdHI7Ci0JCWJvb2wgaHdfdmxhbiBfX21heWJlX3VudXNlZCA9IGZhbHNlOwotCQl1MTYgdnRhZyBfX21heWJlX3VudXNlZCA9IDA7CiAKIAkJZGVzY19pZHggPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX0lOREVYX01BU0s7CiAJCW9wYXF1ZV9rZXkgPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX1JJTkdfTUFTSzsKQEAgLTQ3ODIsMTIgKzQ3NzEsMTIgQEAKIAkJCXRnM19yZWN5Y2xlX3J4KHRuYXBpLCB0cHIsIG9wYXF1ZV9rZXksCiAJCQkJICAgICAgIGRlc2NfaWR4LCAqcG9zdF9wdHIpOwogCi0JCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsgVkxBTl9ITEVOICsKKwkJCWNvcHlfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LCBsZW4gKwogCQkJCQkJICAgIFRHM19SQVdfSVBfQUxJR04pOwogCQkJaWYgKGNvcHlfc2tiID09IE5VTEwpCiAJCQkJZ290byBkcm9wX2l0X25vX3JlY3ljbGU7CiAKLQkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBURzNfUkFXX0lQX0FMSUdOICsgVkxBTl9ITEVOKTsKKwkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBURzNfUkFXX0lQX0FMSUdOKTsKIAkJCXNrYl9wdXQoY29weV9za2IsIGxlbik7CiAJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodHAtPnBkZXYsIGRtYV9hZGRyLCBsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgY29weV9za2ItPmRhdGEsIGxlbik7CkBAIC00ODE0LDMwICs0ODAzLDExIEBACiAJCX0KIAogCQlpZiAoZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4gJiYKLQkJICAgICEodHAtPnJ4X21vZGUgJiBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpKSB7Ci0JCQl2dGFnID0gZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLOwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JCQlpZiAodHAtPnZsZ3JwKQotCQkJCWh3X3ZsYW4gPSB0cnVlOwotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZSA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikKLQkJCQkJCSAgICBfX3NrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKKwkJICAgICEodHAtPnJ4X21vZGUgJiBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpKQorCQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsCisJCQkJCSAgICAgICBkZXNjLT5lcnJfdmxhbiAmIFJYRF9WTEFOX01BU0spOwogCi0JCQkJbWVtbW92ZSh2ZSwgc2tiLT5kYXRhICsgVkxBTl9ITEVOLAotCQkJCQlFVEhfQUxFTiAqIDIpOwotCQkJCXZlLT5oX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7Ci0JCQkJdmUtPmhfdmxhbl9UQ0kgPSBodG9ucyh2dGFnKTsKLQkJCX0KLQkJfQotCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkJaWYgKGh3X3ZsYW4pCi0JCQl2bGFuX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgdHAtPnZsZ3JwLCB2dGFnLCBza2IpOwotCQllbHNlCi0jZW5kaWYKLQkJCW5hcGlfZ3JvX3JlY2VpdmUoJnRuYXBpLT5uYXBpLCBza2IpOworCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKIAogCQlyZWNlaXZlZCsrOwogCQlidWRnZXQtLTsKQEAgLTU3NDAsMTEgKzU3MTAsOSBAQAogCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX1RDUFVEUF9DU1VNOwogCX0KIAotI2lmIFRHM19WTEFOX1RBR19VU0VECiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0jZW5kaWYKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAKQEAgLTU5ODYsMTEgKzU5NTQsMTAgQEAKIAkJCX0KIAkJfQogCX0KLSNpZiBURzNfVkxBTl9UQUdfVVNFRAorCiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0jZW5kaWYKIAogCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSAmJgogCSAgICAhbXNzICYmIHNrYi0+bGVuID4gVkxBTl9FVEhfRlJBTUVfTEVOKQpAQCAtOTUzMiwxNyArOTQ5OSwxMCBAQAogCXJ4X21vZGUgPSB0cC0+cnhfbW9kZSAmIH4oUlhfTU9ERV9QUk9NSVNDIHwKIAkJCQkgIFJYX01PREVfS0VFUF9WTEFOX1RBRyk7CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgJiYgIWRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQogCS8qIFdoZW4gQVNGIGlzIGluIHVzZSwgd2UgYWx3YXlzIGtlZXAgdGhlIFJYX01PREVfS0VFUF9WTEFOX1RBRwogCSAqIGZsYWcgY2xlYXIuCiAJICovCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQlpZiAoIXRwLT52bGdycCAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKLQkJcnhfbW9kZSB8PSBSWF9NT0RFX0tFRVBfVkxBTl9UQUc7Ci0jZWxzZQotCS8qIEJ5IGRlZmluaXRpb24sIFZMQU4gaXMgZGlzYWJsZWQgYWx3YXlzIGluIHRoaXMKLQkgKiBjYXNlLgotCSAqLwogCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKIAkJcnhfbW9kZSB8PSBSWF9NT0RFX0tFRVBfVkxBTl9UQUc7CiAjZW5kaWYKQEAgLTExMjMwLDMxICsxMTE5MCw2IEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLXN0YXRpYyB2b2lkIHRnM192bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJdHAtPnZsZ3JwID0gZ3JwOwotCQlyZXR1cm47Ci0JfQotCi0JdGczX25ldGlmX3N0b3AodHApOwotCi0JdGczX2Z1bGxfbG9jayh0cCwgMCk7Ci0KLQl0cC0+dmxncnAgPSBncnA7Ci0KLQkvKiBVcGRhdGUgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHIGJpdCBpbiBSWF9NT0RFIHJlZ2lzdGVyLiAqLwotCV9fdGczX3NldF9yeF9tb2RlKGRldik7Ci0KLQl0ZzNfbmV0aWZfc3RhcnQodHApOwotCi0JdGczX2Z1bGxfdW5sb2NrKHRwKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHRnM19nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzMDY2LDkgKzEzMDAxLDcgQEAKIAogc3RhdGljIHZvaWQgaW5saW5lIHZsYW5fZmVhdHVyZXNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gZmxhZ3M7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB1MzIgdGczX3J4X3JldF9yaW5nX3NpemUoc3RydWN0IHRnMyAqdHApCkBAIC0xMzg2MSwxMSArMTM3OTQsMTEgQEAKIAllbHNlCiAJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1BPTExfU0VSREVTOwogCi0JdHAtPnJ4X29mZnNldCA9IE5FVF9JUF9BTElHTiArIFRHM19SWF9IRUFEUk9PTTsKKwl0cC0+cnhfb2Zmc2V0ID0gTkVUX0lQX0FMSUdOOwogCXRwLT5yeF9jb3B5X3RocmVzaCA9IFRHM19SWF9DT1BZX1RIUkVTSE9MRDsKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEgJiYKIAkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpICE9IDApIHsKLQkJdHAtPnJ4X29mZnNldCAtPSBORVRfSVBfQUxJR047CisJCXRwLT5yeF9vZmZzZXQgPSAwOwogI2lmbmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQl0cC0+cnhfY29weV90aHJlc2ggPSB+KHUxNikwOwogI2VuZGlmCkBAIC0xNDYyOSw5ICsxNDU2Miw2IEBACiAJLm5kb19kb19pb2N0bAkJPSB0ZzNfaW9jdGwsCiAJLm5kb190eF90aW1lb3V0CQk9IHRnM190eF90aW1lb3V0LAogCS5uZG9fY2hhbmdlX210dQkJPSB0ZzNfY2hhbmdlX210dSwKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IHRnM192bGFuX3J4X3JlZ2lzdGVyLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHRnM19wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKQEAgLTE0NjQ4LDkgKzE0NTc4LDYgQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gdGczX3ZsYW5fcnhfcmVnaXN0ZXIsCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdGczX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtMTQ3MDAsOSArMTQ2MjcsNyBAQAogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotI2lmIFRHM19WTEFOX1RBR19VU0VECiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0jZW5kaWYKIAogCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0cC0+cGRldiA9IHBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IGQ2MmM4ZDkuLmY1MjgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0yODA4LDkgKzI4MDgsNiBAQAogCXUzMgkJCQlyeF9zdGRfbWF4X3Bvc3Q7CiAJdTMyCQkJCXJ4X29mZnNldDsKIAl1MzIJCQkJcnhfcGt0X21hcF9zejsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCXN0cnVjdCB2bGFuX2dyb3VwCQkqdmxncnA7Ci0jZW5kaWYKIAogCiAJLyogYmVnaW4gImV2ZXJ5dGhpbmcgZWxzZSIgY2FjaGVsaW5lKHMpIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCmluZGV4IDA0ZThjZTEuLjcxMTMxNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBjZGNfbmNtLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIDIwMTAKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gMjAxMC0yMDExCiAgKiBDb250YWN0OiBBbGV4ZXkgT3Jpc2hrbyA8YWxleGV5Lm9yaXNoa29Ac3Rlcmljc3Nvbi5jb20+CiAgKiBPcmlnaW5hbCBhdXRob3I6IEhhbnMgUGV0dGVyIFNlbGFza3kgPGhhbnMucGV0dGVyLnNlbGFza3lAc3Rlcmljc3Nvbi5jb20+CiAgKgpAQCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JuZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAKLSNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjE3LUphbi0yMDExIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiNy1GZWItMjAxMSIKIAogLyogQ0RDIE5DTSBzdWJjbGFzcyAzLjIuMSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9MRU5HVEhfTUlOCQkweDEwCkBAIC03Nyw2ICs3Nyw5IEBACiAgKi8KICNkZWZpbmUJQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWAkJMzIKIAorLyogTWF4aW11bSBhbW91bnQgb2YgSU4gZGF0YWdyYW1zIGluIE5UQiAqLworI2RlZmluZQlDRENfTkNNX0RQVF9EQVRBR1JBTVNfSU5fTUFYCQkwIC8qIHVubGltaXRlZCAqLworCiAvKiBSZXN0YXJ0IHRoZSB0aW1lciwgaWYgYW1vdW50IG9mIGRhdGFncmFtcyBpcyBsZXNzIHRoYW4gZ2l2ZW4gdmFsdWUgKi8KICNkZWZpbmUJQ0RDX05DTV9SRVNUQVJUX1RJTUVSX0RBVEFHUkFNX0NOVAkzCiAKQEAgLTg1LDExICs4OCw2IEBACiAJKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNikgKyBcCiAJKENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVggKyAxKSAqIHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKQogCi1zdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgewotCV9fbGUzMglVU0JpdFJhdGU7IC8qIGhvbGRzIDNHUFAgZG93bmxpbmsgdmFsdWUsIGJpdHMgcGVyIHNlY29uZCAqLwotCV9fbGUzMglEU0JpdFJhdGU7IC8qIGhvbGRzIDNHUFAgdXBsaW5rIHZhbHVlLCBiaXRzIHBlciBzZWNvbmQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3QgY2RjX25jbV9kYXRhIHsKIAlzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYgbnRoMTY7CiAJc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2IG5kcDE2OwpAQCAtMTk4LDEwICsxOTYsMTAgQEAKIHsKIAlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24gcmVxOwogCXUzMiB2YWw7Ci0JX19sZTE2IG1heF9kYXRhZ3JhbV9zaXplOwogCXU4IGZsYWdzOwogCXU4IGlmYWNlX25vOwogCWludCBlcnI7CisJdTE2IG50Yl9mbXRfc3VwcG9ydGVkOwogCiAJaWZhY2Vfbm8gPSBjdHgtPmNvbnRyb2wtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKQEAgLTIyMyw2ICsyMjEsOSBAQAogCWN0eC0+dHhfcmVtYWluZGVyID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0UGF5bG9hZFJlbWFpbmRlcik7CiAJY3R4LT50eF9tb2R1bHVzID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0RGl2aXNvcik7CiAJY3R4LT50eF9uZHBfbW9kdWx1cyA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud05kcE91dEFsaWdubWVudCk7CisJLyogZGV2aWNlcyBwcmlvciB0byBOQ00gRXJyYXRhIHNoYWxsIHNldCB0aGlzIGZpZWxkIHRvIHplcm8gKi8KKwljdHgtPnR4X21heF9kYXRhZ3JhbXMgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOdGJPdXRNYXhEYXRhZ3JhbXMpOworCW50Yl9mbXRfc3VwcG9ydGVkID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS5ibU50YkZvcm1hdHNTdXBwb3J0ZWQpOwogCiAJaWYgKGN0eC0+ZnVuY19kZXNjICE9IE5VTEwpCiAJCWZsYWdzID0gY3R4LT5mdW5jX2Rlc2MtPmJtTmV0d29ya0NhcGFiaWxpdGllczsKQEAgLTIzMSwyMiArMjMyLDU4IEBACiAKIAlwcl9kZWJ1ZygiZHdOdGJJbk1heFNpemU9JXUgZHdOdGJPdXRNYXhTaXplPSV1ICIKIAkJICJ3TmRwT3V0UGF5bG9hZFJlbWFpbmRlcj0ldSB3TmRwT3V0RGl2aXNvcj0ldSAiCi0JCSAid05kcE91dEFsaWdubWVudD0ldSBmbGFncz0weCV4XG4iLAorCQkgIndOZHBPdXRBbGlnbm1lbnQ9JXUgd050Yk91dE1heERhdGFncmFtcz0ldSBmbGFncz0weCV4XG4iLAogCQkgY3R4LT5yeF9tYXgsIGN0eC0+dHhfbWF4LCBjdHgtPnR4X3JlbWFpbmRlciwgY3R4LT50eF9tb2R1bHVzLAotCQkgY3R4LT50eF9uZHBfbW9kdWx1cywgZmxhZ3MpOworCQkgY3R4LT50eF9uZHBfbW9kdWx1cywgY3R4LT50eF9tYXhfZGF0YWdyYW1zLCBmbGFncyk7CiAKLQkvKiBtYXggY291bnQgb2YgdHggZGF0YWdyYW1zIHdpdGhvdXQgdGVybWluYXRpbmcgTlVMTCBlbnRyeSAqLwotCWN0eC0+dHhfbWF4X2RhdGFncmFtcyA9IENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVg7CisJLyogbWF4IGNvdW50IG9mIHR4IGRhdGFncmFtcyAqLworCWlmICgoY3R4LT50eF9tYXhfZGF0YWdyYW1zID09IDApIHx8CisJCQkoY3R4LT50eF9tYXhfZGF0YWdyYW1zID4gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWCkpCisJCWN0eC0+dHhfbWF4X2RhdGFncmFtcyA9IENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVg7CiAKIAkvKiB2ZXJpZnkgbWF4aW11bSBzaXplIG9mIHJlY2VpdmVkIE5UQiBpbiBieXRlcyAqLwotCWlmICgoY3R4LT5yeF9tYXggPAotCSAgICAoQ0RDX05DTV9NSU5fSERSX1NJWkUgKyBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKSkgfHwKLQkgICAgKGN0eC0+cnhfbWF4ID4gQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlgpKSB7CisJaWYgKGN0eC0+cnhfbWF4IDwgVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFKSB7CisJCXByX2RlYnVnKCJVc2luZyBtaW4gcmVjZWl2ZSBsZW5ndGg9JWRcbiIsCisJCQkJCQlVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUpOworCQljdHgtPnJ4X21heCA9IFVTQl9DRENfTkNNX05UQl9NSU5fSU5fU0laRTsKKwl9CisKKwlpZiAoY3R4LT5yeF9tYXggPiBDRENfTkNNX05UQl9NQVhfU0laRV9SWCkgewogCQlwcl9kZWJ1ZygiVXNpbmcgZGVmYXVsdCBtYXhpbXVtIHJlY2VpdmUgbGVuZ3RoPSVkXG4iLAogCQkJCQkJQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlgpOwogCQljdHgtPnJ4X21heCA9IENEQ19OQ01fTlRCX01BWF9TSVpFX1JYOwogCX0KIAorCS8qIGluZm9ybSBkZXZpY2UgYWJvdXQgTlRCIGlucHV0IHNpemUgY2hhbmdlcyAqLworCWlmIChjdHgtPnJ4X21heCAhPSBsZTMyX3RvX2NwdShjdHgtPm5jbV9wYXJtLmR3TnRiSW5NYXhTaXplKSkgeworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX05UQl9JTlBVVF9TSVpFOworCQlyZXEud1ZhbHVlID0gMDsKKwkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKworCQlpZiAoZmxhZ3MgJiBVU0JfQ0RDX05DTV9OQ0FQX05UQl9JTlBVVF9TSVpFKSB7CisJCQlzdHJ1Y3QgdXNiX2NkY19uY21fbmRwX2lucHV0X3NpemUgbmRwX2luX3N6OworCisJCQlyZXEud0xlbmd0aCA9IDg7CisJCQluZHBfaW5fc3ouZHdOdGJJbk1heFNpemUgPSBjcHVfdG9fbGUzMihjdHgtPnJ4X21heCk7CisJCQluZHBfaW5fc3oud050YkluTWF4RGF0YWdyYW1zID0KKwkJCQkJY3B1X3RvX2xlMTYoQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWCk7CisJCQluZHBfaW5fc3oud1Jlc2VydmVkID0gMDsKKwkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZuZHBfaW5fc3osIDAsIE5VTEwsCisJCQkJCQkJCQkxMDAwKTsKKwkJfSBlbHNlIHsKKwkJCV9fbGUzMiBkd050YkluTWF4U2l6ZSA9IGNwdV90b19sZTMyKGN0eC0+cnhfbWF4KTsKKworCQkJcmVxLndMZW5ndGggPSA0OworCQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJmR3TnRiSW5NYXhTaXplLCAwLAorCQkJCQkJCQlOVUxMLCAxMDAwKTsKKwkJfQorCisJCWlmIChlcnIpCisJCQlwcl9kZWJ1ZygiU2V0dGluZyBOVEIgSW5wdXQgU2l6ZSBmYWlsZWRcbiIpOworCX0KKwogCS8qIHZlcmlmeSBtYXhpbXVtIHNpemUgb2YgdHJhbnNtaXR0ZWQgTlRCIGluIGJ5dGVzICovCiAJaWYgKChjdHgtPnR4X21heCA8CiAJICAgIChDRENfTkNNX01JTl9IRFJfU0laRSArIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpKSB8fApAQCAtMjk3LDQ3ICszMzQsODQgQEAKIAkvKiBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KIAogCS8qIHNldCBDUkMgTW9kZSAqLwotCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7Ci0JcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfQ1JDX01PREU7Ci0JcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KFVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQpOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSAwOworCWlmIChmbGFncyAmIFVTQl9DRENfTkNNX05DQVBfQ1JDX01PREUpIHsKKwkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9DUkNfTU9ERTsKKwkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KFVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQpOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCQlyZXEud0xlbmd0aCA9IDA7CiAKLQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCBOVUxMLCAwLCBOVUxMLCAxMDAwKTsKLQlpZiAoZXJyKQotCQlwcl9kZWJ1ZygiU2V0dGluZyBDUkMgbW9kZSBvZmYgZmFpbGVkXG4iKTsKKwkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7CisJCWlmIChlcnIpCisJCQlwcl9kZWJ1ZygiU2V0dGluZyBDUkMgbW9kZSBvZmYgZmFpbGVkXG4iKTsKKwl9CiAKLQkvKiBzZXQgTlRCIGZvcm1hdCAqLwotCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7Ci0JcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVDsKLQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fTlRCMTZfRk9STUFUKTsKLQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOwotCXJlcS53TGVuZ3RoID0gMDsKKwkvKiBzZXQgTlRCIGZvcm1hdCwgaWYgYm90aCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8KKwlpZiAobnRiX2ZtdF9zdXBwb3J0ZWQgJiBVU0JfQ0RDX05DTV9OVEgzMl9TSUdOKSB7CisJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVDsKKwkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KFVTQl9DRENfTkNNX05UQjE2X0ZPUk1BVCk7CisJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJCXJlcS53TGVuZ3RoID0gMDsKIAotCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpCi0JCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMTYtYml0IGZhaWxlZFxuIik7CisJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOworCQlpZiAoZXJyKQorCQkJcHJfZGVidWcoIlNldHRpbmcgTlRCIGZvcm1hdCB0byAxNi1iaXQgZmFpbGVkXG4iKTsKKwl9CisKKwljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKIAogCS8qIHNldCBNYXggRGF0YWdyYW0gU2l6ZSAoTVRVKSAqLwotCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX0dFVF9NQVhfREFUQUdSQU1fU0laRTsKLQlyZXEud1ZhbHVlID0gMDsKLQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOwotCXJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CisJaWYgKGZsYWdzICYgVVNCX0NEQ19OQ01fTkNBUF9NQVhfREFUQUdSQU1fU0laRSkgeworCQlfX2xlMTYgbWF4X2RhdGFncmFtX3NpemU7CisJCXUxNiBldGhfbWF4X3N6ID0gbGUxNl90b19jcHUoY3R4LT5ldGhlcl9kZXNjLT53TWF4U2VnbWVudFNpemUpOwogCi0JZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm1heF9kYXRhZ3JhbV9zaXplLCAwLCBOVUxMLCAxMDAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2RlYnVnKCIgR0VUX01BWF9EQVRBR1JBTV9TSVpFIGZhaWxlZCwgdXNpbmcgc2l6ZT0ldVxuIiwKLQkJCSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKTsKLQkJLyogdXNlIGRlZmF1bHQgKi8KLQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7Ci0JfSBlbHNlIHsKLQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IGxlMTZfdG9fY3B1KG1heF9kYXRhZ3JhbV9zaXplKTsKKwkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFOworCQlyZXEud1ZhbHVlID0gMDsKKwkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigyKTsKIAotCQlpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA8IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpCi0JCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKLQkJZWxzZSBpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA+IENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpCi0JCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKKwkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm1heF9kYXRhZ3JhbV9zaXplLCAwLCBOVUxMLAorCQkJCQkJCQkJMTAwMCk7CisJCWlmIChlcnIpIHsKKwkJCXByX2RlYnVnKCJHRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkLCB1c2Ugc2l6ZT0ldVxuIiwKKwkJCQkJCUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpOworCQl9IGVsc2UgeworCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IGxlMTZfdG9fY3B1KG1heF9kYXRhZ3JhbV9zaXplKTsKKwkJCS8qIENoZWNrIEV0aCBkZXNjcmlwdG9yIHZhbHVlICovCisJCQlpZiAoZXRoX21heF9zeiA8IENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpIHsKKwkJCQlpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA+IGV0aF9tYXhfc3opCisJCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBldGhfbWF4X3N6OworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA+CisJCQkJCQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFKQorCQkJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0KKwkJCQkJCUNEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkU7CisJCQl9CisKKwkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplIDwgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkKKwkJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0KKwkJCQkJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKKworCQkJLyogaWYgdmFsdWUgY2hhbmdlZCwgdXBkYXRlIGRldmljZSAqLworCQkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTUFYX0RBVEFHUkFNX1NJWkU7CisJCQlyZXEud1ZhbHVlID0gMDsKKwkJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJCQlyZXEud0xlbmd0aCA9IDI7CisJCQltYXhfZGF0YWdyYW1fc2l6ZSA9IGNwdV90b19sZTE2KGN0eC0+bWF4X2RhdGFncmFtX3NpemUpOworCisJCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsCisJCQkJCQkJCTAsIE5VTEwsIDEwMDApOworCQkJaWYgKGVycikKKwkJCQlwcl9kZWJ1ZygiU0VUX01BWF9EQVRBR1JBTV9TSVpFIGZhaWxlZFxuIik7CisJCX0KKwogCX0KIAogCWlmIChjdHgtPm5ldGRldi0+bXR1ICE9IChjdHgtPm1heF9kYXRhZ3JhbV9zaXplIC0gRVRIX0hMRU4pKQpAQCAtNDY2LDE5ICs1NDAsMTMgQEAKIAogCQkJY3R4LT5ldGhlcl9kZXNjID0KIAkJCQkJKGNvbnN0IHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgKilidWY7Ci0KIAkJCWRldi0+aGFyZF9tdHUgPQogCQkJCWxlMTZfdG9fY3B1KGN0eC0+ZXRoZXJfZGVzYy0+d01heFNlZ21lbnRTaXplKTsKIAotCQkJaWYgKGRldi0+aGFyZF9tdHUgPAotCQkJICAgIChDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU4pKQotCQkJCWRldi0+aGFyZF9tdHUgPQotCQkJCQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU47Ci0KLQkJCWVsc2UgaWYgKGRldi0+aGFyZF9tdHUgPgotCQkJCSAoQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSAtIEVUSF9ITEVOKSkKLQkJCQlkZXYtPmhhcmRfbXR1ID0KLQkJCQkJQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSAtIEVUSF9ITEVOOworCQkJaWYgKGRldi0+aGFyZF9tdHUgPCBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKQorCQkJCWRldi0+aGFyZF9tdHUgPQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOworCQkJZWxzZSBpZiAoZGV2LT5oYXJkX210dSA+IENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpCisJCQkJZGV2LT5oYXJkX210dSA9CUNEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkU7CiAJCQlicmVhazsKIAogCQljYXNlIFVTQl9DRENfTkNNX1RZUEU6CkBAIC02MjgsMTMgKzY5NiwxMyBAQAogCXUzMiBvZmZzZXQ7CiAJdTMyIGxhc3Rfb2Zmc2V0OwogCXUxNiBuID0gMDsKLQl1OCB0aW1lb3V0ID0gMDsKKwl1OCByZWFkeTJzZW5kID0gMDsKIAogCS8qIGlmIHRoZXJlIGlzIGEgcmVtYWluaW5nIHNrYiwgaXQgZ2V0cyBwcmlvcml0eSAqLwogCWlmIChza2IgIT0gTlVMTCkKIAkJc3dhcChza2IsIGN0eC0+dHhfcmVtX3NrYik7CiAJZWxzZQotCQl0aW1lb3V0ID0gMTsKKwkJcmVhZHkyc2VuZCA9IDE7CiAKIAkvKgogCSAqICstLS0tLS0tLS0tLS0tLS0tKwpAQCAtNjgyLDkgKzc1MCwxMCBAQAogCiAJZm9yICg7IG4gPCBjdHgtPnR4X21heF9kYXRhZ3JhbXM7IG4rKykgewogCQkvKiBjaGVjayBpZiBlbmQgb2YgdHJhbnNtaXQgYnVmZmVyIGlzIHJlYWNoZWQgKi8KLQkJaWYgKG9mZnNldCA+PSBjdHgtPnR4X21heCkKKwkJaWYgKG9mZnNldCA+PSBjdHgtPnR4X21heCkgeworCQkJcmVhZHkyc2VuZCA9IDE7CiAJCQlicmVhazsKLQorCQl9CiAJCS8qIGNvbXB1dGUgbWF4aW11bSBidWZmZXIgc2l6ZSAqLwogCQlyZW0gPSBjdHgtPnR4X21heCAtIG9mZnNldDsKIApAQCAtNzExLDkgKzc4MCw3IEBACiAJCQkJfQogCQkJCWN0eC0+dHhfcmVtX3NrYiA9IHNrYjsKIAkJCQlza2IgPSBOVUxMOwotCi0JCQkJLyogbG9vcCBvbmUgbW9yZSB0aW1lICovCi0JCQkJdGltZW91dCA9IDE7CisJCQkJcmVhZHkyc2VuZCA9IDE7CiAJCQl9CiAJCQlicmVhazsKIAkJfQpAQCAtNzU2LDcgKzgyMyw3IEBACiAJCWN0eC0+dHhfY3Vycl9sYXN0X29mZnNldCA9IGxhc3Rfb2Zmc2V0OwogCQlnb3RvIGV4aXRfbm9fc2tiOwogCi0JfSBlbHNlIGlmICgobiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtcykgJiYgKHRpbWVvdXQgPT0gMCkpIHsKKwl9IGVsc2UgaWYgKChuIDwgY3R4LT50eF9tYXhfZGF0YWdyYW1zKSAmJiAocmVhZHkyc2VuZCA9PSAwKSkgewogCQkvKiB3YWl0IGZvciBtb3JlIGZyYW1lcyAqLwogCQkvKiBwdXNoIHZhcmlhYmxlcyAqLwogCQljdHgtPnR4X2N1cnJfc2tiID0gc2tiX291dDsKQEAgLTgxMyw3ICs4ODAsNyBAQAogCQkJCQljcHVfdG9fbGUxNihzaXplb2YoY3R4LT50eF9uY20ubnRoMTYpKTsKIAljdHgtPnR4X25jbS5udGgxNi53U2VxdWVuY2UgPSBjcHVfdG9fbGUxNihjdHgtPnR4X3NlcSk7CiAJY3R4LT50eF9uY20ubnRoMTYud0Jsb2NrTGVuZ3RoID0gY3B1X3RvX2xlMTYobGFzdF9vZmZzZXQpOwotCWN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4ID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiksCisJY3R4LT50eF9uY20ubnRoMTYud05kcEluZGV4ID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiksCiAJCQkJCQkJY3R4LT50eF9uZHBfbW9kdWx1cyk7CiAKIAltZW1jcHkoc2tiX291dC0+ZGF0YSwgJihjdHgtPnR4X25jbS5udGgxNiksIHNpemVvZihjdHgtPnR4X25jbS5udGgxNikpOwpAQCAtODI1LDEzICs4OTIsMTMgQEAKIAlyZW0gPSBzaXplb2YoY3R4LT50eF9uY20ubmRwMTYpICsgKChjdHgtPnR4X2N1cnJfZnJhbWVfbnVtICsgMSkgKgogCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2KSk7CiAJY3R4LT50eF9uY20ubmRwMTYud0xlbmd0aCA9IGNwdV90b19sZTE2KHJlbSk7Ci0JY3R4LT50eF9uY20ubmRwMTYud05leHRGcEluZGV4ID0gMDsgLyogcmVzZXJ2ZWQgKi8KKwljdHgtPnR4X25jbS5uZHAxNi53TmV4dE5kcEluZGV4ID0gMDsgLyogcmVzZXJ2ZWQgKi8KIAotCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53RnBJbmRleCwKKwltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud05kcEluZGV4LAogCQkJCQkJJihjdHgtPnR4X25jbS5uZHAxNiksCiAJCQkJCQlzaXplb2YoY3R4LT50eF9uY20ubmRwMTYpKTsKIAotCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53RnBJbmRleCArCisJbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndOZHBJbmRleCArCiAJCQkJCXNpemVvZihjdHgtPnR4X25jbS5uZHAxNiksCiAJCQkJCSYoY3R4LT50eF9uY20uZHBlMTYpLAogCQkJCQkoY3R4LT50eF9jdXJyX2ZyYW1lX251bSArIDEpICoKQEAgLTk2MSw3ICsxMDI4LDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQl0ZW1wID0gbGUxNl90b19jcHUoY3R4LT5yeF9uY20ubnRoMTYud0ZwSW5kZXgpOworCXRlbXAgPSBsZTE2X3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi53TmRwSW5kZXgpOwogCWlmICgodGVtcCArIHNpemVvZihjdHgtPnJ4X25jbS5uZHAxNikpID4gYWN0bGVuKSB7CiAJCXByX2RlYnVnKCJpbnZhbGlkIERQVDE2IGluZGV4XG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTEwNDgsMTAgKzExMTUsMTAgQEAKIAogc3RhdGljIHZvaWQKIGNkY19uY21fc3BlZWRfY2hhbmdlKHN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4LAotCQkgICAgIHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSAqZGF0YSkKKwkJICAgICBzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UgKmRhdGEpCiB7Ci0JdWludDMyX3Qgcnhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5VU0JpdFJhdGUpOwotCXVpbnQzMl90IHR4X3NwZWVkID0gbGUzMl90b19jcHUoZGF0YS0+RFNCaXRSYXRlKTsKKwl1aW50MzJfdCByeF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPkRMQml0UlJhdGUpOworCXVpbnQzMl90IHR4X3NwZWVkID0gbGUzMl90b19jcHUoZGF0YS0+VUxCaXRSYXRlKTsKIAogCS8qCiAJICogQ3VycmVudGx5IHRoZSBVU0ItTkVUIEFQSSBkb2VzIG5vdCBzdXBwb3J0IHJlcG9ydGluZyB0aGUgYWN0dWFsCkBAIC0xMDkyLDcgKzExNTksNyBAQAogCS8qIHRlc3QgZm9yIHNwbGl0IGRhdGEgaW4gOC1ieXRlIGNodW5rcyAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncykpIHsKIAkJY2RjX25jbV9zcGVlZF9jaGFuZ2UoY3R4LAotCQkgICAgICAoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICopdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkgICAgICAoc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlICopdXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTIwLDEyICsxMTg3LDEyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBVU0JfQ0RDX05PVElGWV9TUEVFRF9DSEFOR0U6Ci0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPAotCQkgICAgKHNpemVvZigqZXZlbnQpICsgc2l6ZW9mKHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSkpKQorCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgKHNpemVvZigqZXZlbnQpICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSkpKQogCQkJc2V0X2JpdChFVkVOVF9TVFNfU1BMSVQsICZkZXYtPmZsYWdzKTsKIAkJZWxzZQogCQkJY2RjX25jbV9zcGVlZF9jaGFuZ2UoY3R4LAotCQkJCShzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgKikgJmV2ZW50WzFdKTsKKwkJCQkoc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlICopICZldmVudFsxXSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCA1ZTk4NjQzLi43ZGM4NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC00MDYsNiArNDA2LDcgQEAKIAogCWlmIChmdy0+c2l6ZSA+IEtBV0VUSF9GSVJNV0FSRV9CVUZfU0laRSkgewogCQllcnIoIkZpcm13YXJlIHRvbyBiaWc6ICV6dSIsIGZ3LT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlkYXRhX2xlbiA9IGZ3LT5zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDkwYTIzZTQuLjgyZGJhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTQ0Niw2ICs0NDYsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfbmFwaV9lbmFibGUoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCit7CisJbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKKworCS8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKKwkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKKwkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgorCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgeworCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2aS0+cnZxKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCByZWZpbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmk7CkBAIC00NTQsNyArNDY4LDcgQEAKIAl2aSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdmlydG5ldF9pbmZvLCByZWZpbGwud29yayk7CiAJbmFwaV9kaXNhYmxlKCZ2aS0+bmFwaSk7CiAJc3RpbGxfZW1wdHkgPSAhdHJ5X2ZpbGxfcmVjdih2aSwgR0ZQX0tFUk5FTCk7Ci0JbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKKwl2aXJ0bmV0X25hcGlfZW5hYmxlKHZpKTsKIAogCS8qIEluIHRoZW9yeSwgdGhpcyBjYW4gaGFwcGVuOiBpZiB3ZSBkb24ndCBnZXQgYW55IGJ1ZmZlcnMgaW4KIAkgKiB3ZSB3aWxsICpuZXZlciogdHJ5IHRvIGZpbGwgYWdhaW4uICovCkBAIC02MzgsMTYgKzY1Miw3IEBACiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKLQotCS8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKLQkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKLQkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgotCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLwotCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgewotCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7Ci0JfQorCXZpcnRuZXRfbmFwaV9lbmFibGUodmkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKaW5kZXggMDFjMDVmNS4uMjI4ZDRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpAQCAtMzY5MCw3ICszNjkwLDcgQEAKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCWdvdG8gZXhpdDsKIAotCWlmICgocnRzX3RhYmxlICE9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfHwKKwlpZiAoKHJ0c190YWJsZSAhPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpICYmCiAJICAgIChydHNfdGFibGUgIT0KIAkgICAgIFZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKQogCQkqZGF0YTEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCmluZGV4IDAwNjRiZTcuLjIxMDkxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKQEAgLTgzOCw5ICs4MzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBxbWF4OyBpKyspIHsKIAkJZXJyID0gYXRoNWtfaHdfc3RvcF90eF9kbWEoYWgsIGkpOwogCQkvKiAtRUlOVkFMIC0+IHF1ZXVlIGluYWN0aXZlICovCi0JCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVJTlZBTCkKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwppbmRleCBlNWYyYjk2Li5hNzAyODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCkBAIC04Niw3ICs4Niw3IEBACiAJaWYgKCFhaC0+YWhfYndtb2RlKSB7CiAJCWR1ciA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKHNjLT5odywKIAkJCQkJCU5VTEwsIGxlbiwgcmF0ZSk7Ci0JCXJldHVybiBkdXI7CisJCXJldHVybiBsZTE2X3RvX2NwdShkdXIpOwogCX0KIAogCWJpdHJhdGUgPSByYXRlLT5iaXRyYXRlOwpAQCAtMjY1LDggKzI2NSw2IEBACiAJCSAqIHdoYXQgcmF0ZSB3ZSBzaG91bGQgY2hvb3NlIHRvIFRYIEFDS3MuICovCiAJCXR4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKIAotCQl0eF90aW1lID0gbGUxNl90b19jcHUodHhfdGltZSk7Ci0KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF90aW1lLCByZWcpOwogCiAJCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCmluZGV4IGY4YTc3NzEuLmY0NGM4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKQEAgLTQyNiw5ICs0MjYsOCBAQAogCQl9CiAKIAkJLyogV0FSIGZvciBBU1BNIHN5c3RlbSBoYW5nICovCi0JCWlmIChBUl9TUkVWXzkyODAoYWgpIHx8IEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85Mjg3KGFoKSkgeworCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKQogCQkJdmFsIHw9IChBUl9XQV9CSVQ2IHwgQVJfV0FfQklUNyk7Ci0JCX0KIAogCQlpZiAoQVJfU1JFVl85Mjg1RV8yMChhaCkpCiAJCQl2YWwgfD0gQVJfV0FfQklUMjM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCmluZGV4IDM2ODFjYWY1Li4yMzgzOGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaApAQCAtMjE4LDYgKzIxOCw3IEBACiBzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7CiAJdTggYmZfdHlwZTsKIAl1OCBiZnNfcGFwcmQ7CisJdW5zaWduZWQgbG9uZyBiZnNfcGFwcmRfdGltZXN0YW1wOwogCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBiZnNfZnR5cGU7CiB9OwogCkBAIC01OTMsNyArNTk0LDYgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGFwcmRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaHdfY2hlY2tfd29yazsKIAlzdHJ1Y3QgY29tcGxldGlvbiBwYXByZF9jb21wbGV0ZTsKLQlib29sIHBhcHJkX3BlbmRpbmc7CiAKIAl1MzIgaW50cnN0YXR1czsKIAl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYwppbmRleCAzODQzM2Y5Li4wMzUyZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCkBAIC0xNDIsOSArMTQyLDYgQEAKIHsKIAlhdGg5a19odGNfZXhpdF9kZWJ1Zyhwcml2LT5haCk7CiAJYXRoOWtfaHdfZGVpbml0KHByaXYtPmFoKTsKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnN3YmFfdGFza2xldCk7Ci0JdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rhc2tsZXQpOwogCWtmcmVlKHByaXYtPmFoKTsKIAlwcml2LT5haCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKaW5kZXggZjRkNTc2Yi4uNmJiNTk5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwpAQCAtMTAyNSwxMiArMTAyNSw2IEBACiAJaW50IHJldCA9IDA7CiAJdTggY21kX3JzcDsKIAotCS8qIENhbmNlbCBhbGwgdGhlIHJ1bm5pbmcgdGltZXJzL3dvcmsgLi4gKi8KLQljYW5jZWxfd29ya19zeW5jKCZwcml2LT5mYXRhbF93b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wc193b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKLQlhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHByaXYpOwotCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKHByaXYtPm9wX2ZsYWdzICYgT1BfSU5WQUxJRCkgewpAQCAtMTA0NCw4ICsxMDM4LDIzIEBACiAJV01JX0NNRChXTUlfRElTQUJMRV9JTlRSX0NNRElEKTsKIAlXTUlfQ01EKFdNSV9EUkFJTl9UWFFfQUxMX0NNRElEKTsKIAlXTUlfQ01EKFdNSV9TVE9QX1JFQ1ZfQ01ESUQpOworCisJdGFza2xldF9raWxsKCZwcml2LT5zd2JhX3Rhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZwcml2LT50eF90YXNrbGV0KTsKKwogCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+dHhfcXVldWUpOwogCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwkvKiBDYW5jZWwgYWxsIHRoZSBydW5uaW5nIHRpbWVycy93b3JrIC4uICovCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+ZmF0YWxfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cHNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yayk7CisJYXRoOWtfbGVkX3N0b3BfYnJpZ2h0bmVzcyhwcml2KTsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCS8qIFJlbW92ZSBtb25pdG9yIGludGVyZmFjZSBoZXJlICovCiAJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewogCQlpZiAoYXRoOWtfaHRjX3JlbW92ZV9tb25pdG9yX2ludGVyZmFjZShwcml2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggMWFmYjhiYi4uOWYwMWU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTM2OSw2ICszNjksOSBAQAogCWVsc2UKIAkJYWgtPmNvbmZpZy5odF9lbmFibGUgPSAwOwogCisJLyogUEFQUkQgbmVlZHMgc29tZSBtb3JlIHdvcmsgdG8gYmUgZW5hYmxlZCAqLworCWFoLT5jb25maWcucGFwcmRfZGlzYWJsZSA9IDE7CisKIAlhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbiA9IHRydWU7CiAJYWgtPmNvbmZpZy5wY2llU2VyRGVzV3JpdGUgPSB0cnVlOwogCkBAIC0xOTMzLDcgKzE5MzYsOCBAQAogCQlwQ2FwLT5yeF9zdGF0dXNfbGVuID0gc2l6ZW9mKHN0cnVjdCBhcjkwMDNfcnhzKTsKIAkJcENhcC0+dHhfZGVzY19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM190eGMpOwogCQlwQ2FwLT50eHNfbGVuID0gc2l6ZW9mKHN0cnVjdCBhcjkwMDNfdHhzKTsKLQkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUEFQUkQpKQorCQlpZiAoIWFoLT5jb25maWcucGFwcmRfZGlzYWJsZSAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9QQVBSRCkpCiAJCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9QQVBSRDsKIAl9IGVsc2UgewogCQlwQ2FwLT50eF9kZXNjX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXRoX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAppbmRleCA1YTNkZmVjLi5lYTlmZGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaApAQCAtMjI1LDYgKzIyNSw3IEBACiAJdTMyIHBjaWVfd2FlbjsKIAl1OCBhbmFsb2dfc2hpZnRyZWc7CiAJdTggaHRfZW5hYmxlOworCXU4IHBhcHJkX2Rpc2FibGU7CiAJdTMyIG9mZG1fdHJpZ19sb3c7CiAJdTMyIG9mZG1fdHJpZ19oaWdoOwogCXUzMiBjY2tfdHJpZ19oaWdoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKaW5kZXggNzY3ZDhiODYuLjA4N2E2YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpAQCAtNTk4LDggKzU5OCw2IEBACiBlcnJfcXVldWVzOgogCWF0aDlrX2h3X2RlaW5pdChhaCk7CiBlcnJfaHc6Ci0JdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKIAogCWtmcmVlKGFoKTsKIAlzYy0+c2NfYWggPSBOVUxMOwpAQCAtODA3LDkgKzgwNSw2IEBACiAKIAlhdGg5a19od19kZWluaXQoc2MtPnNjX2FoKTsKIAotCXRhc2tsZXRfa2lsbCgmc2MtPmludHJfdHEpOwotCXRhc2tsZXRfa2lsbCgmc2MtPmJjb25fdGFza2xldCk7Ci0KIAlrZnJlZShzYy0+c2NfYWgpOwogCXNjLT5zY19haCA9IE5VTEw7CiB9CkBAIC04MjQsNiArODE5LDggQEAKIAl3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKHNjLT5ody0+d2lwaHkpOwogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiAKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwogCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CiAJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOwogCQlpZiAoYXBoeSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggZjkwYTZjYS4uZGE1YzY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0zMjUsNiArMzI1LDggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOwogCWludCB0aW1lX2xlZnQ7CiAKQEAgLTM0MCwxNCArMzQyLDE2IEBACiAJdHhfaW5mby0+Y29udHJvbC5yYXRlc1sxXS5pZHggPSAtMTsKIAogCWluaXRfY29tcGxldGlvbigmc2MtPnBhcHJkX2NvbXBsZXRlKTsKLQlzYy0+cGFwcmRfcGVuZGluZyA9IHRydWU7CiAJdHhjdGwucGFwcmQgPSBCSVQoY2hhaW4pOwotCWlmIChhdGhfdHhfc3RhcnQoaHcsIHNrYiwgJnR4Y3RsKSAhPSAwKQorCisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlBBUFJEIFRYIGZhaWxlZFxuIik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiBmYWxzZTsKKwl9CiAKIAl0aW1lX2xlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNjLT5wYXByZF9jb21wbGV0ZSwKIAkJCW1zZWNzX3RvX2ppZmZpZXMoQVRIX1BBUFJEX1RJTUVPVVQpKTsKLQlzYy0+cGFwcmRfcGVuZGluZyA9IGZhbHNlOwogCiAJaWYgKCF0aW1lX2xlZnQpCiAJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQ0FMSUJSQVRFLApAQCAtNTkyLDE0ICs1OTYsMTIgQEAKIAl1MzIgc3RhdHVzID0gc2MtPmludHJzdGF0dXM7CiAJdTMyIHJ4bWFzazsKIAotCWF0aDlrX3BzX3dha2V1cChzYyk7Ci0KIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0ZBVEFMKSB7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCQlyZXR1cm47CiAJfQogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlzcGluX2xvY2soJnNjLT5zY19wY3VfbG9jayk7CiAKIAlpZiAoIWF0aDlrX2h3X2NoZWNrX2FsaXZlKGFoKSkKQEAgLTk1NSw4ICs5NTcsNiBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7Ci0KLQlhdGg5a19zZXRwb3dlcihzYywgQVRIOUtfUE1fRlVMTF9TTEVFUCk7CiB9CiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCkBAIC05NjksNiArOTY5LDcgQEAKIAkvKiBTdG9wIEFOSSAqLwogCWRlbF90aW1lcl9zeW5jKCZjb21tb24tPmFuaS50aW1lcik7CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CkBAIC0xMDE1LDYgKzEwMTYsNyBAQAogCiAJLyogU3RhcnQgQU5JICovCiAJYXRoX3N0YXJ0X2FuaShjb21tb24pOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMzA5LDYgKzEzMTEsOSBAQAogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCisJLyogcHJldmVudCB0YXNrbGV0cyB0byBlbmFibGUgaW50ZXJydXB0cyBvbmNlIHdlIGRpc2FibGUgdGhlbSAqLworCWFoLT5pbWFzayAmPSB+QVRIOUtfSU5UX0dMT0JBTDsKKwogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKQEAgLTEzMjYsNiArMTMzMSwxMiBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKKwkvKiB3ZSBjYW4gbm93IHN5bmMgaXJxIGFuZCBraWxsIGFueSBydW5uaW5nIHRhc2tsZXRzLCBzaW5jZSB3ZSBhbHJlYWR5CisJICogZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgbm90IGhvbGRpbmcgYSBzcGluIGxvY2sgKi8KKwlzeW5jaHJvbml6ZV9pcnEoc2MtPmlycSk7CisJdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7CisJdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKKwogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiAJc2MtPnBzX2lkbGUgPSB0cnVlOwpAQCAtMTcwMSw3ICsxNzEyLDkgQEAKIHNraXBfY2hhbl9jaGFuZ2U6CiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKIAkJc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gMiAqIGNvbmYtPnBvd2VyX2xldmVsOworCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCAzMzJkMWZlLi4wN2I3ODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTE3MjUsNiArMTcyNSw5IEBACiAJCQlhcjkwMDNfaHdfc2V0X3BhcHJkX3R4ZGVzYyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLAogCQkJCQkJICAgYmYtPmJmX3N0YXRlLmJmc19wYXByZCk7CiAKKwkJaWYgKHR4Y3RsLT5wYXByZCkKKwkJCWJmLT5iZl9zdGF0ZS5iZnNfcGFwcmRfdGltZXN0YW1wID0gamlmZmllczsKKwogCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsIHRpZCwgJmJmX2hlYWQpOwogCX0KIApAQCAtMTg4Niw3ICsxODg5LDkgQEAKIAliZi0+YmZfYnVmX2FkZHIgPSAwOwogCiAJaWYgKGJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQpIHsKLQkJaWYgKCFzYy0+cGFwcmRfcGVuZGluZykKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQliZi0+YmZfc3RhdGUuYmZzX3BhcHJkX3RpbWVzdGFtcCArCisJCQkJbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpKQogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZWxzZQogCQkJY29tcGxldGUoJnNjLT5wYXByZF9jb21wbGV0ZSk7CkBAIC0yMTEzLDkgKzIxMTgsNyBAQAogCWlmIChuZWVkcmVzZXQpIHsKIAkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19SRVNFVCwKIAkJCSJ0eCBodW5nLCByZXNldHRpbmcgdGhlIGNoaXBcbiIpOwotCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGhfcmVzZXQoc2MsIHRydWUpOwotCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9CiAKIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYwppbmRleCA5MzlhMGU5Li44NDg2NmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAJY2FtID0gaWVlZTgwMjExX2NoZWNrX3RpbSh0aW1faWUsIHRpbV9sZW4sIGFyLT5jb21tb24uY3VyYWlkKTsKIAogCS8qIDIuIE1heWJlIHRoZSBBUCB3YW50cyB0byBzZW5kIG11bHRpY2FzdC9icm9hZGNhc3QgZGF0YT8gKi8KLQljYW0gPSAhISh0aW1faWUtPmJpdG1hcF9jdHJsICYgMHgwMSk7CisJY2FtIHw9ICEhKHRpbV9pZS0+Yml0bWFwX2N0cmwgJiAweDAxKTsKIAogCWlmICghY2FtKSB7CiAJCS8qIGJhY2sgdG8gbG93LXBvd2VyIGxhbmQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggM2YxZTVmMS4uOTFhOWY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMjYyNCw2ICsyNjI0LDcgQEAKIAkuZndfbmFtZV9wcmUgPSBJV0w0OTY1X0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDQ5NjVfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDQ5NjVfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV80OTY1X0VFUFJPTV9WRVJTSU9OLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCmluZGV4IGFmNTA1YmMuLmVmMzZhZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTY4MSw2ICs2ODEsOCBAQAogCS5md19uYW1lX3ByZSA9IElXTDYwNTBfRldfUFJFLAkJCQlcCiAJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCQkJXAogCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAkJCVwKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8JXAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCQkvKiAuY2ZnIG92ZXJ3cml0ZSAqLwlcCiAJLm9wcyA9ICZpd2w2MDUwX29wcywJCQkJCVwKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDUwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwNTBfVFhfUE9XRVJfVkVSU0lPTiwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCmluZGV4IDE0Y2ViNGQuLjI3YjVhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKQEAgLTE1MiwxMSArMTUyLDE0IEBACiAKIAllZXByb21fc2t1ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9TS1VfQ0FQKTsKIAotCXByaXYtPmNmZy0+c2t1ID0gKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CisJaWYgKCFwcml2LT5jZmctPnNrdSkgeworCQkvKiBub3QgdXNpbmcgc2t1IG92ZXJ3cml0ZSAqLworCQlwcml2LT5jZmctPnNrdSA9CisJCQkoKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF9CQU5EX1NFTEVDVElPTikgPj4KIAkJCUVFUFJPTV9TS1VfQ0FQX0JBTkRfUE9TKTsKLQlpZiAoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQXzExTl9FTkFCTEUpCi0JCXByaXYtPmNmZy0+c2t1IHw9IElXTF9TS1VfTjsKLQorCQlpZiAoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQXzExTl9FTkFCTEUpCisJCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047CisJfQogCWlmICghcHJpdi0+Y2ZnLT5za3UpIHsKIAkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBkZXZpY2Ugc2t1XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDM2MzM1YjEuLmMxY2ZkOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xMTU3LDYgKzExNTcsOSBAQAogCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJLyogUmUtZW5hYmxlIFJGX0tJTEwgaWYgaXQgb2NjdXJyZWQgKi8KKwllbHNlIGlmIChoYW5kbGVkICYgQ1NSX0lOVF9CSVRfUkZfS0lMTCkKKwkJaXdsX2VuYWJsZV9yZmtpbGxfaW50KHByaXYpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewpAQCAtMTM3MSw2ICsxMzc0LDkgQEAKIAkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCisJZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCisJCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKIH0KIAogLyogdGhlIHRocmVzaG9sZCByYXRpbyBvZiBhY3R1YWxfYWNrX2NudCB0byBleHBlY3RlZF9hY2tfY250IGluIHBlcmNlbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IDBiNGU4NTkuLjAyOWJlM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMjQ0Niw2ICsyNDQ2LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5M2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNjcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODEyLCAweDMxMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIFFjb20gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYxOTYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjIyOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKaW5kZXggYjg0MzNmMy4uNjI4NzZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYwpAQCAtNzI2LDkgKzcyNiw5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGVmdXNlX3dyaXRlX2RhdGFfY2FzZTEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiAqZWZ1c2VfYWRkciwKLQkJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIGludCAqYmNvbnRpbnVhbCwKLQkJCQl1OCAqd3JpdGVfc3RhdGUsIHN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdGFyZ2V0X3BrdCwKLQkJCQlpbnQgKnJlcGVhdF90aW1lcywgaW50ICpicmVzdWx0LCB1OCB3b3JkX2VuKQorCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCBpbnQgKmJjb250aW51YWwsCisJCQl1OCAqd3JpdGVfc3RhdGUsIHN0cnVjdCBwZ3BrdF9zdHJ1Y3QgKnRhcmdldF9wa3QsCisJCQlpbnQgKnJlcGVhdF90aW1lcywgaW50ICpicmVzdWx0LCB1OCB3b3JkX2VuKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRtcF9wa3Q7CkBAIC03NDQsOCArNzQ0LDggQEAKIAl0bXBfcGt0LndvcmRfZW4gPSB0bXBfaGVhZGVyICYgMHgwRjsKIAl0bXBfd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh0bXBfcGt0LndvcmRfZW4pOwogCi0JaWYgKHRtcF9wa3Qub2Zmc2V0ICE9IHRhcmdldF9wa3Qub2Zmc2V0KSB7Ci0JCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CisJaWYgKHRtcF9wa3Qub2Zmc2V0ICE9IHRhcmdldF9wa3QtPm9mZnNldCkgeworCQkqZWZ1c2VfYWRkciA9ICplZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CiAJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAl9IGVsc2UgewogCQlmb3IgKHRtcGluZGV4ID0gMDsgdG1waW5kZXggPCAodG1wX3dvcmRfY250cyAqIDIpOyB0bXBpbmRleCsrKSB7CkBAIC03NTYsMjMgKzc1NiwyMyBAQAogCQl9CiAKIAkJaWYgKGJkYXRhZW1wdHkgPT0gZmFsc2UpIHsKLQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CisJCQkqZWZ1c2VfYWRkciA9ICplZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CiAJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJCX0gZWxzZSB7CiAJCQltYXRjaF93b3JkX2VuID0gMHgwRjsKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMCkpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDApKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMCkpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDApKTsKIAotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgxKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMSkpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgxKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMSkpOwogCi0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDIpKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgyKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDIpKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgyKSk7CiAKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMykpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDMpKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMykpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDMpKTsKIApAQCAtNzgwLDcgKzc4MCw3IEBACiAJCQkJYmFkd29yZGVuID0gZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV93cml0ZSgKIAkJCQkJCQkgICAgaHcsICplZnVzZV9hZGRyICsgMSwKIAkJCQkJCQkgICAgdG1wX3BrdC53b3JkX2VuLAotCQkJCQkJCSAgICB0YXJnZXRfcGt0LmRhdGEpOworCQkJCQkJCSAgICB0YXJnZXRfcGt0LT5kYXRhKTsKIAogCQkJCWlmICgweDBGICE9IChiYWR3b3JkZW4gJiAweDBGKSkgewogCQkJCQl1OCByZW9yZ19vZmZzZXQgPSBvZmZzZXQ7CkBAIC03OTEsMjYgKzc5MSwyNiBAQAogCQkJCX0KIAogCQkJCXRtcF93b3JkX2VuID0gMHgwRjsKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgwKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgwKSkgXgogCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgwKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDApKTsKIAotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDEpKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDEpKSBeCiAJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDEpKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMSkpOwogCi0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMikpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMikpIF4KIAkJCQkJKG1hdGNoX3dvcmRfZW4gJiBCSVQoMikpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgyKSk7CiAKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgzKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgzKSkgXgogCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgzKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDMpKTsKIAogCQkJCWlmICgodG1wX3dvcmRfZW4gJiAweDBGKSAhPSAweDBGKSB7CiAJCQkJCSplZnVzZV9hZGRyID0gZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShodyk7Ci0JCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OwotCQkJCQl0YXJnZXRfcGt0LndvcmRfZW4gPSB0bXBfd29yZF9lbjsKKwkJCQkJdGFyZ2V0X3BrdC0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJCQl0YXJnZXRfcGt0LT53b3JkX2VuID0gdG1wX3dvcmRfZW47CiAJCQkJfSBlbHNlCiAJCQkJCSpiY29udGludWFsID0gZmFsc2U7CiAJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwpAQCAtODIxLDggKzgyMSw4IEBACiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkqZWZ1c2VfYWRkciArPSAoMiAqIHRtcF93b3JkX2NudHMpICsgMTsKLQkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKLQkJCQl0YXJnZXRfcGt0LndvcmRfZW4gPSB3b3JkX2VuOworCQkJCXRhcmdldF9wa3QtPm9mZnNldCA9IG9mZnNldDsKKwkJCQl0YXJnZXRfcGt0LT53b3JkX2VuID0gd29yZF9lbjsKIAkJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJCQl9CiAJCX0KQEAgLTkzOCw3ICs5MzgsNyBAQAogCQkJCWVmdXNlX3dyaXRlX2RhdGFfY2FzZTEoaHcsICZlZnVzZV9hZGRyLAogCQkJCQkJICAgICAgIGVmdXNlX2RhdGEsIG9mZnNldCwKIAkJCQkJCSAgICAgICAmYmNvbnRpbnVhbCwKLQkJCQkJCSAgICAgICAmd3JpdGVfc3RhdGUsIHRhcmdldF9wa3QsCisJCQkJCQkgICAgICAgJndyaXRlX3N0YXRlLCAmdGFyZ2V0X3BrdCwKIAkJCQkJCSAgICAgICAmcmVwZWF0X3RpbWVzLCAmYnJlc3VsdCwKIAkJCQkJCSAgICAgICB3b3JkX2VuKTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCmluZGV4IDBmYTM2YWEuLjE3NThkNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwpAQCAtNjE5LDYgKzYxOSwxMyBAQAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqdXNrYiA9IE5VTEw7CiAJCQkJCXU4ICpwZGF0YTsKIAkJCQkJdXNrYiA9IGRldl9hbGxvY19za2Ioc2tiLT5sZW4gKyAxMjgpOworCQkJCQlpZiAoIXVza2IpIHsKKwkJCQkJCVJUX1RSQUNFKHJ0bHByaXYsCisJCQkJCQkJKENPTVBfSU5UUiB8IENPTVBfUkVDViksCisJCQkJCQkJREJHX0VNRVJHLAorCQkJCQkJCSgiY2FuJ3QgYWxsb2Mgcnggc2tiXG4iKSk7CisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCX0KIAkJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQih1c2tiKSwKIAkJCQkJCQkmcnhfc3RhdHVzLAogCQkJCQkJCXNpemVvZihyeF9zdGF0dXMpKTsKQEAgLTY0MSw3ICs2NDgsNyBAQAogCQkJbmV3X3NrYiA9IGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOwogCQkJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkgewogCQkJCVJUX1RSQUNFKHJ0bHByaXYsIChDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAotCQkJCQkgREJHX0RNRVNHLAorCQkJCQkgREJHX0VNRVJHLAogCQkJCQkgKCJjYW4ndCBhbGxvYyBza2IgZm9yIHJ4XG4iKSk7CiAJCQkJZ290byBkb25lOwogCQkJfQpAQCAtMTA2Niw5ICsxMDczLDkgQEAKIAkJCXN0cnVjdCBza19idWZmICpza2IgPQogCQkJICAgIGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOwogCQkJdTMyIGJ1ZmZlcmFkZHJlc3M7Ci0JCQllbnRyeSA9ICZydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjW2ldOwogCQkJaWYgKCFza2IpCiAJCQkJcmV0dXJuIDA7CisJCQllbnRyeSA9ICZydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjW2ldOwogCiAJCQkvKnNrYi0+ZGV2ID0gZGV2OyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYwppbmRleCAwMTJlMWE0Li40MDM3MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKQEAgLTEwMzksNiArMTAzOSw5IEBACiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgewogCQliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKwkJaWYgKCFiZWFjb24pCisJCQlnb3RvIG91dF9zbGVlcDsKKwogCQlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX0JFQUNPTiwgYmVhY29uLT5kYXRhLAogCQkJCQkgICAgICBiZWFjb24tPmxlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYwppbmRleCA0NjcxNDkxLi43MTQ1ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCkBAIC0xMTAsOSArMTEwLDggQEAKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwogCiAJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOwotCWtmcmVlKGNtZCk7Ci0KIAl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGkgcmVzZXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CisJa2ZyZWUoY21kKTsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCA1NDZkZTU3Li5kYTFmMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTIwLDYgKzEyMCw5IEBACiAJdW5zaWduZWQgbG9uZyByeF9wZm5fYXJyYXlbTkVUX1JYX1JJTkdfU0laRV07CiAJc3RydWN0IG11bHRpY2FsbF9lbnRyeSByeF9tY2xbTkVUX1JYX1JJTkdfU0laRSsxXTsKIAlzdHJ1Y3QgbW11X3VwZGF0ZSByeF9tbXVbTkVUX1JYX1JJTkdfU0laRV07CisKKwkvKiBTdGF0aXN0aWNzICovCisJaW50IHJ4X2dzb19jaGVja3N1bV9maXh1cDsKIH07CiAKIHN0cnVjdCBuZXRmcm9udF9yeF9pbmZvIHsKQEAgLTc3MCwxMSArNzczLDI5IEBACiAJcmV0dXJuIGNvbnM7CiB9CiAKLXN0YXRpYyBpbnQgc2tiX2NoZWNrc3VtX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGNoZWNrc3VtX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJdW5zaWduZWQgY2hhciAqdGg7CiAJaW50IGVyciA9IC1FUFJPVE87CisJaW50IHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSA9IDA7CisKKwkvKgorCSAqIEEgR1NPIFNLQiBtdXN0IGJlIENIRUNLU1VNX1BBUlRJQUwuIEhvd2V2ZXIgc29tZSBidWdneQorCSAqIHBlZXJzIGNhbiBmYWlsIHRvIHNldCBORVRSWEZfY3N1bV9ibGFuayB3aGVuIHNlbmRpbmcgYSBHU08KKwkgKiBmcmFtZS4gSW4gdGhpcyBjYXNlIGZvcmNlIHRoZSBTS0IgdG8gQ0hFQ0tTVU1fUEFSVElBTCBhbmQKKwkgKiByZWNhbGN1bGF0ZSB0aGUgcGFydGlhbCBjaGVja3N1bS4KKwkgKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCAmJiBza2JfaXNfZ3NvKHNrYikpIHsKKwkJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJbnAtPnJ4X2dzb19jaGVja3N1bV9maXh1cCsrOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CisJCXJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSA9IDE7CisJfQorCisJLyogQSBub24tQ0hFQ0tTVU1fUEFSVElBTCBTS0IgZG9lcyBub3QgcmVxdWlyZSBzZXR1cC4gKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpCiAJCWdvdG8gb3V0OwpAQCAtNzg4LDkgKzgwOSwyMyBAQAogCXN3aXRjaCAoaXBoLT5wcm90b2NvbCkgewogCWNhc2UgSVBQUk9UT19UQ1A6CiAJCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CisKKwkJaWYgKHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSkgeworCQkJc3RydWN0IHRjcGhkciAqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopdGg7CisJCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkJCSBza2ItPmxlbiAtIGlwaC0+aWhsKjQsCisJCQkJCQkJIElQUFJPVE9fVENQLCAwKTsKKwkJfQogCQlicmVhazsKIAljYXNlIElQUFJPVE9fVURQOgogCQlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOworCisJCWlmIChyZWNhbGN1bGF0ZV9wYXJ0aWFsX2NzdW0pIHsKKwkJCXN0cnVjdCB1ZHBoZHIgKnVkcGggPSAoc3RydWN0IHVkcGhkciAqKXRoOworCQkJdWRwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCQkgc2tiLT5sZW4gLSBpcGgtPmlobCo0LAorCQkJCQkJCSBJUFBST1RPX1VEUCwgMCk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTgyOSwxMyArODY0LDExIEBACiAJCS8qIEV0aGVybmV0IHdvcms6IERlbGF5ZWQgdG8gaGVyZSBhcyBpdCBwZWVrcyB0aGUgaGVhZGVyLiAqLwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlpZiAoc2tiX2NoZWNrc3VtX3NldHVwKHNrYikpIHsKLQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQlwYWNrZXRzX2Ryb3BwZWQrKzsKLQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQlpZiAoY2hlY2tzdW1fc2V0dXAoZGV2LCBza2IpKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXBhY2tldHNfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0xNjMyLDEyICsxNjY1LDU5IEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHhlbm5ldF9zdGF0IHsKKwljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKKwl1MTYgb2Zmc2V0OworfSB4ZW5uZXRfc3RhdHNbXSA9IHsKKwl7CisJCSJyeF9nc29fY2hlY2tzdW1fZml4dXAiLAorCQlvZmZzZXRvZihzdHJ1Y3QgbmV0ZnJvbnRfaW5mbywgcnhfZ3NvX2NoZWNrc3VtX2ZpeHVwKQorCX0sCit9OworCitzdGF0aWMgaW50IHhlbm5ldF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaW5nX3NldCkKK3sKKwlzd2l0Y2ggKHN0cmluZ19zZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIEFSUkFZX1NJWkUoeGVubmV0X3N0YXRzKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbm5ldF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKiBkYXRhKQoreworCXZvaWQgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhlbm5ldF9zdGF0cyk7IGkrKykKKwkJZGF0YVtpXSA9ICooaW50ICopKG5wICsgeGVubmV0X3N0YXRzW2ldLm9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbm5ldF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4ZW5uZXRfc3RhdHMpOyBpKyspCisJCQltZW1jcHkoZGF0YSArIGkgKiBFVEhfR1NUUklOR19MRU4sCisJCQkgICAgICAgeGVubmV0X3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB4ZW5uZXRfZXRodG9vbF9vcHMgPQogewogCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCiAJLnNldF9zZyA9IHhlbm5ldF9zZXRfc2csCiAJLnNldF90c28gPSB4ZW5uZXRfc2V0X3RzbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCisJLmdldF9zc2V0X2NvdW50ID0geGVubmV0X2dldF9zc2V0X2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHhlbm5ldF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3N0cmluZ3MgPSB4ZW5uZXRfZ2V0X3N0cmluZ3MsCiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCmluZGV4IGEyZDlkMWUuLmE4NDhlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCkBAIC02NzgsNyArNjc4LDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGxlZnQgYW55IHBvaW50ZXJzIGFyb3VuZCBpbiB0aGUgd2FpdAogCSAqIGxpc3QuICovCi0Jc3Bpbl9sb2NrICgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CiAJaWYgKGRldi0+d2FpdHByZXYgfHwgZGV2LT53YWl0bmV4dCB8fCBwb3J0LT53YWl0aGVhZCA9PSBkZXYpIHsKIAkJaWYgKGRldi0+d2FpdHByZXYpCiAJCQlkZXYtPndhaXRwcmV2LT53YWl0bmV4dCA9IGRldi0+d2FpdG5leHQ7CkBAIC02ODksNyArNjg5LDcgQEAKIAkJZWxzZQogCQkJcG9ydC0+d2FpdHRhaWwgPSBkZXYtPndhaXRwcmV2OwogCX0KLQlzcGluX3VubG9jayAoJnBvcnQtPndhaXRsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CiAKIAlrZnJlZShkZXYtPnN0YXRlKTsKIAlrZnJlZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCmluZGV4IDE3NTJlZjAuLmE5MWQ1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZmkuaD4KICNpbmNsdWRlIDxhc20vbXJzdC5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+Ci0jaW5jbHVkZSA8YXNtL21yc3QuaD4KIAogLyogSVBDIGRlZmluZXMgdGhlIGZvbGxvd2luZyBtZXNzYWdlIHR5cGVzICovCiAjZGVmaW5lIElQQ01TR19XQVRDSERPR19USU1FUiAweEY4IC8qIFNldCBLZXJuZWwgV2F0Y2hkb2cgVGhyZXNob2xkICovCkBAIC0xNjEsNyArMTYwLDcgQEAKIHsKIAlpbnQgaSwgbmMsIGJ5dGVzLCBkOwogCXUzMiBvZmZzZXQgPSAwOwotCXUzMiBlcnIgPSAwOworCWludCBlcnI7CiAJdTggY2J1ZltJUENfV1dCVUZfU0laRV0gPSB7IH07CiAJdTMyICp3YnVmID0gKHUzMiAqKSZjYnVmOwogCkBAIC00MDQsNyArNDAzLDcgQEAKICAqLwogaW50IGludGVsX3NjdV9pcGNfc2ltcGxlX2NvbW1hbmQoaW50IGNtZCwgaW50IHN1YikKIHsKLQl1MzIgZXJyID0gMDsKKwlpbnQgZXJyOwogCiAJbXV0ZXhfbG9jaygmaXBjbG9jayk7CiAJaWYgKGlwY2Rldi5wZGV2ID09IE5VTEwpIHsKQEAgLTQzNCw4ICs0MzMsNyBAQAogaW50IGludGVsX3NjdV9pcGNfY29tbWFuZChpbnQgY21kLCBpbnQgc3ViLCB1MzIgKmluLCBpbnQgaW5sZW4sCiAJCQkJCQkJdTMyICpvdXQsIGludCBvdXRsZW4pCiB7Ci0JdTMyIGVyciA9IDA7Ci0JaW50IGkgPSAwOworCWludCBpLCBlcnI7CiAKIAltdXRleF9sb2NrKCZpcGNsb2NrKTsKIAlpZiAoaXBjZGV2LnBkZXYgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwY3V0aWwuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMKaW5kZXggYmEzMjMxZC4uYjkzYTAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwY3V0aWwuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjdXRpbC5jCkBAIC0xMjgsNiArMTI4LDYgQEAKIG1vZHVsZV9pbml0KGlwY19tb2R1bGVfaW5pdCk7CiBtb2R1bGVfZXhpdChpcGNfbW9kdWxlX2V4aXQpOwogCi1NT0RVTEVfTElDRU5TRSgiR1BMIFYyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlV0aWxpdHkgZHJpdmVyIGZvciBpbnRlbCBzY3UgaXBjIik7CiBNT0RVTEVfQVVUSE9SKCJTcmVlZGhhcmEgPHNyZWVkaGFyYS5kc0BpbnRlbC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwcy1rdGltZXIuYyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jCmluZGV4IDI3Mjg0NjkuLjgyNTgzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jCkBAIC00Niw4ICs0Niw2IEBACiAJLyogRmlyc3Qgb2YgYWxsIHdlIGdldCB0aGUgdGltZSBzdGFtcC4uLiAqLwogCXBwc19nZXRfdHMoJnRzKTsKIAotCWRldl9pbmZvKHBwcy0+ZGV2LCAiUFBTIGV2ZW50IGF0ICVsdVxuIiwgamlmZmllcyk7Ci0KIAlwcHNfZXZlbnQocHBzLCAmdHMsIFBQU19DQVBUVVJFQVNTRVJULCBOVUxMKTsKIAogCW1vZF90aW1lcigma3RpbWVyLCBqaWZmaWVzICsgSFopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHNfcGFycG9ydC5jIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHNfcGFycG9ydC5jCmluZGV4IDMyMjIxZWYuLmM1NzFkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzX3BhcnBvcnQuYworKysgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCX0KIAogCWRldmljZS0+cGFyZGV2ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UocG9ydCwgS0JVSUxEX01PRE5BTUUsCi0JCQlOVUxMLCBOVUxMLCBwYXJwb3J0X2lycSwgMCwgZGV2aWNlKTsKKwkJCU5VTEwsIE5VTEwsIHBhcnBvcnRfaXJxLCBQQVJQT1JUX0ZMQUdfRVhDTCwgZGV2aWNlKTsKIAlpZiAoIWRldmljZS0+cGFyZGV2KSB7CiAJCXByX2VycigiY291bGRuJ3QgcmVnaXN0ZXIgd2l0aCAlc1xuIiwgcG9ydC0+bmFtZSk7CiAJCWdvdG8gZXJyX2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwppbmRleCA1YzMyZjhkLi5iOTNhZjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCX0KIAogCWRldmljZS5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIDAsICZkZXZpY2UpOworCQkJTlVMTCwgTlVMTCwgTlVMTCwgUEFSUE9SVF9GTEFHX0VYQ0wsICZkZXZpY2UpOwogCWlmICghZGV2aWNlLnBhcmRldikgewogCQlwcl9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIHdpdGggJXNcbiIsIHBvcnQtPm5hbWUpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCmluZGV4IDQ2N2U4MmIuLmE1MDM5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCkBAIC05NDMsNiArOTQzLDggQEAKICAqIEBwb3J0OiBNYXN0ZXIgcG9ydCB0byBzZW5kIHRyYW5zYWN0aW9ucwogICogQGRlc3RpZDogQ3VycmVudCBkZXN0aW5hdGlvbiBJRCBpbiBuZXR3b3JrCiAgKiBAaG9wY291bnQ6IE51bWJlciBvZiBob3BzIGludG8gdGhlIG5ldHdvcmsKKyAqIEBwcmV2OiBwcmV2aW91cyByaW9fZGV2CisgKiBAcHJldl9wb3J0OiBwcmV2aW91cyBwb3J0IG51bWJlcgogICoKICAqIFJlY3Vyc2l2ZWx5IGRpc2NvdmVycyBhIFJJTyBuZXR3b3JrLiAgVHJhbnNhY3Rpb25zIGFyZSBzZW50IHZpYSB0aGUKICAqIG1hc3RlciBwb3J0IHBhc3NlZCBpbiBAcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDQ5NDFjYWQuLmNkZDk3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtOTcsMTggKzk3LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAotY29uZmlnIFJUQ19JTlRGX0RFVl9VSUVfRU1VTAotCWJvb2wgIlJUQyBVSUUgZW11bGF0aW9uIG9uIGRldiBpbnRlcmZhY2UiCi0JZGVwZW5kcyBvbiBSVENfSU5URl9ERVYKLQloZWxwCi0JICBQcm92aWRlcyBhbiBlbXVsYXRpb24gZm9yIFJUQ19VSUUgaWYgdGhlIHVuZGVybHlpbmcgcnRjIGNoaXAKLQkgIGRyaXZlciBkb2VzIG5vdCBleHBvc2UgUlRDX1VJRSBpb2N0bHMuIFRob3NlIHJlcXVlc3RzIGdlbmVyYXRlCi0JICBvbmNlLXBlci1zZWNvbmQgdXBkYXRlIGludGVycnVwdHMsIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbi4KLQotCSAgVGhlIGVtdWxhdGlvbiBjb2RlIHdpbGwgcmVhZCB0aGUgdGltZSBmcm9tIHRoZSBoYXJkd2FyZQotCSAgY2xvY2sgc2V2ZXJhbCB0aW1lcyBwZXIgc2Vjb25kLCBwbGVhc2UgZW5hYmxlIHRoaXMgb3B0aW9uCi0JICBvbmx5IGlmIHlvdSBrbm93IHRoYXQgeW91IHJlYWxseSBuZWVkIGl0LgotCiBjb25maWcgUlRDX0RSVl9URVNUCiAJdHJpc3RhdGUgIlRlc3QgZHJpdmVyL2RldmljZSIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCA5NTgzY2JjLi5jNDA0YjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogCXJ0Yy0+aWQgPSBpZDsKIAlydGMtPm9wcyA9IG9wczsKIAlydGMtPm93bmVyID0gb3duZXI7CisJcnRjLT5pcnFfZnJlcSA9IDE7CiAJcnRjLT5tYXhfdXNlcl9mcmVxID0gNjQ7CiAJcnRjLT5kZXYucGFyZW50ID0gZGV2OwogCXJ0Yy0+ZGV2LmNsYXNzID0gcnRjX2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCA5MDM4NGI5Li5hMGMwMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorc3RhdGljIGludCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcik7CitzdGF0aWMgdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKKwogc3RhdGljIGludCBfX3J0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlpbnQgZXJyOwpAQCAtMTIwLDEyICsxMjMsMTggQEAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJ0Yy0+b3BzX2xvY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JYWxhcm0tPmVuYWJsZWQgPSBydGMtPmFpZV90aW1lci5lbmFibGVkOwotCWlmIChhbGFybS0+ZW5hYmxlZCkKKwlpZiAocnRjLT5vcHMgPT0gTlVMTCkKKwkJZXJyID0gLUVOT0RFVjsKKwllbHNlIGlmICghcnRjLT5vcHMtPnJlYWRfYWxhcm0pCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZSB7CisJCW1lbXNldChhbGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfd2thbHJtKSk7CisJCWFsYXJtLT5lbmFibGVkID0gcnRjLT5haWVfdGltZXIuZW5hYmxlZDsKIAkJYWxhcm0tPnRpbWUgPSBydGNfa3RpbWVfdG9fdG0ocnRjLT5haWVfdGltZXIubm9kZS5leHBpcmVzKTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfcmVhZF9hbGFybSk7CiAKQEAgLTE3NSwxNiArMTg0LDE0IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQpIHsKIAkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAwOwogCX0KIAlydGMtPmFpZV90aW1lci5ub2RlLmV4cGlyZXMgPSBydGNfdG1fdG9fa3RpbWUoYWxhcm0tPnRpbWUpOwogCXJ0Yy0+YWllX3RpbWVyLnBlcmlvZCA9IGt0aW1lX3NldCgwLCAwKTsKIAlpZiAoYWxhcm0tPmVuYWJsZWQpIHsKLQkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDE7Ci0JCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJZXJyID0gcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOwogCX0KIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfc2V0X2FsYXJtKTsKIApAQCAtMTk1LDE1ICsyMDIsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChydGMtPmFpZV90aW1lci5lbmFibGVkICE9IGVuYWJsZWQpIHsKLQkJaWYgKGVuYWJsZWQpIHsKLQkJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAxOwotCQkJcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOwotCQl9IGVsc2UgeworCQlpZiAoZW5hYmxlZCkKKwkJCWVyciA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJZWxzZQogCQkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCQlydGMtPmFpZV90aW1lci5lbmFibGVkID0gMDsKLQkJfQogCX0KIAorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlpZiAoIXJ0Yy0+b3BzKQogCQllcnIgPSAtRU5PREVWOwogCWVsc2UgaWYgKCFydGMtPm9wcy0+YWxhcm1faXJxX2VuYWJsZSkKQEAgLTIzNSwxMiArMjQyLDkgQEAKIAkJbm93ID0gcnRjX3RtX3RvX2t0aW1lKHRtKTsKIAkJcnRjLT51aWVfcnRjdGltZXIubm9kZS5leHBpcmVzID0ga3RpbWVfYWRkKG5vdywgb25lc2VjKTsKIAkJcnRjLT51aWVfcnRjdGltZXIucGVyaW9kID0ga3RpbWVfc2V0KDEsIDApOwotCQlydGMtPnVpZV9ydGN0aW1lci5lbmFibGVkID0gMTsKLQkJcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT51aWVfcnRjdGltZXIpOwotCX0gZWxzZSB7CisJCWVyciA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+dWllX3J0Y3RpbWVyKTsKKwl9IGVsc2UKIAkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPnVpZV9ydGN0aW1lcik7Ci0JCXJ0Yy0+dWllX3J0Y3RpbWVyLmVuYWJsZWQgPSAwOwotCX0KIAogb3V0OgogCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CkBAIC00NjAsNiArNDY0LDkgQEAKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGZyZXEgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CiAJaWYgKHJ0Yy0+aXJxX3Rhc2sgIT0gTlVMTCAmJiB0YXNrID09IE5VTEwpCiAJCWVyciA9IC1FQlVTWTsKQEAgLTQ4OCwxMCArNDk1LDEzIEBACiAgKiBFbnF1ZXVlcyBhIHRpbWVyIG9udG8gdGhlIHJ0YyBkZXZpY2VzIHRpbWVycXVldWUgYW5kIHNldHMKICAqIHRoZSBuZXh0IGFsYXJtIGV2ZW50IGFwcHJvcHJpYXRlbHkuCiAgKgorICogU2V0cyB0aGUgZW5hYmxlZCBiaXQgb24gdGhlIGFkZGVkIHRpbWVyLgorICoKICAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQogICovCi12b2lkIHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQorc3RhdGljIGludCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcikKIHsKKwl0aW1lci0+ZW5hYmxlZCA9IDE7CiAJdGltZXJxdWV1ZV9hZGQoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKIAlpZiAoJnRpbWVyLT5ub2RlID09IHRpbWVycXVldWVfZ2V0bmV4dCgmcnRjLT50aW1lcnF1ZXVlKSkgewogCQlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKQEAgLTUwMSw3ICs1MTEsMTMgQEAKIAkJZXJyID0gX19ydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKIAkJaWYgKGVyciA9PSAtRVRJTUUpCiAJCQlzY2hlZHVsZV93b3JrKCZydGMtPmlycXdvcmspOworCQllbHNlIGlmIChlcnIpIHsKKwkJCXRpbWVycXVldWVfZGVsKCZydGMtPnRpbWVycXVldWUsICZ0aW1lci0+bm9kZSk7CisJCQl0aW1lci0+ZW5hYmxlZCA9IDA7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTUxMiwxMyArNTI4LDE1IEBACiAgKiBSZW1vdmVzIGEgdGltZXIgb250byB0aGUgcnRjIGRldmljZXMgdGltZXJxdWV1ZSBhbmQgc2V0cwogICogdGhlIG5leHQgYWxhcm0gZXZlbnQgYXBwcm9wcmlhdGVseS4KICAqCisgKiBDbGVhcnMgdGhlIGVuYWJsZWQgYml0IG9uIHRoZSByZW1vdmVkIHRpbWVyLgorICoKICAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQogICovCi12b2lkIHJ0Y190aW1lcl9yZW1vdmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpCitzdGF0aWMgdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQogewogCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJnJ0Yy0+dGltZXJxdWV1ZSk7CiAJdGltZXJxdWV1ZV9kZWwoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKLQorCXRpbWVyLT5lbmFibGVkID0gMDsKIAlpZiAobmV4dCA9PSAmdGltZXItPm5vZGUpIHsKIAkJc3RydWN0IHJ0Y193a2Fscm0gYWxhcm07CiAJCWludCBlcnI7CkBAIC02MjYsOCArNjQ0LDcgQEAKIAl0aW1lci0+bm9kZS5leHBpcmVzID0gZXhwaXJlczsKIAl0aW1lci0+cGVyaW9kID0gcGVyaW9kOwogCi0JdGltZXItPmVuYWJsZWQgPSAxOwotCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgdGltZXIpOworCXJldCA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgdGltZXIpOwogCiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjQ1LDcgKzY2Miw2IEBACiAJbXV0ZXhfbG9jaygmcnRjLT5vcHNfbG9jayk7CiAJaWYgKHRpbWVyLT5lbmFibGVkKQogCQlydGNfdGltZXJfcmVtb3ZlKHJ0YywgdGltZXIpOwotCXRpbWVyLT5lbmFibGVkID0gMDsKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYwppbmRleCBiMjc1MmI2Li5lNzI1ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKQEAgLTEzNCwzNiArMTM0LDI5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdDMyX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgYXQzMl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBydGNfYXQzMmFwNzAweCAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT046CisJaWYoZW5hYmxlZCkgewogCQlpZiAocnRjX3JlYWRsKHJ0YywgVkFMKSA+IHJ0Yy0+YWxhcm1fdGltZSkgewogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CiAJCX0KIAkJcnRjX3dyaXRlbChydGMsIENUUkwsIHJ0Y19yZWFkbChydGMsIENUUkwpCiAJCQkJfCBSVENfQklUKENUUkxfVE9QRU4pKTsKIAkJcnRjX3dyaXRlbChydGMsIElDUiwgUlRDX0JJVChJQ1JfVE9QSSkpOwogCQlydGNfd3JpdGVsKHJ0YywgSUVSLCBSVENfQklUKElFUl9UT1BJKSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6CisJfSBlbHNlIHsKIAkJcnRjX3dyaXRlbChydGMsIENUUkwsIHJ0Y19yZWFkbChydGMsIENUUkwpCiAJCQkJJiB+UlRDX0JJVChDVFJMX1RPUEVOKSk7CiAJCXJ0Y193cml0ZWwocnRjLCBJRFIsIFJUQ19CSVQoSURSX1RPUEkpKTsKIAkJcnRjX3dyaXRlbChydGMsIElDUiwgUlRDX0JJVChJQ1JfVE9QSSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwogCX0KLQorb3V0OgogCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgYXQzMl9ydGNfb3BzID0gewotCS5pb2N0bAkJPSBhdDMyX3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gYXQzMl9ydGNfcmVhZHRpbWUsCiAJLnNldF90aW1lCT0gYXQzMl9ydGNfc2V0dGltZSwKIAkucmVhZF9hbGFybQk9IGF0MzJfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQzMl9ydGNfc2V0YWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDMyX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXQzMl9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IGJjOGJiY2EuLjI2ZDFjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMTk1LDEzICsxOTUsNiBAQAogCiAJLyogaW1wb3J0YW50OiAgc2NydWIgb2xkIHN0YXR1cyBiZWZvcmUgZW5hYmxpbmcgSVJRcyAqLwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUxBUk0pOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1NDQ1IsIEFUOTFfUlRDX0FMQVJNKTsKLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBBVDkxX1JUQ19BTEFSTSk7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CS8qIHVwZGF0ZSBvZmYgKi8KIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19TRUNFVik7CiAJCWJyZWFrOwpAQCAtMjE3LDYgKzIxMCwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXByX2RlYnVnKCIlcygpOiBjbWQ9JTA4eFxuIiwgX19mdW5jX18sIGVuYWJsZWQpOworCisJaWYgKGVuYWJsZWQpIHsKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfU0NDUiwgQVQ5MV9SVENfQUxBUk0pOworCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRVIsIEFUOTFfUlRDX0FMQVJNKTsKKwl9IGVsc2UKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CisKKwlyZXR1cm4gMDsKK30KIC8qCiAgKiBQcm92aWRlIGFkZGl0aW9uYWwgUlRDIGluZm9ybWF0aW9uIGluIC9wcm9jL2RyaXZlci9ydGMKICAqLwpAQCAtMjcwLDYgKzI3NSw3IEBACiAJLnJlYWRfYWxhcm0JPSBhdDkxX3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybQk9IGF0OTFfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IGF0OTFfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggZjY3N2UwNy4uYzM2NzQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTIyOSwxMiArMjI5LDYgQEAKIAlkZXZfZGJnKGRldiwgImlvY3RsOiBjbWQ9JTA4eCwgYXJnPSUwOGx4LCBtciAlMDh4XG4iLCBjbWQsIGFyZywgbXIpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkJLyogYWxhcm0gb2ZmICovCi0JCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfQUxNSUVOKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkJLyogYWxhcm0gb24gKi8KLQkJcnR0X3dyaXRlbChydGMsIE1SLCBtciB8IEFUOTFfUlRUX0FMTUlFTik7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CQkvKiB1cGRhdGUgb2ZmICovCiAJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfUlRUSU5DSUVOKTsKIAkJYnJlYWs7CkBAIC0yNDksNiArMjQzLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHNhbTlfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MzIgbXIgPSBydHRfcmVhZGwocnRjLCBNUik7CisKKwlkZXZfZGJnKGRldiwgImFsYXJtX2lycV9lbmFibGU6IGVuYWJsZWQ9JTA4eCwgbXIgJTA4eFxuIiwgZW5hYmxlZCwgbXIpOworCWlmIChlbmFibGVkKQorCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yIHwgQVQ5MV9SVFRfQUxNSUVOKTsKKwllbHNlCisJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfQUxNSUVOKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFByb3ZpZGUgYWRkaXRpb25hbCBSVEMgaW5mb3JtYXRpb24gaW4gL3Byb2MvZHJpdmVyL3J0YwogICovCkBAIC0zMDIsNiArMzA5LDcgQEAKIAkucmVhZF9hbGFybQk9IGF0OTFfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQ5MV9ydGNfc2V0YWxhcm0sCiAJLnByb2MJCT0gYXQ5MV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZWQgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCmluZGV4IGI0YjYwODcuLjE3OTcxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwpAQCAtMjU5LDE1ICsyNTksNiBAQAogCQliZmluX3J0Y19pbnRfY2xlYXIoflJUQ19JU1RBVF9TRUMpOwogCQlicmVhazsKIAotCWNhc2UgUlRDX0FJRV9PTjoKLQkJZGV2X2RiZ19zdGFtcChkZXYpOwotCQliZmluX3J0Y19pbnRfc2V0X2FsYXJtKHJ0Yyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCWRldl9kYmdfc3RhbXAoZGV2KTsKLQkJYmZpbl9ydGNfaW50X2NsZWFyKH4oUlRDX0lTVEFUX0FMQVJNIHwgUlRDX0lTVEFUX0FMQVJNX0RBWSkpOwotCQlicmVhazsKLQogCWRlZmF1bHQ6CiAJCWRldl9kYmdfc3RhbXAoZGV2KTsKIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwpAQCAtMjc2LDYgKzI2NywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYmZpbl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBiZmluX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnX3N0YW1wKGRldik7CisJaWYgKGVuYWJsZWQpCisJCWJmaW5fcnRjX2ludF9zZXRfYWxhcm0ocnRjKTsKKwllbHNlCisJCWJmaW5fcnRjX2ludF9jbGVhcih+KFJUQ19JU1RBVF9BTEFSTSB8IFJUQ19JU1RBVF9BTEFSTV9EQVkpKTsKK30KKwogc3RhdGljIGludCBiZmluX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBiZmluX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0zNjIsNiArMzY0LDcgQEAKIAkucmVhZF9hbGFybSAgICA9IGJmaW5fcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSAgICAgPSBiZmluX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MgICAgICAgICAgPSBiZmluX3J0Y19wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gYmZpbl9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggMjEyYjE2ZS4uMzdjM2NjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtMTU0LDE5ICsxNTQsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZG9uZTsKIAotCS8qIHRyeSB0aGUgZHJpdmVyJ3MgaW9jdGwgaW50ZXJmYWNlICovCi0JaWYgKG9wcy0+aW9jdGwpIHsKLQkJZXJyID0gb3BzLT5pb2N0bChydGMtPmRldi5wYXJlbnQsIGNtZCwgYXJnKTsKLQkJaWYgKGVyciAhPSAtRU5PSU9DVExDTUQpIHsKLQkJCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHRoZSBpb2N0bCBpbnRlcmZhY2UKLQkgKiBvciBpZiB0aGF0IHBhcnRpY3VsYXIgaW9jdGwgd2FzIG5vdCBpbXBsZW1lbnRlZAotCSAqICgtRU5PSU9DVExDTUQpLCB3ZSB3aWxsIHRyeSB0byBlbXVsYXRlIGhlcmUuCi0JICoKKwkvKgogCSAqIERyaXZlcnMgKlNIT1VMRCBOT1QqIHByb3ZpZGUgaW9jdGwgaW1wbGVtZW50YXRpb25zCiAJICogZm9yIHRoZXNlIHJlcXVlc3RzLiAgSW5zdGVhZCwgcHJvdmlkZSBtZXRob2RzIHRvCiAJICogc3VwcG9ydCB0aGUgZm9sbG93aW5nIGNvZGUsIHNvIHRoYXQgdGhlIFJUQydzIG1haW4KQEAgLTMyOSw3ICszMTcsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAogCWRlZmF1bHQ6Ci0JCWVyciA9IC1FTk9UVFk7CisJCS8qIEZpbmFsbHkgdHJ5IHRoZSBkcml2ZXIncyBpb2N0bCBpbnRlcmZhY2UgKi8KKwkJaWYgKG9wcy0+aW9jdGwpIHsKKwkJCWVyciA9IG9wcy0+aW9jdGwocnRjLT5kZXYucGFyZW50LCBjbWQsIGFyZyk7CisJCQlpZiAoZXJyID09IC1FTk9JT0NUTENNRCkKKwkJCQllcnIgPSAtRU5PVFRZOworCQl9CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCmluZGV4IGJmNDMwZjkuLjYwY2U2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTQwLDYgKzQwLDI2IEBACiAJX19yYXdfd3JpdGVsKGRhdGEsICZwcml2LT5ydGNyZWdzW3JlZ10pOwogfQogCisKK3N0YXRpYyBpbnQgZHMxMjg2X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJLyogQWxsb3cgb3IgbWFzayBhbGFybSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJaWYgKGVuYWJsZWQpCisJCXZhbCAmPSAgflJUQ19URE07CisJZWxzZQorCQl2YWwgfD0gIFJUQ19URE07CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVgogCiBzdGF0aWMgaW50IGRzMTI4Nl9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtNDksMjIgKzY5LDYgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJLyogTWFzayBhbGFybSBpbnQuIGVuYWIuIGJpdAkqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7Ci0JCXZhbCB8PSAgUlRDX1RETTsKLQkJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJLyogQWxsb3cgYWxhcm0gaW50ZXJydXB0cy4JKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOwotCQl2YWwgJj0gIH5SVENfVERNOwotCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfV0lFX09GRjoKIAkJLyogTWFzayB3YXRjaGRvZyBpbnQuIGVuYWIuIGJpdAkqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMzE2LDEyICszMjAsMTMgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTI4Nl9vcHMgPSB7Ci0JLmlvY3RsICAgCT0gZHMxMjg2X2lvY3RsLAotCS5wcm9jICAgCT0gZHMxMjg2X3Byb2MsCisJLmlvY3RsCQk9IGRzMTI4Nl9pb2N0bCwKKwkucHJvYwkJPSBkczEyODZfcHJvYywKIAkucmVhZF90aW1lCT0gZHMxMjg2X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczEyODZfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczEyODZfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMjg2X3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTI4Nl9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZHMxMjg2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKaW5kZXggMDc3YWYxZC4uNTdmYmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwpAQCAtMTM5LDQ5ICsxMzksMzIgQEAKICAqIEludGVyZmFjZSB0byBSVEMgZnJhbWV3b3JrCiAgKi8KIAotI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVYKLQotLyoKLSAqIENvbnRleHQ6IGNhbGxlciBob2xkcyBydGMtPm9wc19sb2NrICh0byBwcm90ZWN0IGRzMTMwNS0+Y3RybCkKLSAqLwotc3RhdGljIGludCBkczEzMDVfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkczEzMDVfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBkczEzMDUJKmRzMTMwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXU4CQlidWZbMl07Ci0JaW50CQlzdGF0dXMgPSAtRU5PSU9DVExDTUQ7CisJbG9uZwkJZXJyID0gLUVJTlZBTDsKIAogCWJ1ZlswXSA9IERTMTMwNV9XUklURSB8IERTMTMwNV9DT05UUk9MOwogCWJ1ZlsxXSA9IGRzMTMwNS0+Y3RybFswXTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3RhdHVzID0gMDsKLQkJaWYgKCEoYnVmWzFdICYgRFMxMzA1X0FFSTApKQotCQkJZ290byBkb25lOwotCQlidWZbMV0gJj0gfkRTMTMwNV9BRUkwOwotCQlicmVhazsKLQotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3RhdHVzID0gMDsKKwlpZiAoZW5hYmxlZCkgewogCQlpZiAoZHMxMzA1LT5jdHJsWzBdICYgRFMxMzA1X0FFSTApCiAJCQlnb3RvIGRvbmU7CiAJCWJ1ZlsxXSB8PSBEUzEzMDVfQUVJMDsKLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJaWYgKCEoYnVmWzFdICYgRFMxMzA1X0FFSTApKQorCQkJZ290byBkb25lOworCQlidWZbMV0gJj0gfkRTMTMwNV9BRUkwOwogCX0KLQlpZiAoc3RhdHVzID09IDApIHsKLQkJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChkczEzMDUtPnNwaSwgYnVmLCBzaXplb2YgYnVmLAotCQkJCU5VTEwsIDApOwotCQlpZiAoc3RhdHVzID49IDApCi0JCQlkczEzMDUtPmN0cmxbMF0gPSBidWZbMV07Ci0JfQotCisJZXJyID0gc3BpX3dyaXRlX3RoZW5fcmVhZChkczEzMDUtPnNwaSwgYnVmLCBzaXplb2YgYnVmLCBOVUxMLCAwKTsKKwlpZiAoZXJyID49IDApCisJCWRzMTMwNS0+Y3RybFswXSA9IGJ1ZlsxXTsKIGRvbmU6Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZXJyOworCiB9CiAKLSNlbHNlCi0jZGVmaW5lIGRzMTMwNV9pb2N0bAlOVUxMCi0jZW5kaWYKIAogLyoKICAqIEdldC9zZXQgb2YgZGF0ZSBhbmQgdGltZSBpcyBwcmV0dHkgbm9ybWFsLgpAQCAtNDYwLDEyICs0NDMsMTIgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxMzA1X29wcyA9IHsKLQkuaW9jdGwJCT0gZHMxMzA1X2lvY3RsLAogCS5yZWFkX3RpbWUJPSBkczEzMDVfZ2V0X3RpbWUsCiAJLnNldF90aW1lCT0gZHMxMzA1X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMzA1X2dldF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMzA1X3NldF9hbGFybSwKIAkucHJvYwkJPSBkczEzMDVfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTMwNV9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIHZvaWQgZHMxMzA1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDBkNTU5YjYuLjQ3MjRiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTQ5NSw1MCArNDk1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzA3X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTMwN19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50CQkJcmV0OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQotCQkJcmV0dXJuIC1FTk9UVFk7CisJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9UVFk7CiAKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKKwlpZiAoZW5hYmxlZCkKKwkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKKwllbHNlCiAJCXJldCAmPSB+RFMxMzM3X0JJVF9BMUlFOwogCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJRFMxMzM3X1JFR19DT05UUk9MLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFJUQ19BSUVfT046Ci0JCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCi0JCQlyZXR1cm4gLUVOT1RUWTsKLQotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKLQotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXJldHVybiAwOwogfQpAQCAtNTQ4LDcgKzUyNSw3IEBACiAJLnNldF90aW1lCT0gZHMxMzA3X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMzM3X3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTMzN19zZXRfYWxhcm0sCi0JLmlvY3RsCQk9IGRzMTMwN19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTMwN19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwppbmRleCA0N2ZiNjM1Li5kODM0YTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCkBAIC0zMDcsNDIgKzMwNywyNSBAQAogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzc0X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTM3NF9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzc0ICpkczEzNzQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkczEzNzQtPm11dGV4KTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCi0JCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOwotCi0JY2FzZSBSVENfQUlFX09OOgotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQorCWlmIChlbmFibGVkKSB7CiAJCXJldCB8PSBEUzEzNzRfUkVHX0NSX1dBQ0UgfCBEUzEzNzRfUkVHX0NSX0FJRTsKIAkJcmV0ICY9IH5EUzEzNzRfUkVHX0NSX1dEQUxNOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOworCX0gZWxzZSB7CisJCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOwogCX0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUiwgcmV0KTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CkBAIC0zNTQsNyArMzM3LDcgQEAKIAkuc2V0X3RpbWUgPSBkczEzNzRfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0gPSBkczEzNzRfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gZHMxMzc0X3NldF9hbGFybSwKLQkuaW9jdGwgPSBkczEzNzRfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBkczEzNzRfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgZHMxMzc0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKaW5kZXggNWE4ZGFhMy4uNjlmZTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwpAQCAtMjEzLDQxICsyMTMsMjcgQEAKIAlyZXR1cm4gbTQxdDgwX3NldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKLXN0YXRpYyBpbnQKLW00MXQ4MF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbTQxdDgwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlpbnQgcmM7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQogCXJjID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04pOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZXJyOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmMgJj0gfk00MVQ4MF9BTE1PTl9BRkU7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKKworCWlmIChlbmFibGVkKQogCQlyYyB8PSBNNDFUODBfQUxNT05fQUZFOwotCQlicmVhazsKLQl9CisJZWxzZQorCQlyYyAmPSB+TTQxVDgwX0FMTU9OX0FGRTsKKwogCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04sIHJjKSA8IDApCiAJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJcmV0dXJuIC1FSU87CiB9Ci0jZWxzZQotI2RlZmluZQltNDF0ODBfcnRjX2lvY3RsIE5VTEwKLSNlbmRpZgogCiBzdGF0aWMgaW50IG00MXQ4MF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCiB7CkBAIC0zNzQsNyArMzYwLDcgQEAKIAkucmVhZF9hbGFybSA9IG00MXQ4MF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gbTQxdDgwX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MgPSBtNDF0ODBfcnRjX3Byb2MsCi0JLmlvY3RsID0gbTQxdDgwX3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG00MXQ4MF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGUykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCmluZGV4IGE5OWEwYjUuLjM5NzhmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKQEAgLTI2MywzMCArMjYzLDIxIEBACiAvKgogICogSGFuZGxlIGNvbW1hbmRzIGZyb20gdXNlci1zcGFjZQogICovCi1zdGF0aWMgaW50IG00OHQ1OV9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IG00OHQ1OV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbTQ4dDU5X3BsYXRfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbTQ4dDU5X3ByaXZhdGUgKm00OHQ1OSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbTQ4dDU5LT5sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBpbnRlcnJ1cHQgb2ZmICovCi0JCU00OFQ1OV9XUklURSgweDAwLCBNNDhUNTlfSU5UUik7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gaW50ZXJydXB0IG9uICovCisJaWYgKGVuYWJsZWQpCiAJCU00OFQ1OV9XUklURShNNDhUNTlfSU5UUl9BRkUsIE00OFQ1OV9JTlRSKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKLQl9CisJZWxzZQorCQlNNDhUNTlfV1JJVEUoMHgwMCwgTTQ4VDU5X0lOVFIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm00OHQ1OS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtNDh0NTlfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKQEAgLTMzMCwxMiArMzIxLDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0NTlfcnRjX29wcyA9IHsKLQkuaW9jdGwJCT0gbTQ4dDU5X3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gbTQ4dDU5X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gbTQ4dDU5X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG00OHQ1OV9ydGNfcmVhZGFsYXJtLAogCS5zZXRfYWxhcm0JPSBtNDh0NTlfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IG00OHQ1OV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG00OHQ1OV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0MDJfcnRjX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCmluZGV4IGJjZDBjZjYuLjFkYjYyZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpAQCAtMjU1LDQyICsyNTUsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKLQogLyogQ3VycmVudGx5LCB0aGUgdlJUQyBkb2Vzbid0IHN1cHBvcnQgVUlFIE9OL09GRiAqLwotc3RhdGljIGludAotbXJzdF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbXJzdF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBtcnN0X3J0YwkqbXJzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlpZiAoIW1yc3QtPmlycSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBQSUUgT04vT0ZGIGlzIGhhbmRsZWQgYnkgbXJzdF9pcnFfc2V0X3N0YXRlKCkgKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQltcnN0X2lycV9kaXNhYmxlKG1yc3QsIFJUQ19BSUUpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCisJaWYgKGVuYWJsZWQpCiAJCW1yc3RfaXJxX2VuYWJsZShtcnN0LCBSVENfQUlFKTsKLQkJYnJlYWs7Ci0JfQorCWVsc2UKKwkJbXJzdF9pcnFfZGlzYWJsZShtcnN0LCBSVENfQUlFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi0jZWxzZQotI2RlZmluZQltcnN0X3J0Y19pb2N0bAlOVUxMCi0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0NfTU9EVUxFKQogCkBAIC0zMTcsMTMgKzI5NiwxMyBAQAogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtcnN0X3J0Y19vcHMgPSB7Ci0JLmlvY3RsCQk9IG1yc3RfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBtcnN0X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBtcnN0X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gbXJzdF9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBtcnN0X3NldF9hbGFybSwKIAkucHJvYwkJPSBtcnN0X3Byb2NmcywKIAkuaXJxX3NldF9zdGF0ZQk9IG1yc3RfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG1yc3RfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1yc3RfcnRjCW1yc3RfcnRjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggYjJmZmYwYy4uNjc4MjA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbXNtNjI0Ml93cml0ZShzdHJ1Y3QgbXNtNjI0Ml9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgdmFsLAogCQkJCXVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOworCV9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNtNjI0Ml9zZXQoc3RydWN0IG1zbTYyNDJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHZhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jIGIvZHJpdmVycy9ydGMvcnRjLW12LmMKaW5kZXggYmNjYTQ3Mi4uNjA2MjdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW12LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW12LmMKQEAgLTE2OSwyNSArMTY5LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXZfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBtdl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAKIAlpZiAocGRhdGEtPmlycSA8IDApCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7IC8qIGZhbGwgYmFjayBpbnRvIHJ0Yy1kZXYncyBlbXVsYXRpb24gKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXdyaXRlbCgwLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CisJCXJldHVybiAtRUlOVkFMOyAvKiBmYWxsIGJhY2sgaW50byBydGMtZGV2J3MgZW11bGF0aW9uICovCisKKwlpZiAoZW5hYmxlZCkKIAkJd3JpdGVsKDEsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCWVsc2UKKwkJd3JpdGVsKDAsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNiw3ICsyMTAsNyBAQAogCS5zZXRfdGltZQk9IG12X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG12X3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBtdl9ydGNfc2V0X2FsYXJtLAotCS5pb2N0bAkJPSBtdl9ydGNfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBtdl9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG12X3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggZTcyYjUyMy4uYjRkYmYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC0xNDMsOCArMTQzLDYgQEAKIAl1OCByZWc7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgogCWNhc2UgUlRDX1VJRV9PRkY6CiAJY2FzZSBSVENfVUlFX09OOgogCQlicmVhazsKQEAgLTE1NiwxMyArMTU0LDYgQEAKIAlydGNfd2FpdF9ub3RfYnVzeSgpOwogCXJlZyA9IHJ0Y19yZWFkKE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHKTsKIAlzd2l0Y2ggKGNtZCkgewotCS8qIEFJRSA9IEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8KLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlyZWcgJj0gfk9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk07Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJcmVnIHw9IE9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk07Ci0JCWJyZWFrOwogCS8qIFVJRSA9IFVwZGF0ZSBJbnRlcnJ1cHQgRW5hYmxlICgxL3NlY29uZCkgKi8KIAljYXNlIFJUQ19VSUVfT0ZGOgogCQlyZWcgJj0gfk9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfVElNRVI7CkBAIC0xODIsNiArMTczLDI0IEBACiAjZGVmaW5lCW9tYXBfcnRjX2lvY3RsCU5VTEwKICNlbmRpZgogCitzdGF0aWMgaW50IG9tYXBfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwl1OCByZWc7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJ0Y193YWl0X25vdF9idXN5KCk7CisJcmVnID0gcnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCWlmIChlbmFibGVkKQorCQlyZWcgfD0gT01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTTsKKwllbHNlCisJCXJlZyAmPSB+T01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTTsKKwlydGNfd2FpdF9ub3RfYnVzeSgpOworCXJ0Y193cml0ZShyZWcsIE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogdGhpcyBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgImRvbid0IGNhcmUiIGFsYXJtIGZpZWxkcyAqLwogc3RhdGljIGludCB0bTJiY2Qoc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKQEAgLTMwOSw2ICszMTgsNyBAQAogCS5zZXRfdGltZQk9IG9tYXBfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gb21hcF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gb21hcF9ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gb21hcF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgb21hcF9ydGNfYWxhcm07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwppbmRleCBjMDg2ZmMzLi4yNDJiYmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKQEAgLTgxLDEyICs4MSwxNiBAQAogCiBzdGF0aWMgaW50IHJ0Y19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJaW50IHJldDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gUERFKGlub2RlKS0+ZGF0YTsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGNfcHJvY19zaG93LCBydGMpOworCXJldCA9IHNpbmdsZV9vcGVuKGZpbGUsIHJ0Y19wcm9jX3Nob3csIHJ0Yyk7CisJaWYgKHJldCkKKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydGNfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCmluZGV4IDM2ZWI2NjEuLjY5NGRhMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBycDVjMDFfd3JpdGUoc3RydWN0IHJwNWMwMV9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgdmFsLAogCQkJCXVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOworCV9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOwogfQogCiBzdGF0aWMgdm9pZCBycDVjMDFfbG9jayhzdHJ1Y3QgcnA1YzAxX3ByaXYgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwppbmRleCBkZDE0ZTIwLi42YWFhMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKQEAgLTI5OSwxNCArMjk5LDYgQEAKIAkJaWYgKHJzNWMtPnR5cGUgPT0gcnRjX3JzNWMzNzJhCiAJCQkJJiYgKGJ1ZiAmIFJTNUMzNzJBX0NUUkwxX1NMMSkpCiAJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQkvKiB0aGVzZSBpcnEgbWFuYWdlbWVudCBjYWxscyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGNoaXBzCi0JCSAqIHdoaWNoIGFyZSB3aXJlZCB1cCB0byBhbiBJUlEuCi0JCSAqLwotCQlpZiAoIXJzNWMtPmhhc19pcnEpCi0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KQEAgLTMxNywxMiArMzA5LDYgQEAKIAogCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCi0JCWJ1ZiAmPSB+UlM1Q19DVFJMMV9BQUxFOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCi0JCWJ1ZiB8PSBSUzVDX0NUUkwxX0FBTEU7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CS8qIHVwZGF0ZSBvZmYgKi8KIAkJYnVmICY9IH5SUzVDX0NUUkwxX0NUX01BU0s7CiAJCWJyZWFrOwpAQCAtMzQ3LDYgKzMzMywzOSBAQAogI2VuZGlmCiAKIAorc3RhdGljIGludCByczVjX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgcnM1YzM3MgkJKnJzNWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBjaGFyCQlidWY7CisJaW50CQkJc3RhdHVzLCBhZGRyOworCisJYnVmID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV07CisKKwlpZiAoIXJzNWMtPmhhc19pcnEpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gcnM1Y19nZXRfcmVncyhyczVjKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCWlmIChlbmFibGVkKQorCQlidWYgfD0gUlM1Q19DVFJMMV9BQUxFOworCWVsc2UKKwkJYnVmICY9IH5SUzVDX0NUUkwxX0FBTEU7CisKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGFkZHIsIGJ1ZikgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCB1cGRhdGUgYWxhcm1cbiIsCisJCQlyczVjLT5ydGMtPm5hbWUpOworCQlzdGF0dXMgPSAtRUlPOworCX0gZWxzZQorCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKwogLyogTk9URTogIFNpbmNlIFJUQ19XS0FMTV97UkQsU0VUfSB3ZXJlIG9yaWdpbmFsbHkgZGVmaW5lZCBmb3IgRUZJLAogICogd2hpY2ggb25seSBleHBvc2VzIGEgcG9sbGVkIHByb2dyYW1taW5nIGludGVyZmFjZTsgYW5kIHNpbmNlCiAgKiB0aGVzZSBjYWxscyBtYXAgZGlyZWN0bHkgdG8gdGhvc2UgRUZJIHJlcXVlc3RzOyB3ZSBkb24ndCBkZW1hbmQKQEAgLTQ2Niw2ICs0ODUsNyBAQAogCS5zZXRfdGltZQk9IHJzNWMzNzJfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gcnM1Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSByczVjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHJzNWNfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlMpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTX01PRFVMRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA4OGVhNTJiLi41ZGZlNWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zMTQsMTYgKzMxNCw2IEBACiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJUlRTUiAmPSB+UlRTUl9BTEU7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlSVFNSIHw9IFJUU1JfQUxFOwotCQlzcGluX3VubG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCXJldHVybiAwOwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7CiAJCVJUU1IgJj0gflJUU1JfSFpFOwpAQCAtMzM4LDYgKzMyOCwxNyBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkKKwkJUlRTUiB8PSBSVFNSX0FMRTsKKwllbHNlCisJCVJUU1IgJj0gflJUU1JfQUxFOworCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzYTExMDBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJcnRjX3RpbWVfdG9fdG0oUkNOUiwgdG0pOwpAQCAtNDEwLDYgKzQxMSw3IEBACiAJLnByb2MgPSBzYTExMDBfcnRjX3Byb2MsCiAJLmlycV9zZXRfZnJlcSA9IHNhMTEwMF9pcnFfc2V0X2ZyZXEsCiAJLmlycV9zZXRfc3RhdGUgPSBzYTExMDBfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHNhMTEwMF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAwNmU0MWVkLi45MzMxNGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMzUwLDEwICszNTAsNiBAQAogCXVuc2lnbmVkIGludCByZXQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc2hfcnRjX3NldGFpZShkZXYsIGNtZCA9PSBSVENfQUlFX09OKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9PWFM7CiAJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKQEAgLTM2OSw2ICszNjUsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNoX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc2hfcnRjX3NldGFpZShkZXYsIGVuYWJsZWQpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNoX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKQEAgLTYwNCw2ICs2MDYsNyBAQAogCS5pcnFfc2V0X3N0YXRlCT0gc2hfcnRjX2lycV9zZXRfc3RhdGUsCiAJLmlycV9zZXRfZnJlcQk9IHNoX3J0Y19pcnFfc2V0X2ZyZXEsCiAJLnByb2MJCT0gc2hfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBzaF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKaW5kZXggNTE3MjVmNy4uYTgyZDZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCkBAIC01MCwyNCArNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlc3RfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgdGVzdF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7Ci0JLyogV2UgZG8gc3VwcG9ydCBpbnRlcnJ1cHRzLCB0aGV5J3JlIGdlbmVyYXRlZAotCSAqIHVzaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuCi0JICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19QSUVfT046Ci0JY2FzZSBSVENfUElFX09GRjoKLQljYXNlIFJUQ19VSUVfT046Ci0JY2FzZSBSVENfVUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHRlc3RfcnRjX29wcyA9IHsKQEAgLTc2LDcgKzYxLDcgQEAKIAkucmVhZF9hbGFybSA9IHRlc3RfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSA9IHRlc3RfcnRjX3NldF9hbGFybSwKIAkuc2V0X21tc3MgPSB0ZXN0X3J0Y19zZXRfbW1zcywKLQkuaW9jdGwgPSB0ZXN0X3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHRlc3RfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0ZXN0X2lycV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCBjMzI0NDI0Li43NjkxOTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yNDAsMjYgKzI0MCw2IEBACiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JCWlmICghYWxhcm1fZW5hYmxlZCkgewotCQkJZW5hYmxlX2lycShhaWVfaXJxKTsKLQkJCWFsYXJtX2VuYWJsZWQgPSAxOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlpZiAoYWxhcm1fZW5hYmxlZCkgewotCQkJZGlzYWJsZV9pcnEoYWllX2lycSk7Ci0JCQlhbGFybV9lbmFibGVkID0gMDsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlicmVhazsKIAljYXNlIFJUQ19FUE9DSF9SRUFEOgogCQlyZXR1cm4gcHV0X3VzZXIoZXBvY2gsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CiAJY2FzZSBSVENfRVBPQ0hfU0VUOgpAQCAtMjc1LDYgKzI1NSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkgeworCQlpZiAoIWFsYXJtX2VuYWJsZWQpIHsKKwkJCWVuYWJsZV9pcnEoYWllX2lycSk7CisJCQlhbGFybV9lbmFibGVkID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhbGFybV9lbmFibGVkKSB7CisJCQlkaXNhYmxlX2lycShhaWVfaXJxKTsKKwkJCWFsYXJtX2VuYWJsZWQgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgZWxhcHNlZHRpbWVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCA0MTU1ODA1Li4yYjc3MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTMxOSw2ICszMTksOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgZGlzY29ubmVjdGVkICovCisJaWYgKCFsY3UpCisJCXJldHVybjsKIAlkZXZpY2UtPmRpc2NpcGxpbmUtPmdldF91aWQoZGV2aWNlLCAmdWlkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2aWNlLT5hbGlhc19saXN0KTsKQEAgLTY4MCw2ICs2ODMsOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgcmVtb3ZlZCAqLworCWlmICghbGN1KQorCQlyZXR1cm4gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJX3JlbW92ZV9kZXZpY2VfZnJvbV9sY3UobGN1LCBkZXZpY2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjdS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggZTlmZmYyYi4uNTY0MGM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00NzYsNyArNDc2LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJaW50IGNvdW50LCBzdG9wOwotCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAKIAkvKgogCSAqIERvbid0IGNoZWNrIDEyOCBidWZmZXJzLCBhcyBvdGhlcndpc2UgcWRpb19pbmJvdW5kX3FfbW92ZWQKQEAgLTY0Myw3ICs2NDMsNyBAQAogc3RhdGljIGludCBnZXRfb3V0Ym91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJaW50IGNvdW50LCBzdG9wOwotCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAKIAlpZiAobmVlZF9zaWdhX3N5bmMocSkpCiAJCWlmICgoKHF1ZXVlX3R5cGUocSkgIT0gUURJT19JUURJT19RRk1UKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA2NWViZWUwLi5iNmE2MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJc3RydWN0IGl1Y3ZfZXZlbnQgZXY7CiAJaW50IHJjOwogCi0JaWYgKG1lbWNtcChpdWN2TWFnaWMsIGlwdXNlciwgc2l6ZW9mKGlwdXNlcikpKQorCWlmIChtZW1jbXAoaXVjdk1hZ2ljLCBpcHVzZXIsIDE2KSkKIAkJLyogaXB1c2VyIG11c3QgbWF0Y2ggaXVjdk1hZ2ljLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAlyYyA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggMjlmODQ4Yi4uMDE5YWU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtOTg4LDE2ICs5ODgsMzAgQEAKIAljaHBfZHNjID0gKHN0cnVjdCBjaGFubmVsUGF0aF9kc2MgKiljY3dfZGV2aWNlX2dldF9jaHBfZGVzYyhjY3dkZXYsIDApOwogCWlmIChjaHBfZHNjICE9IE5VTEwpIHsKIAkJLyogQ0hQUCBmaWVsZCBiaXQgNiA9PSAxIC0+IHNpbmdsZSBxdWV1ZSAqLwotCQlpZiAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKQorCQlpZiAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKSB7CisJCQlpZiAoKGF0b21pY19yZWFkKCZjYXJkLT5xZGlvLnN0YXRlKSAhPQorCQkJCVFFVEhfUURJT19VTklOSVRJQUxJWkVEKSAmJgorCQkJICAgIChjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPT0gNCkpCisJCQkJLyogY2hhbmdlIGZyb20gNCB0byAxIG91dGJvdW5kIHF1ZXVlcyAqLworCQkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CiAJCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSAxOworCQkJaWYgKGNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgIT0gMCkKKwkJCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAorCQkJCQkiUHJpb3JpdHkgUXVldWVpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICgoYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8uc3RhdGUpICE9CisJCQkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpICYmCisJCQkgICAgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSAxKSkgeworCQkJCS8qIGNoYW5nZSBmcm9tIDEgdG8gNCBvdXRib3VuZCBxdWV1ZXMgKi8KKwkJCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQkJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAyOworCQkJfQorCQkJY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID0gNDsKKwkJfQogCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPSAweDQxMDAgKyBjaHBfZHNjLT5kZXNjOwogCQlrZnJlZShjaHBfZHNjKTsKIAl9Ci0JaWYgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSAxKSB7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOwotCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJIlByaW9yaXR5IFF1ZXVlaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCX0KIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIm5yOiV4IiwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzKTsKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgImx2bDolMDJ4IiwgY2FyZC0+aW5mby5mdW5jX2xldmVsKTsKIAlyZXR1cm47CkBAIC0xODMyLDMzICsxODQ2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoaW50IGNhcmR0eXBlKQotewotCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQotCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TRDoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTToKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TWDoKLQkJcmV0dXJuIDYxNDQwOwotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gNTczNDQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE1MDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9tdHVfb3V0X29mX21wYyhpbnQgY2FyZHR5cGUpCi17Ci0Jc3dpdGNoIChjYXJkdHlwZSkgewotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gMTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X210dV9vdXRvZl9mcmFtZXNpemUoaW50IGZyYW1lc2l6ZSkKIHsKIAlzd2l0Y2ggKGZyYW1lc2l6ZSkgewpAQCAtMTg4MSwxMCArMTg2OCw5IEBACiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0Q6CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU006CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU1g6Ci0JCXJldHVybiAoKG10dSA+PSA1NzYpICYmIChtdHUgPD0gNjE0NDApKTsKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKIAkJcmV0dXJuICgobXR1ID49IDU3NikgJiYKLQkJCShtdHUgPD0gY2FyZC0+aW5mby5tYXhfbXR1ICsgNDA5NiAtIDMyKSk7CisJCQkobXR1IDw9IGNhcmQtPmluZm8ubWF4X210dSkpOwogCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgogCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKIAlkZWZhdWx0OgpAQCAtMTkwNyw3ICsxODkzLDcgQEAKIAltZW1jcHkoJmNhcmQtPnRva2VuLnVscF9maWx0ZXJfciwKIAkgICAgICAgUUVUSF9VTFBfRU5BQkxFX1JFU1BfRklMVEVSX1RPS0VOKGlvYi0+ZGF0YSksCiAJICAgICAgIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JaWYgKHFldGhfZ2V0X210dV9vdXRfb2ZfbXBjKGNhcmQtPmluZm8udHlwZSkpIHsKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQltZW1jcHkoJmZyYW1lc2l6ZSwgUUVUSF9VTFBfRU5BQkxFX1JFU1BfTUFYX01UVShpb2ItPmRhdGEpLCAyKTsKIAkJbXR1ID0gcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShmcmFtZXNpemUpOwogCQlpZiAoIW10dSkgewpAQCAtMTkxNSwxMiArMTkwMSwyMSBAQAogCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhcmQtPmluZm8ubWF4X210dSA9IG10dTsKKwkJaWYgKGNhcmQtPmluZm8uaW5pdGlhbF9tdHUgJiYgKGNhcmQtPmluZm8uaW5pdGlhbF9tdHUgIT0gbXR1KSkgeworCQkJLyogZnJhbWUgc2l6ZSBoYXMgY2hhbmdlZCAqLworCQkJaWYgKGNhcmQtPmRldiAmJgorCQkJICAgICgoY2FyZC0+ZGV2LT5tdHUgPT0gY2FyZC0+aW5mby5pbml0aWFsX210dSkgfHwKKwkJCSAgICAgKGNhcmQtPmRldi0+bXR1ID4gbXR1KSkpCisJCQkJY2FyZC0+ZGV2LT5tdHUgPSBtdHU7CisJCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQl9CiAJCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBtdHU7CisJCWNhcmQtPmluZm8ubWF4X210dSA9IG10dTsKIAkJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IG10dSArIDIgKiBQQUdFX1NJWkU7CiAJfSBlbHNlIHsKIAkJY2FyZC0+aW5mby5pbml0aWFsX210dSA9IHFldGhfZ2V0X2luaXRpYWxfbXR1X2Zvcl9jYXJkKGNhcmQpOwotCQljYXJkLT5pbmZvLm1heF9tdHUgPSBxZXRoX2dldF9tYXhfbXR1X2Zvcl9jYXJkKGNhcmQtPmluZm8udHlwZSk7CisJCWNhcmQtPmluZm8ubWF4X210dSA9ICooX191MTYgKilRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKAorCQkJaW9iLT5kYXRhKTsKIAkJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IFFFVEhfSU5fQlVGX1NJWkVfREVGQVVMVDsKIAl9CiAKQEAgLTM3NzUsNiArMzc3MCw0NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCWludCBsZW5ndGg7CisJY2hhciAqcHJjZDsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqZGRldjsKKwlpbnQgZGRldl9vZmZsaW5lID0gMDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkZXRjYXBhYiIpOworCWRkZXYgPSBDQVJEX0RERVYoY2FyZCk7CisJaWYgKCFkZGV2LT5vbmxpbmUpIHsKKwkJZGRldl9vZmZsaW5lID0gMTsKKwkJcmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoZGRldik7CisJCWlmIChyYykgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJjID0gcWV0aF9yZWFkX2NvbmZfZGF0YShjYXJkLCAodm9pZCAqKikgJnByY2QsICZsZW5ndGgpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBxZXRoX3JlYWRfY29uZl9kYXRhIHJldHVybmVkICVpXG4iLAorCQkJZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X29mZmxpbmU7CisJfQorCXFldGhfY29uZmlndXJlX3VuaXRhZGRyKGNhcmQsIHByY2QpOworCXFldGhfY29uZmlndXJlX2Jsa3RfZGVmYXVsdChjYXJkLCBwcmNkKTsKKwlrZnJlZShwcmNkKTsKKworCXJjID0gcWRpb19nZXRfc3NxZF9kZXNjKGRkZXYsICZjYXJkLT5zc3FkKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCitvdXRfb2ZmbGluZToKKwlpZiAoZGRldl9vZmZsaW5lID09IDEpCisJCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoZGRldik7CitvdXQ6CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IHFldGhfcWRpb19lc3RhYmxpc2goc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKQEAgLTM5MDUsNiArMzk0MSw3IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaHJkc2V0dXAiKTsKIAlhdG9taWNfc2V0KCZjYXJkLT5mb3JjZV9hbGxvY19za2IsIDApOworCXFldGhfZ2V0X2NoYW5uZWxfcGF0aF9kZXNjKGNhcmQpOwogcmV0cnk6CiAJaWYgKHJldHJpZXMpCiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIFJldHJ5aW5nIHRvIGRvIElEWCBhY3RpdmF0ZXMuXG4iLApAQCAtMzkzMyw2ICszOTcwLDcgQEAKIAkJZWxzZQogCQkJZ290byByZXRyeTsKIAl9CisJcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKGNhcmQpOwogCXFldGhfaW5pdF90b2tlbnMoY2FyZCk7CiAJcWV0aF9pbml0X2Z1bmNfbGV2ZWwoY2FyZCk7CiAJcmMgPSBxZXRoX2lkeF9hY3RpdmF0ZV9jaGFubmVsKCZjYXJkLT5yZWFkLCBxZXRoX2lkeF9yZWFkX2NiKTsKQEAgLTQyMDIsNDEgKzQyNDAsNiBAQAogCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHFldGhfZGV0ZXJtaW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQlpbnQgbGVuZ3RoOwotCWNoYXIgKnByY2Q7Ci0KLQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGV0Y2FwYWIiKTsKLQlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX0RERVYoY2FyZCkpOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0KLQlyYyA9IHFldGhfcmVhZF9jb25mX2RhdGEoY2FyZCwgKHZvaWQgKiopICZwcmNkLCAmbGVuZ3RoKTsKLQlpZiAocmMpIHsKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgcWV0aF9yZWFkX2NvbmZfZGF0YSByZXR1cm5lZCAlaVxuIiwKLQkJCWRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpLCByYyk7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9vZmZsaW5lOwotCX0KLQlxZXRoX2NvbmZpZ3VyZV91bml0YWRkcihjYXJkLCBwcmNkKTsKLQlxZXRoX2NvbmZpZ3VyZV9ibGt0X2RlZmF1bHQoY2FyZCwgcHJjZCk7Ci0Ja2ZyZWUocHJjZCk7Ci0KLQlyYyA9IHFkaW9fZ2V0X3NzcWRfZGVzYyhDQVJEX0RERVYoY2FyZCksICZjYXJkLT5zc3FkKTsKLQlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOwotCi1vdXRfb2ZmbGluZToKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7Ci1vdXQ6Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgaW50IHFldGhfY29yZV9wcm9iZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggMmFjOGY2YS4uYWRhMGZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC01NzMsMTMgKzU3MywxMyBAQAogCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKKwkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7CiAJCQlicmVhazsKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKKwkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDY1ZTFjZjEuLjIwN2I3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbnQgc21zZ19wYXRoX3BlbmRpbmcoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgdTggaXB2bWlkWzhdLAogCQkJICAgICB1OCBpcHVzZXJbMTZdKQogewotCWlmIChzdHJuY21wKGlwdm1pZCwgIipNU0cgICAgIiwgc2l6ZW9mKGlwdm1pZCkpICE9IDApCisJaWYgKHN0cm5jbXAoaXB2bWlkLCAiKk1TRyAgICAiLCA4KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBQYXRoIHBlbmRpbmcgZnJvbSAqTVNHLiAqLwogCXJldHVybiBpdWN2X3BhdGhfYWNjZXB0KHBhdGgsICZzbXNnX2hhbmRsZXIsICJTTVNHSVVDViAgICAgICAgIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaAppbmRleCA0NzVjMzFhLi43N2IyNmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiAgICAgICAgTy5TICAgOiBMaW51eAogKiogICBGSUxFIE5BTUUgIDogYXJjbXNyLmgKLSoqICAgICAgICBCWSAgICA6IEVyaWNoIENoZW4KKyoqICAgICAgICBCWSAgICA6IE5pY2sgQ2hlbmcKICoqICAgRGVzY3JpcHRpb246IFNDU0kgUkFJRCBEZXZpY2UgRHJpdmVyIGZvcgogKiogICAgICAgICAgICAgICAgQVJFQ0EgUkFJRCBIb3N0IGFkYXB0ZXIKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ2LDggKzQ2LDEyIEBACiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZTsKIC8qVGhlIGxpbWl0IG9mIG91dHN0YW5kaW5nIHNjc2kgY29tbWFuZCB0aGF0IGZpcm13YXJlIGNhbiBoYW5kbGUqLwogI2RlZmluZSBBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRAkJCQkJCTI1NgotI2RlZmluZSBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNCQkJCQkJCTMyMAotI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAxMC8wMi8wMiIKKyNpZmRlZiBDT05GSUdfWEVOCisJI2RlZmluZSBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNCTE2MAorI2Vsc2UKKwkjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JMzIwCisjZW5kaWYKKyNkZWZpbmUgQVJDTVNSX0RSSVZFUl9WRVJTSU9OCQkgICAgICJEcml2ZXIgVmVyc2lvbiAxLjIwLjAwLjE1IDIwMTAvMDgvMDUiCiAjZGVmaW5lIEFSQ01TUl9TQ1NJX0lOSVRJQVRPUl9JRAkJCQkJCTI1NQogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SUwkJCQkJCQk1MTIKICNkZWZpbmUgQVJDTVNSX01BWF9YRkVSX1NFQ1RPUlNfQgkJCQkJCTQwOTYKQEAgLTYwLDcgKzY0LDYgQEAKICNkZWZpbmUgQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFCQkJCQkJMjY0CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9MRU4JCQkJCQkJMHgyNjAwMCAvKiAxNTJLICovCiAjZGVmaW5lIEFSQ01TUl9DREJfU0dfUEFHRV9MRU5HVEgJCQkJCQkyNTYgCi0jZGVmaW5lIFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDCQkJCQkJMHhFMQogI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUkVDQV8xODgwIDB4MTg4MAogICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCmluZGV4IGE0ZTA0YzUuLmFjZGFlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiAgICAgICAgTy5TICAgOiBMaW51eAogKiogICBGSUxFIE5BTUUgIDogYXJjbXNyX2F0dHIuYwotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogYXR0cmlidXRlcyBleHBvcnRlZCB0byBzeXNmcyBhbmQgZGV2aWNlIGhvc3QKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDUsIEFyZWNhIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gQWxsIHJpZ2h0cyByZXNlcnZlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwppbmRleCAxY2FkY2Q2Li45ODRiZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3JfaGJhLmMKLSoqICAgICAgICBCWSAgICA6IEVyaWNoIENoZW4KKyoqICAgICAgICBCWSAgICA6IE5pY2sgQ2hlbmcKICoqICAgRGVzY3JpcHRpb246IFNDU0kgUkFJRCBEZXZpY2UgRHJpdmVyIGZvcgogKiogICAgICAgICAgICAgICAgQVJFQ0EgUkFJRCBIb3N0IGFkYXB0ZXIKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc2LDcgKzc2LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFSQ01TUl9EUklWRVJfVkVSU0lPTik7CiBzdGF0aWMgaW50IHNsZWVwdGltZSA9IDEwOwotc3RhdGljIGludCByZXRyeWNvdW50ID0gMzA7CitzdGF0aWMgaW50IHJldHJ5Y291bnQgPSAxMjsKIHdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKIHN0YXRpYyBpbnQgYXJjbXNyX2lvcF9tZXNzYWdlX3hmZXIoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwKIAkJCQkJc3RydWN0IHNjc2lfY21uZCAqY21kKTsKQEAgLTE4Nyw3ICsxODcsNiBAQAogCQlpZiAoaXNsZWVwID4gMCkgewogCQkJbXNsZWVwKGlzbGVlcCoxMDAwKTsKIAkJfQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIndha2UtdXBcbiIpOwogCQlyZXR1cm4gMDsKIH0KIApAQCAtOTIxLDcgKzkyMCw2IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFyY21zcl9kcmFpbl9kb25lcXVldWUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwgc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBDQ0IsIGJvb2wgZXJyb3IpCi0KIHsKIAlpbnQgaWQsIGx1bjsKIAlpZiAoKHBDQ0ItPmFjYiAhPSBhY2IpIHx8IChwQ0NCLT5zdGFydGRvbmUgIT0gQVJDTVNSX0NDQl9TVEFSVCkpIHsKQEAgLTk0OCw3ICs5NDYsNyBAQAogCQkJCSwgcENDQi0+c3RhcnRkb25lCiAJCQkJLCBhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSk7CiAJCSAgcmV0dXJuOwotCQl9CisJfQogCWFyY21zcl9yZXBvcnRfY2NiX3N0YXRlKGFjYiwgcENDQiwgZXJyb3IpOwogfQogCkBAIC05ODEsNyArOTc5LDcgQEAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwogCQkvKmNsZWFyIGFsbCBvdXRib3VuZCBwb3N0ZWQgUSovCi0JCXdyaXRlbChBUkNNU1JfRE9PUkJFTExfSU5UX0NMRUFSX1BBVFRFUk4sICZyZWctPmlvcDJkcnZfZG9vcmJlbGwpOyAvKiBjbGVhciBkb29yYmVsbCBpbnRlcnJ1cHQgKi8KKwkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsgLyogY2xlYXIgZG9vcmJlbGwgaW50ZXJydXB0ICovCiAJCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUU7IGkrKykgewogCQkJaWYgKChmbGFnX2NjYiA9IHJlYWRsKCZyZWctPmRvbmVfcWJ1ZmZlcltpXSkpICE9IDApIHsKIAkJCQl3cml0ZWwoMCwgJnJlZy0+ZG9uZV9xYnVmZmVyW2ldKTsKQEAgLTE1MTEsNyArMTUwOSw2IEBACiAJCWFyY21zcl9kcmFpbl9kb25lcXVldWUoYWNiLCBwQ0NCLCBlcnJvcik7CiAJfQogfQotCiBzdGF0aWMgdm9pZCBhcmNtc3JfaGJiX3Bvc3RxdWV1ZV9pc3Ioc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1aW50MzJfdCBpbmRleDsKQEAgLTIxMDYsMTAgKzIxMDMsNiBAQAogCWlmIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSA+PQogCQkJQVJDTVNSX01BWF9PVVRTVEFORElOR19DTUQpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCWlmICgoc2NzaWNtZCA9PSBTQ1NJX0NNRF9BUkVDQV9TUEVDSUZJQykpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJSZWNlaXZlaW5nIFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDIGNvbW1hbmQuLlxuIik7Ci0JCXJldHVybiAwOwotCX0KIAljY2IgPSBhcmNtc3JfZ2V0X2ZyZWVjY2IoYWNiKTsKIAlpZiAoIWNjYikKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CkBAIC0yMzkzLDYgKzIzODYsNyBAQAogCWludCBpbmRleCwgcnRuOwogCWJvb2wgZXJyb3I7CiAJcG9sbGluZ19oYmJfY2NiX3JldHJ5OgorCiAJcG9sbF9jb3VudCsrOwogCS8qIGNsZWFyIGRvb3JiZWxsIGludGVycnVwdCAqLwogCXdyaXRlbChBUkNNU1JfRE9PUkJFTExfSU5UX0NMRUFSX1BBVFRFUk4sIHJlZy0+aW9wMmRydl9kb29yYmVsbCk7CkBAIC0yNjYzLDYgKzI2NTcsNyBAQAogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwICkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwICkpeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CkBAIC0yNjcwLDggKzI2NjUsMTAgQEAKIAkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9HRVRfQ09ORklHLCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKIAkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCX0KQEAgLTI2ODIsMTUgKzI2NzksMTggQEAKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUI7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgIT0gMCApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9BQk9SVCkgIT0gMCApKXsKKwkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwogCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSkgPT0gYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSkgewotCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sMTYpOworCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpOwotCQlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpIHsKKwkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCXJldHVybjsKKwkJfQogCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfR0VUX0NPTkZJRywgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKIAkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCX0KQEAgLTI3MDEsNiArMjcwMSw3IEBACiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0MgX19pb21lbSAqcmVnID0gYWNiLT5wbXVDOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpICE9IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9BQk9SVCkgIT0gMCkpIHsKKwkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwpAQCAtMjcwOCw4ICsyNzA5LDEwIEBACiAJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQl9CiAJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSk7Ci0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpIHsKKwkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCXJldHVybjsKKwkJfQogCQl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfR0VUX0NPTkZJRywgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CiAJCXdyaXRlbChBUkNNU1JfSEJDTVVfRFJWMklPUF9NRVNTQUdFX0NNRF9ET05FLCAmcmVnLT5pbmJvdW5kX2Rvb3JiZWxsKTsKIAkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwpAQCAtMjg5Nyw2ICsyOTAwLDggQEAKIAl1aW50MzJfdCBpbnRtYXNrX29yZzsKIAl1aW50OF90IHJ0bnZhbCA9IDB4MDA7CiAJaW50IGkgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoYXRvbWljX3JlYWQoJmFjYi0+Y2Nib3V0c3RhbmRpbmdjb3VudCkgIT0gMCkgewogCQkvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KIAkJaW50bWFza19vcmcgPSBhcmNtc3JfZGlzYWJsZV9vdXRib3VuZF9pbnRzKGFjYik7CkBAIC0yOTA3LDcgKzI5MTIsMTIgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfRlJFRUNDQl9OVU07IGkrKykgewogCQkJY2NiID0gYWNiLT5wY2NiX3Bvb2xbaV07CiAJCQlpZiAoY2NiLT5zdGFydGRvbmUgPT0gQVJDTVNSX0NDQl9TVEFSVCkgewotCQkJCWFyY21zcl9jY2JfY29tcGxldGUoY2NiKTsKKwkJCQlzY3NpX2RtYV91bm1hcChjY2ItPnBjbWQpOworCQkJCWNjYi0+c3RhcnRkb25lID0gQVJDTVNSX0NDQl9ET05FOworCQkJCWNjYi0+Y2NiX2ZsYWdzID0gMDsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWNiLT5jY2JsaXN0X2xvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZjY2ItPmxpc3QsICZhY2ItPmNjYl9mcmVlX2xpc3QpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjYi0+Y2NibGlzdF9sb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50LCAwKTsKQEAgLTI5MjAsOCArMjkzMCw3IEBACiAKIHN0YXRpYyBpbnQgYXJjbXNyX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9Ci0JCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiOwogCXVpbnQzMl90IGludG1hc2tfb3JnLCBvdXRib3VuZF9kb29yYmVsbDsKIAlpbnQgcmV0cnlfY291bnQgPSAwOwogCWludCBydG4gPSBGQUlMRUQ7CkBAIC0yOTcxLDMxICsyOTgwLDE2IEBACiAJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKIAkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zcjogc2NzaSAgYnVzIHJlc2V0IGVoIHJldHVybnMgd2l0aCBzdWNjZXNzXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7Ci0JCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopKTsKLQkJCQl9CisJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKKwkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKKwkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopKTsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMDA3LDIxICszMDAxLDEwIEBACiAJCQkJcnRuID0gRkFJTEVEOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzA2NywzMSArMzA1MCwxNiBAQAogCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CiAJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zcjogc2NzaSBidXMgcmVzZXQgZWggcmV0dXJucyB3aXRoIHN1Y2Nlc3NcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwogCQkJCXJ0biA9IFNVQ0NFU1M7CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKaW5kZXggNTgxNWNiZS4uOWE3YWFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKQEAgLTY0Niw2ICs2NDYsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWxpc3Rfc3BsaWNlX2luaXQoJnNob3N0LT5laF9jbWRfcSwgJmVoX3dvcmtfcSk7CisJc2hvc3QtPmhvc3RfZWhfc2NoZWR1bGVkID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCVNBU19EUFJJTlRLKCJFbnRlciAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCBiMmE4MTcwLi45ZWFkMDM5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0yMTc2LDkgKzIxNzYsOSBAQAogCQkvKiBhZGp1c3QgaGJhX3F1ZXVlX2RlcHRoLCByZXBseV9mcmVlX3F1ZXVlX2RlcHRoLAogCQkgKiBhbmQgcXVldWVfc2l6ZQogCQkgKi8KLQkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKLQkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7Ci0JCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gKHF1ZXVlX2RpZmYgLyAyKTsKKwkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IChxdWV1ZV9kaWZmIC8gMik7CisJCXF1ZXVlX3NpemUgPSBmYWN0cy0+TWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7CiAJfQogCWlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCA9IHF1ZXVlX3NpemU7CiAKQEAgLTM5NDEsNiArMzk0MSw4IEBACiBzdGF0aWMgdm9pZAogX2Jhc2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKIHsKKwltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CisJbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIAlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CiAJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgpAQCAtMzk3MSw4ICszOTczLDYgQEAKIAkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWJyZWFrOwogCX0KLQltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7Ci0JbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIH0KIAogLyoqCkBAIC00MDI2LDYgKzQwMjYsNyBAQAogewogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcGVfY29tcGxldGUgPSBpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwpAQCAtNDA2OCw2ICs0MDY5LDE0IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19BRlRFUl9SRVNFVCk7CisKKwkvKiBJZiB0aGlzIGhhcmQgcmVzZXQgaXMgY2FsbGVkIHdoaWxlIHBvcnQgZW5hYmxlIGlzIGFjdGl2ZSwgdGhlbgorCSAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBjYWxsIG1ha2VfaW9jX29wZXJhdGlvbmFsCisJICovCisJaWYgKHBlX2NvbXBsZXRlKSB7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CiAJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZWRhMzQ3Yy4uNWRlZDNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtODE5LDcgKzgxOSw3IEBACiB9CiAKIC8qKgotICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0IC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CiAgKgpAQCAtODMyLDYgKzgzMiwyOCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKiBUaGVuIHdpbGwgZGVyZWZyZW5jZSB0aGUgc3RvcmVkIHNjbWQgcG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NzaV9jbW5kICoKK19zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2NtZDsKK30KKworLyoqCiAgKiBfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV9zY21kIC0gc2NtZCBsb29rdXAKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKQEAgLTI5ODEsOSArMzAwMyw2IEBACiAJdTE2IGhhbmRsZTsKIAogCWZvciAoaSA9IDAgOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKLQkJCWNvbnRpbnVlOwogCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOwogCQlpZiAoIWhhbmRsZSkKIAkJCWNvbnRpbnVlOwpAQCAtMzIxMCw3ICszMjI5LDcgQEAKIAl1MTYgY291bnQgPSAwOwogCiAJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7Ci0JCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMzgwNCw3ICszODIzLDcgQEAKIAl1MzIgcmVzcG9uc2VfY29kZSA9IDA7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKLQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJaWYgKHNjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKQEAgLTUwMDUsNiArNTAyNCwxMiBAQAogCQkgICAgIGV2ZW50X2RhdGEpOwogI2VuZGlmCiAKKwkvKiBJbiBNUEkgUmV2aXNpb24gSyAoMHhDKSwgdGhlIGludGVybmFsIGRldmljZSByZXNldCBjb21wbGV0ZSB3YXMKKwkgKiBpbXBsZW1lbnRlZCwgc28gYXZvaWQgc2V0dGluZyB0bV9idXN5IGZsYWcgZm9yIG9sZGVyIGZpcm13YXJlLgorCSAqLworCWlmICgoaW9jLT5mYWN0cy5IZWFkZXJWZXJzaW9uID4+IDgpIDwgMHhDKQorCQlyZXR1cm47CisKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPQogCSAgICBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgJiYKIAkgICBldmVudF9kYXRhLT5SZWFzb25Db2RlICE9CkBAIC01MDk5LDYgKzUxMjQsNyBAQAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1MTYgc21pZCwgaGFuZGxlOwogCXUzMiBsdW47CiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKQEAgLTUxMDksMTIgKzUxMzUsMTcgQEAKIAlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKICNlbmRpZgogCXUxNiBpb2Nfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKIAkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAogCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOwogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwpAQCAtNTEyMiw3ICs1MTUzLDggQEAKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7Ci0JCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJc2RldiA9IHNjbWQtPmRldmljZTsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKIAkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpCiAJCQljb250aW51ZTsKIAkJIC8qIHNraXAgaGlkZGVuIHJhaWQgY29tcG9uZW50cyAqLwpAQCAtNTEzOCw2ICs1MTcwLDcgQEAKIAkJbHVuID0gc2FzX2RldmljZV9wcml2X2RhdGEtPmx1bjsKIAkJcXVlcnlfY291bnQrKzsKIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwgMCwgbHVuLAogCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSywgc21pZCwgMzAsIE5VTEwpOwogCQlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CkBAIC01MTQ3LDE0ICs1MTgwLDIwIEBACiAJCSAgICAobXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KIAkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEIHx8CiAJCSAgICAgbXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KLQkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQykpCisJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKLQotCQltcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCAwLCAwLCBsdW4sCi0JCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQlJUX1RBU0tfU0VULCAwLCAzMCwgTlVMTCk7CisJCX0KKwkJciA9IG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLAorCQkgICAgc2Rldi0+bHVuLCBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLCBzbWlkLCAzMCwKKwkJICAgIHNjbWQpOworCQlpZiAociA9PSBGQUlMRUQpCisJCQlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNkZXYsICJ0YXNrIGFib3J0OiBGQUlMRUQgIgorCQkJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CiAJCXRlcm1pbmF0aW9uX2NvdW50ICs9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAl9Ci0JaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgIiVzIC0gZXhpdCwgcXVlcnlfY291bnQgPSAlZCB0ZXJtaW5hdGlvbl9jb3VudCA9ICVkXG4iLApAQCAtNjYyNiw2ICs2NjY1LDcgQEAKIAkJZGVzdHJveV93b3JrcXVldWUod3EpOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIHZvbHVtZXMgKi8KKwlfc2NzaWhfaXJfc2h1dGRvd24oaW9jKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIG5leHQsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsCiAJICAgIGxpc3QpIHsKIAkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMvY2hpcC5jIGIvZHJpdmVycy9zaC9pbnRjL2NoaXAuYwppbmRleCBkZTg4NWEwLi5mMzNlMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMvY2hpcC5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy9jaGlwLmMKQEAgLTE3Myw3ICsxNzMsOCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKKyNkZWZpbmUgU0VOU0VfVkFMSURfRkxBRyAweDgwCisjZGVmaW5lIFZBTElEKHgpICh4IHwgU0VOU0VfVkFMSURfRkxBRykKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0gewogCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCkBAIC0yMDEsNyArMjAyLDggQEAKIAlpaHAgPSBpbnRjX2ZpbmRfaXJxKGQtPnNlbnNlLCBkLT5ucl9zZW5zZSwgaXJxKTsKIAlpZiAoaWhwKSB7CiAJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaWhwLT5oYW5kbGUpLCAwKTsKLQkJaW50Y19yZWdfZm5zW19JTlRDX0ZOKGlocC0+aGFuZGxlKV0oYWRkciwgaWhwLT5oYW5kbGUsIHZhbHVlKTsKKwkJaW50Y19yZWdfZm5zW19JTlRDX0ZOKGlocC0+aGFuZGxlKV0oYWRkciwgaWhwLT5oYW5kbGUsCisJCQkJCQkgICAgdmFsdWUgJiB+U0VOU0VfVkFMSURfRkxBRyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYyBiL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jCmluZGV4IDU2ZjYwYzguLjJjNjY1ZmNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKQEAgLTUwOSw5ICs1MDksMTEgQEAKIAlieXRlc19kb25lID0gMDsKIAogCXdoaWxlIChieXRlc19kb25lIDwgdC0+bGVuKSB7CisJCXZvaWQgKnJ4X2J1ZiA9IHQtPnJ4X2J1ZiA/IHQtPnJ4X2J1ZiArIGJ5dGVzX2RvbmUgOiBOVUxMOworCQljb25zdCB2b2lkICp0eF9idWYgPSB0LT50eF9idWYgPyB0LT50eF9idWYgKyBieXRlc19kb25lIDogTlVMTDsKIAkJbiA9IHNoX21zaW9mX3NwaV90eHJ4X29uY2UocCwgdHhfZmlmbywgcnhfZmlmbywKLQkJCQkJICAgdC0+dHhfYnVmICsgYnl0ZXNfZG9uZSwKLQkJCQkJICAgdC0+cnhfYnVmICsgYnl0ZXNfZG9uZSwKKwkJCQkJICAgdHhfYnVmLAorCQkJCQkgICByeF9idWYsCiAJCQkJCSAgIHdvcmRzLCBiaXRzKTsKIAkJaWYgKG4gPCAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY21jaWEuYyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCmluZGV4IGM3MzQ1ZGIuLmY4NTMzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCkBAIC03MzMsNyArNzMzLDcgQEAKIAogCS8qIEZldGNoIHRoZSB2ZW5kb3Igc3BlY2lmaWMgdHVwbGVzLiAqLwogCXJlcyA9IHBjbWNpYV9sb29wX3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsIFNTQl9QQ01DSUFfQ0lTLAotCQkJCXNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMsIHNwcm9tKTsKKwkJCQlzc2JfcGNtY2lhX2RvX2dldF9pbnZhcmlhbnRzLCBpdik7CiAJaWYgKChyZXMgPT0gMCkgfHwgKHJlcyA9PSAtRU5PU1BDKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCmluZGV4IDBlMjk4ZGIuLjI5YjhhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYwpAQCAtMzYwLDggKzM2MCw4IEBACiAgICAgICAgIAlzdGF0dXMgPSAxOwogICAgICAgICAJZ290byBjb21wbGV0ZTsKICAgICAJfQotICAgICAgICBsZW4gPSAoZmlybXdhcmUtPnNpemUgPiBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEgpPyBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEg6IGZpcm13YXJlLT5zaXplOwotCW1lbWNweShjb25maWdfYmRhZGRyLCBmaXJtd2FyZS0+ZGF0YSxsZW4pOworCWxlbiA9IG1pbihmaXJtd2FyZS0+c2l6ZSwgTUFYX0JEQUREUl9GT1JNQVRfTEVOR1RIIC0gMSk7CisJbWVtY3B5KGNvbmZpZ19iZGFkZHIsIGZpcm13YXJlLT5kYXRhLCBsZW4pOwogCWNvbmZpZ19iZGFkZHJbbGVuXSA9ICdcMCc7CiAJd3JpdGVfYmRhZGRyKGhkZXYsY29uZmlnX2JkYWRkcixCREFERFJfVFlQRV9TVFJJTkcpOwogICAgICAgIAlBX1JFTEVBU0VfRklSTVdBUkUoZmlybXdhcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsX21hYzgwMjExLmMKaW5kZXggYmRkNjI5ZC4uY2Q4MzkyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jCkBAIC0yMDksMTEgKzIwOSw4IEBACiAJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJQVNTRVJUKHdsKTsKIAlXTF9MT0NLKHdsKTsKLQl3bF9kb3duKHdsKTsKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwogCVdMX1VOTE9DSyh3bCk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI0Niw3ICsyNDMsMTQgQEAKIHN0YXRpYyB2b2lkCiB3bF9vcHNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlyZXR1cm47CisJc3RydWN0IHdsX2luZm8gKndsOworCisJd2wgPSBIV19UT19XTChodyk7CisKKwkvKiBwdXQgZHJpdmVyIGluIGRvd24gc3RhdGUgKi8KKwlXTF9MT0NLKHdsKTsKKwl3bF9kb3duKHdsKTsKKwlXTF9VTkxPQ0sod2wpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNTksOSArMjYzLDcgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5MODAyMTFfQ0hBTl9IVDIwOgogCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgotCQlXTF9MT0NLKHdsKTsKIAkJZXJyID0gd2xjX3NldCh3bC0+d2xjLCBXTENfU0VUX0NIQU5ORUwsIGNoYW4tPmh3X3ZhbHVlKTsKLQkJV0xfVU5MT0NLKHdsKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgogCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgpAQCAtMjgxLDYgKzI4Myw3IEBACiAJaW50IGVyciA9IDA7CiAJaW50IG5ld19pbnQ7CiAKKwlXTF9MT0NLKHdsKTsKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwpIHsKIAkJV0xfTk9ORSgiJXM6IFNldHRpbmcgbGlzdGVuIGludGVydmFsIHRvICVkXG4iLAogCQkJX19mdW5jX18sIGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCk7CkBAIC0zMzcsNiArMzQwLDcgQEAKIAl9CiAKICBjb25maWdfb3V0OgorCVdMX1VOTE9DSyh3bCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDU1LDEzICs0NTksMjEgQEAKIAogc3RhdGljIHZvaWQgd2xfb3BzX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJV0xfTk9ORSgiU2NhbiBTdGFydFxuIik7CisJV0xfTE9DSyh3bCk7CisJd2xjX3NjYW5fc3RhcnQod2wtPndsYyk7CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHdsX29wc19zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogeworCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwogCVdMX05PTkUoIlNjYW4gQ29tcGxldGVcbiIpOworCVdMX0xPQ0sod2wpOworCXdsY19zY2FuX3N0b3Aod2wtPndsYyk7CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm47CiB9CiAKQEAgLTc3OSw3ICs3OTEsNyBAQAogCXdsX2ZvdW5kKys7CiAJcmV0dXJuIHdsOwogCi0gZmFpbDoKK2ZhaWw6CiAJd2xfZnJlZSh3bCk7CiBmYWlsMToKIAlyZXR1cm4gTlVMTDsKQEAgLTEwOTAsNyArMTEwMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBMSU5VWFNUQV9QUwogc3RhdGljIGludCB3bF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHdsX2luZm8gKndsOwpAQCAtMTEwNSwxMSArMTExNiwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBvbmx5IG5lZWQgdG8gZmxhZyBodyBpcyBkb3duIGZvciBwcm9wZXIgcmVzdW1lICovCiAJV0xfTE9DSyh3bCk7Ci0Jd2xfZG93bih3bCk7CiAJd2wtPnB1Yi0+aHdfdXAgPSBmYWxzZTsKIAlXTF9VTkxPQ0sod2wpOwotCXBjaV9zYXZlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIH0KQEAgLTExMzMsNyArMTE0NSw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTE0NSwxMyArMTE1NywxMiBAQAogCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKIAotCVdMX0xPQ0sod2wpOwotCWVyciA9IHdsX3VwKHdsKTsKLQlXTF9VTkxPQ0sod2wpOwotCisJLyoKKwkqICBkb25lLiBkcml2ZXIgd2lsbCBiZSBwdXQgaW4gdXAgc3RhdGUKKwkqICBpbiB3bF9vcHNfYWRkX2ludGVyZmFjZSgpIGNhbGwuCisJKi8KIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCiAKIHN0YXRpYyB2b2lkIHdsX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTExODQsMTQgKzExOTUsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHdsX3BjaV9kcml2ZXIgPSB7Ci0gLm5hbWUgID0gImJyY204MDIxMSIsCi0gLnByb2JlID0gd2xfcGNpX3Byb2JlLAotI2lmZGVmIExJTlVYU1RBX1BTCi0gLnN1c3BlbmQgPSB3bF9zdXNwZW5kLAotIC5yZXN1bWUgID0gd2xfcmVzdW1lLAotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCi0gLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKLSAuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKKwkubmFtZSA9ICJicmNtODAyMTEiLAorCS5wcm9iZSA9IHdsX3BjaV9wcm9iZSwKKwkuc3VzcGVuZCA9IHdsX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdsX3Jlc3VtZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwppbmRleCAxZDVkMDFhLi5lMzdlODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwpAQCAtNTEyNiw3ICs1MTI2LDYgQEAKIAlmaWZvID0gcHJpbzJmaWZvW3ByaW9dOwogCiAJQVNTRVJUKCh1aW50KSBza2JfaGVhZHJvb20oc2R1KSA+PSBUWE9GRik7Ci0JQVNTRVJUKCEoc2R1LT5jbG9uZWQpKTsKIAlBU1NFUlQoIShzZHUtPm5leHQpKTsKIAlBU1NFUlQoIShzZHUtPnByZXYpKTsKIAlBU1NFUlQoZmlmbyA8IE5GSUZPKTsKQEAgLTg0NjIsMyArODQ2MSwxNiBAQAogCiAJa2ZyZWUocWkpOwogfQorCisvKgorICogRmxhZyAnc2NhbiBpbiBwcm9ncmVzcycgdG8gd2l0aG9sZCBkeW5hbWljIHBoeSBjYWxpYnJhdGlvbgorICovCit2b2lkIHdsY19zY2FuX3N0YXJ0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKQoreworCXdsY19waHlfaG9sZF91cGQod2xjLT5iYW5kLT5waSwgUEhZX0hPTERfRk9SX1NDQU4sIHRydWUpOworfQorCit2b2lkIHdsY19zY2FuX3N0b3Aoc3RydWN0IHdsY19pbmZvICp3bGMpCit7CisJd2xjX3BoeV9ob2xkX3VwZCh3bGMtPmJhbmQtPnBpLCBQSFlfSE9MRF9GT1JfU0NBTiwgZmFsc2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oCmluZGV4IDE0NmE2OTAuLmFmZjQxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19wdWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmgKQEAgLTU3MCw2ICs1NzAsOCBAQAogZXh0ZXJuIHUxNiB3bGNfcmF0ZV9zaG1fb2Zmc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCByYXRlKTsKIGV4dGVybiB1MzIgd2xjX2dldF9yc3BlY19oaXN0b3J5KHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOwogZXh0ZXJuIHUzMiB3bGNfZ2V0X2N1cnJlbnRfaGlnaGVzdF9yYXRlKHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOworZXh0ZXJuIHZvaWQgd2xjX3NjYW5fc3RhcnQoc3RydWN0IHdsY19pbmZvICp3bGMpOworZXh0ZXJuIHZvaWQgd2xjX3NjYW5fc3RvcChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHdsY19pb3Zhcl9nZXR1aW50KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgICB1aW50ICphcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKaW5kZXggYWFkNDczMi4uMTUwMmQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwpAQCAtNDM5LDYgKzQzOSw3IEBACiBjb25maWcgQ09NRURJX05JX0FUTUlPCiAJdHJpc3RhdGUgIk5JIEFULU1JTyBFIHNlcmllcyBJU0EtUE5QIGNhcmQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTQVBOUCAmJiBDT01FRElfTklfVElPICYmIENPTUVESV9OSV9DT01NT04KKwlzZWxlY3QgQ09NRURJXzgyNTUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtTUlPIEUgc2VyaWVzIGNhcmRzCkBAIC0xMDQwLDYgKzEwNDEsOCBAQAogY29uZmlnIENPTUVESV9OSV9QQ0lNSU8KIAl0cmlzdGF0ZSAiTkkgUENJLU1JTy1FIHNlcmllcyBhbmQgTSBzZXJpZXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENPTUVESV9OSV9USU8gJiYgQ09NRURJX05JX0NPTU1PTgorCXNlbGVjdCBDT01FRElfODI1NQorCXNlbGVjdCBDT01FRElfRkMKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLU1JTy1FIHNlcmllcyBhbmQgTSBzZXJpZXMKQEAgLTExNjQsNiArMTE2Nyw3IEBACiBjb25maWcgQ09NRURJX05JX01JT19DUwogCXRyaXN0YXRlICJOSSBEQVFDYXJkIEUgc2VyaWVzIFBDTUNJQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX05JX1RJTyAmJiBDT01FRElfTklfQ09NTU9OCisJc2VsZWN0IENPTUVESV84MjU1CiAJc2VsZWN0IENPTUVESV9GQwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KQEAgLTEyNjgsNyArMTI3Miw2IEBACiBjb25maWcgQ09NRURJX05JX1RJTwogCXRyaXN0YXRlICJOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX01JVEUKLQlzZWxlY3QgQ09NRURJXzgyNTUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKaW5kZXggY2QyNWIyNC4uZmQyNzRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCkBAIC02MSw4ICs2MSw2IEBACiAjZGVmaW5lIFBDSV9EQVFfU0laRQkJNDA5NgogI2RlZmluZSBQQ0lfREFRX1NJWkVfNjYwWCAgICAgICA4MTkyCiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogc3RydWN0IG1pdGVfc3RydWN0ICptaXRlX2RldmljZXM7CiBFWFBPUlRfU1lNQk9MKG1pdGVfZGV2aWNlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCmluZGV4IDE0ZTcxNmUuLjU0NzQxYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYwpAQCAtNTI3LDMgKzUyNyw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9uaTY1MjdfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX25pNjUyN19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCmluZGV4IDhiOGUyYWEuLjQwM2ZjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwpAQCAtODcxLDMgKzg3MSw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9uaV82NXh4X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGRyaXZlcl9uaV82NXh4X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKaW5kZXggNjYxMmIwOC4uY2EyYWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCkBAIC0xNDIxLDMgKzE0MjEsNyBAQAogCX07CiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCmluZGV4IGU5ZjAzNGUuLmQ4ZDkxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwpAQCAtMzg0LDMgKzM4NCw3IEBACiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwppbmRleCA0ZDE4NjhkLi4wNzI4YzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtNTc1LDcgKzU3NSw4IEBACiAJLyogZ3JhYiBvdXIgSVJRICovCiAJaWYgKGlycSkgewogCQlpc3JfZmxhZ3MgPSAwOwotCQlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IHBjaV9idXN0eXBlKQorCQlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IHBjaV9idXN0eXBlCisJCSAgICB8fCB0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNtY2lhX2J1c3R5cGUpCiAJCQlpc3JfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAogCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCmluZGV4IDg0YTE1YzMuLjAwNWQyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTEzNTQsMyArMTM1NCw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9wY2lkaW9faW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX3BjaWRpb19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwppbmRleCAyM2EzODEyLi45MTQ4YWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCkBAIC0xODUzLDMgKzE4NTMsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IGIzZDA1ZmMuLjRmYjgwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzY4LDYgKzM2OCw3IEBACiAJCWJsa2Rldi0+Z2QtPmZpcnN0X21pbm9yID0gMDsKIAlibGtkZXYtPmdkLT5mb3BzID0gJmJsb2NrX29wczsKIAlibGtkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBibGtkZXY7CisJYmxrZGV2LT5nZC0+ZHJpdmVyZnNfZGV2ID0gJihibGtkZXYtPmRldmljZV9jdHgtPmRldmljZSk7CiAJc3ByaW50ZihibGtkZXYtPmdkLT5kaXNrX25hbWUsICJoZCVjIiwgJ2EnICsgZGV2bnVtKTsKIAogCWJsa3ZzY19kb19pbnF1aXJ5KGJsa2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKaW5kZXggZGY5Y2QxMy4uMGVkYmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAkvKiBBU1NFUlQoZGV2aWNlKTsgKi8KIAogCXBhY2tldCA9IGt6YWxsb2MoTkVUVlNDX1BBQ0tFVF9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLAotCQkJIEdGUF9LRVJORUwpOworCQkJIEdGUF9BVE9NSUMpOwogCWlmICghcGFja2V0KQogCQlyZXR1cm47CiAJYnVmZmVyID0gcGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKaW5kZXggMDE0N2I0MC4uYjQxYzk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCkBAIC0yMzYsNiArMjM2LDcgQEAKIAlpZiAoc3RhdHVzID09IDEpIHsKIAkJbmV0aWZfY2Fycmllcl9vbihuZXQpOwogCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CisJCW5ldGlmX25vdGlmeV9wZWVycyhuZXQpOwogCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTM1OCw3ICszNTksNiBAQAogCiAJLyogU2V0IGluaXRpYWwgc3RhdGUgKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXQpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAogCW5ldF9kZXZpY2VfY3R4ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAluZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCA9IGRldmljZV9jdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYwppbmRleCBkZWI2OGM4Li5iOGI1NGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3NDc2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYwppbmRleCA2ODU5MDg5Li41ZDg1ZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3ODg3X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwppbmRleCA2MzA5ZDUyLi44OWNjZjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKQEAgLTQzMiw3ICs0MzIsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIGFkNzk5eF9zaG93X3NjYWxlLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKaW5kZXggZTMzODdjZC4uMGY4N2VjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKQEAgLTg3LDcgKzg3LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPnZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG91dF9zY2FsZSwgU19JUlVHTywgYWQ1NDQ2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YyX2NvbnRyb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCmluZGV4IGUzOGU4OWQuLmUyZjZkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCkBAIC04NzQsNyArODc0LDEwIEBACiAJCXNjX2FjY2Vzc1szXS5yZWdfYWRkciA9IDB4MTA5OwogCQlzY19hY2Nlc3NbM10ubWFzayA9IE1BU0s2OwogCQlzY19hY2Nlc3NbM10udmFsdWUgPSAweDAwOwotCQludW1fdmFsID0gNDsKKwkJc2NfYWNjZXNzWzRdLnJlZ19hZGRyID0gMHgxMDQ7CisJCXNjX2FjY2Vzc1s0XS52YWx1ZSA9IDB4M0M7CisJCXNjX2FjY2Vzc1s0XS5tYXNrID0gMHhmZjsKKwkJbnVtX3ZhbCA9IDU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCmluZGV4IDNmZTVmNDEuLjBhYWQwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogLyogc2VuZCBib290IGRhdGEgdG8gdGhlIElSIFRYIGRldmljZSAqLwogc3RhdGljIGludCBzZW5kX2Jvb3RfZGF0YShzdHJ1Y3QgSVJfdHggKnR4KQogewotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKIAogCS8qIHNlbmQgdGhlIGJvb3QgYmxvY2sgKi8KQEAgLTUwMyw3ICs1MDMsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGtpY2sgaXQgb2ZmPyAqLworCS8qIEhpdCB0aGUgZ28gYnV0dG9uIHRvIGFjdGl2YXRlIHRoZSBuZXcgYm9vdCBkYXRhICovCiAJYnVmWzBdID0gMHgwMDsKIAlidWZbMV0gPSAweDIwOwogCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+YywgYnVmLCAyKTsKQEAgLTUxMSw3ICs1MTEsMTkgQEAKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwogCX0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHppbG9nIHRvIHNldHRsZSBhZnRlciBoaXR0aW5nIGdvIHBvc3QgYm9vdCBibG9jayB1cGxvYWQuCisJICogV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgSEQtUFZSIGFuZCBIVlItMTk1MCBib3RoIHJldHVybiBhbiAtRUlPCisJICogdXBvbiBhdHRlbXB0aW5nIHRvIGdldCBmaXJtd2FyZSByZXZpc2lvbiwgYW5kIHR4IHByb2JlIHRodXMgZmFpbHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOworCQlpZiAocmV0ID09IDEpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwMCk7CisJfQorCiAJaWYgKHJldCAhPSAxKSB7CiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKQEAgLTUyMyw4ICs1MzUsOCBAQAogCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGJ1ZlswXSAhPSAweDgwKSB7Ci0JCXppbG9nX2Vycm9yKCJ1bmV4cGVjdGVkIElSIFRYIHJlc3BvbnNlOiAlMDJ4XG4iLCBidWZbMF0pOworCWlmICgoYnVmWzBdICE9IDB4ODApICYmIChidWZbMF0gIT0gMHhhMCkpIHsKKwkJemlsb2dfZXJyb3IoInVuZXhwZWN0ZWQgSVIgVFggaW5pdCByZXNwb25zZTogJTAyeFxuIiwgYnVmWzBdKTsKIAkJcmV0dXJuIDA7CiAJfQogCXppbG9nX25vdGlmeSgiWmlsb2cvSGF1cHBhdWdlIElSIGJsYXN0ZXIgZmlybXdhcmUgdmVyc2lvbiAiCkBAIC04MjcsNyArODM5LDE1IEBACiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKIAl9Ci0JcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOworCisJLyogR2l2ZSB0aGUgejggYSBtb21lbnQgdG8gcHJvY2VzcyBkYXRhIGJsb2NrICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOworCQlpZiAocmV0ID09IDEpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwMCk7CisJfQorCiAJaWYgKHJldCAhPSAxKSB7CiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jCmluZGV4IDIzZmEwNDkuLmEyZjI5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJaWYgKCghbWZkKSB8fCAobWZkLT5rZXkgIT0gTUZEX0tFWSkpCiAJCXJldHVybiAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKG1mZC0+ZmJpLCAxKTsKIAogCXJldCA9IG1zbV9mYl9zdXNwZW5kX3N1YihtZmQpOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCX0KIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiAjZWxzZQpAQCAtNDMxLDExICs0MzEsMTEgQEAKIAlpZiAoKCFtZmQpIHx8IChtZmQtPmtleSAhPSBNRkRfS0VZKSkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmV0ID0gbXNtX2ZiX3Jlc3VtZV9zdWIobWZkKTsKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCWZiX3NldF9zdXNwZW5kKG1mZC0+ZmJpLCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwppbmRleCA5ZjI2ZGM5Li41NmEyODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKQEAgLTM3MywxNyArMzczLDE3IEBACiAJCSAqCiAJCSAqIEZvciBub3csIHdlIGp1c3QgaG9wZS4uCiAJCSAqLwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpZ25vcmVfZmJfZXZlbnRzID0gMTsKIAkJaWYgKGZiX2JsYW5rKGZiaW5mbywgRkJfQkxBTktfVU5CTEFOSykpIHsKIAkJCWlnbm9yZV9mYl9ldmVudHMgPSAwOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCXByaW50ayhLRVJOX0VSUiAib2xwYy1kY29uOiAgRmFpbGVkIHRvIGVudGVyIENQVSBtb2RlXG4iKTsKIAkJCWRjb25fcGVuZGluZyA9IERDT05fU09VUkNFX0RDT047CiAJCQlyZXR1cm47CiAJCX0KIAkJaWdub3JlX2ZiX2V2ZW50cyA9IDA7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAogCQkvKiBBbmQgdHVybiBvZmYgdGhlIERDT04gKi8KIAkJcGRhdGEtPnNldF9kY29ubG9hZCgxKTsKQEAgLTQzNSwxMiArNDM1LDEyIEBACiAJCQl9CiAJCX0KIAotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpZ25vcmVfZmJfZXZlbnRzID0gMTsKIAkJaWYgKGZiX2JsYW5rKGZiaW5mbywgRkJfQkxBTktfUE9XRVJET1dOKSkKIAkJCXByaW50ayhLRVJOX0VSUiAib2xwYy1kY29uOiAgY291bGRuJ3QgYmxhbmsgZmIhXG4iKTsKIAkJaWdub3JlX2ZiX2V2ZW50cyA9IDA7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJvbHBjLWRjb246IFRoZSBEQ09OIGhhcyBjb250cm9sXG4iKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKaW5kZXggNzAxNTYxZC4uMjM2ZGQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwpAQCAtNDg0LDggKzQ4NCw2IEBACiAJbmV0X2Rldi0+bWxfcHJpdiA9ICh2b2lkICopcEFkOwogCXBBZC0+bmV0X2RldiA9IG5ldF9kZXY7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOwotCiAJcmV0dXJuIG5ldF9kZXY7CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCmluZGV4IGVlNjhkNTEuLjMyMmJmNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYwpAQCAtMTA2LDYgKzEwNiw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwNDExLCAweDAxNmYpfSwJLyogTWVsQ28uLEluYy4gV0xJLVVDLUczMDFOICovCiAJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzApfSwJLyogTGlua3N5cyBXVVNCMTAwICovCiAJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzEpfSwJLyogTGlua3N5cyBXVVNCNjAwTiAqLworCXtVU0JfREVWSUNFKDB4MTczNywgMHgwMDc4KX0sCS8qIExpbmtzeXMgV1VTQjEwMHYyICovCiAJe1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwZTgpfSwJLyogQnVmZmFsbyBXTEktVUMtRzMwME4gKi8KIAl7VVNCX0RFVklDRSgweDA1MGQsIDB4ODE1Yyl9LAkvKiBCZWxraW4gRjVEODA1MyAqLwogCXtVU0JfREVWSUNFKDB4MTAwRCwgMHg5MDMxKX0sCS8qIE1vdG9yb2xhIDI3NzAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9oYWxfaW5pdC5jCmluZGV4IDMyMDg4YTYuLjg0YmUzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYwpAQCAtMTI4LDEyICsxMjgsMTMgQEAKIAl1OCAqcHRtcGNoYXIgPSBOVUxMLCAqcHBheWxvYWQsICpwdHI7CiAJc3RydWN0IHR4X2Rlc2MgKnB0eF9kZXNjOwogCXUzMiB0eGRzY3Bfc3ogPSBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOworCXU4IHJldCA9IF9GQUlMOwogCiAJdWxmaWxlbGVuZ3RoID0gcnRsODcxeF9vcGVuX2Z3KHBhZGFwdGVyLCAmcGhmd2ZpbGVfaGRsLCAmcG1hcHBlZGZ3KTsKIAlpZiAocG1hcHBlZGZ3ICYmICh1bGZpbGVsZW5ndGggPiAwKSkgewogCQl1cGRhdGVfZndoZHIoJmZ3aGRyLCBwbWFwcGVkZncpOwogCQlpZiAoY2hrX2Z3aGRyKCZmd2hkciwgdWxmaWxlbGVuZ3RoKSA9PSBfRkFJTCkKLQkJCWdvdG8gZXhpdF9mYWlsOworCQkJZ290byBmaXJtd2FyZV9yZWw7CiAJCWZpbGxfZndwcml2KHBhZGFwdGVyLCAmZndoZHIuZndwcml2KTsKIAkJLyogZmlybXdhcmUgY2hlY2sgb2sgKi8KIAkJbWF4bGVuID0gKGZ3aGRyLmltZ19JTUVNX3NpemUgPiBmd2hkci5pbWdfU1JBTV9zaXplKSA/CkBAIC0xNDEsNyArMTQyLDcgQEAKIAkJbWF4bGVuICs9IHR4ZHNjcF9zejsKIAkJcHRtcGNoYXIgPSBfbWFsbG9jKG1heGxlbiArIEZXQlVGRl9BTElHTl9TWik7CiAJCWlmIChwdG1wY2hhciA9PSBOVUxMKQotCQkJcmV0dXJuIF9GQUlMOworCQkJZ290byBmaXJtd2FyZV9yZWw7CiAKIAkJcHR4X2Rlc2MgPSAoc3RydWN0IHR4X2Rlc2MgKikocHRtcGNoYXIgKyBGV0JVRkZfQUxJR05fU1ogLQogCQkJICAgICgoYWRkcl90KShwdG1wY2hhcikgJiAoRldCVUZGX0FMSUdOX1NaIC0gMSkpKTsKQEAgLTI3MywxMSArMjc0LDEzIEBACiAJCQlnb3RvIGV4aXRfZmFpbDsKIAl9IGVsc2UKIAkJZ290byBleGl0X2ZhaWw7Ci0JcmV0dXJuIF9TVUNDRVNTOworCXJldCA9IF9TVUNDRVNTOwogCiBleGl0X2ZhaWw6CiAJa2ZyZWUocHRtcGNoYXIpOwotCXJldHVybiBfRkFJTDsKK2Zpcm13YXJlX3JlbDoKKwlyZWxlYXNlX2Zpcm13YXJlKChzdHJ1Y3QgZmlybXdhcmUgKilwaGZ3ZmlsZV9oZGwpOworCXJldHVybiByZXQ7CiB9CiAKIHVpbnQgcnRsODcxMl9oYWxfaW5pdChzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMKaW5kZXggYTY5MmVlOC4uMjFjZTJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jCkBAIC00Nyw1NCArNDcsMTIzIEBACiBzdGF0aWMgdm9pZCByODcxeHVfZGV2X3JlbW92ZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRmKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0bDg3MXhfdXNiX2lkX3RibFtdID0gewotCS8qOTJTVQotCSAqIFJlYWx0ZWsgKi8KLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE3MSl9LAotCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTcyKX0sCisKKy8qIFJUTDgxODhTVSAqLworCS8qIFJlYWx0ZWsgKi8KKwl7VVNCX0RFVklDRSgweDBCREEsIDB4ODE3MSl9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTczKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzQpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODcxMil9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4NzEzKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweEM1MTIpfSwKLQkvKiBBYm9jb20gICovCisJLyogQWJvY29tICovCiAJe1VTQl9ERVZJQ0UoMHgwN0I4LCAweDgxODgpfSwKLQkvKiBDb3JlZ2EgKi8KLQl7VVNCX0RFVklDRSgweDA3YWEsIDB4MDA0Nyl9LAotCS8qIERsaW5rICovCi0Je1VTQl9ERVZJQ0UoMHgwN2QxLCAweDMzMDMpfSwKLQl7VVNCX0RFVklDRSgweDA3ZDEsIDB4MzMwMil9LAotCXtVU0JfREVWSUNFKDB4MDdkMSwgMHgzMzAwKX0sCi0JLyogRGxpbmsgZm9yIFNreXdvcnRoICovCi0Je1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDApfSwKLQl7VVNCX0RFVklDRSgweDE0YjIsIDB4MzMwMSl9LAotCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAyKX0sCi0JLyogRW5HZW5pdXMgKi8KLQl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTYwMyl9LAotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjA1KX0sCisJLyogQVNVUyAqLworCXtVU0JfREVWSUNFKDB4MEIwNSwgMHgxNzg2KX0sCisJe1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3OTEpfSwgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwogCS8qIEJlbGtpbiAqLwotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVGKX0sCi0Je1VTQl9ERVZJQ0UoMHgwNTBkLCAweDk0NUEpfSwKLQl7VVNCX0RFVklDRSgweDA1MGQsIDB4ODQ1QSl9LAotCS8qIEd1aWxsZW1vdCAqLwotCXtVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDMxKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTBELCAweDk0NUEpfSwKKwkvKiBDb3JlZ2EgKi8KKwl7VVNCX0RFVklDRSgweDA3QUEsIDB4MDA0Nyl9LAorCS8qIEQtTGluayAqLworCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzMzA2KX0sCisJe1VTQl9ERVZJQ0UoMHgwN0QxLCAweDMzMDYpfSwgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwogCS8qIEVkaW1heCAqLwogCXtVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjExKX0sCi0Je1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTIpfSwKLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYyMil9LAorCS8qIEVuR2VuaXVzICovCisJe1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk2MDMpfSwKKwkvKiBIYXdraW5nICovCisJe1VTQl9ERVZJQ0UoMHgwRTY2LCAweDAwMTYpfSwKKwkvKiBIZXJjdWxlcyAqLworCXtVU0JfREVWSUNFKDB4MDZGOCwgMHhFMDM0KX0sCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzIpfSwKKwkvKiBMb2dpdGVjICovCisJe1VTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjcpfSwKKwkvKiBQQ0kgKi8KKwl7VVNCX0RFVklDRSgweDIwMTksIDB4QUIyOCl9LAorCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhFRDE2KX0sCiAJLyogU2l0ZWNvbSAqLworCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDU3KX0sCiAJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNDUpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA1OSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNEIpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA2Myl9LAorCS8qIFN3ZWV4ICovCisJe1VTQl9ERVZJQ0UoMHgxNzdGLCAweDAxNTQpfSwKKwkvKiBUaGlua3dhcmUgKi8KKwl7VVNCX0RFVklDRSgweDBCREEsIDB4NTA3Nyl9LAorCS8qIFRvc2hpYmEgKi8KKwl7VVNCX0RFVklDRSgweDE2OTAsIDB4MDc1Mil9LAorCS8qIC0gKi8KKwl7VVNCX0RFVklDRSgweDIwRjQsIDB4NjQ2Qil9LAorCXtVU0JfREVWSUNFKDB4MDgzQSwgMHhDNTEyKX0sCisKKy8qIFJUTDgxOTFTVSAqLworCS8qIFJlYWx0ZWsgKi8KKwl7VVNCX0RFVklDRSgweDBCREEsIDB4ODE3Mil9LAorCS8qIEFtaWdvICovCisJe1VTQl9ERVZJQ0UoMHgwRUIwLCAweDkwNjEpfSwKKwkvKiBBU1VTL0VLQiAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcyKX0sCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMjMpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMxMSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzNDIpfSwKKwkvKiBBU1VTL0VLQkxlbm92byAqLworCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzMzKX0sCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzQpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzYpfSwgLyogMTFuIG1vZGUgZGlzYWJsZSAqLworCS8qIEFTVVMvTWVkaWEgQk9YICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMDkpfSwKKwkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4ODE1Ril9LAorCS8qIEQtTGluayAqLworCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzMzAyKX0sCisJe1VTQl9ERVZJQ0UoMHgwN0QxLCAweDMzMDApfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwMyl9LAorCS8qIEVkaW1heCAqLworCXtVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjEyKX0sCisJLyogRW5HZW5pdXMgKi8KKwl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTYwNSl9LAorCS8qIEd1aWxsZW1vdCAqLworCXtVU0JfREVWSUNFKDB4MDZGOCwgMHhFMDMxKX0sCiAJLyogSGF3a2luZyAqLwogCXtVU0JfREVWSUNFKDB4MEU2NiwgMHgwMDE1KX0sCi0Je1VTQl9ERVZJQ0UoMHgwRTY2LCAweDAwMTYpfSwKLQl7VVNCX0RFVklDRSgweDBiMDUsIDB4MTc4Nil9LAotCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzkxKX0sICAgIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KLQorCS8qIE1lZGlhbyAqLwogCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzA2KX0sCi0Je1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMDkpfSwKKwkvKiBQQ0kgKi8KKwl7VVNCX0RFVklDRSgweDIwMTksIDB4RUQxOCl9LAorCXtVU0JfREVWSUNFKDB4MjAxOSwgMHg0OTAxKX0sCisJLyogU2l0ZWNvbSAqLworCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDU4KX0sCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNDkpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0Qyl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDY0KX0sCisJLyogU2t5d29ydGggKi8KKwl7VVNCX0RFVklDRSgweDE0YjIsIDB4MzMwMCl9LAorCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAxKX0sCisJe1VTQl9ERVZJQ0UoMHgxNEIyLCAweDMzMDIpfSwKKwkvKiAtICovCisJe1VTQl9ERVZJQ0UoMHgwNEYyLCAweEFGRjIpfSwKKwl7VVNCX0RFVklDRSgweDA0RjIsIDB4QUZGNSl9LAorCXtVU0JfREVWSUNFKDB4MDRGMiwgMHhBRkY2KX0sCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzkpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0MCl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzNDEpfSwgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwogCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzEwKX0sCi0Je1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMTEpfSwgICAgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwogCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzI1KX0sCi0Je1VTQl9ERVZJQ0UoMHgwODNBLCAweEM1MTIpfSwKKworLyogUlRMODE5MlNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTc0KX0sCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzQpfSwKKwkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4ODQ1QSl9LAorCS8qIENvcmVnYSAqLworCXtVU0JfREVWSUNFKDB4MDdBQSwgMHgwMDUxKX0sCisJLyogRWRpbWF4ICovCisJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MjIpfSwKKwkvKiBORUMgKi8KKwl7VVNCX0RFVklDRSgweDA0MDksIDB4MDJCNil9LAogCXt9CiB9OwogCkBAIC0xMDMsOCArMTcyLDIwIEBACiBzdGF0aWMgc3RydWN0IHNwZWNpZmljX2RldmljZV9pZCBzcGVjaWZpY19kZXZpY2VfaWRfdGJsW10gPSB7CiAJey5pZFZlbmRvciA9IDB4MGIwNSwgLmlkUHJvZHVjdCA9IDB4MTc5MSwKIAkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDBkZjYsIC5pZFByb2R1Y3QgPSAweDAwNTksCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKKwl7LmlkVmVuZG9yID0gMHgxM2QzLCAuaWRQcm9kdWN0ID0gMHgzMzA2LAorCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCiAJey5pZFZlbmRvciA9IDB4MTNEMywgLmlkUHJvZHVjdCA9IDB4MzMxMSwKIAkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMzUsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKKwl7LmlkVmVuZG9yID0gMHgxM2QzLCAuaWRQcm9kdWN0ID0gMHgzMzM2LAorCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzM0MCwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzNDEsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCmluZGV4IDBiYzExM2MuLmQwMDdlNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKQEAgLTEwNDQsOSArMTA0NCw5IEBACiAKIAkvKiB3aGVuIGRvaW5nIHN1c3BlbmQsIGNhbGwgZmIgYXBpcyBhbmQgcGNpIGFwaXMgKi8KIAlpZiAobXNnLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJZmJfc2V0X3N1c3BlbmQoJnNmYi0+ZmIsIDEpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHYgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR2ID0gcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBtc2cpOwpAQCAtMTEwNSw5ICsxMTA1LDkgQEAKIAogCXNtdGNmYl9zZXRtb2RlKHNmYik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoJnNmYi0+ZmIsIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYwppbmRleCA0MDhiYjliLi4wN2E3ZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsZW4gPSBzdHJsZW4oYnVmKTsKLQlpZiAobGVuID4gMCB8fCBsZW4gPCAzKSB7CisJaWYgKGxlbiA+IDAgJiYgbGVuIDwgMykgewogCQljaCA9IGJ1ZlswXTsKIAkJaWYgKGNoID09ICdcbicpCiAJCQljaCA9ICcwJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYwppbmRleCBlOGYwNDdlLi44MDE4M2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCkBAIC05ODYsMTIgKzk4Niw2IEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMocm1pNF9kYXRhLT5pbnB1dF9kZXYsIEFCU19NVF9UT1VDSF9NQUpPUiwgMCwKIAkJCQkJCU1BWF9UT1VDSF9NQUpPUiwgMCwgMCk7CiAKLQlyZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uocm1pNF9kYXRhLT5pbnB1dF9kZXYpOwotCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczppbnB1dCByZWdpc3RlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfaW5wdXRfcmVnaXN0ZXI7Ci0JfQotCiAJLyogQ2xlYXIgaW50ZXJydXB0cyAqLwogCXN5bmFwdGljc19ybWk0X2kyY19ibG9ja19yZWFkKHJtaTRfZGF0YSwKIAkJCXJtaTRfZGF0YS0+Zm4wMV9kYXRhX2Jhc2VfYWRkciArIDEsIGludHJfc3RhdHVzLApAQCAtMTAwMywxNSArOTk3LDIwIEBACiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOlVuYWJsZSB0byBnZXQgYXR0biBpcnEgJWRcbiIsCiAJCQkJX19mdW5jX18sIHBsYXRmb3JtZGF0YS0+aXJxX251bWJlcik7Ci0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCQlnb3RvIGVycl91bnNldF9jbGllbnRkYXRhOworCX0KKworCXJldHZhbCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShybWk0X2RhdGEtPmlucHV0X2Rldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOmlucHV0IHJlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwogCi1lcnJfcmVxdWVzdF9pcnE6CitlcnJfZnJlZV9pcnE6CiAJZnJlZV9pcnEocGxhdGZvcm1kYXRhLT5pcnFfbnVtYmVyLCBybWk0X2RhdGEpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHJtaTRfZGF0YS0+aW5wdXRfZGV2KTsKLWVycl9pbnB1dF9yZWdpc3RlcjoKK2Vycl91bnNldF9jbGllbnRkYXRhOgogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogZXJyX3F1ZXJ5X2RldjoKIAlpZiAocGxhdGZvcm1kYXRhLT5yZWd1bGF0b3JfZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCmluZGV4IDU3MTg2NDUuLjI3ZTBhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYwpAQCAtOTQ5LDcgKzk0OSw3IEBACiAgKiAgICAgIENhbGxzIHRoZSBCcmlkZ2UncyBDSE5MX0lTUiB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgb3VycywgdGhlbgogICogICAgICBzY2hlZHVsZXMgYSBEUEMgdG8gZGlzcGF0Y2ggSS9PLgogICovCi12b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpCitpbnQgaW9fbWJveF9tc2coc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGxlbiwgdm9pZCAqbXNnKQogewogCXN0cnVjdCBpb19tZ3IgKnBpb19tZ3I7CiAJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CkBAIC05NTksOSArOTU5LDkgQEAKIAlkZXZfZ2V0X2lvX21ncihkZXZfb2JqLCAmcGlvX21ncik7CiAKIAlpZiAoIXBpb19tZ3IpCi0JCXJldHVybjsKKwkJcmV0dXJuIE5PVElGWV9CQUQ7CiAKLQlwaW9fbWdyLT5pbnRyX3ZhbCA9ICh1MTYpbXNnOworCXBpb19tZ3ItPmludHJfdmFsID0gKHUxNikoKHUzMiltc2cpOwogCWlmIChwaW9fbWdyLT5pbnRyX3ZhbCAmIE1CWF9QTV9DTEFTUykKIAkJaW9fZGlzcGF0Y2hfcG0ocGlvX21ncik7CiAKQEAgLTk3Myw3ICs5NzMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW9fbWdyLT5kcGNfbG9jaywgZmxhZ3MpOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZwaW9fbWdyLT5kcGNfdGFza2xldCk7CiAJfQotCXJldHVybjsKKwlyZXR1cm4gTk9USUZZX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCmluZGV4IGEzYjBhMTguLmEzZjY5ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMKQEAgLTIyMyw2ICsyMjMsMTAgQEAKIAlicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZHNwX21ib3hfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpb19tYm94X21zZywKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQpCiB7CiAJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTiB8fApAQCAtNTUzLDcgKzU1Nyw3IEBACiAJCSAqIEVuYWJsZSBNYWlsYm94IGV2ZW50cyBhbmQgYWxzbyBkcmFpbiBhbnkgcGVuZGluZwogCQkgKiBzdGFsZSBtZXNzYWdlcy4KIAkJICovCi0JCWRldl9jb250ZXh0LT5tYm94ID0gb21hcF9tYm94X2dldCgiZHNwIik7CisJCWRldl9jb250ZXh0LT5tYm94ID0gb21hcF9tYm94X2dldCgiZHNwIiwgJmRzcF9tYm94X25vdGlmaWVyKTsKIAkJaWYgKElTX0VSUihkZXZfY29udGV4dC0+bWJveCkpIHsKIAkJCWRldl9jb250ZXh0LT5tYm94ID0gTlVMTDsKIAkJCXByX2VycigiJXM6IEZhaWxlZCB0byBnZXQgZHNwIG1haWxib3ggaGFuZGxlXG4iLApAQCAtNTYzLDggKzU2Nyw2IEBACiAKIAl9CiAJaWYgKCFzdGF0dXMpIHsKLQkJZGV2X2NvbnRleHQtPm1ib3gtPnJ4cS0+Y2FsbGJhY2sgPSAoaW50ICgqKSh2b2lkICopKWlvX21ib3hfbXNnOwotCiAvKlBNX0lWQTJHUlBTRUxfUEVSID0gMHhDMDsqLwogCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOwogCQl0ZW1wID0gKHRlbXAgJiAweEZGRkZGRjMwKSB8IDB4QzA7CkBAIC02ODUsNyArNjg3LDcgQEAKIAkvKiBEaXNhYmxlIHRoZSBtYWlsYm94IGludGVycnVwdHMgKi8KIAlpZiAoZGV2X2NvbnRleHQtPm1ib3gpIHsKIAkJb21hcF9tYm94X2Rpc2FibGVfaXJxKGRldl9jb250ZXh0LT5tYm94LCBJUlFfUlgpOwotCQlvbWFwX21ib3hfcHV0KGRldl9jb250ZXh0LT5tYm94KTsKKwkJb21hcF9tYm94X3B1dChkZXZfY29udGV4dC0+bWJveCwgJmRzcF9tYm94X25vdGlmaWVyKTsKIAkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOwogCX0KIAkvKiBSZXNldCBJVkEyIGNsb2NrcyovCkBAIC03ODYsMTAgKzc4OCw3IEBACiAKIAlwdF9hdHRycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZ190YWJsZV9hdHRycyksIEdGUF9LRVJORUwpOwogCWlmIChwdF9hdHRycyAhPSBOVUxMKSB7Ci0JCS8qIEFzc3VtaW5nIHRoYXQgd2UgdXNlIG9ubHkgRFNQJ3MgbWVtb3J5IG1hcAotCQkgKiB1bnRpbCAweDQwMDA6MDAwMCAsIHdlIHdvdWxkIG5lZWQgb25seSAxMDI0Ci0JCSAqIEwxIGVudGllcyBpLmUgTDEgc2l6ZSA9IDRLICovCi0JCXB0X2F0dHJzLT5sMV9zaXplID0gMHgxMDAwOworCQlwdF9hdHRycy0+bDFfc2l6ZSA9IFNaXzE2SzsgLyogNDA5NiBlbnRyaWVzIG9mIDMyIGJpdHMgKi8KIAkJYWxpZ25fc2l6ZSA9IHB0X2F0dHJzLT5sMV9zaXplOwogCQkvKiBBbGlnbiBzaXplcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcG93ZXIgb2YgMiAqLwogCQkvKiB3ZSBsaWtlIHRvIGdldCBhbGlnbmVkIG9uIEwxIHRhYmxlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb19zbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKaW5kZXggMThhZWM1NS4uODI0MmM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKQEAgLTcyLDIyICs3MiwxNyBAQAogLyoKICAqICA9PT09PT09PSBpb19tYm94X21zZyA9PT09PT09PQogICogIFB1cnBvc2U6Ci0gKiAgICAgIE1haW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzaGFyZWQgbWVtb3J5IEJyaWRnZSBjaGFubmVsIG1hbmFnZXIuCi0gKiAgICAgIENhbGxzIHRoZSBCcmlkZ2UncyBjaG5sc21faXNyIHRvIGRldGVybWluZSBpZiB0aGlzIGludGVycnVwdCBpcyBvdXJzLAotICogICAgICB0aGVuIHNjaGVkdWxlcyBhIERQQyB0byBkaXNwYXRjaCBJL08uCisgKglNYWluIG1lc3NhZ2UgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KKyAqCURldGVybWluZSBpZiB0aGlzIG1lc3NhZ2UgaXMgb3VycywgdGhlbiBzY2hlZHVsZXMgYSBEUEMgdG8KKyAqCWRpc3BhdGNoIEkvTy4KICAqICBQYXJhbWV0ZXJzOgotICogICAgICByZWZfZGF0YTogICBQb2ludGVyIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGJvYXJkLgotICogICAgICAgICAgICAgICAgICBTZXQgaW4gYW4gaW5pdGlhbCBjYWxsIHRvIElTUl9JbnN0YWxsKCkuCisgKglzZWxmOglQb2ludGVyIHRvIGl0cyBvd24gbm90aWZpZXJfYmxvY2sgc3RydWN0LgorICoJbGVuOglMZW5ndGggb2YgbWVzc2FnZS4KKyAqCW1zZzoJTWVzc2FnZSBjb2RlIHJlY2VpdmVkLgogICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaWYgaW50ZXJydXB0IGhhbmRsZWQ7IEZBTFNFIG90aGVyd2lzZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgTXVzdCBiZSBpbiBsb2NrZWQgbWVtb3J5IGlmIGV4ZWN1dGluZyBpbiBrZXJuZWwgbW9kZS4KLSAqICAgICAgTXVzdCBvbmx5IGNhbGwgZnVuY3Rpb25zIHdoaWNoIGFyZSBpbiBsb2NrZWQgbWVtb3J5IGlmIEtlcm5lbCBtb2RlLgotICogICAgICBNdXN0IG9ubHkgY2FsbCBhc3luY2hyb25vdXMgc2VydmljZXMuCi0gKiAgICAgIEludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCBFT0kgZm9yIHRoaXMgaW50ZXJydXB0IGhhcyBiZWVuIHNlbnQuCi0gKiAgRW5zdXJlczoKKyAqCU5PVElGWV9PSyBpZiBoYW5kbGVkOyBOT1RJRllfQkFEIG90aGVyd2lzZS4KICAqLwotdm9pZCBpb19tYm94X21zZyh1MzIgbXNnKTsKK2ludCBpb19tYm94X21zZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgbGVuLCB2b2lkICptc2cpOwogCiAvKgogICogID09PT09PT09IGlvX3JlcXVlc3RfY2hubCA9PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKaW5kZXggMzBkYmZiNi4uZDczMjY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCkBAIC0zMiw2ICszMiw3IEBACiAKIHN0cnVjdCBzdHViX2RldmljZSB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlIHVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwppbmRleCBiMTg2YjVmLi5hN2NlNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwpAQCAtMjU4LDEwICsyNTgsMTEgQEAKIHN0YXRpYyB2b2lkIHN0dWJfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQogewogCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCWludCByZXQ7CiAKIAl1c2JpcF91ZGJnKCJkZXZpY2UgcmVzZXQiKTsKKwogCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodWRldiwgc2Rldi0+aW50ZXJmYWNlKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJsb2NrIGZvciByZXNldFxuIik7CkBAIC0zMDksNyArMzEwLDggQEAKICAqCiAgKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3IHN0dWJfZGV2aWNlIHN0cnVjdC4KICAqLwotc3RhdGljIHN0cnVjdCBzdHViX2RldmljZSAqc3R1Yl9kZXZpY2VfYWxsb2Moc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnN0dWJfZGV2aWNlX2FsbG9jKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCQkgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7CiAJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2OwogCWludCBidXNudW0gPSBpbnRlcmZhY2VfdG9fYnVzbnVtKGludGVyZmFjZSk7CkBAIC0zMjQsNyArMzI2LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2Rldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCXNkZXYtPmludGVyZmFjZSA9IHVzYl9nZXRfaW50ZihpbnRlcmZhY2UpOworCXNkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIAogCS8qCiAJICogZGV2aWQgaXMgZGVmaW5lZCB3aXRoIGRldm51bSB3aGVuIHRoaXMgZHJpdmVyIGlzIGZpcnN0IGFsbG9jYXRlZC4KQEAgLTQ1MCwxMSArNDUzLDEyIEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKKwkJdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIG9rLiB0aGlzIGlzIG15IGRldmljZS4gKi8KLQlzZGV2ID0gc3R1Yl9kZXZpY2VfYWxsb2MoaW50ZXJmYWNlKTsKKwlzZGV2ID0gc3R1Yl9kZXZpY2VfYWxsb2ModWRldiwgaW50ZXJmYWNlKTsKIAlpZiAoIXNkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00NzYsNiArNDgwLDggQEAKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAogCQkJdWRldl9idXNpZCk7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CisKIAkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50ID0gMDsKIAogCQlidXNpZF9wcml2LT5zZGV2ID0gTlVMTDsKQEAgLTU0NSw2ICs1NTEsNyBAQAogCWlmIChidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPiAxKSB7CiAJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudC0tOwogCQlzaHV0ZG93bl9idXNpZChidXNpZF9wcml2KTsKKwkJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU1NCw2ICs1NjEsOSBAQAogCS8qIDEuIHNodXRkb3duIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KIAlzaHV0ZG93bl9idXNpZChidXNpZF9wcml2KTsKIAorCXVzYl9wdXRfZGV2KHNkZXYtPnVkZXYpOworCXVzYl9wdXRfaW50ZihpbnRlcmZhY2UpOworCiAJLyogMy4gZnJlZSBzZGV2ICovCiAJYnVzaWRfcHJpdi0+c2RldiA9IE5VTEw7CiAJc3R1Yl9kZXZpY2VfZnJlZShzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IDNkZTZmZDIuLmFlNmFjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X3BpcGUoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBpbnQgZXBudW0sIGludCBkaXIpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQgPSBOVUxMOwogCkBAIC00ODQsNyArNDg0LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CiAJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmc2Rldi0+dWQ7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCWludCBwaXBlID0gZ2V0X3BpcGUoc2RldiwgcGR1LT5iYXNlLmVwLCBwZHUtPmJhc2UuZGlyZWN0aW9uKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaAppbmRleCA0MWExZmU1Li5hZmMzYjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKQEAgLTEwMCw5ICsxMDAsNiBAQAogCSAqIEJ1dCwgdGhlIGluZGV4IG9mIHRoaXMgYXJyYXkgYmVnaW5zIGZyb20gMC4KIAkgKi8KIAlzdHJ1Y3QgdmhjaV9kZXZpY2UgdmRldltWSENJX05QT1JUU107Ci0KLQkvKiB2aGNpX2RldmljZSB3aGljaCBoYXMgbm90IGJlZW4gYXNzaWdlZCBpdHMgYWRkcmVzcyB5ZXQgKi8KLQlpbnQgcGVuZGluZ19wb3J0OwogfTsKIAogCkBAIC0xMTksNiArMTE2LDkgQEAKIHZvaWQgdmhjaV9yeF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCk7CiB2b2lkIHZoY2lfdHhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpOwogCitzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQkJCQkgICAgX191MzIgc2VxbnVtKTsKKwogI2RlZmluZSBoYXJkd2FyZQkJKCZ0aGVfY29udHJvbGxlci0+cGRldi5kZXYpCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZoY2lfZGV2aWNlICpwb3J0X3RvX3ZkZXYoX191MzIgcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMDhiZDI2YS4uYTM1ZmU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTEzOCw4ICsxMzgsNiBAQAogCSAqIHRoZV9jb250cm9sbGVyLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzID0gVkRFVl9DT05ORUNUOwogCSAqIHNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLmxvY2spOyAqLwogCi0JdGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCA9IHJocG9ydDsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CiAKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSk7CkBAIC01NTksNiArNTU3LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXJiLT5kZXYtPmRldjsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldjsKIAogCXVzYmlwX2RiZ192aGNpX2hjKCJlbnRlciwgdXNiX2hjZCAlcCB1cmIgJXAgbWVtX2ZsYWdzICVkXG4iLAogCQkgICAgaGNkLCB1cmIsIG1lbV9mbGFncyk7CkBAIC01NzQsNiArNTczLDE4IEBACiAJCXJldHVybiB1cmItPnN0YXR1czsKIAl9CiAKKwl2ZGV2ID0gcG9ydF90b192ZGV2KHVyYi0+ZGV2LT5wb3J0bnVtLTEpOworCisJLyogcmVmdXNlIGVucXVldWUgZm9yIGRlYWQgY29ubmVjdGlvbiAqLworCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJaWYgKHZkZXYtPnVkLnN0YXR1cyA9PSBWREVWX1NUX05VTEwgfHwgdmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfRVJST1IpIHsKKwkJdXNiaXBfdWVycigiZW5xdWV1ZSBmb3IgaW5hY3RpdmUgcG9ydCAlZFxuIiwgdmRldi0+cmhwb3J0KTsKKwkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCiAJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CiAJaWYgKHJldCkKIAkJZ290byBub19uZWVkX3VubGluazsKQEAgLTU5Miw4ICs2MDMsNiBAQAogCQlfX3U4IHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybHJlcSA9CiAJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7Ci0JCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9Ci0JCQkJcG9ydF90b192ZGV2KHRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQpOwogCiAJCWlmICh0eXBlICE9IFBJUEVfQ09OVFJPTCB8fCAhY3RybHJlcSkgewogCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlcXVlc3QgdG8gZGV2bnVtIDBcbiIpOwpAQCAtNjA3LDcgKzYxNiw5IEBACiAJCQlkZXZfaW5mbyhkZXYsICJTZXRBZGRyZXNzIFJlcXVlc3QgKCVkKSB0byBwb3J0ICVkXG4iLAogCQkJCSBjdHJscmVxLT53VmFsdWUsIHZkZXYtPnJocG9ydCk7CiAKLQkJCXZkZXYtPnVkZXYgPSB1cmItPmRldjsKKwkJCWlmICh2ZGV2LT51ZGV2KQorCQkJCXVzYl9wdXRfZGV2KHZkZXYtPnVkZXYpOworCQkJdmRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVyYi0+ZGV2KTsKIAogCQkJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKIAkJCXZkZXYtPnVkLnN0YXR1cyA9IFZERVZfU1RfVVNFRDsKQEAgLTYyNyw4ICs2MzgsOSBAQAogCQkJCQkJIkdldF9EZXNjcmlwdG9yIHRvIGRldmljZSAwICIKIAkJCQkJCSIoZ2V0IG1heCBwaXBlIHNpemUpXG4iKTsKIAotCQkJLyogRklYTUU6IHJlZmVyZW5jZSBjb3VudD8gKHVzYl9nZXRfZGV2KCkpICovCi0JCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisJCQlpZiAodmRldi0+dWRldikKKwkJCQl1c2JfcHV0X2Rldih2ZGV2LT51ZGV2KTsKKwkJCXZkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1cmItPmRldik7CiAJCQlnb3RvIG91dDsKIAogCQlkZWZhdWx0OgpAQCAtODA1LDcgKzgxNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOwpAQCAtODEzLDExICs4MjQsMzQgQEAKIAlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJdXNiaXBfdWluZm8oInVubGluayBjbGVhbnVwIHR4ICVsdVxuIiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKIAkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CiAJCWtmcmVlKHVubGluayk7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQkvKiBnaXZlIGJhY2sgVVJCIG9mIHVuYW5zd2VyZWQgdW5saW5rIHJlcXVlc3QgKi8KKwkJdXNiaXBfdWluZm8oInVubGluayBjbGVhbnVwIHJ4ICVsdVxuIiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKworCQl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXVzYmlwX3VpbmZvKCJ0aGUgdXJiIChzZXFudW0gJWx1KSB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrXG4iLAorCQkJCQkJCXVubGluay0+dW5saW5rX3NlcW51bSk7CisJCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJCWtmcmVlKHVubGluayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXVyYi0+c3RhdHVzID0gLUVOT0RFVjsKKworCQlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIpOworCQlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiLCB1cmItPnN0YXR1cyk7CisKIAkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CiAJCWtmcmVlKHVubGluayk7CiAJfQpAQCAtODg3LDYgKzkyMSwxMCBAQAogCXZkZXYtPnNwZWVkICA9IDA7CiAJdmRldi0+ZGV2aWQgID0gMDsKIAorCWlmICh2ZGV2LT51ZGV2KQorCQl1c2JfcHV0X2Rldih2ZGV2LT51ZGV2KTsKKwl2ZGV2LT51ZGV2ID0gTlVMTDsKKwogCXVkLT50Y3Bfc29ja2V0ID0gTlVMTDsKIAogCXVkLT5zdGF0dXMgPSBWREVWX1NUX05VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwppbmRleCA4MTQ3ZDcyLi5iZjY5OTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKQEAgLTIzLDE2ICsyMywxNCBAQAogI2luY2x1ZGUgInZoY2kuaCIKIAogCi0vKiBnZXQgVVJCIGZyb20gdHJhbnNtaXR0ZWQgdXJiIHF1ZXVlICovCi1zdGF0aWMgc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKy8qIGdldCBVUkIgZnJvbSB0cmFuc21pdHRlZCB1cmIgcXVldWUuIGNhbGxlciBtdXN0IGhvbGQgdmRldi0+cHJpdl9sb2NrICovCitzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAogCQkJCQkgICAgX191MzIgc2VxbnVtKQogewogCXN0cnVjdCB2aGNpX3ByaXYgKnByaXYsICp0bXA7CiAJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnZkZXYtPnByaXZfcngsIGxpc3QpIHsKIAkJaWYgKHByaXYtPnNlcW51bSA9PSBzZXFudW0pIHsKIAkJCXVyYiA9IHByaXYtPnVyYjsKQEAgLTYzLDggKzYxLDYgQEAKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwotCiAJcmV0dXJuIHVyYjsKIH0KIApAQCAtNzQsOSArNzAsMTEgQEAKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZ2ZGV2LT51ZDsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgcGR1LT5iYXNlLnNlcW51bSk7CiAKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCWlmICghdXJiKSB7CiAJCXVzYmlwX3VlcnIoImNhbm5vdCBmaW5kIGEgdXJiIG9mIHNlcW51bSAldVxuIiwKQEAgLTE2MSw3ICsxNTksMTIgQEAKIAkJcmV0dXJuOwogCX0KIAorCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKwogCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCB1bmxpbmstPnVubGlua19zZXFudW0pOworCisJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7CisKIAlpZiAoIXVyYikgewogCQkvKgogCQkgKiBJIGdldCB0aGUgcmVzdWx0IG9mIGEgdW5saW5rIHJlcXVlc3QuIEJ1dCwgaXQgc2VlbXMgdGhhdCBJCkBAIC0xOTAsNiArMTkzLDE5IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IHZoY2lfcHJpdl90eF9lbXB0eShzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJaW50IGVtcHR5ID0gMDsKKworCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCWVtcHR5ID0gbGlzdF9lbXB0eSgmdmRldi0+cHJpdl9yeCk7CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCXJldHVybiBlbXB0eTsKK30KKwogLyogcmVjdiBhIHBkdSAqLwogc3RhdGljIHZvaWQgdmhjaV9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCiB7CkBAIC0yMDIsMTEgKzIxOCwyOSBAQAogCiAJbWVtc2V0KCZwZHUsIDAsIHNpemVvZihwZHUpKTsKIAotCiAJLyogMS4gcmVjZWl2ZSBhIHBkdSBoZWFkZXIgKi8KIAlyZXQgPSB1c2JpcF94bWl0KDAsIHVkLT50Y3Bfc29ja2V0LCAoY2hhciAqKSAmcGR1LCBzaXplb2YocGR1KSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUNPTk5SRVNFVCkKKwkJCXVzYmlwX3VpbmZvKCJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcbiIpOworCQllbHNlIGlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJLyogaWdub3JlIGlmIGNvbm5lY3Rpb24gd2FzIGlkbGUgKi8KKwkJCWlmICh2aGNpX3ByaXZfdHhfZW1wdHkodmRldikpCisJCQkJcmV0dXJuOworCQkJdXNiaXBfdWluZm8oImNvbm5lY3Rpb24gdGltZWQgb3V0IHdpdGggcGVuZGluZyB1cmJzXG4iKTsKKwkJfSBlbHNlIGlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJdXNiaXBfdWluZm8oInhtaXQgZmFpbGVkICVkXG4iLCByZXQpOworCisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCWlmIChyZXQgPT0gMCkgeworCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiBjbG9zZWQiKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0RPV04pOworCQlyZXR1cm47CisJfQogCWlmIChyZXQgIT0gc2l6ZW9mKHBkdSkpIHsKLQkJdXNiaXBfdWVycigicmVjZWl2aW5nIHBkdSBmYWlsZWQhIHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwKKwkJdXNiaXBfdWVycigicmVjZWl2ZWQgcGR1IHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwKIAkJCQkJcmV0LCAodW5zaWduZWQgaW50KXNpemVvZihwZHUpKTsKIAkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9Nb2R1bGUuc3ltdmVycyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9Nb2R1bGUuc3ltdmVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvTW9kdWxlLnN5bXZlcnMKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKaW5kZXggNzAxNmZkZC4uZTE5YjkzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCkBAIC0zOTU0LDggKzM5NTQsOCBAQAogdW5zaWduZWQgY2hhciBYR0lfSXNMQ0REdWFsTGluayhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKLQlpZiAoKCgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEKSB8IFNldENSVDJUb0xDREEpKQotCQkJJiYgKHBWQkluZm8tPkxDREluZm8gJiBTZXRMQ0REdWFsTGluaykpIC8qIHNoYW1wb28wMTI5ICovCisJaWYgKChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpICYmCisJCQkocFZCSW5mby0+TENESW5mbyAmIFNldExDRER1YWxMaW5rKSkgLyogc2hhbXBvbzAxMjkgKi8KIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTg3NzMsNyArODc3Myw3IEBACiAKIAlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkgewogCQlDUlQySW5kZXggPSBDUlQySW5kZXggPj4gNjsgLyogIGZvciBMQ0QgKi8KLQkJaWYgKCgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEKSB8IFNldENSVDJUb0xDREEpKSB7IC8qMzAxYiovCisJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpIHsgLyozMDFiKi8KIAkJCWlmIChwVkJJbmZvLT5MQ0RSZXNJbmZvICE9IFBhbmVsMTAyNHg3NjgpCiAJCQkJVkNMS0luZGV4ID0gTENEWGxhdDJWQ0xLW0NSVDJJbmRleF07CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYwppbmRleCA1NDE1NzEyLi40YmQ4Y2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKQEAgLTIyNyw2ICsyMjcsNyBAQAogCiAJCWlmICh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9aRVJPKSkgewogCQkJaGFuZGxlX3plcm9fcGFnZShwYWdlKTsKKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMzUsMTIgKzIzNiwxNCBAQAogCQkJcHJfZGVidWcoIlJlYWQgYmVmb3JlIHdyaXRlOiBzZWN0b3I9JWx1LCBzaXplPSV1IiwKIAkJCQkodWxvbmcpKGJpby0+Ymlfc2VjdG9yKSwgYmlvLT5iaV9zaXplKTsKIAkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIFBhZ2UgaXMgc3RvcmVkIHVuY29tcHJlc3NlZCBzaW5jZSBpdCdzIGluY29tcHJlc3NpYmxlICovCiAJCWlmICh1bmxpa2VseSh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpKSkgewogCQkJaGFuZGxlX3VuY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTsKKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zMjAsNiArMzIzLDcgQEAKIAkJCW11dGV4X3VubG9jaygmenJhbS0+bG9jayk7CiAJCQl6cmFtX3N0YXRfaW5jKCZ6cmFtLT5zdGF0cy5wYWdlc196ZXJvKTsKIAkJCXpyYW1fc2V0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTyk7CisJCQlpbmRleCsrOwogCQkJY29udGludWU7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL01ha2VmaWxlIGIvZHJpdmVycy90dHkvaHZjL01ha2VmaWxlCmluZGV4IGU2YmVkNWYuLmQ3OWU3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUKQEAgLTEwLDQgKzEwLDMgQEAKIG9iai0kKENPTkZJR19IVkNfSVVDVikJCSs9IGh2Y19pdWN2Lm8KIG9iai0kKENPTkZJR19IVkNfVURCRykJCSs9IGh2Y191ZGJnLm8KIG9iai0kKENPTkZJR19IVkNTKQkJKz0gaHZjcy5vCi1vYmotJChDT05GSUdfVklSVElPX0NPTlNPTEUpCSs9IHZpcnRpb19jb25zb2xlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDQ0Yjg0MTIuLmFhMmU1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtMjQxNCw2ICsyNDE0LDcgQEAKIAogCWdzbS0+aW5pdGlhdG9yID0gYy0+aW5pdGlhdG9yOwogCWdzbS0+bXJ1ID0gYy0+bXJ1OworCWdzbS0+bXR1ID0gYy0+bXR1OwogCWdzbS0+ZW5jb2RpbmcgPSBjLT5lbmNhcHN1bGF0aW9uOwogCWdzbS0+YWRhcHRpb24gPSBjLT5hZGFwdGlvbjsKIAlnc20tPm4yID0gYy0+bjI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2hkbGMuYyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCmluZGV4IDQ3ZDMyMjguLjUyZmMwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25faGRsYy5jCisrKyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCkBAIC01ODEsOCArNTgxLDkgQEAKIAkJCSAgIF9fdTggX191c2VyICpidWYsIHNpemVfdCBucikKIHsKIAlzdHJ1Y3Qgbl9oZGxjICpuX2hkbGMgPSB0dHkybl9oZGxjKHR0eSk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgbl9oZGxjX2J1ZiAqcmJ1ZjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCWlmIChkZWJ1Z2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCQogCQlwcmludGsoIiVzKCVkKW5faGRsY190dHlfcmVhZCgpIGNhbGxlZFxuIixfX0ZJTEVfXyxfX0xJTkVfXyk7CkBAIC01OTgsNTcgKzU5OSw1NSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQl0dHlfbG9jaygpOworCWFkZF93YWl0X3F1ZXVlKCZ0dHktPnJlYWRfd2FpdCwgJndhaXQpOwogCiAJZm9yICg7OykgewogCQlpZiAodGVzdF9iaXQoVFRZX09USEVSX0NMT1NFRCwgJnR0eS0+ZmxhZ3MpKSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVJTzsKKwkJCXJldCA9IC1FSU87CisJCQlicmVhazsKIAkJfQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxlKSkKKwkJCWJyZWFrOwogCi0JCW5faGRsYyA9IHR0eTJuX2hkbGMgKHR0eSk7Ci0JCWlmICghbl9oZGxjIHx8IG5faGRsYy0+bWFnaWMgIT0gSERMQ19NQUdJQyB8fAotCQkJIHR0eSAhPSBuX2hkbGMtPnR0eSkgewotCQkJdHR5X3VubG9jaygpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlyYnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+cnhfYnVmX2xpc3QpOwotCQlpZiAocmJ1ZikKKwkJaWYgKHJidWYpIHsKKwkJCWlmIChyYnVmLT5jb3VudCA+IG5yKSB7CisJCQkJLyogdG9vIGxhcmdlIGZvciBjYWxsZXIncyBidWZmZXIgKi8KKwkJCQlyZXQgPSAtRU9WRVJGTE9XOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+YnVmLCByYnVmLT5jb3VudCkpCisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlyZXQgPSByYnVmLT5jb3VudDsKKwkJCX0KKworCQkJaWYgKG5faGRsYy0+cnhfZnJlZV9idWZfbGlzdC5jb3VudCA+CisJCQkgICAgREVGQVVMVF9SWF9CVUZfQ09VTlQpCisJCQkJa2ZyZWUocmJ1Zik7CisJCQllbHNlCisJCQkJbl9oZGxjX2J1Zl9wdXQoJm5faGRsYy0+cnhfZnJlZV9idWZfbGlzdCwgcmJ1Zik7CiAJCQlicmVhazsKKwkJfQogCQkJCiAJCS8qIG5vIGRhdGEgKi8KIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlicmVhazsKIAkJfQotCQkJCi0JCWludGVycnVwdGlibGVfc2xlZXBfb24gKCZ0dHktPnJlYWRfd2FpdCk7CisKKwkJc2NoZWR1bGUoKTsKKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUlOVFI7CisJCQlyZXQgPSAtRUlOVFI7CisJCQlicmVhazsKIAkJfQogCX0KLQkJCi0JaWYgKHJidWYtPmNvdW50ID4gbnIpCi0JCS8qIGZyYW1lIHRvbyBsYXJnZSBmb3IgY2FsbGVyJ3MgYnVmZmVyIChkaXNjYXJkIGZyYW1lKSAqLwotCQlyZXQgPSAtRU9WRVJGTE9XOwotCWVsc2UgewotCQkvKiBDb3B5IHRoZSBkYXRhIHRvIHRoZSBjYWxsZXIncyBidWZmZXIgKi8KLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmJ1ZiwgcmJ1Zi0+Y291bnQpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gcmJ1Zi0+Y291bnQ7Ci0JfQotCQotCS8qIHJldHVybiBIRExDIGJ1ZmZlciB0byBmcmVlIGxpc3QgdW5sZXNzIHRoZSBmcmVlIGxpc3QgKi8KLQkvKiBjb3VudCBoYXMgZXhjZWVkZWQgdGhlIGRlZmF1bHQgdmFsdWUsIGluIHdoaWNoIGNhc2UgdGhlICovCi0JLyogYnVmZmVyIGlzIGZyZWVkIGJhY2sgdG8gdGhlIE9TIHRvIGNvbnNlcnZlIG1lbW9yeSAqLwotCWlmIChuX2hkbGMtPnJ4X2ZyZWVfYnVmX2xpc3QuY291bnQgPiBERUZBVUxUX1JYX0JVRl9DT1VOVCkKLQkJa2ZyZWUocmJ1Zik7Ci0JZWxzZQkKLQkJbl9oZGxjX2J1Zl9wdXQoJm5faGRsYy0+cnhfZnJlZV9idWZfbGlzdCxyYnVmKTsKLQl0dHlfdW5sb2NrKCk7CisKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKIAlyZXR1cm4gcmV0OwogCQogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWFkKCkgKi8KQEAgLTY5MSwxNCArNjkwLDE1IEBACiAJCWNvdW50ID0gbWF4ZnJhbWU7CiAJfQogCQotCXR0eV9sb2NrKCk7Ci0KIAlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkKLQkvKiBBbGxvY2F0ZSB0cmFuc21pdCBidWZmZXIgKi8KLQkvKiBzbGVlcCB1bnRpbCB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmxlICovCQkKLQl3aGlsZSAoISh0YnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+dHhfZnJlZV9idWZfbGlzdCkpKSB7CisJCXRidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KTsKKwkJaWYgKHRidWYpCisJCQlicmVhazsKKwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCWVycm9yID0gLUVBR0FJTjsKIAkJCWJyZWFrOwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCX0KIAl9CiAKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAKIAlpZiAoIWVycm9yKSB7CQkKQEAgLTczMSw3ICs3MzEsNyBAQAogCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT50eF9idWZfbGlzdCx0YnVmKTsKIAkJbl9oZGxjX3NlbmRfZnJhbWVzKG5faGRsYyx0dHkpOwogCX0KLQl0dHlfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyb3I7CiAJCiB9CS8qIGVuZCBvZiBuX2hkbGNfdHR5X3dyaXRlKCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC82ODM2MHNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKaW5kZXggODhiMTMzNS4uYmMyMWVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKQEAgLTI0MjgsNiArMjQyOCw3IEBACiAJLyogLnJlYWRfcHJvYyA9IHJzXzM2MF9yZWFkX3Byb2MsICovCiAJLnRpb2NtZ2V0ID0gcnNfMzYwX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHJzXzM2MF90aW9jbXNldCwKKwkuZ2V0X2ljb3VudCA9IHJzXzM2MF9nZXRfaWNvdW50LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcnNfMzYwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCmluZGV4IGIyNWU2ZTQuLjM5NzVkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwpAQCAtMjM2LDcgKzIzNiw4IEBACiAJCS5maWZvX3NpemUJPSAxMjgsCiAJCS50eF9sb2Fkc3oJPSAxMjgsCiAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9SX1RSSUdfMTAsCi0JCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPIHwgVUFSVF9DQVBfRUZSIHwgVUFSVF9DQVBfU0xFRVAsCisJCS8qIFVBUlRfQ0FQX0VGUiBicmVha3MgYmlsbGlvbm9uIENGIGJsdWV0b290aCBjYXJkLiAqLworCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX1NMRUVQLAogCX0sCiAJW1BPUlRfMTY2NTRdID0gewogCQkubmFtZQkJPSAiU1QxNjY1NCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IGIxNjgyZDcuLjJiODMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC0xNTE4LDYgKzE1MTgsNyBAQAogY29uZmlnIFNFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQKIAl0cmlzdGF0ZSAiR1JMSUIgQVBCVUFSVCBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IFNFUklBTF9DT1JFCiAJLS0taGVscC0tLQogCUFkZCBzdXBwb3J0IGZvciB0aGUgR1JMSUIgQVBCVUFSVCBzZXJpYWwgcG9ydC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYwppbmRleCBlMzgxYjg5Li45YjFmZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYwpAQCAtMzcwLDEwICszNzAsOCBAQAogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gZGV2X2lkOwogCi0Jc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwogCXdoaWxlIChVQVJUX0dFVF9MU1IodWFydCkgJiBEUikKIAkJYmZpbl9zZXJpYWxfcnhfY2hhcnModWFydCk7Ci0Jc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00OTAsOSArNDg4LDggQEAKIHsKIAlpbnQgeF9wb3MsIHBvczsKIAotCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7Ci0JZG1hX2Rpc2FibGVfaXJxKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKLQlzcGluX2xvY2tfYmgoJnVhcnQtPnBvcnQubG9jayk7CisJZG1hX2Rpc2FibGVfaXJxX25vc3luYyh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CisJc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5yeF9sb2NrKTsKIAogCS8qIDJEIERNQSBSWCBidWZmZXIgcmluZyBpcyB1c2VkLiBCZWNhdXNlIGN1cnJfeV9jb3VudCBhbmQKIAkgKiBjdXJyX3hfY291bnQgY2FuJ3QgYmUgcmVhZCBhcyBhbiBhdG9taWMgb3BlcmF0aW9uLApAQCAtNTIzLDggKzUyMCw3IEBACiAJCXVhcnQtPnJ4X2RtYV9idWYudGFpbCA9IHVhcnQtPnJ4X2RtYV9idWYuaGVhZDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmdWFydC0+cG9ydC5sb2NrKTsKLQlkbWFfZW5hYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfYmgoJnVhcnQtPnJ4X2xvY2spOwogCWRtYV9lbmFibGVfaXJxKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKIAogCW1vZF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lciksIGppZmZpZXMgKyBETUFfUlhfRkxVU0hfSklGRklFUyk7CkBAIC01NzEsNyArNTY3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBpcnFzdGF0OwogCWludCB4X3BvcywgcG9zOwogCi0Jc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOworCXNwaW5fbG9jaygmdWFydC0+cnhfbG9jayk7CiAJaXJxc3RhdCA9IGdldF9kbWFfY3Vycl9pcnFzdGF0KHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKIAljbGVhcl9kbWFfaXJxc3RhdCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAKQEAgLTU4OSw3ICs1ODUsNyBAQAogCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSB1YXJ0LT5yeF9kbWFfYnVmLmhlYWQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CisJc3Bpbl91bmxvY2soJnVhcnQtPnJ4X2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTMzMiw2ICsxMzI4LDcgQEAKIAkJfQogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQorCQlzcGluX2xvY2tfaW5pdCgmdWFydC0+cnhfbG9jayk7CiAJCXVhcnQtPnR4X2RvbmUJICAgID0gMTsKIAkJdWFydC0+dHhfY291bnQJICAgID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jCmluZGV4IGEyZjJiMzIuLjYwMmQ5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKQEAgLTgyOSw3ICs4MjksNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfU0IxMjUwX0RVQVJUX0NPTlNPTEUKIC8qCiAgKiBTZXJpYWwgY29uc29sZSBzdHVmZi4gIFZlcnkgYmFzaWMsIHBvbGxpbmcgZHJpdmVyIGZvciBkb2luZyBzZXJpYWwKLSAqIGNvbnNvbGUgb3V0cHV0LiAgVGhlIGNvbnNvbGVfc2VtIGlzIGhlbGQgYnkgdGhlIGNhbGxlciwgc28gd2UKKyAqIGNvbnNvbGUgb3V0cHV0LiAgVGhlIGNvbnNvbGVfbG9jayBpcyBoZWxkIGJ5IHRoZSBjYWxsZXIsIHNvIHdlCiAgKiBzaG91bGRuJ3QgYmUgaW50ZXJydXB0ZWQgZm9yIG1vcmUgY29uc29sZSBhY3Rpdml0eS4KICAqLwogc3RhdGljIHZvaWQgc2JkX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgaW50IGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc3lzcnEuYyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKaW5kZXggYzU1NmVkOS4uOGUwZGQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3lzcnEuYworKysgYi9kcml2ZXJzL3R0eS9zeXNycS5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKIC8qIFdoZXRoZXIgd2UgcmVhY3Qgb24gc3lzcnEga2V5cyBvciBqdXN0IGlnbm9yZSB0aGVtICovCi1zdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgc3lzcnFfZW5hYmxlZCA9IDE7CitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgc3lzcnFfZW5hYmxlZCA9IFNZU1JRX0RFRkFVTFRfRU5BQkxFOwogc3RhdGljIGJvb2wgX19yZWFkX21vc3RseSBzeXNycV9hbHdheXNfZW5hYmxlZDsKIAogc3RhdGljIGJvb2wgc3lzcnFfb24odm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKaW5kZXggNDY0ZDA5ZC4uMDA2NWRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTMyNTYsOCArMzI1Niw4IEBACiAJc3RydWN0IGNvbnNvbGUgKmM7CiAJc3NpemVfdCBjb3VudCA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JZm9yIChjID0gY29uc29sZV9kcml2ZXJzOyBjOyBjID0gYy0+bmV4dCkgeworCWNvbnNvbGVfbG9jaygpOworCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIWMtPmRldmljZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWMtPndyaXRlKQpAQCAtMzI3MSw3ICszMjcxLDcgQEAKIAl3aGlsZSAoaS0tKQogCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJXMlZCVjIiwKIAkJCQkgY3NbaV0tPm5hbWUsIGNzW2ldLT5pbmRleCwgaSA/ICcgJzonXG4nKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTMzMDYsNyArMzMwNiw3IEBACiAJaWYgKElTX0VSUihjb25zZGV2KSkKIAkJY29uc2RldiA9IE5VTEw7CiAJZWxzZQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoY29uc2RldiwgJmRldl9hdHRyX2FjdGl2ZSk7CisJCVdBUk5fT04oZGV2aWNlX2NyZWF0ZV9maWxlKGNvbnNkZXYsICZkZXZfYXR0cl9hY3RpdmUpIDwgMCk7CiAKICNpZmRlZiBDT05GSUdfVlQKIAl2dHlfaW5pdCgmY29uc29sZV9mb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jIGIvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKaW5kZXggZWJhZTM0NC4uYzk1NmVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKKysrIGIvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKQEAgLTMxNiw5ICszMTYsOSBAQAogCS8qIGFsd2F5cyBjYWxsZWQgd2l0aCBCVE0gZnJvbSB2dF9pb2N0bCAqLwogCVdBUk5fT04oIXR0eV9sb2NrZWQoKSk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcG9rZV9ibGFua2VkX2NvbnNvbGUoKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCWlmICghbGQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKaW5kZXggZWFiM2ExZi4uYTY3MmVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCS8qIFNlbGVjdCB0aGUgcHJvcGVyIGN1cnJlbnQgY29uc29sZSBhbmQgdmVyaWZ5CiAJICogc2FuaXR5IG9mIHRoZSBzaXR1YXRpb24gdW5kZXIgdGhlIGNvbnNvbGUgbG9jay4KIAkgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlhdHRyID0gKGN1cnJjb25zICYgMTI4KTsKIAljdXJyY29ucyA9IChjdXJyY29ucyAmIDEyNyk7CkBAIC0zMzYsOSArMzM2LDkgQEAKIAkJICogdGhlIHBhZ2VmYXVsdCBoYW5kbGluZyBjb2RlIG1heSB3YW50IHRvIGNhbGwgcHJpbnRrKCkuCiAJCSAqLwogCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0ID0gY29weV90b191c2VyKGJ1ZiwgY29uX2J1Zl9zdGFydCwgb3JpZ19jb3VudCk7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJaWYgKHJldCkgewogCQkJcmVhZCArPSAob3JpZ19jb3VudCAtIHJldCk7CkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpZiAocmVhZCkKIAkJcmV0ID0gcmVhZDsKIHVubG9ja19vdXQ6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbXV0ZXhfdW5sb2NrKCZjb25fYnVmX210eCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3OSw3ICszNzksNyBAQAogCS8qIFNlbGVjdCB0aGUgcHJvcGVyIGN1cnJlbnQgY29uc29sZSBhbmQgdmVyaWZ5CiAJICogc2FuaXR5IG9mIHRoZSBzaXR1YXRpb24gdW5kZXIgdGhlIGNvbnNvbGUgbG9jay4KIAkgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlhdHRyID0gKGN1cnJjb25zICYgMTI4KTsKIAljdXJyY29ucyA9IChjdXJyY29ucyAmIDEyNyk7CkBAIC00MTQsOSArNDE0LDkgQEAKIAkJLyogVGVtcG9yYXJpbHkgZHJvcCB0aGUgY29uc29sZSBsb2NrIHNvIHRoYXQgd2UgY2FuIHJlYWQKIAkJICogaW4gdGhlIHdyaXRlIGRhdGEgZnJvbSB1c2Vyc3BhY2Ugc2FmZWx5LgogCQkgKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjb25fYnVmLCBidWYsIHRoaXNfcm91bmQpOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCWlmIChyZXQpIHsKIAkJCXRoaXNfcm91bmQgLT0gcmV0OwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJCXZjc19zY3JfdXBkYXRlZCh2Yyk7CiAKIHVubG9ja19vdXQ6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAltdXRleF91bmxvY2soJmNvbl9idWZfbXR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnQuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKaW5kZXggNzY0MDdlYy4uMTQ3ZWRlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnQuYwpAQCAtMTAwMyw5ICsxMDAzLDkgQEAKIAlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmV0ID0gdmNfZG9fcmVzaXplKHR0eSwgdmMsIHdzLT53c19jb2wsIHdzLT53c19yb3cpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJdmMtPnZjX2NvbG9yID0gdmMtPnZjX2RlZl9jb2xvcjsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9tKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlpbnQgaTsKQEAgLTE0MTUsNyArMTQxNSw3IEBACiAJcmV0dXJuIHZjX2NvbnNbZmdfY29uc29sZV0uZC0+dmNfcmVwb3J0X21vdXNlOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgc2V0X21vZGUoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgb25fb2ZmKQogewogCWludCBpOwpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAKIAkJfQogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgc2V0dGVybV9jb21tYW5kKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlzd2l0Y2godmMtPnZjX3BhclswXSkgewpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIAl9CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBjc2lfYXQoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX2NvbHMgLSB2Yy0+dmNfeCkKQEAgLTE1NTUsNyArMTU1NSw3IEBACiAJaW5zZXJ0X2NoYXIodmMsIG5yKTsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9MKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IG5yKQogewogCWlmIChuciA+IHZjLT52Y19yb3dzIC0gdmMtPnZjX3kpCkBAIC0xNTY2LDcgKzE1NjYsNyBAQAogCXZjLT52Y19uZWVkX3dyYXAgPSAwOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX1Aoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX2NvbHMgLSB2Yy0+dmNfeCkKQEAgLTE1NzYsNyArMTU3Niw3IEBACiAJZGVsZXRlX2NoYXIodmMsIG5yKTsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9NKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IG5yKQogewogCWlmIChuciA+IHZjLT52Y19yb3dzIC0gdmMtPnZjX3kpCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCXZjLT52Y19uZWVkX3dyYXAgPSAwOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQtPnJlc2V0X3Rlcm1pbmFsICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAoZXhjZXB0IHZpYSB2Y19pbml0LT5yZXNldF90ZXJtaW5hbCAqLwogc3RhdGljIHZvaWQgc2F2ZV9jdXIoc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXZjLT52Y19zYXZlZF94CQk9IHZjLT52Y194OwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKIAl2Yy0+dmNfc2F2ZWRfRzEJCT0gdmMtPnZjX0cxX2NoYXJzZXQ7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCByZXN0b3JlX2N1cihzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJZ290b3h5KHZjLCB2Yy0+dmNfc2F2ZWRfeCwgdmMtPnZjX3NhdmVkX3kpOwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAKIAlFU2hhc2gsIEVTc2V0RzAsIEVTc2V0RzEsIEVTcGVyY2VudCwgRVNpZ25vcmUsIEVTbm9uc3RkLAogCUVTcGFsZXR0ZSB9OwogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQoKSkgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQoKSkgKi8KIHN0YXRpYyB2b2lkIHJlc2V0X3Rlcm1pbmFsKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGRvX2NsZWFyKQogewogCXZjLT52Y190b3AJCT0gMDsKQEAgLTE2ODUsNyArMTY4NSw3IEBACiAJICAgIGNzaV9KKHZjLCAyKTsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGRvX2Nvbl90cm9sKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGMpCiB7CiAJLyoKQEAgLTIxMTksNyArMjExOSw3IEBACiAJcmV0dXJuIGJpc2VhcmNoKHVjcywgZG91YmxlX3dpZHRoLCBBUlJBWV9TSVpFKGRvdWJsZV93aWR0aCkgLSAxKTsKIH0KIAotLyogYWNxdWlyZXMgY29uc29sZV9zZW0gKi8KKy8qIGFjcXVpcmVzIGNvbnNvbGVfbG9jayAqLwogc3RhdGljIGludCBkb19jb25fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAjaWZkZWYgVlRfQlVGX1ZSQU1fT05MWQpAQCAtMjE0NywxMSArMjE0NywxMSBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHZjID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2dDogYXJnaCwgZHJpdmVyX2RhdGEgaXMgTlVMTCAhXG4iKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIxNTksNyArMjE1OSw3IEBACiAJaWYgKCF2Y19jb25zX2FsbG9jYXRlZChjdXJyY29ucykpIHsKIAkgICAgLyogY291bGQgdGhpcyBoYXBwZW4/ICovCiAJCXByaW50a19vbmNlKCJjb25fd3JpdGU6IHR0eSAlZCBub3QgYWxsb2NhdGVkXG4iLCBjdXJyY29ucysxKTsKLQkgICAgcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCSAgICBjb25zb2xlX3VubG9jaygpOwogCSAgICByZXR1cm4gMDsKIAl9CiAKQEAgLTIzNzUsNyArMjM3NSw3IEBACiAJfQogCUZMVVNICiAJY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSgpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW5vdGlmeV91cGRhdGUodmMpOwogCXJldHVybiBuOwogI3VuZGVmIEZMVVNICkBAIC0yMzg4LDExICsyMzg4LDExIEBACiAgKiB1cyB0byBkbyB0aGUgc3dpdGNoZXMgYXN5bmNocm9ub3VzbHkgKG5lZWRlZCB3aGVuIHdlIHdhbnQKICAqIHRvIHN3aXRjaCBkdWUgdG8gYSBrZXlib2FyZCBpbnRlcnJ1cHQpLiAgU3luY2hyb25pemF0aW9uCiAgKiB3aXRoIG90aGVyIGNvbnNvbGUgY29kZSBhbmQgcHJldmVudGlvbiBvZiByZS1lbnRyYW5jeSBpcwotICogZW5zdXJlZCB3aXRoIGNvbnNvbGVfc2VtLgorICogZW5zdXJlZCB3aXRoIGNvbnNvbGVfbG9jay4KICAqLwogc3RhdGljIHZvaWQgY29uc29sZV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJaWYgKHdhbnRfY29uc29sZSA+PSAwKSB7CiAJCWlmICh3YW50X2NvbnNvbGUgIT0gZmdfY29uc29sZSAmJgpAQCAtMjQyMiw3ICsyNDIyLDcgQEAKIAl9CiAJbm90aWZ5X3VwZGF0ZSh2Y19jb25zW2ZnX2NvbnNvbGVdLmQpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIGludCBzZXRfY29uc29sZShpbnQgbnIpCkBAIC0yNjAzLDcgKzI2MDMsNyBAQAogICovCiAKIC8qCi0gKiBHZW5lcmFsbHkgYSBiaXQgcmFjeSB3aXRoIHJlc3BlY3QgdG8gY29uc29sZV9zZW0oKS4KKyAqIEdlbmVyYWxseSBhIGJpdCByYWN5IHdpdGggcmVzcGVjdCB0byBjb25zb2xlX2xvY2soKTsuCiAgKgogICogVGhlcmUgYXJlIHNvbWUgZnVuY3Rpb25zIHdoaWNoIGRvbid0IG5lZWQgaXQuCiAgKgpAQCAtMjYyOSwxNyArMjYyOSwxNyBAQAogCXN3aXRjaCAodHlwZSkKIAl7CiAJCWNhc2UgVElPQ0xfU0VUU0VMOgotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlyZXQgPSBzZXRfc2VsZWN0aW9uKChzdHJ1Y3QgdGlvY2xfc2VsZWN0aW9uIF9fdXNlciAqKShwKzEpLCB0dHkpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX1BBU1RFU0VMOgogCQkJcmV0ID0gcGFzdGVfc2VsZWN0aW9uKHR0eSk7CiAJCQlicmVhazsKIAkJY2FzZSBUSU9DTF9VTkJMQU5LU0NSRUVOOgotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQl1bmJsYW5rX3NjcmVlbigpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX1NFTExPQURMVVQ6CiAJCQlyZXQgPSBzZWxfbG9hZGx1dChwKTsKQEAgLTI2ODgsMTAgKzI2ODgsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX0JMQU5LU0NSRUVOOgkvKiB1bnRpbCBleHBsaWNpdGx5IHVuYmxhbmtlZCwgbm90IG9ubHkgcG9rZWQgKi8KLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJaWdub3JlX3Bva2UgPSAxOwogCQkJZG9fYmxhbmtfc2NyZWVuKDApOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX0JMQU5LRURTQ1JFRU46CiAJCQlyZXQgPSBjb25zb2xlX2JsYW5rZWQ7CkBAIC0yNzkwLDExICsyNzkwLDExIEBACiAJCXJldHVybjsKIAogCS8qIGlmIHdlIHJhY2Ugd2l0aCBjb25fY2xvc2UoKSwgdnQgbWF5IGJlIG51bGwgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICh2YykKIAkJc2V0X2N1cnNvcih2Yyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIC8qCkBAIC0yODA1LDcgKzI4MDUsNyBAQAogCXVuc2lnbmVkIGludCBjdXJyY29ucyA9IHR0eS0+aW5kZXg7CiAJaW50IHJldCA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHR0eS0+ZHJpdmVyX2RhdGEgPT0gTlVMTCkgewogCQlyZXQgPSB2Y19hbGxvY2F0ZShjdXJyY29ucyk7CiAJCWlmIChyZXQgPT0gMCkgewpAQCAtMjgxMyw3ICsyODEzLDcgQEAKIAogCQkJLyogU3RpbGwgYmVpbmcgZnJlZWQgKi8KIAkJCWlmICh2Yy0+cG9ydC50dHkpIHsKLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQkJfQogCQkJdHR5LT5kcml2ZXJfZGF0YSA9IHZjOwpAQCAtMjgyNywxMSArMjgyNywxMSBAQAogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyB8PSBJVVRGODsKIAkJCWVsc2UKIAkJCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgJj0gfklVVEY4OwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjg0NCw5ICsyODQ0LDkgQEAKIHsKIAlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCUJVR19PTih2YyA9PSBOVUxMKTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJdmMtPnBvcnQudHR5ID0gTlVMTDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl0dHlfc2h1dGRvd24odHR5KTsKIH0KIApAQCAtMjg5MywxMyArMjg5MywxMyBAQAogCXN0cnVjdCB2Y19kYXRhICp2YzsKIAl1bnNpZ25lZCBpbnQgY3VycmNvbnMgPSAwLCBpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJaWYgKGNvbnN3aXRjaHApCiAJCWRpc3BsYXlfZGVzYyA9IGNvbnN3aXRjaHAtPmNvbl9zdGFydHVwKCk7CiAJaWYgKCFkaXNwbGF5X2Rlc2MpIHsKIAkJZmdfY29uc29sZSA9IDA7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yOTQ2LDcgKzI5NDYsNyBAQAogCXByaW50YWJsZSA9IDE7CiAJcHJpbnRrKCJcbiIpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKICNpZmRlZiBDT05GSUdfVlRfQ09OU09MRQogCXJlZ2lzdGVyX2NvbnNvbGUoJnZ0X2NvbnNvbGVfZHJpdmVyKTsKQEAgLTI5OTQsNyArMjk5NCw3IEBACiAJaWYgKElTX0VSUih0dHkwZGV2KSkKIAkJdHR5MGRldiA9IE5VTEw7CiAJZWxzZQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUodHR5MGRldiwgJmRldl9hdHRyX2FjdGl2ZSk7CisJCVdBUk5fT04oZGV2aWNlX2NyZWF0ZV9maWxlKHR0eTBkZXYsICZkZXZfYXR0cl9hY3RpdmUpIDwgMCk7CiAKIAl2Y3NfaW5pdCgpOwogCkBAIC0zMDM3LDcgKzMwMzcsNyBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qIGNoZWNrIGlmIGRyaXZlciBpcyByZWdpc3RlcmVkICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05fRFJJVkVSOyBpKyspIHsKQEAgLTMxMjIsNyArMzEyMiw3IEBACiAKIAlyZXR2YWwgPSAwOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW1vZHVsZV9wdXQob3duZXIpOwogCXJldHVybiByZXR2YWw7CiB9OwpAQCAtMzE3MSw3ICszMTcxLDcgQEAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAkvKiBjaGVjayBpZiBkcml2ZXIgaXMgcmVnaXN0ZXJlZCBhbmQgaWYgaXQgaXMgdW5iaW5kYWJsZSAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OX0RSSVZFUjsgaSsrKSB7CkBAIC0zMTg1LDcgKzMxODUsNyBAQAogCX0KIAogCWlmIChyZXR2YWwpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTMyMDQsMTIgKzMyMDQsMTIgQEAKIAl9CiAKIAlpZiAocmV0dmFsKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZ290byBlcnI7CiAJfQogCiAJaWYgKCFjb25faXNfYm91bmQoY3N3KSkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMzIzOCw3ICszMjM4LDcgQEAKIAlpZiAoIWNvbl9pc19ib3VuZChjc3cpKQogCQljb25fZHJpdmVyLT5mbGFnICY9IH5DT05fRFJJVkVSX0ZMQUdfSU5JVDsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCS8qIGlnbm9yZSByZXR1cm4gdmFsdWUsIGJpbmRpbmcgc2hvdWxkIG5vdCBmYWlsICovCiAJYmluZF9jb25fZHJpdmVyKGRlZmNzdywgZmlyc3QsIGxhc3QsIGRlZmx0KTsKIGVycjoKQEAgLTM1MzgsMTQgKzM1MzgsMTQgQEAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTl9EUklWRVI7IGkrKykgewogCQljb25fZHJpdmVyID0gJnJlZ2lzdGVyZWRfY29uX2RyaXZlcltpXTsKIAogCQkvKiBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KIAkJaWYgKGNvbl9kcml2ZXItPmNvbiA9PSBjc3cpCi0JCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJcmV0dmFsID0gLUVCVVNZOwogCX0KIAogCWlmIChyZXR2YWwpCkBAIC0zNTkyLDcgKzM1OTIsNyBAQAogCX0KIAogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW1vZHVsZV9wdXQob3duZXIpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zNjEzLDcgKzM2MTMsNyBAQAogewogCWludCBpLCByZXR2YWwgPSAtRU5PREVWOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJLyogY2Fubm90IHVucmVnaXN0ZXIgYSBib3VuZCBkcml2ZXIgKi8KIAlpZiAoY29uX2lzX2JvdW5kKGNzdykpCkBAIC0zNjM5LDcgKzM2MzksNyBAQAogCQl9CiAJfQogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfY29uX2RyaXZlcik7CkBAIC0zNjU2LDcgKzM2NTYsMTIgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gcmVnaXN0ZXJfY29uX2RyaXZlcihjc3csIGZpcnN0LCBsYXN0KTsKLQorCS8qIGlmIHdlIGdldCBhbiBidXN5IGVycm9yIHdlIHN0aWxsIHdhbnQgdG8gYmluZCB0aGUgY29uc29sZSBkcml2ZXIKKwkgKiBhbmQgcmV0dXJuIHN1Y2Nlc3MsIGFzIHdlIG1heSBoYXZlIHVuYm91bmQgdGhlIGNvbnNvbGUgZHJpdmVyCisJwqAqIGJ1dCBub3QgdW5yZWdpc3RlcmVkIGl0LgorCSovCisJaWYgKGVyciA9PSAtRUJVU1kpCisJCWVyciA9IDA7CiAJaWYgKCFlcnIpCiAJCWJpbmRfY29uX2RyaXZlcihjc3csIGZpcnN0LCBsYXN0LCBkZWZsdCk7CiAKQEAgLTM5MzQsOSArMzkzOSw5IEBACiB7CiAJaW50IHJjOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJjID0gc2V0X2dldF9jbWFwIChhcmcsMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zOTQ1LDkgKzM5NTAsOSBAQAogewogCWludCByYzsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyYyA9IHNldF9nZXRfY21hcCAoYXJnLDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzk5NCwxMiArMzk5OSwxMiBAQAogCX0gZWxzZQogCQlmb250LmRhdGEgPSBOVUxMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2Yy0+dmNfc3ctPmNvbl9mb250X2dldCkKIAkJcmMgPSB2Yy0+dmNfc3ctPmNvbl9mb250X2dldCh2YywgJmZvbnQpOwogCWVsc2UKIAkJcmMgPSAtRU5PU1lTOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKHJjKQogCQlnb3RvIG91dDsKQEAgLTQwNzYsMTIgKzQwODEsMTIgQEAKIAlmb250LmRhdGEgPSBtZW1kdXBfdXNlcihvcC0+ZGF0YSwgc2l6ZSk7CiAJaWYgKElTX0VSUihmb250LmRhdGEpKQogCQlyZXR1cm4gUFRSX0VSUihmb250LmRhdGEpOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAodmMtPnZjX3N3LT5jb25fZm9udF9zZXQpCiAJCXJjID0gdmMtPnZjX3N3LT5jb25fZm9udF9zZXQodmMsICZmb250LCBvcC0+ZmxhZ3MpOwogCWVsc2UKIAkJcmMgPSAtRU5PU1lTOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWtmcmVlKGZvbnQuZGF0YSk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNDEwMywxMiArNDEwOCwxMiBAQAogCWVsc2UKIAkJbmFtZVtNQVhfRk9OVF9OQU1FIC0gMV0gPSAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2Yy0+dmNfc3ctPmNvbl9mb250X2RlZmF1bHQpCiAJCXJjID0gdmMtPnZjX3N3LT5jb25fZm9udF9kZWZhdWx0KHZjLCAmZm9udCwgcyk7CiAJZWxzZQogCQlyYyA9IC1FTk9TWVM7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJaWYgKCFyYykgewogCQlvcC0+d2lkdGggPSBmb250LndpZHRoOwogCQlvcC0+aGVpZ2h0ID0gZm9udC5oZWlnaHQ7CkBAIC00MTI0LDcgKzQxMjksNyBAQAogCWlmICh2Yy0+dmNfbW9kZSAhPSBLRF9URVhUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAoIXZjLT52Y19zdy0+Y29uX2ZvbnRfY29weSkKIAkJcmMgPSAtRU5PU1lTOwogCWVsc2UgaWYgKGNvbiA8IDAgfHwgIXZjX2NvbnNfYWxsb2NhdGVkKGNvbikpCkBAIC00MTMzLDcgKzQxMzgsNyBAQAogCQlyYyA9IDA7CiAJZWxzZQogCQlyYyA9IHZjLT52Y19zdy0+Y29uX2ZvbnRfY29weSh2YywgY29uKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMgYi9kcml2ZXJzL3R0eS92dC92dF9pb2N0bC5jCmluZGV4IDZiNjhhMGYuLjEyMzVlYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYwpAQCAtNjQ5LDEyICs2NDksMTIgQEAKIAkJLyoKIAkJICogZXhwbGljaXRseSBibGFuay91bmJsYW5rIHRoZSBzY3JlZW4gaWYgc3dpdGNoaW5nIG1vZGVzCiAJCSAqLwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpZiAoYXJnID09IEtEX1RFWFQpCiAJCQlkb191bmJsYW5rX3NjcmVlbigxKTsKIAkJZWxzZQogCQkJZG9fYmxhbmtfc2NyZWVuKDEpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBLREdFVE1PREU6CkBAIC04OTMsNyArODkzLDcgQEAKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQl2Yy0+dnRfbW9kZSA9IHRtcDsKIAkJLyogdGhlIGZyc2lnIGlzIGlnbm9yZWQsIHNvIHdlIHNldCBpdCB0byAwICovCiAJCXZjLT52dF9tb2RlLmZyc2lnID0gMDsKQEAgLTkwMSw3ICs5MDEsNyBAQAogCQl2Yy0+dnRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CiAJCS8qIG5vIHN3aXRjaCBpcyByZXF1aXJlZCAtLSBzYXdAc2hhZGUubXN1LnJ1ICovCiAJCXZjLT52dF9uZXd2dCA9IC0xOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTEwLDkgKzkxMCw5IEBACiAJCXN0cnVjdCB2dF9tb2RlIHRtcDsKIAkJaW50IHJjOwogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCW1lbWNweSgmdG1wLCAmdmMtPnZ0X21vZGUsIHNpemVvZihzdHJ1Y3QgdnRfbW9kZSkpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAkJcmMgPSBjb3B5X3RvX3VzZXIodXAsICZ0bXAsIHNpemVvZihzdHJ1Y3QgdnRfbW9kZSkpOwogCQlpZiAocmMpCkBAIC05NjUsOSArOTY1LDkgQEAKIAkJCXJldCA9ICAtRU5YSU87CiAJCWVsc2UgewogCQkJYXJnLS07Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXJldCA9IHZjX2FsbG9jYXRlKGFyZyk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJCXNldF9jb25zb2xlKGFyZyk7CkBAIC05OTAsNyArOTkwLDcgQEAKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZSB7CiAJCQl2c2EuY29uc29sZS0tOwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlyZXQgPSB2Y19hbGxvY2F0ZSh2c2EuY29uc29sZSk7CiAJCQlpZiAocmV0ID09IDApIHsKIAkJCQlzdHJ1Y3QgdmNfZGF0YSAqbnZjOwpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAkJCQlwdXRfcGlkKG52Yy0+dnRfcGlkKTsKIAkJCQludmMtPnZ0X3BpZCA9IGdldF9waWQodGFza19waWQoY3VycmVudCkpOwogCQkJfQotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCQkvKiBDb21tZW5jZSBzd2l0Y2ggYW5kIGxvY2sgKi8KQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJCS8qCiAJCSAqIFN3aXRjaGluZy1mcm9tIHJlc3BvbnNlCiAJCSAqLwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpZiAodmMtPnZ0X25ld3Z0ID49IDApIHsKIAkJCWlmIChhcmcgPT0gMCkKIAkJCQkvKgpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAkJCQl2Yy0+dnRfbmV3dnQgPSAtMTsKIAkJCQlyZXQgPSB2Y19hbGxvY2F0ZShuZXd2dCk7CiAJCQkJaWYgKHJldCkgewotCQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKgpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkJCWlmIChhcmcgIT0gVlRfQUNLQUNRKQogCQkJCXJldCA9IC1FSU5WQUw7CiAJCX0KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlicmVhazsKIAogCSAvKgpAQCAtMTA5NiwyMCArMTA5NiwyMCBAQAogCQl9CiAJCWlmIChhcmcgPT0gMCkgewogCQkgICAgLyogZGVhbGxvY2F0ZSBhbGwgdW51c2VkIGNvbnNvbGVzLCBidXQgbGVhdmUgMCAqLwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlmb3IgKGk9MTsgaTxNQVhfTlJfQ09OU09MRVM7IGkrKykKIAkJCQlpZiAoISBWVF9CVVNZKGkpKQogCQkJCQl2Y19kZWFsbG9jYXRlKGkpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGRlYWxsb2NhdGUgYSBzaW5nbGUgY29uc29sZSwgaWYgcG9zc2libGUgKi8KIAkJCWFyZy0tOwogCQkJaWYgKFZUX0JVU1koYXJnKSkKIAkJCQlyZXQgPSAtRUJVU1k7CiAJCQllbHNlIGlmIChhcmcpIHsJCQkgICAgICAvKiBsZWF2ZSAwICovCi0JCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJCWNvbnNvbGVfbG9jaygpOwogCQkJCXZjX2RlYWxsb2NhdGUoYXJnKTsKLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCX0KIAkJfQogCQlicmVhazsKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJCSAgICBnZXRfdXNlcihjYywgJnZ0c2l6ZXMtPnZfY29scykpCiAJCQlyZXQgPSAtRUZBVUxUOwogCQllbHNlIHsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CiAJCQkJdmMgPSB2Y19jb25zW2ldLmQ7CiAKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJCQkJCXZjX3Jlc2l6ZSh2Y19jb25zW2ldLmQsIGNjLCBsbCk7CiAJCQkJfQogCQkJfQotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMTg3LDE0ICsxMTg3LDE0IEBACiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OU09MRVM7IGkrKykgewogCQkJaWYgKCF2Y19jb25zW2ldLmQpCiAJCQkJY29udGludWU7Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCWlmICh2bGluKQogCQkJCXZjX2NvbnNbaV0uZC0+dmNfc2Nhbl9saW5lcyA9IHZsaW47CiAJCQlpZiAoY2xpbikKIAkJCQl2Y19jb25zW2ldLmQtPnZjX2ZvbnQuaGVpZ2h0ID0gY2xpbjsKIAkJCXZjX2NvbnNbaV0uZC0+dmNfcmVzaXplX3VzZXIgPSAxOwogCQkJdmNfcmVzaXplKHZjX2NvbnNbaV0uZCwgY2MsIGxsKTsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAlzdHJ1Y3QgdmNfZGF0YSAqdmM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2YyA9IHZjX2Nvbi0+ZDsKIAlpZiAodmMpIHsKIAkJdHR5ID0gdmMtPnBvcnQudHR5OwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAKIAkJCV9fZG9fU0FLKHR0eSk7CiAJCXJlc2V0X3ZjKHZjKTsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xNzM3LDEwICsxNzM3LDEwIEBACiB7CiAJaW50IHByZXY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJLyogR3JhcGhpY3MgbW9kZSAtIHVwIHRvIFggKi8KIAlpZiAoZGlzYWJsZV92dF9zd2l0Y2gpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAJcHJldiA9IGZnX2NvbnNvbGU7CkBAIC0xNzQ4LDcgKzE3NDgsNyBAQAogCWlmIChhbGxvYyAmJiB2Y19hbGxvY2F0ZSh2dCkpIHsKIAkJLyogd2UgY2FuJ3QgaGF2ZSBhIGZyZWUgVkMgZm9yIG5vdy4gVG9vIGJhZCwKIAkJICogd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHRoZSBzY3JlZW4gZm9yIG5vdy4gKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKQEAgLTE3NTgsMTAgKzE3NTgsMTAgQEAKIAkJICogTGV0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGtub3cgc28gaXQgY2FuIGRlY2lkZQogCQkgKiB3aGF0IHRvIGRvLgogCQkgKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJdHR5X2xvY2soKTsKIAlpZiAodnRfd2FpdGFjdGl2ZSh2dCArIDEpKSB7CiAJCXByX2RlYnVnKCJTdXNwZW5kOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOwpAQCAtMTc4MSw4ICsxNzgxLDggQEAKICAqLwogdm9pZCBwbV9zZXRfdnRfc3dpdGNoKGludCBkb19zd2l0Y2gpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWRpc2FibGVfdnRfc3dpdGNoID0gIWRvX3N3aXRjaDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0wocG1fc2V0X3Z0X3N3aXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggZDZlZGU5OC4uNGFiNDlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTYwNyw2ICsxNjA3LDcgQEAKIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMTU0KSwgfSwgLyogTm9raWEgNTgwMCBYcHJlc3NNdXNpYyAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDA0Y2UpLCB9LCAvKiBOb2tpYSBFOTAgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMWQ0KSwgfSwgLyogTm9raWEgRTU1ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMwMiksIH0sIC8qIE5va2lhIE44ICovCiAJeyBTQU1TVU5HX1BDU1VJVEVfQUNNX0lORk8oMHg2NjUxKSwgfSwgLyogU2Ftc3VuZyBHVGk4NTEwIChJTk5PVjgpICovCiAKIAkvKiBOT1RFOiBub24tTm9raWEgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUy4uLiBOT1QgYSBtb2RlbSEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwppbmRleCA2ZWU0NDUxLi40NzA4NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJZ290byBvdXRucDsKIAl9CiAKLQlpZiAoIWZpbGUtPmZfZmxhZ3MgJiYgT19OT05CTE9DSykKKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVzYy0+d2FpdCwgIXRlc3RfYml0KFdETV9JTl9VU0UsCiAJCQkJCQkJCSZkZXNjLT5mbGFncykpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCA5ZGEyNTA1Li5kZjUwMmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0xOTIsMTIgKzE5MiwxMiBAQAogCWVwX2Rldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAllcF9kZXYtPmRldi5yZWxlYXNlID0gZXBfZGV2aWNlX3JlbGVhc2U7CiAJZGV2X3NldF9uYW1lKCZlcF9kZXYtPmRldiwgImVwXyUwMngiLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmZXBfZGV2LT5kZXYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAllbmRwb2ludC0+ZXBfZGV2ID0gZXBfZGV2OwogCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggYjU1ZDQ2MC4uZjcxZThlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTQwNSw3ICs0MDUsMTIgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0Jc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CisJLyogSWYgTVNJLVggaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB3aWxsIGhhdmUgc3luY2hyb25pemVkIGFsbCB2ZWN0b3JzCisJICogaW4gcGNpX3N1c3BlbmQoKS4gSWYgTVNJIG9yIGxlZ2FjeSBQQ0kgaXMgZW5hYmxlZCwgdGhhdCB3aWxsIGJlCisJICogc3luY2hyb25pemVkIGhlcmUuCisJICovCisJaWYgKCFoY2QtPm1zaXhfZW5hYmxlZCkKKwkJc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CiAKIAkvKiBEb3duc3RyZWFtIHBvcnRzIGZyb20gdGhpcyByb290IGh1YiBzaG91bGQgYWxyZWFkeSBiZSBxdWllc2NlZCwgc28KIAkgKiB0aGVyZSB3aWxsIGJlIG5vIERNQSBhY3Rpdml0eS4gIE5vdyB3ZSBjYW4gc2h1dCBkb3duIHRoZSB1cHN0cmVhbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggNmE5NTAxNy4uZTkzNWY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0xOTU1LDcgKzE5NTUsNiBAQAogCiAJZGV2X2RiZygmcmhkZXYtPmRldiwgInVzYiAlcyVzXG4iLAogCQkJKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8gPyAiYXV0by0iIDogIiIpLCAicmVzdW1lIik7Ci0JY2xlYXJfYml0KEhDRF9GTEFHX1dBS0VVUF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJaWYgKCFoY2QtPmRyaXZlci0+YnVzX3Jlc3VtZSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUlVOTklORykKQEAgLTE5NjMsNiArMTk2Miw3IEBACiAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CiAJc3RhdHVzID0gaGNkLT5kcml2ZXItPmJ1c19yZXN1bWUoaGNkKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfV0FLRVVQX1BFTkRJTkcsICZoY2QtPmZsYWdzKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KIAkJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGI5OGVmYWUuLmQwNDFjNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNjc2LDYgKzY3Niw4IEBACiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmV0OwogCWludCBwb3J0MTsKIAlpbnQgc3RhdHVzOwogCWJvb2wgbmVlZF9kZWJvdW5jZV9kZWxheSA9IGZhbHNlOwpAQCAtNzE0LDYgKzcxNiwyNSBAQAogCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSgKIAkJCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKIAkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIGlmICh0eXBlID09IEhVQl9SRVNFVF9SRVNVTUUpIHsKKwkJCS8qIFRoZSBpbnRlcm5hbCBob3N0IGNvbnRyb2xsZXIgc3RhdGUgZm9yIHRoZSBodWIgZGV2aWNlCisJCQkgKiBtYXkgYmUgZ29uZSBhZnRlciBhIGhvc3QgcG93ZXIgbG9zcyBvbiBzeXN0ZW0gcmVzdW1lLgorCQkJICogVXBkYXRlIHRoZSBkZXZpY2UncyBpbmZvIHNvIHRoZSBIVyBrbm93cyBpdCdzIGEgaHViLgorCQkJICovCisJCQloY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJCQlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKSB7CisJCQkJcmV0ID0gaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKGhjZCwgaGRldiwKKwkJCQkJCSZodWItPnR0LCBHRlBfTk9JTyk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZGV2X2VycihodWItPmludGZkZXYsICJIb3N0IG5vdCAiCisJCQkJCQkJImFjY2VwdGluZyBodWIgaW5mbyAiCisJCQkJCQkJInVwZGF0ZS5cbiIpOworCQkJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgIkxTL0ZTIGRldmljZXMgIgorCQkJCQkJCSJhbmQgaHVicyBtYXkgbm90IHdvcmsgIgorCQkJCQkJCSJ1bmRlciB0aGlzIGh1YlxuLiIpOworCQkJCX0KKwkJCX0KKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQl9IGVsc2UgewogCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCX0KQEAgLTI3MzIsNiArMjc1MywxMSBAQAogCQl1ZGV2LT50dHBvcnQgPSBoZGV2LT50dHBvcnQ7CiAJfSBlbHNlIGlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSAogCQkJJiYgaGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJaWYgKCFodWItPnR0Lmh1YikgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAicGFyZW50IGh1YiBoYXMgbm8gVFRcbiIpOworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbDsKKwkJfQogCQl1ZGV2LT50dCA9ICZodWItPnR0OwogCQl1ZGV2LT50dHBvcnQgPSBwb3J0MTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDFkYzk3MzkuLmQ1MDA5OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC01MDksNyArNTA5LDcgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiBjb25maWcgVVNCX0dBREdFVF9FRzIwVAotCWJvb2xlYW4gIkludGVsIEVHMjBUKFRvcGNsaWZmKSBVU0IgRGV2aWNlIGNvbnRyb2xsZXIiCisJYm9vbGVhbiAiSW50ZWwgRUcyMFQgUENIL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0ggVURDIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscApAQCAtNTI1LDYgKzUyNSwxMSBAQAogCSAgVGhpcyBkcml2ZXIgZG9zZSBub3Qgc3VwcG9ydCBpbnRlcnJ1cHQgdHJhbnNmZXIgb3IgaXNvY2hyb25vdXMKIAkgIHRyYW5zZmVyIG1vZGVzLgogCisJICBUaGlzIGRyaXZlciBhbHNvIGNhbiBiZSB1c2VkIGZvciBPS0kgU0VNSUNPTkRVQ1RPUidzIE1MNzIxMyB3aGljaCBpcworCSAgZm9yIElWSShJbi1WZWhpY2xlIEluZm90YWlubWVudCkgdXNlLgorCSAgTUw3MjEzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjEzIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILgorCiBjb25maWcgVVNCX0VHMjBUCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVRfRUcyMFQKQEAgLTU0MSw2ICs1NDYsOCBAQAogCSAgY2kxM3h4eF91ZGMgY29yZS4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImNpMTN4eHhfbXNtIiBhbmQgZm9yY2UgYWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IDMxNjU2YTIuLmExYzY3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC03NiwxMCArNzYsMjEgQEAKIAogLyogY29udHJvbCBlbmRwb2ludCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotY3RybF9lbmRwdF9kZXNjID0geworY3RybF9lbmRwdF9vdXRfZGVzYyA9IHsKIAkuYkxlbmd0aCAgICAgICAgID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAorCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyAgICA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplICA9IGNwdV90b19sZTE2KENUUkxfUEFZTE9BRF9NQVgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorY3RybF9lbmRwdF9pbl9kZXNjID0geworCS5iTGVuZ3RoICAgICAgICAgPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgICAgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAogCS53TWF4UGFja2V0U2l6ZSAgPSBjcHVfdG9fbGUxNihDVFJMX1BBWUxPQURfTUFYKSwKIH07CkBAIC0yNjUsMTAgKzI3NiwxMCBAQAogCWh3X2Jhbmsuc2l6ZSAvPSBzaXplb2YodTMyKTsKIAogCXJlZyA9IGh3X2FyZWFkKEFCU19EQ0NQQVJBTVMsIERDQ1BBUkFNU19ERU4pID4+IGZmc19ucihEQ0NQQVJBTVNfREVOKTsKLQlpZiAocmVnID09IDAgfHwgcmVnID4gRU5EUFRfTUFYKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlod19lcF9tYXggPSByZWcgKiAyOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLwogCi0JaHdfZXBfbWF4ID0gcmVnOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLworCWlmIChod19lcF9tYXggPT0gMCB8fCBod19lcF9tYXggPiBFTkRQVF9NQVgpCisJCXJldHVybiAtRU5PREVWOwogCiAJLyogc2V0dXAgbG9jayBtb2RlID8gKi8KIApAQCAtMTE5NywxNiArMTIwOCwxNyBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykgewotCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4LzI7IGkrKykgeworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwUnggPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwVHggPSAmdWRjLT5jaTEzeHh4X2VwW2kgKyBod19lcF9tYXgvMl07CiAJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCiAJCQkgICAgICAgIkVQPSUwMmk6IFJYPSUwOFggVFg9JTA4WFxuIiwKLQkJCSAgICAgICBpLCAodTMyKW1FcC0+cWhbUlhdLmRtYSwgKHUzMiltRXAtPnFoW1RYXS5kbWEpOworCQkJICAgICAgIGksICh1MzIpbUVwUngtPnFoLmRtYSwgKHUzMiltRXBUeC0+cWguZG1hKTsKIAkJZm9yIChqID0gMDsgaiA8IChzaXplb2Yoc3RydWN0IGNpMTN4eHhfcWgpL3NpemVvZih1MzIpKTsgaisrKSB7CiAJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAogCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFggICAgJTA4WFxuIiwgaiwKLQkJCQkgICAgICAgKigodTMyICopbUVwLT5xaFtSWF0ucHRyICsgaiksCi0JCQkJICAgICAgICooKHUzMiAqKW1FcC0+cWhbVFhdLnB0ciArIGopKTsKKwkJCQkgICAgICAgKigodTMyICopbUVwUngtPnFoLnB0ciArIGopLAorCQkJCSAgICAgICAqKCh1MzIgKiltRXBUeC0+cWgucHRyICsgaikpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CkBAIC0xMjkzLDcgKzEzMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAgICpwdHIgPSBOVUxMOwogCXN0cnVjdCBjaTEzeHh4X3JlcSAqcmVxID0gTlVMTDsKLQl1bnNpZ25lZCBpLCBqLCBrLCBuID0gMCwgcVNpemUgPSBzaXplb2Yoc3RydWN0IGNpMTN4eHhfdGQpL3NpemVvZih1MzIpOworCXVuc2lnbmVkIGksIGosIG4gPSAwLCBxU2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2kxM3h4eF90ZCkvc2l6ZW9mKHUzMik7CiAKIAlkYmdfdHJhY2UoIlslc10gJXBcbiIsIF9fZnVuY19fLCBidWYpOwogCWlmIChhdHRyID09IE5VTEwgfHwgYnVmID09IE5VTEwpIHsKQEAgLTEzMDMsMjIgKzEzMTUsMjAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykKLQkJZm9yIChrID0gUlg7IGsgPD0gVFg7IGsrKykKLQkJCWxpc3RfZm9yX2VhY2gocHRyLCAmdWRjLT5jaTEzeHh4X2VwW2ldLnFoW2tdLnF1ZXVlKQotCQkJewotCQkJCXJlcSA9IGxpc3RfZW50cnkocHRyLAotCQkJCQkJIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOworCQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnVkYy0+Y2kxM3h4eF9lcFtpXS5xaC5xdWV1ZSkKKwkJeworCQkJcmVxID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCisJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAorCQkJCQkiRVA9JTAyaTogVEQ9JTA4WCAlc1xuIiwKKwkJCQkJaSAlIGh3X2VwX21heC8yLCAodTMyKXJlcS0+ZG1hLAorCQkJCQkoKGkgPCBod19lcF9tYXgvMikgPyAiUlgiIDogIlRYIikpOworCisJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKIAkJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAotCQkJCQkgICAgICAgIkVQPSUwMmk6IFREPSUwOFggJXNcbiIsCi0JCQkJCSAgICAgICBpLCAodTMyKXJlcS0+ZG1hLAotCQkJCQkgICAgICAgKChrID09IFJYKSA/ICJSWCIgOiAiVFgiKSk7Ci0KLQkJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKLQkJCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKLQkJCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFhcbiIsIGosCi0JCQkJCQkgICAgICAgKigodTMyICopcmVxLT5wdHIgKyBqKSk7Ci0JCQl9CisJCQkJCQkiICUwNFg6ICAgICUwOFhcbiIsIGosCisJCQkJCQkqKCh1MzIgKilyZXEtPnB0ciArIGopKTsKKwkJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbjsKQEAgLTE0NjcsMTIgKzE0NzcsMTIgQEAKIAkgKiAgQXQgdGhpcyBwb2ludCBpdCdzIGd1YXJhbnRlZWQgZXhjbHVzaXZlIGFjY2VzcyB0byBxaGVhZAogCSAqICAoZW5kcHQgaXMgbm90IHByaW1lZCkgc28gaXQncyBubyBuZWVkIHRvIHVzZSB0cmlwd2lyZQogCSAqLwotCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCAgID0gbVJlcS0+ZG1hOyAgICAvKiBURVJNSU5BVEUgPSAwICovCi0JbUVwLT5xaFttRXAtPmRpcl0ucHRyLT50ZC50b2tlbiAmPSB+VERfU1RBVFVTOyAgIC8qIGNsZWFyIHN0YXR1cyAqLworCW1FcC0+cWgucHRyLT50ZC5uZXh0ICAgPSBtUmVxLT5kbWE7ICAgIC8qIFRFUk1JTkFURSA9IDAgKi8KKwltRXAtPnFoLnB0ci0+dGQudG9rZW4gJj0gflREX1NUQVRVUzsgICAvKiBjbGVhciBzdGF0dXMgKi8KIAlpZiAobVJlcS0+cmVxLnplcm8gPT0gMCkKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgfD0gIFFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfWkxUOwogCWVsc2UKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgJj0gflFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCiAJd21iKCk7ICAgLyogc3luY2hyb25pemUgYmVmb3JlIGVwIHByaW1lICovCiAKQEAgLTE1NDIsMTEgKzE1NTIsMTEgQEAKIAogCWh3X2VwX2ZsdXNoKG1FcC0+bnVtLCBtRXAtPmRpcik7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAogCQkvKiBwb3Agb2xkZXN0IHJlcXVlc3QgKi8KIAkJc3RydWN0IGNpMTN4eHhfcmVxICptUmVxID0gXAotCQkJbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCQkJbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkJICAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAJCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIAkJbVJlcS0+cmVxLnN0YXR1cyA9IC1FU0hVVERPV047CkBAIC0xNTcxLDggKzE1ODEsNiBAQAogewogCXN0cnVjdCB1c2JfZXAgKmVwOwogCXN0cnVjdCBjaTEzeHh4ICAgICp1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgY2kxM3h4eCwgZ2FkZ2V0KTsKLQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gY29udGFpbmVyX29mKGdhZGdldC0+ZXAwLAotCQkJCQkgICAgICBzdHJ1Y3QgY2kxM3h4eF9lcCwgZXApOwogCiAJdHJhY2UoIiVwIiwgZ2FkZ2V0KTsKIApAQCAtMTU4Myw3ICsxNTkxLDggQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAJfQotCXVzYl9lcF9maWZvX2ZsdXNoKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZmlmb19mbHVzaCgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9maWZvX2ZsdXNoKCZ1ZGMtPmVwMGluLmVwKTsKIAogCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KGdhZGdldCk7CiAKQEAgLTE1OTEsMTEgKzE2MDAsMTIgQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZGlzYWJsZShlcCk7CiAJfQotCXVzYl9lcF9kaXNhYmxlKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMGluLmVwKTsKIAotCWlmIChtRXAtPnN0YXR1cyAhPSBOVUxMKSB7Ci0JCXVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LT5lcDAsIG1FcC0+c3RhdHVzKTsKLQkJbUVwLT5zdGF0dXMgPSBOVUxMOworCWlmICh1ZGMtPnN0YXR1cyAhPSBOVUxMKSB7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoJnVkYy0+ZXAwaW4uZXAsIHVkYy0+c3RhdHVzKTsKKwkJdWRjLT5zdGF0dXMgPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTYxNCw3ICsxNjI0LDYgQEAKIF9fcmVsZWFzZXModWRjLT5sb2NrKQogX19hY3F1aXJlcyh1ZGMtPmxvY2spCiB7Ci0Jc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbMF07CiAJaW50IHJldHZhbDsKIAogCXRyYWNlKCIlcCIsIHVkYyk7CkBAIC0xNjM1LDExICsxNjQ0LDE1IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmbUVwLT5lcCwgJmN0cmxfZW5kcHRfZGVzYyk7CisJcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmdWRjLT5lcDBvdXQuZXAsICZjdHJsX2VuZHB0X291dF9kZXNjKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMGluLmVwLCAmY3RybF9lbmRwdF9pbl9kZXNjKTsKIAlpZiAoIXJldHZhbCkgewotCQltRXAtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZtRXAtPmVwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKG1FcC0+c3RhdHVzID09IE5VTEwpIHsKLQkJCXVzYl9lcF9kaXNhYmxlKCZtRXAtPmVwKTsKKwkJdWRjLT5zdGF0dXMgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCgmdWRjLT5lcDBpbi5lcCwgR0ZQX0FUT01JQyk7CisJCWlmICh1ZGMtPnN0YXR1cyA9PSBOVUxMKSB7CisJCQl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJfQogCX0KQEAgLTE2NzIsMTYgKzE2ODUsMTcgQEAKIAogLyoqCiAgKiBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZTogZ2V0X3N0YXR1cyByZXF1ZXN0IHJlc3BvbnNlCi0gKiBAZXA6ICAgIGVuZHBvaW50CisgKiBAdWRjOiB1ZGMgc3RydWN0CiAgKiBAc2V0dXA6IHNldHVwIHJlcXVlc3QgcGFja2V0CiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwLAorc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eCAqdWRjLAogCQkJCSAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQogX19yZWxlYXNlcyhtRXAtPmxvY2spCiBfX2FjcXVpcmVzKG1FcC0+bG9jaykKIHsKKwlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+ZXAwaW47CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUM7CiAJaW50IGRpciwgbnVtLCByZXR2YWw7CkBAIC0xNzM2LDI3ICsxNzUwLDIzIEBACiAKIC8qKgogICogaXNyX3NldHVwX3N0YXR1c19waGFzZTogcXVldWVzIHRoZSBzdGF0dXMgcGhhc2Ugb2YgYSBzZXR1cCB0cmFuc2F0aW9uCi0gKiBAbUVwOiBlbmRwb2ludAorICogQHVkYzogdWRjIHN0cnVjdAogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaXNyX3NldHVwX3N0YXR1c19waGFzZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwKQorc3RhdGljIGludCBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHN0cnVjdCBjaTEzeHh4ICp1ZGMpCiBfX3JlbGVhc2VzKG1FcC0+bG9jaykKIF9fYWNxdWlyZXMobUVwLT5sb2NrKQogewogCWludCByZXR2YWw7CisJc3RydWN0IGNpMTN4eHhfZXAgKm1FcDsKIAotCXRyYWNlKCIlcCIsIG1FcCk7CisJdHJhY2UoIiVwIiwgdWRjKTsKIAotCS8qIG1FcCBpcyBhbHdheXMgdmFsaWQgJiBjb25maWd1cmVkICovCi0KLQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCW1FcC0+ZGlyID0gKG1FcC0+ZGlyID09IFRYKSA/IFJYIDogVFg7Ci0KLQltRXAtPnN0YXR1cy0+bm9faW50ZXJydXB0ID0gMTsKKwltRXAgPSAodWRjLT5lcDBfZGlyID09IFRYKSA/ICZ1ZGMtPmVwMG91dCA6ICZ1ZGMtPmVwMGluOwogCiAJc3Bpbl91bmxvY2sobUVwLT5sb2NrKTsKLQlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIG1FcC0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIHVkYy0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKIAlzcGluX2xvY2sobUVwLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xNzc4LDExICsxNzg4LDExIEBACiAKIAl0cmFjZSgiJXAiLCBtRXApOwogCi0JaWYgKGxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwlpZiAobGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogcG9wIG9sZGVzdCByZXF1ZXN0ICovCi0JbVJlcSA9IGxpc3RfZW50cnkobUVwLT5xaFttRXAtPmRpcl0ucXVldWUubmV4dCwKKwltUmVxID0gbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIApAQCAtMTc5NCwxMCArMTgwNCwxMCBAQAogCiAJZGJnX2RvbmUoX3VzYl9hZGRyKG1FcCksIG1SZXEtPnB0ci0+dG9rZW4sIHJldHZhbCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAkJc3RydWN0IGNpMTN4eHhfcmVxKiBtUmVxRW5xOwogCi0JCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCisJCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWgucXVldWUubmV4dCwKIAkJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCQlfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXFFbnEpOwogCX0KQEAgLTE4MzYsMTYgKzE4NDYsMTQgQEAKIAkJaW50IHR5cGUsIG51bSwgZXJyID0gLUVJTlZBTDsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7CiAKLQogCQlpZiAobUVwLT5kZXNjID09IE5VTEwpCiAJCQljb250aW51ZTsgICAvKiBub3QgY29uZmlndXJlZCAqLwogCi0JCWlmICgobUVwLT5kaXIgPT0gUlggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSkpIHx8Ci0JCSAgICAobUVwLT5kaXIgPT0gVFggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSArIDE2KSkpIHsKKwkJaWYgKGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlKGkpKSB7CiAJCQllcnIgPSBpc3JfdHJfY29tcGxldGVfbG93KG1FcCk7CiAJCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKIAkJCQlpZiAoZXJyID4gMCkgICAvKiBuZWVkcyBzdGF0dXMgcGhhc2UgKi8KLQkJCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQkJaWYgKGVyciA8IDApIHsKIAkJCQkJZGJnX2V2ZW50KF91c2JfYWRkcihtRXApLAogCQkJCQkJICAiRVJST1IiLCBlcnIpOwpAQCAtMTg2NiwxNSArMTg3NCwyMiBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBkYXRhIGFuZCBoYW5kc2hha2UgdHJhbnNhY3Rpb25zIG9mIHByZXZpb3VzCisJCSAqIHNldHVwIHBhY2tldC4KKwkJICovCisJCV9lcF9udWtlKCZ1ZGMtPmVwMG91dCk7CisJCV9lcF9udWtlKCZ1ZGMtPmVwMGluKTsKKwogCQkvKiByZWFkX3NldHVwX3BhY2tldCAqLwogCQlkbyB7CiAJCQlod190ZXN0X2FuZF9zZXRfc2V0dXBfZ3VhcmQoKTsKLQkJCW1lbWNweSgmcmVxLCAmbUVwLT5xaFtSWF0ucHRyLT5zZXR1cCwgc2l6ZW9mKHJlcSkpOworCQkJbWVtY3B5KCZyZXEsICZtRXAtPnFoLnB0ci0+c2V0dXAsIHNpemVvZihyZXEpKTsKIAkJfSB3aGlsZSAoIWh3X3Rlc3RfYW5kX2NsZWFyX3NldHVwX2d1YXJkKCkpOwogCiAJCXR5cGUgPSByZXEuYlJlcXVlc3RUeXBlOwogCi0JCW1FcC0+ZGlyID0gKHR5cGUgJiBVU0JfRElSX0lOKSA/IFRYIDogUlg7CisJCXVkYy0+ZXAwX2RpciA9ICh0eXBlICYgVVNCX0RJUl9JTikgPyBUWCA6IFJYOwogCiAJCWRiZ19zZXR1cChfdXNiX2FkZHIobUVwKSwgJnJlcSk7CiAKQEAgLTE4OTUsNyArMTkxMCw3IEBACiAJCQkJaWYgKGVycikKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfREVWSUNFKSAgICYmCkBAIC0xOTA1LDcgKzE5MjAsNyBAQAogCQkJaWYgKGxlMTZfdG9fY3B1KHJlcS53TGVuZ3RoKSAhPSAyIHx8CiAJCQkgICAgbGUxNl90b19jcHUocmVxLndWYWx1ZSkgICE9IDApCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShtRXAsICZyZXEpOworCQkJZXJyID0gaXNyX2dldF9zdGF0dXNfcmVzcG9uc2UodWRjLCAmcmVxKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0RFVklDRSkpCkBAIC0xOTE2LDcgKzE5MzEsNyBAQAogCQkJZXJyID0gaHdfdXNiX3NldF9hZGRyZXNzKCh1OClsZTE2X3RvX2NwdShyZXEud1ZhbHVlKSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwotCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKIAkJCWlmICh0eXBlICE9IChVU0JfRElSX09VVHxVU0JfUkVDSVBfRU5EUE9JTlQpICYmCkBAIC0xOTMyLDEyICsxOTQ3LDEyIEBACiAJCQlzcGluX2xvY2sodWRjLT5sb2NrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIGRlbGVnYXRlOgogCQkJaWYgKHJlcS53TGVuZ3RoID09IDApICAgLyogbm8gZGF0YSBwaGFzZSAqLwotCQkJCW1FcC0+ZGlyID0gVFg7CisJCQkJdWRjLT5lcDBfZGlyID0gVFg7CiAKIAkJCXNwaW5fdW5sb2NrKHVkYy0+bG9jayk7CiAJCQllcnIgPSB1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LCAmcmVxKTsKQEAgLTE5NjgsNyArMTk4Myw3IEBACiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQogewogCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSBjb250YWluZXJfb2YoZXAsIHN0cnVjdCBjaTEzeHh4X2VwLCBlcCk7Ci0JaW50IGRpcmVjdGlvbiwgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdHJhY2UoIiVwLCAlcCIsIGVwLCBkZXNjKTsKQEAgLTE5ODIsNyArMTk5Nyw3IEBACiAKIAltRXAtPmRlc2MgPSBkZXNjOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkKIAkJd2FybigiZW5hYmxpbmcgYSBub24tZW1wdHkgZW5kcG9pbnQhIik7CiAKIAltRXAtPmRpciAgPSB1c2JfZW5kcG9pbnRfZGlyX2luKGRlc2MpID8gVFggOiBSWDsKQEAgLTE5OTEsMjkgKzIwMDYsMjIgQEAKIAogCW1FcC0+ZXAubWF4cGFja2V0ID0gX19jb25zdGFudF9sZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CiAKLQlkaXJlY3Rpb24gPSBtRXAtPmRpcjsKLQlkbyB7Ci0JCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOworCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwID0gMDsKKwltRXAtPnFoLnB0ci0+Y2FwID0gMDsKIAotCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCB8PSAgUUhfSU9TOwotCQllbHNlIGlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKLQkJCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwICY9IH5RSF9NVUxUOwotCQllbHNlCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCAmPSB+UUhfWkxUOworCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfSU9TOworCWVsc2UgaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQltRXAtPnFoLnB0ci0+Y2FwICY9IH5RSF9NVUxUOworCWVsc2UKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwIHw9Ci0JCQkobUVwLT5lcC5tYXhwYWNrZXQgPDwgZmZzX25yKFFIX01BWF9QS1QpKSAmIFFIX01BWF9QS1Q7Ci0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCB8PSBURF9URVJNSU5BVEU7ICAgLyogbmVlZGVkPyAqLworCW1FcC0+cWgucHRyLT5jYXAgfD0KKwkJKG1FcC0+ZXAubWF4cGFja2V0IDw8IGZmc19ucihRSF9NQVhfUEtUKSkgJiBRSF9NQVhfUEtUOworCW1FcC0+cWgucHRyLT50ZC5uZXh0IHw9IFREX1RFUk1JTkFURTsgICAvKiBuZWVkZWQ/ICovCiAKLQkJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7Ci0KLQkJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQotCQkJbUVwLT5kaXIgPSAobUVwLT5kaXIgPT0gVFgpID8gUlggOiBUWDsKLQotCX0gd2hpbGUgKG1FcC0+ZGlyICE9IGRpcmVjdGlvbik7CisJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKG1FcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CkBAIC0yMTQ2LDcgKzIxNTQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCV9lcF9udWtlKG1FcCk7CiAJCXJldHZhbCA9IC1FT1ZFUkZMT1c7CiAJCXdhcm4oImVuZHBvaW50IGN0cmwgJVggbnVrZWQiLCBfdXNiX2FkZHIobUVwKSk7CkBAIC0yMTcwLDkgKzIxNzgsOSBAQAogCS8qIHB1c2ggcmVxdWVzdCAqLwogCW1SZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJbVJlcS0+cmVxLmFjdHVhbCA9IDA7Ci0JbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSk7CisJbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoLnF1ZXVlKTsKIAotCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1FcC0+cWgucXVldWUpKQogCQlyZXR2YWwgPSBfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXEpOwogCiAJaWYgKHJldHZhbCA9PSAtRUFMUkVBRFkpIHsKQEAgLTIxOTksNyArMjIwNyw3IEBACiAJdHJhY2UoIiVwLCAlcCIsIGVwLCByZXEpOwogCiAJaWYgKGVwID09IE5VTEwgfHwgcmVxID09IE5VTEwgfHwgbUVwLT5kZXNjID09IE5VTEwgfHwKLQkgICAgbGlzdF9lbXB0eSgmbVJlcS0+cXVldWUpICB8fCBsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJICAgIGxpc3RfZW1wdHkoJm1SZXEtPnF1ZXVlKSAgfHwgbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUobUVwLT5sb2NrLCBmbGFncyk7CkBAIC0yMjQ0LDcgKzIyNTIsNyBAQAogI2lmbmRlZiBTVEFMTF9JTgogCS8qIGdfZmlsZV9zdG9yYWdlIE1TIGNvbXBsaWFudCBidXQgZ196ZXJvIGZhaWxzIGNoYXB0ZXIgOSBjb21wbGlhbmNlICovCiAJaWYgKHZhbHVlICYmIG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLICYmIG1FcC0+ZGlyID09IFRYICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTIzNTUsNyArMjM2Myw3IEBACiAJCWlmIChpc19hY3RpdmUpIHsKIAkJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJl9nYWRnZXQtPmRldik7CiAJCQlod19kZXZpY2VfcmVzZXQodWRjKTsKLQkJCWh3X2RldmljZV9zdGF0ZSh1ZGMtPmNpMTN4eHhfZXBbMF0ucWhbUlhdLmRtYSk7CisJCQlod19kZXZpY2Vfc3RhdGUodWRjLT5lcDBvdXQucWguZG1hKTsKIAkJfSBlbHNlIHsKIAkJCWh3X2RldmljZV9zdGF0ZSgwKTsKIAkJCWlmICh1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCkKQEAgLTIzOTAsNyArMjM5OCw4IEBACiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBfdWRjOwotCXVuc2lnbmVkIGxvbmcgaSwgaywgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAogCXRyYWNlKCIlcCIsIGRyaXZlcik7CkBAIC0yNDI3LDQ1ICsyNDM2LDQ2IEBACiAKIAlpbmZvKCJod19lcF9tYXggPSAlZCIsIGh3X2VwX21heCk7CiAKLQl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAogCXJldHZhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7Ci0JCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXgvMjsgaSsrKSB7CisJCWZvciAoaiA9IFJYOyBqIDw9IFRYOyBqKyspIHsKKwkJCWludCBrID0gaSArIGogKiBod19lcF9tYXgvMjsKKwkJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2tdOwogCi0JCXNjbnByaW50ZihtRXAtPm5hbWUsIHNpemVvZihtRXAtPm5hbWUpLCAiZXAlaSIsIChpbnQpaSk7CisJCQlzY25wcmludGYobUVwLT5uYW1lLCBzaXplb2YobUVwLT5uYW1lKSwgImVwJWklcyIsIGksCisJCQkJCShqID09IFRYKSAgPyAiaW4iIDogIm91dCIpOwogCi0JCW1FcC0+bG9jayAgICAgICAgID0gdWRjLT5sb2NrOwotCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7Ci0JCW1FcC0+dGRfcG9vbCAgICAgID0gdWRjLT50ZF9wb29sOworCQkJbUVwLT5sb2NrICAgICAgICAgPSB1ZGMtPmxvY2s7CisJCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7CisJCQltRXAtPnRkX3Bvb2wgICAgICA9IHVkYy0+dGRfcG9vbDsKIAotCQltRXAtPmVwLm5hbWUgICAgICA9IG1FcC0+bmFtZTsKLQkJbUVwLT5lcC5vcHMgICAgICAgPSAmdXNiX2VwX29wczsKLQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOworCQkJbUVwLT5lcC5uYW1lICAgICAgPSBtRXAtPm5hbWU7CisJCQltRXAtPmVwLm9wcyAgICAgICA9ICZ1c2JfZXBfb3BzOworCQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOwogCi0JCS8qIHRoaXMgYWxsb2NhdGlvbiBjYW5ub3QgYmUgcmFuZG9tICovCi0JCWZvciAoayA9IFJYOyBrIDw9IFRYOyBrKyspIHsKLQkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoW2tdLnF1ZXVlKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoLnF1ZXVlKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JCQltRXAtPnFoW2tdLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwKLQkJCQkJCQlHRlBfS0VSTkVMLAotCQkJCQkJCSZtRXAtPnFoW2tdLmRtYSk7CisJCQltRXAtPnFoLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwgR0ZQX0tFUk5FTCwKKwkJCQkJJm1FcC0+cWguZG1hKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKG1FcC0+cWhba10ucHRyID09IE5VTEwpCisJCQlpZiAobUVwLT5xaC5wdHIgPT0gTlVMTCkKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxzZQotCQkJCW1lbXNldChtRXAtPnFoW2tdLnB0ciwgMCwKLQkJCQkgICAgICAgc2l6ZW9mKCptRXAtPnFoW2tdLnB0cikpOwotCQl9Ci0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSAmbUVwLT5lcDsKLQkJZWxzZQorCQkJCW1lbXNldChtRXAtPnFoLnB0ciwgMCwgc2l6ZW9mKCptRXAtPnFoLnB0cikpOworCisJCQkvKiBza2lwIGVwMCBvdXQgYW5kIGluIGVuZHBvaW50cyAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQkJbGlzdF9hZGRfdGFpbCgmbUVwLT5lcC5lcF9saXN0LCAmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJCX0KIAl9CiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCisJdWRjLT5nYWRnZXQuZXAwID0gJnVkYy0+ZXAwaW4uZXA7CiAJLyogYmluZCBnYWRnZXQgKi8KIAlkcml2ZXItPmRyaXZlci5idXMgICAgID0gTlVMTDsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMjQ3OSw2ICsyNDg5LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAorCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAJaWYgKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1BVTExVUF9PTl9WQlVTKSB7CiAJCWlmICh1ZGMtPnZidXNfYWN0aXZlKSB7CkBAIC0yNDkwLDE0ICsyNTAxLDEyIEBACiAJCX0KIAl9CiAKLQlyZXR2YWwgPSBod19kZXZpY2Vfc3RhdGUodWRjLT5jaTEzeHh4X2VwWzBdLnFoW1JYXS5kbWEpOworCXJldHZhbCA9IGh3X2RldmljZV9zdGF0ZSh1ZGMtPmVwMG91dC5xaC5kbWEpOwogCWlmIChyZXR2YWwpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAKICBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJldHZhbCkKLQkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKQEAgLTI1MTAsNyArMjUxOSw3IEBACiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgY2kxM3h4eCAqdWRjID0gX3VkYzsKLQl1bnNpZ25lZCBsb25nIGksIGssIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgaSwgZmxhZ3M7CiAKIAl0cmFjZSgiJXAiLCBkcml2ZXIpOwogCkBAIC0yNTQ2LDE3ICsyNTU1LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7CiAJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOwogCi0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwotCQllbHNlIGlmICghbGlzdF9lbXB0eSgmbUVwLT5lcC5lcF9saXN0KSkKKwkJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPmVwLmVwX2xpc3QpKQogCQkJbGlzdF9kZWxfaW5pdCgmbUVwLT5lcC5lcF9saXN0KTsKIAotCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKQotCQkJaWYgKG1FcC0+cWhba10ucHRyICE9IE5VTEwpCi0JCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsCi0JCQkJCSAgICAgIG1FcC0+cWhba10ucHRyLCBtRXAtPnFoW2tdLmRtYSk7CisJCWlmIChtRXAtPnFoLnB0ciAhPSBOVUxMKQorCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsIG1FcC0+cWgucHRyLCBtRXAtPnFoLmRtYSk7CiAJfQogCisJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAppbmRleCBmNjFmZWQwLi5hMjQ5MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaApAQCAtMjAsNyArMjAsNyBAQAogICogREVGSU5FCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIENJMTNYWFhfUEFHRV9TSVpFICA0MDk2dWwgLyogcGFnZSBzaXplIGZvciBURCdzICovCi0jZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMTYpCisjZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMzIpCiAjZGVmaW5lIENUUkxfUEFZTE9BRF9NQVggICAoNjQpCiAjZGVmaW5lIFJYICAgICAgICAoMCkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9PVVQgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCiAjZGVmaW5lIFRYICAgICAgICAoMSkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9JTiAgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCkBAIC04OCw4ICs4OCw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgICBxdWV1ZTsKIAkJc3RydWN0IGNpMTN4eHhfcWggKnB0cjsKIAkJZG1hX2FkZHJfdCAgICAgICAgIGRtYTsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxaFsyXTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgICAgICAgICAgICAgICAgICAgICpzdGF0dXM7CisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWg7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VkZ2U7CiAKIAkvKiBnbG9iYWwgcmVzb3VyY2VzICovCkBAIC0xMTksOSArMTE4LDEzIEBACiAKIAlzdHJ1Y3QgZG1hX3Bvb2wgICAgICAgICAgICpxaF9wb29sOyAgIC8qIERNQSBwb29sIGZvciBxdWV1ZSBoZWFkcyAqLwogCXN0cnVjdCBkbWFfcG9vbCAgICAgICAgICAgKnRkX3Bvb2w7ICAgLyogRE1BIHBvb2wgZm9yIHRyYW5zZmVyIGRlc2NzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgICAqc3RhdHVzOyAgICAvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KIAogCXN0cnVjdCB1c2JfZ2FkZ2V0ICAgICAgICAgIGdhZGdldDsgICAgIC8qIFVTQiBzbGF2ZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgY2kxM3h4eF9lcCAgICAgICAgICBjaTEzeHh4X2VwW0VORFBUX01BWF07IC8qIGV4dGVuZGVkIGVuZHB0cyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGVwMF9kaXI7ICAgIC8qIGVwMCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgZXAwb3V0IGNpMTN4eHhfZXBbMF0KKyNkZWZpbmUgZXAwaW4gIGNpMTN4eHhfZXBbMTZdCiAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgICpkcml2ZXI7ICAgICAvKiAzcmQgcGFydHkgZ2FkZ2V0IGRyaXZlciAqLwogCXN0cnVjdCBjaTEzeHh4X3VkY19kcml2ZXIgKnVkY19kcml2ZXI7IC8qIGRldmljZSBjb250cm9sbGVyIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IGY2ZmY4NDUuLjFiYTRiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTkyOCw4ICs5MjgsOSBAQAogCQkgKi8KIAkJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgewogCQljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6Ci0JCQlpZiAoY2Rldi0+Y29uZmlnKQotCQkJCWYgPSBjZGV2LT5jb25maWctPmludGVyZmFjZVtpbnRmXTsKKwkJCWlmICghY2Rldi0+Y29uZmlnIHx8IHdfaW5kZXggPj0gTUFYX0NPTkZJR19JTlRFUkZBQ0VTKQorCQkJCWJyZWFrOworCQkJZiA9IGNkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ludGZdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IGI1ZGJiMjMuLjZkOGU1MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0yOTMsNiArMjkzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgogCiAjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCiAKQEAgLTI3NjMsNyArMjc2NCw3IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDE7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KGNvbW1vbiwgMCwgc2l6ZW9mIGNvbW1vbik7CisJCW1lbXNldChjb21tb24sIDAsIHNpemVvZiAqY29tbW9uKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwppbmRleCAwYzhkZDgxLi5iMTIwZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKQEAgLTE5OCwxMCArMTk4LDEwIEBACiAjZGVmaW5lIFBDSF9VRENfQlJMRU4JCTB4MEYJLyogQnVyc3QgbGVuZ3RoICovCiAjZGVmaW5lIFBDSF9VRENfVEhMRU4JCTB4MUYJLyogVGhyZXNob2xkIGxlbmd0aCAqLwogLyogVmFsdWUgb2YgRVAgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgVURDX0VQMElOX0JVRkZfU0laRQk2NAotI2RlZmluZSBVRENfRVBJTl9CVUZGX1NJWkUJNTEyCi0jZGVmaW5lIFVEQ19FUDBPVVRfQlVGRl9TSVpFCTY0Ci0jZGVmaW5lIFVEQ19FUE9VVF9CVUZGX1NJWkUJNTEyCisjZGVmaW5lIFVEQ19FUDBJTl9CVUZGX1NJWkUJMTYKKyNkZWZpbmUgVURDX0VQSU5fQlVGRl9TSVpFCTI1NgorI2RlZmluZSBVRENfRVAwT1VUX0JVRkZfU0laRQkxNgorI2RlZmluZSBVRENfRVBPVVRfQlVGRl9TSVpFCTI1NgogLyogVmFsdWUgb2YgRVAgbWF4aW11bSBwYWNrZXQgc2l6ZSAqLwogI2RlZmluZSBVRENfRVAwSU5fTUFYX1BLVF9TSVpFCTY0CiAjZGVmaW5lIFVEQ19FUDBPVVRfTUFYX1BLVF9TSVpFCTY0CkBAIC0zNTEsNyArMzUxLDcgQEAKIAlzdHJ1Y3QgcGNpX3Bvb2wJCSpkYXRhX3JlcXVlc3RzOwogCXN0cnVjdCBwY2lfcG9vbAkJKnN0cF9yZXF1ZXN0czsKIAlkbWFfYWRkcl90CQkJZG1hX2FkZHI7Ci0JdW5zaWduZWQgbG9uZwkJCWVwMG91dF9idWZbNjRdOworCXZvaWQJCQkJKmVwMG91dF9idWY7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXBfZGF0YTsKIAl1bnNpZ25lZCBsb25nCQkJcGh5c19hZGRyOwogCXZvaWQgX19pb21lbQkJCSpiYXNlX2FkZHI7CkBAIC0zNjEsNiArMzYxLDggQEAKIAogI2RlZmluZSBQQ0hfVURDX1BDSV9CQVIJCQkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUcyMFRfVURDCTB4ODgwOAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPSE0JCTB4MTBEQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01MNzIxM19JT0hfVURDCTB4ODAxRAogCiBzdGF0aWMgY29uc3QgY2hhcgllcDBfc3RyaW5nW10gPSAiZXAwaW4iOwogc3RhdGljIERFRklORV9TUElOTE9DSyh1ZGNfc3RhbGxfc3BpbmxvY2spOwkvKiBzdGFsbCBzcGluIGxvY2sgKi8KQEAgLTEyMTksMTEgKzEyMjEsMTEgQEAKIAlkZXYgPSBlcC0+ZGV2OwogCWlmIChyZXEtPmRtYV9tYXBwZWQpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIHJlcS0+cmVxLmRtYSwKKwkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgcmVxLT5yZXEuZG1hLAorCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAwOwogCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOwogCX0KQEAgLTE0MTQsNyArMTQxNiw2IEBACiAKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKIAl0ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwotCWVwLT50ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwogCS8qIFNldCB0aGUgc3RhdHVzIGJpdHMgZm9yIGFsbCBkZXNjcmlwdG9ycyAqLwogCXdoaWxlICgxKSB7CiAJCXRkX2RhdGEtPnN0YXR1cyA9ICh0ZF9kYXRhLT5zdGF0dXMgJiB+UENIX1VEQ19CVUZGX1NUUykgfApAQCAtMTYxMywxNSArMTYxNCwxOSBAQAogCWlmICh1c2JyZXEtPmxlbmd0aCAmJgogCSAgICAoKHVzYnJlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHx8ICF1c2JyZXEtPmRtYSkpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdXNicmVxLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsCisJCQkJCQkgICAgIHVzYnJlcS0+YnVmLAorCQkJCQkJICAgICB1c2JyZXEtPmxlbmd0aCwKKwkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl1c2JyZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgdXNicmVxLT5idWYsCisJCQkJCQkgICAgIHVzYnJlcS0+bGVuZ3RoLAorCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAxOwogCX0KIAlpZiAodXNicmVxLT5sZW5ndGggPiAwKSB7Ci0JCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIGdmcCk7CisJCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBwcm9iZV9lbmQ7CiAJfQpAQCAtMTY0Niw3ICsxNjUxLDYgQEAKIAkJCXBjaF91ZGNfd2FpdF9lcF9zdGFsbChlcCk7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CiAJCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsICgxIDw8IGVwLT5udW0pKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfVFgpOwogCQl9CiAJfQogCS8qIE5vdyBhZGQgdGhpcyByZXF1ZXN0IHRvIHRoZSBlcCdzIHBlbmRpbmcgcmVxdWVzdHMgKi8KQEAgLTE5MjYsNiArMTkzMCw3IEBACiAJICAgIFBDSF9VRENfQlNfRE1BX0RPTkUpCiAJCXJldHVybjsKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKKwlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgMCk7CiAJaWYgKChyZXEtPnRkX2RhdGFfbGFzdC0+c3RhdHVzICYgUENIX1VEQ19SWFRYX1NUUykgIT0KIAkgICAgUENIX1VEQ19SVFNfU1VDQykgewogCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkludmFsaWQgUlhUWCBzdGF0dXMgKDB4JTA4eCkgIgpAQCAtMTk2Myw3ICsxOTY4LDcgQEAKIAl1MzIJZXBzdHM7CiAJc3RydWN0IHBjaF91ZGNfZXAJKmVwOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJZXBzdHMgPSBlcC0+ZXBzdHM7CiAJZXAtPmVwc3RzID0gMDsKIApAQCAtMjAwOCw3ICsyMDEzLDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkJKmVwOwogCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QJCSpyZXEgPSBOVUxMOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bSArIDFdOworCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChlcF9udW0pXTsKIAllcHN0cyA9IGVwLT5lcHN0czsKIAllcC0+ZXBzdHMgPSAwOwogCkBAIC0yMDI1LDEwICsyMDMwLDExIEBACiAJfQogCWlmIChlcHN0cyAmIFVEQ19FUFNUU19IRSkKIAkJcmV0dXJuOwotCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SU1MpCisJaWYgKGVwc3RzICYgVURDX0VQU1RTX1JTUykgewogCQlwY2hfdWRjX2VwX3NldF9zdGFsbChlcCk7CiAJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKIAkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCX0KIAlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUkNTKSB7CiAJCWlmICghZGV2LT5wcm90X3N0YWxsKSB7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX3N0YWxsKGVwKTsKQEAgLTIwNjAsOCArMjA2NiwxMCBAQAogewogCXUzMgllcHN0czsKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwX291dDsKIAogCWVwID0gJmRldi0+ZXBbVURDX0VQMElOX0lEWF07CisJZXBfb3V0ID0gJmRldi0+ZXBbVURDX0VQME9VVF9JRFhdOwogCWVwc3RzID0gZXAtPmVwc3RzOwogCWVwLT5lcHN0cyA9IDA7CiAKQEAgLTIwNzMsOCArMjA4MSwxNiBAQAogCQlyZXR1cm47CiAJaWYgKGVwc3RzICYgVURDX0VQU1RTX0hFKQogCQlyZXR1cm47Ci0JaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpCisJaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpIHsKIAkJcGNoX3VkY19jb21wbGV0ZV90cmFuc2ZlcihlcCk7CisJCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCWVwX291dC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwX291dC0+dGRfZGF0YS0+c3RhdHVzICYKKwkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJUENIX1VEQ19CU19IU1RfUkRZOworCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcF9vdXQpOworCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfcnJkeShlcF9vdXQpOworCX0KIAkvKiBPbiBJTiBpbnRlcnJ1cHQsIHByb3ZpZGUgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLwogCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfSU4pICYmICEoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJgogCSAgICAgIShlcHN0cyAmIFVEQ19FUFNUU19UWEVNUFRZKSkKQEAgLTIxMDIsMTEgKzIxMTgsOSBAQAogCQlkZXYtPnN0YWxsID0gMDsKIAkJZGV2LT5lcFtVRENfRVAwSU5fSURYXS5oYWx0ZWQgPSAwOwogCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5oYWx0ZWQgPSAwOwotCQkvKiBJbiBkYXRhIG5vdCByZWFkeSAqLwotCQlwY2hfdWRjX2VwX3NldF9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCWRldi0+c2V0dXBfZGF0YSA9IGVwLT50ZF9zdHAtPnJlcXVlc3Q7CiAJCXBjaF91ZGNfaW5pdF9zZXR1cF9idWZmKGVwLT50ZF9zdHApOwotCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfVFgpOworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfUlgpOwogCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSwKIAkJCQkgICAgICBkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmluKTsKIAkJaWYgKChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpCkBAIC0yMTIyLDE0ICsyMTM2LDIzIEBACiAJCXNldHVwX3N1cHBvcnRlZCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsCiAJCQkJCQkgICAgICZkZXYtPnNldHVwX2RhdGEpOwogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKGRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQllcC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwLT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJCVBDSF9VRENfQlNfSFNUX1JEWTsKKwkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKKwkJfQogCQkvKiBlcDAgaW4gcmV0dXJucyBkYXRhIG9uIElOIHBoYXNlICovCiAJCWlmIChzZXR1cF9zdXBwb3J0ZWQgPj0gMCAmJiBzZXR1cF9zdXBwb3J0ZWQgPAogCQkJCQkgICAgVURDX0VQMElOX01BWF9QS1RfU0laRSkgewogCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCQkvKiBHYWRnZXQgd291bGQgaGF2ZSBxdWV1ZWQgYSByZXF1ZXN0IHdoZW4KIAkJCSAqIHdlIGNhbGxlZCB0aGUgc2V0dXAgKi8KLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOwotCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJaWYgKCEoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJfQogCQl9IGVsc2UgaWYgKHNldHVwX3N1cHBvcnRlZCA8IDApIHsKIAkJCS8qIGlmIHVuc3VwcG9ydGVkIHJlcXVlc3QsIHRoZW4gc3RhbGwgKi8KIAkJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSkpOwpAQCAtMjE0MiwyMiArMjE2NSwxMyBAQAogCQl9CiAJfSBlbHNlIGlmICgoKChzdGF0ICYgVURDX0VQU1RTX09VVF9NQVNLKSA+PiBVRENfRVBTVFNfT1VUX1NISUZUKSA9PQogCQkgICAgIFVEQ19FUFNUU19PVVRfREFUQSkgJiYgIWRldi0+c3RhbGwpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKLQkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IE5vIHJlcXVlc3RcbiIsIF9fZnVuY19fKTsKLQkJCWVwLT50ZF9kYXRhLT5zdGF0dXMgPSAoZXAtPnRkX2RhdGEtPnN0YXR1cyAmCi0JCQkJCSAgICAgICB+UENIX1VEQ19CVUZGX1NUUykgfAotCQkJCQkgICAgICAgUENIX1VEQ19CU19IU1RfUkRZOwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjb250cm9sIHdyaXRlICovCi0JCQkvKiBuZXh0IGZ1bmN0aW9uIHdpbGwgcGlja3VvIGFuIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIDApOworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJCWVwLT5lcHN0cyA9IHN0YXQ7Ci0KLQkJCXBjaF91ZGNfc3ZjX2RhdGFfb3V0KGRldiwgMCk7Ci0JCQkvKiByZS1wcm9ncmFtIGRlc2MuIHBvaW50ZXIgZm9yIHBvc3NpYmxlIFpMUHMgKi8KLQkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQkJcGNoX3VkY19zdmNfZGF0YV9vdXQoZGV2LCBQQ0hfVURDX0VQMCk7CiAJCX0KKwkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CiAJfQogCXBjaF91ZGNfZXBfc2V0X3JyZHkoZXApOwogfQpAQCAtMjE3NCw3ICsyMTg4LDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CiAJc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKIAkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LApAQCAtMjE5NiwxMyArMjIxMCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNOyBpKyspIHsKIAkJLyogSU4gKi8KIAkJaWYgKGVwX2ludHIgJiAoMHgxIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaV07CisJCQllcCA9ICZkZXYtPmVwW1VEQ19FUElOX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CiAJCS8qIE9VVCAqLwogCQlpZiAoZXBfaW50ciAmICgweDEwMDAwIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaSsxXTsKKwkJCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CkBAIC0yNTYzLDkgKzI1NzcsNiBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0uZXAubWF4cGFja2V0ID0gVURDX0VQMElOX01BWF9QS1RfU0laRTsKIAlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5tYXhwYWNrZXQgPSBVRENfRVAwT1VUX01BWF9QS1RfU0laRTsKIAotCWRldi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIGRldi0+ZXAwb3V0X2J1ZiwgMjU2LAotCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQogCS8qIHJlbW92ZSBlcDAgaW4gYW5kIG91dCBmcm9tIHRoZSBsaXN0LiAgVGhleSBoYXZlIG93biBwb2ludGVyICovCiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcC5lcF9saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5lcF9saXN0KTsKQEAgLTI2MzcsNiArMjY0OCwxMyBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfc3RwX3BoeXMgPSAwOwogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfZGF0YSA9IE5VTEw7CiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9kYXRhX3BoeXMgPSAwOworCisJZGV2LT5lcDBvdXRfYnVmID0ga3phbGxvYyhVRENfRVAwT1VUX0JVRkZfU0laRSAqIDQsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5lcDBvdXRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCBkZXYtPmVwMG91dF9idWYsCisJCQkJICAgICAgIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcwMCw3ICsyNzE4LDggQEAKIAogCXBjaF91ZGNfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldiwgVURDX0RFVklOVF9NU0spOwogCi0JLyogQXNzdWVzIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVxdWV0cyB3aXRoIHRoaXMgZHJpdmVyICovCisJLyogQXNzdXJlcyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVlc3RzIHdpdGggdGhpcyBkcml2ZXIgKi8KKwlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKIAlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOwogCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gTlVMTDsKQEAgLTI3NTAsNiArMjc2OSwxMSBAQAogCQlwY2lfcG9vbF9kZXN0cm95KGRldi0+c3RwX3JlcXVlc3RzKTsKIAl9CiAKKwlpZiAoZGV2LT5kbWFfYWRkcikKKwkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIGRldi0+ZG1hX2FkZHIsCisJCQkJIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwgRE1BX0ZST01fREVWSUNFKTsKKwlrZnJlZShkZXYtPmVwMG91dF9idWYpOworCiAJcGNoX3VkY19leGl0KGRldik7CiAKIAlpZiAoZGV2LT5pcnFfcmVnaXN0ZXJlZCkKQEAgLTI3OTIsMTEgKzI4MTYsNyBAQAogCWludCByZXQ7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcmV0ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX3Jlc3RvcmVfc3RhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMjkxNCw2ICsyOTM0LDExIEBACiAJCS5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUsCiAJCS5jbGFzc19tYXNrID0gMHhmZmZmZmZmZiwKIAl9LAorCXsKKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JPSE0sIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0lPSF9VREMpLAorCQkuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlLAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKIAl7IDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDJmYzg2MzYuLjEyZmY2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMTMxLDMxICsxMzEsMzEgQEAKICAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgogICovCiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFZlbmRvcjsKK3N0YXRpYyB1c2hvcnQgaWRWZW5kb3I7CiBtb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgaWRQcm9kdWN0Oworc3RhdGljIHVzaG9ydCBpZFByb2R1Y3Q7CiBtb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgYmNkRGV2aWNlOworc3RhdGljIHVzaG9ydCBiY2REZXZpY2U7CiBtb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK3N0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOwogbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQcm9kdWN0Oworc3RhdGljIGNoYXIgKmlQcm9kdWN0OwogbW9kdWxlX3BhcmFtKGlQcm9kdWN0LCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQcm9kdWN0LCAiVVNCIFByb2R1Y3Qgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlTZXJpYWxOdW07CitzdGF0aWMgY2hhciAqaVNlcmlhbE51bTsKIG1vZHVsZV9wYXJhbShpU2VyaWFsTnVtLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlTZXJpYWxOdW0sICIxIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQTlBzdHJpbmc7CitzdGF0aWMgY2hhciAqaVBOUHN0cmluZzsKIG1vZHVsZV9wYXJhbShpUE5Qc3RyaW5nLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQTlBzdHJpbmcsICJNRkc6bGludXg7TURMOmdfcHJpbnRlcjtDTFM6UFJJTlRFUjtTTjoxOyIpOwogCkBAIC0xNTk2LDEzICsxNTk2LDEyIEBACiAJaW50IHN0YXR1czsKIAogCW11dGV4X2xvY2soJnVzYl9wcmludGVyX2dhZGdldC5sb2NrX3ByaW50ZXJfaW8pOwotCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7Ci0JdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGdfcHJpbnRlcl9kZXZubywgMik7Ci0KIAlzdGF0dXMgPSB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZwcmludGVyX2RyaXZlcik7CiAJaWYgKHN0YXR1cykKIAkJRVJST1IoZGV2LCAidXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAleFxuIiwgc3RhdHVzKTsKIAorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihnX3ByaW50ZXJfZGV2bm8sIDIpOworCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfcHJpbnRlcl9nYWRnZXQubG9ja19wcmludGVyX2lvKTsKIH0KIG1vZHVsZV9leGl0KGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IDIwZDQzZGEuLjAxNTExODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQlicmVhazsKIAljYXNlIFI4QTY2NTk3X0JVTEs6CiAJCS8qIGlzb2Nocm9ub3VzIHBpcGVzIG1heSBiZSB1c2VkIGFzIGJ1bGsgcGlwZXMgKi8KLQkJaWYgKGluZm8tPnBpcGUgPiBSOEE2NjU5N19CQVNFX1BJUEVOVU1fQlVMSykKKwkJaWYgKGluZm8tPnBpcGUgPj0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEspCiAJCQlidWZudW0gPSBpbmZvLT5waXBlIC0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEs7CiAJCWVsc2UKIAkJCWJ1Zm51bSA9IGluZm8tPnBpcGUgLSBSOEE2NjU5N19CQVNFX1BJUEVOVU1fSVNPQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyNDA0NmMwLi4wZTZhZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0xNTEsNiArMTUxLDggQEAKIAkgIFF1YWxjb21tIGNoaXBzZXRzLiBSb290IEh1YiBoYXMgaW5idWlsdCBUVC4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiBjb25maWcgVVNCX0VIQ0lfSENEX1BQQ19PRgogCWJvb2wgIkVIQ0kgc3VwcG9ydCBmb3IgUFBDIFVTQiBjb250cm9sbGVyIG9uIE9GIHBsYXRmb3JtIGJ1cyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwppbmRleCAyYmFmOGE4Li5hODY5ZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCkBAIC0yMjcsOCArMjI3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA4NmU0Mjg5Li41Yzc2MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycTsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCB0ZW1wOwogCiAJcHJfZGVidWcoImluaXRpYWxpemluZyBGU0wtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKIApAQCAtMTI2LDE4ICsxMjUsNiBAQAogCQlnb3RvIGVycjM7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiBpdCBpcyBNUEM1MTIxIFNvQywgb3RoZXJ3aXNlIHNldCBwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzCi0JICogZmxhZyBmb3IgODN4eCBvciA4NTM2IHN5c3RlbSBpbnRlcmZhY2UgcmVnaXN0ZXJzLgotCSAqLwotCWlmIChwZGF0YS0+YmlnX2VuZGlhbl9tbWlvKQotCQl0ZW1wID0gaW5fYmUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0JZWxzZQotCQl0ZW1wID0gaW5fbGUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0KLQlpZiAoKHRlbXAgJiBJRF9NU0spICE9ICh+KCh0ZW1wICYgTklEX01TSykgPj4gOCkgJiBJRF9NU0spKQotCQlwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzID0gMTsKLQogCS8qIEVuYWJsZSBVU0IgY29udHJvbGxlciwgODN4eCBvciA4NTM2ICovCiAJaWYgKHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MpCiAJCXNldGJpdHMzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9DVFJMLCAweDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCmluZGV4IDJjODM1MzcuLjNmYWJlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKQEAgLTE5LDkgKzE5LDYgQEAKICNkZWZpbmUgX0VIQ0lfRlNMX0gKIAogLyogb2Zmc2V0cyBmb3IgdGhlIG5vbi1laGNpIHJlZ2lzdGVycyBpbiB0aGUgRlNMIFNPQyBVU0IgY29udHJvbGxlciAqLwotI2RlZmluZSBGU0xfU09DX1VTQl9JRAkJMHgwCi0jZGVmaW5lIElEX01TSwkJCTB4M2YKLSNkZWZpbmUgTklEX01TSwkJCTB4M2YwMAogI2RlZmluZSBGU0xfU09DX1VTQl9VTFBJVlAJMHgxNzAKICNkZWZpbmUgRlNMX1NPQ19VU0JfUE9SVFNDMQkweDE4NAogI2RlZmluZSBQT1JUX1BUU19NU0sJCSgzPDwzMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA2ZmVlM2NkLi43NGRjZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC01NzIsNiArNTcyLDggQEAKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX2lhYV93YXRjaGRvZzsKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwogCisJaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNTc5LDExICs1ODEsMjAgQEAKIAllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9pdGRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9zaXRkX2xpc3QpOworCisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOKGhjY19wYXJhbXMpKSB7CisJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCisJCXN3aXRjaCAoRUhDSV9UVU5FX0ZMUykgeworCQljYXNlIDA6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAxMDI0OyBicmVhazsKKwkJY2FzZSAxOiBlaGNpLT5wZXJpb2RpY19zaXplID0gNTEyOyBicmVhazsKKwkJY2FzZSAyOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMjU2OyBicmVhazsKKwkJZGVmYXVsdDoJQlVHKCk7CisJCX0KKwl9CiAJaWYgKChyZXR2YWwgPSBlaGNpX21lbV9pbml0KGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBjb250cm9sbGVycyBtYXkgY2FjaGUgc29tZSBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uICovCi0JaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOwogCWlmIChIQ0NfSVNPQ19DQUNIRShoY2NfcGFyYW1zKSkJCS8vIGZ1bGwgZnJhbWUgY2FjaGUKIAkJZWhjaS0+aV90aHJlc2ggPSAyICsgODsKIAllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZApAQCAtNjM3LDEyICs2NDgsNiBAQAogCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLwogCQl0ZW1wICY9IH4oMyA8PCAyKTsKIAkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKLQkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7Ci0JCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOwotCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOwotCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOwotCQlkZWZhdWx0OglCVUcoKTsKLQkJfQogCX0KIAlpZiAoSENDX0xQTShoY2NfcGFyYW1zKSkgewogCQkvKiBzdXBwb3J0IGxpbmsgcG93ZXIgbWFuYWdlbWVudCBFSENJIDEuMSBhZGRlbmR1bSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDc5NmVhMGMuLjhhNTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogewogCWludAkJcG9ydDsKIAl1MzIJCXRlbXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZW5hYmxlZCBmb3IgdGhlIHJvb3QgaHViIGJ1dCBkaXNhYmxlZAogCSAqIGZvciB0aGUgY29udHJvbGxlciwgd2UgbXVzdCBhZGp1c3QgYWxsIHRoZSBwb3J0IHdha2V1cCBmbGFncwpAQCAtMTIwLDYgKzEyMSw4IEBACiAJaWYgKCFlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCB8fCBkb193YWtldXApCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKIAkvKiBjbGVhciBwaHkgbG93LXBvd2VyIG1vZGUgYmVmb3JlIGNoYW5naW5nIHdha2V1cCBmbGFncyAqLwogCWlmIChlaGNpLT5oYXNfaG9zdHBjKSB7CiAJCXBvcnQgPSBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKTsKQEAgLTEzMSw3ICsxMzQsOSBAQAogCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CiAJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wICYgfkhPU1RQQ19QSENELCBob3N0cGNfcmVnKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCg1KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlwb3J0ID0gSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcyk7CkBAIC0xNzAsNiArMTc1LDggQEAKIAkvKiBEb2VzIHRoZSByb290IGh1YiBoYXZlIGEgcG9ydCB3YWtldXAgcGVuZGluZz8gKi8KIAlpZiAoIXN1c3BlbmRpbmcgJiYgKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cykgJiBTVFNfUENEKSkKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoZWhjaV90b19oY2QoZWhjaSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGVoY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggZmE1OWIyNi4uYzhlMzYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwpAQCAtMjEsMTAgKzIxLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCiAjZGVmaW5lIFVMUElfVklFV1BPUlRfT0ZGU0VUCTB4MTcwCiAKIHN0cnVjdCBlaGNpX214Y19wcml2IHsKQEAgLTExNCw2ICsxMTcsNyBAQAogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycSwgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKIAlzdHJ1Y3QgZWhjaV9teGNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKQEAgLTE3Nyw4ICsxODEsOCBAQAogCQljbGtfZW5hYmxlKHByaXYtPmFoYmNsayk7CiAJfQogCi0JLyogImRyIiBkZXZpY2UgaGFzIGl0cyBvd24gY2xvY2sgKi8KLQlpZiAocGRldi0+aWQgPT0gMCkgeworCS8qICJkciIgZGV2aWNlIGhhcyBpdHMgb3duIGNsb2NrIG9uIGkuTVg1MSAqLworCWlmIChjcHVfaXNfbXg1MSgpICYmIChwZGV2LT5pZCA9PSAwKSkgewogCQlwcml2LT5waHkxY2xrID0gY2xrX2dldChkZXYsICJ1c2JfcGh5MSIpOwogCQlpZiAoSVNfRVJSKHByaXYtPnBoeTFjbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHByaXYtPnBoeTFjbGspOwpAQCAtMjQwLDYgKzI0NCwyMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FkZDsKIAorCWlmIChwZGF0YS0+b3RnKSB7CisJCS8qCisJCSAqIGVmaWthbXggYW5kIGVmaWthc2IgaGF2ZSBzb21lIGhhcmR3YXJlIGJ1ZyB3aGljaCBpcworCQkgKiBwcmV2ZW50aW5nIHVzYiB0byB3b3JrIHVubGVzcyBDSFJHVkJVUyBpcyBzZXQuCisJCSAqIEl0J3MgaW4gdmlvbGF0aW9uIG9mIFVTQiBzcGVjcworCQkgKi8KKwkJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYW14KCkgfHwgbWFjaGluZV9pc19teDUxX2VmaWthc2IoKSkgeworCQkJZmxhZ3MgPSBvdGdfaW9fcmVhZChwZGF0YS0+b3RnLCBVTFBJX09UR19DVFJMKTsKKwkJCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfQ0hSR1ZCVVM7CisJCQlyZXQgPSBvdGdfaW9fd3JpdGUocGRhdGEtPm90ZywgZmxhZ3MsIFVMUElfT1RHX0NUUkwpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHNldCBDSFJWQlVTXG4iKTsKKwkJCQlnb3RvIGVycl9hZGQ7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZXJyX2FkZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDY4MGYyZWYuLmY3ODRjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfb21hcF9oY19kcml2ZXIsICZwZGV2LT5kZXYsCiAJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9jcmVhdGVfaGNkOwogCX0KQEAgLTg2NCw3ICs4NjQsNyBAQAogCiAJcmV0ID0gb21hcF9zdGFydF9laGMob21hcCwgaGNkKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBlaGNpXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGVoY2kgd2l0aCBlcnIgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX3N0YXJ0OwogCX0KIApAQCAtODc5LDcgKzg3OSw3IEBACiAKIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGhjZCB3aXRoIGVyciAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfYWRkX2hjZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCA3NjE3OWMzLi4wN2JiOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC00NCwyOCArNDQsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlaGNpX3F1aXJrX2FtZF9TQjgwMChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCitzdGF0aWMgaW50IGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmFtZF9zbWJ1c19kZXY7CiAJdTggcmV2ID0gMDsKIAogCWFtZF9zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBOVUxMKTsKLQlpZiAoIWFtZF9zbWJ1c19kZXYpCi0JCXJldHVybiAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKLQlpZiAocmV2IDwgMHg0MCkgewotCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKLQkJYW1kX3NtYnVzX2RldiA9IE5VTEw7Ci0JCXJldHVybiAwOworCWlmIChhbWRfc21idXNfZGV2KSB7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJCWlmIChyZXYgPCAweDQwKSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlhbWRfc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4NzgwYiwgTlVMTCk7CisJCWlmICghYW1kX3NtYnVzX2RldikKKwkJCXJldHVybiAwOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCQlpZiAocmV2IDwgMHgxMSB8fCByZXYgPiAweDE4KSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoIWFtZF9uYl9kZXYpCiAJCWFtZF9uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHgxNTEwLCBOVUxMKTsKLQlpZiAoIWFtZF9uYl9kZXYpCi0JCWVoY2lfZXJyKGVoY2ksICJRVUlSSzogdW5hYmxlIHRvIGdldCBBTUQgTkIgZGV2aWNlXG4iKTsKIAotCWVoY2lfaW5mbyhlaGNpLCAiUVVJUks6IEVuYWJsZSBBTUQgU0I4MDAgTDEgZml4XG4iKTsKKwllaGNpX2luZm8oZWhjaSwgIlFVSVJLOiBFbmFibGUgZXhjZXB0aW9uIGZvciBBTUQgSHVkc29uIEFTUE1cbiIpOwogCiAJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CiAJYW1kX3NtYnVzX2RldiA9IE5VTEw7CkBAIC0xMzEsNyArMTM4LDcgQEAKIAkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KIAllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKLQlpZiAoZWhjaV9xdWlya19hbWRfU0I4MDAoZWhjaSkpCisJaWYgKGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihlaGNpKSkKIAkJZWhjaS0+YW1kX2wxX2ZpeCA9IDE7CiAKIAlyZXR2YWwgPSBlaGNpX2hhbHQoZWhjaSk7CkBAIC0zNjAsOCArMzY3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChlaGNpLCBkb193YWtldXApOworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAJKHZvaWQpZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCmluZGV4IDU3NGI5OWUuLjc5YTY2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCkBAIC0yNjIsMTkgKzI2MiwyNCBAQAogCX0KIH0KIAotc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjNTEyMV9wZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBmc2xfdXNiMl9tcGM1MTIxX3BkID0gewogCS5iaWdfZW5kaWFuX2Rlc2MgPSAxLAogCS5iaWdfZW5kaWFuX21taW8gPSAxLAogCS5lcyA9IDEsCisJLmhhdmVfc3lzaWZfcmVncyA9IDAsCiAJLmxlX3NldHVwX2J1ZiA9IDEsCiAJLmluaXQgPSBmc2xfdXNiMl9tcGM1MTIxX2luaXQsCiAJLmV4aXQgPSBmc2xfdXNiMl9tcGM1MTIxX2V4aXQsCiB9OwogI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjOHh4eF9wZCA9IHsKKwkuaGF2ZV9zeXNpZl9yZWdzID0gMSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF91c2IyX21waF9kcl9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItbXBoIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLWRyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLW1waCIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCiAjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIiwgLmRhdGEgPSAmZnNsX3VzYjJfbXBjNTEyMV9wZCwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOTkwZjA2Yi4uMmU5NjAyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC04NjEsNiArODYxLDcgQEAKIAkJCURCRygiZGV2ICVkIGVwJWQgbWF4cGFja2V0ICVkXG4iLAogCQkJCXVkZXYtPmRldm51bSwgZXBudW0sIGVwLT5tYXhwYWNrZXQpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWtmcmVlKGVwKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCBkZjU1OGY2Li4zZTgyMTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTMwOCwxMSArMzA4LDggQEAKIC8qIFJpbmcgdGhlIGhvc3QgY29udHJvbGxlciBkb29yYmVsbCBhZnRlciBwbGFjaW5nIGEgY29tbWFuZCBvbiB0aGUgcmluZyAqLwogdm9pZCB4aGNpX3JpbmdfY21kX2RiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKLQl1MzIgdGVtcDsKLQogCXhoY2lfZGJnKHhoY2ksICIvLyBEaW5nIGRvbmchXG4iKTsKLQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSkgJiBEQl9NQVNLOwotCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAgfCBEQl9UQVJHRVRfSE9TVCwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pOworCXhoY2lfd3JpdGVsKHhoY2ksIERCX1ZBTFVFX0hPU1QsICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKIAkvKiBGbHVzaCBQQ0kgcG9zdGVkIHdyaXRlcyAqLwogCXhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pOwogfQpAQCAtMzIyLDI2ICszMTksMjQgQEAKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LAogCQl1bnNpZ25lZCBpbnQgc3RyZWFtX2lkKQogewotCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOwotCXVuc2lnbmVkIGludCBlcF9zdGF0ZTsKLQl1MzIgZmllbGQ7CiAJX191MzIgX19pb21lbSAqZGJfYWRkciA9ICZ4aGNpLT5kYmEtPmRvb3JiZWxsW3Nsb3RfaWRdOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJdW5zaWduZWQgaW50IGVwX3N0YXRlID0gZXAtPmVwX3N0YXRlOwogCi0JZXAgPSAmeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKLQllcF9zdGF0ZSA9IGVwLT5lcF9zdGF0ZTsKIAkvKiBEb24ndCByaW5nIHRoZSBkb29yYmVsbCBmb3IgdGhpcyBlbmRwb2ludCBpZiB0aGVyZSBhcmUgcGVuZGluZwotCSAqIGNhbmNlbGxhdGlvbnMgYmVjYXVzZSB0aGUgd2UgZG9uJ3Qgd2FudCB0byBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KKwkgKiBjYW5jZWxsYXRpb25zIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KIAkgKiBXZSBkb24ndCB3YW50IHRvIHJlc3RhcnQgYW55IHN0cmVhbSByaW5ncyBpZiB0aGVyZSdzIGEgc2V0IGRlcXVldWUKIAkgKiBwb2ludGVyIGNvbW1hbmQgcGVuZGluZyBiZWNhdXNlIHRoZSBkZXZpY2UgY2FuIGNob29zZSB0byBzdGFydCBhbnkKIAkgKiBzdHJlYW0gb25jZSB0aGUgZW5kcG9pbnQgaXMgb24gdGhlIEhXIHNjaGVkdWxlLgogCSAqIEZJWE1FIC0gY2hlY2sgYWxsIHRoZSBzdHJlYW0gcmluZ3MgZm9yIHBlbmRpbmcgY2FuY2VsbGF0aW9ucy4KIAkgKi8KLQlpZiAoIShlcF9zdGF0ZSAmIEVQX0hBTFRfUEVORElORykgJiYgIShlcF9zdGF0ZSAmIFNFVF9ERVFfUEVORElORykKLQkJCSYmICEoZXBfc3RhdGUgJiBFUF9IQUxURUQpKSB7Ci0JCWZpZWxkID0geGhjaV9yZWFkbCh4aGNpLCBkYl9hZGRyKSAmIERCX01BU0s7Ci0JCWZpZWxkIHw9IEVQSV9UT19EQihlcF9pbmRleCkgfCBTVFJFQU1fSURfVE9fREIoc3RyZWFtX2lkKTsKLQkJeGhjaV93cml0ZWwoeGhjaSwgZmllbGQsIGRiX2FkZHIpOwotCX0KKwlpZiAoKGVwX3N0YXRlICYgRVBfSEFMVF9QRU5ESU5HKSB8fCAoZXBfc3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpIHx8CisJICAgIChlcF9zdGF0ZSAmIEVQX0hBTFRFRCkpCisJCXJldHVybjsKKwl4aGNpX3dyaXRlbCh4aGNpLCBEQl9WQUxVRShlcF9pbmRleCwgc3RyZWFtX2lkKSwgZGJfYWRkcik7CisJLyogVGhlIENQVSBoYXMgYmV0dGVyIHRoaW5ncyB0byBkbyBhdCB0aGlzIHBvaW50IHRoYW4gd2FpdCBmb3IgYQorCSAqIHdyaXRlLXBvc3RpbmcgZmx1c2guICBJdCdsbCBnZXQgdGhlcmUgc29vbiBlbm91Z2guCisJICovCiB9CiAKIC8qIFJpbmcgdGhlIGRvb3JiZWxsIGZvciBhbnkgcmluZ3Mgd2l0aCBwZW5kaW5nIFVSQnMgKi8KQEAgLTExODgsNyArMTE4Myw3IEBACiAKIAlhZGRyID0gJnhoY2ktPm9wX3JlZ3MtPnBvcnRfc3RhdHVzX2Jhc2UgKyBOVU1fUE9SVF9SRUdTICogKHBvcnRfaWQgLSAxKTsKIAl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBhZGRyKTsKLQlpZiAoKHRlbXAgJiBQT1JUX0NPTk5FQ1QpICYmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkpIHsKKwlpZiAoaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9TVVNQRU5ERUQpIHsKIAkJeGhjaV9kYmcoeGhjaSwgInJlc3VtZSByb290IGh1YlxuIik7CiAJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CiAJfQpAQCAtMTcxMCw4ICsxNzA1LDcgQEAKIAkJLyogT3RoZXJzIGFscmVhZHkgaGFuZGxlZCBhYm92ZSAqLwogCQlicmVhazsKIAl9Ci0JZGV2X2RiZygmdGQtPnVyYi0+ZGV2LT5kZXYsCi0JCQkiZXAgJSN4IC0gYXNrZWQgZm9yICVkIGJ5dGVzLCAiCisJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIGFza2VkIGZvciAlZCBieXRlcywgIgogCQkJIiVkIGJ5dGVzIHVudHJhbnNmZXJyZWRcbiIsCiAJCQl0ZC0+dXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTIzODksNyArMjM4Myw4IEBACiAJfQogCXhoY2lfZGJnKHhoY2ksICJcbiIpOwogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJWQsIHNnbGlzdCB1c2VkLCBudW1fdHJicyA9ICVkXG4iLAorCQl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gdXJiIGxlbiA9ICVkLCBzZ2xpc3QgdXNlZCwgIgorCQkJCSJudW1fdHJicyA9ICVkXG4iLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQkJbnVtX3RyYnMpOwpAQCAtMjQxNCwxNCArMjQwOSwxNyBAQAogCiBzdGF0aWMgdm9pZCBnaXZlYmFja19maXJzdF90cmIoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LCB1bnNpZ25lZCBpbnQgc3RyZWFtX2lkLCBpbnQgc3RhcnRfY3ljbGUsCi0JCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmIsIHN0cnVjdCB4aGNpX3RkICp0ZCkKKwkJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnN0YXJ0X3RyYikKIHsKIAkvKgogCSAqIFBhc3MgYWxsIHRoZSBUUkJzIHRvIHRoZSBoYXJkd2FyZSBhdCBvbmNlIGFuZCBtYWtlIHN1cmUgdGhpcyB3cml0ZQogCSAqIGlzbid0IHJlb3JkZXJlZC4KIAkgKi8KIAl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOworCWlmIChzdGFydF9jeWNsZSkKKwkJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKKwllbHNlCisJCXN0YXJ0X3RyYi0+ZmllbGRbM10gJj0gfjB4MTsKIAl4aGNpX3JpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHN0cmVhbV9pZCk7CiB9CiAKQEAgLTI0NDksNyArMjQ0Nyw3IEBACiAJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgogCSAqLwogCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7Ci0JCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKIAkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgogCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCkBAIC0yNTUxLDkgKzI1NDksMTEgQEAKIAkJdTMyIHJlbWFpbmRlciA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjYyNSw3ICsyNjI1LDcgQEAKIAogCWNoZWNrX3RyYl9tYXRoKHVyYiwgbnVtX3RyYnMsIHJ1bm5pbmdfdG90YWwpOwogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCi0JCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiLCB0ZCk7CisJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY3MSw3ICsyNjcxLDggQEAKIAkvKiBGSVhNRTogdGhpcyBkb2Vzbid0IGRlYWwgd2l0aCBVUkJfWkVST19QQUNLRVQgLSBuZWVkIG9uZSBtb3JlICovCiAKIAlpZiAoIWluX2ludGVycnVwdCgpKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiZXAgJSN4IC0gdXJiIGxlbiA9ICUjeCAoJWQpLCBhZGRyID0gJSNsbHgsIG51bV90cmJzID0gJWRcbiIsCisJCXhoY2lfZGJnKHhoY2ksICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksICIKKwkJCQkiYWRkciA9ICUjbGx4LCBudW1fdHJicyA9ICVkXG4iLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjcxMSw5ICsyNzEyLDExIEBACiAJCWZpZWxkID0gMDsKIAogCQkvKiBEb24ndCBjaGFuZ2UgdGhlIGN5Y2xlIGJpdCBvZiB0aGUgZmlyc3QgVFJCIHVudGlsIGxhdGVyICovCi0JCWlmIChmaXJzdF90cmIpCisJCWlmIChmaXJzdF90cmIpIHsKIAkJCWZpcnN0X3RyYiA9IGZhbHNlOwotCQllbHNlCisJCQlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJCQlmaWVsZCB8PSAweDE7CisJCX0gZWxzZQogCQkJZmllbGQgfD0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAKIAkJLyogQ2hhaW4gYWxsIHRoZSBUUkJzIHRvZ2V0aGVyOyBjbGVhciB0aGUgY2hhaW4gYml0IGluIHRoZSBsYXN0CkBAIC0yNzU3LDcgKzI3NjAsNyBAQAogCiAJY2hlY2tfdHJiX21hdGgodXJiLCBudW1fdHJicywgcnVubmluZ190b3RhbCk7CiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yODE4LDEzICsyODIxLDE3IEBACiAJLyogUXVldWUgc2V0dXAgVFJCIC0gc2VlIHNlY3Rpb24gNi40LjEuMi4xICovCiAJLyogRklYTUUgYmV0dGVyIHdheSB0byB0cmFuc2xhdGUgc2V0dXBfcGFja2V0IGludG8gdHdvIHUzMiBmaWVsZHM/ICovCiAJc2V0dXAgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwlmaWVsZCA9IDA7CisJZmllbGQgfD0gVFJCX0lEVCB8IFRSQl9UWVBFKFRSQl9TRVRVUCk7CisJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCWZpZWxkIHw9IDB4MTsKIAlxdWV1ZV90cmIoeGhjaSwgZXBfcmluZywgZmFsc2UsIHRydWUsCiAJCQkvKiBGSVhNRSBlbmRpYW5uZXNzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJpdGUgbXkgYXNzIGhlcmUuICovCiAJCQlzZXR1cC0+YlJlcXVlc3RUeXBlIHwgc2V0dXAtPmJSZXF1ZXN0IDw8IDggfCBzZXR1cC0+d1ZhbHVlIDw8IDE2LAogCQkJc2V0dXAtPndJbmRleCB8IHNldHVwLT53TGVuZ3RoIDw8IDE2LAogCQkJVFJCX0xFTig4KSB8IFRSQl9JTlRSX1RBUkdFVCgwKSwKIAkJCS8qIEltbWVkaWF0ZSBkYXRhIGluIHBvaW50ZXIgKi8KLQkJCVRSQl9JRFQgfCBUUkJfVFlQRShUUkJfU0VUVVApKTsKKwkJCWZpZWxkKTsKIAogCS8qIElmIHRoZXJlJ3MgZGF0YSwgcXVldWUgZGF0YSBUUkJzICovCiAJZmllbGQgPSAwOwpAQCAtMjg1OSw3ICsyODY2LDcgQEAKIAkJCWZpZWxkIHwgVFJCX0lPQyB8IFRSQl9UWVBFKFRSQl9TVEFUVVMpIHwgZXBfcmluZy0+Y3ljbGVfc3RhdGUpOwogCiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCAwLAotCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYiwgdGQpOworCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5MDAsNiArMjkwNyw3IEBACiAJaW50IHJ1bm5pbmdfdG90YWwsIHRyYl9idWZmX2xlbiwgdGRfbGVuLCB0ZF9yZW1haW5fbGVuLCByZXQ7CiAJdTY0IHN0YXJ0X2FkZHIsIGFkZHI7CiAJaW50IGksIGo7CisJYm9vbCBtb3JlX3RyYnNfY29taW5nOwogCiAJZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0ucmluZzsKIApAQCAtMjkxMCw3ICsyOTE4LDcgQEAKIAl9CiAKIAlpZiAoIWluX2ludGVycnVwdCgpKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiZXAgJSN4IC0gdXJiIGxlbiA9ICUjeCAoJWQpLCIKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwiCiAJCQkJIiBhZGRyID0gJSNsbHgsIG51bV90ZHMgPSAlZFxuIiwKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjk1MCw3ICsyOTU4LDEwIEBACiAJCQkJZmllbGQgfD0gVFJCX1RZUEUoVFJCX0lTT0MpOwogCQkJCS8qIEFzc3VtZSBVUkJfSVNPX0FTQVAgaXMgc2V0ICovCiAJCQkJZmllbGQgfD0gVFJCX1NJQTsKLQkJCQlpZiAoaSA+IDApCisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJCQkJCWZpZWxkIHw9IDB4MTsKKwkJCQl9IGVsc2UKIAkJCQkJZmllbGQgfD0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAJCQkJZmlyc3RfdHJiID0gZmFsc2U7CiAJCQl9IGVsc2UgewpAQCAtMjk2NSw5ICsyOTc2LDExIEBACiAJCQkgKi8KIAkJCWlmIChqIDwgdHJic19wZXJfdGQgLSAxKSB7CiAJCQkJZmllbGQgfD0gVFJCX0NIQUlOOworCQkJCW1vcmVfdHJic19jb21pbmcgPSB0cnVlOwogCQkJfSBlbHNlIHsKIAkJCQl0ZC0+bGFzdF90cmIgPSBlcF9yaW5nLT5lbnF1ZXVlOwogCQkJCWZpZWxkIHw9IFRSQl9JT0M7CisJCQkJbW9yZV90cmJzX2NvbWluZyA9IGZhbHNlOwogCQkJfQogCiAJCQkvKiBDYWxjdWxhdGUgVFJCIGxlbmd0aCAqLwpAQCAtMjk4MCw3ICsyOTkzLDcgQEAKIAkJCWxlbmd0aF9maWVsZCA9IFRSQl9MRU4odHJiX2J1ZmZfbGVuKSB8CiAJCQkJcmVtYWluZGVyIHwKIAkJCQlUUkJfSU5UUl9UQVJHRVQoMCk7Ci0JCQlxdWV1ZV90cmIoeGhjaSwgZXBfcmluZywgZmFsc2UsIGZhbHNlLAorCQkJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCBtb3JlX3RyYnNfY29taW5nLAogCQkJCWxvd2VyXzMyX2JpdHMoYWRkciksCiAJCQkJdXBwZXJfMzJfYml0cyhhZGRyKSwKIAkJCQlsZW5ndGhfZmllbGQsCkBAIC0zMDAzLDEwICszMDE2LDggQEAKIAkJfQogCX0KIAotCXdtYigpOwotCXN0YXJ0X3RyYi0+ZmllbGRbM10gfD0gc3RhcnRfY3ljbGU7Ci0KLQl4aGNpX3JpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkKTsKKwlnaXZlYmFja19maXJzdF90cmIoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkLAorCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNjQsNyArMzA3NSw3IEBACiAJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgogCSAqLwogCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7Ci0JCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKIAkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgogCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IDQ1ZTRhMzEuLjM0Y2Y0ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCkBAIC0yMjYsNyArMjI2LDggQEAKIHN0YXRpYyBpbnQgeGhjaV9zZXR1cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAkvKgogCSAqIGNhbGN1bGF0ZSBudW1iZXIgb2YgbXNpLXggdmVjdG9ycyBzdXBwb3J0ZWQuCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJCWdvdG8gZGlzYWJsZV9tc2l4OwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMTsKIAlyZXR1cm4gcmV0OwogCiBkaXNhYmxlX21zaXg6CkBAIC0yODAsNyArMjgyLDggQEAKIC8qIEZyZWUgYW55IElSUXMgYW5kIGRpc2FibGUgTVNJLVggKi8KIHN0YXRpYyB2b2lkIHhoY2lfY2xlYW51cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAl4aGNpX2ZyZWVfaXJxKHhoY2kpOwogCkBAIC0yOTIsNiArMjk1LDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMDsKIAlyZXR1cm47CiB9CiAKQEAgLTUwOCw5ICs1MTIsMTAgQEAKIAlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAl4aGNpX2hhbHQoeGhjaSk7CiAJeGhjaV9yZXNldCh4aGNpKTsKLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CisKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwogCS8qIFRlbGwgdGhlIGV2ZW50IHJpbmcgcG9sbCBmdW5jdGlvbiBub3QgdG8gcmVzY2hlZHVsZSAqLwogCXhoY2ktPnpvbWJpZSA9IDE7CkBAIC01NDQsOSArNTQ5LDEwIEBACiAKIAlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAl4aGNpX2hhbHQoeGhjaSk7Ci0JeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAorCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOworCiAJeGhjaV9kYmcoeGhjaSwgInhoY2lfc2h1dGRvd24gY29tcGxldGVkIC0gc3RhdHVzID0gJXhcbiIsCiAJCSAgICB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpKTsKIH0KQEAgLTY0Nyw2ICs2NTMsNyBAQAogCWludAkJCXJjID0gMDsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOwogCXUzMgkJCWNvbW1hbmQ7CisJaW50CQkJaTsKIAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CkBAIC02NzcsMTAgKzY4NCwxNSBAQAogCQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9Ci0JLyogc3RlcCA1OiByZW1vdmUgY29yZSB3ZWxsIHBvd2VyICovCi0JeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAorCS8qIHN0ZXAgNTogcmVtb3ZlIGNvcmUgd2VsbCBwb3dlciAqLworCS8qIHN5bmNocm9uaXplIGlycSB3aGVuIHVzaW5nIE1TSS1YICovCisJaWYgKHhoY2ktPm1zaXhfZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBpIDwgeGhjaS0+bXNpeF9jb3VudDsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKHhoY2ktPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCX0KKwogCXJldHVybiByYzsKIH0KIApAQCAtNjk0LDcgKzcwNiw2IEBACiB7CiAJdTMyCQkJY29tbWFuZCwgdGVtcCA9IDA7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSB4aGNpX3RvX2hjZCh4aGNpKTsKLQlzdHJ1Y3QgcGNpX2RldgkJKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAlpbnQJb2xkX3N0YXRlLCByZXR2YWw7CiAKIAlvbGRfc3RhdGUgPSBoY2QtPnN0YXRlOwpAQCAtNzI5LDkgKzc0MCw4IEBACiAJCXhoY2lfZGJnKHhoY2ksICJTdG9wIEhDRFxuIik7CiAJCXhoY2lfaGFsdCh4aGNpKTsKIAkJeGhjaV9yZXNldCh4aGNpKTsKLQkJaWYgKGhpYmVybmF0ZWQpCi0JCQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKKwkJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CiAKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwogCQkvKiBUZWxsIHRoZSBldmVudCByaW5nIHBvbGwgZnVuY3Rpb24gbm90IHRvIHJlc2NoZWR1bGUgKi8KQEAgLTc2NSwzMCArNzc1LDYgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwotCS8qIFJlLXNldHVwIE1TSS1YICovCi0JaWYgKGhjZC0+aXJxKQotCQlmcmVlX2lycShoY2QtPmlycSwgaGNkKTsKLQloY2QtPmlycSA9IC0xOwotCi0JcmV0dmFsID0geGhjaV9zZXR1cF9tc2l4KHhoY2kpOwotCWlmIChyZXR2YWwpCi0JCS8qIGZhbGwgYmFjayB0byBtc2kqLwotCQlyZXR2YWwgPSB4aGNpX3NldHVwX21zaSh4aGNpKTsKLQotCWlmIChyZXR2YWwpIHsKLQkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQl4aGNpX2Vycih4aGNpLCAicmVxdWVzdCBpbnRlcnJ1cHQgJWQgZmFpbGVkXG4iLAotCQkJCQlwZGV2LT5pcnEpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCQloY2QtPmlycSA9IHBkZXYtPmlycTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAkvKiBzdGVwIDQ6IHNldCBSdW4vU3RvcCBiaXQgKi8KIAljb21tYW5kID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+Y29tbWFuZCk7CiAJY29tbWFuZCB8PSBDTURfUlVOOwpAQCAtMjQ0NSw4ICsyNDMxLDEyIEBACiAJCXhoY2lfZXJyKHhoY2ksICJFcnJvciB3aGlsZSBhc3NpZ25pbmcgZGV2aWNlIHNsb3QgSURcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JLyogeGhjaV9hbGxvY192aXJ0X2RldmljZSgpIGRvZXMgbm90IHRvdWNoIHJpbmdzOyBubyBuZWVkIHRvIGxvY2sgKi8KLQlpZiAoIXhoY2lfYWxsb2NfdmlydF9kZXZpY2UoeGhjaSwgeGhjaS0+c2xvdF9pZCwgdWRldiwgR0ZQX0tFUk5FTCkpIHsKKwkvKiB4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKCkgZG9lcyBub3QgdG91Y2ggcmluZ3M7IG5vIG5lZWQgdG8gbG9jay4KKwkgKiBVc2UgR0ZQX05PSU8sIHNpbmNlIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tCisJICogeGhjaV9kaXNjb3Zlcl9vcl9yZXNldF9kZXZpY2UoKSwgd2hpY2ggbWF5IGJlIGNhbGxlZCBhcyBwYXJ0IG9mCisJICogbWFzcyBzdG9yYWdlIGRyaXZlciBlcnJvciBoYW5kbGluZy4KKwkgKi8KKwlpZiAoIXhoY2lfYWxsb2NfdmlydF9kZXZpY2UoeGhjaSwgeGhjaS0+c2xvdF9pZCwgdWRldiwgR0ZQX05PSU8pKSB7CiAJCS8qIERpc2FibGUgc2xvdCwgaWYgd2UgY2FuIGRvIGl0IHdpdGhvdXQgbWVtIGFsbG9jICovCiAJCXhoY2lfd2Fybih4aGNpLCAiQ291bGQgbm90IGFsbG9jYXRlIHhIQ0kgVVNCIGRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCAxNzBjMzY3Li43ZjIzNmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNDM2LDIyICs0MzYsMTggQEAKIC8qKgogICogc3RydWN0IGRvb3JiZWxsX2FycmF5CiAgKgorICogQml0cyAgMCAtICA3OiBFbmRwb2ludCB0YXJnZXQKKyAqIEJpdHMgIDggLSAxNTogUnN2ZFoKKyAqIEJpdHMgMTYgLSAzMTogU3RyZWFtIElECisgKgogICogU2VjdGlvbiA1LjYKICAqLwogc3RydWN0IHhoY2lfZG9vcmJlbGxfYXJyYXkgewogCXUzMglkb29yYmVsbFsyNTZdOwogfTsKIAotI2RlZmluZQlEQl9UQVJHRVRfTUFTSwkJMHhGRkZGRkYwMAotI2RlZmluZQlEQl9TVFJFQU1fSURfTUFTSwkweDAwMDBGRkZGCi0jZGVmaW5lCURCX1RBUkdFVF9IT1NUCQkweDAKLSNkZWZpbmUJREJfU1RSRUFNX0lEX0hPU1QJMHgwCi0jZGVmaW5lCURCX01BU0sJCQkoMHhmZiA8PCA4KQotCi0vKiBFbmRwb2ludCBUYXJnZXQgLSBiaXRzIDA6NyAqLwotI2RlZmluZSBFUElfVE9fREIocCkJCSgoKHApICsgMSkgJiAweGZmKQotI2RlZmluZSBTVFJFQU1fSURfVE9fREIocCkJKCgocCkgJiAweGZmZmYpIDw8IDE2KQotCisjZGVmaW5lIERCX1ZBTFVFKGVwLCBzdHJlYW0pCSgoKChlcCkgKyAxKSAmIDB4ZmYpIHwgKChzdHJlYW0pIDw8IDE2KSkKKyNkZWZpbmUgREJfVkFMVUVfSE9TVAkJMHgwMDAwMDAwMAogCiAvKioKICAqIHN0cnVjdCB4aGNpX3Byb3RvY29sX2NhcHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCmluZGV4IDE3MzJkOWIuLjE2MTZhZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpAQCAtNDUsNyArNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBjaGFuZ2VfY29sb3Ioc3RydWN0IHVzYl9sZWQgKmxlZCkKIHsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAogCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwppbmRleCA0ZmYyMTU4Li5mN2EyMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTc3Niw3ICs3NzYsNiBAQAogCXsgVVNCX0RFVklDRSgweDA1NTcsIDB4MjAwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzI5LCAweDEyODQpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTI5MywgMHgwMDAyKSB9LAotCXsgVVNCX0RFVklDRSgweDEyOTMsIDB4MDAwMikgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMDIpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggZWViYTIyOC4uOWQ0OWQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtNDA0LDYgKzQwNCw3IEBACiAJCW11c2ItPnhjZWl2LT5zZXRfcG93ZXIgPSBiZmluX211c2Jfc2V0X3Bvd2VyOwogCiAJbXVzYi0+aXNyID0gYmxhY2tmaW5faW50ZXJydXB0OworCW11c2ItPmRvdWJsZV9idWZmZXJfbm90X29rID0gdHJ1ZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggMDdjZjM5NC4uNTRhOGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0xMjgsMTIgKzEyOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG11c2IgKmRldl90b19tdXNiKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLSNpZmRlZiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QKLQkvKiB1c2Jjb3JlIGluc2lzdHMgZGV2LT5kcml2ZXJfZGF0YSBpcyBhICJzdHJ1Y3QgaGNkICoiICovCi0JcmV0dXJuIGhjZF90b19tdXNiKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKLSNlbHNlCiAJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotI2VuZGlmCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODc2LDEwICsxODcxLDkgQEAKIAltdXNiID0ga3phbGxvYyhzaXplb2YgKm11c2IsIEdGUF9LRVJORUwpOwogCWlmICghbXVzYikKIAkJcmV0dXJuIE5VTEw7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgbXVzYik7CiAKICNlbmRpZgotCisJZGV2X3NldF9kcnZkYXRhKGRldiwgbXVzYik7CiAJbXVzYi0+bXJlZ3MgPSBtYmFzZTsKIAltdXNiLT5jdHJsX2Jhc2UgPSBtYmFzZTsKIAltdXNiLT5uSXJxID0gLUVOT0RFVjsKQEAgLTIxOTEsNyArMjE4NSw3IEBACiAJdm9pZCBfX2lvbWVtCSpiYXNlOwogCiAJaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghaW9tZW0gfHwgaXJxID09IDApCisJaWYgKCFpb21lbSB8fCBpcnEgPD0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAliYXNlID0gaW9yZW1hcChpb21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9tZW0pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCmluZGV4IGQwYzIzNmYuLmQ3NGE4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaApAQCAtNDg4LDYgKzQ4OCwxOCBAQAogCXVuc2lnbmVkCQlzZXRfYWRkcmVzczoxOwogCXVuc2lnbmVkCQl0ZXN0X21vZGU6MTsKIAl1bnNpZ25lZAkJc29mdGNvbm5lY3Q6MTsKKwkvKgorCSAqIEZJWE1FOiBSZW1vdmUgdGhpcyBmbGFnLgorCSAqCisJICogVGhpcyBpcyBvbmx5IGFkZGVkIHRvIGFsbG93IEJsYWNrZmluIHRvIHdvcmsKKwkgKiB3aXRoIGN1cnJlbnQgZHJpdmVyLiBGb3Igc29tZSB1bmtub3duIHJlYXNvbgorCSAqIEJsYWNrZmluIGRvZXNuJ3Qgd29yayB3aXRoIGRvdWJsZSBidWZmZXJpbmcKKwkgKiBhbmQgdGhhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKwkgKgorCSAqIFdlIGFkZGVkIHRoaXMgZmxhZyB0byBmb3JjZWZ1bGx5IGRpc2FibGUgZG91YmxlCisJICogYnVmZmVyaW5nIHVudGlsIHdlIGdldCBpdCB3b3JraW5nLgorCSAqLworCXVuc2lnbmVkICAgICAgICAgICAgICAgIGRvdWJsZV9idWZmZXJfbm90X29rOjEgX19kZXByZWNhdGVkOwogCiAJdTgJCQlhZGRyZXNzOwogCXU4CQkJdGVzdF9tb2RlX25yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oCmluZGV4IDkxNjA2NWIuLjNhOTdjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKQEAgLTE2OSw2ICsxNjksOSBAQAogCQkJCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsCiAJCQkJCQkJdTMyIGxlbmd0aCk7CiAJaW50CQkJKCpjaGFubmVsX2Fib3J0KShzdHJ1Y3QgZG1hX2NoYW5uZWwgKik7CisJaW50CQkJKCppc19jb21wYXRpYmxlKShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJCQkJdTE2IG1heHBhY2tldCwKKwkJCQkJCQl2b2lkICpidWYsIHUzMiBsZW5ndGgpOwogfTsKIAogLyogY2FsbGVkIGFmdGVyIGNoYW5uZWxfcHJvZ3JhbSgpLCBtYXkgaW5kaWNhdGUgYSBmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IGVkNThjNmMuLjJmZTMwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTkyLDExICs5MiwzMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSAoaXNfZG1hX2NhcGFibGUoKSAmJiBcCisJCQkJCShyZXEtPm1hcF9zdGF0ZSAhPSBVTl9NQVBQRUQpKQorCiAvKiBNYXBzIHRoZSBidWZmZXIgdG8gZG1hICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKLQkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKKwkJCXN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9lcCAqbXVzYl9lcCkKIHsKKwlpbnQgY29tcGF0aWJsZSA9IHRydWU7CisJc3RydWN0IGRtYV9jb250cm9sbGVyICpkbWEgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKKworCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFVOX01BUFBFRDsKKworCWlmICghaXNfZG1hX2NhcGFibGUoKSB8fCAhbXVzYl9lcC0+ZG1hKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBETUEgZW5naW5lIGNhbiBoYW5kbGUgdGhpcyByZXF1ZXN0LgorCSAqIERNQSBjb2RlIG11c3QgcmVqZWN0IHRoZSBVU0IgcmVxdWVzdCBleHBsaWNpdGx5LgorCSAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIG1hcCB0aGUgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZG1hLT5pc19jb21wYXRpYmxlKQorCQljb21wYXRpYmxlID0gZG1hLT5pc19jb21wYXRpYmxlKG11c2JfZXAtPmRtYSwKKwkJCQltdXNiX2VwLT5wYWNrZXRfc3osIHJlcXVlc3QtPnJlcXVlc3QuYnVmLAorCQkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoKTsKKwlpZiAoIWNvbXBhdGlibGUpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gZG1hX21hcF9zaW5nbGUoCiAJCQkJbXVzYi0+Y29udHJvbGxlciwKQEAgLTEwNSw3ICsxMjcsNyBAQAogCQkJCXJlcXVlc3QtPnR4CiAJCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDE7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IE1VU0JfTUFQUEVEOwogCX0gZWxzZSB7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKQEAgLTExMyw3ICsxMzUsNyBAQAogCQkJcmVxdWVzdC0+dHgKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFBSRV9NQVBQRUQ7CiAJfQogfQogCkBAIC0xMjEsMTEgKzE0MywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHVubWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKIAkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKKwlpZiAoIWlzX2J1ZmZlcl9tYXBwZWQocmVxdWVzdCkpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCURCRygyMCwgIm5vdCB1bm1hcHBpbmcgYSBuZXZlciBtYXBwZWQgYnVmZmVyXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAocmVxdWVzdC0+bWFwcGVkKSB7CisJaWYgKHJlcXVlc3QtPm1hcF9zdGF0ZSA9PSBNVVNCX01BUFBFRCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKIAkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoLApAQCAtMTMzLDE2ICsxNTgsMTUgQEAKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKLQkJcmVxdWVzdC0+bWFwcGVkID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSB7IC8qIFBSRV9NQVBQRUQgKi8KIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobXVzYi0+Y29udHJvbGxlciwKIAkJCXJlcXVlc3QtPnJlcXVlc3QuZG1hLAogCQkJcmVxdWVzdC0+cmVxdWVzdC5sZW5ndGgsCiAJCQlyZXF1ZXN0LT50eAogCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCTogRE1BX0ZST01fREVWSUNFKTsKLQogCX0KKwlyZXF1ZXN0LT5tYXBfc3RhdGUgPSBVTl9NQVBQRUQ7CiB9CiAKIC8qCkBAIC0xNzIsOCArMTk2LDcgQEAKIAogCWVwLT5idXN5ID0gMTsKIAlzcGluX3VubG9jaygmbXVzYi0+bG9jayk7Ci0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgZXAtPmRtYSkKLQkJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOworCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAlpZiAocmVxdWVzdC0+c3RhdHVzID09IDApCiAJCURCRyg1LCAiJXMgZG9uZSByZXF1ZXN0ICVwLCAgJWQvJWRcbiIsCiAJCQkJZXAtPmVuZF9wb2ludC5uYW1lLCByZXF1ZXN0LApAQCAtMzM1LDcgKzM1OCw3IEBACiAJCQljc3IpOwogCiAjaWZuZGVmCUNPTkZJR19NVVNCX1BJT19PTkxZCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmMgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKIAkJc2l6ZV90IHJlcXVlc3Rfc2l6ZTsKIApAQCAtNDM2LDggKzQ1OSw3IEBACiAJCSAqIFVubWFwIHRoZSBkbWEgYnVmZmVyIGJhY2sgdG8gY3B1IGlmIGRtYSBjaGFubmVsCiAJCSAqIHByb2dyYW1taW5nIGZhaWxzCiAJCSAqLwotCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpCi0JCQl1bm1hcF9kbWFfYnVmZmVyKHJlcSwgbXVzYik7CisJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQltdXNiX3dyaXRlX2ZpZm8obXVzYl9lcC0+aHdfZXAsIGZpZm9fY291bnQsCiAJCQkJKHU4ICopIChyZXF1ZXN0LT5idWYgKyByZXF1ZXN0LT5hY3R1YWwpKTsKQEAgLTYyNyw3ICs2NDksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGlzX2NwcGlfZW5hYmxlZCgpICYmIG11c2JfZXAtPmRtYSkgeworCWlmIChpc19jcHBpX2VuYWJsZWQoKSAmJiBpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJc3RydWN0IGRtYV9jb250cm9sbGVyCSpjID0gbXVzYi0+ZG1hX2NvbnRyb2xsZXI7CiAJCXN0cnVjdCBkbWFfY2hhbm5lbAkqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIApAQCAtNjU4LDcgKzY4MCw3IEBACiAJCWxlbiA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENPVU5UKTsKIAkJaWYgKHJlcXVlc3QtPmFjdHVhbCA8IHJlcXVlc3QtPmxlbmd0aCkgewogI2lmZGVmIENPTkZJR19VU0JfSU5WRU5UUkFfRE1BCi0JCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwkJCWlmIChpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmM7CiAJCQkJc3RydWN0IGRtYV9jaGFubmVsCSpjaGFubmVsOwogCQkJCWludAkJCXVzZV9kbWEgPSAwOwpAQCAtNzQyLDcgKzc2NCw3IEBACiAJCQlmaWZvX2NvdW50ID0gbWluX3QodW5zaWduZWQsIGxlbiwgZmlmb19jb3VudCk7CiAKICNpZmRlZglDT05GSUdfVVNCX1RVU0JfT01BUF9ETUEKLQkJCWlmICh0dXNiX2RtYV9vbWFwKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQlpZiAodHVzYl9kbWFfb21hcCgpICYmIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXN0cnVjdCBkbWFfY29udHJvbGxlciAqYyA9IG11c2ItPmRtYV9jb250cm9sbGVyOwogCQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIAkJCQl1MzIgZG1hX2FkZHIgPSByZXF1ZXN0LT5kbWEgKyByZXF1ZXN0LT5hY3R1YWw7CkBAIC03NjIsNyArNzg0LDcgQEAKIAkJCSAqIHByb2dyYW1taW5nIGZhaWxzLiBUaGlzIGJ1ZmZlciBpcyBtYXBwZWQgaWYgdGhlCiAJCQkgKiBjaGFubmVsIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bAogCQkJICovCi0JCQkgaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQkgaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQkJCS8qCkBAIC05ODksNyArMTAxMSwxMSBAQAogCQkvKiBTZXQgVFhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkJICogdG8gZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG1vZGUuCiAJCSAqLwotCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6IHwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKKwkJaWYgKG11c2ItPmRvdWJsZV9idWZmZXJfbm90X29rKQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKKwkJZWxzZQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIG11c2JfZXAtPnBhY2tldF9zegorCQkJCQl8IChtdXNiX2VwLT5oYl9tdWx0IDw8IDExKSk7CiAKIAkJY3NyID0gTVVTQl9UWENTUl9NT0RFIHwgTVVTQl9UWENTUl9DTFJEQVRBVE9HOwogCQlpZiAobXVzYl9yZWFkdyhyZWdzLCBNVVNCX1RYQ1NSKQpAQCAtMTAyNSw3ICsxMDUxLDExIEBACiAJCS8qIFNldCBSWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAogCQkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgbW9kZS4KIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBtdXNiX2VwLT5wYWNrZXRfc3ogfCAobXVzYl9lcC0+aGJfbXVsdCA8PCAxMSkpOworCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOworCQllbHNlCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6CisJCQkJCXwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKIAogCQkvKiBmb3JjZSBzaGFyZWQgZmlmbyB0byBPVVQtb25seSBtb2RlICovCiAJCWlmIChod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKQEAgLTEyMTQsMTAgKzEyNDQsNyBAQAogCXJlcXVlc3QtPmVwbnVtID0gbXVzYl9lcC0+Y3VycmVudF9lcG51bTsKIAlyZXF1ZXN0LT50eCA9IG11c2JfZXAtPmlzX2luOwogCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKQotCQltYXBfZG1hX2J1ZmZlcihyZXF1ZXN0LCBtdXNiKTsKLQllbHNlCi0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJbWFwX2RtYV9idWZmZXIocmVxdWVzdCwgbXVzYiwgbXVzYl9lcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgbG9ja2ZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oCmluZGV4IGRlYzhkYzAuLmE1NTM1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmgKQEAgLTM1LDEzICszNSwxOSBAQAogI2lmbmRlZiBfX01VU0JfR0FER0VUX0gKICNkZWZpbmUgX19NVVNCX0dBREdFVF9ICiAKK2VudW0gYnVmZmVyX21hcF9zdGF0ZSB7CisJVU5fTUFQUEVEID0gMCwKKwlQUkVfTUFQUEVELAorCU1VU0JfTUFQUEVECit9OworCiBzdHJ1Y3QgbXVzYl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJcmVxdWVzdDsKIAlzdHJ1Y3QgbXVzYl9lcAkJKmVwOwogCXN0cnVjdCBtdXNiCQkqbXVzYjsKIAl1OCB0eDsJCQkvKiBlbmRwb2ludCBkaXJlY3Rpb24gKi8KIAl1OCBlcG51bTsKLQl1OCBtYXBwZWQ7CisJZW51bSBidWZmZXJfbWFwX3N0YXRlIG1hcF9zdGF0ZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG11c2JfcmVxdWVzdCAqdG9fbXVzYl9yZXF1ZXN0KHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNGQ1YmNiNC4uMGY1MjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC02MDksNyArNjA5LDcgQEAKIAkvKiBTZXQgUlhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZS4KIAkgKi8KLQlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCW11c2Jfd3JpdGV3KGVwLT5yZWdzLCBNVVNCX1JYTUFYUCwgZXAtPm1heF9wYWNrZXRfc3pfcngpOwogCWVsc2UKIAkJbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLApAQCAtNzg0LDE0ICs3ODQsMTMgQEAKIAkJLyogcHJvdG9jb2wvZW5kcG9pbnQvaW50ZXJ2YWwvTkFLbGltaXQgKi8KIAkJaWYgKGVwbnVtKSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYVFlQRSwgcWgtPnR5cGVfcmVnKTsKLQkJCWlmIChjYW5fYnVsa19zcGxpdChtdXNiLCBxaC0+dHlwZSkpCisJCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWE1BWFAsCi0JCQkJCXBhY2tldF9zegotCQkJCQl8ICgoaHdfZXAtPm1heF9wYWNrZXRfc3pfdHggLwotCQkJCQkJcGFja2V0X3N6KSAtIDEpIDw8IDExKTsKKwkJCQkJCWh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKIAkJCWVsc2UKIAkJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYTUFYUCwKLQkJCQkJcGFja2V0X3N6KTsKKwkJCQkJCXFoLT5tYXhwYWNrZXQgfAorCQkJCQkJKChxaC0+aGJfbXVsdCAtIDEpIDw8IDExKSk7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYSU5URVJWQUwsIHFoLT5pbnR2X3JlZyk7CiAJCX0gZWxzZSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX05BS0xJTUlUMCwgcWgtPmludHZfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCmluZGV4IGY3NjNkNjIuLjIxMDU2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaApAQCAtOTQsMjQgKzk0LDMzIEBACiB7CiAJbXVzYl93cml0ZXcobWJhc2UsCiAJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQUREUl9MT1cpLAotCQkoKHUxNikoKHUzMikgZG1hX2FkZHIgJiAweEZGRkYpKSk7CisJCWRtYV9hZGRyKTsKIAltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSX0hJR0gpLAotCQkoKHUxNikoKCh1MzIpIGRtYV9hZGRyID4+IDE2KSAmIDB4RkZGRikpKTsKKwkJKGRtYV9hZGRyID4+IDE2KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG11c2JfcmVhZF9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBiY2hhbm5lbCkKIHsKLQlyZXR1cm4gbXVzYl9yZWFkbChtYmFzZSwKKwl1MzIgY291bnQgPSBtdXNiX3JlYWR3KG1iYXNlLAogCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0hJR0gpKTsKKworCWNvdW50ID0gY291bnQgPDwgMTY7CisKKwljb3VudCB8PSBtdXNiX3JlYWR3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVykpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLAogCQkJCXU4IGJjaGFubmVsLCB1MzIgbGVuKQogewotCW11c2Jfd3JpdGVsKG1iYXNlLAorCW11c2Jfd3JpdGV3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVyksbGVuKTsKKwltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVF9ISUdIKSwKLQkJbGVuKTsKKwkJKGxlbiA+PiAxNikpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0JMQUNLRklOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IDlmYjg3NWQuLjlmZmM4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC0xMDMsNiArMTAzLDggQEAKIAkgIHJlcXVpcmVkIGFmdGVyIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBldmVuIGZvciBwZXJpcGhlcmFsIG9ubHkgb3IgaG9zdCBvbmx5CiAJICBtb2RlIGNvbmZpZ3VyYXRpb25zLgorCSAgVGhpcyBkcml2ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBib2FyZHMgbGlrZSB0cm91dCB3aGljaAorCSAgaGFzIGFuIGV4dGVybmFsIFBIWS4KIAogY29uZmlnIEFCODUwMF9VU0IKICAgICAgICAgdHJpc3RhdGUgIkFCODUwMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKaW5kZXggZTcwMDE0YS4uOGFjZjE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCkBAIC0xMzIsNiArMTMyLDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CiAKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJm5vcC0+b3RnLm5vdGlmaWVyKTsKKwogCXJldHVybiAwOwogZXhpdDoKIAlrZnJlZShub3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYyBiL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKaW5kZXggMDU5ZDlhYy4uNzcwZDc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCkBAIC00NSw3ICs0NSw3IEBACiAvKiBVTFBJIGhhcmRjb2RlZCBJRHMsIHVzZWQgZm9yIHByb2JpbmcgKi8KIHN0YXRpYyBzdHJ1Y3QgdWxwaV9pbmZvIHVscGlfaWRzW10gPSB7CiAJVUxQSV9JTkZPKFVMUElfSUQoMHgwNGNjLCAweDE1MDQpLCAiTlhQIElTUDE1MDQiKSwKLQlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMTkiKSwKKwlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMXgiKSwKIH07CiAKIHN0YXRpYyBpbnQgdWxwaV9zZXRfb3RnX2ZsYWdzKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKaW5kZXggNjNmN2NjNC4uN2I4ODE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKQEAgLTQ4NiwxMiArNDg2LDIyIEBACiAJaWYgKGFjdHVhbF9sZW5ndGggPj0gNCkgewogCQlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdTggcHJldl9saW5lX3N0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOwogCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQogCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoKHByaXYtPmxpbmVfc3RhdHVzIF4gcHJldl9saW5lX3N0YXR1cykgJiBDSDM0MV9CSVRfRENEKSB7CisJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCQlpZiAodHR5KQorCQkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCQkgICAgcHJpdi0+bGluZV9zdGF0dXMgJiBDSDM0MV9CSVRfRENEKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggOGQ3NzMxZC4uNzM1ZWEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNDksNyArNDksNiBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbik7Ci1zdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtODcsNyArODYsNiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODExNSkgfSwgLyogQXJ5Z29uIE5GQy9NaWZhcmUgUmVhZGVyICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTNEKSB9LCAvKiBCdXJuc2lkZSBUZWxlY29tIERlc2ttb2JpbGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0YpIH0sIC8qIFRhbXMgTWFzdGVyIEVhc3kgQ29udHJvbCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0OSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBDb21wdXRlcml6ZWQgQmF0dGVyeSBBbmFseXplciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUdibGFzdGVyIFAmUCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QikgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUd0YWxrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTU2KSB9LCAvKiBCJkcgSDMwMDAgbGluayBjYWJsZSAqLwpAQCAtMTEwLDcgKzEwOCw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzgyKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNBOCkgfSwgLyogQW1iZXIgV2lyZWxlc3MgQU1CMjU2MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNEOCkgfSwgLyogRGVrVGVjIERUQSBQbHVzIFZIRi9VSEYgQm9vc3Rlci9BdHRlbnVhdG9yICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDExKSB9LCAvKiBLeW9jZXJhIEdQUyBNb2R1bGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0MTgpIH0sIC8qIElSWiBBdXRvbWF0aW9uIFRlbGVwb3J0IFNHLTEwIEdTTS9HUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDZFKSB9LCAvKiBCRUkgVVNCIFNlbnNvciBJbnRlcmZhY2UgKFZDUCkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NzcpIH0sIC8qIEJhbGx1ZmYgUkZJRCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwpAQCAtMTY1LDggKzE2NSw3IEBACiAJLnRpb2NtZ2V0IAkJPSBjcDIxMHhfdGlvY21nZXQsCiAJLnRpb2Ntc2V0CQk9IGNwMjEweF90aW9jbXNldCwKIAkuYXR0YWNoCQkJPSBjcDIxMHhfc3RhcnR1cCwKLQkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cywKLQkuY2Fycmllcl9yYWlzZWQJCT0gY3AyMTB4X2NhcnJpZXJfcmFpc2VkCisJLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMKIH07CiAKIC8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCkBAIC03NjUsMTUgKzc2NCw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCkKLXsKLQl1bnNpZ25lZCBpbnQgY29udHJvbDsKLQljcDIxMHhfZ2V0X2NvbmZpZyhwLCBDUDIxMFhfR0VUX01ETVNUUywgJmNvbnRyb2wsIDEpOwotCWlmIChjb250cm9sICYgQ09OVFJPTF9EQ0QpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYjkyMDcwYy4uNjY2ZTVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNDU1LDcgKzQ1NSw2IEBACiBzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKQEAgLTUxMSw3ICs1MTAsNiBAQAogCS5vcGVuID0JCQkJZGlnaV9vcGVuLAogCS5jbG9zZSA9CQkJZGlnaV9jbG9zZSwKIAkuZHRyX3J0cyA9CQkJZGlnaV9kdHJfcnRzLAotCS5jYXJyaWVyX3JhaXNlZCA9CQlkaWdpX2NhcnJpZXJfcmFpc2VkLAogCS53cml0ZSA9CQkJZGlnaV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQkJZGlnaV93cml0ZV9yb29tLAogCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCQlkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCkBAIC0xMzM5LDE0ICsxMzM3LDYgQEAKIAlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIG9uICogKFRJT0NNX0RUUnxUSU9DTV9SVFMpLCAxKTsKIH0KIAotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAocHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmIFRJT0NNX0NEKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhMjY2OGQwLi5mMzQ5YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTAwLDYgKzEwMCw3IEBACiBzdGF0aWMgaW50ICAgZnRkaV9qdGFnX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgIGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICAgZnRkaV9ORElfZGV2aWNlX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCAgZnRkaV9VU0JfVUlSVF9zZXR1cChzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkICBmdGRpX0hFX1RJUkExX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogCkBAIC0xMjMsNiArMTI0LDEwIEBACiAJLnBvcnRfcHJvYmUgPSBmdGRpX0hFX1RJUkExX3NldHVwLAogfTsKIAorc3RhdGljIHN0cnVjdCBmdGRpX3Npb19xdWlyayBmdGRpX3N0bWNsaXRlX3F1aXJrID0geworCS5wcm9iZQk9IGZ0ZGlfc3RtY2xpdGVfcHJvYmUsCit9OworCiAvKgogICogVGhlIDhVMjMyQU0gaGFzIHRoZSBzYW1lIEFQSSBhcyB0aGUgc2lvIGV4Y2VwdCBmb3I6CiAgKiAtIGl0IGNhbiBzdXBwb3J0IE1VQ0ggaGlnaGVyIGJhdWRyYXRlczsgdXAgdG86CkBAIC02MTYsNiArNjIxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT0NFQU5JQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRUSV9WSUQsIFRUSV9RTDM1NVBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUNUT05fVklELCBBQ1RPTl9TUEVDVFJBUFJPX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ09OVEVDX1ZJRCwgQ09OVEVDX0NPTTFVU0JIX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCkgfSwKQEAgLTY3Niw3ICs2ODIsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUENESl9EQUMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BU0tfUkRSNDAwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoSUNPTV9JRDFfVklELCBJQ09NX0lEMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9PUENfVV9VQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMkMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyVlRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDR19IRkRVQUxfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RIT1JMQUJTX1BJRCkgfSwKQEAgLTgwMCw2ICs4MTYsOCBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ET1RFQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFFJSEFSRFdBUkVfVklELCBNSUxLWU1JU1RPTkVfSlRBR1NFUklBTF9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAorCXsgVVNCX0RFVklDRShTVF9WSUQsIFNUX1NUTUNMVDEwMzBfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX3N0bWNsaXRlX3F1aXJrIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTE2OTksNiArMTcxNywyNSBAQAogfQogCiAvKgorICogRmlyc3QgYW5kIHNlY29uZCBwb3J0IG9uIFNUTUNMaXRlYWRhcHRvcnMgaXMgcmVzZXJ2ZWQgZm9yIEpUQUcgaW50ZXJmYWNlCisgKiBhbmQgdGhlIGZvcnRoIHBvcnQgZm9yIHBpbworICovCitzdGF0aWMgaW50IGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNlcmlhbC0+ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBzZXJpYWwtPmludGVyZmFjZTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzJdKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJJZ25vcmluZyBzZXJpYWwgcG9ydCByZXNlcnZlZCBmb3IgSlRBR1xuIik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKICAqIFRoZSBNYXRyaXggT3JiaXRhbCBWSzIwNC0yNS1VU0IgaGFzIGFuIGludmFsaWQgSU4gZW5kcG9pbnQuCiAgKiBXZSBoYXZlIHRvIGNvcnJlY3QgaXQgaWYgd2Ugd2FudCB0byByZWFkIGZyb20gaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCBiZjA4NjcyLi4xMTdlOGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC01MTgsNiArNTE4LDEyIEBACiAjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAogCiAvKgorICogQWN0b24gUmVzZWFyY2ggQ29ycC4KKyAqLworI2RlZmluZSBBQ1RPTl9WSUQJCTB4MDY0NwkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQUNUT05fU1BFQ1RSQVBST19QSUQJMHgwMTAwCisKKy8qCiAgKiBDb250ZWMgcHJvZHVjdHMgKGh0dHA6Ly93d3cuY29udGVjLmNvbSkKICAqIFN1Ym1pdHRlZCBieSBEYW5pZWwgU2FuZ29ycmluCiAgKi8KQEAgLTU2OSwxMSArNTc1LDIzIEBACiAjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwogCiAvKgotICogSWNvbSBJRC0xIGRpZ2l0YWwgdHJhbnNjZWl2ZXIKKyAqIERlZmluaXRpb25zIGZvciBJY29tIEluYy4gZGV2aWNlcwogICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJQ09NX1ZJRAkJMHgwQzI2IC8qIEljb20gdmVuZG9yIElEICovCisvKiBOb3RlOiBJRC0xIGlzIGEgY29tbXVuaWNhdGlvbnMgdHJhbmNlaXZlciBmb3IgSEFNLXJhZGlvIG9wZXJhdG9ycyAqLworI2RlZmluZSBJQ09NX0lEXzFfUElECQkweDAwMDQgLyogSUQtMSBVU0IgdG8gUlMtMjMyICovCisvKiBOb3RlOiBPUEMgaXMgYW4gT3B0aW9uYWwgY2FibGUgdG8gY29ubmVjdCBhbiBJY29tIFRyYW5jZWl2ZXIgKi8KKyNkZWZpbmUgSUNPTV9PUENfVV9VQ19QSUQJMHgwMDE4IC8qIE9QQy00NzhVQywgT1BDLTExMjJVIGNsb25pbmcgY2FibGUgKi8KKy8qIE5vdGU6IElELVJQKiBkZXZpY2VzIGFyZSBJY29tIFJlcGVhdGVyIERldmljZXMgZm9yIEhBTS1yYWRpbyAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMxX1BJRAkweDAwMDkgLyogSUQtUlAyQyBBc3NldCAxIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMyX1BJRAkweDAwMEEgLyogSUQtUlAyQyBBc3NldCAyIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkRfUElECTB4MDAwQiAvKiBJRC1SUDJEIGNvbmZpZ3VyYXRpb24gcG9ydCovCisjZGVmaW5lIElDT01fSURfUlAyVlRfUElECTB4MDAwQyAvKiBJRC1SUDJWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyVlJfUElECTB4MDAwRCAvKiBJRC1SUDJWIFJlY2VpdmUgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDRLVlRfUElECTB4MDAxMCAvKiBJRC1SUDQwMDBWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlA0S1ZSX1BJRAkweDAwMTEgLyogSUQtUlA0MDAwViBSZWNlaXZlIGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyS1ZUX1BJRAkweDAwMTIgLyogSUQtUlAyMDAwViBUcmFuc21pdCBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQMktWUl9QSUQJMHgwMDEzIC8qIElELVJQMjAwMFYgUmVjZWl2ZSBjb25maWcgcG9ydCAqLwogCiAvKgogICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKQEAgLTEwMjIsNiArMTA0MCwxMiBAQAogI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCiAKIC8qCisgKiBTVE1pY3JvZWxlY3RvbmljcworICovCisjZGVmaW5lIFNUX1ZJRAkJCTB4MDQ4MworI2RlZmluZSBTVF9TVE1DTFQxMDMwX1BJRAkweDM3NDcgLyogU1QgTWljcm8gQ29ubmVjdCBMaXRlIFNUTUNMVDEwMzAgKi8KKworLyoKICAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQogICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZTY4MzNlMi4uZTRkYjVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC00NzksNiArNDc5LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayk7CiAKKy8qKgorICoJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSAtIGhhbmRsZSBhIGNoYW5nZSBvZiBjYXJyaWVyIGRldGVjdCBzdGF0ZQorICoJQHBvcnQ6IHVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBvcGVuIHBvcnQKKyAqCUB0dHk6IHR0eV9zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0aGUgcG9ydAorICoJQHN0YXR1czogbmV3IGNhcnJpZXIgZGV0ZWN0IHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKKyAqLwordm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnVzYl9wb3J0LT5wb3J0OworCisJZGJnKCIlcyAtIHBvcnQgJWQsIHN0YXR1cyAlZCIsIF9fZnVuY19fLCB1c2JfcG9ydC0+bnVtYmVyLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCWVsc2UgaWYgKHR0eSAmJiAhQ19DTE9DQUwodHR5KSkKKwkJdHR5X2hhbmd1cCh0dHkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSk7CisKIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggY2Q3NjllZi4uM2IyNDZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTI4ODksOCArMjg4OSw4IEBACiAKIAlkYmcoIiVzICVkLiVkLiVkIiwgZndfaW5mbywgcmVjLT5kYXRhWzBdLCByZWMtPmRhdGFbMV0sIGJ1aWxkKTsKIAotCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVNYWpvclZlcnNpb24gPSBmdy0+ZGF0YVswXTsKLQllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gZnctPmRhdGFbMV07CisJZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1ham9yVmVyc2lvbiA9IHJlYy0+ZGF0YVswXTsKKwllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gcmVjLT5kYXRhWzFdOwogCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVCdWlsZE51bWJlciA9IGNwdV90b19sZTE2KGJ1aWxkKTsKIAogCWZvciAocmVjID0gaWhleF9uZXh0X2JpbnJlYyhyZWMpOyByZWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggNmFiMmEzZi4uMTc4YjIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMTk5LDYgKzE5OSw3IEBACiAJCS5uYW1lCQk9ICJlcGljIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiRVBpQyBkZXZpY2UiLAorCS51c2JfZHJpdmVyCQk9ICZpb19kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IEVwaWNfcG9ydF9pZF90YWJsZSwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggMTJlZDU5NC4uOTliOTdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTEyNzUsNiArMTI3NSw3IEBACiAJCSAgIC5uYW1lID0gIml1dV9waG9lbml4IiwKIAkJICAgfSwKIAkuaWRfdGFibGUgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9ICZpdXVfZHJpdmVyLAogCS5udW1fcG9ydHMgPSAxLAogCS5idWxrX2luX3NpemUgPSA1MTIsCiAJLmJ1bGtfb3V0X3NpemUgPSA1MTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAppbmRleCAyZDhiYWY2Li5jZTEzNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTU0Niw2ICs1NDYsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl9ub19maXJtIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAtICh3aXRob3V0IGZpcm13YXJlKSIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuX3ByZV9pZHMsCiAJLm51bV9wb3J0cwkJPSAxLAogCS5hdHRhY2gJCQk9IGtleXNwYW5fZmFrZV9zdGFydHVwLApAQCAtNTU3LDYgKzU1OCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzEiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDEgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMXBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNTc5LDYgKzU4MSw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzIiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDIgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMnBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMiwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNjAxLDYgKzYwNCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzQiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fNHBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gNCwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBhMTBkZDU2Li41NTRhODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNjc5LDIyICs2NzksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0JdW5zaWduZWQgY2hhciBtb2RlbWJpdHM7Ci0KLQkvKiBJZiB3ZSBjYW4gcmVhZCB0aGUgbW9kZW0gc3RhdHVzIGFuZCB0aGUgRENEIGlzIGxvdyB0aGVuCi0JICAgY2FycmllciBpcyBub3QgcmFpc2VkIHlldCAqLwotCWlmIChrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZtb2RlbWJpdHMpID49IDApIHsKLQkJaWYgKCEobW9kZW1iaXRzICYgKDE+PjYpKSkKLQkJCXJldHVybiAwOwotCX0KLQkvKiBDYXJyaWVyIHJhaXNlZCwgb3Igd2UgZmFpbGVkIChlZyBkaXNjb25uZWN0ZWQpIHNvCi0JICAgcHJvZ3Jlc3MgYWNjb3JkaW5nbHkgKi8KLQlyZXR1cm4gMTsKLX0KLQogCiBzdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKQEAgLTg4MSw3ICs4NjUsNiBAQAogCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5kdHJfcnRzID0JCWtleXNwYW5fcGRhX2R0cl9ydHMsCi0JLmNhcnJpZXJfcmFpc2VkCT0Ja2V5c3Bhbl9wZGFfY2Fycmllcl9yYWlzZWQsCiAJLm9wZW4gPQkJCWtleXNwYW5fcGRhX29wZW4sCiAJLmNsb3NlID0JCWtleXNwYW5fcGRhX2Nsb3NlLAogCS53cml0ZSA9CQlrZXlzcGFuX3BkYV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCmluZGV4IGNmMTcxODMuLjY1MzQ2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwpAQCAtNDQsNiArNDQsNyBAQAogCQkubmFtZSA9CQkibW90by1tb2RlbSIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJm1vdG9fZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA3NDg3NzgyLi41ZjQ2ODM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zODIsNyArMzgyLDE2IEBACiAjZGVmaW5lIEhBSUVSX1ZFTkRPUl9JRAkJCQkweDIwMWUKICNkZWZpbmUgSEFJRVJfUFJPRFVDVF9DRTEwMAkJCTB4MjAwOQogCi0jZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkweDA2ODEKKy8qIENpbnRlcmlvbiAoZm9ybWVybHkgU2llbWVucykgcHJvZHVjdHMgKi8KKyNkZWZpbmUgU0lFTUVOU19WRU5ET1JfSUQJCQkJMHgwNjgxCisjZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkJMHgxZTJkCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNCQkweDAwNDcKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE1ORVQJMHgwMDQwCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNCQkweDAwNEMKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQJMHgwMDRBIC8qIHNhbWUgZm9yIEhDMjhKICovCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19FCQkJMHgwMDUxCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19QCQkJMHgwMDUyCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX1BIOAkJCTB4MDA1MwogCiAvKiBPbGl2ZXR0aSBwcm9kdWN0cyAqLwogI2RlZmluZSBPTElWRVRUSV9WRU5ET1JfSUQJCQkweDBiM2MKQEAgLTk0NCw3ICs5NTMsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDBGKSB9LAogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUXzEwMTEpfSwKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDEyKX0sCi0JeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIDB4MDA0NykgfSwKKwkvKiBDaW50ZXJpb24gKi8KKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX0UpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0VVM19QKSB9LAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9QSDgpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNKSB9LCAKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQpIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETSkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNTkVUKSB9LAorCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE0pIH0sIC8qIEhDMjggZW51bWVyYXRlcyB3aXRoIFNpZW1lbnMgb3IgQ2ludGVyaW9uIFZJRCBkZXBlbmRpbmcgb24gRlcgcmV2aXNpb24gKi8KKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNTkVUKSB9LAorCiAJeyBVU0JfREVWSUNFKE9MSVZFVFRJX1ZFTkRPUl9JRCwgT0xJVkVUVElfUFJPRFVDVF9PTElDQVJEMTAwKSB9LAogCXsgVVNCX0RFVklDRShDRUxPVF9WRU5ET1JfSUQsIENFTE9UX1BST0RVQ1RfQ1Q2ODBNKSB9LCAvKiBDVC02NTAgQ0RNQSA0NTAgMXhFVkRPIG1vZGVtICovCiAJeyBVU0JfREVWSUNFKE9OREFfVkVORE9SX0lELCBPTkRBX01UODI1VVApIH0sIC8qIE9OREEgTVQ4MjVVUCBtb2RlbSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggNWJlODY2Yi4uNzM2MTMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJLm5hbWUgPQkJIm90aTY4NTgiLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZvdGk2ODU4X2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiAJLm9wZW4gPQkJCW90aTY4NThfb3BlbiwKIAkuY2xvc2UgPQkJb3RpNjg1OF9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCA4YWU0YzZjLi4wOGM5MTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC01MCw2ICs1MCw3IEBACiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX01NWCkgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfR1BSUykgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfSENSMzMxKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9NT1RPUk9MQSkgfSwKIAl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEX1JTQVE1KSB9LAogCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRCwgQVRFTl9QUk9EVUNUX0lEKSB9LApAQCAtNjc3LDkgKzY3OCwxMSBAQAogewogCiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBzdGF0dXNfaWR4ID0gVUFSVF9TVEFURTsKIAl1OCBsZW5ndGggPSBVQVJUX1NUQVRFICsgMTsKKwl1OCBwcmV2X2xpbmVfc3RhdHVzOwogCXUxNiBpZHYsIGlkcDsKIAogCWlkdiA9IGxlMTZfdG9fY3B1KHBvcnQtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKQEAgLTcwMSwxMSArNzA0LDIwIEBACiAKIAkvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2X2xpbmVfc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CiAJcHJpdi0+bGluZV9zdGF0dXMgPSBkYXRhW3N0YXR1c19pZHhdOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocHJpdi0+bGluZV9zdGF0dXMgJiBVQVJUX0JSRUFLX0VSUk9SKQogCQl1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayhwb3J0KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisJaWYgKChwcml2LT5saW5lX3N0YXR1cyBeIHByZXZfbGluZV9zdGF0dXMpICYgVUFSVF9EQ0QpCisJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCXByaXYtPmxpbmVfc3RhdHVzICYgVUFSVF9EQ0QpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCmluZGV4IDQzZWI5YmQuLjFiMDI1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU1YCQkweDA2MTIKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfR1BSUwkJMHgwNjA5CiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX0hDUjMzMQkweDMzMWEKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU9UT1JPTEEJMHgwMzA3CiAKICNkZWZpbmUgQVRFTl9WRU5ET1JfSUQJCTB4MDU1NwogI2RlZmluZSBBVEVOX1ZFTkRPUl9JRDIJCTB4MDU0NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwppbmRleCAyMTRhM2U1Li4zMGI3M2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwpAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMQkJMHgzNzEyCiAjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YyCQkweDM3MTQKICNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfQUxMVEVMCQkweDM3MTUKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1VNTDI5MF9WWlcJCTB4MzcxOAogCiAvKiBDTU9URUNIIGRldmljZXMgKi8KICNkZWZpbmUgQ01PVEVDSF9WRU5ET1JfSUQJCQkweDE2ZDgKQEAgLTY2LDYgKzY3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKExHX1ZFTkRPUl9JRCwgTEdfUFJPRFVDVF9WWDQ0MDBfNjAwMCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTllPX1ZFTkRPUl9JRCwgU0FOWU9fUFJPRFVDVF9LQVRBTkFfTFgsIDB4ZmYsIDB4ZmYsIDB4MDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19QUk9EVUNUX1U1MjAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU1MMjkwX1ZaVywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKQEAgLTg0LDYgKzg2LDcgQEAKIAkJLm5hbWUgPQkJInFjYXV4IiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmcWNhdXhfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKaW5kZXggY2I4MTk1Yy4uNzRjZDRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAkJLm5hbWUgPQkJInNpZW1lbnNfbXBpIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmc2llbWVuc191c2JfbXBpX2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwppbmRleCA3NjVhYTk4Li5jYmZiNzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAvKiBob3cgY29tZSA/Pz8gKi8KICNkZWZpbmUgVUFSVF9TVEFURQkJCTB4MDgKLSNkZWZpbmUgVUFSVF9TVEFURV9UUkFOU0lFTlRfTUFTSwkweDc0CisjZGVmaW5lIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0sJMHg3NQogI2RlZmluZSBVQVJUX0RDRAkJCTB4MDEKICNkZWZpbmUgVUFSVF9EU1IJCQkweDAyCiAjZGVmaW5lIFVBUlRfQlJFQUtfRVJST1IJCTB4MDQKQEAgLTUyNSw2ICs1MjUsMTAgQEAKIAkJLyogb3ZlcnJ1biBpcyBzcGVjaWFsLCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hhciAqLwogCQlpZiAoc3RhdHVzICYgVUFSVF9PVkVSUlVOX0VSUk9SKQogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTik7CisKKwkJaWYgKHN0YXR1cyAmIFVBUlRfRENEKQorCQkJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0LCB0dHksCisJCQkJICAgcHJpdi0+bGluZV9zdGF0dXMgJiBNU1JfU1RBVFVTX0xJTkVfRENEKTsKIAl9CiAKIAl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcodHR5LCBkYXRhLCB0dHlfZmxhZywKQEAgLTY0NSw2ICs2NDksNyBAQAogCQkubmFtZSA9CQkiU1BDUDh4NSIsCiAJfSwKIAkuaWRfdGFibGUJCT0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIJCT0gJnNwY3A4eDVfZHJpdmVyLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbiAJCQk9IHNwY3A4eDVfb3BlbiwKIAkuZHRyX3J0cwkJPSBzcGNwOHg1X2R0cl9ydHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCBiMjkwMmYzLi5hOTEwMDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTM2OSw5ICszNjksOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGlfZXhpdCh2b2lkKQogeworCXVzYl9kZXJlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnRpXzFwb3J0X2RldmljZSk7CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOwotCXVzYl9kZXJlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCA2OTU0ZGU1Li41NDZhNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTEzNDQsMTEgKzEzNDQsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmaXh1cF9nZW5lcmljKGRyaXZlcik7Ci0JaWYgKGRyaXZlci0+dXNiX2RyaXZlcikKLQkJZHJpdmVyLT51c2JfZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDE7CiAKIAlpZiAoIWRyaXZlci0+ZGVzY3JpcHRpb24pCiAJCWRyaXZlci0+ZGVzY3JpcHRpb24gPSBkcml2ZXItPmRyaXZlci5uYW1lOworCWlmICghZHJpdmVyLT51c2JfZHJpdmVyKSB7CisJCVdBUk4oMSwgIlNlcmlhbCBkcml2ZXIgJXMgaGFzIG5vIHVzYl9kcml2ZXJcbiIsCisJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkcml2ZXItPnVzYl9kcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMTsKIAogCS8qIEFkZCB0aGlzIGRldmljZSB0byBvdXIgbGlzdCBvZiBkZXZpY2VzICovCiAJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKaW5kZXggZjJlZDZhMy4uOTVhODIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYwpAQCAtNzUsNiArNzUsNyBAQAogCQkubmFtZSA9CQkiZGVidWciLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZkZWJ1Z19kcml2ZXIsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5idWxrX291dF9zaXplID0JVVNCX0RFQlVHX01BWF9QQUNLRVRfU0laRSwKIAkuYnJlYWtfY3RsID0JCXVzYl9kZWJ1Z19icmVha19jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaAppbmRleCBjODU0ZmRlLi4yYzg1NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKQEAgLTMxLDQgKzMxLDkgQEAKIAkJIkN5cHJlc3MgSVNELTMwMExQIiwKIAkJVVNCX1NDX0NZUF9BVEFDQiwgVVNCX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKK1VOVVNVQUxfREVWKCAweDE0Y2QsIDB4NjExNiwgMHgwMDAwLCAweDk5OTksCisJCSJTdXBlciBUb3AiLAorCQkiVVNCIDIuMCAgU0FUQSBCUklER0UiLAorCQlVU0JfU0NfQ1lQX0FUQUNCLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggZmNjMWUzMi4uYzE2MDJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMDQ0LDYgKzEwNDQsMTUgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfQlVMSzMyKSwKIAorLyogUmVwb3J0ZWQgYnkgPHR0a3NwYW1AZnJlZS5mcj4KKyAqIFRoZSBkZXZpY2UgcmVwb3J0cyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgY2xhc3MsIHJlcXVpcmluZyBhbgorICogZXhwbGljaXQgdmVuZG9yL3Byb2R1Y3QgbWF0Y2guCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwODUxLCAweDE1NDIsIDB4MDAwMiwgMHgwMDAyLAorCQkiTWFnaWNQaXhlbCIsCisJCSJGV19PbWVnYTIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogLyogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgogICogUGFuRGlnaXRhbCBEaWdpdGFsIFBpY3R1cmUgRnJhbWUuIERvZXMgbm90IGxpa2UgQUxMT1dfTUVESVVNX1JFTU9WQUwKICAqIG9uIExVTiA0LgpAQCAtMTM4OCw2ICsxMzk3LDEzIEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFN1Ym1pdHRlZCBieSBOaWNrIEhvbGxvd2F5ICovCitVTlVTVUFMX0RFViggMHgwZjg4LCAweDA0MmUsIDB4MDEwMCwgMHgwMTAwLAorCQkiVlRlY2giLAorCQkiS2lkaXpvb20iLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKwogLyogUmVwb3J0ZWQgYnkgTWljaGFlbCBTdGF0dG1hbm4gPG1pY2hhZWxAc3RhdHRtYW5uLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGQwMDgsIDB4MDAwMCwgMHgwMDAwLAogCQkiU29ueSBFcmljc3NvbiIsCkBAIC0xODcyLDYgKzE4ODgsMjIgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gKSwKIAorLyogUGF0Y2ggYnkgUmljaGFyZCBTY2j8dHogPHIuc2NodHpAdC1vbmxpbmUuZGU+CisgKiBUaGlzIGV4dGVybmFsIGhhcmQgZHJpdmUgZW5jbG9zdXJlIHVzZXMgYSBKTWljcm9uIGNoaXAgd2hpY2gKKyAqIG5lZWRzIHRoZSBVU19GTF9JR05PUkVfUkVTSURVRSBmbGFnIHRvIHdvcmsgcHJvcGVybHkuICovCitVTlVTVUFMX0RFViggIDB4MWU2OCwgMHgwMDFiLCAweDAwMDAsIDB4MDAwMCwKKwkJIlRyZWtTdG9yIEdtYkggJiBDby4gS0ciLAorCQkiRGF0YVN0YXRpb24gbWF4aSBnLnUiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX1NBTkVfU0VOU0UgKSwKKworLyogUmVwb3J0ZWQgYnkgSmFzcGVyIE1hY2tlbnppZSA8c2NhcmxldHBpbXBlcm5hbEBob3RtYWlsLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAweDFlNzQsIDB4NDYyMSwgMHgwMDAwLCAweDAwMDAsCisJCSJDb2J5IEVsZWN0cm9uaWNzIiwKKwkJIk1QMyBQbGF5ZXIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLX0lHTk9SRV9UQUcgfCBVU19GTF9NQVhfU0VDVE9SU182NCApLAorCiBVTlVTVUFMX0RFViggMHgyMTE2LCAweDAzMjAsIDB4MDAwMSwgMHgwMDAxLAogCQkiU1QiLAogCQkiMkEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggOWIzY2ExMC4uZjYxNmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlzaXplX3QgaGRyX3NpemU7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/Ci0JICogTm90IHN1cmUgaXQncyB3b3J0aCBpdCwgaXQncyBzdHJhaWdodC1mb3J3YXJkIGVub3VnaC4gKi8KKwkvKiBUT0RPOiBjaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIGZyb20gdmhvc3Rfd29ya2VyPyAqLwogCXNvY2sgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm47CkBAIC0zMDYsNyArMzA1LDggQEAKIAlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOwogCWludCBlcnI7CiAJc2l6ZV90IGhkcl9zaXplOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8gKi8KKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHZxLT5wcml2YXRlX2RhdGEsIDEpOwogCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJcmV0dXJuOwogCkBAIC00MTUsNyArNDE1LDggQEAKIAlpbnQgZXJyLCBoZWFkY291bnQ7CiAJc2l6ZV90IHZob3N0X2hsZW4sIHNvY2tfaGxlbjsKIAlzaXplX3Qgdmhvc3RfbGVuLCBzb2NrX2xlbjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHZxLT5wcml2YXRlX2RhdGEpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/ICovCisJc3RydWN0IHNvY2tldCAqc29jayA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh2cS0+cHJpdmF0ZV9kYXRhLCAxKTsKIAlpZiAoIXNvY2sgfHwgc2tiX3F1ZXVlX2VtcHR5KCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCmluZGV4IDJhZjQ0YjcuLmIzMzYzYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTE3Myw5ICsxNzMsOSBAQAogewogCXVuc2lnbmVkIGFja2VkX2ZlYXR1cmVzOwogCi0JYWNrZWRfZmVhdHVyZXMgPQotCQlyY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soZGV2LT5hY2tlZF9mZWF0dXJlcywKLQkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmZGV2LT5tdXRleCkpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXIgb3IgZGV2IG11dGV4IGlzCisJICogaGVsZD8gKi8KKwlhY2tlZF9mZWF0dXJlcyA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhkZXYtPmFja2VkX2ZlYXR1cmVzLCAxKTsKIAlyZXR1cm4gYWNrZWRfZmVhdHVyZXMgJiAoMSA8PCBiaXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMKaW5kZXggZDU4M2JlYS4uMzkxYWM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmtmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJrZmIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N2Z2EuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjaWZkZWYgQ09ORklHX01UUlIKQEAgLTEwOTEsMTIgKzEwOTEsMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInN1c3BlbmRcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTIyLDcgKzExMjIsNyBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAicmVzdW1lXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIAogZmFpbDoKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IGRkOWRlMmUuLjRjYjZhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwpAQCAtMTg2MCwxMSArMTg2MCwxMSBAQAogewogICAgICAgICBzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIgPSBkYXRhOwogCi0JaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJcmV0dXJuOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBhci0+cGRldik7CiAJYXR5MTI4X2RvX3Jlc3VtZShwYXItPnBkZXYpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCkBAIC0yNDM4LDcgKzI0MzgsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgImF0eTEyOGZiOiBzdXNwZW5kaW5nLi4uXG4iKTsKIAkKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjQ3MCw3ICsyNDcwLDcgQEAKIAlpZiAoc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pCiAJCWF0eTEyOF9zZXRfc3VzcGVuZChwYXIsIDEpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIApAQCAtMjUyNyw5ICsyNTI3LDkgQEAKIHsKIAlpbnQgcmM7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmMgPSBhdHkxMjhfZG9fcmVzdW1lKHBkZXYpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDc2N2FiNGYuLjk0ZTI5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTIwNjksNyArMjA2OSw3IEBACiAJaWYgKHN0YXRlLmV2ZW50ID09IHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjA5NywxNCArMjA5NywxNCBAQAogCQlwYXItPmxvY2tfYmxhbmsgPSAwOwogCQlhdHlmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKIAkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogI2Vsc2UKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKICNlbmRpZgogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIApAQCAtMjEzMyw3ICsyMTMzLDcgQEAKIAlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qCiAJICogUENJIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIHJlc3RvcmVkIGJ5IHRoZSBjb3JlLCBzbwpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKIAlwYXItPmxvY2tfYmxhbmsgPSAwOwogCWF0eWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCmluZGV4IGM0ZTE3NjQuLjkyYmRhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCkBAIC0yNjI2LDcgKzI2MjYsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKQEAgLTI2OTAsNyArMjY5MCw3IEBACiAJaWYgKHJpbmZvLT5wbV9tb2RlICYgcmFkZW9uX3BtX2QyKQogCQlyYWRlb25fc2V0X3N1c3BlbmQocmluZm8sIDEpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKICBkb25lOgogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CkBAIC0yNzE1LDEwICsyNzE1LDEwIEBACiAJCXJldHVybiAwOwogCiAJaWYgKHJpbmZvLT5ub19zY2hlZHVsZSkgewotCQlpZiAodHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkKKwkJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJCXJldHVybiAwOwogCX0gZWxzZQotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHJlc3VtaW5nIGZyb20gc3RhdGU6ICVkLi4uXG4iLAogCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KTsKQEAgLTI3ODMsNyArMjc4Myw3IEBACiAJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAogIGJhaWw6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKaW5kZXggMThjNTA3OC4uNDdjMjFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwpAQCAtNjk2LDYgKzY5Niw3IEBACiB7CiAJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlpbnQgcmV0OwogCiAJaWYgKHJlcXVlc3RfZG1hKENIX1BQSSwgS0JVSUxEX01PRE5BTUUpKSB7CiAJCXByX2VycigiY291bGRuJ3QgcmVxdWVzdCBQUEkgRE1BXG4iKTsKQEAgLTcwNCwxNyArNzA1LDE2IEBACiAKIAlpZiAocmVxdWVzdF9wb3J0cygpKSB7CiAJCXByX2VycigiY291bGRuJ3QgcmVxdWVzdCBncGlvIHBvcnRcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfcG9ydHM7CiAJfQogCiAJZmJfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLAogCQkJCSAgICAgICAmZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGZiX2J1ZmZlciA9PSBOVUxMKSB7CiAJCXByX2VycigiY291bGRuJ3QgYWxsb2NhdGUgZG1hIGJ1ZmZlclxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2RtYV9jb2hlcmVudDsKIAl9CiAKIAlpZiAoTDFfREFUQV9BX0xFTkdUSCkKQEAgLTcyNSwxMCArNzI1LDggQEAKIAogCWlmIChkbWFfZGVzY190YWJsZSA9PSBOVUxMKSB7CiAJCXByX2VycigiY291bGRuJ3QgYWxsb2NhdGUgZG1hIGRlc2NyaXB0b3JcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlmcmVlX3BvcnRzKCk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdGFibGU7CiAJfQogCiAJYmZpbl9scTAzNV9mYi5zY3JlZW5fYmFzZSA9ICh2b2lkICopZmJfYnVmZmVyOwpAQCAtNzcxLDMxICs3NjksMjEgQEAKIAliZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlID0ga3phbGxvYyhzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSA9PSBOVUxMKSB7CiAJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIHBzZXVkb19wYWxldHRlXG4iKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJZnJlZV9wb3J0cygpOwotCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3BhbGV0dGU7CiAJfQogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCwgTkJSX1BBTEVUVEUsIDApIDwgMCkgewogCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvcm1hcCAoJWQgZW50cmllcylcbiIsCiAJCQlOQlJfUEFMRVRURSk7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7Ci0JCWtmcmVlKGJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfY21hcDsKIAl9CiAKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJmJmaW5fbHEwMzVfZmIpIDwgMCkgewogCQlwcl9lcnIoInVuYWJsZSB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7Ci0JCWZiX2J1ZmZlciA9IE5VTEw7Ci0JCWtmcmVlKGJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUpOwotCQlmYl9kZWFsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWc7CiAJfQogCiAJaTJjX2FkZF9kcml2ZXIoJmFkNTI4MF9kcml2ZXIpOwpAQCAtODA3LDExICs3OTUsMzEgQEAKIAogCWxjZF9kZXYgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKEtCVUlMRF9NT0ROQU1FLCAmcGRldi0+ZGV2LCBOVUxMLAogCQkJCSAgICAgICZiZmluX2xjZF9vcHMpOworCWlmIChJU19FUlIobGNkX2RldikpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbGNkXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihsY2RfZGV2KTsKKwkJZ290byBvdXRfbGNkOworCX0KIAlsY2RfZGV2LT5wcm9wcy5tYXhfY29udHJhc3QgPSAyNTUsCiAKIAlwcl9pbmZvKCJpbml0aWFsaXplZCIpOwogCiAJcmV0dXJuIDA7CitvdXRfbGNkOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmJmaW5fbHEwMzVfZmIpOworb3V0X3JlZzoKKwlmYl9kZWFsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCk7CitvdXRfY21hcDoKKwlrZnJlZShiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlKTsKK291dF9wYWxldHRlOgorb3V0X3RhYmxlOgorCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOworCWZiX2J1ZmZlciA9IE5VTEw7CitvdXRfZG1hX2NvaGVyZW50OgorCWZyZWVfcG9ydHMoKTsKK291dF9wb3J0czoKKwlmcmVlX2RtYShDSF9QUEkpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGJmaW5fbHEwMzVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCmluZGV4IGQ2MzdlMWYuLmNmZjc0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCkBAIC00NjAsMTAgKzQ2MCwxMCBAQAogCWlmICghKHN0YXRlLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApKQogCQlnb3RvIGRvbmU7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY2hpcHNmYl9ibGFuaygxLCBwKTsKIAlmYl9zZXRfc3VzcGVuZChwLCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKICBkb25lOgogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCXJldHVybiAwOwpAQCAtNDczLDEwICs0NzMsMTAgQEAKIHsKICAgICAgICAgc3RydWN0IGZiX2luZm8gKnAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQocCwgMCk7CiAJY2hpcHNmYl9ibGFuaygwLCBwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDdjY2M5NjcuLjljMDkyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0zNzUsMTQgKzM3NSwxNCBAQAogCWludCBjOwogCWludCBtb2RlOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmIChvcHMgJiYgb3BzLT5jdXJyY29uICE9IC0xKQogCQl2YyA9IHZjX2NvbnNbb3BzLT5jdXJyY29uXS5kOwogCiAJaWYgKCF2YyB8fCAhQ09OX0lTX1ZJU0lCTEUodmMpIHx8CiAgCSAgICByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dICE9IGluZm8gfHwKIAkgICAgdmMtPnZjX2RlY2NtICE9IDEpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zOTIsNyArMzkyLDcgQEAKIAkJQ01fRVJBU0UgOiBDTV9EUkFXOwogCW9wcy0+Y3Vyc29yKHZjLCBpbmZvLCBtb2RlLCBzb2Z0YmFja19saW5lcywgZ2V0X2NvbG9yKHZjLCBpbmZvLCBjLCAxKSwKIAkJICAgIGdldF9jb2xvcih2YywgaW5mbywgYywgMCkpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBjdXJzb3JfdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRldl9hZGRyKQpAQCAtODM2LDcgKzgzNiw3IEBACiAKIAlmb3VuZCA9IHNlYXJjaF9mYl9pbl9tYXAobmV3aWR4KTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAljb24yZmJfbWFwW3VuaXRdID0gbmV3aWR4OwogCWlmICghZXJyICYmICFmb3VuZCkKICAJCWVyciA9IGNvbjJmYl9hY3F1aXJlX25ld2luZm8odmMsIGluZm8sIHVuaXQsIG9sZGlkeCk7CkBAIC04NjMsNyArODYzLDcgQEAKIAlpZiAoIXNlYXJjaF9mYl9pbl9tYXAoaW5mb19pZHgpKQogCQlpbmZvX2lkeCA9IG5ld2lkeDsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMzIxLDcgKzMzMjEsNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gY291bnQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWR4ID0gY29uMmZiX21hcFtmZ19jb25zb2xlXTsKIAogCWlmIChpZHggPT0gLTEgfHwgcmVnaXN0ZXJlZF9mYltpZHhdID09IE5VTEwpCkBAIC0zMzMxLDcgKzMzMzEsNyBAQAogCXJvdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgbGFzdCwgMCk7CiAJZmJjb25fcm90YXRlKGluZm8sIHJvdGF0ZSk7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMzQ2LDcgKzMzNDYsNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gY291bnQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWR4ID0gY29uMmZiX21hcFtmZ19jb25zb2xlXTsKIAogCWlmIChpZHggPT0gLTEgfHwgcmVnaXN0ZXJlZF9mYltpZHhdID09IE5VTEwpCkBAIC0zMzU2LDcgKzMzNTYsNyBAQAogCXJvdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgbGFzdCwgMCk7CiAJZmJjb25fcm90YXRlX2FsbChpbmZvLCByb3RhdGUpOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzM2OSw3ICszMzY5LDcgQEAKIAlpZiAoZmJjb25faGFzX2V4aXRlZCkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWR4ID0gY29uMmZiX21hcFtmZ19jb25zb2xlXTsKIAogCWlmIChpZHggPT0gLTEgfHwgcmVnaXN0ZXJlZF9mYltpZHhdID09IE5VTEwpCkBAIC0zMzc4LDcgKzMzNzgsNyBAQAogCWluZm8gPSByZWdpc3RlcmVkX2ZiW2lkeF07CiAJcm90YXRlID0gZmJjb25fZ2V0X3JvdGF0ZShpbmZvKTsKIGVycjoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcm90YXRlKTsKIH0KIApAQCAtMzM5Miw3ICszMzkyLDcgQEAKIAlpZiAoZmJjb25faGFzX2V4aXRlZCkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWR4ID0gY29uMmZiX21hcFtmZ19jb25zb2xlXTsKIAogCWlmIChpZHggPT0gLTEgfHwgcmVnaXN0ZXJlZF9mYltpZHhdID09IE5VTEwpCkBAIC0zNDA2LDcgKzM0MDYsNyBAQAogCiAJYmxpbmsgPSAob3BzLT5mbGFncyAmIEZCQ09OX0ZMQUdTX0NVUlNPUl9USU1FUikgPyAxIDogMDsKIGVycjoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYmxpbmspOwogfQogCkBAIC0zNDIxLDcgKzM0MjEsNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gY291bnQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWR4ID0gY29uMmZiX21hcFtmZ19jb25zb2xlXTsKIAogCWlmIChpZHggPT0gLTEgfHwgcmVnaXN0ZXJlZF9mYltpZHhdID09IE5VTEwpCkBAIC0zNDQzLDcgKzM0NDMsNyBAQAogCX0KIAogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzQ4Miw3ICszNDgyLDcgQEAKIAlpZiAobnVtX3JlZ2lzdGVyZWRfZmIpIHsKIAkJaW50IGk7CiAKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgRkJfTUFYOyBpKyspIHsKIAkJCWlmIChyZWdpc3RlcmVkX2ZiW2ldICE9IE5VTEwpIHsKQEAgLTM0OTEsNyArMzQ5MSw3IEBACiAJCQl9CiAJCX0KIAotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWZiY29uX3Rha2VvdmVyKDApOwogCX0KIH0KQEAgLTM1NTIsNyArMzU1Miw3IEBACiB7CiAJaW50IGk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfcmVnaXN0ZXJfY2xpZW50KCZmYmNvbl9ldmVudF9ub3RpZmllcik7CiAJZmJjb25fZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgTlVMTCwgTUtERVYoMCwgMCksIE5VTEwsCiAJCQkJICAgICAiZmJjb24iKTsKQEAgLTM1NjgsNyArMzU2OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKQogCQljb24yZmJfbWFwW2ldID0gLTE7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlmYmNvbl9zdGFydCgpOwogCXJldHVybiAwOwogfQpAQCAtMzU5MSwxMiArMzU5MSwxMiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmJfY29uc29sZV9leGl0KHZvaWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3VucmVnaXN0ZXJfY2xpZW50KCZmYmNvbl9ldmVudF9ub3RpZmllcik7CiAJZmJjb25fZGVpbml0X2RldmljZSgpOwogCWRldmljZV9kZXN0cm95KGZiX2NsYXNzLCBNS0RFVigwLCAwKSk7CiAJZmJjb25fZXhpdCgpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXVucmVnaXN0ZXJfY29uX2RyaXZlcigmZmJfY29uKTsKIH0JCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCBjOTc0OTFiLi45MTVmZDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC0yMDIsMTEgKzIwMiw3IEBACiAJfQogfQogCi0vKgotICogQ2FsbGVkIG9ubHkgZHVpbmcgaW5pdCBzbyBjYWxsIG9mIGFsbG9jX2Jvb3RtZW4gaXMgb2suCi0gKiBNYXJrZWQgX19pbml0X3JlZm9rIHRvIHNpbGVuY2UgbW9kcG9zdC4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0X3JlZm9rIHZnYWNvbl9zY3JvbGxiYWNrX3N0YXJ0dXAodm9pZCkKK3N0YXRpYyB2b2lkIHZnYWNvbl9zY3JvbGxiYWNrX3N0YXJ0dXAodm9pZCkKIHsKIAl2Z2Fjb25fc2Nyb2xsYmFjayA9IGtjYWxsb2MoQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRSwgMTAyNCwgR0ZQX05PV0FJVCk7CiAJdmdhY29uX3Njcm9sbGJhY2tfaW5pdCh2Z2FfdmlkZW9fbnVtX2NvbHVtbnMgKiAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwppbmRleCBjMjY1YWVkLi44ZDYxZWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCkBAIC0xMDkyLDkgKzEwOTIsMTAgQEAKIAogaXJxX2ZyZXE6CiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisJbGNkX2RhOHh4X2NwdWZyZXFfZGVyZWdpc3RlcihwYXIpOworI2VuZGlmCiBlcnJfY3B1X2ZyZXE6CiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihkYTh4eF9mYl9pbmZvKTsKLSNlbmRpZgogCiBlcnJfZGVhbGxvY19jbWFwOgogCWZiX2RlYWxsb2NfY21hcCgmZGE4eHhfZmJfaW5mby0+Y21hcCk7CkBAIC0xMTMwLDE0ICsxMTMxLDE0IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAocGFyLT5wYW5lbF9wb3dlcl9jdHJsKQogCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIAlsY2RfZGlzYWJsZV9yYXN0ZXIoKTsKIAljbGtfZGlzYWJsZShwYXItPmxjZGNfY2xrKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE0NiwxNCArMTE0NywxNCBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHBhci0+cGFuZWxfcG93ZXJfY3RybCkKIAkJcGFyLT5wYW5lbF9wb3dlcl9jdHJsKDEpOwogCiAJY2xrX2VuYWJsZShwYXItPmxjZGNfY2xrKTsKIAlsY2RfZW5hYmxlX3Jhc3RlcigpOwogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggNGFjMTIwMS4uZTJiZjk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTAzNiwxMSArMTAzNiwxMSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJcmV0ID0gZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CkBAIC0xMDcyLDkgKzEwNzIsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCXJldCA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZ2YXIpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlpZiAocmV0ID09IDAgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTExOSwxMSArMTExOSwxMSBAQAogCWNhc2UgRkJJT0JMQU5LOgogCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJldCA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCmluZGV4IDBhMDhmMTMuLmY0YTMyNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCkBAIC05MCwxMSArOTAsMTEgQEAKIAlpbnQgZXJyOwogCiAJdmFyLT5hY3RpdmF0ZSB8PSBGQl9BQ1RJVkFURV9GT1JDRTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCWVyciA9IGZiX3NldF92YXIoZmJfaW5mbywgdmFyKTsKIAlmYl9pbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CkBAIC0xNzUsNyArMTc1LDcgQEAKIAlpZiAoaSAqIHNpemVvZihzdHJ1Y3QgZmJfdmlkZW9tb2RlKSAhPSBjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbGlzdF9zcGxpY2UoJmZiX2luZm8tPm1vZGVsaXN0LCAmb2xkX2xpc3QpOwogCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdCgoY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqKWJ1ZiwgaSwKIAkJCQkgJmZiX2luZm8tPm1vZGVsaXN0KTsKQEAgLTE4NSw3ICsxODUsNyBAQAogCX0gZWxzZQogCQlmYl9kZXN0cm95X21vZGVsaXN0KCZvbGRfbGlzdCk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAxLDExICszMDEsMTEgQEAKIAljaGFyICpsYXN0ID0gTlVMTDsKIAlpbnQgZXJyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX2luZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAllcnIgPSBmYl9ibGFuayhmYl9pbmZvLCBzaW1wbGVfc3RydG91bChidWYsICZsYXN0LCAwKSk7CiAJZmJfaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gY291bnQ7CkBAIC0zNjQsOSArMzY0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdmFyLnlvZmZzZXQgPSBzaW1wbGVfc3RydG91bChsYXN0LCAmbGFzdCwgMCk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZXJyID0gZmJfcGFuX2Rpc3BsYXkoZmJfaW5mbywgJnZhcik7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTM5OSw5ICszOTksOSBAQAogCiAJc3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsICZsYXN0LCAwKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChmYl9pbmZvLCAoaW50KXN0YXRlKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jCmluZGV4IDcwYjFkOWQuLmI0ZjE5ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMKKysrIGIvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYwpAQCAtMzQ0LDEwICszNDQsMTAgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWd4X3Bvd2VyZG93bihpbmZvKTsKIAkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAKIAkvKiB0aGVyZSdzIG5vIHBvaW50IGluIHNldHRpbmcgUENJIHN0YXRlczsgd2UgZW11bGF0ZSBQQ0ksIHNvCkBAIC0zNjEsNyArMzYxLDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJldCA9IGd4X3Bvd2VydXAoaW5mbyk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImd4ZmI6ICBwb3dlciB1cCBmYWlsZWQhXG4iKTsKQEAgLTM2OSw3ICszNjksNyBAQAogCX0KIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfY29yZS5jIGIvZHJpdmVycy92aWRlby9nZW9kZS9seGZiX2NvcmUuYwppbmRleCAzOWJkYmVkLi40MTY4NTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9jb3JlLmMKQEAgLTQ2NSwxMCArNDY1LDEwIEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlseF9wb3dlcmRvd24oaW5mbyk7CiAJCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfQogCiAJLyogdGhlcmUncyBubyBwb2ludCBpbiBzZXR0aW5nIFBDSSBzdGF0ZXM7IHdlIGVtdWxhdGUgUENJLCBzbwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IHJldDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSBseF9wb3dlcnVwKGluZm8pOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJseGZiOiAgcG93ZXIgdXAgZmFpbGVkIVxuIik7CkBAIC00OTAsNyArNDkwLDcgQEAKIAl9CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKaW5kZXggNTc0M2VhMi4uMzE4ZjZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwpAQCAtMTU3NCw3ICsxNTc0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCiAJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAlwY2lfc2F2ZV9zdGF0ZShkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgbWVzZykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKIApAQCAtMTYyMSw3ICsxNjIxLDcgQEAKIAlmYl9zZXRfc3VzcGVuZCAoaW5mbywgMCk7CiAJaW5mby0+ZmJvcHMtPmZiX2JsYW5rKFZFU0FfTk9fQkxBTktJTkcsIGluZm8pOwogZmFpbDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9qejQ3NDBfZmIuYyBiL2RyaXZlcnMvdmlkZW8vano0NzQwX2ZiLmMKaW5kZXggNjcwZWNhYS4uZGUzNjY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9qejQ3NDBfZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jCkBAIC03NzgsOSArNzc4LDkgQEAKIHsKIAlzdHJ1Y3QganpmYiAqanpmYiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGp6ZmItPmZiLCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCW11dGV4X2xvY2soJmp6ZmItPmxvY2spOwogCWlmIChqemZiLT5pc19lbmFibGVkKQpAQCAtODAwLDkgKzgwMCw5IEBACiAJCWp6ZmJfZW5hYmxlKGp6ZmIpOwogCW11dGV4X3VubG9jaygmanpmYi0+bG9jayk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoanpmYi0+ZmIsIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL214M2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKaW5kZXggY2IwMTM5MS4uN2UzYTQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9teDNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXgzZmIuYwpAQCAtMTE3Nyw5ICsxMTc3LDkgQEAKIAlzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IG14M2ZiLT5mYmktPnBhcjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChteDNmYi0+ZmJpLCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKSB7CiAJCXNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7CkBAIC0xMjAyLDkgKzEyMDIsOSBAQAogCQlzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIG14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwpOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChteDNmYi0+ZmJpLCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udWM5MDBmYi5jIGIvZHJpdmVycy92aWRlby9udWM5MDBmYi5jCmluZGV4IDYyNDk4YmQuLmY4MzhkOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMKQEAgLTY5Niw2ICs2OTYsOCBAQAogCW51YzkwMGZiX3N0b3BfbGNkKGZiaW5mbyk7CiAJbXNsZWVwKDEpOwogCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm8pOworCW51YzkwMGZiX2NwdWZyZXFfZGVyZWdpc3RlcihmYmkpOwogCW51YzkwMGZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmluZm8pOwogCiAJaW91bm1hcChmYmktPmlvKTsKQEAgLTcyMyw3ICs3MjUsNyBAQAogCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBudWM5MDBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CiAKLQludWM5MDBmYl9zdG9wX2xjZCgpOworCW51YzkwMGZiX3N0b3BfbGNkKGZiaW5mbyk7CiAJbXNsZWVwKDEpOwogCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CiAJcmV0dXJuIDA7CkBAIC03NDAsNyArNzQyLDcgQEAKIAltc2xlZXAoMSk7CiAKIAludWM5MDBmYl9pbml0X3JlZ2lzdGVycyhmYmluZm8pOwotCW51YzkwMGZiX2FjdGl2YXRlX3ZhcihiZmluZm8pOworCW51YzkwMGZiX2FjdGl2YXRlX3ZhcihmYmluZm8pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IGVmZTEwZmYuLjA4MWRjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC0xMDU3LDcgKzEwNTcsNyBAQAogCiAJaWYgKG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKIAkJbWVzZy5ldmVudCA9IFBNX0VWRU5UX0ZSRUVaRTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcGFyLT5wbV9zdGF0ZSA9IG1lc2cuZXZlbnQ7CiAKIAlpZiAobWVzZy5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSB7CkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogCX0KIAlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CiAKIAlpZiAocGFyLT5wbV9zdGF0ZSAhPSBQTV9FVkVOVF9GUkVFWkUpIHsKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiAJbnZpZGlhZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7CiAKIGZhaWw6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wczNmYi5jIGIvZHJpdmVycy92aWRlby9wczNmYi5jCmluZGV4IDljMDE0NGUuLjY1NTYwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKQEAgLTUxMyw5ICs1MTMsOSBAQAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwczNmYi5mX2NvdW50KSkgewogCQlpZiAoYXRvbWljX3JlYWQoJnBzM2ZiLmV4dF9mbGlwKSkgewogCQkJYXRvbWljX3NldCgmcHMzZmIuZXh0X2ZsaXAsIDApOwotCQkJaWYgKCF0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKSB7CisJCQlpZiAoY29uc29sZV90cnlsb2NrKCkpIHsKIAkJCQlwczNmYl9zeW5jKGluZm8sIDApOwkvKiBzaW5nbGUgYnVmZmVyICovCi0JCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCQl9CiAJCX0KIAl9CkBAIC04MzAsMTQgKzgzMCwxNCBAQAogCQkJaWYgKHZtb2RlKSB7CiAJCQkJdmFyID0gaW5mby0+dmFyOwogCQkJCWZiX3ZpZGVvbW9kZV90b192YXIoJnZhciwgdm1vZGUpOwotCQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX2xvY2soKTsKIAkJCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCQkJLyogRm9yY2UsIGluIGNhc2Ugb25seSBzcGVjaWFsIGJpdHMgY2hhbmdlZCAqLwogCQkJCXZhci5hY3RpdmF0ZSB8PSBGQl9BQ1RJVkFURV9GT1JDRTsKIAkJCQlwYXItPm5ld19tb2RlX2lkID0gdmFsOwogCQkJCXJldHZhbCA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7CiAJCQkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC04ODEsOSArODgxLDkgQEAKIAkJCWJyZWFrOwogCiAJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiUFMzRkJfSU9DVExfRlNFTDolZFxuIiwgdmFsKTsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJcmV0dmFsID0gcHMzZmJfc3luYyhpbmZvLCB2YWwpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTkwMyw5ICs5MDMsOSBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAocHMzZmIuaXNfa2lja2VkKSB7CiAJCQlwczNmYi5pc19raWNrZWQgPSAwOwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlwczNmYl9zeW5jKGluZm8sIDApOwkvKiBzaW5nbGUgYnVmZmVyICovCi0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQl9CiAJCXNjaGVkdWxlKCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jIGIvZHJpdmVycy92aWRlby9weGExNjhmYi5jCmluZGV4IGNlYTY0MDMuLjM1ZjYxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKQEAgLTcwMSwxNiArNzAxLDEyIEBACiAJICovCiAJcHhhMTY4ZmJfaW5pdF9tb2RlKGluZm8sIG1pKTsKIAotCXJldCA9IHB4YTE2OGZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWxlZF9mcmVlX2ZibWVtOwotCiAJLyoKIAkgKiBGaWxsIGluIHNhbmUgZGVmYXVsdHMuCiAJICovCiAJcmV0ID0gcHhhMTY4ZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbGVkOworCQlnb3RvIGZhaWxlZF9mcmVlX2ZibWVtOwogCiAJLyoKIAkgKiBlbmFibGUgY29udHJvbGxlciBjbG9jawpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYwppbmRleCBiODExNjhkLi5jZjRiZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgcHhhM3h4LWdjLmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvciBQWEEzeHggZ3JhcGhpY3MgY29udHJvbGxlcnMKKyAqICBweGEzeHgtZ2N1LmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvciBQWEEzeHggZ3JhcGhpY3MgY29udHJvbGxlcnMKICAqCiAgKiAgVGhpcyBkcml2ZXIgbmVlZHMgYSBEaXJlY3RGQiBjb3VudGVycGFydCBpbiB1c2VyIHNwYWNlLCBjb21tdW5pY2F0aW9uCiAgKiAgaXMgaGFuZGxlZCB2aWEgbW1hcCgpZWQgbWVtb3J5IGFyZWFzIGFuZCBhbiBpb2N0bC4KQEAgLTQyMSw3ICs0MjEsNyBAQAogCQlidWZmZXItPm5leHQgPSBwcml2LT5mcmVlOwogCQlwcml2LT5mcmVlID0gYnVmZmVyOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlidWZmZXItPmxlbmd0aCA9IHdvcmRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzZmIuYwppbmRleCBkY2U4Yzk3Li43NTczOGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzZmIuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N2Z2EuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjaWZkZWYgQ09ORklHX01UUlIKQEAgLTExMTMsMTIgKzExMTMsMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInN1c3BlbmRcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTEyOSw3ICsxMTI5LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQ1LDEyICsxMTQ1LDEyIEBACiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICJyZXN1bWVcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKHBhci0+cmVmX2NvdW50ID09IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExNTksNyArMTE1OSw3IEBACiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJlcnJvciAlZCBlbmFibGluZyBkZXZpY2UgZm9yIHJlc3VtZVxuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMTY5LDcgKzExNjksNyBAQAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwogCiAJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCA4NDJkMTU3Li40ODc5MTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMjM3Myw3ICsyMzczLDcgQEAKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpCiAJCXJldHVybiAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCiAJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAlwY2lfc2F2ZV9zdGF0ZShkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgbWVzZykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDA5LDcgKzI0MDksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwpAQCAtMjQyMyw3ICsyNDIzLDcgQEAKIAlzYXZhZ2VmYl9zZXRfcGFyKGluZm8pOwogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwogCXNhdmFnZWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKaW5kZXggNzRkOWY1NC4uMmI5ZTU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYwpAQCAtMTE1MSw3ICsxMTUxLDcgQEAKIAogCQljaCA9IGluZm8tPnBhcjsKIAotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCS8qIEhETUkgcGx1ZyBpbiAqLwogCQlpZiAoIXNoX2hkbWlfbXVzdF9yZWNvbmZpZ3VyZShoZG1pKSAmJgpAQCAtMTE3MSw3ICsxMTcxLDcgQEAKIAkJCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwogCQl9CiAKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCX0gZWxzZSB7CiAJCXJldCA9IDA7CiAJCWlmICghaGRtaS0+aW5mbykKQEAgLTExODEsMTIgKzExODEsMTIgQEAKIAkJZmJfZGVzdHJveV9tb2RlZGIoaGRtaS0+bW9uc3BlYy5tb2RlZGIpOwogCQloZG1pLT5tb25zcGVjLm1vZGVkYiA9IE5VTEw7CiAKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCQkvKiBIRE1JIGRpc2Nvbm5lY3QgKi8KIAkJZmJfc2V0X3N1c3BlbmQoaGRtaS0+aW5mbywgMSk7CiAKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCBiZDQ4NDBhLi5iZjEyZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtOTEyLDkgKzkxMiw5IEBACiAKIAkvKiBOb3RoaW5nIHRvIHJlY29uZmlndXJlLCB3aGVuIGNhbGxlZCBmcm9tIGZiY29uICovCiAJaWYgKHVzZXIpIHsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJc2hfbW9iaWxlX2ZiX3JlY29uZmlnKGluZm8pOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZjaC0+b3Blbl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKaW5kZXggYjdkYzE4MC4uYmNiNDRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKQEAgLTIwMTAsOSArMjAxMCw5IEBACiAKIAkvKiB0ZWxsIGNvbnNvbGUvZmIgZHJpdmVyIHdlIGFyZSBzdXNwZW5kaW5nICovCiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoZmJpLCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCS8qIGJhY2t1cCBjb3BpZXMgaW4gY2FzZSBjaGlwIGlzIHBvd2VyZWQgZG93biBvdmVyIHN1c3BlbmQgKi8KIApAQCAtMjA2OSw5ICsyMDY5LDkgQEAKIAkJbWVtY3B5X3RvaW8ocGFyLT5jdXJzb3Iua19hZGRyLCBwYXItPnN0b3JlX2N1cnNvciwKIAkJCSAgICBwYXItPmN1cnNvci5zaXplKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChmYmksIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJdmZyZWUocGFyLT5zdG9yZV9mYik7CiAJdmZyZWUocGFyLT5zdG9yZV9jdXJzb3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKaW5kZXggNjkxM2ZlMS4uZGZlZjg4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90bWlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkgKi8KKy8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgY29uc29sZV9sb2NrKCkgKi8KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtOTQ0LDcgKzk0NCw3IEBACiAJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCkBAIC05NjUsNyArOTY1LDcgQEAKIAlpZiAoY2VsbC0+c3VzcGVuZCkKIAkJcmV0dmFsID0gY2VsbC0+c3VzcGVuZChkZXYpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTc2LDcgKzk3Niw3IEBACiAJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWlmIChjZWxsLT5yZXN1bWUpIHsKIAkJcmV0dmFsID0gY2VsbC0+cmVzdW1lKGRldik7CkBAIC05OTIsNyArOTkyLDcgQEAKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwogb3V0OgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKaW5kZXggMjg5ZWRkNS4uNGU2NjM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0xNjc0LDE3ICsxNjc0LDE3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHZpYWZiX3N1c3BlbmQodm9pZCAqdW51c2VkKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZCh2aWFmYmluZm8sIDEpOwogCXZpYWZiX3N5bmModmlhZmJpbmZvKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpYWZiX3Jlc3VtZSh2b2lkICp1bnVzZWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2aWFwYXJpbmZvLT5zaGFyZWQtPnZkZXYtPmVuZ2luZV9tbWlvKQogCQl2aWFmYl9yZXNldF9lbmdpbmUodmlhcGFyaW5mbyk7CiAJdmlhZmJfc2V0X3Bhcih2aWFmYmluZm8pOwpAQCAtMTY5Miw3ICsxNjkyLDcgQEAKIAkJdmlhZmJfc2V0X3Bhcih2aWFmYmluZm8xKTsKIAlmYl9zZXRfc3VzcGVuZCh2aWFmYmluZm8sIDApOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYyBiL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYwppbmRleCA4NWQ3NmVjLi5hMjk2NWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby92dDg2MjNmYi5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3ZnYS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGNvbnNvbGVfbG9jaygpICovCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKICNpZmRlZiBDT05GSUdfTVRSUgpAQCAtODE5LDEyICs4MTksMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInN1c3BlbmRcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODM1LDcgKzgzNSw3IEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOwogCiAJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtODUwLDcgKzg1MCw3IEBACiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICJyZXN1bWVcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKHBhci0+cmVmX2NvdW50ID09IDApCkBAIC04NjksNyArODY5LDcgQEAKIAogZmFpbDoKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMgYi9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKaW5kZXggM2U2OTM0ZC4uYTIwMjE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCisrKyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwpAQCAtNDkxLDEyICs0OTEsMTIgQEAKIAlpZiAoY29uc29sZV9zZXRfb25fY21kbGluZSkKIAkJcmV0dXJuOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIXN0cmNtcChjLT5uYW1lLCAidHR5IikgJiYgYy0+aW5kZXggPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlpZiAoYykgewogCQl1bnJlZ2lzdGVyX2NvbnNvbGUoYyk7CiAJCWMtPmZsYWdzIHw9IENPTl9DT05TREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCAzYTdlOWZmLi4zOGU5NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNTkzLDE5ICs1OTMsMTcgQEAKIAogCS8qIGdldCBpbnRlcmZhY2UgJiBmdW5jdGlvbmFsIGNsb2NrIG9iamVjdHMgKi8KIAloZHFfZGF0YS0+aGRxX2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwotCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBpY2sgY2xvY2sgb2JqZWN0XG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2ljayk7CisJCWdvdG8gZXJyX2ljazsKKwl9CiAKLQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKSB8fCBJU19FUlIoaGRxX2RhdGEtPmhkcV9mY2spKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgIkNhbid0IGdldCBIRFEgY2xvY2sgb2JqZWN0c1xuIik7Ci0JCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9pY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKTsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgewotCQkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2Zjayk7Ci0JCQljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQorCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ZjaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBmY2sgY2xvY2sgb2JqZWN0XG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2Zjayk7CisJCWdvdG8gZXJyX2ZjazsKIAl9CiAKIAloZHFfZGF0YS0+aGRxX3VzZWNvdW50ID0gMDsKQEAgLTY2NSwxMCArNjYzLDEyIEBACiAJY2xrX2Rpc2FibGUoaGRxX2RhdGEtPmhkcV9pY2spOwogCiBlcnJfaW50ZmNsazoKLQljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKIAljbGtfcHV0KGhkcV9kYXRhLT5oZHFfZmNrKTsKIAotZXJyX2NsazoKK2Vycl9mY2s6CisJY2xrX3B1dChoZHFfZGF0YS0+aGRxX2ljayk7CisKK2Vycl9pY2s6CiAJaW91bm1hcChoZHFfZGF0YS0+aGRxX2Jhc2UpOwogCiBlcnJfaW9yZW1hcDoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggMTViNWNhMi4uOWM5NDkzNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTM3LDYgKzM3LDkgQEAKIAljaGFyICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCisJaWYgKCFJU19QT1NJWEFDTChpbm9kZSkpCisJCXJldHVybiBOVUxMOworCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUpOwogCWlmIChhY2wgIT0gQUNMX05PVF9DQUNIRUQpCiAJCXJldHVybiBhY2w7CkBAIC04NCw2ICs4Nyw5IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByZXQgPSAwOwogCisJaWYgKCFJU19QT1NJWEFDTChkZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlhY2wgPSBidHJmc19nZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSk7CiAKIAlpZiAoSVNfRVJSKGFjbCkpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jb21wcmVzc2lvbi5jIGIvZnMvYnRyZnMvY29tcHJlc3Npb24uYwppbmRleCBmNzQ1Mjg3Li40ZDIxMTBlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jb21wcmVzc2lvbi5jCisrKyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXU2NCBlbV9sZW47CiAJdTY0IGVtX3N0YXJ0OwogCXN0cnVjdCBleHRlbnRfbWFwICplbTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRU5PTUVNOwogCXUzMiAqc3VtczsKIAogCXRyZWUgPSAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWU7CkBAIC01NzcsNiArNTc3LDkgQEAKIAogCWNvbXByZXNzZWRfbGVuID0gZW0tPmJsb2NrX2xlbjsKIAljYiA9IGttYWxsb2MoY29tcHJlc3NlZF9iaW9fc2l6ZShyb290LCBjb21wcmVzc2VkX2xlbiksIEdGUF9OT0ZTKTsKKwlpZiAoIWNiKQorCQlnb3RvIG91dDsKKwogCWF0b21pY19zZXQoJmNiLT5wZW5kaW5nX2Jpb3MsIDApOwogCWNiLT5lcnJvcnMgPSAwOwogCWNiLT5pbm9kZSA9IGlub2RlOwpAQCAtNTk3LDEzICs2MDAsMTggQEAKIAogCW5yX3BhZ2VzID0gKGNvbXByZXNzZWRfbGVuICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgLwogCQkJCSBQQUdFX0NBQ0hFX1NJWkU7Ci0JY2ItPmNvbXByZXNzZWRfcGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3BhZ2VzLAorCWNiLT5jb21wcmVzc2VkX3BhZ2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9wYWdlcywKIAkJCQkgICAgICAgR0ZQX05PRlMpOworCWlmICghY2ItPmNvbXByZXNzZWRfcGFnZXMpCisJCWdvdG8gZmFpbDE7CisKIAliZGV2ID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPmxhdGVzdF9iZGV2OwogCiAJZm9yIChwYWdlX2luZGV4ID0gMDsgcGFnZV9pbmRleCA8IG5yX3BhZ2VzOyBwYWdlX2luZGV4KyspIHsKIAkJY2ItPmNvbXByZXNzZWRfcGFnZXNbcGFnZV9pbmRleF0gPSBhbGxvY19wYWdlKEdGUF9OT0ZTIHwKIAkJCQkJCQkgICAgICBfX0dGUF9ISUdITUVNKTsKKwkJaWYgKCFjYi0+Y29tcHJlc3NlZF9wYWdlc1twYWdlX2luZGV4XSkKKwkJCWdvdG8gZmFpbDI7CiAJfQogCWNiLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwogCkBAIC02MTQsNiArNjIyLDggQEAKIAljYi0+bGVuID0gdW5jb21wcmVzc2VkX2xlbjsKIAogCWNvbXBfYmlvID0gY29tcHJlc3NlZF9iaW9fYWxsb2MoYmRldiwgY3VyX2Rpc2tfYnl0ZSwgR0ZQX05PRlMpOworCWlmICghY29tcF9iaW8pCisJCWdvdG8gZmFpbDI7CiAJY29tcF9iaW8tPmJpX3ByaXZhdGUgPSBjYjsKIAljb21wX2Jpby0+YmlfZW5kX2lvID0gZW5kX2NvbXByZXNzZWRfYmlvX3JlYWQ7CiAJYXRvbWljX2luYygmY2ItPnBlbmRpbmdfYmlvcyk7CkBAIC02ODEsNiArNjkxLDE3IEBACiAKIAliaW9fcHV0KGNvbXBfYmlvKTsKIAlyZXR1cm4gMDsKKworZmFpbDI6CisJZm9yIChwYWdlX2luZGV4ID0gMDsgcGFnZV9pbmRleCA8IG5yX3BhZ2VzOyBwYWdlX2luZGV4KyspCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYi0+Y29tcHJlc3NlZF9wYWdlc1twYWdlX2luZGV4XSk7CisKKwlrZnJlZShjYi0+Y29tcHJlc3NlZF9wYWdlcyk7CitmYWlsMToKKwlrZnJlZShjYik7CitvdXQ6CisJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBjb21wX2lkbGVfd29ya3NwYWNlW0JUUkZTX0NPTVBSRVNTX1RZUEVTXTsKQEAgLTkwMCw3ICs5MjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgX19leGl0IGJ0cmZzX2V4aXRfY29tcHJlc3Modm9pZCkKK3ZvaWQgYnRyZnNfZXhpdF9jb21wcmVzcyh2b2lkKQogewogCWZyZWVfd29ya3NwYWNlcygpOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IGI1MzFjMzYuLmZkY2U4NzkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTE1NTAsNiArMTU1MCw3IEBACiAJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCWlmICh0cmFuc2lkID09IHRyYW5zLT50cmFuc2lkKSB7CiAJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJQlVHX09OKHJldCk7CkBAIC0yNDUzLDEwICsyNDU0LDE0IEBACiAJdXBfd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlCVUdfT04ocmV0KTsKIAkvKiBydW4gY29tbWl0IGFnYWluIHRvIGRyb3AgdGhlIG9yaWdpbmFsIHNuYXBzaG90ICovCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihOVUxMLCByb290KTsKIAlCVUdfT04ocmV0KTsKQEAgLTI1NTQsNiArMjU1OSw4IEBACiAJa2ZyZWUoZnNfaW5mby0+Y2h1bmtfcm9vdCk7CiAJa2ZyZWUoZnNfaW5mby0+ZGV2X3Jvb3QpOwogCWtmcmVlKGZzX2luZm8tPmNzdW1fcm9vdCk7CisJa2ZyZWUoZnNfaW5mbyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXhwb3J0LmMgYi9mcy9idHJmcy9leHBvcnQuYwppbmRleCA5Nzg2OTYzLi5mZjI3ZDdhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHBvcnQuYworKysgYi9mcy9idHJmcy9leHBvcnQuYwpAQCAtMTcxLDYgKzE3MSw4IEBACiAJaW50IHJldDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWlmIChkaXItPmlfaW5vID09IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpIHsKIAkJa2V5Lm9iamVjdGlkID0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBiNTUyNjkzLi40ZTdlMDEyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMyMCwxMSArMzIwLDYgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXhjbHVkZV9zdXBlcl9zdHJpcGVzKGV4dGVudF9yb290LCBibG9ja19ncm91cCk7Ci0Jc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+c3BhY2VfaW5mby0+bG9jayk7Ci0JYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmJ5dGVzX3JlYWRvbmx5ICs9IGJsb2NrX2dyb3VwLT5ieXRlc19zdXBlcjsKLQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmxvY2spOwotCiAJbGFzdCA9IG1heF90KHU2NCwgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCwgQlRSRlNfU1VQRVJfSU5GT19PRkZTRVQpOwogCiAJLyoKQEAgLTQ2Nyw4ICs0NjIsMTAgQEAKIAkJCWNhY2hlLT5jYWNoZWQgPSBCVFJGU19DQUNIRV9OTzsKIAkJfQogCQlzcGluX3VubG9jaygmY2FjaGUtPmxvY2spOwotCQlpZiAocmV0ID09IDEpCisJCWlmIChyZXQgPT0gMSkgeworCQkJZnJlZV9leGNsdWRlZF9leHRlbnRzKGZzX2luZm8tPmV4dGVudF9yb290LCBjYWNoZSk7CiAJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCWlmIChsb2FkX2NhY2hlX29ubHkpCkBAIC0zMzQ0LDggKzMzNDEsMTAgQEAKIAl1NjQgcmVzZXJ2ZWQ7CiAJdTY0IG1heF9yZWNsYWltOwogCXU2NCByZWNsYWltZWQgPSAwOworCWxvbmcgdGltZV9sZWZ0OwogCWludCBwYXVzZSA9IDE7CiAJaW50IG5yX3BhZ2VzID0gKDIgKiAxMDI0ICogMTAyNCkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpbnQgbG9vcHMgPSAwOwogCiAJYmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAlzcGFjZV9pbmZvID0gYmxvY2tfcnN2LT5zcGFjZV9pbmZvOwpAQCAtMzM1OCw3ICszMzU3LDcgQEAKIAogCW1heF9yZWNsYWltID0gbWluKHJlc2VydmVkLCB0b19yZWNsYWltKTsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKGxvb3BzIDwgMTAyNCkgewogCQkvKiBoYXZlIHRoZSBmbHVzaGVyIHRocmVhZHMganVtcCBpbiBhbmQgZG8gc29tZSBJTyAqLwogCQlzbXBfbWIoKTsKIAkJbnJfcGFnZXMgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcywKQEAgLTMzNjYsOCArMzM2NSwxMiBAQAogCQl3cml0ZWJhY2tfaW5vZGVzX3NiX25yX2lmX2lkbGUocm9vdC0+ZnNfaW5mby0+c2IsIG5yX3BhZ2VzKTsKIAogCQlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwotCQlpZiAocmVzZXJ2ZWQgPiBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZCkKKwkJaWYgKHJlc2VydmVkID4gc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpIHsKKwkJCWxvb3BzID0gMDsKIAkJCXJlY2xhaW1lZCArPSByZXNlcnZlZCAtIHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkOworCQl9IGVsc2UgeworCQkJbG9vcHMrKzsKKwkJfQogCQlyZXNlcnZlZCA9IHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkOwogCQlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiAKQEAgLTMzNzgsNyArMzM4MSwxMiBAQAogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KHBhdXNlKTsKKwkJdGltZV9sZWZ0ID0gc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CisKKwkJLyogV2Ugd2VyZSBpbnRlcnJ1cHRlZCwgZXhpdCAqLworCQlpZiAodGltZV9sZWZ0KQorCQkJYnJlYWs7CisKIAkJcGF1c2UgPDw9IDE7CiAJCWlmIChwYXVzZSA+IEhaIC8gMTApCiAJCQlwYXVzZSA9IEhaIC8gMTA7CkBAIC0zNTg4LDggKzM1OTYsMjAgQEAKIAogCWlmIChudW1fYnl0ZXMgPiAwKSB7CiAJCWlmIChkZXN0KSB7Ci0JCQlibG9ja19yc3ZfYWRkX2J5dGVzKGRlc3QsIG51bV9ieXRlcywgMCk7Ci0JCX0gZWxzZSB7CisJCQlzcGluX2xvY2soJmRlc3QtPmxvY2spOworCQkJaWYgKCFkZXN0LT5mdWxsKSB7CisJCQkJdTY0IGJ5dGVzX3RvX2FkZDsKKworCQkJCWJ5dGVzX3RvX2FkZCA9IGRlc3QtPnNpemUgLSBkZXN0LT5yZXNlcnZlZDsKKwkJCQlieXRlc190b19hZGQgPSBtaW4obnVtX2J5dGVzLCBieXRlc190b19hZGQpOworCQkJCWRlc3QtPnJlc2VydmVkICs9IGJ5dGVzX3RvX2FkZDsKKwkJCQlpZiAoZGVzdC0+cmVzZXJ2ZWQgPj0gZGVzdC0+c2l6ZSkKKwkJCQkJZGVzdC0+ZnVsbCA9IDE7CisJCQkJbnVtX2J5dGVzIC09IGJ5dGVzX3RvX2FkZDsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZkZXN0LT5sb2NrKTsKKwkJfQorCQlpZiAobnVtX2J5dGVzKSB7CiAJCQlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCQkJc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgLT0gbnVtX2J5dGVzOwogCQkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwpAQCAtNDAxMiw2ICs0MDMyLDcgQEAKIAogCW51bV9ieXRlcyA9IEFMSUdOKG51bV9ieXRlcywgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYXRvbWljX2RlYygmQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMpOworCVdBUk5fT04oYXRvbWljX3JlYWQoJkJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKSA8IDApOwogCiAJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKIAlucl9leHRlbnRzID0gYXRvbWljX3JlYWQoJkJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKTsKQEAgLTU2MzMsNiArNTY1NCw3IEBACiAJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHUzMiBibG9ja3NpemUpCiB7CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKmdsb2JhbF9yc3YgPSAmcm9vdC0+ZnNfaW5mby0+Z2xvYmFsX2Jsb2NrX3JzdjsKIAlpbnQgcmV0OwogCiAJYmxvY2tfcnN2ID0gZ2V0X2Jsb2NrX3Jzdih0cmFucywgcm9vdCk7CkBAIC01NjQwLDE0ICs1NjYyLDM5IEBACiAJaWYgKGJsb2NrX3Jzdi0+c2l6ZSA9PSAwKSB7CiAJCXJldCA9IHJlc2VydmVfbWV0YWRhdGFfYnl0ZXModHJhbnMsIHJvb3QsIGJsb2NrX3JzdiwKIAkJCQkJICAgICBibG9ja3NpemUsIDApOwotCQlpZiAocmV0KQorCQkvKgorCQkgKiBJZiB3ZSBjb3VsZG4ndCByZXNlcnZlIG1ldGFkYXRhIGJ5dGVzIHRyeSBhbmQgdXNlIHNvbWUgZnJvbQorCQkgKiB0aGUgZ2xvYmFsIHJlc2VydmUuCisJCSAqLworCQlpZiAocmV0ICYmIGJsb2NrX3JzdiAhPSBnbG9iYWxfcnN2KSB7CisJCQlyZXQgPSBibG9ja19yc3ZfdXNlX2J5dGVzKGdsb2JhbF9yc3YsIGJsb2Nrc2l6ZSk7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gZ2xvYmFsX3JzdjsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0gZWxzZSBpZiAocmV0KSB7CisJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9CiAJCXJldHVybiBibG9ja19yc3Y7CiAJfQogCiAJcmV0ID0gYmxvY2tfcnN2X3VzZV9ieXRlcyhibG9ja19yc3YsIGJsb2Nrc2l6ZSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBibG9ja19yc3Y7CisJaWYgKHJldCkgeworCQlXQVJOX09OKDEpOworCQlyZXQgPSByZXNlcnZlX21ldGFkYXRhX2J5dGVzKHRyYW5zLCByb290LCBibG9ja19yc3YsIGJsb2Nrc2l6ZSwKKwkJCQkJICAgICAwKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXNwaW5fbG9jaygmYmxvY2tfcnN2LT5sb2NrKTsKKwkJCWJsb2NrX3Jzdi0+c2l6ZSArPSBibG9ja3NpemU7CisJCQlzcGluX3VubG9jaygmYmxvY2tfcnN2LT5sb2NrKTsKKwkJCXJldHVybiBibG9ja19yc3Y7CisJCX0gZWxzZSBpZiAocmV0ICYmIGJsb2NrX3JzdiAhPSBnbG9iYWxfcnN2KSB7CisJCQlyZXQgPSBibG9ja19yc3ZfdXNlX2J5dGVzKGdsb2JhbF9yc3YsIGJsb2Nrc2l6ZSk7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gZ2xvYmFsX3JzdjsKKwkJfQorCX0KIAogCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwogfQpAQCAtNjIyMSw2ICs2MjY4LDggQEAKIAlCVUdfT04oIXdjKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24odHJlZV9yb290LCAwKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CisKIAlpZiAoYmxvY2tfcnN2KQogCQl0cmFucy0+YmxvY2tfcnN2ID0gYmxvY2tfcnN2OwogCkBAIC02MzE4LDYgKzYzNjcsNyBAQAogCiAJCQlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHRyZWVfcm9vdCk7CiAJCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHRyZWVfcm9vdCwgMCk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCQlpZiAoYmxvY2tfcnN2KQogCQkJCXRyYW5zLT5ibG9ja19yc3YgPSBibG9ja19yc3Y7CiAJCX0KQEAgLTY0NDYsNiArNjQ5Niw4IEBACiAJaW50IHJldCA9IDA7CiAKIAlyYSA9IGt6YWxsb2Moc2l6ZW9mKCpyYSksIEdGUF9OT0ZTKTsKKwlpZiAoIXJhKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlmaXJzdF9pbmRleCA9IHN0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC03NDc3LDcgKzc1MjksNyBAQAogCQlCVUdfT04ocmVsb2Nfcm9vdC0+Y29tbWl0X3Jvb3QgIT0gTlVMTCk7CiAJCXdoaWxlICgxKSB7CiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlCVUdfT04oIXRyYW5zKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+ZHJvcF9tdXRleCk7CiAJCQlyZXQgPSBidHJmc19kcm9wX3NuYXBzaG90KHRyYW5zLCByZWxvY19yb290KTsKQEAgLTc1MzUsNyArNzU4Nyw3IEBACiAKIAlpZiAoZm91bmQpIHsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJQlVHX09OKCF0cmFucyk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJQlVHX09OKHJldCk7CiAJfQpAQCAtNzc3OSw3ICs3ODMxLDcgQEAKIAogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihleHRlbnRfcm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJaWYgKGV4dGVudF9rZXktPm9iamVjdGlkID09IDApIHsKIAkJcmV0ID0gZGVsX2V4dGVudF96ZXJvKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgZXh0ZW50X2tleSk7CkBAIC04MjcwLDYgKzgzMjIsMTMgQEAKIAkJaWYgKGJsb2NrX2dyb3VwLT5jYWNoZWQgPT0gQlRSRlNfQ0FDSEVfU1RBUlRFRCkKIAkJCXdhaXRfYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCk7CiAKKwkJLyoKKwkJICogV2UgaGF2ZW4ndCBjYWNoZWQgdGhpcyBibG9jayBncm91cCwgd2hpY2ggbWVhbnMgd2UgY291bGQKKwkJICogcG9zc2libHkgaGF2ZSBleGNsdWRlZCBleHRlbnRzIG9uIHRoaXMgYmxvY2sgZ3JvdXAuCisJCSAqLworCQlpZiAoYmxvY2tfZ3JvdXAtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9OTykKKwkJCWZyZWVfZXhjbHVkZWRfZXh0ZW50cyhpbmZvLT5leHRlbnRfcm9vdCwgYmxvY2tfZ3JvdXApOworCiAJCWJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2NhY2hlKGJsb2NrX2dyb3VwKTsKIAkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIApAQCAtODM4NSw2ICs4NDQ0LDEzIEBACiAJCWNhY2hlLT5zZWN0b3JzaXplID0gcm9vdC0+c2VjdG9yc2l6ZTsKIAogCQkvKgorCQkgKiBXZSBuZWVkIHRvIGV4Y2x1ZGUgdGhlIHN1cGVyIHN0cmlwZXMgbm93IHNvIHRoYXQgdGhlIHNwYWNlCisJCSAqIGluZm8gaGFzIHN1cGVyIGJ5dGVzIGFjY291bnRlZCBmb3IsIG90aGVyd2lzZSB3ZSdsbCB0aGluaworCQkgKiB3ZSBoYXZlIG1vcmUgc3BhY2UgdGhhbiB3ZSBhY3R1YWxseSBkby4KKwkJICovCisJCWV4Y2x1ZGVfc3VwZXJfc3RyaXBlcyhyb290LCBjYWNoZSk7CisKKwkJLyoKIAkJICogY2hlY2sgZm9yIHR3byBjYXNlcywgZWl0aGVyIHdlIGFyZSBmdWxsLCBhbmQgdGhlcmVmb3JlCiAJCSAqIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGNhY2hpbmcgd29yayBzaW5jZSB3ZSB3b24ndAogCQkgKiBmaW5kIGFueSBzcGFjZSwgb3Igd2UgYXJlIGVtcHR5LCBhbmQgd2UgY2FuIGp1c3QgYWRkIGFsbApAQCAtODM5MiwxMiArODQ1OCwxMCBAQAogCQkgKiB0aW1lLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGZ1bGwgY2FzZS4KIAkJICovCiAJCWlmIChmb3VuZF9rZXkub2Zmc2V0ID09IGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtKSkgewotCQkJZXhjbHVkZV9zdXBlcl9zdHJpcGVzKHJvb3QsIGNhY2hlKTsKIAkJCWNhY2hlLT5sYXN0X2J5dGVfdG9fdW5waW4gPSAodTY0KS0xOwogCQkJY2FjaGUtPmNhY2hlZCA9IEJUUkZTX0NBQ0hFX0ZJTklTSEVEOwogCQkJZnJlZV9leGNsdWRlZF9leHRlbnRzKHJvb3QsIGNhY2hlKTsKIAkJfSBlbHNlIGlmIChidHJmc19ibG9ja19ncm91cF91c2VkKCZjYWNoZS0+aXRlbSkgPT0gMCkgewotCQkJZXhjbHVkZV9zdXBlcl9zdHJpcGVzKHJvb3QsIGNhY2hlKTsKIAkJCWNhY2hlLT5sYXN0X2J5dGVfdG9fdW5waW4gPSAodTY0KS0xOwogCQkJY2FjaGUtPmNhY2hlZCA9IEJUUkZTX0NBQ0hFX0ZJTklTSEVEOwogCQkJYWRkX25ld19mcmVlX3NwYWNlKGNhY2hlLCByb290LT5mc19pbmZvLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCAyZTk5M2NmLi41ZTc2YTQ3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMTg2NSw3ICsxODY1LDcgQEAKIAliaW9fZ2V0KGJpbyk7CiAKIAlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+c3VibWl0X2Jpb19ob29rKQotCQl0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vayhwYWdlLT5tYXBwaW5nLT5ob3N0LCBydywgYmlvLAorCQlyZXQgPSB0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vayhwYWdlLT5tYXBwaW5nLT5ob3N0LCBydywgYmlvLAogCQkJCQkgICBtaXJyb3JfbnVtLCBiaW9fZmxhZ3MsIHN0YXJ0KTsKIAllbHNlCiAJCXN1Ym1pdF9iaW8ocncsIGJpbyk7CkBAIC0xOTIwLDYgKzE5MjAsOCBAQAogCQluciA9IGJpb19nZXRfbnJfdmVjcyhiZGV2KTsKIAogCWJpbyA9IGJ0cmZzX2Jpb19hbGxvYyhiZGV2LCBzZWN0b3IsIG5yLCBHRlBfTk9GUyB8IF9fR0ZQX0hJR0gpOworCWlmICghYmlvKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHBhZ2Vfc2l6ZSwgb2Zmc2V0KTsKIAliaW8tPmJpX2VuZF9pbyA9IGVuZF9pb19mdW5jOwpAQCAtMjEyNiw3ICsyMTI4LDcgQEAKIAlyZXQgPSBfX2V4dGVudF9yZWFkX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLCBnZXRfZXh0ZW50LCAmYmlvLCAwLAogCQkJCSAgICAgICZiaW9fZmxhZ3MpOwogCWlmIChiaW8pCi0JCXN1Ym1pdF9vbmVfYmlvKFJFQUQsIGJpbywgMCwgYmlvX2ZsYWdzKTsKKwkJcmV0ID0gc3VibWl0X29uZV9iaW8oUkVBRCwgYmlvLCAwLCBiaW9fZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKaW5kZXggYTU2MmEyNS4uNGYxOWEzZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS1pdGVtLmMKKysrIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKQEAgLTUzNiw2ICs1MzYsOCBAQAogCXJvb3QgPSByb290LT5mc19pbmZvLT5jc3VtX3Jvb3Q7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl3aGlsZSAoMSkgewogCQlrZXkub2JqZWN0aWQgPSBCVFJGU19FWFRFTlRfQ1NVTV9PQkpFQ1RJRDsKQEAgLTU0OCw3ICs1NTAsMTAgQEAKIAkJCWlmIChwYXRoLT5zbG90c1swXSA9PSAwKQogCQkJCWdvdG8gb3V0OwogCQkJcGF0aC0+c2xvdHNbMF0tLTsKKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlnb3RvIG91dDsKIAkJfQorCiAJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGM4MDBkNTguLmMxZDNhODEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTc5Myw4ICs3OTMsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJcGFnZXNbaV0gPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXggKyBpKTsKIAkJaWYgKCFwYWdlc1tpXSkgewotCQkJZXJyID0gLUVOT01FTTsKLQkJCUJVR19PTigxKTsKKwkJCWludCBjOworCQkJZm9yIChjID0gaSAtIDE7IGMgPj0gMDsgYy0tKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZXNbY10pOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tjXSk7CisJCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2VzW2ldKTsKIAl9CkBAIC05NDYsNiArOTUwLDEwIEBACiAJCSAgICAgUEFHRV9DQUNIRV9TSVpFLCBQQUdFX0NBQ0hFX1NJWkUgLwogCQkgICAgIChzaXplb2Yoc3RydWN0IHBhZ2UgKikpKTsKIAlwYWdlcyA9IGttYWxsb2MobnJwdHJzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCS8qIGdlbmVyaWNfd3JpdGVfY2hlY2tzIGNhbiBjaGFuZ2Ugb3VyIHBvcyAqLwogCXN0YXJ0X3BvcyA9IHBvczsKQEAgLTk4NCw4ICs5OTIsOCBAQAogCQlzaXplX3Qgd3JpdGVfYnl0ZXMgPSBtaW4oaW92X2l0ZXJfY291bnQoJmkpLAogCQkJCQkgbnJwdHJzICogKHNpemVfdClQQUdFX0NBQ0hFX1NJWkUgLQogCQkJCQkgb2Zmc2V0KTsKLQkJc2l6ZV90IG51bV9wYWdlcyA9ICh3cml0ZV9ieXRlcyArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+Ci0JCQkJCVBBR0VfQ0FDSEVfU0hJRlQ7CisJCXNpemVfdCBudW1fcGFnZXMgPSAod3JpdGVfYnl0ZXMgKyBvZmZzZXQgKworCQkJCSAgICBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCiAJCVdBUk5fT04obnVtX3BhZ2VzID4gbnJwdHJzKTsKIAkJbWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucnB0cnMpOwpAQCAtMTAxNSw4ICsxMDIzLDggQEAKIAogCQljb3BpZWQgPSBidHJmc19jb3B5X2Zyb21fdXNlcihwb3MsIG51bV9wYWdlcywKIAkJCQkJICAgd3JpdGVfYnl0ZXMsIHBhZ2VzLCAmaSk7Ci0JCWRpcnR5X3BhZ2VzID0gKGNvcGllZCArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+Ci0JCQkJCVBBR0VfQ0FDSEVfU0hJRlQ7CisJCWRpcnR5X3BhZ2VzID0gKGNvcGllZCArIG9mZnNldCArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+CisJCQkJUEFHRV9DQUNIRV9TSElGVDsKIAogCQlpZiAobnVtX3BhZ2VzID4gZGlydHlfcGFnZXMpIHsKIAkJCWlmIChjb3BpZWQgPiAwKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDYwZDY4NDIuLmEwMzkwNjUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTk4NywxMSArOTg3LDE4IEBACiAJcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgdm9pZCB1bmxpbmtfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8pCitzdGF0aWMgaW5saW5lIHZvaWQKK19fdW5saW5rX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewogCXJiX2VyYXNlKCZpbmZvLT5vZmZzZXRfaW5kZXgsICZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQpOwogCWJsb2NrX2dyb3VwLT5mcmVlX2V4dGVudHMtLTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQoreworCV9fdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwogCWJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlIC09IGluZm8tPmJ5dGVzOwogfQogCkBAIC0xMDE2LDE0ICsxMDIzLDE4IEBACiAJdTY0IG1heF9ieXRlczsKIAl1NjQgYml0bWFwX2J5dGVzOwogCXU2NCBleHRlbnRfYnl0ZXM7CisJdTY0IHNpemUgPSBibG9ja19ncm91cC0+a2V5Lm9mZnNldDsKIAogCS8qCiAJICogVGhlIGdvYWwgaXMgdG8ga2VlcCB0aGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSB1c2VkIHBlciAxZ2Igb2Ygc3BhY2UKIAkgKiBhdCBvciBiZWxvdyAzMmssIHNvIHdlIG5lZWQgdG8gYWRqdXN0IGhvdyBtdWNoIG1lbW9yeSB3ZSBhbGxvdyB0byBiZQogCSAqIHVzZWQgYnkgZXh0ZW50IGJhc2VkIGZyZWUgc3BhY2UgdHJhY2tpbmcKIAkgKi8KLQltYXhfYnl0ZXMgPSBNQVhfQ0FDSEVfQllURVNfUEVSX0dJRyAqCi0JCShkaXY2NF91NjQoYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQsIDEwMjQgKiAxMDI0ICogMTAyNCkpOworCWlmIChzaXplIDwgMTAyNCAqIDEwMjQgKiAxMDI0KQorCQltYXhfYnl0ZXMgPSBNQVhfQ0FDSEVfQllURVNfUEVSX0dJRzsKKwllbHNlCisJCW1heF9ieXRlcyA9IE1BWF9DQUNIRV9CWVRFU19QRVJfR0lHICoKKwkJCWRpdjY0X3U2NChzaXplLCAxMDI0ICogMTAyNCAqIDEwMjQpOwogCiAJLyoKIAkgKiB3ZSB3YW50IHRvIGFjY291bnQgZm9yIDEgbW9yZSBiaXRtYXAgdGhhbiB3aGF0IHdlIGhhdmUgc28gd2UgY2FuIG1ha2UKQEAgLTExNzEsNiArMTE4MiwxNiBAQAogCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJpdG1hcF9pbmZvKQoreworCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbyk7CisJa2ZyZWUoYml0bWFwX2luZm8tPmJpdG1hcCk7CisJa2ZyZWUoYml0bWFwX2luZm8pOworCWJsb2NrX2dyb3VwLT50b3RhbF9iaXRtYXBzLS07CisJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Cit9CisKIHN0YXRpYyBub2lubGluZSBpbnQgcmVtb3ZlX2Zyb21fYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCiAJCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYml0bWFwX2luZm8sCiAJCQkgICAgICB1NjQgKm9mZnNldCwgdTY0ICpieXRlcykKQEAgLTExOTUsNiArMTIxNiw3IEBACiAJICovCiAJc2VhcmNoX3N0YXJ0ID0gKm9mZnNldDsKIAlzZWFyY2hfYnl0ZXMgPSAqYnl0ZXM7CisJc2VhcmNoX2J5dGVzID0gbWluKHNlYXJjaF9ieXRlcywgZW5kIC0gc2VhcmNoX3N0YXJ0ICsgMSk7CiAJcmV0ID0gc2VhcmNoX2JpdG1hcChibG9ja19ncm91cCwgYml0bWFwX2luZm8sICZzZWFyY2hfc3RhcnQsCiAJCQkgICAgJnNlYXJjaF9ieXRlcyk7CiAJQlVHX09OKHJldCA8IDAgfHwgc2VhcmNoX3N0YXJ0ICE9ICpvZmZzZXQpOwpAQCAtMTIxMSwxMyArMTIzMyw4IEBACiAKIAlpZiAoKmJ5dGVzKSB7CiAJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfbmV4dCgmYml0bWFwX2luZm8tPm9mZnNldF9pbmRleCk7Ci0JCWlmICghYml0bWFwX2luZm8tPmJ5dGVzKSB7Ci0JCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwotCQkJa2ZyZWUoYml0bWFwX2luZm8tPmJpdG1hcCk7Ci0JCQlrZnJlZShiaXRtYXBfaW5mbyk7Ci0JCQlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOwotCQkJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Ci0JCX0KKwkJaWYgKCFiaXRtYXBfaW5mby0+Ynl0ZXMpCisJCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwogCiAJCS8qCiAJCSAqIG5vIGVudHJ5IGFmdGVyIHRoaXMgYml0bWFwLCBidXQgd2Ugc3RpbGwgaGF2ZSBieXRlcyB0bwpAQCAtMTI1MCwxMyArMTI2Nyw4IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlnb3RvIGFnYWluOwotCX0gZWxzZSBpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykgewotCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwotCQlrZnJlZShiaXRtYXBfaW5mby0+Yml0bWFwKTsKLQkJa2ZyZWUoYml0bWFwX2luZm8pOwotCQlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOwotCQlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKLQl9CisJfSBlbHNlIGlmICghYml0bWFwX2luZm8tPmJ5dGVzKQorCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgYml0bWFwX2luZm8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzU5LDIyICsxMzcxLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQorYm9vbCB0cnlfbWVyZ2VfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywgYm9vbCB1cGRhdGVfc3RhdCkKIHsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmlnaHRfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxlZnRfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8gPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlKSwgR0ZQX05PRlMpOwotCWlmICghaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JaW5mby0+Ynl0ZXMgPSBieXRlczsKLQotCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxlZnRfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmlnaHRfaW5mbzsKKwlib29sIG1lcmdlZCA9IGZhbHNlOworCXU2NCBvZmZzZXQgPSBpbmZvLT5vZmZzZXQ7CisJdTY0IGJ5dGVzID0gaW5mby0+Ynl0ZXM7CiAKIAkvKgogCSAqIGZpcnN0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGZyZWUgc3BhY2UgYWRqYWNlbnQgdG8gdGhlIHJhbmdlIHdlCkBAIC0xMzg4LDM3ICsxMzkyLDYyIEBACiAJZWxzZQogCQlsZWZ0X2luZm8gPSB0cmVlX3NlYXJjaF9vZmZzZXQoYmxvY2tfZ3JvdXAsIG9mZnNldCAtIDEsIDAsIDApOwogCi0JLyoKLQkgKiBJZiB0aGVyZSB3YXMgbm8gZXh0ZW50IGRpcmVjdGx5IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mIHRoaXMgbmV3Ci0JICogZXh0ZW50IHRoZW4gd2Uga25vdyB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IGV4dGVudCwgc28KLQkgKiBiZWZvcmUgd2UgZG8gdGhhdCBzZWUgaWYgd2UgbmVlZCB0byBkcm9wIHRoaXMgaW50byBhIGJpdG1hcAotCSAqLwotCWlmICgoIWxlZnRfaW5mbyB8fCBsZWZ0X2luZm8tPmJpdG1hcCkgJiYKLQkgICAgKCFyaWdodF9pbmZvIHx8IHJpZ2h0X2luZm8tPmJpdG1hcCkpIHsKLQkJcmV0ID0gaW5zZXJ0X2ludG9fYml0bWFwKGJsb2NrX2dyb3VwLCBpbmZvKTsKLQotCQlpZiAocmV0IDwgMCkgewotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAocmV0KSB7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAlpZiAocmlnaHRfaW5mbyAmJiAhcmlnaHRfaW5mby0+Yml0bWFwKSB7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKKwkJaWYgKHVwZGF0ZV9zdGF0KQorCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIHJpZ2h0X2luZm8pOworCQllbHNlCisJCQlfX3VubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKIAkJaW5mby0+Ynl0ZXMgKz0gcmlnaHRfaW5mby0+Ynl0ZXM7CiAJCWtmcmVlKHJpZ2h0X2luZm8pOworCQltZXJnZWQgPSB0cnVlOwogCX0KIAogCWlmIChsZWZ0X2luZm8gJiYgIWxlZnRfaW5mby0+Yml0bWFwICYmCiAJICAgIGxlZnRfaW5mby0+b2Zmc2V0ICsgbGVmdF9pbmZvLT5ieXRlcyA9PSBvZmZzZXQpIHsKLQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGxlZnRfaW5mbyk7CisJCWlmICh1cGRhdGVfc3RhdCkKKwkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOworCQllbHNlCisJCQlfX3VubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOwogCQlpbmZvLT5vZmZzZXQgPSBsZWZ0X2luZm8tPm9mZnNldDsKIAkJaW5mby0+Ynl0ZXMgKz0gbGVmdF9pbmZvLT5ieXRlczsKIAkJa2ZyZWUobGVmdF9pbmZvKTsKKwkJbWVyZ2VkID0gdHJ1ZTsKIAl9CiAKKwlyZXR1cm4gbWVyZ2VkOworfQorCitpbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCit7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm87CisJaW50IHJldCA9IDA7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UpLCBHRlBfTk9GUyk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm8tPm9mZnNldCA9IG9mZnNldDsKKwlpbmZvLT5ieXRlcyA9IGJ5dGVzOworCisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKworCWlmICh0cnlfbWVyZ2VfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbywgdHJ1ZSkpCisJCWdvdG8gbGluazsKKworCS8qCisJICogVGhlcmUgd2FzIG5vIGV4dGVudCBkaXJlY3RseSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGlzIG5ldworCSAqIGV4dGVudCB0aGVuIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyBleHRlbnQsIHNvCisJICogYmVmb3JlIHdlIGRvIHRoYXQgc2VlIGlmIHdlIG5lZWQgdG8gZHJvcCB0aGlzIGludG8gYSBiaXRtYXAKKwkgKi8KKwlyZXQgPSBpbnNlcnRfaW50b19iaXRtYXAoYmxvY2tfZ3JvdXAsIGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocmV0KSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KK2xpbms6CiAJcmV0ID0gbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAlpZiAocmV0KQogCQlrZnJlZShpbmZvKTsKQEAgLTE2MjEsNiArMTY1MCw3IEBACiAJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKIAkJcmJfZXJhc2UoJmVudHJ5LT5vZmZzZXRfaW5kZXgsICZjbHVzdGVyLT5yb290KTsKIAkJQlVHX09OKGVudHJ5LT5iaXRtYXApOworCQl0cnlfbWVyZ2VfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnksIGZhbHNlKTsKIAkJdHJlZV9pbnNlcnRfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCiAJCQkJICAgZW50cnktPm9mZnNldCwgJmVudHJ5LT5vZmZzZXRfaW5kZXgsIDApOwogCX0KQEAgLTE2ODUsMTMgKzE3MTUsOCBAQAogCXJldCA9IG9mZnNldDsKIAlpZiAoZW50cnktPmJpdG1hcCkgewogCQliaXRtYXBfY2xlYXJfYml0cyhibG9ja19ncm91cCwgZW50cnksIG9mZnNldCwgYnl0ZXMpOwotCQlpZiAoIWVudHJ5LT5ieXRlcykgewotCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKLQkJCWtmcmVlKGVudHJ5LT5iaXRtYXApOwotCQkJa2ZyZWUoZW50cnkpOwotCQkJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKLQkJCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwotCQl9CisJCWlmICghZW50cnktPmJ5dGVzKQorCQkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKIAl9IGVsc2UgewogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnkpOwogCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOwpAQCAtMTc4OSw2ICsxODE0LDggQEAKIAogCXJldCA9IHNlYXJjaF9zdGFydDsKIAliaXRtYXBfY2xlYXJfYml0cyhibG9ja19ncm91cCwgZW50cnksIHJldCwgYnl0ZXMpOworCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkKKwkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKIG91dDoKIAlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CiAJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwpAQCAtMTg0MiwxNSArMTg2OSwyNiBAQAogCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOwogCQllbnRyeS0+Ynl0ZXMgLT0gYnl0ZXM7CiAKLQkJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKSB7CisJCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkKIAkJCXJiX2VyYXNlKCZlbnRyeS0+b2Zmc2V0X2luZGV4LCAmY2x1c3Rlci0+cm9vdCk7Ci0JCQlrZnJlZShlbnRyeSk7Ci0JCX0KIAkJYnJlYWs7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKIAorCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKKwlibG9ja19ncm91cC0+ZnJlZV9zcGFjZSAtPSBieXRlczsKKwlpZiAoZW50cnktPmJ5dGVzID09IDApIHsKKwkJYmxvY2tfZ3JvdXAtPmZyZWVfZXh0ZW50cy0tOworCQlrZnJlZShlbnRyeSk7CisJfQorCisJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMTYwYjU1Yi4uYmNjNDYxYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAl9CiAJaWYgKHN0YXJ0ID09IDApIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQlCVUdfT04oIXRyYW5zKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKQEAgLTYxMiw2ICs2MTIsNyBAQAogCQkJICAgIEdGUF9OT0ZTKTsKIAogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsCiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKQEAgLTc3MSw3ICs3NzIsNyBAQAogCiAJQlVHX09OKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290KTsKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC0xMDQ5LDcgKzEwNTAsNyBAQAogCX0gZWxzZSB7CiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKIAl9Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJY293X3N0YXJ0ID0gKHU2NCktMTsKIAljdXJfb2Zmc2V0ID0gc3RhcnQ7CkBAIC0xNTU3LDYgKzE1NTgsNyBAQAogb3V0X3BhZ2U6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCWtmcmVlKGZpeHVwKTsKIH0KIAogLyoKQEAgLTE3MDMsNyArMTcwNSw3IEBACiAJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKIAkJCWVsc2UKIAkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlCVUdfT04oIXRyYW5zKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQkJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAJCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKQEAgLTE3MjAsNiArMTcyMiw3IEBACiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CiAJZWxzZQogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC0yMzU0LDYgKzIzNTcsNyBAQAogCQkgKi8KIAkJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpIHsKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCQlidHJmc19vcnBoYW5fZGVsKHRyYW5zLCBpbm9kZSk7CiAJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJaXB1dChpbm9kZSk7CkBAIC0yMzgxLDYgKzIzODUsNyBAQAogCiAJaWYgKHJvb3QtPm9ycGhhbl9ibG9ja19yc3YgfHwgcm9vdC0+b3JwaGFuX2l0ZW1faW5zZXJ0ZWQpIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJfQogCkBAIC0yNjQxLDcgKzI2NDYsNyBAQAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlnb3RvIG91dDsKIAl9CiAKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CkBAIC0yNzE0LDkgKzI3MTksMTAgQEAKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWI7CiAJaW50IGxldmVsOwogCXU2NCByZWZzID0gMTsKLQlpbnQgdW5pbml0aWFsaXplZF92YXIocmV0KTsKIAogCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IEJUUkZTX01BWF9MRVZFTDsgbGV2ZWwrKykgeworCQlpbnQgcmV0OworCiAJCWlmICghcGF0aC0+bm9kZXNbbGV2ZWxdKQogCQkJYnJlYWs7CiAJCWViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwpAQCAtMjcyNyw3ICsyNzMzLDcgQEAKIAkJaWYgKHJlZnMgPiAxKQogCQkJcmV0dXJuIDE7CiAJfQotCXJldHVybiByZXQ7IC8qIFhYWCBjYWxsZXJzPyAqLworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNDEzNCw3ICs0MTQwLDcgQEAKIAl9CiAJc3JjdV9yZWFkX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+c3Vidm9sX3NyY3UsIGluZGV4KTsKIAotCWlmIChyb290ICE9IHN1Yl9yb290KSB7CisJaWYgKCFJU19FUlIoaW5vZGUpICYmIHJvb3QgIT0gc3ViX3Jvb3QpIHsKIAkJZG93bl9yZWFkKCZyb290LT5mc19pbmZvLT5jbGVhbnVwX3dvcmtfc2VtKTsKIAkJaWYgKCEoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQkJYnRyZnNfb3JwaGFuX2NsZWFudXAoc3ViX3Jvb3QpOwpAQCAtNDM0Nyw2ICs0MzUzLDggQEAKIAkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CiAJCWVsc2UKIAkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJaWYgKElTX0VSUih0cmFucykpCisJCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQlpZiAobm9sb2NrKQogCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX25vbG9jayh0cmFucywgcm9vdCk7CkBAIC00MzcyLDYgKzQzODAsNyBAQAogCQlyZXR1cm47CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CkBAIC01MTc2LDYgKzUxODUsOCBAQAogCQkJCWVtID0gTlVMTDsKIAkJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJCWlmIChJU19FUlIodHJhbnMpKQorCQkJCQlyZXR1cm4gRVJSX0NBU1QodHJhbnMpOwogCQkJCWdvdG8gYWdhaW47CiAJCQl9CiAJCQltYXAgPSBrbWFwKHBhZ2UpOwpAQCAtNTI4MCw4ICs1MjkxLDggQEAKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSwgMCk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtNTUwNSw3ICs1NTE2LDcgQEAKIAkJICogd2hpbGUgd2UgbG9vayBmb3Igbm9jb3cgY3Jvc3MgcmVmcwogCQkgKi8KIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCQlpZiAoIXRyYW5zKQorCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCWdvdG8gbXVzdF9jb3c7CiAKIAkJaWYgKGNhbl9ub2Nvd19vZGlyZWN0KHRyYW5zLCBpbm9kZSwgc3RhcnQsIGxlbikgPT0gMSkgewpAQCAtNTY0MCw3ICs1NjUxLDcgQEAKIAlCVUdfT04oIW9yZGVyZWQpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWlmICghdHJhbnMpIHsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCBhNTA2YTIyLi4wMmQyMjRlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJQlVHX09OKHJldCk7CkBAIC05MDcsNiArOTA3LDEwIEBACiAKIAlpZiAobmV3X3NpemUgPiBvbGRfc2l6ZSkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQkJcmV0ID0gUFRSX0VSUih0cmFucyk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAkJcmV0ID0gYnRyZnNfZ3Jvd19kZXZpY2UodHJhbnMsIGRldmljZSwgbmV3X3NpemUpOwogCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0gZWxzZSB7CkBAIC0xODk4LDcgKzE5MDIsMTAgQEAKIAogCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOwogCQkJbmV3X2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKLQkJCW5ld19rZXkub2Zmc2V0ID0ga2V5Lm9mZnNldCArIGRlc3RvZmYgLSBvZmY7CisJCQlpZiAob2ZmIDw9IGtleS5vZmZzZXQpCisJCQkJbmV3X2tleS5vZmZzZXQgPSBrZXkub2Zmc2V0ICsgZGVzdG9mZiAtIG9mZjsKKwkJCWVsc2UKKwkJCQluZXdfa2V5Lm9mZnNldCA9IGRlc3RvZmY7CiAKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCQlpZiAoSVNfRVJSKHRyYW5zKSkgewpAQCAtMjA4Miw3ICsyMDg5LDcgQEAKIAogCXJldCA9IC1FTk9NRU07CiAJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAoIXRyYW5zKQorCWlmIChJU19FUlIodHJhbnMpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdHJhbnM7CkBAIC0yMTM4LDkgKzIxNDUsOSBAQAogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JaWYgKCF0cmFucykgeworCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAl9CiAKIAlkaXJfaWQgPSBidHJmc19zdXBlcl9yb290X2Rpcigmcm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSk7CkBAIC0yMzM0LDYgKzIzNDEsOCBAQAogCXU2NCB0cmFuc2lkOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXRyYW5zaWQgPSB0cmFucy0+dHJhbnNpZDsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb25fYXN5bmModHJhbnMsIHJvb3QsIDApOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IDJiNjFlMWQuLjA4M2E1NTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJCQkJICB1NjQgZmlsZV9vZmZzZXQpCiB7CiAJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmdHJlZS0+dHJlZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcHJldjsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IHJiX25vZGUgKnJldDsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKmVudHJ5OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9wcmludC10cmVlLmMgYi9mcy9idHJmcy9wcmludC10cmVlLmMKaW5kZXggMGQxMjZiZS4uZmIyNjA1ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcHJpbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL3ByaW50LXRyZWUuYwpAQCAtMjYwLDYgKzI2MCw3IEBACiAjZWxzZQogCQkJQlVHKCk7CiAjZW5kaWYKKwkJCWJyZWFrOwogCQljYXNlIEJUUkZTX0JMT0NLX0dST1VQX0lURU1fS0VZOgogCQkJYmkgPSBidHJmc19pdGVtX3B0cihsLCBpLAogCQkJCQkgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2l0ZW0pOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IDA0NWM5YzIuLjFmNTU1NmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTIwMjgsNiArMjAyOCw3IEBACiAKIAl3aGlsZSAoMSkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSByYy0+YmxvY2tfcnN2OwogCiAJCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwgcmMtPmJsb2NrX3JzdiwKQEAgLTIxNDcsNiArMjE0OCwxMiBAQAogCX0KIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWlmICghZXJyKQorCQkJYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2UocmMtPmV4dGVudF9yb290LAorCQkJCQkJcmMtPmJsb2NrX3JzdiwgbnVtX2J5dGVzKTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAogCWlmICghZXJyKSB7CiAJCWlmIChudW1fYnl0ZXMgIT0gcmMtPm1lcmdpbmdfcnN2X3NpemUpIHsKQEAgLTMyMjIsNiArMzIyOSw3IEBACiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzYyOCw2ICszNjM2LDcgQEAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogCXJldHVybiAwOwogfQpAQCAtMzY1Nyw2ICszNjY2LDcgQEAKIAogCXdoaWxlICgxKSB7CiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAwKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJCWlmICh1cGRhdGVfYmFja3JlZl9jYWNoZSh0cmFucywgJnJjLT5iYWNrcmVmX2NhY2hlKSkgewogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwpAQCAtMzgwNCw3ICszODE0LDEwIEBACiAKIAkvKiBnZXQgcmlkIG9mIHBpbm5lZCBleHRlbnRzICovCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7Ci0JYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOworCWlmIChJU19FUlIodHJhbnMpKQorCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwllbHNlCisJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIG91dF9mcmVlOgogCWJ0cmZzX2ZyZWVfYmxvY2tfcnN2KHJjLT5leHRlbnRfcm9vdCwgcmMtPmJsb2NrX3Jzdik7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpAQCAtNDAyMiw2ICs0MDM1LDcgQEAKIAlpbnQgcmV0OwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LT5mc19pbmZvLT50cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCW1lbXNldCgmcm9vdC0+cm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MsIDAsCiAJCXNpemVvZihyb290LT5yb290X2l0ZW0uZHJvcF9wcm9ncmVzcykpOwpAQCAtNDEyNSw2ICs0MTM5LDExIEBACiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIG91dF9mcmVlOworCX0KIAogCXJjLT5tZXJnZV9yZWxvY190cmVlID0gMTsKIApAQCAtNDE1NCw5ICs0MTczLDEzIEBACiAJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKLQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7Ci1vdXQ6CisJaWYgKElTX0VSUih0cmFucykpCisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCWVsc2UKKwkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOworb3V0X2ZyZWU6CiAJa2ZyZWUocmMpOworb3V0OgogCXdoaWxlICghbGlzdF9lbXB0eSgmcmVsb2Nfcm9vdHMpKSB7CiAJCXJlbG9jX3Jvb3QgPSBsaXN0X2VudHJ5KHJlbG9jX3Jvb3RzLm5leHQsCiAJCQkJCXN0cnVjdCBidHJmc19yb290LCByb290X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggYjIxMzBjNC4uYTAwNDAwOCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0zODMsNyArMzgzLDcgQEAKIAkJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKipmc19kZXZpY2VzKQogewogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKLQljaGFyICpvcHRzLCAqcDsKKwljaGFyICpvcHRzLCAqb3JpZywgKnA7CiAJaW50IGVycm9yID0gMDsKIAlpbnQgaW50YXJnOwogCkBAIC0zOTcsNiArMzk3LDcgQEAKIAlvcHRzID0ga3N0cmR1cChvcHRpb25zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9wdHMpCiAJCXJldHVybiAtRU5PTUVNOworCW9yaWcgPSBvcHRzOwogCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRzLCAiLCIpKSAhPSBOVUxMKSB7CiAJCWludCB0b2tlbjsKQEAgLTQzMiw3ICs0MzMsNyBAQAogCX0KIAogIG91dF9mcmVlX29wdHM6Ci0Ja2ZyZWUob3B0cyk7CisJa2ZyZWUob3JpZyk7CiAgb3V0OgogCS8qCiAJICogSWYgbm8gc3Vidm9sdW1lIG5hbWUgaXMgc3BlY2lmaWVkIHdlIHVzZSB0aGUgZGVmYXVsdCBvbmUuICBBbGxvY2F0ZQpAQCAtNjIzLDYgKzYyNCw4IEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCwgMCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzYxLDYgKzc2NCw4IEBACiAJCX0KIAogCQlidHJmc19jbG9zZV9kZXZpY2VzKGZzX2RldmljZXMpOworCQlrZnJlZShmc19pbmZvKTsKKwkJa2ZyZWUodHJlZV9yb290KTsKIAl9IGVsc2UgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGJhZTVjN2IuLjNkNzNjOGQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMTE2MSw2ICsxMTYxLDExIEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmFjLT53b3JrLCBkb19hc3luY19jb21taXQpOwogCWFjLT5yb290ID0gcm9vdDsKIAlhYy0+bmV3dHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIoYWMtPm5ld3RyYW5zKSkgeworCQlpbnQgZXJyID0gUFRSX0VSUihhYy0+bmV3dHJhbnMpOworCQlrZnJlZShhYyk7CisJCXJldHVybiBlcnI7CisJfQogCiAJLyogdGFrZSB0cmFuc2FjdGlvbiByZWZlcmVuY2UgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5jIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwppbmRleCAwNTQ3NDRhLi5hNGJiYjg1IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5jCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKQEAgLTMzOCw2ICszMzgsMTIgQEAKIAkJfQogCQlkc3RfY29weSA9IGttYWxsb2MoaXRlbV9zaXplLCBHRlBfTk9GUyk7CiAJCXNyY19jb3B5ID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKKwkJaWYgKCFkc3RfY29weSB8fCAhc3JjX2NvcHkpIHsKKwkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCWtmcmVlKGRzdF9jb3B5KTsKKwkJCWtmcmVlKHNyY19jb3B5KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKIAkJcmVhZF9leHRlbnRfYnVmZmVyKGViLCBzcmNfY29weSwgc3JjX3B0ciwgaXRlbV9zaXplKTsKIApAQCAtNjY1LDYgKzY3MSw5IEBACiAJYnRyZnNfZGlyX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCBkaSwgJmxvY2F0aW9uKTsKIAluYW1lX2xlbiA9IGJ0cmZzX2Rpcl9uYW1lX2xlbihsZWFmLCBkaSk7CiAJbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVhZF9leHRlbnRfYnVmZmVyKGxlYWYsIG5hbWUsICh1bnNpZ25lZCBsb25nKShkaSArIDEpLCBuYW1lX2xlbik7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCkBAIC03NDQsNiArNzUzLDkgQEAKIAlpbnQgbWF0Y2ggPSAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgbG9nLCBrZXksIHBhdGgsIDAsIDApOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXQ7CkBAIC05NjcsNiArOTc5LDggQEAKIAlrZXkub2Zmc2V0ID0gKHU2NCktMTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwpAQCAtMTE3OCw2ICsxMTkyLDkgQEAKIAogCW5hbWVfbGVuID0gYnRyZnNfZGlyX25hbWVfbGVuKGViLCBkaSk7CiAJbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJbG9nX3R5cGUgPSBidHJmc19kaXJfdHlwZShlYiwgZGkpOwogCXJlYWRfZXh0ZW50X2J1ZmZlcihlYiwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpKGRpICsgMSksCiAJCSAgIG5hbWVfbGVuKTsKQEAgLTE2OTIsNiArMTcwOSw4IEBACiAJCXJvb3Rfb3duZXIgPSBidHJmc19oZWFkZXJfb3duZXIocGFyZW50KTsKIAogCQluZXh0ID0gYnRyZnNfZmluZF9jcmVhdGVfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSk7CisJCWlmICghbmV4dCkKKwkJCXJldHVybiAtRU5PTUVNOwogCiAJCWlmICgqbGV2ZWwgPT0gMSkgewogCQkJd2MtPnByb2Nlc3NfZnVuYyhyb290LCBuZXh0LCB3YywgcHRyX2dlbik7CkBAIC0yMDMyLDYgKzIwNTEsNyBAQAogCQl3YWl0X2xvZ19jb21taXQodHJhbnMsIGxvZ19yb290X3RyZWUsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQpOwogCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CisJCXJldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAlhdG9taWNfc2V0KCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0sIDEpOwpAQCAtMjA5Niw3ICsyMTE2LDcgQEAKIAlzbXBfbWIoKTsKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcm9vdC0+bG9nX2NvbW1pdF93YWl0W2luZGV4MV0pKQogCQl3YWtlX3VwKCZyb290LT5sb2dfY29tbWl0X3dhaXRbaW5kZXgxXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9sb2dfdHJlZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTIxOTQsNiArMjIxNCw5IEBACiAKIAlsb2cgPSByb290LT5sb2dfcm9vdDsKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBwYXRoLCBkaXItPmlfaW5vLAogCQkJCSAgIG5hbWUsIG5hbWVfbGVuLCAtMSk7CiAJaWYgKElTX0VSUihkaSkpIHsKQEAgLTI1OTQsNiArMjYxNyw5IEBACiAKIAlpbnNfZGF0YSA9IGttYWxsb2MobnIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleSkgKwogCQkJICAgbnIgKiBzaXplb2YodTMyKSwgR0ZQX05PRlMpOworCWlmICghaW5zX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJaW5zX3NpemVzID0gKHUzMiAqKWluc19kYXRhOwogCWluc19rZXlzID0gKHN0cnVjdCBidHJmc19rZXkgKikoaW5zX2RhdGEgKyBuciAqIHNpemVvZih1MzIpKTsKIApAQCAtMjcyNSw3ICsyNzUxLDEzIEBACiAJbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZHN0X3BhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFkc3RfcGF0aCkgeworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW1pbl9rZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJbWluX2tleS50eXBlID0gQlRSRlNfSU5PREVfSVRFTV9LRVk7CkBAIC0zMDgwLDYgKzMxMTIsNyBAQAogCUJVR19PTighcGF0aCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKGZzX2luZm8tPnRyZWVfcm9vdCwgMCk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJd2MudHJhbnMgPSB0cmFuczsKIAl3Yy5waW4gPSAxOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IGQxNTg1MzAuLjI2MzZhMDUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTEyMTMsNiArMTIxMywxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCWtleS5vYmplY3RpZCA9IEJUUkZTX0RFVl9JVEVNU19PQkpFQ1RJRDsKIAlrZXkudHlwZSA9IEJUUkZTX0RFVl9JVEVNX0tFWTsKIAlrZXkub2Zmc2V0ID0gZGV2aWNlLT5kZXZpZDsKQEAgLTE2MDYsNiArMTYxMCwxMiBAQAogCX0KIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gZXJyb3I7CisJfQorCiAJbG9ja19jaHVua3Mocm9vdCk7CiAKIAlkZXZpY2UtPndyaXRlYWJsZSA9IDE7CkBAIC0xODczLDcgKzE4ODMsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlsb2NrX2NodW5rcyhyb290KTsKIApAQCAtMjA0Nyw3ICsyMDU3LDcgQEAKIAkJQlVHX09OKHJldCk7CiAKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihkZXZfcm9vdCwgMCk7Ci0JCUJVR19PTighdHJhbnMpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAkJcmV0ID0gYnRyZnNfZ3Jvd19kZXZpY2UodHJhbnMsIGRldmljZSwgb2xkX3NpemUpOwogCQlCVUdfT04ocmV0KTsKQEAgLTIyMTMsNiArMjIyMywxMSBAQAogCiAJLyogU2hyaW5raW5nIHN1Y2NlZWRlZCwgZWxzZSB3ZSB3b3VsZCBiZSBhdCAiZG9uZSIuICovCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBkb25lOworCX0KKwogCWxvY2tfY2h1bmtzKHJvb3QpOwogCiAJZGV2aWNlLT5kaXNrX3RvdGFsX2J5dGVzID0gbmV3X3NpemU7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NhcHMuYyBiL2ZzL2NlcGgvY2Fwcy5jCmluZGV4IDYwZDI3YmMuLjZiNjFkZWQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY2Fwcy5jCisrKyBiL2ZzL2NlcGgvY2Fwcy5jCkBAIC0xNTYwLDkgKzE1NjAsMTAgQEAKIAkJLyogTk9URTogbm8gc2lkZS1lZmZlY3RzIGFsbG93ZWQsIHVudGlsIHdlIHRha2Ugc19tdXRleCAqLwogCiAJCXJldm9raW5nID0gY2FwLT5pbXBsZW1lbnRlZCAmIH5jYXAtPmlzc3VlZDsKLQkJaWYgKHJldm9raW5nKQotCQkJZG91dCgiIG1kcyVkIHJldm9raW5nICVzXG4iLCBjYXAtPm1kcywKLQkJCSAgICAgY2VwaF9jYXBfc3RyaW5nKHJldm9raW5nKSk7CisJCWRvdXQoIiBtZHMlZCBjYXAgJXAgaXNzdWVkICVzIGltcGxlbWVudGVkICVzIHJldm9raW5nICVzXG4iLAorCQkgICAgIGNhcC0+bWRzLCBjYXAsIGNlcGhfY2FwX3N0cmluZyhjYXAtPmlzc3VlZCksCisJCSAgICAgY2VwaF9jYXBfc3RyaW5nKGNhcC0+aW1wbGVtZW50ZWQpLAorCQkgICAgIGNlcGhfY2FwX3N0cmluZyhyZXZva2luZykpOwogCiAJCWlmIChjYXAgPT0gY2ktPmlfYXV0aF9jYXAgJiYKIAkJICAgIChjYXAtPmlzc3VlZCAmIENFUEhfQ0FQX0ZJTEVfV1IpKSB7CkBAIC0xNjU4LDYgKzE2NTksOCBAQAogCiAJCWlmIChjYXAgPT0gY2ktPmlfYXV0aF9jYXAgJiYgY2ktPmlfZGlydHlfY2FwcykKIAkJCWZsdXNoaW5nID0gX19tYXJrX2NhcHNfZmx1c2hpbmcoaW5vZGUsIHNlc3Npb24pOworCQllbHNlCisJCQlmbHVzaGluZyA9IDA7CiAKIAkJbWRzID0gY2FwLT5tZHM7ICAvKiByZW1lbWJlciBtZHMsIHNvIHdlIGRvbid0IHJlcGVhdCAqLwogCQlzZW50Kys7CkBAIC0xOTQwLDYgKzE5NDMsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAorCQkJCSAgICAgc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShpbm9kZSk7CisJc3RydWN0IGNlcGhfY2FwICpjYXA7CisJaW50IGRlbGF5ZWQgPSAwOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwljYXAgPSBjaS0+aV9hdXRoX2NhcDsKKwlkb3V0KCJraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMgJXAgZmx1c2hpbmcgJXMgZmx1c2hfc2VxICVsbGRcbiIsIGlub2RlLAorCSAgICAgY2VwaF9jYXBfc3RyaW5nKGNpLT5pX2ZsdXNoaW5nX2NhcHMpLCBjaS0+aV9jYXBfZmx1c2hfc2VxKTsKKwlfX2NlcGhfZmx1c2hfc25hcHMoY2ksICZzZXNzaW9uLCAxKTsKKwlpZiAoY2ktPmlfZmx1c2hpbmdfY2FwcykgeworCQlkZWxheWVkID0gX19zZW5kX2NhcChtZHNjLCBjYXAsIENFUEhfQ0FQX09QX0ZMVVNILAorCQkJCSAgICAgX19jZXBoX2NhcHNfdXNlZChjaSksCisJCQkJICAgICBfX2NlcGhfY2Fwc193YW50ZWQoY2kpLAorCQkJCSAgICAgY2FwLT5pc3N1ZWQgfCBjYXAtPmltcGxlbWVudGVkLAorCQkJCSAgICAgY2ktPmlfZmx1c2hpbmdfY2FwcywgTlVMTCk7CisJCWlmIChkZWxheWVkKSB7CisJCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQkJX19jYXBfZGVsYXlfcmVxdWV1ZShtZHNjLCBjaSk7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCX0KKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorfQorCiAKIC8qCiAgKiBUYWtlIHJlZmVyZW5jZXMgdG8gY2FwYWJpbGl0aWVzIHdlIGhvbGQsIHNvIHRoYXQgd2UgZG9uJ3QgcmVsZWFzZQpAQCAtMjY4Nyw3ICsyNzE5LDcgQEAKIAljZXBoX2FkZF9jYXAoaW5vZGUsIHNlc3Npb24sIGNhcF9pZCwgLTEsCiAJCSAgICAgaXNzdWVkLCB3YW50ZWQsIHNlcSwgbXNlcSwgcmVhbG1pbm8sIENFUEhfQ0FQX0ZMQUdfQVVUSCwKIAkJICAgICBOVUxMIC8qIG5vIGNhcHMgY29udGV4dCAqLyk7Ci0JdHJ5X2ZsdXNoX2NhcHMoaW5vZGUsIHNlc3Npb24sIE5VTEwpOworCWtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyhtZHNjLCBzZXNzaW9uLCBpbm9kZSk7CiAJdXBfcmVhZCgmbWRzYy0+c25hcF9yd3NlbSk7CiAKIAkvKiBtYWtlIHN1cmUgd2UgcmUtcmVxdWVzdCBtYXhfc2l6ZSwgaWYgbmVjZXNzYXJ5ICovCkBAIC0yNzg1LDggKzI4MTcsNyBAQAogCWNhc2UgQ0VQSF9DQVBfT1BfSU1QT1JUOgogCQloYW5kbGVfY2FwX2ltcG9ydChtZHNjLCBpbm9kZSwgaCwgc2Vzc2lvbiwKIAkJCQkgIHNuYXB0cmFjZSwgc25hcHRyYWNlX2xlbik7Ci0JCWNlcGhfY2hlY2tfY2FwcyhjZXBoX2lub2RlKGlub2RlKSwgQ0hFQ0tfQ0FQU19OT0RFTEFZLAotCQkJCXNlc3Npb24pOworCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksIDAsIHNlc3Npb24pOwogCQlnb3RvIGRvbmVfdW5sb2NrZWQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL2lub2RlLmMgYi9mcy9jZXBoL2lub2RlLmMKaW5kZXggZTgzNWVmZi4uNTYyNTQ2MyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pbm9kZS5jCisrKyBiL2ZzL2NlcGgvaW5vZGUuYwpAQCAtNzEwLDEwICs3MTAsNiBAQAogCQkJY2ktPmlfY2VwaF9mbGFncyB8PSBDRVBIX0lfQ09NUExFVEU7CiAJCQljaS0+aV9tYXhfb2Zmc2V0ID0gMjsKIAkJfQotCi0JCS8qIGl0IG1heSBiZSBiZXR0ZXIgdG8gc2V0IHN0X3NpemUgaW4gZ2V0YXR0ciBpbnN0ZWFkPyAqLwotCQlpZiAoY2VwaF90ZXN0X21vdW50X29wdChjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiksIFJCWVRFUykpCi0JCQlpbm9kZS0+aV9zaXplID0gY2ktPmlfcmJ5dGVzOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9lcnIoImZpbGxfaW5vZGUgJWxseC4lbGx4IEJBRCBtb2RlIDAlb1xuIiwKQEAgLTE4MTksNyArMTgxNSwxMSBAQAogCQllbHNlCiAJCQlzdGF0LT5kZXYgPSAwOwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX3JieXRlczsKKwkJCWlmIChjZXBoX3Rlc3RfbW91bnRfb3B0KGNlcGhfc2JfdG9fY2xpZW50KGlub2RlLT5pX3NiKSwKKwkJCQkJCVJCWVRFUykpCisJCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX3JieXRlczsKKwkJCWVsc2UKKwkJCQlzdGF0LT5zaXplID0gY2ktPmlfZmlsZXMgKyBjaS0+aV9zdWJkaXJzOwogCQkJc3RhdC0+YmxvY2tzID0gMDsKIAkJCXN0YXQtPmJsa3NpemUgPSA2NTUzNjsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCAxZTMwZDE5Li5hMWVlOGZhIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtNjkzLDkgKzY5MywxMSBAQAogCQkJCWRvdXQoImNob29zZV9tZHMgJXAgJWxseC4lbGx4ICIKIAkJCQkgICAgICJmcmFnICV1IG1kcyVkICglZC8lZClcbiIsCiAJCQkJICAgICBpbm9kZSwgY2VwaF92aW5vcChpbm9kZSksCi0JCQkJICAgICBmcmFnLmZyYWcsIGZyYWcubWRzLAorCQkJCSAgICAgZnJhZy5mcmFnLCBtZHMsCiAJCQkJICAgICAoaW50KXIsIGZyYWcubmRpc3QpOwotCQkJCXJldHVybiBtZHM7CisJCQkJaWYgKGNlcGhfbWRzbWFwX2dldF9zdGF0ZShtZHNjLT5tZHNtYXAsIG1kcykgPj0KKwkJCQkgICAgQ0VQSF9NRFNfU1RBVEVfQUNUSVZFKQorCQkJCQlyZXR1cm4gbWRzOwogCQkJfQogCiAJCQkvKiBzaW5jZSB0aGlzIGZpbGUvZGlyIHdhc24ndCBrbm93biB0byBiZQpAQCAtNzA4LDcgKzcxMCw5IEBACiAJCQkJZG91dCgiY2hvb3NlX21kcyAlcCAlbGx4LiVsbHggIgogCQkJCSAgICAgImZyYWcgJXUgbWRzJWQgKGF1dGgpXG4iLAogCQkJCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBmcmFnLmZyYWcsIG1kcyk7Ci0JCQkJcmV0dXJuIG1kczsKKwkJCQlpZiAoY2VwaF9tZHNtYXBfZ2V0X3N0YXRlKG1kc2MtPm1kc21hcCwgbWRzKSA+PQorCQkJCSAgICBDRVBIX01EU19TVEFURV9BQ1RJVkUpCisJCQkJCXJldHVybiBtZHM7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9jZXBoL3N1cGVyLmMgYi9mcy9jZXBoL3N1cGVyLmMKaW5kZXggYmY2ZjBmMy4uOWM1MDg1NCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zdXBlci5jCisrKyBiL2ZzL2NlcGgvc3VwZXIuYwpAQCAtMjkwLDYgKzI5MCw4IEBACiAKICAgICAgICAgZnNvcHQtPnJzaXplID0gQ0VQSF9NT1VOVF9SU0laRV9ERUZBVUxUOwogICAgICAgICBmc29wdC0+c25hcGRpcl9uYW1lID0ga3N0cmR1cChDRVBIX1NOQVBESVJOQU1FX0RFRkFVTFQsIEdGUF9LRVJORUwpOworCWZzb3B0LT5jYXBzX3dhbnRlZF9kZWxheV9taW4gPSBDRVBIX0NBUFNfV0FOVEVEX0RFTEFZX01JTl9ERUZBVUxUOworCWZzb3B0LT5jYXBzX3dhbnRlZF9kZWxheV9tYXggPSBDRVBIX0NBUFNfV0FOVEVEX0RFTEFZX01BWF9ERUZBVUxUOwogICAgICAgICBmc29wdC0+Y2FwX3JlbGVhc2Vfc2FmZXR5ID0gQ0VQSF9DQVBfUkVMRUFTRV9TQUZFVFlfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPm1heF9yZWFkZGlyID0gQ0VQSF9NQVhfUkVBRERJUl9ERUZBVUxUOwogICAgICAgICBmc29wdC0+bWF4X3JlYWRkaXJfYnl0ZXMgPSBDRVBIX01BWF9SRUFERElSX0JZVEVTX0RFRkFVTFQ7CmRpZmYgLS1naXQgYS9mcy9jZXBoL3hhdHRyLmMgYi9mcy9jZXBoL3hhdHRyLmMKaW5kZXggNmUxMmE2Yi4uOGM5ZWJhNiAxMDA2NDQKLS0tIGEvZnMvY2VwaC94YXR0ci5jCisrKyBiL2ZzL2NlcGgveGF0dHIuYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAJc3RydWN0IHJiX25vZGUgKipwOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBjZXBoX2lub2RlX3hhdHRyICp4YXR0ciA9IE5VTEw7CisJaW50IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpOwogCWludCBjOwogCiAJcCA9ICZjaS0+aV94YXR0cnMuaW5kZXgucmJfbm9kZTsKQEAgLTIyNiw2ICsyMjcsOCBAQAogCQlwYXJlbnQgPSAqcDsKIAkJeGF0dHIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjZXBoX2lub2RlX3hhdHRyLCBub2RlKTsKIAkJYyA9IHN0cm5jbXAobmFtZSwgeGF0dHItPm5hbWUsIHhhdHRyLT5uYW1lX2xlbik7CisJCWlmIChjID09IDAgJiYgbmFtZV9sZW4gPiB4YXR0ci0+bmFtZV9sZW4pCisJCQljID0gMTsKIAkJaWYgKGMgPCAwKQogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlIGlmIChjID4gMCkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCBlZTQ1NjQ4Li43Y2IwZjdmIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogCWRlcGVuZHMgb24gSU5FVAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19NRDQKIAlzZWxlY3QgQ1JZUFRPX01ENQogCXNlbGVjdCBDUllQVE9fSE1BQwogCXNlbGVjdCBDUllQVE9fQVJDNApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9NYWtlZmlsZSBiL2ZzL2NpZnMvTWFrZWZpbGUKaW5kZXggNDNiMTlkZC4uZDg3NTU4NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9NYWtlZmlsZQorKysgYi9mcy9jaWZzL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogCiBjaWZzLXkgOj0gY2lmc2ZzLm8gY2lmc3NtYi5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIGlub2RlLm8gXAogCSAgbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZGVzLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIGFzbjEubyBcCi0JICBtZDQubyBtZDUubyBjaWZzX3VuaWNvZGUubyBudGVyci5vIHhhdHRyLm8gY2lmc2VuY3J5cHQubyBcCisJICBjaWZzX3VuaWNvZGUubyBudGVyci5vIHhhdHRyLm8gY2lmc2VuY3J5cHQubyBcCiAJICByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8KIAogY2lmcy0kKENPTkZJR19DSUZTX0FDTCkgKz0gY2lmc2FjbC5vCmRpZmYgLS1naXQgYS9mcy9jaWZzL1JFQURNRSBiL2ZzL2NpZnMvUkVBRE1FCmluZGV4IDQ2YWY5OWEuLmZlMTY4MzUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC00NTIsNiArNDUyLDExIEBACiAJCWlmIG9wbG9jayAoY2FjaGluZyB0b2tlbikgaXMgZ3JhbnRlZCBhbmQgaGVsZC4gTm90ZSB0aGF0CiAJCWRpcmVjdCBhbGxvd3Mgd3JpdGUgb3BlcmF0aW9ucyBsYXJnZXIgdGhhbiBwYWdlIHNpemUKIAkJdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLgorICBzdHJpY3RjYWNoZSAgIFVzZSBmb3Igc3dpdGNoaW5nIG9uIHN0cmljdCBjYWNoZSBtb2RlLiBJbiB0aGlzIG1vZGUgdGhlCisJCWNsaWVudCByZWFkIGZyb20gdGhlIGNhY2hlIGFsbCB0aGUgdGltZSBpdCBoYXMgT3Bsb2NrIExldmVsIElJLAorCQlvdGhlcndpc2UgLSByZWFkIGZyb20gdGhlIHNlcnZlci4gQWxsIHdyaXR0ZW4gZGF0YSBhcmUgc3RvcmVkCisJCWluIHRoZSBjYWNoZSwgYnV0IGlmIHRoZSBjbGllbnQgZG9lc24ndCBoYXZlIEV4Y2x1c2l2ZSBPcGxvY2ssCisJCWl0IHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgc2VydmVyLgogICBhY2wgICAJQWxsb3cgc2V0ZmFjbCBhbmQgZ2V0ZmFjbCB0byBtYW5hZ2UgcG9zaXggQUNMcyBpZiBzZXJ2ZXIKIAkJc3VwcG9ydHMgdGhlbS4gIChkZWZhdWx0KQogICBub2FjbCAJRG8gbm90IGFsbG93IHNldGZhY2wgYW5kIGdldGZhY2wgY2FsbHMgb24gdGhpcyBtb3VudApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggN2VkMzY1My4uMGEyNjVhZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC0yODIsOCArMjgyLDYgQEAKIAljRllJKDEsICJpbiAlcyIsIF9fZnVuY19fKTsKIAlCVUdfT04oSVNfUk9PVChtbnRwdCkpOwogCi0JeGlkID0gR2V0WGlkKCk7Ci0KIAkvKgogCSAqIFRoZSBNU0RGUyBzcGVjIHN0YXRlcyB0aGF0IHBhdGhzIGluIERGUyByZWZlcnJhbCByZXF1ZXN0cyBhbmQKIAkgKiByZXNwb25zZXMgbXVzdCBiZSBwcmVmaXhlZCBieSBhIHNpbmdsZSAnXCcgY2hhcmFjdGVyIGluc3RlYWQgb2YKQEAgLTI5MywyMCArMjkxLDIxIEBACiAJbW50ID0gRVJSX1BUUigtRU5PTUVNKTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KG1udHB0KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpCi0JCWdvdG8gZnJlZV94aWQ7CisJCWdvdG8gY2RkYV9leGl0OwogCiAJY2lmc19zYiA9IENJRlNfU0IobW50cHQtPmRfaW5vZGUtPmlfc2IpOwogCXRsaW5rID0gY2lmc19zYl90bGluayhjaWZzX3NiKTsKLQltbnQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCWlmIChJU19FUlIodGxpbmspKSB7CiAJCW1udCA9IEVSUl9DQVNUKHRsaW5rKTsKIAkJZ290byBmcmVlX2Z1bGxfcGF0aDsKIAl9CiAJc2VzID0gdGxpbmtfdGNvbih0bGluayktPnNlczsKIAorCXhpZCA9IEdldFhpZCgpOwogCXJjID0gZ2V0X2Rmc19wYXRoKHhpZCwgc2VzLCBmdWxsX3BhdGggKyAxLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCSZudW1fcmVmZXJyYWxzLCAmcmVmZXJyYWxzLAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwlGcmVlWGlkKHhpZCk7CiAKIAljaWZzX3B1dF90bGluayh0bGluayk7CiAKQEAgLTMzOSw4ICszMzgsNyBAQAogCWZyZWVfZGZzX2luZm9fYXJyYXkocmVmZXJyYWxzLCBudW1fcmVmZXJyYWxzKTsKIGZyZWVfZnVsbF9wYXRoOgogCWtmcmVlKGZ1bGxfcGF0aCk7Ci1mcmVlX3hpZDoKLQlGcmVlWGlkKHhpZCk7CitjZGRhX2V4aXQ6CiAJY0ZZSSgxLCAibGVhdmluZyAlcyIgLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIG1udDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2FjbC5jIGIvZnMvY2lmcy9jaWZzYWNsLmMKaW5kZXggMWU3NjM2Yi4uYmVlZWJmMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzYWNsLmMKKysrIGIvZnMvY2lmcy9jaWZzYWNsLmMKQEAgLTM3Miw2ICszNzIsMTAgQEAKIAogCQlwcGFjZSA9IGttYWxsb2MobnVtX2FjZXMgKiBzaXplb2Yoc3RydWN0IGNpZnNfYWNlICopLAogCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIXBwYWNlKSB7CisJCQljRVJST1IoMSwgIkRBQ0wgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IiKTsKKwkJCXJldHVybjsKKwkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBudW1fYWNlczsgKytpKSB7CiAJCQlwcGFjZVtpXSA9IChzdHJ1Y3QgY2lmc19hY2UgKikgKGFjbF9iYXNlICsgYWNsX3NpemUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCmluZGV4IDY2ZjNkNTAuLmE1MTU4NWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYworKysgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCi0jaW5jbHVkZSAibWQ1LmgiCiAjaW5jbHVkZSAiY2lmc191bmljb2RlLmgiCiAjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAjaW5jbHVkZSAibnRsbXNzcC5oIgpAQCAtMzcsMTEgKzM2LDYgQEAKIC8qIE5vdGUgdGhhdCB0aGUgc21iIGhlYWRlciBzaWduYXR1cmUgZmllbGQgb24gaW5wdXQgY29udGFpbnMgdGhlCiAJc2VxdWVuY2UgbnVtYmVyIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCAqLwogCi1leHRlcm4gdm9pZCBtZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pOwotZXh0ZXJuIHZvaWQgRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIFNNQmVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnAyNCk7Ci0KIHN0YXRpYyBpbnQgY2lmc19jYWxjdWxhdGVfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBzbWJfaGRyICpjaWZzX3BkdSwKIAkJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIGNoYXIgKnNpZ25hdHVyZSkKIHsKQEAgLTIzNCw2ICsyMjgsNyBAQAogLyogZmlyc3QgY2FsY3VsYXRlIDI0IGJ5dGVzIG50bG0gcmVzcG9uc2UgYW5kIHRoZW4gMTYgYnl0ZSBzZXNzaW9uIGtleSAqLwogaW50IHNldHVwX250bG1fcmVzcG9uc2Uoc3RydWN0IGNpZnNTZXNJbmZvICpzZXMpCiB7CisJaW50IHJjID0gMDsKIAl1bnNpZ25lZCBpbnQgdGVtcF9sZW4gPSBDSUZTX1NFU1NfS0VZX1NJWkUgKyBDSUZTX0FVVEhfUkVTUF9TSVpFOwogCWNoYXIgdGVtcF9rZXlbQ0lGU19TRVNTX0tFWV9TSVpFXTsKIApAQCAtMjQ3LDEzICsyNDIsMjYgQEAKIAl9CiAJc2VzLT5hdXRoX2tleS5sZW4gPSB0ZW1wX2xlbjsKIAotCVNNQk5UZW5jcnlwdChzZXMtPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCisJcmMgPSBTTUJOVGVuY3J5cHQoc2VzLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAogCQkJc2VzLT5hdXRoX2tleS5yZXNwb25zZSArIENJRlNfU0VTU19LRVlfU0laRSk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzIENhbid0IGdlbmVyYXRlIE5UTE0gcmVzcG9uc2UsIGVycm9yOiAlZCIsCisJCQlfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCi0JRV9tZDRoYXNoKHNlcy0+cGFzc3dvcmQsIHRlbXBfa2V5KTsKLQltZGZvdXIoc2VzLT5hdXRoX2tleS5yZXNwb25zZSwgdGVtcF9rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CisJcmMgPSBFX21kNGhhc2goc2VzLT5wYXNzd29yZCwgdGVtcF9rZXkpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVCBoYXNoLCBlcnJvcjogJWQiLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCi0JcmV0dXJuIDA7CisJcmMgPSBtZGZvdXIoc2VzLT5hdXRoX2tleS5yZXNwb25zZSwgdGVtcF9rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CisJaWYgKHJjKQorCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVExNIHNlc3Npb24ga2V5LCBlcnJvcjogJWQiLAorCQkJX19mdW5jX18sIHJjKTsKKworCXJldHVybiByYzsKIH0KIAogI2lmZGVmIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSApAQCAtNjQ5LDkgKzY1NywxMCBAQAogCWdldF9yYW5kb21fYnl0ZXMoc2VjX2tleSwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKIAogCXRmbV9hcmM0ID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7Ci0JaWYgKCF0Zm1fYXJjNCB8fCBJU19FUlIodGZtX2FyYzQpKSB7CisJaWYgKElTX0VSUih0Zm1fYXJjNCkpIHsKKwkJcmMgPSBQVFJfRVJSKHRmbV9hcmM0KTsKIAkJY0VSUk9SKDEsICJjb3VsZCBub3QgYWxsb2NhdGUgY3J5cHRvIEFQSSBhcmM0XG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIodGZtX2FyYzQpOworCQlyZXR1cm4gcmM7CiAJfQogCiAJZGVzYy50Zm0gPSB0Zm1fYXJjNDsKQEAgLTcwMCwxNCArNzA5LDEzIEBACiAJdW5zaWduZWQgaW50IHNpemU7CiAKIAlzZXJ2ZXItPnNlY21lY2guaG1hY21kNSA9IGNyeXB0b19hbGxvY19zaGFzaCgiaG1hYyhtZDUpIiwgMCwgMCk7Ci0JaWYgKCFzZXJ2ZXItPnNlY21lY2guaG1hY21kNSB8fAotCQkJSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KSkgeworCWlmIChJU19FUlIoc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUpKSB7CiAJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGNyeXB0byBobWFjbWQ1XG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUpOwogCX0KIAogCXNlcnZlci0+c2VjbWVjaC5tZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goIm1kNSIsIDAsIDApOwotCWlmICghc2VydmVyLT5zZWNtZWNoLm1kNSB8fCBJU19FUlIoc2VydmVyLT5zZWNtZWNoLm1kNSkpIHsKKwlpZiAoSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpKSB7CiAJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGNyeXB0byBtZDVcbiIpOwogCQlyYyA9IFBUUl9FUlIoc2VydmVyLT5zZWNtZWNoLm1kNSk7CiAJCWdvdG8gY3J5cHRvX2FsbG9jYXRlX21kNV9mYWlsOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5oIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWQyZWMwLi4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgIGZzL2NpZnMvY2lmc2VuY3J5cHQuaAotICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNQotICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQotICoKLSAqICAgRXh0ZXJucyBmb3IgbWlzYy4gc21hbGwgZW5jcnlwdGlvbiByb3V0aW5lcwotICogICBzbyB3ZSBkbyBub3QgaGF2ZSB0byBwdXQgdGhlbSBpbiBjaWZzcHJvdG8uaAotICoKLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0gKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKLSAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyogbWQ0LmMgKi8KLWV4dGVybiB2b2lkIG1kZm91cih1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbik7Ci0vKiBzbWJkZXMuYyAqLwotZXh0ZXJuIHZvaWQgRV9QMTYodW5zaWduZWQgY2hhciAqcDE0LCB1bnNpZ25lZCBjaGFyICpwMTYpOwotZXh0ZXJuIHZvaWQgRV9QMjQodW5zaWduZWQgY2hhciAqcDIxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJICB1bnNpZ25lZCBjaGFyICpwMjQpOwotCi0KLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggYTgzMjNmMS4uZjI5NzAxMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC02MDAsMTAgKzYwMCwxNyBAQAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3Qgd3JpdHRlbjsKKwlpbnQgcmM7CiAKIAl3cml0dGVuID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Ci0JaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZUFsbCkKLQkJZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCisJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsKQorCQlyZXR1cm4gd3JpdHRlbjsKKworCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCWlmIChyYykKKwkJY0ZZSSgxLCAiY2lmc19maWxlX2Fpb193cml0ZTogJWQgcmMgb24gJXAgaW5vZGUiLCByYywgaW5vZGUpOworCiAJcmV0dXJuIHdyaXR0ZW47CiB9CiAKQEAgLTczNyw3ICs3NDQsNyBAQAogCS5yZWFkID0gZG9fc3luY19yZWFkLAogCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkID0gY2lmc19zdHJpY3RfcmVhZHYsCi0JLmFpb193cml0ZSA9IGNpZnNfZmlsZV9haW9fd3JpdGUsCisJLmFpb193cml0ZSA9IGNpZnNfc3RyaWN0X3dyaXRldiwKIAkub3BlbiA9IGNpZnNfb3BlbiwKIAkucmVsZWFzZSA9IGNpZnNfY2xvc2UsCiAJLmxvY2sgPSBjaWZzX2xvY2ssCkBAIC03OTMsNyArODAwLDcgQEAKIAkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZCA9IGNpZnNfc3RyaWN0X3JlYWR2LAotCS5haW9fd3JpdGUgPSBjaWZzX2ZpbGVfYWlvX3dyaXRlLAorCS5haW9fd3JpdGUgPSBjaWZzX3N0cmljdF93cml0ZXYsCiAJLm9wZW4gPSBjaWZzX29wZW4sCiAJLnJlbGVhc2UgPSBjaWZzX2Nsb3NlLAogCS5mc3luYyA9IGNpZnNfc3RyaWN0X2ZzeW5jLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggZjIzMjA2ZC4uNGEzMzMwMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC04NSw3ICs4NSw5IEBACiBleHRlcm4gc3NpemVfdCBjaWZzX3N0cmljdF9yZWFkdihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQkJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOwogZXh0ZXJuIHNzaXplX3QgY2lmc191c2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqd3JpdGVfZGF0YSwKLQkJCSBzaXplX3Qgd3JpdGVfc2l6ZSwgbG9mZl90ICpwb2Zmc2V0KTsKKwkJCSAgICAgICBzaXplX3Qgd3JpdGVfc2l6ZSwgbG9mZl90ICpwb2Zmc2V0KTsKK2V4dGVybiBzc2l6ZV90IGNpZnNfc3RyaWN0X3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCSAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBpbnQgY2lmc19sb2NrKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKIGV4dGVybiBpbnQgY2lmc19mc3luYyhzdHJ1Y3QgZmlsZSAqLCBpbnQpOwogZXh0ZXJuIGludCBjaWZzX3N0cmljdF9mc3luYyhzdHJ1Y3QgZmlsZSAqLCBpbnQpOwpAQCAtMTI1LDUgKzEyNyw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGNpZnNfZXhwb3J0X29wczsKICNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KIAotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS42OSIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNzAiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggNWJmYjc1My4uMTdhZmIwZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMTY2LDYgKzE2Niw5IEBACiAJc3RydWN0IHNvY2tldCAqc3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBkc3RhZGRyOwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY2FkZHI7IC8qIGxvY2FsbHkgYmluZCB0byB0aGlzIElQICovCisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKm5ldDsKKyNlbmRpZgogCXdhaXRfcXVldWVfaGVhZF90IHJlc3BvbnNlX3E7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVxdWVzdF9xOyAvKiBpZiBtb3JlIHRoYW4gbWF4bXB4IHRvIHNydnIgbXVzdCBibG9jayovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX21pZF9xOwpAQCAtMTg1LDYgKzE4OCw4IEBACiAJLyogbXVsdGlwbGV4ZWQgcmVhZHMgb3Igd3JpdGVzICovCiAJdW5zaWduZWQgaW50IG1heEJ1ZjsJLyogbWF4QnVmIHNwZWNpZmllcyB0aGUgbWF4aW11bSAqLwogCS8qIG1lc3NhZ2Ugc2l6ZSB0aGUgc2VydmVyIGNhbiBzZW5kIG9yIHJlY2VpdmUgZm9yIG5vbi1yYXcgU01CcyAqLworCS8qIG1heEJ1ZiBpcyByZXR1cm5lZCBieSBTTUIgTmVnb3RpYXRlUHJvdG9jb2wgc28gbWF4QnVmIGlzIG9ubHkgMCAqLworCS8qIHdoZW4gc29ja2V0IGlzIHNldHVwIChhbmQgZHVyaW5nIHJlY29ubmVjdCkgYmVmb3JlIE5lZ1Byb3Qgc2VudCAqLwogCXVuc2lnbmVkIGludCBtYXhfcnc7CS8qIG1heFJ3IHNwZWNpZmllcyB0aGUgbWF4aW11bSAqLwogCS8qIG1lc3NhZ2Ugc2l6ZSB0aGUgc2VydmVyIGNhbiBzZW5kIG9yIHJlY2VpdmUgZm9yICovCiAJLyogU01CX0NPTV9XUklURV9SQVcgb3IgU01CX0NPTV9SRUFEX1JBVy4gKi8KQEAgLTIxNyw2ICsyMjIsMzYgQEAKIH07CiAKIC8qCisgKiBNYWNyb3MgdG8gYWxsb3cgdGhlIFRDUF9TZXJ2ZXJfSW5mby0+bmV0IGZpZWxkIGFuZCByZWxhdGVkIGNvZGUgdG8gZHJvcCBvdXQKKyAqIHdoZW4gQ09ORklHX05FVF9OUyBpc24ndCBzZXQuCisgKi8KKworI2lmZGVmIENPTkZJR19ORVRfTlMKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjaWZzX25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYpCit7CisJcmV0dXJuIHNydi0+bmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19zZXRfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydiwgc3RydWN0IG5ldCAqbmV0KQoreworCXNydi0+bmV0ID0gbmV0OworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmNpZnNfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydikKK3sKKwlyZXR1cm4gJmluaXRfbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19zZXRfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydiwgc3RydWN0IG5ldCAqbmV0KQoreworfQorCisjZW5kaWYKKworLyoKICAqIFNlc3Npb24gc3RydWN0dXJlLiAgT25lIG9mIHRoZXNlIGZvciBlYWNoIHVpZCBzZXNzaW9uIHdpdGggYSBwYXJ0aWN1bGFyIGhvc3QKICAqLwogc3RydWN0IGNpZnNTZXNJbmZvIHsKQEAgLTYxOSw3ICs2NTQsNyBAQAogI2RlZmluZSAgIE1JRF9SRVFVRVNUX1NVQk1JVFRFRCAyCiAjZGVmaW5lICAgTUlEX1JFU1BPTlNFX1JFQ0VJVkVEIDQKICNkZWZpbmUgICBNSURfUkVUUllfTkVFREVEICAgICAgOCAvKiBzZXNzaW9uIGNsb3NlZCB3aGlsZSB0aGlzIHJlcXVlc3Qgb3V0ICovCi0jZGVmaW5lICAgTUlEX05PX1JFU1BfTkVFREVEIDB4MTAKKyNkZWZpbmUgICBNSURfUkVTUE9OU0VfTUFMRk9STUVEIDB4MTAKIAogLyogVHlwZXMgb2YgcmVzcG9uc2UgYnVmZmVyIHJldHVybmVkIGZyb20gU2VuZFJlY2VpdmUyICovCiAjZGVmaW5lICAgQ0lGU19OT19CVUZGRVIgICAgICAgIDAgICAgLyogUmVzcG9uc2UgYnVmZmVyIG5vdCByZXR1cm5lZCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggOTgyODk1Zi4uODA5NmYyNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC04NSw2ICs4NSw4IEBACiBleHRlcm4gYm9vbCBpc192YWxpZF9vcGxvY2tfYnJlYWsoc3RydWN0IHNtYl9oZHIgKnNtYiwKIAkJCQkgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKik7CiBleHRlcm4gYm9vbCBpc19zaXplX3NhZmVfdG9fY2hhbmdlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIF9fdTY0IGVvZik7CitleHRlcm4gdm9pZCBjaWZzX3VwZGF0ZV9lb2Yoc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIHVuc2lnbmVkIGludCBieXRlc193cml0dGVuKTsKIGV4dGVybiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaW5kX3dyaXRhYmxlX2ZpbGUoc3RydWN0IGNpZnNJbm9kZUluZm8gKiwgYm9vbCk7CiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF9yZWFkYWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzbWJDYWxjU2l6ZShzdHJ1Y3Qgc21iX2hkciAqcHRyKTsKQEAgLTM3Myw3ICszNzUsNyBAQAogZXh0ZXJuIGludCBjaWZzX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IHNtYl9oZHIgKiwKIAkJCQkgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLAogCQkJCV9fdTMyIGV4cGVjdGVkX3NlcXVlbmNlX251bWJlcik7Ci1leHRlcm4gdm9pZCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CitleHRlcm4gaW50IFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKIGV4dGVybiBpbnQgc2V0dXBfbnRsbV9yZXNwb25zZShzdHJ1Y3QgY2lmc1Nlc0luZm8gKik7CiBleHRlcm4gaW50IHNldHVwX250bG12Ml9yc3Aoc3RydWN0IGNpZnNTZXNJbmZvICosIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKik7CiBleHRlcm4gaW50IGNpZnNfY3J5cHRvX3NoYXNoX2FsbG9jYXRlKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKik7CkBAIC00MjMsNCArNDI1LDExIEBACiBleHRlcm4gaW50IENJRlNDaGVja01GU3ltbGluayhzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhdGgsCiAJCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIGludCB4aWQpOworZXh0ZXJuIGludCBtZGZvdXIodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CitleHRlcm4gaW50IEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7CitleHRlcm4gdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCisJCQl1bnNpZ25lZCBjaGFyICpwMjQpOworZXh0ZXJuIHZvaWQgRV9QMTYodW5zaWduZWQgY2hhciAqcDE0LCB1bnNpZ25lZCBjaGFyICpwMTYpOworZXh0ZXJuIHZvaWQgRV9QMjQodW5zaWduZWQgY2hhciAqcDIxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKKwkJCXVuc2lnbmVkIGNoYXIgKnAyNCk7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggMzEwNmY1ZS4uOTA0YWE0NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTEzNiw5ICsxMzYsNiBAQAogCQl9CiAJfQogCi0JaWYgKHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKQotCQlyZXR1cm4gLUVJTzsKLQogCS8qCiAJICogR2l2ZSBkZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0byByZWNvbm5lY3QsIHNob3VsZCBiZQogCSAqIGdyZWF0ZXIgdGhhbiBjaWZzIHNvY2tldCB0aW1lb3V0IHdoaWNoIGlzIDcgc2Vjb25kcwpAQCAtMTU2LDcgKzE1Myw3IEBACiAJCSAqIHJldHJ5aW5nIHVudGlsIHByb2Nlc3MgaXMga2lsbGVkIG9yIHNlcnZlciBjb21lcwogCQkgKiBiYWNrIG9uLWxpbmUKIAkJICovCi0JCWlmICghdGNvbi0+cmV0cnkgfHwgc2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKKwkJaWYgKCF0Y29uLT5yZXRyeSkgewogCQkJY0ZZSSgxLCAiZ2F2ZSB1cCB3YWl0aW5nIG9uIHJlY29ubmVjdCBpbiBzbWJfaW5pdCIpOwogCQkJcmV0dXJuIC1FSE9TVERPV047CiAJCX0KQEAgLTQ5MTQsNyArNDkxMSw2IEBACiAJCSAgIF9fdTE2IGZpZCwgX191MzIgcGlkX29mX29wZW5lciwgYm9vbCBTZXRBbGxvY2F0aW9uKQogewogCXN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zZmlfcmVxICpwU01CICA9IE5VTEw7Ci0JY2hhciAqZGF0YV9vZmZzZXQ7CiAJc3RydWN0IGZpbGVfZW5kX29mX2ZpbGVfaW5mbyAqcGFybV9kYXRhOwogCWludCByYyA9IDA7CiAJX191MTYgcGFyYW1zLCBwYXJhbV9vZmZzZXQsIG9mZnNldCwgYnl0ZV9jb3VudCwgY291bnQ7CkBAIC00OTM4LDggKzQ5MzQsNiBAQAogCXBhcmFtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zZmlfcmVxLCBGaWQpIC0gNDsKIAlvZmZzZXQgPSBwYXJhbV9vZmZzZXQgKyBwYXJhbXM7CiAKLQlkYXRhX29mZnNldCA9IChjaGFyICopICgmcFNNQi0+aGRyLlByb3RvY29sKSArIG9mZnNldDsKLQogCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBmaWxlX2VuZF9vZl9maWxlX2luZm8pOwogCXBTTUItPk1heFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYoMik7CiAJLyogQkIgZmluZCBleGFjdCBtYXggU01CIFBEVSBmcm9tIHNlc3Mgc3RydWN0dXJlIEJCICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDE4ZDNjNzcuLjhkNmMxN2EgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC01NSw5ICs1NSw2IEBACiAvKiBTTUIgZWNobyAidGltZW91dCIgLS0gRklYTUU6IHR1bmFibGU/ICovCiAjZGVmaW5lIFNNQl9FQ0hPX0lOVEVSVkFMICg2MCAqIEhaKQogCi1leHRlcm4gdm9pZCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJCSB1bnNpZ25lZCBjaGFyICpwMjQpOwotCiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDsKIAogc3RydWN0IHNtYl92b2wgewpAQCAtODcsNiArODQsNyBAQAogCWJvb2wgbm9feGF0dHI6MTsgICAvKiBzZXQgaWYgeGF0dHIgKEVBKSBzdXBwb3J0IHNob3VsZCBiZSBkaXNhYmxlZCovCiAJYm9vbCBzZXJ2ZXJfaW5vOjE7IC8qIHVzZSBpbm9kZSBudW1iZXJzIGZyb20gc2VydmVyIGllIFVuaXF1ZUlkICovCiAJYm9vbCBkaXJlY3RfaW86MTsKKwlib29sIHN0cmljdF9pbzoxOyAvKiBzdHJpY3QgY2FjaGUgYmVoYXZpb3IgKi8KIAlib29sIHJlbWFwOjE7ICAgICAgLyogc2V0IHRvIHJlbWFwIHNldmVuIHJlc2VydmVkIGNoYXJzIGluIGZpbGVuYW1lcyAqLwogCWJvb2wgcG9zaXhfcGF0aHM6MTsgLyogdW5zZXQgdG8gbm90IGFzayBmb3IgcG9zaXggcGF0aG5hbWVzLiAqLwogCWJvb2wgbm9fbGludXhfZXh0OjE7CkBAIC0zMzksOCArMzM3LDEzIEBACiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8sIGVjaG8ud29yayk7CiAKLQkvKiBubyBuZWVkIHRvIHBpbmcgaWYgd2UgZ290IGEgcmVzcG9uc2UgcmVjZW50bHkgKi8KLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc2VydmVyLT5sc3RycCArIFNNQl9FQ0hPX0lOVEVSVkFMIC0gSFopKQorCS8qCisJICogV2UgY2Fubm90IHNlbmQgYW4gZWNobyB1bnRpbCB0aGUgTkVHT1RJQVRFX1BST1RPQ09MIHJlcXVlc3QgaXMKKwkgKiBkb25lLCB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgbWF4QnVmICE9IDAuIEFsc28sIG5vIG5lZWQgdG8gcGluZyBpZgorCSAqIHdlIGdvdCBhIHJlc3BvbnNlIHJlY2VudGx5CisJICovCisJaWYgKHNlcnZlci0+bWF4QnVmID09IDAgfHwKKwkgICAgdGltZV9iZWZvcmUoamlmZmllcywgc2VydmVyLT5sc3RycCArIFNNQl9FQ0hPX0lOVEVSVkFMIC0gSFopKQogCQlnb3RvIHJlcXVldWVfZWNobzsKIAogCXJjID0gQ0lGU1NNQkVjaG8oc2VydmVyKTsKQEAgLTU4MCwxNCArNTgzLDIzIEBACiAJCWVsc2UgaWYgKHJlY29ubmVjdCA9PSAxKQogCQkJY29udGludWU7CiAKLQkJbGVuZ3RoICs9IDQ7IC8qIGFjY291bnQgZm9yIHJmYzEwMDIgaGRyICovCisJCXRvdGFsX3JlYWQgKz0gNDsgLyogYWNjb3VudCBmb3IgcmZjMTAwMiBoZHIgKi8KIAorCQlkdW1wX3NtYihzbWJfYnVmZmVyLCB0b3RhbF9yZWFkKTsKIAotCQlkdW1wX3NtYihzbWJfYnVmZmVyLCBsZW5ndGgpOwotCQlpZiAoY2hlY2tTTUIoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKzQpKSB7Ci0JCQljaWZzX2R1bXBfbWVtKCJCYWQgU01COiAiLCBzbWJfYnVmZmVyLCA0OCk7Ci0JCQljb250aW51ZTsKLQkJfQorCQkvKgorCQkgKiBXZSBrbm93IHRoYXQgd2UgcmVjZWl2ZWQgZW5vdWdoIHRvIGdldCB0byB0aGUgTUlEIGFzIHdlCisJCSAqIGNoZWNrZWQgdGhlIHBkdV9sZW5ndGggZWFybGllci4gTm93IGNoZWNrIHRvIHNlZQorCQkgKiBpZiB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIGlzIE9LLiBXZSBib3Jyb3cgdGhlIGxlbmd0aAorCQkgKiB2YXIgZm9yIHRoZSByZXN0IG9mIHRoZSBsb29wIHRvIGF2b2lkIGEgbmV3IHN0YWNrIHZhci4KKwkJICoKKwkJICogNDggYnl0ZXMgaXMgZW5vdWdoIHRvIGRpc3BsYXkgdGhlIGhlYWRlciBhbmQgYSBsaXR0bGUgYml0CisJCSAqIGludG8gdGhlIHBheWxvYWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKwkJICovCisJCWxlbmd0aCA9IGNoZWNrU01CKHNtYl9idWZmZXIsIHNtYl9idWZmZXItPk1pZCwgdG90YWxfcmVhZCk7CisJCWlmIChsZW5ndGggIT0gMCkKKwkJCWNpZnNfZHVtcF9tZW0oIkJhZCBTTUI6ICIsIHNtYl9idWZmZXIsCisJCQkJCW1pbl90KHVuc2lnbmVkIGludCwgdG90YWxfcmVhZCwgNDgpKTsKIAogCQltaWRfZW50cnkgPSBOVUxMOwogCQlzZXJ2ZXItPmxzdHJwID0gamlmZmllczsKQEAgLTU5OSw3ICs2MTEsOCBAQAogCQkJaWYgKChtaWRfZW50cnktPm1pZCA9PSBzbWJfYnVmZmVyLT5NaWQpICYmCiAJCQkgICAgKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSAmJgogCQkJICAgIChtaWRfZW50cnktPmNvbW1hbmQgPT0gc21iX2J1ZmZlci0+Q29tbWFuZCkpIHsKLQkJCQlpZiAoY2hlY2sybmRUMihzbWJfYnVmZmVyLHNlcnZlci0+bWF4QnVmKSA+IDApIHsKKwkJCQlpZiAobGVuZ3RoID09IDAgJiYKKwkJCQkgICBjaGVjazJuZFQyKHNtYl9idWZmZXIsIHNlcnZlci0+bWF4QnVmKSA+IDApIHsKIAkJCQkJLyogV2UgaGF2ZSBhIG11bHRpcGFydCB0cmFuc2FjdDIgcmVzcCAqLwogCQkJCQlpc011bHRpUnNwID0gdHJ1ZTsKIAkJCQkJaWYgKG1pZF9lbnRyeS0+cmVzcF9idWYpIHsKQEAgLTYzNCwxMiArNjQ3LDE3IEBACiAJCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9IHNtYl9idWZmZXI7CiAJCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9IGlzTGFyZ2VCdWY7CiBtdWx0aV90Ml9mbmQ6Ci0JCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVNQT05TRV9SRUNFSVZFRDsKLQkJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKLQkJCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CisJCQkJaWYgKGxlbmd0aCA9PSAwKQorCQkJCQltaWRfZW50cnktPm1pZFN0YXRlID0KKwkJCQkJCQlNSURfUkVTUE9OU0VfUkVDRUlWRUQ7CisJCQkJZWxzZQorCQkJCQltaWRfZW50cnktPm1pZFN0YXRlID0KKwkJCQkJCQlNSURfUkVTUE9OU0VfTUFMRk9STUVEOwogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgogCQkJCW1pZF9lbnRyeS0+d2hlbl9yZWNlaXZlZCA9IGppZmZpZXM7CiAjZW5kaWYKKwkJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKKwkJCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQltaWRfZW50cnkgPSBOVUxMOwpAQCAtNjU1LDYgKzY3Myw5IEBACiAJCQkJZWxzZQogCQkJCQlzbWFsbGJ1ZiA9IE5VTEw7CiAJCQl9CisJCX0gZWxzZSBpZiAobGVuZ3RoICE9IDApIHsKKwkJCS8qIHJlc3BvbnNlIHNhbml0eSBjaGVja3MgZmFpbGVkICovCisJCQljb250aW51ZTsKIAkJfSBlbHNlIGlmICghaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHNtYl9idWZmZXIsIHNlcnZlcikgJiYKIAkJCSAgICFpc011bHRpUnNwKSB7CiAJCQljRVJST1IoMSwgIk5vIHRhc2sgdG8gd2FrZSwgdW5rbm93biBmcmFtZSByZWNlaXZlZCEgIgpAQCAtMTM0NCw2ICsxMzY1LDggQEAKIAkJCXZvbC0+ZGlyZWN0X2lvID0gMTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiZm9yY2VkaXJlY3RpbyIsIDEzKSA9PSAwKSB7CiAJCQl2b2wtPmRpcmVjdF9pbyA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInN0cmljdGNhY2hlIiwgMTEpID09IDApIHsKKwkJCXZvbC0+c3RyaWN0X2lvID0gMTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9hYyIsIDQpID09IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IE1vdW50IG9wdGlvbiBub2FjIG5vdCAiCiAJCQkJInN1cHBvcnRlZC4gSW5zdGVhZCBzZXQgIgpAQCAtMTU2OCw2ICsxNTkxLDkgQEAKIAogCXNwaW5fbG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VydmVyLCAmY2lmc190Y3Bfc2VzX2xpc3QsIHRjcF9zZXNfbGlzdCkgeworCQlpZiAoIW5ldF9lcShjaWZzX25ldF9ucyhzZXJ2ZXIpLCBjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMpKQorCQkJY29udGludWU7CisKIAkJaWYgKCFtYXRjaF9hZGRyZXNzKHNlcnZlciwgYWRkciwKIAkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJnZvbC0+c3JjYWRkcikpCiAJCQljb250aW51ZTsKQEAgLTE1OTgsNiArMTYyNCw4IEBACiAJCXJldHVybjsKIAl9CiAKKwlwdXRfbmV0KGNpZnNfbmV0X25zKHNlcnZlcikpOworCiAJbGlzdF9kZWxfaW5pdCgmc2VydmVyLT50Y3Bfc2VzX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAKQEAgLTE2NzIsNiArMTcwMCw3IEBACiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKKwljaWZzX3NldF9uZXRfbnModGNwX3NlcywgZ2V0X25ldChjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMpKTsKIAl0Y3Bfc2VzLT5ob3N0bmFtZSA9IGV4dHJhY3RfaG9zdG5hbWUodm9sdW1lX2luZm8tPlVOQyk7CiAJaWYgKElTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpIHsKIAkJcmMgPSBQVFJfRVJSKHRjcF9zZXMtPmhvc3RuYW1lKTsKQEAgLTE3NTIsNiArMTc4MSw4IEBACiBvdXRfZXJyX2NyeXB0b19yZWxlYXNlOgogCWNpZnNfY3J5cHRvX3NoYXNoX3JlbGVhc2UodGNwX3Nlcyk7CiAKKwlwdXRfbmV0KGNpZnNfbmV0X25zKHRjcF9zZXMpKTsKKwogb3V0X2VycjoKIAlpZiAodGNwX3NlcykgewogCQlpZiAoIUlTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpCkBAIC0yMjYzLDggKzIyOTQsOCBAQAogCX0KIAogCWlmIChzb2NrZXQgPT0gTlVMTCkgewotCQlyYyA9IHNvY2tfY3JlYXRlX2tlcm4oc2ZhbWlseSwgU09DS19TVFJFQU0sCi0JCQkJICAgICAgSVBQUk9UT19UQ1AsICZzb2NrZXQpOworCQlyYyA9IF9fc29ja19jcmVhdGUoY2lmc19uZXRfbnMoc2VydmVyKSwgc2ZhbWlseSwgU09DS19TVFJFQU0sCisJCQkJICAgSVBQUk9UT19UQ1AsICZzb2NrZXQsIDEpOwogCQlpZiAocmMgPCAwKSB7CiAJCQljRVJST1IoMSwgIkVycm9yICVkIGNyZWF0aW5nIHNvY2tldCIsIHJjKTsKIAkJCXNlcnZlci0+c3NvY2tldCA9IE5VTEw7CkBAIC0yNTc2LDYgKzI2MDcsOCBAQAogCWlmIChwdm9sdW1lX2luZm8tPm11bHRpdXNlcikKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gKENJRlNfTU9VTlRfTVVMVElVU0VSIHwKIAkJCQkJICAgIENJRlNfTU9VTlRfTk9fUEVSTSk7CisJaWYgKHB2b2x1bWVfaW5mby0+c3RyaWN0X2lvKQorCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1NUUklDVF9JTzsKIAlpZiAocHZvbHVtZV9pbmZvLT5kaXJlY3RfaW8pIHsKIAkJY0ZZSSgxLCAibW91bnRpbmcgc2hhcmUgdXNpbmcgZGlyZWN0IGkvbyIpOwogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX0RJUkVDVF9JTzsKQEAgLTI5NzcsNyArMzAxMCw4IEBACiAJCQkJCSBiY2NfcHRyKTsKIAkJZWxzZQogI2VuZGlmIC8qIENJRlNfV0VBS19QV19IQVNIICovCi0JCVNNQk5UZW5jcnlwdCh0Y29uLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LCBiY2NfcHRyKTsKKwkJcmMgPSBTTUJOVGVuY3J5cHQodGNvbi0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwKKwkJCQkJYmNjX3B0cik7CiAKIAkJYmNjX3B0ciArPSBDSUZTX0FVVEhfUkVTUF9TSVpFOwogCQlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JQ09ERSkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBkN2Q2NWE3Li5lOTY0YjFjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMzQ2LDcgKzM0Niw2IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgdGNvbl9saW5rICp0bGluazsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUgPSBOVUxMOwotCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOwogCWNoYXIgKmZ1bGxfcGF0aCA9IE5VTEw7CiAJYm9vbCBwb3NpeF9vcGVuX29rID0gZmFsc2U7CiAJX191MTYgbmV0ZmlkOwpAQCAtMzYxLDggKzM2MCw2IEBACiAJfQogCXRjb24gPSB0bGlua190Y29uKHRsaW5rKTsKIAotCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0KIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CkBAIC04NDgsNyArODQ1LDcgQEAKIH0KIAogLyogdXBkYXRlIHRoZSBmaWxlIHNpemUgKGlmIG5lZWRlZCkgYWZ0ZXIgYSB3cml0ZSAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGNpZnNfdXBkYXRlX2VvZihzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2ksIGxvZmZfdCBvZmZzZXQsCiAJCSAgICAgIHVuc2lnbmVkIGludCBieXRlc193cml0dGVuKQogewpAQCAtMTE0Niw3ICsxMTQzLDYgQEAKIAljaGFyICp3cml0ZV9kYXRhOwogCWludCByYyA9IC1FRkFVTFQ7CiAJaW50IGJ5dGVzX3dyaXR0ZW4gPSAwOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7CiAKQEAgLTExNTQsNyArMTE1MCw2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwotCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAogCW9mZnNldCArPSAobG9mZl90KWZyb207CiAJd3JpdGVfZGF0YSA9IGttYXAocGFnZSk7CkBAIC0xNjE5LDEzICsxNjE0LDIxNSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludAorY2lmc193cml0ZV9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3sKKwlpbnQgcmMgPSAwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgeworCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoX19HRlBfSElHSE1FTSk7CisJCWlmICghcGFnZXNbaV0pIHsKKwkJCS8qCisJCQkgKiBzYXZlIG51bWJlciBvZiBwYWdlcyB3ZSBoYXZlIGFscmVhZHkgYWxsb2NhdGVkIGFuZAorCQkJICogcmV0dXJuIHdpdGggRU5PTUVNIGVycm9yCisJCQkgKi8KKwkJCW51bV9wYWdlcyA9IGk7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJcmV0dXJuIHJjOworCitlcnJvcjoKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCXB1dF9wYWdlKHBhZ2VzW2ldKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3NpemVfdCBnZXRfbnVtcGFnZXMoY29uc3Qgc2l6ZV90IHdzaXplLCBjb25zdCBzaXplX3QgbGVuLCBzaXplX3QgKmN1cl9sZW4pCit7CisJc2l6ZV90IG51bV9wYWdlczsKKwlzaXplX3QgY2xlbjsKKworCWNsZW4gPSBtaW5fdChjb25zdCBzaXplX3QsIGxlbiwgd3NpemUpOworCW51bV9wYWdlcyA9IGNsZW4gLyBQQUdFX0NBQ0hFX1NJWkU7CisJaWYgKGNsZW4gJSBQQUdFX0NBQ0hFX1NJWkUpCisJCW51bV9wYWdlcysrOworCisJaWYgKGN1cl9sZW4pCisJCSpjdXJfbGVuID0gY2xlbjsKKworCXJldHVybiBudW1fcGFnZXM7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitjaWZzX2lvdmVjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCB3cml0dGVuOworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzLCBucGFnZXMsIGk7CisJc2l6ZV90IGNvcGllZCwgbGVuLCBjdXJfbGVuOworCXNzaXplX3QgdG90YWxfd3JpdHRlbiA9IDA7CisJc3RydWN0IGt2ZWMgKnRvX3NlbmQ7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlzdHJ1Y3QgaW92X2l0ZXIgaXQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7CisJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKKwlpbnQgeGlkLCByYzsKKworCWxlbiA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwlyYyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsIHBvZmZzZXQsICZsZW4sIDApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CisJbnVtX3BhZ2VzID0gZ2V0X251bXBhZ2VzKGNpZnNfc2ItPndzaXplLCBsZW4sICZjdXJfbGVuKTsKKworCXBhZ2VzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2VzICopKm51bV9wYWdlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0b19zZW5kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2ZWMpKihudW1fcGFnZXMgKyAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0b19zZW5kKSB7CisJCWtmcmVlKHBhZ2VzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmMgPSBjaWZzX3dyaXRlX2FsbG9jYXRlX3BhZ2VzKHBhZ2VzLCBudW1fcGFnZXMpOworCWlmIChyYykgeworCQlrZnJlZShwYWdlcyk7CisJCWtmcmVlKHRvX3NlbmQpOworCQlyZXR1cm4gcmM7CisJfQorCisJeGlkID0gR2V0WGlkKCk7CisJb3Blbl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBUY29uID0gdGxpbmtfdGNvbihvcGVuX2ZpbGUtPnRsaW5rKTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpb3ZfaXRlcl9pbml0KCZpdCwgaW92LCBucl9zZWdzLCBsZW4sIDApOworCW5wYWdlcyA9IG51bV9wYWdlczsKKworCWRvIHsKKwkJc2l6ZV90IHNhdmVfbGVuID0gY3VyX2xlbjsKKwkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCQljb3BpZWQgPSBtaW5fdChjb25zdCBzaXplX3QsIGN1cl9sZW4sIFBBR0VfQ0FDSEVfU0laRSk7CisJCQljb3BpZWQgPSBpb3ZfaXRlcl9jb3B5X2Zyb21fdXNlcihwYWdlc1tpXSwgJml0LCAwLAorCQkJCQkJCSBjb3BpZWQpOworCQkJY3VyX2xlbiAtPSBjb3BpZWQ7CisJCQlpb3ZfaXRlcl9hZHZhbmNlKCZpdCwgY29waWVkKTsKKwkJCXRvX3NlbmRbaSsxXS5pb3ZfYmFzZSA9IGttYXAocGFnZXNbaV0pOworCQkJdG9fc2VuZFtpKzFdLmlvdl9sZW4gPSBjb3BpZWQ7CisJCX0KKworCQljdXJfbGVuID0gc2F2ZV9sZW4gLSBjdXJfbGVuOworCisJCWRvIHsKKwkJCWlmIChvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUpIHsKKwkJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUob3Blbl9maWxlLCBmYWxzZSk7CisJCQkJaWYgKHJjICE9IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJcmMgPSBDSUZTU01CV3JpdGUyKHhpZCwgcFRjb24sIG9wZW5fZmlsZS0+bmV0ZmlkLAorCQkJCQkgICBjdXJfbGVuLCAqcG9mZnNldCwgJndyaXR0ZW4sCisJCQkJCSAgIHRvX3NlbmQsIG5wYWdlcywgMCk7CisJCX0gd2hpbGUgKHJjID09IC1FQUdBSU4pOworCisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKKwkJCWt1bm1hcChwYWdlc1tpXSk7CisKKwkJaWYgKHdyaXR0ZW4pIHsKKwkJCWxlbiAtPSB3cml0dGVuOworCQkJdG90YWxfd3JpdHRlbiArPSB3cml0dGVuOworCQkJY2lmc191cGRhdGVfZW9mKENJRlNfSShpbm9kZSksICpwb2Zmc2V0LCB3cml0dGVuKTsKKwkJCSpwb2Zmc2V0ICs9IHdyaXR0ZW47CisJCX0gZWxzZSBpZiAocmMgPCAwKSB7CisJCQlpZiAoIXRvdGFsX3dyaXR0ZW4pCisJCQkJdG90YWxfd3JpdHRlbiA9IHJjOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBnZXQgbGVuZ3RoIGFuZCBudW1iZXIgb2Yga3ZlY3Mgb2YgdGhlIG5leHQgd3JpdGUgKi8KKwkJbnBhZ2VzID0gZ2V0X251bXBhZ2VzKGNpZnNfc2ItPndzaXplLCBsZW4sICZjdXJfbGVuKTsKKwl9IHdoaWxlIChsZW4gPiAwKTsKKworCWlmICh0b3RhbF93cml0dGVuID4gMCkgeworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlpZiAoKnBvZmZzZXQgPiBpbm9kZS0+aV9zaXplKQorCQkJaV9zaXplX3dyaXRlKGlub2RlLCAqcG9mZnNldCk7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl9CisKKwljaWZzX3N0YXRzX2J5dGVzX3dyaXR0ZW4ocFRjb24sIHRvdGFsX3dyaXR0ZW4pOworCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCXB1dF9wYWdlKHBhZ2VzW2ldKTsKKwlrZnJlZSh0b19zZW5kKTsKKwlrZnJlZShwYWdlcyk7CisJRnJlZVhpZCh4aWQpOworCXJldHVybiB0b3RhbF93cml0dGVuOworfQorCitzdGF0aWMgc3NpemVfdCBjaWZzX3VzZXJfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXNzaXplX3Qgd3JpdHRlbjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJLyoKKwkgKiBCQiAtIG9wdGltaXplIHRoZSB3YXkgd2hlbiBzaWduaW5nIGlzIGRpc2FibGVkLiBXZSBjYW4gZHJvcCB0aGlzCisJICogZXh0cmEgbWVtb3J5LXRvLW1lbW9yeSBjb3B5aW5nIGFuZCB1c2UgaW92ZWMgYnVmZmVycyBmb3IgY29uc3RydWN0aW5nCisJICogd3JpdGUgcmVxdWVzdC4KKwkgKi8KKworCXdyaXR0ZW4gPSBjaWZzX2lvdmVjX3dyaXRlKGlvY2ItPmtpX2ZpbHAsIGlvdiwgbnJfc2VncywgJnBvcyk7CisJaWYgKHdyaXR0ZW4gPiAwKSB7CisJCUNJRlNfSShpbm9kZSktPmludmFsaWRfbWFwcGluZyA9IHRydWU7CisJCWlvY2ItPmtpX3BvcyA9IHBvczsKKwl9CisKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsKQorCQlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CisKKwkvKgorCSAqIEluIHN0cmljdCBjYWNoZSBtb2RlIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciBleGFjdGx5CisJICogZnJvbSB0aGUgcG9zIHRvIHBvcytsZW4tMSByYXRoZXIgdGhhbiBmbHVzaCBhbGwgYWZmZWN0ZWQgcGFnZXMKKwkgKiBiZWNhdXNlIGl0IG1heSBjYXVzZSBhIGVycm9yIHdpdGggbWFuZGF0b3J5IGxvY2tzIG9uIHRoZXNlIHBhZ2VzIGJ1dAorCSAqIG5vdCBvbiB0aGUgcmVnaW9uIGZyb20gcG9zIHRvIHBwb3MrbGVuLTEuCisJICovCisKKwlyZXR1cm4gY2lmc191c2VyX3dyaXRldihpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90CiBjaWZzX2lvdmVjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBvZmZzZXQpCiB7CiAJaW50IHJjOwogCWludCB4aWQ7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3JlYWQsIGJ5dGVzX3JlYWQgPSAwOworCXNzaXplX3QgdG90YWxfcmVhZDsKKwl1bnNpZ25lZCBpbnQgYnl0ZXNfcmVhZCA9IDA7CiAJc2l6ZV90IGxlbiwgY3VyX2xlbjsKIAlpbnQgaW92X29mZnNldCA9IDA7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbGluay5jIGIvZnMvY2lmcy9saW5rLmMKaW5kZXggMzA2NzY5ZC4uZTg4MDRkMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9saW5rLmMKKysrIGIvZnMvY2lmcy9saW5rLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgotI2luY2x1ZGUgIm1kNS5oIgogCiAjZGVmaW5lIENJRlNfTUZfU1lNTElOS19MRU5fT0ZGU0VUICg0KzEpCiAjZGVmaW5lIENJRlNfTUZfU1lNTElOS19NRDVfT0ZGU0VUIChDSUZTX01GX1NZTUxJTktfTEVOX09GRlNFVCsoNCsxKSkKQEAgLTQ3LDYgKzQ2LDQ1IEBACiAJbWQ1X2hhc2hbMTJdLCBtZDVfaGFzaFsxM10sIG1kNV9oYXNoWzE0XSwgbWQ1X2hhc2hbMTVdCiAKIHN0YXRpYyBpbnQKK3N5bWxpbmtfaGFzaCh1bnNpZ25lZCBpbnQgbGlua19sZW4sIGNvbnN0IGNoYXIgKmxpbmtfc3RyLCB1OCAqbWQ1X2hhc2gpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKm1kNTsKKwlzdHJ1Y3Qgc2Rlc2MgKnNkZXNjbWQ1OworCisJbWQ1ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDUiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKG1kNSkpIHsKKwkJcmMgPSBQVFJfRVJSKG1kNSk7CisJCWNFUlJPUigxLCAiJXM6IENyeXB0byBtZDUgYWxsb2NhdGlvbiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBzaGFzaF9kZXNjKSArIGNyeXB0b19zaGFzaF9kZXNjc2l6ZShtZDUpOworCXNkZXNjbWQ1ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXNjbWQ1KSB7CisJCXJjID0gLUVOT01FTTsKKwkJY0VSUk9SKDEsICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19mdW5jX18pOworCQlnb3RvIHN5bWxpbmtfaGFzaF9lcnI7CisJfQorCXNkZXNjbWQ1LT5zaGFzaC50Zm0gPSBtZDU7CisJc2Rlc2NtZDUtPnNoYXNoLmZsYWdzID0gMHgwOworCisJcmMgPSBjcnlwdG9fc2hhc2hfaW5pdCgmc2Rlc2NtZDUtPnNoYXNoKTsKKwlpZiAocmMpIHsKKwkJY0VSUk9SKDEsICIlczogQ291bGQgbm90IGluaXQgbWQ1IHNoYXNoXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gc3ltbGlua19oYXNoX2VycjsKKwl9CisJY3J5cHRvX3NoYXNoX3VwZGF0ZSgmc2Rlc2NtZDUtPnNoYXNoLCBsaW5rX3N0ciwgbGlua19sZW4pOworCXJjID0gY3J5cHRvX3NoYXNoX2ZpbmFsKCZzZGVzY21kNS0+c2hhc2gsIG1kNV9oYXNoKTsKKworc3ltbGlua19oYXNoX2VycjoKKwljcnlwdG9fZnJlZV9zaGFzaChtZDUpOworCWtmcmVlKHNkZXNjbWQ1KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAogQ0lGU1BhcnNlTUZTeW1saW5rKGNvbnN0IHU4ICpidWYsCiAJCSAgIHVuc2lnbmVkIGludCBidWZfbGVuLAogCQkgICB1bnNpZ25lZCBpbnQgKl9saW5rX2xlbiwKQEAgLTU2LDcgKzk0LDYgQEAKIAl1bnNpZ25lZCBpbnQgbGlua19sZW47CiAJY29uc3QgY2hhciAqbWQ1X3N0cjE7CiAJY29uc3QgY2hhciAqbGlua19zdHI7Ci0Jc3RydWN0IE1ENUNvbnRleHQgbWQ1X2N0eDsKIAl1OCBtZDVfaGFzaFsxNl07CiAJY2hhciBtZDVfc3RyMlszNF07CiAKQEAgLTcwLDkgKzEwNywxMSBAQAogCWlmIChyYyAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNpZnNfTUQ1X2luaXQoJm1kNV9jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmbWQ1X2N0eCwgKGNvbnN0IHU4ICopbGlua19zdHIsIGxpbmtfbGVuKTsKLQljaWZzX01ENV9maW5hbChtZDVfaGFzaCwgJm1kNV9jdHgpOworCXJjID0gc3ltbGlua19oYXNoKGxpbmtfbGVuLCBsaW5rX3N0ciwgbWQ1X2hhc2gpOworCWlmIChyYykgeworCQljRllJKDEsICIlczogTUQ1IGhhc2ggZmFpbHVyZTogJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CiAKIAlzbnByaW50ZihtZDVfc3RyMiwgc2l6ZW9mKG1kNV9zdHIyKSwKIAkJIENJRlNfTUZfU1lNTElOS19NRDVfRk9STUFULApAQCAtOTQsOSArMTMzLDkgQEAKIHN0YXRpYyBpbnQKIENJRlNGb3JtYXRNRlN5bWxpbmsodTggKmJ1ZiwgdW5zaWduZWQgaW50IGJ1Zl9sZW4sIGNvbnN0IGNoYXIgKmxpbmtfc3RyKQogeworCWludCByYzsKIAl1bnNpZ25lZCBpbnQgbGlua19sZW47CiAJdW5zaWduZWQgaW50IG9mczsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBtZDVfY3R4OwogCXU4IG1kNV9oYXNoWzE2XTsKIAogCWlmIChidWZfbGVuICE9IENJRlNfTUZfU1lNTElOS19GSUxFX1NJWkUpCkBAIC0xMDcsOSArMTQ2LDExIEBACiAJaWYgKGxpbmtfbGVuID4gQ0lGU19NRl9TWU1MSU5LX0xJTktfTUFYTEVOKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAotCWNpZnNfTUQ1X2luaXQoJm1kNV9jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmbWQ1X2N0eCwgKGNvbnN0IHU4ICopbGlua19zdHIsIGxpbmtfbGVuKTsKLQljaWZzX01ENV9maW5hbChtZDVfaGFzaCwgJm1kNV9jdHgpOworCXJjID0gc3ltbGlua19oYXNoKGxpbmtfbGVuLCBsaW5rX3N0ciwgbWQ1X2hhc2gpOworCWlmIChyYykgeworCQljRllJKDEsICIlczogTUQ1IGhhc2ggZmFpbHVyZTogJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CiAKIAlzbnByaW50ZihidWYsIGJ1Zl9sZW4sCiAJCSBDSUZTX01GX1NZTUxJTktfTEVOX0ZPUk1BVCBDSUZTX01GX1NZTUxJTktfTUQ1X0ZPUk1BVCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWQ0LmMgYi9mcy9jaWZzL21kNC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzI1YzI2Li4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvbWQ0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAgIFVuaXggU01CL05ldGJpb3MgaW1wbGVtZW50YXRpb24uCi0gICBWZXJzaW9uIDEuOS4KLSAgIGEgaW1wbGVtZW50YXRpb24gb2YgTUQ0IGRlc2lnbmVkIGZvciB1c2UgaW4gdGhlIFNNQiBhdXRoZW50aWNhdGlvbiBwcm90b2NvbAotICAgQ29weXJpZ2h0IChDKSBBbmRyZXcgVHJpZGdlbGwgMTk5Ny0xOTk4LgotICAgTW9kaWZpZWQgYnkgU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pIDIwMDItMjAwMwotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgImNpZnNlbmNyeXB0LmgiCi0KLS8qIE5PVEU6IFRoaXMgY29kZSBtYWtlcyBubyBhdHRlbXB0IHRvIGJlIGZhc3QhICovCi0KLXN0YXRpYyBfX3UzMgotRihfX3UzMiBYLCBfX3UzMiBZLCBfX3UzMiBaKQotewotCXJldHVybiAoWCAmIFkpIHwgKCh+WCkgJiBaKTsKLX0KLQotc3RhdGljIF9fdTMyCi1HKF9fdTMyIFgsIF9fdTMyIFksIF9fdTMyIFopCi17Ci0JcmV0dXJuIChYICYgWSkgfCAoWCAmIFopIHwgKFkgJiBaKTsKLX0KLQotc3RhdGljIF9fdTMyCi1IKF9fdTMyIFgsIF9fdTMyIFksIF9fdTMyIFopCi17Ci0JcmV0dXJuIFggXiBZIF4gWjsKLX0KLQotc3RhdGljIF9fdTMyCi1sc2hpZnQoX191MzIgeCwgaW50IHMpCi17Ci0JeCAmPSAweEZGRkZGRkZGOwotCXJldHVybiAoKHggPDwgcykgJiAweEZGRkZGRkZGKSB8ICh4ID4+ICgzMiAtIHMpKTsKLX0KLQotI2RlZmluZSBST1VORDEoYSxiLGMsZCxrLHMpICgqYSkgPSBsc2hpZnQoKCphKSArIEYoKmIsKmMsKmQpICsgWFtrXSwgcykKLSNkZWZpbmUgUk9VTkQyKGEsYixjLGQsayxzKSAoKmEpID0gbHNoaWZ0KCgqYSkgKyBHKCpiLCpjLCpkKSArIFhba10gKyAoX191MzIpMHg1QTgyNzk5OSxzKQotI2RlZmluZSBST1VORDMoYSxiLGMsZCxrLHMpICgqYSkgPSBsc2hpZnQoKCphKSArIEgoKmIsKmMsKmQpICsgWFtrXSArIChfX3UzMikweDZFRDlFQkExLHMpCi0KLS8qIHRoaXMgYXBwbGllcyBtZDQgdG8gNjQgYnl0ZSBjaHVua3MgKi8KLXN0YXRpYyB2b2lkCi1tZGZvdXI2NChfX3UzMiAqTSwgX191MzIgKkEsIF9fdTMyICpCLCBfX3UzMiAqQywgX191MzIgKkQpCi17Ci0JaW50IGo7Ci0JX191MzIgQUEsIEJCLCBDQywgREQ7Ci0JX191MzIgWFsxNl07Ci0KLQotCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQotCQlYW2pdID0gTVtqXTsKLQotCUFBID0gKkE7Ci0JQkIgPSAqQjsKLQlDQyA9ICpDOwotCUREID0gKkQ7Ci0KLQlST1VORDEoQSwgQiwgQywgRCwgMCwgMyk7Ci0JUk9VTkQxKEQsIEEsIEIsIEMsIDEsIDcpOwotCVJPVU5EMShDLCBELCBBLCBCLCAyLCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDMsIDE5KTsKLQlST1VORDEoQSwgQiwgQywgRCwgNCwgMyk7Ci0JUk9VTkQxKEQsIEEsIEIsIEMsIDUsIDcpOwotCVJPVU5EMShDLCBELCBBLCBCLCA2LCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDcsIDE5KTsKLQlST1VORDEoQSwgQiwgQywgRCwgOCwgMyk7Ci0JUk9VTkQxKEQsIEEsIEIsIEMsIDksIDcpOwotCVJPVU5EMShDLCBELCBBLCBCLCAxMCwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCAxMSwgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCAxMiwgMyk7Ci0JUk9VTkQxKEQsIEEsIEIsIEMsIDEzLCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgMTQsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgMTUsIDE5KTsKLQotCVJPVU5EMihBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDIoRCwgQSwgQiwgQywgNCwgNSk7Ci0JUk9VTkQyKEMsIEQsIEEsIEIsIDgsIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxMiwgMTMpOwotCVJPVU5EMihBLCBCLCBDLCBELCAxLCAzKTsKLQlST1VORDIoRCwgQSwgQiwgQywgNSwgNSk7Ci0JUk9VTkQyKEMsIEQsIEEsIEIsIDksIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxMywgMTMpOwotCVJPVU5EMihBLCBCLCBDLCBELCAyLCAzKTsKLQlST1VORDIoRCwgQSwgQiwgQywgNiwgNSk7Ci0JUk9VTkQyKEMsIEQsIEEsIEIsIDEwLCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTQsIDEzKTsKLQlST1VORDIoQSwgQiwgQywgRCwgMywgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDcsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCAxMSwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDE1LCAxMyk7Ci0KLQlST1VORDMoQSwgQiwgQywgRCwgMCwgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDgsIDkpOwotCVJPVU5EMyhDLCBELCBBLCBCLCA0LCAxMSk7Ci0JUk9VTkQzKEIsIEMsIEQsIEEsIDEyLCAxNSk7Ci0JUk9VTkQzKEEsIEIsIEMsIEQsIDIsIDMpOwotCVJPVU5EMyhELCBBLCBCLCBDLCAxMCwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDYsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTQsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMSwgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDksIDkpOwotCVJPVU5EMyhDLCBELCBBLCBCLCA1LCAxMSk7Ci0JUk9VTkQzKEIsIEMsIEQsIEEsIDEzLCAxNSk7Ci0JUk9VTkQzKEEsIEIsIEMsIEQsIDMsIDMpOwotCVJPVU5EMyhELCBBLCBCLCBDLCAxMSwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDcsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTUsIDE1KTsKLQotCSpBICs9IEFBOwotCSpCICs9IEJCOwotCSpDICs9IENDOwotCSpEICs9IEREOwotCi0JKkEgJj0gMHhGRkZGRkZGRjsKLQkqQiAmPSAweEZGRkZGRkZGOwotCSpDICY9IDB4RkZGRkZGRkY7Ci0JKkQgJj0gMHhGRkZGRkZGRjsKLQotCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQotCQlYW2pdID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHk2NChfX3UzMiAqTSwgdW5zaWduZWQgY2hhciAqaW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJTVtpXSA9IChpbltpICogNCArIDNdIDw8IDI0KSB8IChpbltpICogNCArIDJdIDw8IDE2KSB8Ci0JCSAgICAoaW5baSAqIDQgKyAxXSA8PCA4KSB8IChpbltpICogNCArIDBdIDw8IDApOwotfQotCi1zdGF0aWMgdm9pZAotY29weTQodW5zaWduZWQgY2hhciAqb3V0LCBfX3UzMiB4KQotewotCW91dFswXSA9IHggJiAweEZGOwotCW91dFsxXSA9ICh4ID4+IDgpICYgMHhGRjsKLQlvdXRbMl0gPSAoeCA+PiAxNikgJiAweEZGOwotCW91dFszXSA9ICh4ID4+IDI0KSAmIDB4RkY7Ci19Ci0KLS8qIHByb2R1Y2UgYSBtZDQgbWVzc2FnZSBkaWdlc3QgZnJvbSBkYXRhIG9mIGxlbmd0aCBuIGJ5dGVzICovCi12b2lkCi1tZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pCi17Ci0JdW5zaWduZWQgY2hhciBidWZbMTI4XTsKLQlfX3UzMiBNWzE2XTsKLQlfX3UzMiBiID0gbiAqIDg7Ci0JaW50IGk7Ci0JX191MzIgQSA9IDB4Njc0NTIzMDE7Ci0JX191MzIgQiA9IDB4ZWZjZGFiODk7Ci0JX191MzIgQyA9IDB4OThiYWRjZmU7Ci0JX191MzIgRCA9IDB4MTAzMjU0NzY7Ci0KLQl3aGlsZSAobiA+IDY0KSB7Ci0JCWNvcHk2NChNLCBpbik7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQkJaW4gKz0gNjQ7Ci0JCW4gLT0gNjQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotCQlidWZbaV0gPSAwOwotCW1lbWNweShidWYsIGluLCBuKTsKLQlidWZbbl0gPSAweDgwOwotCi0JaWYgKG4gPD0gNTUpIHsKLQkJY29weTQoYnVmICsgNTYsIGIpOwotCQljb3B5NjQoTSwgYnVmKTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCX0gZWxzZSB7Ci0JCWNvcHk0KGJ1ZiArIDEyMCwgYik7Ci0JCWNvcHk2NChNLCBidWYpOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JCWNvcHk2NChNLCBidWYgKyA2NCk7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0JCWJ1ZltpXSA9IDA7Ci0JY29weTY0KE0sIGJ1Zik7Ci0KLQljb3B5NChvdXQsIEEpOwotCWNvcHk0KG91dCArIDQsIEIpOwotCWNvcHk0KG91dCArIDgsIEMpOwotCWNvcHk0KG91dCArIDEyLCBEKTsKLQotCUEgPSBCID0gQyA9IEQgPSAwOwotfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9tZDUuYyBiL2ZzL2NpZnMvbWQ1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjY2YTUuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9tZDUuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0vKgotICogVGhpcyBjb2RlIGltcGxlbWVudHMgdGhlIE1ENSBtZXNzYWdlLWRpZ2VzdCBhbGdvcml0aG0uCi0gKiBUaGUgYWxnb3JpdGhtIGlzIGR1ZSB0byBSb24gUml2ZXN0LiAgVGhpcyBjb2RlIHdhcwotICogd3JpdHRlbiBieSBDb2xpbiBQbHVtYiBpbiAxOTkzLCBubyBjb3B5cmlnaHQgaXMgY2xhaW1lZC4KLSAqIFRoaXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbjsgZG8gd2l0aCBpdCB3aGF0IHlvdSB3aXNoLgotICoKLSAqIEVxdWl2YWxlbnQgY29kZSBpcyBhdmFpbGFibGUgZnJvbSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLgotICogVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoYXQsIGFuZCBpcyBlcXVpdmFsZW50LAotICogZXhjZXB0IHRoYXQgeW91IGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0d28gcGFnZXMgb2YgbGVnYWxlc2UKLSAqIHdpdGggZXZlcnkgY29weS4KLSAqCi0gKiBUbyBjb21wdXRlIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiBhIGNodW5rIG9mIGJ5dGVzLCBkZWNsYXJlIGFuCi0gKiBNRDVDb250ZXh0IHN0cnVjdHVyZSwgcGFzcyBpdCB0byBjaWZzX01ENV9pbml0LCBjYWxsIGNpZnNfTUQ1X3VwZGF0ZSBhcwotICogbmVlZGVkIG9uIGJ1ZmZlcnMgZnVsbCBvZiBieXRlcywgYW5kIHRoZW4gY2FsbCBjaWZzX01ENV9maW5hbCwgd2hpY2gKLSAqIHdpbGwgZmlsbCBhIHN1cHBsaWVkIDE2LWJ5dGUgYXJyYXkgd2l0aCB0aGUgZGlnZXN0LgotICovCi0KLS8qIFRoaXMgY29kZSBzbGlnaHRseSBtb2RpZmllZCB0byBmaXQgaW50byBTYW1iYSBieQotICAgYWJhcnRsZXRAc2FtYmEub3JnIEp1biAyMDAxCi0gICBhbmQgdG8gZml0IHRoZSBjaWZzIHZmcyBieQotICAgU3RldmUgRnJlbmNoIHNmcmVuY2hAdXMuaWJtLmNvbSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSAibWQ1LmgiCi0KLXN0YXRpYyB2b2lkIE1ENVRyYW5zZm9ybShfX3UzMiBidWZbNF0sIF9fdTMyIGNvbnN0IGluWzE2XSk7Ci0KLS8qCi0gKiBOb3RlOiB0aGlzIGNvZGUgaXMgaGFybWxlc3Mgb24gbGl0dGxlLWVuZGlhbiBtYWNoaW5lcy4KLSAqLwotc3RhdGljIHZvaWQKLWJ5dGVSZXZlcnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpCi17Ci0JX191MzIgdDsKLQlkbyB7Ci0JCXQgPSAoX191MzIpICgodW5zaWduZWQpIGJ1ZlszXSA8PCA4IHwgYnVmWzJdKSA8PCAxNiB8Ci0JCSAgICAoKHVuc2lnbmVkKSBidWZbMV0gPDwgOCB8IGJ1ZlswXSk7Ci0JCSooX191MzIgKikgYnVmID0gdDsKLQkJYnVmICs9IDQ7Ci0JfSB3aGlsZSAoLS1sb25ncyk7Ci19Ci0KLS8qCi0gKiBTdGFydCBNRDUgYWNjdW11bGF0aW9uLiAgU2V0IGJpdCBjb3VudCB0byAwIGFuZCBidWZmZXIgdG8gbXlzdGVyaW91cwotICogaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzLgotICovCi12b2lkCi1jaWZzX01ENV9pbml0KHN0cnVjdCBNRDVDb250ZXh0ICpjdHgpCi17Ci0JY3R4LT5idWZbMF0gPSAweDY3NDUyMzAxOwotCWN0eC0+YnVmWzFdID0gMHhlZmNkYWI4OTsKLQljdHgtPmJ1ZlsyXSA9IDB4OThiYWRjZmU7Ci0JY3R4LT5idWZbM10gPSAweDEwMzI1NDc2OwotCi0JY3R4LT5iaXRzWzBdID0gMDsKLQljdHgtPmJpdHNbMV0gPSAwOwotfQotCi0vKgotICogVXBkYXRlIGNvbnRleHQgdG8gcmVmbGVjdCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbm90aGVyIGJ1ZmZlciBmdWxsCi0gKiBvZiBieXRlcy4KLSAqLwotdm9pZAotY2lmc19NRDVfdXBkYXRlKHN0cnVjdCBNRDVDb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgY29uc3QgKmJ1ZiwgdW5zaWduZWQgbGVuKQotewotCXJlZ2lzdGVyIF9fdTMyIHQ7Ci0KLQkvKiBVcGRhdGUgYml0Y291bnQgKi8KLQotCXQgPSBjdHgtPmJpdHNbMF07Ci0JaWYgKChjdHgtPmJpdHNbMF0gPSB0ICsgKChfX3UzMikgbGVuIDw8IDMpKSA8IHQpCi0JCWN0eC0+Yml0c1sxXSsrOwkvKiBDYXJyeSBmcm9tIGxvdyB0byBoaWdoICovCi0JY3R4LT5iaXRzWzFdICs9IGxlbiA+PiAyOTsKLQotCXQgPSAodCA+PiAzKSAmIDB4M2Y7CS8qIEJ5dGVzIGFscmVhZHkgaW4gc2hzSW5mby0+ZGF0YSAqLwotCi0JLyogSGFuZGxlIGFueSBsZWFkaW5nIG9kZC1zaXplZCBjaHVua3MgKi8KLQotCWlmICh0KSB7Ci0JCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBjdHgtPmluICsgdDsKLQotCQl0ID0gNjQgLSB0OwotCQlpZiAobGVuIDwgdCkgewotCQkJbWVtbW92ZShwLCBidWYsIGxlbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbWVtbW92ZShwLCBidWYsIHQpOwotCQlieXRlUmV2ZXJzZShjdHgtPmluLCAxNik7Ci0JCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCQlidWYgKz0gdDsKLQkJbGVuIC09IHQ7Ci0JfQotCS8qIFByb2Nlc3MgZGF0YSBpbiA2NC1ieXRlIGNodW5rcyAqLwotCi0Jd2hpbGUgKGxlbiA+PSA2NCkgewotCQltZW1tb3ZlKGN0eC0+aW4sIGJ1ZiwgNjQpOwotCQlieXRlUmV2ZXJzZShjdHgtPmluLCAxNik7Ci0JCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCQlidWYgKz0gNjQ7Ci0JCWxlbiAtPSA2NDsKLQl9Ci0KLQkvKiBIYW5kbGUgYW55IHJlbWFpbmluZyBieXRlcyBvZiBkYXRhLiAqLwotCi0JbWVtbW92ZShjdHgtPmluLCBidWYsIGxlbik7Ci19Ci0KLS8qCi0gKiBGaW5hbCB3cmFwdXAgLSBwYWQgdG8gNjQtYnl0ZSBib3VuZGFyeSB3aXRoIHRoZSBiaXQgcGF0dGVybgotICogMSAwKiAoNjQtYml0IGNvdW50IG9mIGJpdHMgcHJvY2Vzc2VkLCBNU0ItZmlyc3QpCi0gKi8KLXZvaWQKLWNpZnNfTUQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgc3RydWN0IE1ENUNvbnRleHQgKmN0eCkKLXsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQotCS8qIENvbXB1dGUgbnVtYmVyIG9mIGJ5dGVzIG1vZCA2NCAqLwotCWNvdW50ID0gKGN0eC0+Yml0c1swXSA+PiAzKSAmIDB4M0Y7Ci0KLQkvKiBTZXQgdGhlIGZpcnN0IGNoYXIgb2YgcGFkZGluZyB0byAweDgwLiAgVGhpcyBpcyBzYWZlIHNpbmNlIHRoZXJlIGlzCi0JICAgYWx3YXlzIGF0IGxlYXN0IG9uZSBieXRlIGZyZWUgKi8KLQlwID0gY3R4LT5pbiArIGNvdW50OwotCSpwKysgPSAweDgwOwotCi0JLyogQnl0ZXMgb2YgcGFkZGluZyBuZWVkZWQgdG8gbWFrZSA2NCBieXRlcyAqLwotCWNvdW50ID0gNjQgLSAxIC0gY291bnQ7Ci0KLQkvKiBQYWQgb3V0IHRvIDU2IG1vZCA2NCAqLwotCWlmIChjb3VudCA8IDgpIHsKLQkJLyogVHdvIGxvdHMgb2YgcGFkZGluZzogIFBhZCB0aGUgZmlyc3QgYmxvY2sgdG8gNjQgYnl0ZXMgKi8KLQkJbWVtc2V0KHAsIDAsIGNvdW50KTsKLQkJYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOwotCQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQotCQkvKiBOb3cgZmlsbCB0aGUgbmV4dCBibG9jayB3aXRoIDU2IGJ5dGVzICovCi0JCW1lbXNldChjdHgtPmluLCAwLCA1Nik7Ci0JfSBlbHNlIHsKLQkJLyogUGFkIGJsb2NrIHRvIDU2IGJ5dGVzICovCi0JCW1lbXNldChwLCAwLCBjb3VudCAtIDgpOwotCX0KLQlieXRlUmV2ZXJzZShjdHgtPmluLCAxNCk7Ci0KLQkvKiBBcHBlbmQgbGVuZ3RoIGluIGJpdHMgYW5kIHRyYW5zZm9ybSAqLwotCSgoX191MzIgKikgY3R4LT5pbilbMTRdID0gY3R4LT5iaXRzWzBdOwotCSgoX191MzIgKikgY3R4LT5pbilbMTVdID0gY3R4LT5iaXRzWzFdOwotCi0JTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JYnl0ZVJldmVyc2UoKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5idWYsIDQpOwotCW1lbW1vdmUoZGlnZXN0LCBjdHgtPmJ1ZiwgMTYpOwotCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7CS8qIEluIGNhc2UgaXQncyBzZW5zaXRpdmUgKi8KLX0KLQotLyogVGhlIGZvdXIgY29yZSBmdW5jdGlvbnMgLSBGMSBpcyBvcHRpbWl6ZWQgc29tZXdoYXQgKi8KLQotLyogI2RlZmluZSBGMSh4LCB5LCB6KSAoeCAmIHkgfCB+eCAmIHopICovCi0jZGVmaW5lIEYxKHgsIHksIHopICh6IF4gKHggJiAoeSBeIHopKSkKLSNkZWZpbmUgRjIoeCwgeSwgeikgRjEoeiwgeCwgeSkKLSNkZWZpbmUgRjMoeCwgeSwgeikgKHggXiB5IF4geikKLSNkZWZpbmUgRjQoeCwgeSwgeikgKHkgXiAoeCB8IH56KSkKLQotLyogVGhpcyBpcyB0aGUgY2VudHJhbCBzdGVwIGluIHRoZSBNRDUgYWxnb3JpdGhtLiAqLwotI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGRhdGEsIHMpIFwKLQkodyArPSBmKHgsIHksIHopICsgZGF0YSwgIHcgPSB3PDxzIHwgdz4+KDMyLXMpLCAgdyArPSB4KQotCi0vKgotICogVGhlIGNvcmUgb2YgdGhlIE1ENSBhbGdvcml0aG0sIHRoaXMgYWx0ZXJzIGFuIGV4aXN0aW5nIE1ENSBoYXNoIHRvCi0gKiByZWZsZWN0IHRoZSBhZGRpdGlvbiBvZiAxNiBsb25nd29yZHMgb2YgbmV3IGRhdGEuICBjaWZzX01ENV91cGRhdGUgYmxvY2tzCi0gKiB0aGUgZGF0YSBhbmQgY29udmVydHMgYnl0ZXMgaW50byBsb25nd29yZHMgZm9yIHRoaXMgcm91dGluZS4KLSAqLwotc3RhdGljIHZvaWQKLU1ENVRyYW5zZm9ybShfX3UzMiBidWZbNF0sIF9fdTMyIGNvbnN0IGluWzE2XSkKLXsKLQlyZWdpc3RlciBfX3UzMiBhLCBiLCBjLCBkOwotCi0JYSA9IGJ1ZlswXTsKLQliID0gYnVmWzFdOwotCWMgPSBidWZbMl07Ci0JZCA9IGJ1ZlszXTsKLQotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhkNzZhYTQ3OCwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bMV0gKyAweGU4YzdiNzU2LCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMl0gKyAweDI0MjA3MGRiLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bM10gKyAweGMxYmRjZWVlLCAyMik7Ci0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bNF0gKyAweGY1N2MwZmFmLCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls1XSArIDB4NDc4N2M2MmEsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpbls2XSArIDB4YTgzMDQ2MTMsIDE3KTsKLQlNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpbls3XSArIDB4ZmQ0Njk1MDEsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls4XSArIDB4Njk4MDk4ZDgsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzldICsgMHg4YjQ0ZjdhZiwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZmZjViYjEsIDE3KTsKLQlNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblsxMV0gKyAweDg5NWNkN2JlLCAyMik7Ci0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMTJdICsgMHg2YjkwMTEyMiwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bMTNdICsgMHhmZDk4NzE5MywgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzE0XSArIDB4YTY3OTQzOGUsIDE3KTsKLQlNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblsxNV0gKyAweDQ5YjQwODIxLCAyMik7Ci0KLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4ZjYxZTI1NjIsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzZdICsgMHhjMDQwYjM0MCwgOSk7Ci0JTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bMTFdICsgMHgyNjVlNWE1MSwgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzBdICsgMHhlOWI2YzdhYSwgMjApOwotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzVdICsgMHhkNjJmMTA1ZCwgNSk7Ci0JTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bMTBdICsgMHgwMjQ0MTQ1MywgOSk7Ci0JTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bMTVdICsgMHhkOGExZTY4MSwgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzRdICsgMHhlN2QzZmJjOCwgMjApOwotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzldICsgMHgyMWUxY2RlNiwgNSk7Ci0JTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bMTRdICsgMHhjMzM3MDdkNiwgOSk7Ci0JTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bM10gKyAweGY0ZDUwZDg3LCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bOF0gKyAweDQ1NWExNGVkLCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bMTNdICsgMHhhOWUzZTkwNSwgNSk7Ci0JTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bMl0gKyAweGZjZWZhM2Y4LCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpbls3XSArIDB4Njc2ZjAyZDksIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblsxMl0gKyAweDhkMmE0YzhhLCAyMCk7Ci0KLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZmZmYTM5NDIsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzhdICsgMHg4NzcxZjY4MSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4NmQ5ZDYxMjIsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsxNF0gKyAweGZkZTUzODBjLCAyMyk7Ci0JTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bMV0gKyAweGE0YmVlYTQ0LCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls0XSArIDB4NGJkZWNmYTksIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpbls3XSArIDB4ZjZiYjRiNjAsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsxMF0gKyAweGJlYmZiYzcwLCAyMyk7Ci0JTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bMTNdICsgMHgyODliN2VjNiwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMF0gKyAweGVhYTEyN2ZhLCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bM10gKyAweGQ0ZWYzMDg1LCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bNl0gKyAweDA0ODgxZDA1LCAyMyk7Ci0JTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bOV0gKyAweGQ5ZDRkMDM5LCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblsxMl0gKyAweGU2ZGI5OWU1LCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTVdICsgMHgxZmEyN2NmOCwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzJdICsgMHhjNGFjNTY2NSwgMjMpOwotCi0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bMF0gKyAweGY0MjkyMjQ0LCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpbls3XSArIDB4NDMyYWZmOTcsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGFiOTQyM2E3LCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bNV0gKyAweGZjOTNhMDM5LCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bMTJdICsgMHg2NTViNTljMywgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bM10gKyAweDhmMGNjYzkyLCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTBdICsgMHhmZmVmZjQ3ZCwgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzFdICsgMHg4NTg0NWRkMSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzhdICsgMHg2ZmE4N2U0ZiwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTVdICsgMHhmZTJjZTZlMCwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzZdICsgMHhhMzAxNDMxNCwgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzEzXSArIDB4NGUwODExYTEsIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpbls0XSArIDB4Zjc1MzdlODIsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzExXSArIDB4YmQzYWYyMzUsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MmFkN2QyYmIsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpbls5XSArIDB4ZWI4NmQzOTEsIDIxKTsKLQotCWJ1ZlswXSArPSBhOwotCWJ1ZlsxXSArPSBiOwotCWJ1ZlsyXSArPSBjOwotCWJ1ZlszXSArPSBkOwotfQotCi0jaWYgMCAgIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIHRoZSByZmMgMjEwNCB2ZXJzaW9uIG9mIGhtYWNfbWQ1IGluaXRpYWxpc2F0aW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotaG1hY19tZDVfaW5pdF9yZmMyMTA0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCSAgICAgIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCWludCBpOwotCi0JLyogaWYga2V5IGlzIGxvbmdlciB0aGFuIDY0IGJ5dGVzIHJlc2V0IGl0IHRvIGtleT1NRDUoa2V5KSAqLwotCWlmIChrZXlfbGVuID4gNjQpIHsKLQkJdW5zaWduZWQgY2hhciB0a1sxNl07Ci0JCXN0cnVjdCBNRDVDb250ZXh0IHRjdHg7Ci0KLQkJY2lmc19NRDVfaW5pdCgmdGN0eCk7Ci0JCWNpZnNfTUQ1X3VwZGF0ZSgmdGN0eCwga2V5LCBrZXlfbGVuKTsKLQkJY2lmc19NRDVfZmluYWwodGssICZ0Y3R4KTsKLQotCQlrZXkgPSB0azsKLQkJa2V5X2xlbiA9IDE2OwotCX0KLQotCS8qIHN0YXJ0IG91dCBieSBzdG9yaW5nIGtleSBpbiBwYWRzICovCi0JbWVtc2V0KGN0eC0+a19pcGFkLCAwLCBzaXplb2YoY3R4LT5rX2lwYWQpKTsKLQltZW1zZXQoY3R4LT5rX29wYWQsIDAsIHNpemVvZihjdHgtPmtfb3BhZCkpOwotCW1lbWNweShjdHgtPmtfaXBhZCwga2V5LCBrZXlfbGVuKTsKLQltZW1jcHkoY3R4LT5rX29wYWQsIGtleSwga2V5X2xlbik7Ci0KLQkvKiBYT1Iga2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQljdHgtPmtfaXBhZFtpXSBePSAweDM2OwotCQljdHgtPmtfb3BhZFtpXSBePSAweDVjOwotCX0KLQotCWNpZnNfTUQ1X2luaXQoJmN0eC0+Y3R4KTsKLQljaWZzX01ENV91cGRhdGUoJmN0eC0+Y3R4LCBjdHgtPmtfaXBhZCwgNjQpOwotfQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIHRoZSBtaWNyb3NvZnQgdmVyc2lvbiBvZiBobWFjX21kNSBpbml0aWFsaXNhdGlvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotaG1hY19tZDVfaW5pdF9saW1LX3RvXzY0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQkgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQkvKiBpZiBrZXkgaXMgbG9uZ2VyIHRoYW4gNjQgYnl0ZXMgdHJ1bmNhdGUgaXQgKi8KLQlpZiAoa2V5X2xlbiA+IDY0KQotCQlrZXlfbGVuID0gNjQ7Ci0KLQkvKiBzdGFydCBvdXQgYnkgc3RvcmluZyBrZXkgaW4gcGFkcyAqLwotCW1lbXNldChjdHgtPmtfaXBhZCwgMCwgc2l6ZW9mKGN0eC0+a19pcGFkKSk7Ci0JbWVtc2V0KGN0eC0+a19vcGFkLCAwLCBzaXplb2YoY3R4LT5rX29wYWQpKTsKLQltZW1jcHkoY3R4LT5rX2lwYWQsIGtleSwga2V5X2xlbik7Ci0JbWVtY3B5KGN0eC0+a19vcGFkLCBrZXksIGtleV9sZW4pOwotCi0JLyogWE9SIGtleSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJY3R4LT5rX2lwYWRbaV0gXj0gMHgzNjsKLQkJY3R4LT5rX29wYWRbaV0gXj0gMHg1YzsKLQl9Ci0KLQljaWZzX01ENV9pbml0KCZjdHgtPmN0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHgtPmN0eCwgY3R4LT5rX2lwYWQsIDY0KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdXBkYXRlIGhtYWNfbWQ1ICJpbm5lciIgYnVmZmVyCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWhtYWNfbWQ1X3VwZGF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgdGV4dF9sZW4sCi0JCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4LT5jdHgsIHRleHQsIHRleHRfbGVuKTsJLyogdGhlbiB0ZXh0IG9mIGRhdGFncmFtICovCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIGZpbmlzaCBvZmYgaG1hY19tZDUgImlubmVyIiBidWZmZXIgYW5kIGdlbmVyYXRlIG91dGVyIG9uZS4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotaG1hY19tZDVfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBjdHhfbzsKLQotCWNpZnNfTUQ1X2ZpbmFsKGRpZ2VzdCwgJmN0eC0+Y3R4KTsKLQotCWNpZnNfTUQ1X2luaXQoJmN0eF9vKTsKLQljaWZzX01ENV91cGRhdGUoJmN0eF9vLCBjdHgtPmtfb3BhZCwgNjQpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4X28sIGRpZ2VzdCwgMTYpOwotCWNpZnNfTUQ1X2ZpbmFsKGRpZ2VzdCwgJmN0eF9vKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gc2luZ2xlIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhbiBITUFDIE1ENSBkaWdlc3QgZnJvbSBkYXRhLgotIHVzZSB0aGUgbWljcm9zb2Z0IGhtYWNtZDUgaW5pdCBtZXRob2QgYmVjYXVzZSB0aGUga2V5IGlzIDE2IGJ5dGVzLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIHZvaWQKLWhtYWNfbWQ1KHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCSB1bnNpZ25lZCBjaGFyICpkaWdlc3QpCi17Ci0Jc3RydWN0IEhNQUNNRDVDb250ZXh0IGN0eDsKLQlobWFjX21kNV9pbml0X2xpbUtfdG9fNjQoa2V5LCAxNiwgJmN0eCk7Ci0JaWYgKGRhdGFfbGVuICE9IDApCi0JCWhtYWNfbWQ1X3VwZGF0ZShkYXRhLCBkYXRhX2xlbiwgJmN0eCk7Ci0KLQlobWFjX21kNV9maW5hbChkaWdlc3QsICZjdHgpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNS5oIGIvZnMvY2lmcy9tZDUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiYThjYi4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL21kNS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotI2lmbmRlZiBNRDVfSAotI2RlZmluZSBNRDVfSAotI2lmbmRlZiBIRUFERVJfTUQ1X0gKLS8qIFRyeSB0byBhdm9pZCBjbGFzaGVzIHdpdGggT3BlblNTTCAqLwotI2RlZmluZSBIRUFERVJfTUQ1X0gKLSNlbmRpZgotCi1zdHJ1Y3QgTUQ1Q29udGV4dCB7Ci0JX191MzIgYnVmWzRdOwotCV9fdTMyIGJpdHNbMl07Ci0JdW5zaWduZWQgY2hhciBpbls2NF07Ci19OwotI2VuZGlmCQkJCS8qICFNRDVfSCAqLwotCi0jaWZuZGVmIF9ITUFDX01ENV9ICi1zdHJ1Y3QgSE1BQ01ENUNvbnRleHQgewotCXN0cnVjdCBNRDVDb250ZXh0IGN0eDsKLQl1bnNpZ25lZCBjaGFyIGtfaXBhZFs2NV07Ci0JdW5zaWduZWQgY2hhciBrX29wYWRbNjVdOwotfTsKLSNlbmRpZgkJCQkvKiBfSE1BQ19NRDVfSCAqLwotCi12b2lkIGNpZnNfTUQ1X2luaXQoc3RydWN0IE1ENUNvbnRleHQgKmNvbnRleHQpOwotdm9pZCBjaWZzX01ENV91cGRhdGUoc3RydWN0IE1ENUNvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgY29uc3QgKmJ1ZiwKLQkJCXVuc2lnbmVkIGxlbik7Ci12b2lkIGNpZnNfTUQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgc3RydWN0IE1ENUNvbnRleHQgKmNvbnRleHQpOwotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGNvbWUgZnJvbSBsaWIvaG1hY21kNS5jICAqLwotCi0vKiB2b2lkIGhtYWNfbWQ1X2luaXRfcmZjMjEwNCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlfbGVuLAotCQkJc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpOyovCi12b2lkIGhtYWNfbWQ1X2luaXRfbGltS190b182NChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlfbGVuLAotCQkJc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpOwotdm9pZCBobWFjX21kNV91cGRhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IHRleHRfbGVuLAotCQkJc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpOwotdm9pZCBobWFjX21kNV9maW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsKLS8qIHZvaWQgaG1hY19tZDUodW5zaWduZWQgY2hhciBrZXlbMTZdLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQl1bnNpZ25lZCBjaGFyICpkaWdlc3QpOyovCmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IGEwOWUwNzcuLjJhOTMwYTcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC0yMzYsMTAgKzIzNiw3IEBACiB7CiAJX191MTYgbWlkID0gMDsKIAlfX3UxNiBsYXN0X21pZDsKLQlpbnQgICBjb2xsaXNpb247Ci0KLQlpZiAoc2VydmVyID09IE5VTEwpCi0JCXJldHVybiBtaWQ7CisJYm9vbCBjb2xsaXNpb247CiAKIAlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlsYXN0X21pZCA9IHNlcnZlci0+Q3VycmVudE1pZDsgLyogd2UgZG8gbm90IHdhbnQgdG8gbG9vcCBmb3JldmVyICovCkBAIC0yNTIsMjQgKzI0OSwzOCBAQAogCShhbmQgaXQgd291bGQgYWxzbyBoYXZlIHRvIGhhdmUgYmVlbiBhIHJlcXVlc3QgdGhhdAogCSBkaWQgbm90IHRpbWUgb3V0KSAqLwogCXdoaWxlIChzZXJ2ZXItPkN1cnJlbnRNaWQgIT0gbGFzdF9taWQpIHsKLQkJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCQlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZF9lbnRyeTsKKwkJdW5zaWduZWQgaW50IG51bV9taWRzOwogCi0JCWNvbGxpc2lvbiA9IDA7CisJCWNvbGxpc2lvbiA9IGZhbHNlOwogCQlpZiAoc2VydmVyLT5DdXJyZW50TWlkID09IDApCiAJCQlzZXJ2ZXItPkN1cnJlbnRNaWQrKzsKIAotCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewotCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOwotCi0JCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNlcnZlci0+Q3VycmVudE1pZCkgJiYKLQkJCSAgICAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpKSB7CisJCW51bV9taWRzID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtaWRfZW50cnksICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EsIHFoZWFkKSB7CisJCQkrK251bV9taWRzOworCQkJaWYgKG1pZF9lbnRyeS0+bWlkID09IHNlcnZlci0+Q3VycmVudE1pZCAmJgorCQkJICAgIG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7CiAJCQkJLyogVGhpcyBtaWQgaXMgaW4gdXNlLCB0cnkgYSBkaWZmZXJlbnQgb25lICovCi0JCQkJY29sbGlzaW9uID0gMTsKKwkJCQljb2xsaXNpb24gPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWlmIChjb2xsaXNpb24gPT0gMCkgeworCisJCS8qCisJCSAqIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDMyayBtaWRzIGluIHRoZSBsaXN0LCB0aGVuIHNvbWV0aGluZworCQkgKiBpcyB2ZXJ5IHdyb25nLiBQb3NzaWJseSBhIGxvY2FsIHVzZXIgaXMgdHJ5aW5nIHRvIERvUyB0aGUKKwkJICogYm94IGJ5IGlzc3VpbmcgbG9uZy1ydW5uaW5nIGNhbGxzIGFuZCBTSUdLSUxMJ2luZyB0aGVtLiBJZgorCQkgKiB3ZSBnZXQgdG8gMl4xNiBtaWRzIHRoZW4gd2UncmUgaW4gYmlnIHRyb3VibGUgYXMgdGhpcworCQkgKiBmdW5jdGlvbiBjb3VsZCBsb29wIGZvcmV2ZXIuCisJCSAqCisJCSAqIEdvIGFoZWFkIGFuZCBhc3NpZ24gb3V0IHRoZSBtaWQgaW4gdGhpcyBzaXR1YXRpb24sIGJ1dCBmb3JjZQorCQkgKiBhbiBldmVudHVhbCByZWNvbm5lY3QgdG8gY2xlYW4gb3V0IHRoZSBwZW5kaW5nX21pZF9xLgorCQkgKi8KKwkJaWYgKG51bV9taWRzID4gMzI3NjgpCisJCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNOZWVkUmVjb25uZWN0OworCisJCWlmICghY29sbGlzaW9uKSB7CiAJCQltaWQgPSBzZXJ2ZXItPkN1cnJlbnRNaWQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMzgxLDI5ICszOTIsMzEgQEAKIH0KIAogc3RhdGljIGludAotY2hlY2tTTUJoZHIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkKQorY2hlY2tfc21iX2hkcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBfX3UxNiBtaWQpCiB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgdGhpcyByZWFsbHkgaXMgYW4gU01CLCB0aGF0IGl0IGlzIGEgcmVzcG9uc2UsCi0JICAgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaWRzIG1hdGNoICovCi0JaWYgKCgqKF9fbGUzMiAqKSBzbWItPlByb3RvY29sID09IGNwdV90b19sZTMyKDB4NDI0ZDUzZmYpKSAmJgotCQkobWlkID09IHNtYi0+TWlkKSkgewotCQlpZiAoc21iLT5GbGFncyAmIFNNQkZMR19SRVNQT05TRSkKLQkJCXJldHVybiAwOwotCQllbHNlIHsKLQkJLyogb25seSBvbmUgdmFsaWQgY2FzZSB3aGVyZSBzZXJ2ZXIgc2VuZHMgdXMgcmVxdWVzdCAqLwotCQkJaWYgKHNtYi0+Q29tbWFuZCA9PSBTTUJfQ09NX0xPQ0tJTkdfQU5EWCkKLQkJCQlyZXR1cm4gMDsKLQkJCWVsc2UKLQkJCQljRVJST1IoMSwgIlJlY2VpdmVkIFJlcXVlc3Qgbm90IHJlc3BvbnNlIik7Ci0JCX0KLQl9IGVsc2UgeyAvKiBiYWQgc2lnbmF0dXJlIG9yIG1pZCAqLwotCQlpZiAoKihfX2xlMzIgKikgc21iLT5Qcm90b2NvbCAhPSBjcHVfdG9fbGUzMigweDQyNGQ1M2ZmKSkKLQkJCWNFUlJPUigxLCAiQmFkIHByb3RvY29sIHN0cmluZyBzaWduYXR1cmUgaGVhZGVyICV4IiwKLQkJCQkqKHVuc2lnbmVkIGludCAqKSBzbWItPlByb3RvY29sKTsKLQkJaWYgKG1pZCAhPSBzbWItPk1pZCkKLQkJCWNFUlJPUigxLCAiTWlkcyBkbyBub3QgbWF0Y2giKTsKKwkvKiBkb2VzIGl0IGhhdmUgdGhlIHJpZ2h0IFNNQiAic2lnbmF0dXJlIiA/ICovCisJaWYgKCooX19sZTMyICopIHNtYi0+UHJvdG9jb2wgIT0gY3B1X3RvX2xlMzIoMHg0MjRkNTNmZikpIHsKKwkJY0VSUk9SKDEsICJCYWQgcHJvdG9jb2wgc3RyaW5nIHNpZ25hdHVyZSBoZWFkZXIgMHgleCIsCisJCQkqKHVuc2lnbmVkIGludCAqKXNtYi0+UHJvdG9jb2wpOworCQlyZXR1cm4gMTsKIAl9Ci0JY0VSUk9SKDEsICJiYWQgc21iIGRldGVjdGVkLiBUaGUgTWlkPSVkIiwgc21iLT5NaWQpOworCisJLyogTWFrZSBzdXJlIHRoYXQgbWVzc2FnZSBpZHMgbWF0Y2ggKi8KKwlpZiAobWlkICE9IHNtYi0+TWlkKSB7CisJCWNFUlJPUigxLCAiTWlkcyBkbyBub3QgbWF0Y2guIHJlY2VpdmVkPSV1IGV4cGVjdGVkPSV1IiwKKwkJCXNtYi0+TWlkLCBtaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBpZiBpdCdzIGEgcmVzcG9uc2UgdGhlbiBhY2NlcHQgKi8KKwlpZiAoc21iLT5GbGFncyAmIFNNQkZMR19SRVNQT05TRSkKKwkJcmV0dXJuIDA7CisKKwkvKiBvbmx5IG9uZSB2YWxpZCBjYXNlIHdoZXJlIHNlcnZlciBzZW5kcyB1cyByZXF1ZXN0ICovCisJaWYgKHNtYi0+Q29tbWFuZCA9PSBTTUJfQ09NX0xPQ0tJTkdfQU5EWCkKKwkJcmV0dXJuIDA7CisKKwljRVJST1IoMSwgIlNlcnZlciBzZW50IHJlcXVlc3QsIG5vdCByZXNwb25zZS4gbWlkPSV1Iiwgc21iLT5NaWQpOwogCXJldHVybiAxOwogfQogCkBAIC00NDgsNyArNDYxLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGNoZWNrU01CaGRyKHNtYiwgbWlkKSkKKwlpZiAoY2hlY2tfc21iX2hkcihzbWIsIG1pZCkpCiAJCXJldHVybiAxOwogCWNsY19sZW4gPSBzbWJDYWxjU2l6ZV9MRShzbWIpOwogCkBAIC00NjUsMjUgKzQ3OCwyNiBAQAogCQkJaWYgKCgoNCArIGxlbikgJiAweEZGRkYpID09IChjbGNfbGVuICYgMHhGRkZGKSkKIAkJCQlyZXR1cm4gMDsgLyogYmNjIHdyYXBwZWQgKi8KIAkJfQotCQljRllJKDEsICJDYWxjdWxhdGVkIHNpemUgJWQgdnMgbGVuZ3RoICVkIG1pc21hdGNoIGZvciBtaWQgJWQiLAorCQljRllJKDEsICJDYWxjdWxhdGVkIHNpemUgJXUgdnMgbGVuZ3RoICV1IG1pc21hdGNoIGZvciBtaWQ9JXUiLAogCQkJCWNsY19sZW4sIDQgKyBsZW4sIHNtYi0+TWlkKTsKLQkJLyogV2luZG93cyBYUCBjYW4gcmV0dXJuIGEgZmV3IGJ5dGVzIHRvbyBtdWNoLCBwcmVzdW1hYmx5Ci0JCWFuIGlsbGVnYWwgcGFkLCBhdCB0aGUgZW5kIG9mIGJ5dGUgcmFuZ2UgbG9jayByZXNwb25zZXMKLQkJc28gd2UgYWxsb3cgZm9yIHRoYXQgdGhyZWUgYnl0ZSBwYWQsIGFzIGxvbmcgYXMgYWN0dWFsCi0JCXJlY2VpdmVkIGxlbmd0aCBpcyBhcyBsb25nIG9yIGxvbmdlciB0aGFuIGNhbGN1bGF0ZWQgbGVuZ3RoICovCi0JCS8qIFdlIGhhdmUgbm93IGhhZCB0byBleHRlbmQgdGhpcyBtb3JlLCBzaW5jZSB0aGVyZSBpcyBhCi0JCWNhc2UgaW4gd2hpY2ggaXQgbmVlZHMgdG8gYmUgYmlnZ2VyIHN0aWxsIHRvIGhhbmRsZSBhCi0JCW1hbGZvcm1lZCByZXNwb25zZSB0byB0cmFuc2FjdDIgZmluZGZpcnN0IGZyb20gV2luWFAgd2hlbgotCQlhY2Nlc3MgZGVuaWVkIGlzIHJldHVybmVkIGFuZCB0aHVzIGJjYyBhbmQgd2N0IGFyZSB6ZXJvCi0JCWJ1dCBzZXJ2ZXIgc2F5cyBsZW5ndGggaXMgMHgyMSBieXRlcyB0b28gbG9uZyBhcyBpZiB0aGUgc2VydmVyCi0JCWZvcmdldCB0byByZXNldCB0aGUgc21iIHJmYzEwMDEgbGVuZ3RoIHdoZW4gaXQgcmVzZXQgdGhlCi0JCXdjdCBhbmQgYmNjIHRvIG1pbmltdW0gc2l6ZSBhbmQgZHJvcCB0aGUgdDIgcGFybXMgYW5kIGRhdGEgKi8KLQkJaWYgKCg0K2xlbiA+IGNsY19sZW4pICYmIChsZW4gPD0gY2xjX2xlbiArIDUxMikpCi0JCQlyZXR1cm4gMDsKLQkJZWxzZSB7Ci0JCQljRVJST1IoMSwgIlJGQzEwMDEgc2l6ZSAlZCBiaWdnZXIgdGhhbiBTTUIgZm9yIE1pZD0lZCIsCisKKwkJaWYgKDQgKyBsZW4gPCBjbGNfbGVuKSB7CisJCQljRVJST1IoMSwgIlJGQzEwMDEgc2l6ZSAldSBzbWFsbGVyIHRoYW4gU01CIGZvciBtaWQ9JXUiLAogCQkJCQlsZW4sIHNtYi0+TWlkKTsKIAkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGxlbiA+IGNsY19sZW4gKyA1MTIpIHsKKwkJCS8qCisJCQkgKiBTb21lIHNlcnZlcnMgKFdpbmRvd3MgWFAgaW4gcGFydGljdWxhcikgc2VuZCBtb3JlCisJCQkgKiBkYXRhIHRoYW4gdGhlIGxlbmd0aHMgaW4gdGhlIFNNQiBwYWNrZXQgd291bGQKKwkJCSAqIGluZGljYXRlIG9uIGNlcnRhaW4gY2FsbHMgKGJ5dGUgcmFuZ2UgbG9ja3MgYW5kCisJCQkgKiB0cmFuczIgZmluZCBmaXJzdCBjYWxscyBpbiBwYXJ0aWN1bGFyKS4gV2hpbGUgdGhlCisJCQkgKiBjbGllbnQgY2FuIGhhbmRsZSBzdWNoIGEgZnJhbWUgYnkgaWdub3JpbmcgdGhlCisJCQkgKiB0cmFpbGluZyBkYXRhLCB3ZSBjaG9vc2UgbGltaXQgdGhlIGFtb3VudCBvZiBleHRyYQorCQkJICogZGF0YSB0byA1MTIgYnl0ZXMuCisJCQkgKi8KKwkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICV1IG1vcmUgdGhhbiA1MTIgYnl0ZXMgbGFyZ2VyICIKKwkJCQkgICJ0aGFuIFNNQiBmb3IgbWlkPSV1IiwgbGVuLCBzbWItPk1pZCk7CisJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggN2YyNWNjMy4uZjhlNGNkMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTc2NCw3ICs3NjQsNiBAQAogewogCWludCByYyA9IDA7CiAJaW50IHhpZCwgaTsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNGaWxlID0gTlVMTDsKIAljaGFyICpjdXJyZW50X2VudHJ5OwpAQCAtNzc1LDggKzc3NCw2IEBACiAKIAl4aWQgPSBHZXRYaWQoKTsKIAotCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwotCiAJLyoKIAkgKiBFbnN1cmUgRmluZEZpcnN0IGRvZXNuJ3QgZmFpbCBiZWZvcmUgZG9pbmcgZmlsbGRpcigpIGZvciAnLicgYW5kCiAJICogJy4uJy4gT3RoZXJ3aXNlIHdlIHdvbid0IGJlIGFibGUgdG8gbm90aWZ5IFZGUyBpbiBjYXNlIG9mIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmRlcy5jIGIvZnMvY2lmcy9zbWJkZXMuYwppbmRleCBiNmI2ZGNiLi4wNDcyMTQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmRlcy5jCisrKyBiL2ZzL2NpZnMvc21iZGVzLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICAgIHVwIHdpdGggYSBkaWZmZXJlbnQgYW5zd2VyIHRvIHRoZSBvbmUgYWJvdmUpCiAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgogI2RlZmluZSB1Y2hhciB1bnNpZ25lZCBjaGFyCiAKIHN0YXRpYyB1Y2hhciBwZXJtMVs1Nl0gPSB7IDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmVuY3J5cHQuYyBiL2ZzL2NpZnMvc21iZW5jcnlwdC5jCmluZGV4IDE5MmVhNTEuLmI1MDQxYzggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvc21iZW5jcnlwdC5jCkBAIC0zMiw5ICszMiw4IEBACiAjaW5jbHVkZSAiY2lmc191bmljb2RlLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCi0jaW5jbHVkZSAibWQ1LmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgImNpZnNlbmNyeXB0LmgiCisjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAKICNpZm5kZWYgZmFsc2UKICNkZWZpbmUgZmFsc2UgMApAQCAtNDgsMTQgKzQ3LDU4IEBACiAjZGVmaW5lIFNTVkFMWChidWYscG9zLHZhbCkgKENWQUwoYnVmLHBvcyk9KHZhbCkmMHhGRixDVkFMKGJ1Zixwb3MrMSk9KHZhbCk+PjgpCiAjZGVmaW5lIFNTVkFMKGJ1Zixwb3MsdmFsKSBTU1ZBTFgoKGJ1ZiksKHBvcyksKChfX3UxNikodmFsKSkpCiAKLS8qVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBjb21lIGZyb20gIGxpYnNtYi9zbWJlbmNyeXB0LmMgICovCisvKiBwcm9kdWNlIGEgbWQ0IG1lc3NhZ2UgZGlnZXN0IGZyb20gZGF0YSBvZiBsZW5ndGggbiBieXRlcyAqLworaW50CittZGZvdXIodW5zaWduZWQgY2hhciAqbWQ0X2hhc2gsIHVuc2lnbmVkIGNoYXIgKmxpbmtfc3RyLCBpbnQgbGlua19sZW4pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKm1kNDsKKwlzdHJ1Y3Qgc2Rlc2MgKnNkZXNjbWQ0OwogCi12b2lkIFNNQmVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJdW5zaWduZWQgY2hhciAqcDI0KTsKLXZvaWQgRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLXN0YXRpYyB2b2lkIFNNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJICAgdW5zaWduZWQgY2hhciBwMjRbMjRdKTsKLXZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCk7CisJbWQ0ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDQiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKG1kNCkpIHsKKwkJcmMgPSBQVFJfRVJSKG1kNCk7CisJCWNFUlJPUigxLCAiJXM6IENyeXB0byBtZDQgYWxsb2NhdGlvbiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBzaGFzaF9kZXNjKSArIGNyeXB0b19zaGFzaF9kZXNjc2l6ZShtZDQpOworCXNkZXNjbWQ0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXNjbWQ0KSB7CisJCXJjID0gLUVOT01FTTsKKwkJY0VSUk9SKDEsICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19mdW5jX18pOworCQlnb3RvIG1kZm91cl9lcnI7CisJfQorCXNkZXNjbWQ0LT5zaGFzaC50Zm0gPSBtZDQ7CisJc2Rlc2NtZDQtPnNoYXNoLmZsYWdzID0gMHgwOworCisJcmMgPSBjcnlwdG9fc2hhc2hfaW5pdCgmc2Rlc2NtZDQtPnNoYXNoKTsKKwlpZiAocmMpIHsKKwkJY0VSUk9SKDEsICIlczogQ291bGQgbm90IGluaXQgbWQ0IHNoYXNoXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gbWRmb3VyX2VycjsKKwl9CisJY3J5cHRvX3NoYXNoX3VwZGF0ZSgmc2Rlc2NtZDQtPnNoYXNoLCBsaW5rX3N0ciwgbGlua19sZW4pOworCXJjID0gY3J5cHRvX3NoYXNoX2ZpbmFsKCZzZGVzY21kNC0+c2hhc2gsIG1kNF9oYXNoKTsKKworbWRmb3VyX2VycjoKKwljcnlwdG9fZnJlZV9zaGFzaChtZDQpOworCWtmcmVlKHNkZXNjbWQ0KTsKKworCXJldHVybiByYzsKK30KKworLyogRG9lcyB0aGUgZGVzIGVuY3J5cHRpb24gZnJvbSB0aGUgTlQgb3IgTE0gTUQ0IGhhc2guICovCitzdGF0aWMgdm9pZAorU01CT1dGZW5jcnlwdCh1bnNpZ25lZCBjaGFyIHBhc3N3ZFsxNl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorCSAgICAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSkKK3sKKwl1bnNpZ25lZCBjaGFyIHAyMVsyMV07CisKKwltZW1zZXQocDIxLCAnXDAnLCAyMSk7CisKKwltZW1jcHkocDIxLCBwYXNzd2QsIDE2KTsKKwlFX1AyNChwMjEsIGM4LCBwMjQpOworfQogCiAvKgogICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBYL09wZW4gU01CIHBhc3N3b3JkIGVuY3J5cHRpb24KQEAgLTExOCw5ICsxNjEsMTAgQEAKICAqIENyZWF0ZXMgdGhlIE1ENCBIYXNoIG9mIHRoZSB1c2VycyBwYXNzd29yZCBpbiBOVCBVTklDT0RFLgogICovCiAKLXZvaWQKK2ludAogRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KQogeworCWludCByYzsKIAlpbnQgbGVuOwogCV9fdTE2IHdwd2RbMTI5XTsKIApAQCAtMTM5LDggKzE4MywxMCBAQAogCS8qIENhbGN1bGF0ZSBsZW5ndGggaW4gYnl0ZXMgKi8KIAlsZW4gPSBfbXlfd2NzbGVuKHdwd2QpICogc2l6ZW9mKF9fdTE2KTsKIAotCW1kZm91cihwMTYsICh1bnNpZ25lZCBjaGFyICopIHdwd2QsIGxlbik7CisJcmMgPSBtZGZvdXIocDE2LCAodW5zaWduZWQgY2hhciAqKSB3cHdkLCBsZW4pOwogCW1lbXNldCh3cHdkLCAwLCAxMjkgKiAyKTsKKworCXJldHVybiByYzsKIH0KIAogI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwpAQCAtMjEyLDE5ICsyNTgsNiBAQAogfQogI2VuZGlmCiAKLS8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLwotc3RhdGljIHZvaWQKLVNNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkgICAgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pCi17Ci0JdW5zaWduZWQgY2hhciBwMjFbMjFdOwotCi0JbWVtc2V0KHAyMSwgJ1wwJywgMjEpOwotCi0JbWVtY3B5KHAyMSwgcGFzc3dkLCAxNik7Ci0JRV9QMjQocDIxLCBjOCwgcDI0KTsKLX0KLQogLyogRG9lcyB0aGUgZGVzIGVuY3J5cHRpb24gZnJvbSB0aGUgRklSU1QgOCBCWVRFUyBvZiB0aGUgTlQgb3IgTE0gTUQ0IGhhc2guICovCiAjaWYgMCAvKiBjdXJyZW50bHkgdW51c2VkICovCiBzdGF0aWMgdm9pZApAQCAtMjQyLDE2ICsyNzUsMjEgQEAKICNlbmRpZgogCiAvKiBEb2VzIHRoZSBOVCBNRDQgaGFzaCB0aGVuIGRlcyBlbmNyeXB0aW9uLiAqLwotCi12b2lkCitpbnQKIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpCiB7CisJaW50IHJjOwogCXVuc2lnbmVkIGNoYXIgcDIxWzIxXTsKIAogCW1lbXNldChwMjEsICdcMCcsIDIxKTsKIAotCUVfbWQ0aGFzaChwYXNzd2QsIHAyMSk7CisJcmMgPSBFX21kNGhhc2gocGFzc3dkLCBwMjEpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVCBoYXNoLCBlcnJvcjogJWQiLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCVNNQk9XRmVuY3J5cHQocDIxLCBjOCwgcDI0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggYzFjY2NhMS4uNDZkODc1NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy90cmFuc3BvcnQuYworKysgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCkBAIC0yMzYsOSArMjM2LDkgQEAKIAkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZFJlY29ubmVjdDsKIAl9CiAKLQlpZiAocmMgPCAwKSB7CisJaWYgKHJjIDwgMCAmJiByYyAhPSAtRUlOVFIpCiAJCWNFUlJPUigxLCAiRXJyb3IgJWQgc2VuZGluZyBkYXRhIG9uIHNvY2tldCB0byBzZXJ2ZXIiLCByYyk7Ci0JfSBlbHNlCisJZWxzZQogCQlyYyA9IDA7CiAKIAkvKiBEb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgYnVmZmVyIGFzIGEKQEAgLTM1OSw2ICszNTksMTAgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCS8qIGVuYWJsZSBzaWduaW5nIGlmIHNlcnZlciByZXF1aXJlcyBpdCAqLworCWlmIChzZXJ2ZXItPnNlY01vZGUgJiAoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQorCQlpbl9idWYtPkZsYWdzMiB8PSBTTUJGTEcyX1NFQ1VSSVRZX1NJR05BVFVSRTsKKwogCW11dGV4X2xvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAltaWQgPSBBbGxvY01pZFFFbnRyeShpbl9idWYsIHNlcnZlcik7CiAJaWYgKG1pZCA9PSBOVUxMKSB7CkBAIC00NTMsNiArNDU3LDkgQEAKIAljYXNlIE1JRF9SRVRSWV9ORUVERUQ6CiAJCXJjID0gLUVBR0FJTjsKIAkJYnJlYWs7CisJY2FzZSBNSURfUkVTUE9OU0VfTUFMRk9STUVEOgorCQlyYyA9IC1FSU87CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNFUlJPUigxLCAiJXM6IGludmFsaWQgbWlkIHN0YXRlIG1pZD0lZCBzdGF0ZT0lZCIsIF9fZnVuY19fLAogCQkJbWlkLT5taWQsIG1pZC0+bWlkU3RhdGUpOwpAQCAtNTcwLDE3ICs1NzcsMzMgQEAKICNlbmRpZgogCiAJbXV0ZXhfdW5sb2NrKCZzZXMtPnNlcnZlci0+c3J2X211dGV4KTsKLQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAKLQlpZiAocmMgPCAwKQorCWlmIChyYyA8IDApIHsKKwkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAobG9uZ19vcCA9PSBDSUZTX0FTWU5DX09QKQorCWlmIChsb25nX29wID09IENJRlNfQVNZTkNfT1ApIHsKKwkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCQlnb3RvIG91dDsKKwl9CiAKIAlyYyA9IHdhaXRfZm9yX3Jlc3BvbnNlKHNlcy0+c2VydmVyLCBtaWRRKTsKLQlpZiAocmMgIT0gMCkKLQkJZ290byBvdXQ7CisJaWYgKHJjICE9IDApIHsKKwkJc2VuZF9udF9jYW5jZWwoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgbWlkUSk7CisJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQlpZiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7CisJCQltaWRRLT5jYWxsYmFjayA9IERlbGV0ZU1pZFFFbnRyeTsKKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CisJCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOworCQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwl9CisKKwljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAKIAlyYyA9IHN5bmNfbWlkX3Jlc3VsdChtaWRRLCBzZXMtPnNlcnZlcik7CiAJaWYgKHJjICE9IDApIHsKQEAgLTcyNCw4ICs3NDcsMTkgQEAKIAkJZ290byBvdXQ7CiAKIAlyYyA9IHdhaXRfZm9yX3Jlc3BvbnNlKHNlcy0+c2VydmVyLCBtaWRRKTsKLQlpZiAocmMgIT0gMCkKLQkJZ290byBvdXQ7CisJaWYgKHJjICE9IDApIHsKKwkJc2VuZF9udF9jYW5jZWwoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgbWlkUSk7CisJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQlpZiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7CisJCQkvKiBubyBsb25nZXIgY29uc2lkZXJlZCB0byBiZSAiaW4tZmxpZ2h0IiAqLworCQkJbWlkUS0+Y2FsbGJhY2sgPSBEZWxldGVNaWRRRW50cnk7CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsKKwkJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOworCQkJcmV0dXJuIHJjOworCQl9CisJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJfQogCiAJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOwogCWlmIChyYyAhPSAwKSB7CkBAIC05MjIsMTAgKzk1NiwyMSBAQAogCQkJfQogCQl9CiAKLQkJaWYgKHdhaXRfZm9yX3Jlc3BvbnNlKHNlcy0+c2VydmVyLCBtaWRRKSA9PSAwKSB7Ci0JCQkvKiBXZSBnb3QgdGhlIHJlc3BvbnNlIC0gcmVzdGFydCBzeXN0ZW0gY2FsbC4gKi8KLQkJCXJzdGFydCA9IDE7CisJCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOworCQlpZiAocmMpIHsKKwkJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQlpZiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7CisJCQkJLyogbm8gbG9uZ2VyIGNvbnNpZGVyZWQgdG8gYmUgImluLWZsaWdodCIgKi8KKwkJCQltaWRRLT5jYWxsYmFjayA9IERlbGV0ZU1pZFFFbnRyeTsKKwkJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJCXJldHVybiByYzsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCX0KKworCQkvKiBXZSBnb3QgdGhlIHJlc3BvbnNlIC0gcmVzdGFydCBzeXN0ZW0gY2FsbC4gKi8KKwkJcnN0YXJ0ID0gMTsKIAl9CiAKIAlyYyA9IHN5bmNfbWlkX3Jlc3VsdChtaWRRLCBzZXMtPnNlcnZlcik7CmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDlmNDkzZWUuLjJhNmJkOWEgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xNzYsNiArMTc2LDcgQEAKIAogLyoqCiAgKiBkZW50cnlfcmN1d2Fsa19iYXJyaWVyIC0gaW52YWxpZGF0ZSBpbi1wcm9ncmVzcyByY3Utd2FsayBsb29rdXBzCisgKiBAZGVudHJ5OiB0aGUgdGFyZ2V0IGRlbnRyeQogICogQWZ0ZXIgdGhpcyBjYWxsLCBpbi1wcm9ncmVzcyByY3Utd2FsayBwYXRoIGxvb2t1cCB3aWxsIGZhaWwuIFRoaXMKICAqIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdW5oYXNoaW5nLCBhbmQgYWZ0ZXIgY2hhbmdpbmcgZF9pbm9kZSAoaWYKICAqIHRoZSBkZW50cnkgaGFzIG5vdCBhbHJlYWR5IGJlZW4gdW5oYXNoZWQpLgpAQCAtMjgxLDYgKzI4Miw3IEBACiAvKioKICAqIGRfa2lsbCAtIGtpbGwgZGVudHJ5IGFuZCByZXR1cm4gcGFyZW50CiAgKiBAZGVudHJ5OiBkZW50cnkgdG8ga2lsbAorICogQHBhcmVudDogcGFyZW50IGRlbnRyeQogICoKICAqIFRoZSBkZW50cnkgbXVzdCBhbHJlYWR5IGJlIHVuaGFzaGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIExSVS4KICAqCkBAIC0xOTczLDcgKzE5NzUsNyBAQAogLyoqCiAgKiBkX3ZhbGlkYXRlIC0gdmVyaWZ5IGRlbnRyeSBwcm92aWRlZCBmcm9tIGluc2VjdXJlIHNvdXJjZSAoZGVwcmVjYXRlZCkKICAqIEBkZW50cnk6IFRoZSBkZW50cnkgYWxsZWdlZCB0byBiZSB2YWxpZCBjaGlsZCBvZiBAZHBhcmVudAotICogQHBhcmVudDogVGhlIHBhcmVudCBkZW50cnkgKGtub3duIHRvIGJlIHZhbGlkKQorICogQGRwYXJlbnQ6IFRoZSBwYXJlbnQgZGVudHJ5IChrbm93biB0byBiZSB2YWxpZCkKICAqCiAgKiBBbiBpbnNlY3VyZSBzb3VyY2UgaGFzIHNlbnQgdXMgYSBkZW50cnksIGhlcmUgd2UgdmVyaWZ5IGl0IGFuZCBkZ2V0KCkgaXQuCiAgKiBUaGlzIGlzIHVzZWQgYnkgbmNwZnMgaW4gaXRzIHJlYWRkaXIgaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9mcy9kbG0vbG93Y29tbXMuYyBiL2ZzL2RsbS9sb3djb21tcy5jCmluZGV4IDljNjRhZTkuLjJkOGM4N2IgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb3djb21tcy5jCisrKyBiL2ZzL2RsbS9sb3djb21tcy5jCkBAIC0xNDY4LDE1ICsxNDY4LDEzIEBACiAKIHN0YXRpYyBpbnQgd29ya19zdGFydCh2b2lkKQogewotCXJlY3Zfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fcmVjdiIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkVBQkxFLCAwKTsKKwlyZWN2X3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkbG1fcmVjdiIpOwogCWlmICghcmVjdl93b3JrcXVldWUpIHsKIAkJbG9nX3ByaW50KCJjYW4ndCBzdGFydCBkbG1fcmVjdiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzZW5kX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGxtX3NlbmQiLCBXUV9NRU1fUkVDTEFJTSB8Ci0JCQkJCSBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJc2VuZF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZGxtX3NlbmQiKTsKIAlpZiAoIXNlbmRfd29ya3F1ZXVlKSB7CiAJCWxvZ19wcmludCgiY2FuJ3Qgc3RhcnQgZGxtX3NlbmQiKTsKIAkJZGVzdHJveV93b3JrcXVldWUocmVjdl93b3JrcXVldWUpOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCBjYzhhOWI3Li4yNjdkMGFkIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMTExNCw2ICsxMTE0LDE3IEBACiAJcmV0dXJuIGVwX3NjYW5fcmVhZHlfbGlzdChlcCwgZXBfc2VuZF9ldmVudHNfcHJvYywgJmVzZWQpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW1lc3BlYyBlcF9zZXRfbXN0aW1lb3V0KGxvbmcgbXMpCit7CisJc3RydWN0IHRpbWVzcGVjIG5vdywgdHMgPSB7CisJCS50dl9zZWMgPSBtcyAvIE1TRUNfUEVSX1NFQywKKwkJLnR2X25zZWMgPSBOU0VDX1BFUl9NU0VDICogKG1zICUgTVNFQ19QRVJfU0VDKSwKKwl9OworCisJa3RpbWVfZ2V0X3RzKCZub3cpOworCXJldHVybiB0aW1lc3BlY19hZGRfc2FmZShub3csIHRzKTsKK30KKwogc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAJCSAgIGludCBtYXhldmVudHMsIGxvbmcgdGltZW91dCkKIHsKQEAgLTExMjEsMTIgKzExMzIsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgc2xhY2s7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7Ci0Jc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lOwogCWt0aW1lX3QgZXhwaXJlcywgKnRvID0gTlVMTDsKIAogCWlmICh0aW1lb3V0ID4gMCkgewotCQlrdGltZV9nZXRfdHMoJmVuZF90aW1lKTsKLQkJdGltZXNwZWNfYWRkX25zKCZlbmRfdGltZSwgKHU2NCl0aW1lb3V0ICogTlNFQ19QRVJfTVNFQyk7CisJCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZSA9IGVwX3NldF9tc3RpbWVvdXQodGltZW91dCk7CisKIAkJc2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3koJmVuZF90aW1lKTsKIAkJdG8gPSAmZXhwaXJlczsKIAkJKnRvID0gdGltZXNwZWNfdG9fa3RpbWUoZW5kX3RpbWUpOwpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM2MmVmY2IuLjUyYTQ0N2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQlnb3RvIG91dDsKIAogCWZpbGUgPSBkb19maWxwX29wZW4oQVRfRkRDV0QsIHRtcCwKLQkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgRk1PREVfRVhFQywgMCwKKwkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgX19GTU9ERV9FWEVDLCAwLAogCQkJCU1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJcHV0bmFtZSh0bXApOwogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKQEAgLTcyMyw3ICs3MjMsNyBAQAogCWludCBlcnI7CiAKIAlmaWxlID0gZG9fZmlscF9vcGVuKEFUX0ZEQ1dELCBuYW1lLAotCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBGTU9ERV9FWEVDLCAwLAorCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBfX0ZNT0RFX0VYRUMsIDAsCiAJCQkJTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9pbm9kZS5jIGIvZnMvZXhvZnMvaW5vZGUuYwppbmRleCA0MjY4NTQyLi5hNzU1NTIzIDEwMDY0NAotLS0gYS9mcy9leG9mcy9pbm9kZS5jCisrKyBiL2ZzL2V4b2ZzL2lub2RlLmMKQEAgLTEwMzAsNyArMTAzMCw2IEBACiAJCW1lbWNweShvaS0+aV9kYXRhLCBmY2IuaV9kYXRhLCBzaXplb2YoZmNiLmlfZGF0YSkpOwogCX0KIAotCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzYi0+c19iZGk7CiAJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmZXhvZnNfZmlsZV9vcGVyYXRpb25zOwpAQCAtMTEzMSw3ICsxMTMwLDYgQEAKIAogCXNiaSA9IHNiLT5zX2ZzX2luZm87CiAKLQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gc2ItPnNfYmRpOwogCXNiLT5zX2RpcnQgPSAxOwogCWlub2RlX2luaXRfb3duZXIoaW5vZGUsIGRpciwgbW9kZSk7CiAJaW5vZGUtPmlfaW5vID0gc2JpLT5zX25leHRpZCsrOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCAwYzhkOTdiLi4zYWEwYjcyIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtODQ4LDYgKzg0OCw3IEBACiAJYXRvbWljX3QgaV9pb2VuZF9jb3VudDsJLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIGlvX2VuZCBzdHJ1Y3RzICovCiAJLyogY3VycmVudCBpb19lbmQgc3RydWN0dXJlIGZvciBhc3luYyBESU8gd3JpdGUqLwogCWV4dDRfaW9fZW5kX3QgKmN1cl9haW9fZGlvOworCWF0b21pY190IGlfYWlvZGlvX3Vud3JpdHRlbjsgLyogTnIuIG9mIGluZmxpZ2h0IGNvbnZlcnNpb25zIHBlbmRpbmcgKi8KIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOwogCkBAIC0yMTE5LDYgKzIxMjAsMTUgQEAKIAogI2RlZmluZSBpbl9yYW5nZShiLCBmaXJzdCwgbGVuKQkoKGIpID49IChmaXJzdCkgJiYgKGIpIDw9IChmaXJzdCkgKyAobGVuKSAtIDEpCiAKKy8qIEZvciBpb2VuZCAmIGFpbyB1bndyaXR0ZW4gY29udmVyc2lvbiB3YWl0IHF1ZXVlcyAqLworI2RlZmluZSBFWFQ0X1dRX0hBU0hfU1oJCTM3CisjZGVmaW5lIGV4dDRfaW9lbmRfd3EodikgICAoJmV4dDRfX2lvZW5kX3dxWygodW5zaWduZWQgbG9uZykodikpICVcCisJCQkJCSAgICBFWFQ0X1dRX0hBU0hfU1pdKQorI2RlZmluZSBleHQ0X2Fpb19tdXRleCh2KSAgKCZleHQ0X19haW9fbXV0ZXhbKCh1bnNpZ25lZCBsb25nKSh2KSkgJVwKKwkJCQkJICAgICBFWFQ0X1dRX0hBU0hfU1pdKQorZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGV4dDRfX2lvZW5kX3dxW0VYVDRfV1FfSEFTSF9TWl07CitleHRlcm4gc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0VYVDRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA2M2E3NTgxLi5jY2NlOGE3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMzE3NCw5ICszMTc0LDEwIEBACiAJCSAqIHRoYXQgdGhpcyBJTyBuZWVkcyB0byBjb252ZXJ0aW9uIHRvIHdyaXR0ZW4gd2hlbiBJTyBpcwogCQkgKiBjb21wbGV0ZWQKIAkJICovCi0JCWlmIChpbykKKwkJaWYgKGlvICYmICEoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CiAJCQlpby0+ZmxhZyA9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKLQkJZWxzZQorCQkJYXRvbWljX2luYygmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKTsKKwkJfSBlbHNlCiAJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJaWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkKIAkJCW1hcC0+bV9mbGFncyB8PSBFWFQ0X01BUF9VTklOSVQ7CkBAIC0zNDYzLDkgKzM0NjQsMTAgQEAKIAkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCiAJCSAqLwogCQlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1BSRV9JTykpIHsKLQkJCWlmIChpbykKKwkJCWlmIChpbyAmJiAhKGlvLT5mbGFnICYgRVhUNF9JT19FTkRfVU5XUklUVEVOKSkgewogCQkJCWlvLT5mbGFnID0gRVhUNF9JT19FTkRfVU5XUklUVEVOOwotCQkJZWxzZQorCQkJCWF0b21pY19pbmMoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbik7CisJCQl9IGVsc2UKIAkJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwKIAkJCQkJCSAgICAgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCAyZTgzMjJjLi43YjgwZDU0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNTUsMTEgKzU1LDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfYWlvZGlvX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSBleHQ0X2lvZW5kX3dxKGlub2RlKTsKKworCXdhaXRfZXZlbnQoKndxLCAoYXRvbWljX3JlYWQoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbikgPT0gMCkpOworfQorCisvKgorICogVGhpcyB0ZXN0cyB3aGV0aGVyIHRoZSBJTyBpbiBxdWVzdGlvbiBpcyBibG9jay1hbGlnbmVkIG9yIG5vdC4KKyAqIEV4dDQgdXRpbGl6ZXMgdW53cml0dGVuIGV4dGVudHMgd2hlbiBob2xlLWZpbGxpbmcgZHVyaW5nIGRpcmVjdCBJTywgYW5kIHRoZXkKKyAqIGFyZSBjb252ZXJ0ZWQgdG8gd3JpdHRlbiBvbmx5IGFmdGVyIHRoZSBJTyBpcyBjb21wbGV0ZS4gIFVudGlsIHRoZXkgYXJlCisgKiBtYXBwZWQsIHRoZXNlIGJsb2NrcyBhcHBlYXIgYXMgaG9sZXMsIHNvIGRpb196ZXJvX2Jsb2NrKCkgd2lsbCBhc3N1bWUgdGhhdAorICogaXQgbmVlZHMgdG8gemVybyBvdXQgcG9ydGlvbnMgb2YgdGhlIHN0YXJ0IGFuZC9vciBlbmQgYmxvY2suICBJZiAyIEFJTworICogdGhyZWFkcyBhcmUgYXQgd29yayBvbiB0aGUgc2FtZSB1bndyaXR0ZW4gYmxvY2ssIHRoZXkgbXVzdCBiZSBzeW5jaHJvbml6ZWQKKyAqIG9yIG9uZSB0aHJlYWQgd2lsbCB6ZXJvIHRoZSBvdGhlcidzIGRhdGEsIGNhdXNpbmcgY29ycnVwdGlvbi4KKyAqLworc3RhdGljIGludAorZXh0NF91bmFsaWduZWRfYWlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCBibG9ja21hc2sgPSBzYi0+c19ibG9ja3NpemUgLSAxOworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlsb2ZmX3QgZmluYWxfc2l6ZSA9IHBvcyArIGNvdW50OworCisJaWYgKHBvcyA+PSBpbm9kZS0+aV9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmICgocG9zICYgYmxvY2ttYXNrKSB8fCAoZmluYWxfc2l6ZSAmIGJsb2NrbWFzaykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90CiBleHQ0X2ZpbGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWludCB1bmFsaWduZWRfYWlvID0gMDsKKwlpbnQgcmV0OwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGVuY291bnRlcmVkIGEgYml0bWFwLWZvcm1hdCBmaWxlLCB0aGUgc2l6ZSBsaW1pdApAQCAtNzgsOSArMTE0LDMxIEBACiAJCQlucl9zZWdzID0gaW92X3Nob3J0ZW4oKHN0cnVjdCBpb3ZlYyAqKWlvdiwgbnJfc2VncywKIAkJCQkJICAgICAgc2JpLT5zX2JpdG1hcF9tYXhieXRlcyAtIHBvcyk7CiAJCX0KKwl9IGVsc2UgaWYgKHVubGlrZWx5KChpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpICYmCisJCSAgICFpc19zeW5jX2tpb2NiKGlvY2IpKSkgeworCQl1bmFsaWduZWRfYWlvID0gZXh0NF91bmFsaWduZWRfYWlvKGlub2RlLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiAJfQogCi0JcmV0dXJuIGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCS8qIFVuYWxpZ25lZCBkaXJlY3QgQUlPIG11c3QgYmUgc2VyaWFsaXplZDsgc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwlpZiAodW5hbGlnbmVkX2FpbykgeworCQlzdGF0aWMgdW5zaWduZWQgbG9uZyB1bmFsaWduZWRfd2Fybl90aW1lOworCisJCS8qIFdhcm4gYWJvdXQgdGhpcyBvbmNlIHBlciBkYXkgKi8KKwkJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJnVuYWxpZ25lZF93YXJuX3RpbWUsIDYwKjYwKjI0KkhaKSkKKwkJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX1dBUk5JTkcsCisJCQkJICJVbmFsaWduZWQgQUlPL0RJTyBvbiBpbm9kZSAlbGQgYnkgJXM7ICIKKwkJCQkgInBlcmZvcm1hbmNlIHdpbGwgYmUgcG9vci4iLAorCQkJCSBpbm9kZS0+aV9pbm8sIGN1cnJlbnQtPmNvbW0pOworCQltdXRleF9sb2NrKGV4dDRfYWlvX211dGV4KGlub2RlKSk7CisJCWV4dDRfYWlvZGlvX3dhaXQoaW5vZGUpOworCX0KKworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCisJaWYgKHVuYWxpZ25lZF9haW8pCisJCW11dGV4X3VubG9jayhleHQ0X2Fpb19tdXRleChpbm9kZSkpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBleHQ0X2ZpbGVfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCA4NTFmNDliLi5kMWZlMDlhIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMzQyLDEwICszNDIsMTUgQEAKIC8qIFdlIGNyZWF0ZSBzbGFiIGNhY2hlcyBmb3IgZ3JvdXBpbmZvIGRhdGEgc3RydWN0dXJlcyBiYXNlZCBvbiB0aGUKICAqIHN1cGVyYmxvY2sgYmxvY2sgc2l6ZS4gIFRoZXJlIHdpbGwgYmUgb25lIHBlciBtb3VudGVkIGZpbGVzeXN0ZW0gZm9yCiAgKiBlYWNoIHVuaXF1ZSBzX2Jsb2Nrc2l6ZV9iaXRzICovCi0jZGVmaW5lIE5SX0dSUElORk9fQ0FDSEVTCVwKLQkoRVhUNF9NQVhfQkxPQ0tfTE9HX1NJWkUgLSBFWFQ0X01JTl9CTE9DS19MT0dfU0laRSArIDEpCisjZGVmaW5lIE5SX0dSUElORk9fQ0FDSEVTIDgKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9ncm91cGluZm9fY2FjaGVzW05SX0dSUElORk9fQ0FDSEVTXTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKmV4dDRfZ3JvdXBpbmZvX3NsYWJfbmFtZXNbTlJfR1JQSU5GT19DQUNIRVNdID0geworCSJleHQ0X2dyb3VwaW5mb18xayIsICJleHQ0X2dyb3VwaW5mb18yayIsICJleHQ0X2dyb3VwaW5mb180ayIsCisJImV4dDRfZ3JvdXBpbmZvXzhrIiwgImV4dDRfZ3JvdXBpbmZvXzE2ayIsICJleHQ0X2dyb3VwaW5mb18zMmsiLAorCSJleHQ0X2dyb3VwaW5mb182NGsiLCAiZXh0NF9ncm91cGluZm9fMTI4ayIKK307CisKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7CiBzdGF0aWMgdm9pZCBleHQ0X21iX2dlbmVyYXRlX2Zyb21fZnJlZWxpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYml0bWFwLApAQCAtMjQxNCw2ICsyNDE5LDU1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZ3JvdXBpbmZvX2Rlc3Ryb3lfc2xhYnModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9HUlBJTkZPX0NBQ0hFUzsgaSsrKSB7CisJCWlmIChleHQ0X2dyb3VwaW5mb19jYWNoZXNbaV0pCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldKTsKKwkJZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXh0NF9ncm91cGluZm9fY3JlYXRlX3NsYWIoc2l6ZV90IHNpemUpCit7CisJc3RhdGljIERFRklORV9NVVRFWChleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWludCBzbGFiX3NpemU7CisJaW50IGJsb2Nrc2l6ZV9iaXRzID0gb3JkZXJfYmFzZV8yKHNpemUpOworCWludCBjYWNoZV9pbmRleCA9IGJsb2Nrc2l6ZV9iaXRzIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkU7CisJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKworCWlmIChjYWNoZV9pbmRleCA+PSBOUl9HUlBJTkZPX0NBQ0hFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoY2FjaGVfaW5kZXggPCAwKSkKKwkJY2FjaGVfaW5kZXggPSAwOworCisJbXV0ZXhfbG9jaygmZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKKwlpZiAoZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSkgeworCQltdXRleF91bmxvY2soJmV4dDRfZ3JwaW5mb19zbGFiX2NyZWF0ZV9tdXRleCk7CisJCXJldHVybiAwOwkvKiBBbHJlYWR5IGNyZWF0ZWQgKi8KKwl9CisKKwlzbGFiX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvLAorCQkJCWJiX2NvdW50ZXJzW2Jsb2Nrc2l6ZV9iaXRzICsgMl0pOworCisJY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoZXh0NF9ncm91cGluZm9fc2xhYl9uYW1lc1tjYWNoZV9pbmRleF0sCisJCQkJCXNsYWJfc2l6ZSwgMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlQsCisJCQkJCU5VTEwpOworCisJbXV0ZXhfdW5sb2NrKCZleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWlmICghY2FjaGVwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJFWFQ0OiBubyBtZW1vcnkgZm9yIGdyb3VwaW5mbyBzbGFiIGNhY2hlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSA9IGNhY2hlcDsKKworCXJldHVybiAwOworfQorCiBpbnQgZXh0NF9tYl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuZWVkc19yZWNvdmVyeSkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKQEAgLTI0MjEsOSArMjQ3NSw2IEBACiAJdW5zaWduZWQgb2Zmc2V0OwogCXVuc2lnbmVkIG1heDsKIAlpbnQgcmV0OwotCWludCBjYWNoZV9pbmRleDsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwotCWNoYXIgKm5hbWVwID0gTlVMTDsKIAogCWkgPSAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAyKSAqIHNpemVvZigqc2JpLT5zX21iX29mZnNldHMpOwogCkBAIC0yNDQwLDMwICsyNDkxLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JY2FjaGVfaW5kZXggPSBzYi0+c19ibG9ja3NpemVfYml0cyAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFOwotCWNhY2hlcCA9IGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF07Ci0JaWYgKCFjYWNoZXApIHsKLQkJY2hhciBuYW1lWzMyXTsKLQkJaW50IGxlbiA9IG9mZnNldG9mKHN0cnVjdCBleHQ0X2dyb3VwX2luZm8sCi0JCQkJCWJiX2NvdW50ZXJzW3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMl0pOwotCi0JCXNwcmludGYobmFtZSwgImV4dDRfZ3JvdXBpbmZvXyVkIiwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQluYW1lcCA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZXApIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIE5lZWQgdG8gZnJlZSB0aGUga21lbV9jYWNoZV9uYW1lKCkgd2hlbiB3ZQotCQkgKiBkZXN0cm95IHRoZSBzbGFiICovCi0JCWNhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWVwLCBsZW4sIDAsCi0JCQkJCSAgICAgU0xBQl9SRUNMQUlNX0FDQ09VTlQsIE5VTEwpOwotCQlpZiAoIWNhY2hlcCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF0gPSBjYWNoZXA7Ci0JfQorCXJldCA9IGV4dDRfZ3JvdXBpbmZvX2NyZWF0ZV9zbGFiKHNiLT5zX2Jsb2Nrc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogb3JkZXIgMCBpcyByZWd1bGFyIGJpdG1hcCAqLwogCXNiaS0+c19tYl9tYXhzWzBdID0gc2ItPnNfYmxvY2tzaXplIDw8IDM7CkBAIC0yNTIwLDcgKzI1NTAsNiBAQAogCWlmIChyZXQpIHsKIAkJa2ZyZWUoc2JpLT5zX21iX29mZnNldHMpOwogCQlrZnJlZShzYmktPnNfbWJfbWF4cyk7Ci0JCWtmcmVlKG5hbWVwKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3MzQsNyArMjc2Myw2IEBACiAKIHZvaWQgZXh0NF9leGl0X21iYWxsb2Modm9pZCkKIHsKLQlpbnQgaTsKIAkvKgogCSAqIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzIG9uIGV4dDRfcHNwYWNlX2NhY2hlcAogCSAqIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBzbGFiIGNhY2hlLgpAQCAtMjc0MywxNSArMjc3MSw3IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9mcmVlX2V4dF9jYWNoZXApOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0dSUElORk9fQ0FDSEVTOyBpKyspIHsKLQkJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tpXTsKLQkJaWYgKGNhY2hlcCkgewotCQkJY2hhciAqbmFtZSA9IChjaGFyICopa21lbV9jYWNoZV9uYW1lKGNhY2hlcCk7Ci0JCQlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVwKTsKLQkJCWtmcmVlKG5hbWUpOwotCQl9Ci0JfQorCWV4dDRfZ3JvdXBpbmZvX2Rlc3Ryb3lfc2xhYnMoKTsKIAlleHQ0X3JlbW92ZV9kZWJ1Z2ZzX2VudHJ5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcGFnZS1pby5jIGIvZnMvZXh0NC9wYWdlLWlvLmMKaW5kZXggNzI3MGRjZi4uOTU1Y2MzMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9wYWdlLWlvLmMKKysrIGIvZnMvZXh0NC9wYWdlLWlvLmMKQEAgLTMyLDE0ICszMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaW9fcGFnZV9jYWNoZXAsICppb19lbmRfY2FjaGVwOwogCi0jZGVmaW5lIFdRX0hBU0hfU1oJCTM3Ci0jZGVmaW5lIHRvX2lvZW5kX3dxKHYpCSgmaW9lbmRfd3FbKCh1bnNpZ25lZCBsb25nKXYpICUgV1FfSEFTSF9TWl0pCi1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgaW9lbmRfd3FbV1FfSEFTSF9TWl07Ci0KIGludCBfX2luaXQgZXh0NF9pbml0X3BhZ2Vpbyh2b2lkKQogewotCWludCBpOwotCiAJaW9fcGFnZV9jYWNoZXAgPSBLTUVNX0NBQ0hFKGV4dDRfaW9fcGFnZSwgU0xBQl9SRUNMQUlNX0FDQ09VTlQpOwogCWlmIChpb19wYWdlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ4LDkgKzQyLDYgQEAKIAkJa21lbV9jYWNoZV9kZXN0cm95KGlvX3BhZ2VfY2FjaGVwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZvciAoaSA9IDA7IGkgPCBXUV9IQVNIX1NaOyBpKyspCi0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvZW5kX3dxW2ldKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02Miw3ICs1Myw3IEBACiAKIHZvaWQgZXh0NF9pb2VuZF93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gdG9faW9lbmRfd3EoaW5vZGUpOworCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9IGV4dDRfaW9lbmRfd3EoaW5vZGUpOwogCiAJd2FpdF9ldmVudCgqd3EsIChhdG9taWNfcmVhZCgmRVhUNF9JKGlub2RlKS0+aV9pb2VuZF9jb3VudCkgPT0gMCkpOwogfQpAQCAtODcsNyArNzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpby0+bnVtX2lvX3BhZ2VzOyBpKyspCiAJCXB1dF9pb19wYWdlKGlvLT5wYWdlc1tpXSk7CiAJaW8tPm51bV9pb19wYWdlcyA9IDA7Ci0Jd3EgPSB0b19pb2VuZF93cShpby0+aW5vZGUpOworCXdxID0gZXh0NF9pb2VuZF93cShpby0+aW5vZGUpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZFWFQ0X0koaW8tPmlub2RlKS0+aV9pb2VuZF9jb3VudCkgJiYKIAkgICAgd2FpdHF1ZXVlX2FjdGl2ZSh3cSkpCiAJCXdha2VfdXBfYWxsKHdxKTsKQEAgLTEwMiw2ICs5Myw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKIAlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKIAlzc2l6ZV90IHNpemUgPSBpby0+c2l6ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CiAJaW50IHJldCA9IDA7CiAKIAlleHQ0X2RlYnVnKCJleHQ0X2VuZF9pb19ub2xvY2s6IGlvIDB4JXAgZnJvbSBpbm9kZSAlbHUsbGlzdC0+bmV4dCAweCVwLCIKQEAgLTEyNiw3ICsxMTgsMTYgQEAKIAlpZiAoaW8tPmlvY2IpCiAJCWFpb19jb21wbGV0ZShpby0+aW9jYiwgaW8tPnJlc3VsdCwgMCk7CiAJLyogY2xlYXIgdGhlIERJTyBBSU8gdW53cml0dGVuIGZsYWcgKi8KLQlpby0+ZmxhZyAmPSB+RVhUNF9JT19FTkRfVU5XUklUVEVOOworCWlmIChpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikgeworCQlpby0+ZmxhZyAmPSB+RVhUNF9JT19FTkRfVU5XUklUVEVOOworCQkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiAqLworCQl3cSA9IGV4dDRfaW9lbmRfd3EoaW8tPmlub2RlKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbikgJiYKKwkJICAgIHdhaXRxdWV1ZV9hY3RpdmUod3EpKSB7CisJCQl3YWtlX3VwX2FsbCh3cSk7CisJCX0KKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTAsNiArMTkxLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CisJc2VjdG9yX3QgYmlfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAKIAlCVUdfT04oIWlvX2VuZCk7CiAJYmlvLT5iaV9wcml2YXRlID0gTlVMTDsKQEAgLTIwNyw5ICsyMDksNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlTZXRQYWdlRXJyb3IocGFnZSk7CiAJCUJVR19PTighaGVhZCk7Ci0JCWlmIChoZWFkLT5iX3NpemUgPT0gUEFHRV9DQUNIRV9TSVpFKQotCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGhlYWQpOwotCQllbHNlIHsKKwkJaWYgKGhlYWQtPmJfc2l6ZSAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJCWxvZmZfdCBvZmZzZXQ7CiAJCQlsb2ZmX3QgaW9fZW5kX29mZnNldCA9IGlvX2VuZC0+b2Zmc2V0ICsgaW9fZW5kLT5zaXplOwogCkBAIC0yMjEsNyArMjIxLDYgQEAKIAkJCQkJaWYgKGVycm9yKQogCQkJCQkJYnVmZmVyX2lvX2Vycm9yKGJoKTsKIAotCQkJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQkJCX0KIAkJCQlpZiAoYnVmZmVyX2RlbGF5KGJoKSkKIAkJCQkJcGFydGlhbF93cml0ZSA9IDE7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW9fZW5kLT5vZmZzZXQsCiAJCQkgICAgIChsb25nKSBpb19lbmQtPnNpemUsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgIGJpby0+Ymlfc2VjdG9yID4+IChpbm9kZS0+aV9ibGtiaXRzIC0gOSkpOworCQkJICAgICBiaV9zZWN0b3IgPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSA5KSk7CiAJfQogCiAJLyogQWRkIHRoZSBpb19lbmQgdG8gcGVyLWlub2RlIGNvbXBsZXRlZCBpbyBsaXN0Ki8KQEAgLTM4MCw2ICszNzksNyBAQAogCiAJYmxvY2tzaXplID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOwogCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlCVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CiAJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwpAQCAtMzk3LDEyICszOTcsMTQgQEAKIAlmb3IgKGJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKSwgYmxvY2tfc3RhcnQgPSAwOwogCSAgICAgYmggIT0gaGVhZCB8fCAhYmxvY2tfc3RhcnQ7CiAJICAgICBibG9ja19zdGFydCA9IGJsb2NrX2VuZCwgYmggPSBiaC0+Yl90aGlzX3BhZ2UpIHsKKwogCQlibG9ja19lbmQgPSBibG9ja19zdGFydCArIGJsb2Nrc2l6ZTsKIAkJaWYgKGJsb2NrX3N0YXJ0ID49IGxlbikgewogCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJY29udGludWU7CiAJCX0KKwkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJcmV0ID0gaW9fc3VibWl0X2FkZF9iaChpbywgaW9fcGFnZSwgaW5vZGUsIHdiYywgYmgpOwogCQlpZiAocmV0KSB7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDQ4Y2U1NjEuLmY2YTMxOGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAkJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9sYXp5aW5pdF90aHJlYWQodm9pZCk7CiBzdGF0aWMgdm9pZCBleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3N0YXRpYyB2b2lkIGV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KHZvaWQpOwogCiAjaWYgIWRlZmluZWQoQ09ORklHX0VYVDNfRlMpICYmICFkZWZpbmVkKENPTkZJR19FWFQzX0ZTX01PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzKQogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHsKQEAgLTgzMiw2ICs4MzMsNyBAQAogCWVpLT5pX3N5bmNfdGlkID0gMDsKIAllaS0+aV9kYXRhc3luY190aWQgPSAwOwogCWF0b21pY19zZXQoJmVpLT5pX2lvZW5kX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZlaS0+aV9haW9kaW9fdW53cml0dGVuLCAwKTsKIAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KQEAgLTI3MTYsNiArMjcxOCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX2luZm8tPmxpX2xpc3RfbXR4KTsKIH0KIAorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXh0NF9sYXp5aW5pdF90YXNrOworCiAvKgogICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgZXh0NGxhenlpbml0IHRocmVhZCBsaXZlcy4gSXQgd2Fsa3MKICAqIHRocm91Z2ggdGhlIHJlcXVlc3QgbGlzdCBzZWFyY2hpbmcgZm9yIG5leHQgc2NoZWR1bGVkIGZpbGVzeXN0ZW0uCkBAIC0yNzg0LDYgKzI3ODgsMTAgQEAKIAkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG5leHRfd2FrZXVwKSkKIAkJCXNjaGVkdWxlKCk7CiAJCWZpbmlzaF93YWl0KCZlbGktPmxpX3dhaXRfZGFlbW9uLCAmd2FpdCk7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7CisJCQlnb3RvIGV4aXRfdGhyZWFkOworCQl9CiAJfQogCiBleGl0X3RocmVhZDoKQEAgLTI4MDgsNiArMjgxNiw3IEBACiAJd2FrZV91cCgmZWxpLT5saV93YWl0X3Rhc2spOwogCiAJa2ZyZWUoZXh0NF9saV9pbmZvKTsKKwlleHQ0X2xhenlpbml0X3Rhc2sgPSBOVUxMOwogCWV4dDRfbGlfaW5mbyA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX210eCk7CiAKQEAgLTI4MzAsMTEgKzI4MzksMTAgQEAKIAogc3RhdGljIGludCBleHQ0X3J1bl9sYXp5aW5pdF90aHJlYWQodm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQl0ID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsIGV4dDRfbGlfaW5mbywgImV4dDRsYXp5aW5pdCIpOwotCWlmIChJU19FUlIodCkpIHsKLQkJaW50IGVyciA9IFBUUl9FUlIodCk7CisJZXh0NF9sYXp5aW5pdF90YXNrID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsCisJCQkJCSBleHQ0X2xpX2luZm8sICJleHQ0bGF6eWluaXQiKTsKKwlpZiAoSVNfRVJSKGV4dDRfbGF6eWluaXRfdGFzaykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIoZXh0NF9sYXp5aW5pdF90YXNrKTsKIAkJZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3QoKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmV4dDRfbGlfaW5mby0+bGlfdGltZXIpOwogCQlrZnJlZShleHQ0X2xpX2luZm8pOwpAQCAtMjk4NSwxNiArMjk5MywxMCBAQAogCSAqIElmIHRocmVhZCBleGl0ZWQgZWFybGllcgogCSAqIHRoZXJlJ3Mgbm90aGluZyB0byBiZSBkb25lLgogCSAqLwotCWlmICghZXh0NF9saV9pbmZvKQorCWlmICghZXh0NF9saV9pbmZvIHx8ICFleHQ0X2xhenlpbml0X3Rhc2spCiAJCXJldHVybjsKIAotCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7Ci0KLQl3aGlsZSAoZXh0NF9saV9pbmZvLT5saV90YXNrKSB7Ci0JCXdha2VfdXAoJmV4dDRfbGlfaW5mby0+bGlfd2FpdF9kYWVtb24pOwotCQl3YWl0X2V2ZW50KGV4dDRfbGlfaW5mby0+bGlfd2FpdF90YXNrLAotCQkJICAgZXh0NF9saV9pbmZvLT5saV90YXNrID09IE5VTEwpOwotCX0KKwlrdGhyZWFkX3N0b3AoZXh0NF9sYXp5aW5pdF90YXNrKTsKIH0KIAogc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKQEAgLTQ3NjgsNyArNDc3MCw3IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCiB7CiAJc3RydWN0IGV4dDRfZmVhdHVyZXMgKmVmOwogCWludCByZXQgPSAtRU5PTUVNOwpAQCAtNDc5MiwyMyArNDc5NCw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZXhpdF9mZWF0X2FkdmVydHModm9pZCkKK3sKKwlrb2JqZWN0X3B1dCgmZXh0NF9mZWF0LT5mX2tvYmopOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV4dDRfZmVhdC0+Zl9rb2JqX3VucmVnaXN0ZXIpOworCWtmcmVlKGV4dDRfZmVhdCk7Cit9CisKKy8qIFNoYXJlZCBhY3Jvc3MgYWxsIGV4dDQgZmlsZSBzeXN0ZW1zICovCit3YWl0X3F1ZXVlX2hlYWRfdCBleHQ0X19pb2VuZF93cVtFWFQ0X1dRX0hBU0hfU1pdOworc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiBzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZnModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRVhUNF9XUV9IQVNIX1NaOyBpKyspIHsKKwkJbXV0ZXhfaW5pdCgmZXh0NF9fYWlvX211dGV4W2ldKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZXh0NF9faW9lbmRfd3FbaV0pOworCX0KKwogCWVyciA9IGV4dDRfaW5pdF9wYWdlaW8oKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IGV4dDRfaW5pdF9zeXN0ZW1fem9uZSgpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0NTsKKwkJZ290byBvdXQ3OwogCWV4dDRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImV4dDQiLCBOVUxMLCBmc19rb2JqKTsKIAlpZiAoIWV4dDRfa3NldCkKLQkJZ290byBvdXQ0OworCQlnb3RvIG91dDY7CiAJZXh0NF9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJmcy9leHQ0IiwgTlVMTCk7CisJaWYgKCFleHQ0X3Byb2Nfcm9vdCkKKwkJZ290byBvdXQ1OwogCiAJZXJyID0gZXh0NF9pbml0X2ZlYXRfYWR2ZXJ0cygpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NDsKIAogCWVyciA9IGV4dDRfaW5pdF9tYmFsbG9jKCk7CiAJaWYgKGVycikKQEAgLTQ4MzgsMTIgKzQ4NjEsMTQgQEAKIG91dDI6CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKIG91dDM6Ci0Ja2ZyZWUoZXh0NF9mZWF0KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZXh0NCIsIE5VTEwpOwotCWtzZXRfdW5yZWdpc3RlcihleHQ0X2tzZXQpOworCWV4dDRfZXhpdF9mZWF0X2FkdmVydHMoKTsKIG91dDQ6Ci0JZXh0NF9leGl0X3N5c3RlbV96b25lKCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIG91dDU6CisJa3NldF91bnJlZ2lzdGVyKGV4dDRfa3NldCk7CitvdXQ2OgorCWV4dDRfZXhpdF9zeXN0ZW1fem9uZSgpOworb3V0NzoKIAlleHQ0X2V4aXRfcGFnZWlvKCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ4NTcsNiArNDg4Miw3IEBACiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJZXh0NF9leGl0X3hhdHRyKCk7CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKKwlleHQ0X2V4aXRfZmVhdF9hZHZlcnRzKCk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIAlrc2V0X3VucmVnaXN0ZXIoZXh0NF9rc2V0KTsKIAlleHQ0X2V4aXRfc3lzdGVtX3pvbmUoKTsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGVjYzhiMzkuLmNiMTAyNjEgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtODE1LDcgKzgxNSw3IEBACiAJCV9fT19TWU5DCXwgT19EU1lOQwl8IEZBU1lOQwl8CiAJCU9fRElSRUNUCXwgT19MQVJHRUZJTEUJfCBPX0RJUkVDVE9SWQl8CiAJCU9fTk9GT0xMT1cJfCBPX05PQVRJTUUJfCBPX0NMT0VYRUMJfAotCQlGTU9ERV9FWEVDCisJCV9fRk1PREVfRVhFQwogCQkpKTsKIAogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLApkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGMzZTg5YWQuLmViMzZiNmIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJCWdvdG8gZmFpbDsKIAogCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZmlsZXMpOworCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCWlmIChzZWN1cml0eV9maWxlX2FsbG9jKGYpKQogCQlnb3RvIGZhaWxfc2VjOwogCiAJSU5JVF9MSVNUX0hFQUQoJmYtPmZfdS5mdV9saXN0KTsKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwotCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDUyYTBiY2EuLmIxOTkxYTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0zOTcsOCArMzk3LDggQEAKIAl1MzIgc3RhcnQsIGxlbiwgZ29hbDsKIAlpbnQgcmVzOwogCi0JaWYgKHNiaS0+dG90YWxfYmxvY2tzIC0gc2JpLT5mcmVlX2Jsb2NrcyArIDggPgotCQkJc2JpLT5hbGxvY19maWxlLT5pX3NpemUgKiA4KSB7CisJaWYgKHNiaS0+YWxsb2NfZmlsZS0+aV9zaXplICogOCA8CisJICAgIHNiaS0+dG90YWxfYmxvY2tzIC0gc2JpLT5mcmVlX2Jsb2NrcyArIDgpIHsKIAkJLyogZXh0ZW5kIGFsbG9jIGZpbGUgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGV4dGVuZCBhbGxvYyBmaWxlISAiCiAJCQkJIiglbGx1LCV1LCV1KVxuIiwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvcGFydF90YmwuYyBiL2ZzL2hmc3BsdXMvcGFydF90YmwuYwppbmRleCBkNjZhZDExLi40MGFkODhjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3BhcnRfdGJsLmMKKysrIGIvZnMvaGZzcGx1cy9wYXJ0X3RibC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlyZXMgPSBoZnNwbHVzX3N1Ym1pdF9iaW8oc2ItPnNfYmRldiwgKnBhcnRfc3RhcnQgKyBIRlNfUE1BUF9CTEssCiAJCQkJIGRhdGEsIFJFQUQpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChiZTE2X3RvX2NwdSgqKChfX2JlMTYgKilkYXRhKSkpIHsKIAljYXNlIEhGU19PTERfUE1BUF9NQUdJQzoKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQlyZXMgPSAtRU5PRU5UOwogCQlicmVhazsKIAl9Ci0KK291dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDlhM2I0NzkuLmI0OWI1NTUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTMzOCwyMCArMzM4LDIyIEBACiAJc3RydWN0IGlub2RlICpyb290LCAqaW5vZGU7CiAJc3RydWN0IHFzdHIgc3RyOwogCXN0cnVjdCBubHNfdGFibGUgKm5scyA9IE5VTEw7Ci0JaW50IGVyciA9IC1FSU5WQUw7CisJaW50IGVycjsKIAorCWVyciA9IC1FSU5WQUw7CiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAKIAlzYi0+c19mc19pbmZvID0gc2JpOwogCW11dGV4X2luaXQoJnNiaS0+YWxsb2NfbXV0ZXgpOwogCW11dGV4X2luaXQoJnNiaS0+dmhfbXV0ZXgpOwogCWhmc3BsdXNfZmlsbF9kZWZhdWx0cyhzYmkpOworCisJZXJyID0gLUVJTlZBTDsKIAlpZiAoIWhmc3BsdXNfcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYmkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gcGFyc2UgbW91bnQgb3B0aW9uc1xuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfdW5sb2FkX25sczsKIAl9CiAKIAkvKiB0ZW1wb3JhcmlseSB1c2UgdXRmOCB0byBjb3JyZWN0bHkgZmluZCB0aGUgaGlkZGVuIGRpciBiZWxvdyAqLwpAQCAtMzU5LDE2ICszNjEsMTQgQEAKIAlzYmktPm5scyA9IGxvYWRfbmxzKCJ1dGY4Iik7CiAJaWYgKCFzYmktPm5scykgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogdW5hYmxlIHRvIGxvYWQgbmxzIGZvciB1dGY4XG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF91bmxvYWRfbmxzOwogCX0KIAogCS8qIEdyYWIgdGhlIHZvbHVtZSBoZWFkZXIgKi8KIAlpZiAoaGZzcGx1c19yZWFkX3dyYXBwZXIoc2IpKSB7CiAJCWlmICghc2lsZW50KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiB1bmFibGUgdG8gZmluZCBIRlMrIHN1cGVyYmxvY2tcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3VubG9hZF9ubHM7CiAJfQogCXZoZHIgPSBzYmktPnNfdmhkcjsKIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJaWYgKGJlMTZfdG9fY3B1KHZoZHItPnZlcnNpb24pIDwgSEZTUExVU19NSU5fVkVSU0lPTiB8fAogCSAgICBiZTE2X3RvX2NwdSh2aGRyLT52ZXJzaW9uKSA+IEhGU1BMVVNfQ1VSUkVOVF9WRVJTSU9OKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB3cm9uZyBmaWxlc3lzdGVtIHZlcnNpb25cbiIpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2ZyZWVfdmhkcjsKIAl9CiAJc2JpLT50b3RhbF9ibG9ja3MgPSBiZTMyX3RvX2NwdSh2aGRyLT50b3RhbF9ibG9ja3MpOwogCXNiaS0+ZnJlZV9ibG9ja3MgPSBiZTMyX3RvX2NwdSh2aGRyLT5mcmVlX2Jsb2Nrcyk7CkBAIC00MjEsMTkgKzQyMSwxOSBAQAogCXNiaS0+ZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19FWFRfQ05JRCk7CiAJaWYgKCFzYmktPmV4dF90cmVlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBmYWlsZWQgdG8gbG9hZCBleHRlbnRzIGZpbGVcbiIpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2ZyZWVfdmhkcjsKIAl9CiAJc2JpLT5jYXRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0NBVF9DTklEKTsKIAlpZiAoIXNiaS0+Y2F0X3RyZWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGNhdGFsb2cgZmlsZVxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfY2xvc2VfZXh0X3RyZWU7CiAJfQogCiAJaW5vZGUgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfQUxMT0NfQ05JRCk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGFsbG9jYXRpb24gZmlsZVxuIik7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2Nsb3NlX2NhdF90cmVlOwogCX0KIAlzYmktPmFsbG9jX2ZpbGUgPSBpbm9kZTsKIApAQCAtNDQyLDE0ICs0NDIsNyBAQAogCWlmIChJU19FUlIocm9vdCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIHJvb3QgZGlyZWN0b3J5XG4iKTsKIAkJZXJyID0gUFRSX0VSUihyb290KTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQlzYi0+c19kX29wID0gJmhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7Ci0Jc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKLQlpZiAoIXNiLT5zX3Jvb3QpIHsKLQkJaXB1dChyb290KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF9wdXRfYWxsb2NfZmlsZTsKIAl9CiAKIAlzdHIubGVuID0gc2l6ZW9mKEhGU1BfSElEREVORElSX05BTUUpIC0gMTsKQEAgLTQ1OSw0NiArNDUyLDY5IEBACiAJaWYgKCFoZnNfYnJlY19yZWFkKCZmZCwgJmVudHJ5LCBzaXplb2YoZW50cnkpKSkgewogCQloZnNfZmluZF9leGl0KCZmZCk7CiAJCWlmIChlbnRyeS50eXBlICE9IGNwdV90b19iZTE2KEhGU1BMVVNfRk9MREVSKSkKLQkJCWdvdG8gY2xlYW51cDsKKwkJCWdvdG8gb3V0X3B1dF9yb290OwogCQlpbm9kZSA9IGhmc3BsdXNfaWdldChzYiwgYmUzMl90b19jcHUoZW50cnkuZm9sZGVyLmlkKSk7CiAJCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCWdvdG8gY2xlYW51cDsKKwkJCWdvdG8gb3V0X3B1dF9yb290OwogCQl9CiAJCXNiaS0+aGlkZGVuX2RpciA9IGlub2RlOwogCX0gZWxzZQogCQloZnNfZmluZF9leGl0KCZmZCk7CiAKLQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCi0JCWdvdG8gb3V0OworCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkvKgorCQkgKiBIK0xYID09IGhmc3BsdXN1dGlscywgSCtMeCA9PSB0aGlzIGRyaXZlciwgSCtseCBpcyB1bnVzZWQKKwkJICogYWxsIHRocmVlIGFyZSByZWdpc3RlcmVkIHdpdGggQXBwbGUgZm9yIG91ciB1c2UKKwkJICovCisJCXZoZHItPmxhc3RfbW91bnRfdmVycyA9IGNwdV90b19iZTMyKEhGU1BfTU9VTlRfVkVSU0lPTik7CisJCXZoZHItPm1vZGlmeV9kYXRlID0gaGZzcF9ub3cybXQoKTsKKwkJYmUzMl9hZGRfY3B1KCZ2aGRyLT53cml0ZV9jb3VudCwgMSk7CisJCXZoZHItPmF0dHJpYnV0ZXMgJj0gY3B1X3RvX2JlMzIofkhGU1BMVVNfVk9MX1VOTU5UKTsKKwkJdmhkci0+YXR0cmlidXRlcyB8PSBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9JTkNOU1ROVCk7CisJCWhmc3BsdXNfc3luY19mcyhzYiwgMSk7CiAKLQkvKiBIK0xYID09IGhmc3BsdXN1dGlscywgSCtMeCA9PSB0aGlzIGRyaXZlciwgSCtseCBpcyB1bnVzZWQKLQkgKiBhbGwgdGhyZWUgYXJlIHJlZ2lzdGVyZWQgd2l0aCBBcHBsZSBmb3Igb3VyIHVzZQotCSAqLwotCXZoZHItPmxhc3RfbW91bnRfdmVycyA9IGNwdV90b19iZTMyKEhGU1BfTU9VTlRfVkVSU0lPTik7Ci0Jdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOwotCWJlMzJfYWRkX2NwdSgmdmhkci0+d3JpdGVfY291bnQsIDEpOwotCXZoZHItPmF0dHJpYnV0ZXMgJj0gY3B1X3RvX2JlMzIofkhGU1BMVVNfVk9MX1VOTU5UKTsKLQl2aGRyLT5hdHRyaWJ1dGVzIHw9IGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0lOQ05TVE5UKTsKLQloZnNwbHVzX3N5bmNfZnMoc2IsIDEpOworCQlpZiAoIXNiaS0+aGlkZGVuX2RpcikgeworCQkJbXV0ZXhfbG9jaygmc2JpLT52aF9tdXRleCk7CisJCQlzYmktPmhpZGRlbl9kaXIgPSBoZnNwbHVzX25ld19pbm9kZShzYiwgU19JRkRJUik7CisJCQloZnNwbHVzX2NyZWF0ZV9jYXQoc2JpLT5oaWRkZW5fZGlyLT5pX2lubywgcm9vdCwgJnN0ciwKKwkJCQkJICAgc2JpLT5oaWRkZW5fZGlyKTsKKwkJCW11dGV4X3VubG9jaygmc2JpLT52aF9tdXRleCk7CiAKLQlpZiAoIXNiaS0+aGlkZGVuX2RpcikgewotCQltdXRleF9sb2NrKCZzYmktPnZoX211dGV4KTsKLQkJc2JpLT5oaWRkZW5fZGlyID0gaGZzcGx1c19uZXdfaW5vZGUoc2IsIFNfSUZESVIpOwotCQloZnNwbHVzX2NyZWF0ZV9jYXQoc2JpLT5oaWRkZW5fZGlyLT5pX2lubywgc2ItPnNfcm9vdC0+ZF9pbm9kZSwKLQkJCQkgICAmc3RyLCBzYmktPmhpZGRlbl9kaXIpOwotCQltdXRleF91bmxvY2soJnNiaS0+dmhfbXV0ZXgpOwotCi0JCWhmc3BsdXNfbWFya19pbm9kZV9kaXJ0eShzYmktPmhpZGRlbl9kaXIsIEhGU1BMVVNfSV9DQVRfRElSVFkpOworCQkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KHNiaS0+aGlkZGVuX2RpciwKKwkJCQkJCSBIRlNQTFVTX0lfQ0FUX0RJUlRZKTsKKwkJfQogCX0KLW91dDoKKworCXNiLT5zX2Rfb3AgPSAmaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKKwlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3QpOworCWlmICghc2ItPnNfcm9vdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9wdXRfaGlkZGVuX2RpcjsKKwl9CisKIAl1bmxvYWRfbmxzKHNiaS0+bmxzKTsKIAlzYmktPm5scyA9IG5sczsKIAlyZXR1cm4gMDsKIAotY2xlYW51cDoKLQloZnNwbHVzX3B1dF9zdXBlcihzYik7CitvdXRfcHV0X2hpZGRlbl9kaXI6CisJaXB1dChzYmktPmhpZGRlbl9kaXIpOworb3V0X3B1dF9yb290OgorCWlwdXQoc2JpLT5hbGxvY19maWxlKTsKK291dF9wdXRfYWxsb2NfZmlsZToKKwlpcHV0KHNiaS0+YWxsb2NfZmlsZSk7CitvdXRfY2xvc2VfY2F0X3RyZWU6CisJaGZzX2J0cmVlX2Nsb3NlKHNiaS0+Y2F0X3RyZWUpOworb3V0X2Nsb3NlX2V4dF90cmVlOgorCWhmc19idHJlZV9jbG9zZShzYmktPmV4dF90cmVlKTsKK291dF9mcmVlX3ZoZHI6CisJa2ZyZWUoc2JpLT5zX3ZoZHIpOworCWtmcmVlKHNiaS0+c19iYWNrdXBfdmhkcik7CitvdXRfdW5sb2FkX25sczoKKwl1bmxvYWRfbmxzKHNiaS0+bmxzKTsKIAl1bmxvYWRfbmxzKG5scyk7CisJa2ZyZWUoc2JpKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3dyYXBwZXIuYyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCmluZGV4IDE5NjIzMTcuLjMwMzFkODEgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBjcHVfdG9fYmUxNihIRlNQX1dSQVBfTUFHSUMpOgogCQlpZiAoIWhmc3BsdXNfcmVhZF9tZGIoc2JpLT5zX3ZoZHIsICZ3ZCkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWVfYmFja3VwX3ZoZHI7CiAJCXdkLmFibGtfc2l6ZSA+Pj0gSEZTUExVU19TRUNUT1JfU0hJRlQ7CiAJCXBhcnRfc3RhcnQgKz0gd2QuYWJsa19zdGFydCArIHdkLmVtYmVkX3N0YXJ0ICogd2QuYWJsa19zaXplOwogCQlwYXJ0X3NpemUgPSB3ZC5lbWJlZF9jb3VudCAqIHdkLmFibGtfc2l6ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQkgKiAoc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgY2Ryb20vbG9vcCB0aG91Z2gpCiAJCSAqLwogCQlpZiAoaGZzX3BhcnRfZmluZChzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOwogCQlnb3RvIHJlcmVhZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IGE1OTYzNWUuLjFlZWJlYjcgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtMjczLDYgKzI3MywxMyBAQAogCQlsZW4gPSBpc2l6ZTsKIAl9CiAKKwkvKgorCSAqIFNvbWUgZmlsZXN5c3RlbXMgY2FuJ3QgZGVhbCB3aXRoIGJlaW5nIGFza2VkIHRvIG1hcCBsZXNzIHRoYW4KKwkgKiBibG9ja3NpemUsIHNvIG1ha2Ugc3VyZSBvdXIgbGVuIGlzIGF0IGxlYXN0IGJsb2NrIGxlbmd0aC4KKwkgKi8KKwlpZiAobG9naWNhbF90b19ibGsoaW5vZGUsIGxlbikgPT0gMCkKKwkJbGVuID0gYmxrX3RvX2xvZ2ljYWwoaW5vZGUsIDEpOworCiAJc3RhcnRfYmxrID0gbG9naWNhbF90b19ibGsoaW5vZGUsIHN0YXJ0KTsKIAlsYXN0X2JsayA9IGxvZ2ljYWxfdG9fYmxrKGlub2RlLCBzdGFydCArIGxlbiAtIDEpOwogCmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IDllNDY4NjkuLjk3ZTczNDYgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC00NzMsNyArNDczLDggQEAKIH0KIAogLyoKLSAqIENhbGxlZCB1bmRlciBqX3N0YXRlX2xvY2suICBSZXR1cm5zIHRydWUgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgd2FzIHN0YXJ0ZWQuCisgKiBDYWxsZWQgd2l0aCBqX3N0YXRlX2xvY2sgbG9ja2VkIGZvciB3cml0aW5nLgorICogUmV0dXJucyB0cnVlIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IHdhcyBzdGFydGVkLgogICovCiBpbnQgX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCB0YXJnZXQpCiB7CkBAIC01MjAsMTEgKzUyMSwxMyBAQAogewogCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uID0gTlVMTDsKIAl0aWRfdCB0aWQ7CisJaW50IG5lZWRfdG9fc3RhcnQgPSAwOwogCiAJcmVhZF9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWlmIChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24gJiYgIWN1cnJlbnQtPmpvdXJuYWxfaW5mbykgewogCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbjsKLQkJX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdHJhbnNhY3Rpb24tPnRfdGlkKTsKKwkJaWYgKCF0aWRfZ2VxKGpvdXJuYWwtPmpfY29tbWl0X3JlcXVlc3QsIHRyYW5zYWN0aW9uLT50X3RpZCkpCisJCQluZWVkX3RvX3N0YXJ0ID0gMTsKIAl9IGVsc2UgaWYgKGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbikKIAkJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb247CiAKQEAgLTUzNSw2ICs1MzgsOCBAQAogCiAJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOwogCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCWlmIChuZWVkX3RvX3N0YXJ0KQorCQlqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdGlkKTsKIAlqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCB0aWQpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IGZhYWQyYmQuLjFkMTE5MTAgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTExNywxMCArMTE3LDEwIEBACiBzdGF0aWMgaW50IHN0YXJ0X3RoaXNfaGFuZGxlKGpvdXJuYWxfdCAqam91cm5hbCwgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICAgaW50IGdmcF9tYXNrKQogewotCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uOwotCWludCBuZWVkZWQ7Ci0JaW50IG5ibG9ja3MgPSBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHM7Ci0JdHJhbnNhY3Rpb25fdCAqbmV3X3RyYW5zYWN0aW9uID0gTlVMTDsKKwl0cmFuc2FjdGlvbl90CSp0cmFuc2FjdGlvbiwgKm5ld190cmFuc2FjdGlvbiA9IE5VTEw7CisJdGlkX3QJCXRpZDsKKwlpbnQJCW5lZWRlZCwgbmVlZF90b19zdGFydDsKKwlpbnQJCW5ibG9ja3MgPSBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHM7CiAKIAlpZiAobmJsb2NrcyA+IGpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJKQkQ6ICVzIHdhbnRzIHRvbyBtYW55IGNyZWRpdHMgKCVkID4gJWQpXG4iLApAQCAtMjIyLDggKzIyMiwxMSBAQAogCQlhdG9taWNfc3ViKG5ibG9ja3MsICZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKIAkJcHJlcGFyZV90b193YWl0KCZqb3VybmFsLT5qX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkLCAmd2FpdCwKIAkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7CisJCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKKwkJbmVlZF90b19zdGFydCA9ICF0aWRfZ2VxKGpvdXJuYWwtPmpfY29tbWl0X3JlcXVlc3QsIHRpZCk7CiAJCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlpZiAobmVlZF90b19zdGFydCkKKwkJCWpiZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0aWQpOwogCQlzY2hlZHVsZSgpOwogCQlmaW5pc2hfd2FpdCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCwgJndhaXQpOwogCQlnb3RvIHJlcGVhdDsKQEAgLTQ0Miw3ICs0NDUsOCBAQAogewogCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uOwogCWpvdXJuYWxfdCAqam91cm5hbCA9IHRyYW5zYWN0aW9uLT50X2pvdXJuYWw7Ci0JaW50IHJldDsKKwl0aWRfdAkJdGlkOworCWludAkJbmVlZF90b19zdGFydCwgcmV0OwogCiAJLyogSWYgd2UndmUgaGFkIGFuIGFib3J0IG9mIGFueSB0eXBlLCBkb24ndCBldmVuIHRoaW5rIGFib3V0CiAJICogYWN0dWFsbHkgZG9pbmcgdGhlIHJlc3RhcnQhICovCkBAIC00NjUsOCArNDY5LDExIEBACiAJc3Bpbl91bmxvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAogCWpiZF9kZWJ1ZygyLCAicmVzdGFydGluZyBoYW5kbGUgJXBcbiIsIGhhbmRsZSk7Ci0JX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdHJhbnNhY3Rpb24tPnRfdGlkKTsKKwl0aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CisJbmVlZF90b19zdGFydCA9ICF0aWRfZ2VxKGpvdXJuYWwtPmpfY29tbWl0X3JlcXVlc3QsIHRpZCk7CiAJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJaWYgKG5lZWRfdG9fc3RhcnQpCisJCWpiZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0aWQpOwogCiAJbG9ja19tYXBfcmVsZWFzZSgmaGFuZGxlLT5oX2xvY2tkZXBfbWFwKTsKIAloYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMgPSBuYmxvY2tzOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvaG9zdC5jIGIvZnMvbG9ja2QvaG9zdC5jCmluZGV4IDVmMWJjYjIuLmI3Yzk5YmYgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2hvc3QuYworKysgYi9mcy9sb2NrZC9ob3N0LmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJCQlzdHJ1Y3QgbnNtX2hhbmRsZSAqbnNtLAogCQkJCQljb25zdCBzdHJ1Y3QgbmxtX3JlYm9vdCAqaW5mbykKIHsKLQlzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QgPSBOVUxMOworCXN0cnVjdCBubG1faG9zdCAqaG9zdDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIApAQCAtNTMyLDEyICs1MzIsMTMgQEAKIAkJCWhvc3QtPmhfc3RhdGUrKzsKIAogCQkJbmxtX2dldF9ob3N0KGhvc3QpOwotCQkJZ290byBvdXQ7CisJCQltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKKwkJCXJldHVybiBob3N0OwogCQl9CiAJfQotb3V0OgorCiAJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7Ci0JcmV0dXJuIGhvc3Q7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggN2Q3N2YyNC4uZWM0YjJkMCAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC01NjEsMTAgKzU2MSwxNCBAQAogICovCiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLT5pbnRlbnQub3Blbi5maWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCi0JCXB1dF9maWxwKG5kLT5pbnRlbnQub3Blbi5maWxlKTsKLQllbHNlCi0JCWZwdXQobmQtPmludGVudC5vcGVuLmZpbGUpOworCXN0cnVjdCBmaWxlICpmaWxlID0gbmQtPmludGVudC5vcGVuLmZpbGU7CisKKwlpZiAoZmlsZSAmJiAhSVNfRVJSKGZpbGUpKSB7CisJCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCisJCQlwdXRfZmlscChmaWxlKTsKKwkJZWxzZQorCQkJZnB1dChmaWxlKTsKKwl9CiB9CiAKIC8qCkBAIC0yMjY1LDggKzIyNjksNiBAQAogCXJldHVybiBmaWxwOwogCiBleGl0OgotCWlmICghSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CkBAIC0yMzg5LDggKzIzOTEsNiBAQAogZXhpdF9kcHV0OgogCXBhdGhfcHV0X2NvbmRpdGlvbmFsKHBhdGgsIG5kKTsKIGV4aXQ6Ci0JaWYgKCFJU19FUlIobmQtPmludGVudC5vcGVuLmZpbGUpKQotCQlyZWxlYXNlX29wZW5faW50ZW50KG5kKTsKIAlwYXRoX3B1dCgmbmQtPnBhdGgpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KQEAgLTI0NzcsNiArMjQ3Nyw3IEBACiAJfQogCWF1ZGl0X2lub2RlKHBhdGhuYW1lLCBuZC5wYXRoLmRlbnRyeSk7CiAJZmlscCA9IGZpbmlzaF9vcGVuKCZuZCwgb3Blbl9mbGFnLCBhY2NfbW9kZSk7CisJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwogCXJldHVybiBmaWxwOwogCiBjcmVhdDoKQEAgLTI1NTMsNiArMjU1NCw3IEBACiAJCXBhdGhfcHV0KCZuZC5yb290KTsKIAlpZiAoZmlscCA9PSBFUlJfUFRSKC1FU1RBTEUpICYmICEoZmxhZ3MgJiBMT09LVVBfUkVWQUwpKQogCQlnb3RvIHJldmFsOworCXJlbGVhc2Vfb3Blbl9pbnRlbnQoJm5kKTsKIAlyZXR1cm4gZmlscDsKIAogZXhpdF9kcHV0OgpAQCAtMjU2MCw4ICsyNTYyLDYgQEAKIG91dF9wYXRoOgogCXBhdGhfcHV0KCZuZC5wYXRoKTsKIG91dF9maWxwOgotCWlmICghSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKQotCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CiAJZmlscCA9IEVSUl9QVFIoZXJyb3IpOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCAxOTkwMTY1Li5lM2QyOTQyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtMTM1LDMzICsxMzUsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAvKgotICogICogQ0JfU0VRVUVOQ0Ugb3BlcmF0aW9ucyB3aWxsIGZhaWwgdW50aWwgdGhlIGNhbGxiYWNrIHNlc3Npb25pZCBpcyBzZXQuCi0gKiAgICovCi1pbnQgbmZzNF9zZXRfY2FsbGJhY2tfc2Vzc2lvbmlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0Jc3RydWN0IHN2Y19zZXJ2ICpzZXJ2ID0gY2xwLT5jbF9ycGNjbGllbnQtPmNsX3hwcnQtPmJjX3NlcnY7Ci0Jc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY19zaWQ7Ci0KLQlpZiAoIXNlcnYtPnN2X2JjX3hwcnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogb24gc3VjY2VzcyBmcmVlZCBpbiB4cHJ0X2ZyZWUgKi8KLQliY19zaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJjX3NpZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGJjX3NpZC0+ZGF0YSwgJmNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAotCQlORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQlzcGluX2xvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCXNlcnYtPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQgPSBiY19zaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCWRwcmludGsoIiVzIHNldCB4cHRfYmNfc2lkPSV1OiV1OiV1OiV1IGZvciBzdl9iY194cHJ0ICVwXG4iLCBfX2Z1bmNfXywKLQkJKCh1MzIgKiliY19zaWQtPmRhdGEpWzBdLCAoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMV0sCi0JCSgodTMyICopYmNfc2lkLT5kYXRhKVsyXSwgKCh1MzIgKiliY19zaWQtPmRhdGEpWzNdLAotCQlzZXJ2LT5zdl9iY194cHJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIFRoZSBjYWxsYmFjayBzZXJ2aWNlIGZvciBORlN2NC4xIGNhbGxiYWNrcwogICovCiBzdGF0aWMgaW50CkBAIC0yNjYsMTAgKzIzOSw2IEBACiAJCXN0cnVjdCBuZnNfY2FsbGJhY2tfZGF0YSAqY2JfaW5mbykKIHsKIH0KLWludCBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKLXsKLQlyZXR1cm4gMDsKLX0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogLyoKQEAgLTM1OSw3OCArMzI4LDU4IEBACiAJbXV0ZXhfdW5sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoc3RydWN0IG5mc19jbGllbnQgKmNscCwKLQkJCQkJc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKKy8qIEJvb2xlYW4gY2hlY2sgb2YgUlBDX0FVVEhfR1NTIHByaW5jaXBhbCAqLworaW50CitjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7CiAJc3RydWN0IHJwY19jbG50ICpyID0gY2xwLT5jbF9ycGNjbGllbnQ7CiAJY2hhciAqcCA9IHN2Y19nc3NfcHJpbmNpcGFsKHJxc3RwKTsKIAorCWlmIChycXN0cC0+cnFfYXV0aG9wLT5mbGF2b3VyICE9IFJQQ19BVVRIX0dTUykKKwkJcmV0dXJuIDE7CisKIAkvKiBObyBSUENfQVVUSF9HU1Mgb24gTkZTdjQuMSBiYWNrIGNoYW5uZWwgeWV0ICovCiAJaWYgKGNscC0+Y2xfbWlub3J2ZXJzaW9uICE9IDApCi0JCXJldHVybiBTVkNfRFJPUDsKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBJdCBtaWdodCBqdXN0IGJlIGEgbm9ybWFsIHVzZXIgcHJpbmNpcGFsLCBpbiB3aGljaCBjYXNlCiAJICogdXNlcnNwYWNlIHdvbid0IGJvdGhlciB0byB0ZWxsIHVzIHRoZSBuYW1lIGF0IGFsbC4KIAkgKi8KIAlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gU1ZDX0RFTklFRDsKKwkJcmV0dXJuIDA7CiAKIAkvKiBFeHBlY3QgYSBHU1NfQ19OVF9IT1NUQkFTRURfTkFNRSBsaWtlICJuZnNAc2VydmVyaG9zdG5hbWUiICovCiAKIAlpZiAobWVtY21wKHAsICJuZnNAIiwgNCkgIT0gMCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7CisJCXJldHVybiAwOwogCXAgKz0gNDsKIAlpZiAoc3RyY21wKHAsIHItPmNsX3NlcnZlcikgIT0gMCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7Ci0JcmV0dXJuIFNWQ19PSzsKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKLS8qIHBnX2F1dGhlbnRpY2F0ZSBtZXRob2QgaGVscGVyICovCi1zdGF0aWMgc3RydWN0IG5mc19jbGllbnQgKm5mc19jYl9maW5kX2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2Vzc2lvbmlkID0gYmNfeHBydF9zaWQocnFzdHApOwotCWludCBpc19jYl9jb21wb3VuZCA9IHJxc3RwLT5ycV9wcm9jID09IENCX0NPTVBPVU5EID8gMSA6IDA7Ci0KLQlkcHJpbnRrKCItLT4gJXMgcnFfcHJvYyAlZFxuIiwgX19mdW5jX18sIHJxc3RwLT5ycV9wcm9jKTsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJLyogU2Vzc2lvbmlkICh1c3VhbGx5KSBzZXQgYWZ0ZXIgQ0JfTlVMTCBwaW5nICovCi0JCXJldHVybiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChzdmNfYWRkcihycXN0cCksIHNlc3Npb25pZCwKLQkJCQkJCSAgaXNfY2JfY29tcG91bmQpOwotCWVsc2UKLQkJLyogTm8gY2FsbGJhY2sgaWRlbnRpZmllciBpbiBwZ19hdXRoZW50aWNhdGUgKi8KLQkJcmV0dXJuIG5mczRfZmluZF9jbGllbnRfbm9faWRlbnQoc3ZjX2FkZHIocnFzdHApKTsKLX0KLQotLyogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgbmZzdjQgY2FsbGJhY2sgdGhyZWFkcy4gKi8KKy8qCisgKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGZvciBuZnN2NCBjYWxsYmFjayB0aHJlYWRzLgorICoKKyAqIFRoZSBhdXRoZmxhdm9yIGhhcyBiZWVuIG5lZ290aWF0ZWQsIHNvIGFuIGluY29ycmVjdCBmbGF2b3IgaXMgYSBzZXJ2ZXIKKyAqIGJ1Zy4gRHJvcCBwYWNrZXRzIHdpdGggaW5jb3JyZWN0IGF1dGhmbGF2b3IuCisgKgorICogQWxsIG90aGVyIGNoZWNraW5nIGRvbmUgYWZ0ZXIgTkZTIGRlY29kaW5nIHdoZXJlIHRoZSBuZnNfY2xpZW50IGNhbiBiZQorICogZm91bmQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZAorICovCiBzdGF0aWMgaW50IG5mc19jYWxsYmFja19hdXRoZW50aWNhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwotCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwotCWludCByZXQgPSBTVkNfT0s7Ci0KLQkvKiBEb24ndCB0YWxrIHRvIHN0cmFuZ2VycyAqLwotCWNscCA9IG5mc19jYl9maW5kX2NsaWVudChycXN0cCk7Ci0JaWYgKGNscCA9PSBOVUxMKQotCQlyZXR1cm4gU1ZDX0RST1A7Ci0KLQlkcHJpbnRrKCIlczogJXMgTkZTdjQgY2FsbGJhY2shXG4iLCBfX2Z1bmNfXywKLQkJCXN2Y19wcmludF9hZGRyKHJxc3RwLCBidWYsIHNpemVvZihidWYpKSk7Ci0KIAlzd2l0Y2ggKHJxc3RwLT5ycV9hdXRob3AtPmZsYXZvdXIpIHsKLQkJY2FzZSBSUENfQVVUSF9OVUxMOgotCQkJaWYgKHJxc3RwLT5ycV9wcm9jICE9IENCX05VTEwpCi0JCQkJcmV0ID0gU1ZDX0RFTklFRDsKLQkJCWJyZWFrOwotCQljYXNlIFJQQ19BVVRIX1VOSVg6Ci0JCQlicmVhazsKLQkJY2FzZSBSUENfQVVUSF9HU1M6Ci0JCQlyZXQgPSBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKGNscCwgcnFzdHApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSBTVkNfREVOSUVEOworCWNhc2UgUlBDX0FVVEhfTlVMTDoKKwkJaWYgKHJxc3RwLT5ycV9wcm9jICE9IENCX05VTEwpCisJCQlyZXR1cm4gU1ZDX0RST1A7CisJCWJyZWFrOworCWNhc2UgUlBDX0FVVEhfR1NTOgorCQkvKiBObyBSUENfQVVUSF9HU1Mgc3VwcG9ydCB5ZXQgaW4gTkZTdjQuMSAqLworCQkgaWYgKHN2Y19pc19iYWNrY2hhbm5lbChycXN0cCkpCisJCQlyZXR1cm4gU1ZDX0RST1A7CiAJfQotCW5mc19wdXRfY2xpZW50KGNscCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gU1ZDX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmggYi9mcy9uZnMvY2FsbGJhY2suaAppbmRleCBkM2I0NGY5Li40NmQ5M2NlIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suaAorKysgYi9mcy9uZnMvY2FsbGJhY2suaApAQCAtNyw2ICs3LDcgQEAKICAqLwogI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19DQUxMQkFDS19ICiAjZGVmaW5lIF9fTElOVVhfRlNfTkZTX0NBTExCQUNLX0gKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CiAKICNkZWZpbmUgTkZTNF9DQUxMQkFDSyAweDQwMDAwMDAwCiAjZGVmaW5lIE5GUzRfQ0FMTEJBQ0tfWERSU0laRSAyMDQ4CkBAIC0zNyw3ICszOCw2IEBACiBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSB7CiAJX19iZTMyCQkJZHJjX3N0YXR1czsKIAlzdHJ1Y3QgbmZzX2NsaWVudAkqY2xwOwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAkqc3ZjX3NpZDsgLyogdjQuMSBjYWxsYmFjayBzZXJ2aWNlIHNlc3Npb25pZCAqLwogfTsKIAogc3RydWN0IGNiX2NvbXBvdW5kX2hkcl9hcmcgewpAQCAtMTY4LDcgKzE2OCw3IEBACiBleHRlcm4gdm9pZCBuZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcyk7CiBleHRlcm4gdm9pZCBuZnM0X2NiX3Rha2Vfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KLQorZXh0ZXJuIGludCBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBzdmNfcnFzdCAqKTsKIGV4dGVybiBfX2JlMzIgbmZzNF9jYWxsYmFja19nZXRhdHRyKHN0cnVjdCBjYl9nZXRhdHRyYXJncyAqYXJncywKIAkJCQkgICAgc3RydWN0IGNiX2dldGF0dHJyZXMgKnJlcywKIAkJCQkgICAgc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCA0YmI5MWNiLi44OTU4NzU3IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTM3MywxNyArMzczLDExIEBACiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIAlpbnQgaTsKLQlfX2JlMzIgc3RhdHVzOworCV9fYmUzMiBzdGF0dXMgPSBodG9ubChORlM0RVJSX0JBRFNFU1NJT04pOwogCiAJY3BzLT5jbHAgPSBOVUxMOwogCi0Jc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURTRVNTSU9OKTsKLQkvKiBJbmNvbWluZyBzZXNzaW9uIG11c3QgbWF0Y2ggdGhlIGNhbGxiYWNrIHNlc3Npb24gKi8KLQlpZiAobWVtY21wKCZhcmdzLT5jc2Ffc2Vzc2lvbmlkLCBjcHMtPnN2Y19zaWQsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKQotCQlnb3RvIG91dDsKLQotCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLAotCQkJCQkgJmFyZ3MtPmNzYV9zZXNzaW9uaWQsIDEpOworCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLCAmYXJncy0+Y3NhX3Nlc3Npb25pZCk7CiAJaWYgKGNscCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtNDE0LDkgKzQwOCw5IEBACiAJcmVzLT5jc3JfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCXJlcy0+Y3NyX3RhcmdldF9oaWdoZXN0c2xvdGlkID0gTkZTNDFfQkNfTUFYX0NBTExCQUNLUyAtIDE7CiAJbmZzNF9jYl90YWtlX3Nsb3QoY2xwKTsKLQljcHMtPmNscCA9IGNscDsgLyogcHV0IGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQgKi8KIAogb3V0OgorCWNwcy0+Y2xwID0gY2xwOyAvKiBwdXQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZCAqLwogCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jc2FfbnJjbGlzdHM7IGkrKykKIAkJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHNbaV0ucmNsX3JlZmNhbGxzKTsKIAlrZnJlZShhcmdzLT5jc2FfcmNsaXN0cyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKaW5kZXggMjMxMTJjMi4uMTRlMGY5MyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jCisrKyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwpAQCAtNzk0LDEwICs3OTQsOSBAQAogCiAJaWYgKGhkcl9hcmcubWlub3J2ZXJzaW9uID09IDApIHsKIAkJY3BzLmNscCA9IG5mczRfZmluZF9jbGllbnRfaWRlbnQoaGRyX2FyZy5jYl9pZGVudCk7Ci0JCWlmICghY3BzLmNscCkKKwkJaWYgKCFjcHMuY2xwIHx8ICFjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKGNwcy5jbHAsIHJxc3RwKSkKIAkJCXJldHVybiBycGNfZHJvcF9yZXBseTsKLQl9IGVsc2UKLQkJY3BzLnN2Y19zaWQgPSBiY194cHJ0X3NpZChycXN0cCk7CisJfQogCiAJaGRyX3Jlcy50YWdsZW4gPSBoZHJfYXJnLnRhZ2xlbjsKIAloZHJfcmVzLnRhZyA9IGhkcl9hcmcudGFnOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDE5MmYyZjguLmJkM2NhMzIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTEyMDYsMTYgKzEyMDYsMTEgQEAKICAqIEZvciBDQl9DT01QT1VORCBjYWxscywgZmluZCBhIGNsaWVudCBieSBJUCBhZGRyZXNzLCBwcm90b2NvbCB2ZXJzaW9uLAogICogbWlub3J2ZXJzaW9uLCBhbmQgc2Vzc2lvbklECiAgKgotICogQ1JFQVRFX1NFU1NJT04gdHJpZ2dlcnMgYSBDQl9OVUxMIHBpbmcgZnJvbSBzZXJ2ZXJzLiBUaGUgY2FsbGJhY2sgc2VydmljZQotICogc2Vzc2lvbmlkIGNhbiBvbmx5IGJlIHNldCBhZnRlciB0aGUgQ1JFQVRFX1NFU1NJT04gcmV0dXJuLCBzbyBhIENCX05VTEwKLSAqIGNhbiBhcnJpdmUgYmVmb3JlIHRoZSBjYWxsYmFjayBzZXNzaW9uaWQgaXMgc2V0LiBGb3IgQ0JfTlVMTCBjYWxscywKLSAqIGZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcyBwcm90b2NvbCB2ZXJzaW9uLCBhbmQgbWlub3J2ZXJzaW9uLgotICoKICAqIFJldHVybnMgTlVMTCBpZiBubyBzdWNoIGNsaWVudAogICovCiBzdHJ1Y3QgbmZzX2NsaWVudCAqCiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCwgaW50IGlzX2NiX2NvbXBvdW5kKQorCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIApAQCAtMTIyNyw5ICsxMjIyLDkgQEAKIAkJaWYgKCFuZnM0X2hhc19zZXNzaW9uKGNscCkpCiAJCQljb250aW51ZTsKIAotCQkvKiBNYXRjaCBzZXNzaW9uaWQgdW5sZXNzIGNiX251bGwgY2FsbCovCi0JCWlmIChpc19jYl9jb21wb3VuZCAmJiAobWVtY21wKGNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAotCQkgICAgc2lkLT5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSAhPSAwKSkKKwkJLyogTWF0Y2ggc2Vzc2lvbmlkKi8KKwkJaWYgKG1lbWNtcChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKKwkJICAgIHNpZC0+ZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOwpAQCAtMTI0NCw3ICsxMjM5LDcgQEAKIAogc3RydWN0IG5mc19jbGllbnQgKgogbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQsIGludCBpc19jYl9jb21wb3VuZCkKKwkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKaW5kZXggMzY0ZTQzMi4uYmJiYzZiZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uYworKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCkBAIC0yMyw4ICsyMyw2IEBACiAKIHN0YXRpYyB2b2lkIG5mc19kb19mcmVlX2RlbGVnYXRpb24oc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uKQogewotCWlmIChkZWxlZ2F0aW9uLT5jcmVkKQotCQlwdXRfcnBjY3JlZChkZWxlZ2F0aW9uLT5jcmVkKTsKIAlrZnJlZShkZWxlZ2F0aW9uKTsKIH0KIApAQCAtMzcsNiArMzUsMTAgQEAKIAogc3RhdGljIHZvaWQgbmZzX2ZyZWVfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24pCiB7CisJaWYgKGRlbGVnYXRpb24tPmNyZWQpIHsKKwkJcHV0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CisJCWRlbGVnYXRpb24tPmNyZWQgPSBOVUxMOworCX0KIAljYWxsX3JjdSgmZGVsZWdhdGlvbi0+cmN1LCBuZnNfZnJlZV9kZWxlZ2F0aW9uX2NhbGxiYWNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGU2YWNlMGQuLjk5NDNhNzUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTQwNywxNSArNDA3LDE4IEBACiAJCXBvcyArPSB2ZWMtPmlvdl9sZW47CiAJfQogCisJLyoKKwkgKiBJZiBubyBieXRlcyB3ZXJlIHN0YXJ0ZWQsIHJldHVybiB0aGUgZXJyb3IsIGFuZCBsZXQgdGhlCisJICogZ2VuZXJpYyBsYXllciBoYW5kbGUgdGhlIGNvbXBsZXRpb24uCisJICovCisJaWYgKHJlcXVlc3RlZF9ieXRlcyA9PSAwKSB7CisJCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CisJCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogLUVJTzsKKwl9CisKIAlpZiAocHV0X2RyZXEoZHJlcSkpCiAJCW5mc19kaXJlY3RfY29tcGxldGUoZHJlcSk7Ci0KLQlpZiAocmVxdWVzdGVkX2J5dGVzICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5mc19kaXJlY3RfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LApAQCAtODQxLDE1ICs4NDQsMTggQEAKIAkJcG9zICs9IHZlYy0+aW92X2xlbjsKIAl9CiAKKwkvKgorCSAqIElmIG5vIGJ5dGVzIHdlcmUgc3RhcnRlZCwgcmV0dXJuIHRoZSBlcnJvciwgYW5kIGxldCB0aGUKKwkgKiBnZW5lcmljIGxheWVyIGhhbmRsZSB0aGUgY29tcGxldGlvbi4KKwkgKi8KKwlpZiAocmVxdWVzdGVkX2J5dGVzID09IDApIHsKKwkJbmZzX2RpcmVjdF9yZXFfcmVsZWFzZShkcmVxKTsKKwkJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiAtRUlPOworCX0KKwogCWlmIChwdXRfZHJlcShkcmVxKSkKIAkJbmZzX2RpcmVjdF93cml0ZV9jb21wbGV0ZShkcmVxLCBkcmVxLT5pbm9kZSk7Ci0KLQlpZiAocmVxdWVzdGVkX2J5dGVzICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5mc19kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggZDg1MTI0Mi4uMWNjNjAwZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTg4MSw5ICs4ODEsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBuZnNfd2NjX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mc193Y2NfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKQpAQCAtODkxLDI1ICs4OTIsMzIgQEAKIAkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CiAJLyogSWYgd2UgaGF2ZSBhdG9taWMgV0NDIGRhdGEsIHdlIG1heSB1cGRhdGUgc29tZSBhdHRyaWJ1dGVzICovCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDVElNRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DVElNRSkKLQkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5wcmVfY3RpbWUpKQotCQkJbWVtY3B5KCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSwgc2l6ZW9mKGlub2RlLT5pX2N0aW1lKSk7CisJCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+cHJlX2N0aW1lKSkgeworCQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKKwkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCX0KIAogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFTVRJTUUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpCiAJCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+cHJlX210aW1lKSkgewotCQkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7Ci0JCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVTSVpFKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpCiAJCQkmJiBpX3NpemVfcmVhZChpbm9kZSkgPT0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5wcmVfc2l6ZSkKLQkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKQotCQkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKKwkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKSB7CisJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMjIzLDcgKzEyMzEsNyBAQAogCQkJfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7CiAKIAkvKiBEbyBhdG9taWMgd2VhayBjYWNoZSBjb25zaXN0ZW5jeSB1cGRhdGVzICovCi0JbmZzX3djY191cGRhdGVfaW5vZGUoaW5vZGUsIGZhdHRyKTsKKwlpbnZhbGlkIHw9IG5mc193Y2NfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CiAKIAkvKiBNb3JlIGNhY2hlIGNvbnNpc3RlbmN5IGNoZWNrcyAqLwogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggNDY0NGYwNC4uY2Y5ZmRiZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTEzMyw4ICsxMzMsNyBAQAogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2ZpbmRfY2xpZW50X25vX2lkZW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzNF9maW5kX2NsaWVudF9pZGVudChpbnQpOwogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICoKLW5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKiwKLQkJCSAgIGludCk7CituZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IG5mczRfc2Vzc2lvbmlkICopOwogZXh0ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfY3JlYXRlX3NlcnZlcigKIAkJCQkJY29uc3Qgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqLAogCQkJCQlzdHJ1Y3QgbmZzX2ZoICopOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggOWY4OGM1Zi4uMjc0MzQyNyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC0zMTEsOCArMzExLDggQEAKIAlpZiAoIW5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwgTkZTX0NBUF9BQ0xTKSkKIAkJZ290byBvdXQ7CiAKLQkvKiBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlLCBiZWNhdXNlIFhEUiBtYXJzaGFsbGluZyBjYW4gb25seQotCSAgIHJldHVybiAtRU5PTUVNLiAqLworCS8qIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSBYRFIgbWFyc2hhbGxpbmcgZG9lcyBub3QKKwkgKiByZXR1cm4gYW55IHJlc3VsdHMsIGl0IEJVR3MuICovCiAJc3RhdHVzID0gLUVOT1NQQzsKIAlpZiAoYWNsICE9IE5VTEwgJiYgYWNsLT5hX2NvdW50ID4gTkZTX0FDTF9NQVhfRU5UUklFUykKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3hkci5jIGIvZnMvbmZzL25mczN4ZHIuYwppbmRleCAwMWM1ZThiLi4xODNjNmIxIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3hkci5jCisrKyBiL2ZzL25mcy9uZnMzeGRyLmMKQEAgLTEzMjgsMTAgKzEzMjgsMTMgQEAKIAogCWVuY29kZV9uZnNfZmgzKHhkciwgTkZTX0ZIKGFyZ3MtPmlub2RlKSk7CiAJZW5jb2RlX3VpbnQzMih4ZHIsIGFyZ3MtPm1hc2spOwotCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKLQkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CiAKIAliYXNlID0gcmVxLT5ycV9zbGVuOworCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKKwkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CisJZWxzZQorCQl4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIE5GU19BQ0xfSU5MSU5FX0JVRlNJWkUpOworCiAJZXJyb3IgPSBuZnNhY2xfZW5jb2RlKHhkci0+YnVmLCBiYXNlLCBhcmdzLT5pbm9kZSwKIAkJCSAgICAoYXJncy0+bWFzayAmIE5GU19BQ0wpID8KIAkJCSAgICBhcmdzLT5hY2xfYWNjZXNzIDogTlVMTCwgMSwgMCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCmluZGV4IDUxZmU2NGEuLmY1YzliMTIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAogCS8qIGlwdjYgbGVuZ3RoIHBsdXMgcG9ydCBpcyBsZWdhbCAqLwogCWlmIChybGVuID4gSU5FVDZfQUREUlNUUkxFTiArIDgpIHsKLQkJZHByaW50aygiJXMgSW52YWxpZCBhZGRyZXNzLCBsZW5ndGggJWRcbiIsIF9fZnVuY19fLAorCQlkcHJpbnRrKCIlczogSW52YWxpZCBhZGRyZXNzLCBsZW5ndGggJWRcbiIsIF9fZnVuY19fLAogCQkJcmxlbik7CiAJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC0yMjUsNiArMjI1LDExIEBACiAJLyogcmVwbGFjZSB0aGUgcG9ydCBkb3RzIHdpdGggZGFzaGVzIGZvciB0aGUgaW40X3B0b24oKSBkZWxpbWl0ZXIqLwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJY2hhciAqcmVzID0gc3RycmNocihidWYsICcuJyk7CisJCWlmICghcmVzKSB7CisJCQlkcHJpbnRrKCIlczogRmFpbGVkIGZpbmRpbmcgZXhwZWN0ZWQgZG90cyBpbiBwb3J0XG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KIAkJKnJlcyA9ICctJzsKIAl9CiAKQEAgLTI0MCw3ICsyNDUsNyBAQAogCXBvcnQgPSBodG9ucygodG1wWzBdIDw8IDgpIHwgKHRtcFsxXSkpOwogCiAJZHMgPSBuZnM0X3BuZnNfZHNfYWRkKGlub2RlLCBpcF9hZGRyLCBwb3J0KTsKLQlkcHJpbnRrKCIlcyBEZWNvZGVkIGFkZHJlc3MgYW5kIHBvcnQgJXNcbiIsIF9fZnVuY19fLCBidWYpOworCWRwcmludGsoIiVzOiBEZWNvZGVkIGFkZHJlc3MgYW5kIHBvcnQgJXNcbiIsIF9fZnVuY19fLCBidWYpOwogb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKIG91dF9lcnI6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDlkOTkyYjAuLjc4OTM2YTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KIAogI2luY2x1ZGUgIm5mczRfZnMuaCIKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCkBAIC00NTcyLDI3ICs0NTczLDE2IEBACiAJKnAgPSBodG9ubCgodTMyKWNscC0+Y2xfYm9vdF90aW1lLnR2X25zZWMpOwogCWFyZ3MudmVyaWZpZXIgPSAmdmVyaWZpZXI7CiAKLQl3aGlsZSAoMSkgewotCQlhcmdzLmlkX2xlbiA9IHNjbnByaW50ZihhcmdzLmlkLCBzaXplb2YoYXJncy5pZCksCi0JCQkJCSIlcy8lcyAldSIsCi0JCQkJCWNscC0+Y2xfaXBhZGRyLAotCQkJCQlycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LAotCQkJCQkJCSBSUENfRElTUExBWV9BRERSKSwKLQkJCQkJY2xwLT5jbF9pZF91bmlxdWlmaWVyKTsKKwlhcmdzLmlkX2xlbiA9IHNjbnByaW50ZihhcmdzLmlkLCBzaXplb2YoYXJncy5pZCksCisJCQkJIiVzLyVzLiVzLyV1IiwKKwkJCQljbHAtPmNsX2lwYWRkciwKKwkJCQlpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsCisJCQkJaW5pdF91dHNuYW1lKCktPmRvbWFpbm5hbWUsCisJCQkJY2xwLT5jbF9ycGNjbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcik7CiAKLQkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7Ci0KLQkJaWYgKHN0YXR1cyAhPSAtTkZTNEVSUl9DTElEX0lOVVNFKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHNpZ25hbGxlZCgpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCsrY2xwLT5jbF9pZF91bmlxdWlmaWVyID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlzdGF0dXMgPSBuZnM0X2NoZWNrX2NsX2V4Y2hhbmdlX2ZsYWdzKGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MpOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBuZnM0X2NoZWNrX2NsX2V4Y2hhbmdlX2ZsYWdzKGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MpOwogCWRwcmludGsoIjwtLSAlcyBzdGF0dXM9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jCmluZGV4IDIzMzZkNTMuLmU2NzQyYjUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYworKysgYi9mcy9uZnMvbmZzNHN0YXRlLmMKQEAgLTIzMiwxMiArMjMyLDYgQEAKIAlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChjbHApOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTZXNzaW9uaWQgbm90IHNldC4gTm8gY2FsbGJhY2sgc2VydmljZVxuIik7Ci0JCW5mc19jYWxsYmFja19kb3duKDEpOwotCQlzdGF0dXMgPSAwOwotCX0KIAluZnM0MV9zZXR1cF9zdGF0ZV9yZW5ld2FsKGNscCk7CiAJbmZzX21hcmtfY2xpZW50X3JlYWR5KGNscCwgTkZTX0NTX1JFQURZKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDJhYjhlNWMuLjRlMmMxNjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNjA4NiwxMSArNjA4NiwxMSBAQAogCV9fYmUzMiAqcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJaWYgKHVubGlrZWx5KCFwKSkKIAkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JaWYgKCFudG9obCgqcCsrKSkgeworCWlmICgqcCA9PSB4ZHJfemVybykgewogCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAkJaWYgKHVubGlrZWx5KCFwKSkKIAkJCWdvdG8gb3V0X292ZXJmbG93OwotCQlpZiAoIW50b2hsKCpwKyspKQorCQlpZiAoKnAgPT0geGRyX3plcm8pCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJZW50cnktPmVvZiA9IDE7CiAJCXJldHVybiAtRUJBRENPT0tJRTsKQEAgLTYxMDEsNyArNjEwMSw3IEBACiAJCWdvdG8gb3V0X292ZXJmbG93OwogCWVudHJ5LT5wcmV2X2Nvb2tpZSA9IGVudHJ5LT5jb29raWU7CiAJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmVudHJ5LT5jb29raWUpOwotCWVudHJ5LT5sZW4gPSBudG9obCgqcCsrKTsKKwllbnRyeS0+bGVuID0gYmUzMl90b19jcHVwKHApOwogCiAJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgZW50cnktPmxlbik7CiAJaWYgKHVubGlrZWx5KCFwKSkKQEAgLTYxMzIsOSArNjEzMiw2IEBACiAJaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9UWVBFKQogCQllbnRyeS0+ZF90eXBlID0gbmZzX3Vtb2RlX3RvX2R0eXBlKGVudHJ5LT5mYXR0ci0+bW9kZSk7CiAKLQlpZiAodmVyaWZ5X2F0dHJfbGVuKHhkciwgcCwgbGVuKSA8IDApCi0JCWdvdG8gb3V0X292ZXJmbG93OwotCiAJcmV0dXJuIDA7CiAKIG91dF9vdmVyZmxvdzoKZGlmZiAtLWdpdCBhL2ZzL25mcy9wbmZzLmMgYi9mcy9uZnMvcG5mcy5jCmluZGV4IGJjNDA4OTcuLjFiMWJjMWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wbmZzLmMKKysrIGIvZnMvbmZzL3BuZnMuYwpAQCAtOTUxLDcgKzk1MSw3IEBACiB7CiAJc3RydWN0IHBuZnNfZGV2aWNlaWRfY2FjaGUgKmxvY2FsID0gY2xwLT5jbF9kZXZpZF9jYWNoZTsKIAotCWRwcmludGsoIi0tPiAlcyBjbF9kZXZpZF9jYWNoZSAlcFxuIiwgX19mdW5jX18sIGNscC0+Y2xfZGV2aWRfY2FjaGUpOworCWRwcmludGsoIi0tPiAlcyAoeyVkfSlcbiIsIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmbG9jYWwtPmRjX3JlZikpOwogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZsb2NhbC0+ZGNfcmVmLCAmY2xwLT5jbF9sb2NrKSkgewogCQlpbnQgaTsKIAkJLyogVmVyaWZ5IGNhY2hlIGlzIGVtcHR5ICovCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDEwZDY0OGUuLmM4Mjc4ZjQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC05MzIsNyArOTMyLDcgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CiAJCWRhdGEgPSBsaXN0X2VudHJ5KGxpc3QubmV4dCwgc3RydWN0IG5mc193cml0ZV9kYXRhLCBwYWdlcyk7CiAJCWxpc3RfZGVsKCZkYXRhLT5wYWdlcyk7Ci0JCW5mc193cml0ZWRhdGFfcmVsZWFzZShkYXRhKTsKKwkJbmZzX3dyaXRlZGF0YV9mcmVlKGRhdGEpOwogCX0KIAluZnNfcmVkaXJ0eV9yZXF1ZXN0KHJlcSk7CiAJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9uZnNfY29tbW9uL25mc2FjbC5jIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwppbmRleCBmYzFjNTI1Li44NGMyN2Q2IDEwMDY0NAotLS0gYS9mcy9uZnNfY29tbW9uL25mc2FjbC5jCisrKyBiL2ZzL25mc19jb21tb24vbmZzYWNsLmMKQEAgLTQyLDYgKzQyLDExIEBACiAJZ2lkX3QgZ2lkOwogfTsKIAorc3RydWN0IG5mc2FjbF9zaW1wbGVfYWNsIHsKKwlzdHJ1Y3QgcG9zaXhfYWNsIGFjbDsKKwlzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5IGFjZVs0XTsKK307CisKIHN0YXRpYyBpbnQKIHhkcl9uZnNhY2VfZW5jb2RlKHN0cnVjdCB4ZHJfYXJyYXkyX2Rlc2MgKmRlc2MsIHZvaWQgKmVsZW0pCiB7CkBAIC03Miw5ICs3NywyMCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQKLW5mc2FjbF9lbmNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgZW5jb2RlX2VudHJpZXMsIGludCB0eXBlZmxhZykKKy8qKgorICogbmZzYWNsX2VuY29kZSAtIEVuY29kZSBhbiBORlN2MyBBQ0wKKyAqCisgKiBAYnVmOiBkZXN0aW5hdGlvbiB4ZHJfYnVmIHRvIGNvbnRhaW4gWERSIGVuY29kZWQgQUNMCisgKiBAYmFzZTogYnl0ZSBvZmZzZXQgaW4geGRyX2J1ZiB3aGVyZSBYRFInZCBBQ0wgYmVnaW5zCisgKiBAaW5vZGU6IGlub2RlIG9mIGZpbGUgd2hvc2UgQUNMIHRoaXMgaXMKKyAqIEBhY2w6IHBvc2l4X2FjbCB0byBlbmNvZGUKKyAqIEBlbmNvZGVfZW50cmllczogd2hldGhlciB0byBlbmNvZGUgQUNFcyBhcyB3ZWxsCisgKiBAdHlwZWZsYWc6IEFDTCB0eXBlOiBORlNfQUNMX0RFRkFVTFQgb3IgemVybworICoKKyAqIFJldHVybnMgc2l6ZSBvZiBlbmNvZGVkIEFDTCBpbiBieXRlcyBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICovCitpbnQgbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKQogewogCWludCBlbnRyaWVzID0gKGFjbCAmJiBhY2wtPmFfY291bnQpID8gbWF4X3QoaW50LCBhY2wtPmFfY291bnQsIDQpIDogMDsKIAlzdHJ1Y3QgbmZzYWNsX2VuY29kZV9kZXNjIG5mc2FjbF9kZXNjID0gewpAQCAtODgsMTcgKzEwNCwyMiBAQAogCQkudWlkID0gaW5vZGUtPmlfdWlkLAogCQkuZ2lkID0gaW5vZGUtPmlfZ2lkLAogCX07CisJc3RydWN0IG5mc2FjbF9zaW1wbGVfYWNsIGFjbGJ1ZjsKIAlpbnQgZXJyOwotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDIgPSBOVUxMOwogCiAJaWYgKGVudHJpZXMgPiBORlNfQUNMX01BWF9FTlRSSUVTIHx8CiAJICAgIHhkcl9lbmNvZGVfd29yZChidWYsIGJhc2UsIGVudHJpZXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZW5jb2RlX2VudHJpZXMgJiYgYWNsICYmIGFjbC0+YV9jb3VudCA9PSAzKSB7Ci0JCS8qIEZha2UgdXAgYW4gQUNMX01BU0sgZW50cnkuICovCi0JCWFjbDIgPSBwb3NpeF9hY2xfYWxsb2MoNCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghYWNsMikKLQkJCXJldHVybiAtRU5PTUVNOworCQlzdHJ1Y3QgcG9zaXhfYWNsICphY2wyID0gJmFjbGJ1Zi5hY2w7CisKKwkJLyogQXZvaWQgdGhlIHVzZSBvZiBwb3NpeF9hY2xfYWxsb2MoKS4gIG5mc2FjbF9lbmNvZGUoKSBpcworCQkgKiBpbnZva2VkIGluIGNvbnRleHRzIHdoZXJlIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpcworCQkgKiBmYXRhbC4gIEZvcnR1bmF0ZWx5IHRoaXMgZmFrZSBBQ0wgaXMgc21hbGwgZW5vdWdoIHRvCisJCSAqIGNvbnN0cnVjdCBvbiB0aGUgc3RhY2suICovCisJCW1lbXNldChhY2wyLCAwLCBzaXplb2YoYWNsMikpOworCQlwb3NpeF9hY2xfaW5pdChhY2wyLCA0KTsKKwogCQkvKiBJbnNlcnQgZW50cmllcyBpbiBjYW5vbmljYWwgb3JkZXI6IG90aGVyIG9yZGVycyBzZWVtCiAJCSB0byBjb25mdXNlIFNvbGFyaXMgVnhGUy4gKi8KIAkJYWNsMi0+YV9lbnRyaWVzWzBdID0gYWNsLT5hX2VudHJpZXNbMF07ICAvKiBBQ0xfVVNFUl9PQkogKi8KQEAgLTEwOSw4ICsxMzAsNiBAQAogCQluZnNhY2xfZGVzYy5hY2wgPSBhY2wyOwogCX0KIAllcnIgPSB4ZHJfZW5jb2RlX2FycmF5MihidWYsIGJhc2UgKyA0LCAmbmZzYWNsX2Rlc2MuZGVzYyk7Ci0JaWYgKGFjbDIpCi0JCXBvc2l4X2FjbF9yZWxlYXNlKGFjbDIpOwogCWlmICghZXJyKQogCQllcnIgPSA4ICsgbmZzYWNsX2Rlc2MuZGVzYy5lbGVtX3NpemUgKgogCQkJICBuZnNhY2xfZGVzYy5kZXNjLmFycmF5X2xlbjsKQEAgLTIyNCw5ICsyNDMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50Ci1uZnNhY2xfZGVjb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKmFjbGNudCwKLQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCkKKy8qKgorICogbmZzYWNsX2RlY29kZSAtIERlY29kZSBhbiBORlN2MyBBQ0wKKyAqCisgKiBAYnVmOiB4ZHJfYnVmIGNvbnRhaW5pbmcgWERSJ2QgQUNMIGRhdGEgdG8gZGVjb2RlCisgKiBAYmFzZTogYnl0ZSBvZmZzZXQgaW4geGRyX2J1ZiB3aGVyZSBYRFInZCBBQ0wgYmVnaW5zCisgKiBAYWNsY250OiBjb3VudCBvZiBBQ0VzIGluIGRlY29kZWQgcG9zaXhfYWNsCisgKiBAcGFjbDogYnVmZmVyIGluIHdoaWNoIHRvIHBsYWNlIGRlY29kZWQgcG9zaXhfYWNsCisgKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNvZGVkIEFDTCBpbiBieXRlcywgb3IgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4KKyAqLworaW50IG5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAorCQkgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQogewogCXN0cnVjdCBuZnNhY2xfZGVjb2RlX2Rlc2MgbmZzYWNsX2Rlc2MgPSB7CiAJCS5kZXNjID0gewpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3N1cGVyLmMgYi9mcy9uaWxmczIvc3VwZXIuYwppbmRleCAwOTk0ZjZhNy4uNThmZDcwNyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3N1cGVyLmMKKysrIGIvZnMvbmlsZnMyL3N1cGVyLmMKQEAgLTcwNCw3ICs3MDQsOCBAQAogCXNicFswXS0+c19zdGF0ZSA9CiAJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHNicFswXS0+c19zdGF0ZSkgJiB+TklMRlNfVkFMSURfRlMpOwogCS8qIHN5bmNocm9uaXplIHNicFsxXSB3aXRoIHNicFswXSAqLwotCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7CisJaWYgKHNicFsxXSkKKwkJbWVtY3B5KHNicFsxXSwgc2JwWzBdLCBuaWxmcy0+bnNfc2JzaXplKTsKIAlyZXR1cm4gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgTklMRlNfU0JfQ09NTUlUX0FMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IGI1NzJiNjcuLjMyNmU3NDcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogbWZ0LmMgLSBOVEZTIGtlcm5lbCBtZnQgcmVjb3JkIG9wZXJhdGlvbnMuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDExIEFudG9uIEFsdGFwYXJtYWtvdiBhbmQgVHV4ZXJhIEluYy4KICAqIENvcHlyaWdodCAoYykgMjAwMiBSaWNoYXJkIFJ1c3NvbgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNTc2LDYgKzI1NzYsOCBAQAogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlpZiAoYmFzZV9uaSkgeworCQlNRlRfUkVDT1JEICptX3RtcDsKKwogCQkvKgogCQkgKiBTZXR1cCB0aGUgYmFzZSBtZnQgcmVjb3JkIGluIHRoZSBleHRlbnQgbWZ0IHJlY29yZC4gIFRoaXMKIAkJICogY29tcGxldGVzIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgZXh0ZW50IG1mdCByZWNvcmQKQEAgLTI1ODgsMTEgKzI1OTAsMTEgQEAKIAkJICogYXR0YWNoIGl0IHRvIHRoZSBiYXNlIGlub2RlIEBiYXNlX25pIGFuZCBtYXAsIHBpbiwgYW5kIGxvY2sKIAkJICogaXRzLCBpLmUuIHRoZSBhbGxvY2F0ZWQsIG1mdCByZWNvcmQuCiAJCSAqLwotCQltID0gbWFwX2V4dGVudF9tZnRfcmVjb3JkKGJhc2VfbmksIGJpdCwgJm5pKTsKLQkJaWYgKElTX0VSUihtKSkgeworCQltX3RtcCA9IG1hcF9leHRlbnRfbWZ0X3JlY29yZChiYXNlX25pLCBiaXQsICZuaSk7CisJCWlmIChJU19FUlIobV90bXApKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gbWFwIGFsbG9jYXRlZCBleHRlbnQgIgogCQkJCQkibWZ0IHJlY29yZCAweCVsbHguIiwgKGxvbmcgbG9uZyliaXQpOwotCQkJZXJyID0gUFRSX0VSUihtKTsKKwkJCWVyciA9IFBUUl9FUlIobV90bXApOwogCQkJLyogU2V0IHRoZSBtZnQgcmVjb3JkIGl0c2VsZiBub3QgaW4gdXNlLiAqLwogCQkJbS0+ZmxhZ3MgJj0gY3B1X3RvX2xlMTYoCiAJCQkJCX5sZTE2X3RvX2NwdShNRlRfUkVDT1JEX0lOX1VTRSkpOwpAQCAtMjYwMyw2ICsyNjA1LDcgQEAKIAkJCW50ZnNfdW5tYXBfcGFnZShwYWdlKTsKIAkJCWdvdG8gdW5kb19tZnRibXBfYWxsb2M7CiAJCX0KKwkJQlVHX09OKG0gIT0gbV90bXApOwogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhlIGFsbG9jYXRlZCBtZnQgcmVjb3JkIGlzIHdyaXR0ZW4gb3V0IHRvIGRpc2suCiAJCSAqIE5vIG5lZWQgdG8gc2V0IHRoZSBpbm9kZSBkaXJ0eSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgZ29pbmcKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBlNTIzODllLi41YTJjNmViIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC03OTAsNiArNzkwLDggQEAKIAogCS8qIFBpY2sgdXAgdGhlIGZpbHAgZnJvbSB0aGUgb3BlbiBpbnRlbnQgKi8KIAlmaWxwID0gbmQtPmludGVudC5vcGVuLmZpbGU7CisJbmQtPmludGVudC5vcGVuLmZpbGUgPSBOVUxMOworCiAJLyogSGFzIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpc2VkIHRoZSBmaWxlIGZvciB1cz8gKi8KIAlpZiAoZmlscC0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKSB7CiAJCXBhdGhfZ2V0KCZuZC0+cGF0aCk7CmRpZmYgLS1naXQgYS9mcy9wb3NpeF9hY2wuYyBiL2ZzL3Bvc2l4X2FjbC5jCmluZGV4IDM5ZGY5NWEuLmIxY2Y2YmYgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCitFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9pbml0KTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2Nsb25lKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX3ZhbGlkKTsKQEAgLTMyLDYgKzMzLDE2IEBACiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9wZXJtaXNzaW9uKTsKIAogLyoKKyAqIEluaXQgYSBmcmVzaCBwb3NpeF9hY2wKKyAqLwordm9pZAorcG9zaXhfYWNsX2luaXQoc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgY291bnQpCit7CisJYXRvbWljX3NldCgmYWNsLT5hX3JlZmNvdW50LCAxKTsKKwlhY2wtPmFfY291bnQgPSBjb3VudDsKK30KKworLyoKICAqIEFsbG9jYXRlIGEgbmV3IEFDTCB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMuCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKgpAQCAtNDAsMTAgKzUxLDggQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsKSArCiAJICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5KTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBrbWFsbG9jKHNpemUsIGZsYWdzKTsKLQlpZiAoYWNsKSB7Ci0JCWF0b21pY19zZXQoJmFjbC0+YV9yZWZjb3VudCwgMSk7Ci0JCWFjbC0+YV9jb3VudCA9IGNvdW50OwotCX0KKwlpZiAoYWNsKQorCQlwb3NpeF9hY2xfaW5pdChhY2wsIGNvdW50KTsKIAlyZXR1cm4gYWNsOwogfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2NvbnNvbGVzLmMgYi9mcy9wcm9jL2NvbnNvbGVzLmMKaW5kZXggZWFmYzIyYS4uYjcwMWVhYSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9jb25zb2xlcy5jCisrKyBiL2ZzL3Byb2MvY29uc29sZXMuYwpAQCAtNjcsNyArNjcsNyBAQAogCXN0cnVjdCBjb25zb2xlICpjb247CiAJbG9mZl90IG9mZiA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZShjb24pCiAJCWlmIChvZmYrKyA9PSAqcG9zKQogCQkJYnJlYWs7CkBAIC04NCw3ICs4NCw3IEBACiAKIHN0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY29uc29sZXNfb3AgPSB7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9ibG9jay5jIGIvZnMvc3F1YXNoZnMvYmxvY2suYwppbmRleCAyZmIyODgyLi44YWI0OGJjIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9ibG9jay5jCisrKyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKQEAgLTYzLDYgKzYzLDE0IEBACiAJCSpsZW5ndGggPSAodW5zaWduZWQgY2hhcikgYmgtPmJfZGF0YVsqb2Zmc2V0XSB8CiAJCQkodW5zaWduZWQgY2hhcikgYmgtPmJfZGF0YVsqb2Zmc2V0ICsgMV0gPDwgODsKIAkJKm9mZnNldCArPSAyOworCisJCWlmICgqb2Zmc2V0ID09IG1zYmxrLT5kZXZibGtzaXplKSB7CisJCQlwdXRfYmgoYmgpOworCQkJYmggPSBzYl9icmVhZChzYiwgKysoKmN1cl9pbmRleCkpOworCQkJaWYgKGJoID09IE5VTEwpCisJCQkJcmV0dXJuIE5VTEw7CisJCQkqb2Zmc2V0ID0gMDsKKwkJfQogCX0KIAogCXJldHVybiBiaDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYyBiL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYwppbmRleCA4NTY3NTZjLi5jNGViNDAwIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMKKysrIGIvZnMvc3F1YXNoZnMveHpfd3JhcHBlci5jCkBAIC05NSwxMiArOTUsNiBAQAogCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQogCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAotCQkJaWYgKGF2YWlsID09IDApIHsKLQkJCQlvZmZzZXQgPSAwOwotCQkJCXB1dF9iaChiaFtrKytdKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJc3RyZWFtLT5idWYuaW4gPSBiaFtrXS0+Yl9kYXRhICsgb2Zmc2V0OwogCQkJc3RyZWFtLT5idWYuaW5fc2l6ZSA9IGF2YWlsOwogCQkJc3RyZWFtLT5idWYuaW5fcG9zID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKaW5kZXggODE4YTVlMC4uNDY2MWFlMiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKKysrIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKQEAgLTgyLDEyICs4Miw2IEBACiAJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaFtrXSkpCiAJCQkJZ290byByZWxlYXNlX211dGV4OwogCi0JCQlpZiAoYXZhaWwgPT0gMCkgewotCQkJCW9mZnNldCA9IDA7Ci0JCQkJcHV0X2JoKGJoW2srK10pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAJCQlzdHJlYW0tPm5leHRfaW4gPSBiaFtrXS0+Yl9kYXRhICsgb2Zmc2V0OwogCQkJc3RyZWFtLT5hdmFpbF9pbiA9IGF2YWlsOwogCQkJb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDc0ZTE0OWUuLjdlOWRkNGMgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtMTc3LDYgKzE3NywxMSBAQAogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmcyA9IHMtPnNfdHlwZTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcy0+c19hY3RpdmUpKSB7CiAJCWZzLT5raWxsX3NiKHMpOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNhbGwgcmN1X2JhcnJpZXIgc28gYWxsIHRoZSBkZWxheWVkIHJjdSBmcmVlCisJCSAqIGlub2RlcyBhcmUgZmx1c2hlZCBiZWZvcmUgd2UgcmVsZWFzZSB0aGUgZnMgbW9kdWxlLgorCQkgKi8KKwkJcmN1X2JhcnJpZXIoKTsKIAkJcHV0X2ZpbGVzeXN0ZW0oZnMpOwogCQlwdXRfc3VwZXIocyk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGIwNmVkZTEuLmY1ZTJhMTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtOTg1LDEwICs5ODUsMjIgQEAKIAogCQkvKgogCQkgKiBFeHRlbnQgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGFwcHJvcHJpYXRlIGJsb2NrCi0JCSAqIHNpemUsIGlmIHNldCBhdCBhbGwuCisJCSAqIHNpemUsIGlmIHNldCBhdCBhbGwuIEl0IG11c3QgYWxzbyBiZSBzbWFsbGVyIHRoYW4gdGhlCisJCSAqIG1heGltdW0gZXh0ZW50IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlc3lzdGVtLgorCQkgKgorCQkgKiBBbHNvLCBmb3Igbm9uLXJlYWx0aW1lIGZpbGVzLCBsaW1pdCB0aGUgZXh0ZW50IHNpemUgaGludCB0bworCQkgKiBoYWxmIHRoZSBzaXplIG9mIHRoZSBBR3MgaW4gdGhlIGZpbGVzeXN0ZW0gc28gYWxpZ25tZW50CisJCSAqIGRvZXNuJ3QgcmVzdWx0IGluIGV4dGVudHMgbGFyZ2VyIHRoYW4gYW4gQUcuCiAJCSAqLwogCQlpZiAoZmEtPmZzeF9leHRzaXplICE9IDApIHsKLQkJCXhmc19leHRsZW5fdAlzaXplOworCQkJeGZzX2V4dGxlbl90ICAgIHNpemU7CisJCQl4ZnNfZnNibG9ja190ICAgZXh0c2l6ZV9mc2I7CisKKwkJCWV4dHNpemVfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBmYS0+ZnN4X2V4dHNpemUpOworCQkJaWYgKGV4dHNpemVfZnNiID4gTUFYRVhUTEVOKSB7CisJCQkJY29kZSA9IFhGU19FUlJPUihFSU5WQUwpOworCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfQogCiAJCQlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSB8fAogCQkJICAgICgobWFzayAmIEZTWF9YRkxBR1MpICYmCkBAIC05OTcsNiArMTAwOSwxMCBAQAogCQkJCSAgICAgICBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKIAkJCX0gZWxzZSB7CiAJCQkJc2l6ZSA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZTsKKwkJCQlpZiAoZXh0c2l6ZV9mc2IgPiBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAvIDIpIHsKKwkJCQkJY29kZSA9IFhGU19FUlJPUihFSU5WQUwpOworCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCQl9CiAJCQl9CiAKIAkJCWlmIChmYS0+ZnN4X2V4dHNpemUgJSBzaXplKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKaW5kZXggZjhlODU0Yi4uMjA2YTI4MSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwpAQCAtMTg2MywxMiArMTg2MywxNCBAQAogCXhmc19kcXVvdF90CSpkcXBvdXQ7CiAJeGZzX2RxdW90X3QJKmRxcDsKIAlpbnQJCXJlc3RhcnRzOworCWludAkJc3RhcnRhZ2FpbjsKIAogCXJlc3RhcnRzID0gMDsKIAlkcXBvdXQgPSBOVUxMOwogCiAJLyogbG9ja29yZGVyOiBoYXNoY2hhaW5sb2NrLCBmcmVlbGlzdGxvY2ssIG1wbGlzdGxvY2ssIGRxbG9jaywgZHFmbG9jayAqLwotc3RhcnRhZ2FpbjoKK2FnYWluOgorCXN0YXJ0YWdhaW4gPSAwOwogCW11dGV4X2xvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcXAsICZ4ZnNfR3FtLT5xbV9kcWZybGlzdCwgcV9mcmVlbGlzdCkgewpAQCAtMTg4NSwxMyArMTg4NywxMCBAQAogCQkJQVNTRVJUKCEgKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfSU5BQ1RJVkUpKTsKIAogCQkJdHJhY2VfeGZzX2RxcmVjbGFpbV93YW50KGRxcCk7Ci0KLQkJCXhmc19kcXVubG9jayhkcXApOwotCQkJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKLQkJCWlmICgrK3Jlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKLQkJCQlyZXR1cm4gTlVMTDsKIAkJCVhRTV9TVEFUU19JTkMoeHFtc3RhdHMueHNfcW1fZHF3YW50cyk7Ci0JCQlnb3RvIHN0YXJ0YWdhaW47CisJCQlyZXN0YXJ0cysrOworCQkJc3RhcnRhZ2FpbiA9IDE7CisJCQlnb3RvIGRxdW5sb2NrOwogCQl9CiAKIAkJLyoKQEAgLTE5MDYsMjMgKzE5MDUsMjAgQEAKIAkJCUFTU0VSVChsaXN0X2VtcHR5KCZkcXAtPnFfbXBsaXN0KSk7CiAJCQlsaXN0X2RlbF9pbml0KCZkcXAtPnFfZnJlZWxpc3QpOwogCQkJeGZzX0dxbS0+cW1fZHFmcmxpc3RfY250LS07Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJCWRxcG91dCA9IGRxcDsKIAkJCVhRTV9TVEFUU19JTkMoeHFtc3RhdHMueHNfcW1fZHFpbmFjdF9yZWNsYWltcyk7Ci0JCQlicmVhazsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQlBU1NFUlQoZHFwLT5xX2hhc2gpOwogCQlBU1NFUlQoIWxpc3RfZW1wdHkoJmRxcC0+cV9tcGxpc3QpKTsKIAogCQkvKgotCQkgKiBUcnkgdG8gZ3JhYiB0aGUgZmx1c2ggbG9jay4gSWYgdGhpcyBkcXVvdCBpcyBpbiB0aGUgcHJvY2VzcyBvZgotCQkgKiBnZXR0aW5nIGZsdXNoZWQgdG8gZGlzaywgd2UgZG9uJ3Qgd2FudCB0byByZWNsYWltIGl0LgorCQkgKiBUcnkgdG8gZ3JhYiB0aGUgZmx1c2ggbG9jay4gSWYgdGhpcyBkcXVvdCBpcyBpbiB0aGUgcHJvY2VzcworCQkgKiBvZiBnZXR0aW5nIGZsdXNoZWQgdG8gZGlzaywgd2UgZG9uJ3Qgd2FudCB0byByZWNsYWltIGl0LgogCQkgKi8KLQkJaWYgKCF4ZnNfZHFmbG9ja19ub3dhaXQoZHFwKSkgewotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoIXhmc19kcWZsb2NrX25vd2FpdChkcXApKQorCQkJZ290byBkcXVubG9jazsKIAogCQkvKgogCQkgKiBXZSBoYXZlIHRoZSBmbHVzaCBsb2NrIHNvIHdlIGtub3cgdGhhdCB0aGlzIGlzIG5vdCBpbiB0aGUKQEAgLTE5NDQsOCArMTk0MCw3IEBACiAJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCiAJCQkieGZzX3FtX2RxcmVjbGFpbTogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKIAkJCX0KLQkJCXhmc19kcXVubG9jayhkcXApOyAvKiBkcWZsdXNoIHVubG9ja3MgZHFmbG9jayAqLwotCQkJY29udGludWU7CisJCQlnb3RvIGRxdW5sb2NrOwogCQl9CiAKIAkJLyoKQEAgLTE5NjcsMTMgKzE5NjIsOCBAQAogCQkgKi8KIAkJaWYgKCFtdXRleF90cnlsb2NrKCZtcC0+bV9xdW90YWluZm8tPnFpX2RxbGlzdF9sb2NrKSkgewogCQkJcmVzdGFydHMrKzsKLQkJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwotCQkJeGZzX2RxZnVubG9jayhkcXApOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwotCQkJaWYgKHJlc3RhcnRzKysgPj0gWEZTX1FNX1JFQ0xBSU1fTUFYX1JFU1RBUlRTKQotCQkJCXJldHVybiBOVUxMOwotCQkJZ290byBzdGFydGFnYWluOworCQkJc3RhcnRhZ2FpbiA9IDE7CisJCQlnb3RvIHFodW5sb2NrOwogCQl9CiAKIAkJQVNTRVJUKGRxcC0+cV9ucmVmcyA9PSAwKTsKQEAgLTE5ODYsMTQgKzE5NzYsMjAgQEAKIAkJeGZzX0dxbS0+cW1fZHFmcmxpc3RfY250LS07CiAJCWRxcG91dCA9IGRxcDsKIAkJbXV0ZXhfdW5sb2NrKCZtcC0+bV9xdW90YWluZm8tPnFpX2RxbGlzdF9sb2NrKTsKK3FodW5sb2NrOgogCQltdXRleF91bmxvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKTsKIGRxZnVubG9jazoKIAkJeGZzX2RxZnVubG9jayhkcXApOworZHF1bmxvY2s6CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlpZiAoZHFwb3V0KQogCQkJYnJlYWs7CiAJCWlmIChyZXN0YXJ0cyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCi0JCQlyZXR1cm4gTlVMTDsKKwkJCWJyZWFrOworCQlpZiAoc3RhcnRhZ2FpbikgeworCQkJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKIAlyZXR1cm4gZHFwb3V0OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5oIGIvZnMveGZzL3hmc19hbGxvYy5oCmluZGV4IDBhYjU2YjMuLmQwYjNiYzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuaAorKysgYi9mcy94ZnMveGZzX2FsbG9jLmgKQEAgLTc1LDYgKzc1LDIyIEBACiAjZGVmaW5lIFhGU19BTExPQ19TRVRfQVNJREUobXApICAoNCArICgobXApLT5tX3NiLnNiX2FnY291bnQgKiA0KSkKIAogLyoKKyAqIFdoZW4gZGVjaWRpbmcgaG93IG11Y2ggc3BhY2UgdG8gYWxsb2NhdGUgb3V0IG9mIGFuIEFHLCB3ZSBsaW1pdCB0aGUKKyAqIGFsbG9jYXRpb24gbWF4aW11bSBzaXplIHRvIHRoZSBzaXplIHRoZSBBRy4gSG93ZXZlciwgd2UgY2Fubm90IHVzZSBhbGwgdGhlCisgKiBibG9ja3MgaW4gdGhlIEFHIC0gc29tZSBhcmUgcGVybWFuZW50bHkgdXNlZCBieSBtZXRhZGF0YS4gVGhlc2UKKyAqIGJsb2NrcyBhcmUgZ2VuZXJhbGx5OgorICoJLSB0aGUgQUcgc3VwZXJibG9jaywgQUdGLCBBR0kgYW5kIEFHRkwKKyAqCS0gdGhlIEFHRiAoYm5vIGFuZCBjbnQpIGFuZCBBR0kgYnRyZWUgcm9vdCBibG9ja3MKKyAqCS0gNCBibG9ja3Mgb24gdGhlIEFHRkwgYWNjb3JkaW5nIHRvIFhGU19BTExPQ19TRVRfQVNJREUoKSBsaW1pdHMKKyAqCisgKiBUaGUgQUcgaGVhZGVycyBhcmUgc2VjdG9yIHNpemVkLCBzbyB0aGUgYW1vdW50IG9mIHNwYWNlIHRoZXkgdGFrZSB1cCBpcworICogZGVwZW5kZW50IG9uIGZpbGVzeXN0ZW0gZ2VvbWV0cnkuIFRoZSBvdGhlcnMgYXJlIGFsbCBzaW5nbGUgYmxvY2tzLgorICovCisjZGVmaW5lIFhGU19BTExPQ19BR19NQVhfVVNBQkxFKG1wKQlcCisJKChtcCktPm1fc2Iuc2JfYWdibG9ja3MgLSBYRlNfQkJfVE9fRlNCKG1wLCBYRlNfRlNTX1RPX0JCKG1wLCA0KSkgLSA3KQorCisKKy8qCiAgKiBBcmd1bWVudCBzdHJ1Y3R1cmUgZm9yIHhmc19hbGxvYyByb3V0aW5lcy4KICAqIFRoaXMgaXMgdHVybmVkIGludG8gYSBzdHJ1Y3R1cmUgdG8gYXZvaWQgaGF2aW5nIDIwIGFyZ3VtZW50cyBwYXNzZWQKICAqIGRvd24gc2V2ZXJhbCBsZXZlbHMgb2YgdGhlIHN0YWNrLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA0MTExY2QzLi5kYzNhZmQ3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMTAzOCwxNyArMTAzOCwzNCBAQAogCQkgKiBGaWxsaW5nIGluIHRoZSBtaWRkbGUgcGFydCBvZiBhIHByZXZpb3VzIGRlbGF5ZWQgYWxsb2NhdGlvbi4KIAkJICogQ29udGlndWl0eSBpcyBpbXBvc3NpYmxlIGhlcmUuCiAJCSAqIFRoaXMgY2FzZSBpcyBhdm9pZGVkIGFsbW9zdCBhbGwgdGhlIHRpbWUuCisJCSAqCisJCSAqIFdlIHN0YXJ0IHdpdGggYSBkZWxheWVkIGFsbG9jYXRpb246CisJCSAqCisJCSAqICtkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkKworCQkgKiAgUFJFViBAIGlkeAorCQkgKgorCSAgICAgICAgICogYW5kIHdlIGFyZSBhbGxvY2F0aW5nOgorCQkgKiAgICAgICAgICAgICAgICAgICAgICtycnJycnJycnJycnJycnJycisKKwkJICoJCQkgICAgICBuZXcKKwkJICoKKwkJICogYW5kIHdlIHNldCBpdCB1cCBmb3IgaW5zZXJ0aW9uIGFzOgorCQkgKiArZGRkZGRkZGRkZGRkZGRkZGRkZCtycnJycnJycnJycnJycnJycitkZGRkZGRkZGRkZGRkZGRkZCsKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3CisJCSAqICBQUkVWIEAgaWR4ICAgICAgICAgIExFRlQgICAgICAgICAgICAgIFJJR0hUCisJCSAqICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkIGF0IGlkeCArIDEKIAkJICovCiAJCXRlbXAgPSBuZXctPmJyX3N0YXJ0b2ZmIC0gUFJFVi5icl9zdGFydG9mZjsKLQkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCAwLCBfVEhJU19JUF8pOwotCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7Ci0JCXJbMF0gPSAqbmV3OwotCQlyWzFdLmJyX3N0YXRlID0gUFJFVi5icl9zdGF0ZTsKLQkJclsxXS5icl9zdGFydGJsb2NrID0gMDsKLQkJclsxXS5icl9zdGFydG9mZiA9IG5ld19lbmRvZmY7CiAJCXRlbXAyID0gUFJFVi5icl9zdGFydG9mZiArIFBSRVYuYnJfYmxvY2tjb3VudCAtIG5ld19lbmRvZmY7Ci0JCXJbMV0uYnJfYmxvY2tjb3VudCA9IHRlbXAyOwotCQl4ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCArIDEsIDIsICZyWzBdLCBzdGF0ZSk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgMCwgX1RISVNfSVBfKTsKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwkvKiB0cnVuY2F0ZSBQUkVWICovCisJCUxFRlQgPSAqbmV3OworCQlSSUdIVC5icl9zdGF0ZSA9IFBSRVYuYnJfc3RhdGU7CisJCVJJR0hULmJyX3N0YXJ0YmxvY2sgPSBudWxsc3RhcnRibG9jaygKKwkJCQkoaW50KXhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcDIpKTsKKwkJUklHSFQuYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOworCQlSSUdIVC5icl9ibG9ja2NvdW50ID0gdGVtcDI7CisJCS8qIGluc2VydCBMRUZUIChyWzBdKSBhbmQgUklHSFQgKHJbMV0pIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHggKyAxLCAyLCAmTEVGVCwgc3RhdGUpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTI0MzAsNyArMjQ0Nyw3IEBACiAJCXN0YXJ0YWcgPSBhZyA9IDA7CiAKIAlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7Ci0Jd2hpbGUgKCpibGVuIDwgYXAtPmFsZW4pIHsKKwl3aGlsZSAoKmJsZW4gPCBhcmdzLT5tYXhsZW4pIHsKIAkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLT50cCwgYWcsCiAJCQkJCQkgICAgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSyk7CkBAIC0yNDUyLDcgKzI0NjksNyBAQAogCQkJbm90aW5pdCA9IDE7CiAKIAkJaWYgKHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpIHsKLQkJCWlmICgqYmxlbiA+PSBhcC0+YWxlbikKKwkJCWlmICgqYmxlbiA+PSBhcmdzLT5tYXhsZW4pCiAJCQkJYnJlYWs7CiAKIAkJCWlmIChhcC0+dXNlcmRhdGEpIHsKQEAgLTI0OTgsMTQgKzI1MTUsMTQgQEAKIAkgKiBJZiB0aGUgYmVzdCBzZWVuIGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3QKIAkgKiBsZW5ndGgsIHVzZSB0aGUgYmVzdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KLQllbHNlIGlmICgqYmxlbiA8IGFwLT5hbGVuKQorCWVsc2UgaWYgKCpibGVuIDwgYXJncy0+bWF4bGVuKQogCQlhcmdzLT5taW5sZW4gPSAqYmxlbjsKIAkvKgotCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgYWxlbiwKKwkgKiBPdGhlcndpc2Ugd2UndmUgc2VlbiBhbiBleHRlbnQgYXMgYmlnIGFzIG1heGxlbiwKIAkgKiB1c2UgdGhhdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KIAllbHNlCi0JCWFyZ3MtPm1pbmxlbiA9IGFwLT5hbGVuOworCQlhcmdzLT5taW5sZW4gPSBhcmdzLT5tYXhsZW47CiAKIAkvKgogCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCkBAIC0yNTczLDcgKzI1OTAsOSBAQAogCWFyZ3MudHAgPSBhcC0+dHA7CiAJYXJncy5tcCA9IG1wOwogCWFyZ3MuZnNibm8gPSBhcC0+cnZhbDsKLQlhcmdzLm1heGxlbiA9IE1JTihhcC0+YWxlbiwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOworCisJLyogVHJpbSB0aGUgYWxsb2NhdGlvbiBiYWNrIHRvIHRoZSBtYXhpbXVtIGFuIEFHIGNhbiBmaXQuICovCisJYXJncy5tYXhsZW4gPSBNSU4oYXAtPmFsZW4sIFhGU19BTExPQ19BR19NQVhfVVNBQkxFKG1wKSk7CiAJYXJncy5maXJzdGJsb2NrID0gYXAtPmZpcnN0YmxvY2s7CiAJYmxlbiA9IDA7CiAJaWYgKG51bGxmYikgewpAQCAtMjYyMSw3ICsyNjQwLDcgQEAKIAkJCS8qCiAJCQkgKiBBZGp1c3QgZm9yIGFsaWdubWVudAogCQkJICovCi0JCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXAtPmFsZW4pCisJCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXJncy5tYXhsZW4pCiAJCQkJYXJncy5taW5sZW4gPSBibGVuIC0gYXJncy5hbGlnbm1lbnQ7CiAJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CiAJCX0gZWxzZSB7CkBAIC0yNjQwLDcgKzI2NTksNyBAQAogCQkJICogb2YgbWlubGVuK2FsaWdubWVudCtzbG9wIGRvZXNuJ3QgZ28gdXAKIAkJCSAqIGJldHdlZW4gdGhlIGNhbGxzLgogCQkJICovCi0JCQlpZiAoYmxlbiA+IG1wLT5tX2RhbGlnbiAmJiBibGVuIDw9IGFwLT5hbGVuKQorCQkJaWYgKGJsZW4gPiBtcC0+bV9kYWxpZ24gJiYgYmxlbiA8PSBhcmdzLm1heGxlbikKIAkJCQluZXh0bWlubGVuID0gYmxlbiAtIG1wLT5tX2RhbGlnbjsKIAkJCWVsc2UKIAkJCQluZXh0bWlubGVuID0gYXJncy5taW5sZW47CkBAIC00NDg1LDYgKzQ1MDQsMTYgQEAKIAkJCQkvKiBGaWd1cmUgb3V0IHRoZSBleHRlbnQgc2l6ZSwgYWRqdXN0IGFsZW4gKi8KIAkJCQlleHRzeiA9IHhmc19nZXRfZXh0c3pfaGludChpcCk7CiAJCQkJaWYgKGV4dHN6KSB7CisJCQkJCS8qCisJCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgYSBzaW5nbGUKKwkJCQkJICogZXh0ZW50IGxlbmd0aCB3aGVuIHdlIGFsaWduIHRoZQorCQkJCQkgKiBleHRlbnQgYnkgcmVkdWNpbmcgbGVuZ3RoIHdlIGFyZQorCQkJCQkgKiBnb2luZyB0byBhbGxvY2F0ZSBieSB0aGUgbWF4aW11bQorCQkJCQkgKiBhbW91bnQgZXh0ZW50IHNpemUgYWxpZ21lbnQgbWF5CisJCQkJCSAqIHJlcXVpcmUuCisJCQkJCSAqLworCQkJCQlhbGVuID0gWEZTX0ZJTEJMS1NfTUlOKGxlbiwKKwkJCQkJCSAgIE1BWEVYVExFTiAtICgyICogZXh0c3ogLSAxKSk7CiAJCQkJCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwKIAkJCQkJCQkmZ290LCAmcHJldiwgZXh0c3osCiAJCQkJCQkJcnQsIGVvZiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA5OGM2ZjczLi42ZjhjMjFjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC00MjcsMTMgKzQyNywxNSBAQAogCiAJCWlmIChyZW1vdmUpIHsKIAkJCS8qCi0JCQkgKiBXZSBoYXZlIHRvIHJlbW92ZSB0aGUgbG9nIGl0ZW0gZnJvbSB0aGUgdHJhbnNhY3Rpb24KLQkJCSAqIGFzIHdlIGFyZSBhYm91dCB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlCi0JCQkgKiBidWZmZXIuICBJZiB3ZSBkb24ndCwgdGhlIHVubG9jayB0aGF0IG9jY3VycyBsYXRlcgotCQkJICogaW4geGZzX3RyYW5zX3VuY29tbWl0KCkgd2lsbCByeSB0byByZWZlcmVuY2UgdGhlCisJCQkgKiBJZiB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb250ZXh0LCB3ZSBoYXZlIHRvCisJCQkgKiByZW1vdmUgdGhlIGxvZyBpdGVtIGZyb20gdGhlIHRyYW5zYWN0aW9uIGFzIHdlIGFyZQorCQkJICogYWJvdXQgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuICBJZiB3ZQorCQkJICogZG9uJ3QsIHRoZSB1bmxvY2sgdGhhdCBvY2N1cnMgbGF0ZXIgaW4KKwkJCSAqIHhmc190cmFuc191bmNvbW1pdCgpIHdpbGwgdHJ5IHRvIHJlZmVyZW5jZSB0aGUKIAkJCSAqIGJ1ZmZlciB3aGljaCB3ZSBubyBsb25nZXIgaGF2ZSBhIGhvbGQgb24uCiAJCQkgKi8KLQkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOworCQkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHRoZSB0cmFuc2FjdGlvbiBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBidWZmZXIsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwppbmRleCA3NWYyZWY2Li5kMjJlNjI2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKQEAgLTEzOCw3ICsxMzgsOCBAQAogCiAJaWYgKHJlbW92ZSkgewogCQlBU1NFUlQoIShsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkpOwotCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKKwkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOwogCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCA1NTU4MmJkLi44YTBmMDQ0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvbWFwLmMKKysrIGIvZnMveGZzL3hmc19pb21hcC5jCkBAIC0zMzcsNyArMzM3LDEyIEBACiAJCWludCBzaGlmdCA9IDA7CiAJCWludDY0X3QgZnJlZXNwOwogCi0JCWFsbG9jX2Jsb2NrcyA9IFhGU19CX1RPX0ZTQihtcCwgaXAtPmlfc2l6ZSk7CisJCS8qCisJCSAqIHJvdW5kZG93bl9wb3dfb2ZfdHdvKCkgcmV0dXJucyBhbiB1bmRlZmluZWQgcmVzdWx0CisJCSAqIGlmIHdlIHBhc3MgaW4gYWxsb2NfYmxvY2tzID0gMC4gSGVuY2UgdGhlICIrIDEiIHRvCisJCSAqIGVuc3VyZSB3ZSBhbHdheXMgcGFzcyBpbiBhIG5vbi16ZXJvIHZhbHVlLgorCQkgKi8KKwkJYWxsb2NfYmxvY2tzID0gWEZTX0JfVE9fRlNCKG1wLCBpcC0+aV9zaXplKSArIDE7CiAJCWFsbG9jX2Jsb2NrcyA9IFhGU19GSUxFT0ZGX01JTihNQVhFWFRMRU4sCiAJCQkJCXJvdW5kZG93bl9wb3dfb2ZfdHdvKGFsbG9jX2Jsb2NrcykpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5oIGIvZnMveGZzL3hmc19sb2cuaAppbmRleCA5MTZlYjdkLi4zYmQzMjkxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmgKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiB4bG9nX3RpZF90IHhmc19sb2dfZ2V0X3RyYW5zX2lkZW50KHN0cnVjdCB4ZnNfdHJhbnMgKnRwKTsKIAotaW50CXhmc19sb2dfY29tbWl0X2NpbChzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc190cmFucyAqdHAsCit2b2lkCXhmc19sb2dfY29tbWl0X2NpbChzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc190cmFucyAqdHAsCiAJCQkJc3RydWN0IHhmc19sb2dfdmVjICpsb2dfdmVjdG9yLAogCQkJCXhmc19sc25fdCAqY29tbWl0X2xzbiwgaW50IGZsYWdzKTsKIGJvb2wJeGZzX2xvZ19pdGVtX2luX2N1cnJlbnRfY2hrcHQoc3RydWN0IHhmc19sb2dfaXRlbSAqbGlwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX2NpbC5jIGIvZnMveGZzL3hmc19sb2dfY2lsLmMKaW5kZXggOWRjODEyNS4uOWNhNTliZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfY2lsLmMKKysrIGIvZnMveGZzL3hmc19sb2dfY2lsLmMKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiAJZXJyb3IgPSB4bG9nX3dyaXRlKGxvZywgJmx2aGRyLCB0aWMsICZjdHgtPnN0YXJ0X2xzbiwgTlVMTCwgMCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9hYm9ydDsKKwkJZ290byBvdXRfYWJvcnRfZnJlZV90aWNrZXQ7CiAKIAkvKgogCSAqIG5vdyB0aGF0IHdlJ3ZlIHdyaXR0ZW4gdGhlIGNoZWNrcG9pbnQgaW50byB0aGUgbG9nLCBzdHJpY3RseQpAQCAtNTY5LDggKzU2OSw5IEBACiAJfQogCXNwaW5fdW5sb2NrKCZjaWwtPnhjX2NpbF9sb2NrKTsKIAorCS8qIHhmc19sb2dfZG9uZSBhbHdheXMgZnJlZXMgdGhlIHRpY2tldCBvbiBlcnJvci4gKi8KIAljb21taXRfbHNuID0geGZzX2xvZ19kb25lKGxvZy0+bF9tcCwgdGljLCAmY29tbWl0X2ljbG9nLCAwKTsKLQlpZiAoZXJyb3IgfHwgY29tbWl0X2xzbiA9PSAtMSkKKwlpZiAoY29tbWl0X2xzbiA9PSAtMSkKIAkJZ290byBvdXRfYWJvcnQ7CiAKIAkvKiBhdHRhY2ggYWxsIHRoZSB0cmFuc2FjdGlvbnMgdy8gYnVzeSBleHRlbnRzIHRvIGljbG9nICovCkBAIC02MDAsNiArNjAxLDggQEAKIAlrbWVtX2ZyZWUobmV3X2N0eCk7CiAJcmV0dXJuIDA7CiAKK291dF9hYm9ydF9mcmVlX3RpY2tldDoKKwl4ZnNfbG9nX3RpY2tldF9wdXQodGljKTsKIG91dF9hYm9ydDoKIAl4bG9nX2NpbF9jb21taXR0ZWQoY3R4LCBYRlNfTElfQUJPUlRFRCk7CiAJcmV0dXJuIFhGU19FUlJPUihFSU8pOwpAQCAtNjIyLDcgKzYyNSw3IEBACiAgKiBiYWNrZ3JvdW5kIGNvbW1pdCwgcmV0dXJucyB3aXRob3V0IGl0IGhlbGQgb25jZSBiYWNrZ3JvdW5kIGNvbW1pdHMgYXJlCiAgKiBhbGxvd2VkIGFnYWluLgogICovCi1pbnQKK3ZvaWQKIHhmc19sb2dfY29tbWl0X2NpbCgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKQEAgLTYzNywxMSArNjQwLDYgQEAKIAlpZiAoZmxhZ3MgJiBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKQogCQlsb2dfZmxhZ3MgPSBYRlNfTE9HX1JFTF9QRVJNX1JFU0VSVjsKIAotCWlmIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKSB7Ci0JCXhsb2dfY2lsX2ZyZWVfbG9ndmVjKGxvZ192ZWN0b3IpOwotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JfQotCiAJLyoKIAkgKiBkbyBhbGwgdGhlIGhhcmQgd29yayBvZiBmb3JtYXR0aW5nIGl0ZW1zIChpbmNsdWRpbmcgbWVtb3J5CiAJICogYWxsb2NhdGlvbikgb3V0c2lkZSB0aGUgQ0lMIGNvbnRleHQgbG9jay4gVGhpcyBwcmV2ZW50cyBzdGFsbGluZyBDSUwKQEAgLTcwMSw3ICs2OTksNiBAQAogCSAqLwogCWlmIChwdXNoKQogCQl4bG9nX2NpbF9wdXNoKGxvZywgMCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmMgYi9mcy94ZnMveGZzX3RyYW5zLmMKaW5kZXggMzNkYmM0ZS4uNzY5MjI3OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwpAQCAtMTQ0Niw2ICsxNDQ2LDE0IEBACiAgKiBCdWxrIG9wZXJhdGlvbiB2ZXJzaW9uIG9mIHhmc190cmFuc19jb21taXR0ZWQgdGhhdCB0YWtlcyBhIGxvZyB2ZWN0b3Igb2YKICAqIGl0ZW1zIHRvIGluc2VydCBpbnRvIHRoZSBBSUwuIFRoaXMgdXNlcyBidWxrIEFJTCBpbnNlcnRpb24gdGVjaG5pcXVlcyB0bwogICogbWluaW1pc2UgbG9jayB0cmFmZmljLgorICoKKyAqIElmIHdlIGFyZSBjYWxsZWQgd2l0aCB0aGUgYWJvcnRlZCBmbGFnIHNldCwgaXQgaXMgYmVjYXVzZSBhIGxvZyB3cml0ZSBkdXJpbmcKKyAqIGEgQ0lMIGNoZWNrcG9pbnQgY29tbWl0IGhhcyBmYWlsZWQuIEluIHRoaXMgY2FzZSwgYWxsIHRoZSBpdGVtcyBpbiB0aGUKKyAqIGNoZWNrcG9pbnQgaGF2ZSBhbHJlYWR5IGdvbmUgdGhyb3VnaCBJT1BfQ09NTUlURUQgYW5kIElPUF9VTkxPQ0ssIHdoaWNoCisgKiBtZWFucyB0aGF0IGNoZWNrcG9pbnQgY29tbWl0IGFib3J0IGhhbmRsaW5nIGlzIHRyZWF0ZWQgZXhhY3RseSB0aGUgc2FtZQorICogYXMgYW4gaWNsb2cgd3JpdGUgZXJyb3IgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCBzdGFydGVkIGFueSBJTyB5ZXQuIEhlbmNlIGluCisgKiB0aGlzIGNhc2UgYWxsIHdlIG5lZWQgdG8gZG8gaXMgSU9QX0NPTU1JVFRFRCBwcm9jZXNzaW5nLCBmb2xsb3dlZCBieSBhbgorICogSU9QX1VOUElOKGFib3J0ZWQpIGNhbGwuCiAgKi8KIHZvaWQKIHhmc190cmFuc19jb21taXR0ZWRfYnVsaygKQEAgLTE0NzIsNiArMTQ4MCwxNiBAQAogCQlpZiAoWEZTX0xTTl9DTVAoaXRlbV9sc24sICh4ZnNfbHNuX3QpLTEpID09IDApCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBpZiB3ZSBhcmUgYWJvcnRpbmcgdGhlIG9wZXJhdGlvbiwgbm8gcG9pbnQgaW4gaW5zZXJ0aW5nIHRoZQorCQkgKiBvYmplY3QgaW50byB0aGUgQUlMIGFzIHdlIGFyZSBpbiBhIHNodXRkb3duIHNpdHVhdGlvbi4KKwkJICovCisJCWlmIChhYm9ydGVkKSB7CisJCQlBU1NFUlQoWEZTX0ZPUkNFRF9TSFVURE9XTihhaWxwLT54YV9tb3VudCkpOworCQkJSU9QX1VOUElOKGxpcCwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmIChpdGVtX2xzbiAhPSBjb21taXRfbHNuKSB7CiAKIAkJCS8qCkBAIC0xNTAzLDIwICsxNTIxLDI0IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgdHJhbnNfY29tbWl0IGNvZGUgd2hlbiB3ZSBub3RpY2UgdGhhdAotICogdGhlIGZpbGVzeXN0ZW0gaXMgaW4gdGhlIG1pZGRsZSBvZiBhIGZvcmNlZCBzaHV0ZG93bi4KKyAqIENhbGxlZCBmcm9tIHRoZSB0cmFuc19jb21taXQgY29kZSB3aGVuIHdlIG5vdGljZSB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIGluCisgKiB0aGUgbWlkZGxlIG9mIGEgZm9yY2VkIHNodXRkb3duLgorICoKKyAqIFdoZW4gd2UgYXJlIGNhbGxlZCBoZXJlLCB3ZSBoYXZlIGFscmVhZHkgcGlubmVkIGFsbCB0aGUgaXRlbXMgaW4gdGhlCisgKiB0cmFuc2FjdGlvbi4gSG93ZXZlciwgbmVpdGhlciBJT1BfQ09NTUlUVElORyBvciBJT1BfVU5MT0NLIGhhcyBiZWVuIGNhbGxlZAorICogc28gd2UgY2FuIHNpbXBseSB3YWxrIHRoZSBpdGVtcyBpbiB0aGUgdHJhbnNhY3Rpb24sIHVucGluIHRoZW0gd2l0aCBhbiBhYm9ydAorICogZmxhZyBhbmQgdGhlbiBmcmVlIHRoZSBpdGVtcy4gTm90ZSB0aGF0IHVucGlubmluZyB0aGUgaXRlbXMgY2FuIHJlc3VsdCBpbgorICogdGhlbSBiZWluZyBmcmVlZCBpbW1lZGlhdGVseSwgc28gd2UgbmVlZCB0byB1c2UgYSBzYWZlIGxpc3QgdHJhdmVyc2FsIG1ldGhvZAorICogaGVyZS4KICAqLwogU1RBVElDIHZvaWQKIHhmc190cmFuc191bmNvbW1pdCgKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKIAl1aW50CQkJZmxhZ3MpCiB7Ci0Jc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwOworCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcCwgKm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpZHAsICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7Ci0JCS8qCi0JCSAqIFVucGluIGFsbCBidXQgdGhvc2UgdGhhdCBhcmVuJ3QgZGlydHkuCi0JCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaWRwLCBuLCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgewogCQlpZiAobGlkcC0+bGlkX2ZsYWdzICYgWEZTX0xJRF9ESVJUWSkKIAkJCUlPUF9VTlBJTihsaWRwLT5saWRfaXRlbSwgMSk7CiAJfQpAQCAtMTczMyw3ICsxNzU1LDYgQEAKIAlpbnQJCQlmbGFncykKIHsKIAlzdHJ1Y3QgeGZzX2xvZ192ZWMJKmxvZ192ZWN0b3I7Ci0JaW50CQkJZXJyb3I7CiAKIAkvKgogCSAqIEdldCBlYWNoIGxvZyBpdGVtIHRvIGFsbG9jYXRlIGEgdmVjdG9yIHN0cnVjdHVyZSBmb3IKQEAgLTE3NDQsOSArMTc2NSw3IEBACiAJaWYgKCFsb2dfdmVjdG9yKQogCQlyZXR1cm4gRU5PTUVNOwogCi0JZXJyb3IgPSB4ZnNfbG9nX2NvbW1pdF9jaWwobXAsIHRwLCBsb2dfdmVjdG9yLCBjb21taXRfbHNuLCBmbGFncyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJeGZzX2xvZ19jb21taXRfY2lsKG1wLCB0cCwgbG9nX3ZlY3RvciwgY29tbWl0X2xzbiwgZmxhZ3MpOwogCiAJY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZCgmdHAtPnRfcGZsYWdzLCBQRl9GU1RSQU5TKTsKIAl4ZnNfdHJhbnNfZnJlZSh0cCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggNjg2NDkzMy4uZmU3N2UzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMTI0LDcgKzEyNCw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCi0jZGVmaW5lIEZUUkFDRV9FVkVOVFMoKQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X2Z0cmFjZV9ldmVudHMpID0gLjsJXAorI2RlZmluZSBGVFJBQ0VfRVZFTlRTKCkJLiA9IEFMSUdOKDgpOwkJCQkJXAorCQkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9mdHJhY2VfZXZlbnRzKSA9IC47CVwKIAkJCSooX2Z0cmFjZV9ldmVudHMpCQkJCVwKIAkJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9mdHJhY2VfZXZlbnRzKSA9IC47CiAjZWxzZQpAQCAtMTQwLDcgKzE0MSw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLSNkZWZpbmUgVFJBQ0VfU1lTQ0FMTFMoKSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CVwKKyNkZWZpbmUgVFJBQ0VfU1lTQ0FMTFMoKSAuID0gQUxJR04oOCk7CQkJCQlcCisJCQkgVk1MSU5VWF9TWU1CT0woX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YSkgPSAuOwlcCiAJCQkgKihfX3N5c2NhbGxzX21ldGFkYXRhKQkJCQlcCiAJCQkgVk1MSU5VWF9TWU1CT0woX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CiAjZWxzZQpAQCAtMTY1LDEwICsxNjcsOCBAQAogCUNQVV9LRUVQKGV4aXQuZGF0YSkJCQkJCQlcCiAJTUVNX0tFRVAoaW5pdC5kYXRhKQkJCQkJCVwKIAlNRU1fS0VFUChleGl0LmRhdGEpCQkJCQkJXAotCS4gPSBBTElHTigzMik7CQkJCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCisJU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAogCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCiAJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCiAJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE3NiwxMyArMTc2LDcgQEAKIAlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CQkJCVwKIAlMSUtFTFlfUFJPRklMRSgpCQkgICAgICAgCQkJCVwKIAlCUkFOQ0hfUFJPRklMRSgpCQkJCQkJXAotCVRSQUNFX1BSSU5US1MoKQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKLQlGVFJBQ0VfRVZFTlRTKCkJCQkJCQkJXAotCQkJCQkJCQkJXAotCVNUUlVDVF9BTElHTigpOwkJCQkJCQlcCi0JVFJBQ0VfU1lTQ0FMTFMoKQorCVRSQUNFX1BSSU5US1MoKQogCiAvKgogICogRGF0YSBzZWN0aW9uIGhlbHBlcnMKQEAgLTIyMCw2ICsyMTQsMTAgQEAKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9yb2RhdGEpID0gLjsJCQlcCiAJCSooLnJvZGF0YSkgKigucm9kYXRhLiopCQkJCQlcCiAJCSooX192ZXJtYWdpYykJCS8qIEtlcm5lbCB2ZXJzaW9uIG1hZ2ljICovCVwKKwkJLiA9IEFMSUdOKDgpOwkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3RyYWNlcG9pbnRzX3B0cnMpID0gLjsJCVwKKwkJKihfX3RyYWNlcG9pbnRzX3B0cnMpCS8qIFRyYWNlcG9pbnRzOiBwb2ludGVyIGFycmF5ICovXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX190cmFjZXBvaW50c19wdHJzKSA9IC47CQlcCiAJCSooX19tYXJrZXJzX3N0cmluZ3MpCS8qIE1hcmtlcnM6IHN0cmluZ3MgKi8JCVwKIAkJKihfX3RyYWNlcG9pbnRzX3N0cmluZ3MpLyogVHJhY2Vwb2ludHM6IHN0cmluZ3MgKi8JXAogCX0JCQkJCQkJCVwKQEAgLTM2NCw2ICszNjIsMTMgQEAKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3BhcmFtKSA9IC47CQkJXAogCQkqKF9fcGFyYW0pCQkJCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19wYXJhbSkgPSAuOwkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJLyogQnVpbHQtaW4gbW9kdWxlIHZlcnNpb25zLiAqLwkJCQkJXAorCV9fbW9kdmVyIDogQVQoQUREUihfX21vZHZlcikgLSBMT0FEX09GRlNFVCkgewkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX21vZHZlcikgPSAuOwkJCVwKKwkJKihfX21vZHZlcikJCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX21vZHZlcikgPSAuOwkJCVwKIAkJLiA9IEFMSUdOKChhbGlnbikpOwkJCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX2VuZF9yb2RhdGEpID0gLjsJCQlcCiAJfQkJCQkJCQkJXApAQCAtNDc1LDYgKzQ4MCw4IEBACiAJS0VSTkVMX0NUT1JTKCkJCQkJCQkJXAogCSooLmluaXQucm9kYXRhKQkJCQkJCQlcCiAJTUNPVU5UX1JFQygpCQkJCQkJCVwKKwlGVFJBQ0VfRVZFTlRTKCkJCQkJCQkJXAorCVRSQUNFX1NZU0NBTExTKCkJCQkJCQlcCiAJREVWX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggYTQ2OTRjNi4uZmUyOWFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIGV4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCiAJCQkJICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rdGltZSk7Ci1leHRlcm4gdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gYm9vbCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIGRybV92Ymxhbmtfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IGFjZDdmYWQuLjgwMWJlNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMjc1LDYgKzI3NSw3IEBACiAKIC8qKgogICogZHJtX2NydGNfZnVuY3MgLSBjb250cm9sIENSVENzIGZvciBhIGdpdmVuIGRldmljZQorICogQHJlc2V0OiByZXNldCBDUlRDIGFmdGVyIHN0YXRlIGhhcyBiZWVuIGludmFsaWRhdGUgKGUuZy4gcmVzdW1lKQogICogQGRwbXM6IGNvbnRyb2wgZGlzcGxheSBwb3dlciBsZXZlbHMKICAqIEBzYXZlOiBzYXZlIENSVEMgc3RhdGUKICAqIEByZXNvcmU6IHJlc3RvcmUgQ1JUQyBzdGF0ZQpAQCAtMzAyLDYgKzMwMyw4IEBACiAJdm9pZCAoKnNhdmUpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7IC8qIHN1c3BlbmQ/ICovCiAJLyogUmVzdG9yZSBDUlRDIHN0YXRlICovCiAJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7IC8qIHJlc3VtZT8gKi8KKwkvKiBSZXNldCBDUlRDIHN0YXRlICovCisJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogCiAJLyogY3Vyc29yIGNvbnRyb2xzICovCiAJaW50ICgqY3Vyc29yX3NldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKQEAgLTM3OSw2ICszODIsNyBAQAogICogQGRwbXM6IHNldCBwb3dlciBzdGF0ZSAoc2VlIGRybV9jcnRjX2Z1bmNzIGFib3ZlKQogICogQHNhdmU6IHNhdmUgY29ubmVjdG9yIHN0YXRlCiAgKiBAcmVzdG9yZTogcmVzdG9yZSBjb25uZWN0b3Igc3RhdGUKKyAqIEByZXNldDogcmVzZXQgY29ubmVjdG9yIGFmdGVyIHN0YXRlIGhhcyBiZWVuIGludmFsaWRhdGUgKGUuZy4gcmVzdW1lKQogICogQG1vZGVfdmFsaWQ6IGlzIHRoaXMgbW9kZSB2YWxpZCBvbiB0aGUgZ2l2ZW4gY29ubmVjdG9yPwogICogQG1vZGVfZml4dXA6IHRyeSB0byBmaXh1cCBwcm9wb3NlZCBtb2RlIGZvciB0aGlzIGNvbm5lY3RvcgogICogQG1vZGVfc2V0OiBzZXQgdGhpcyBtb2RlCkBAIC0zOTYsNiArNDAwLDcgQEAKIAl2b2lkICgqZHBtcykoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IG1vZGUpOwogCXZvaWQgKCpzYXZlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIAl2b2lkICgqcmVzdG9yZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiBhbnl0aGluZyBpcyBhdHRhY2hlZCB0byB0aGUgY29ubmVjdG9yLgogCSAqIEBmb3JjZSBpcyBzZXQgdG8gZmFsc2Ugd2hpbHN0IHBvbGxpbmcsIHRydWUgd2hlbiBjaGVja2luZyB0aGUKQEAgLTQxMyw2ICs0MTgsNyBAQAogfTsKIAogc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHsKKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiB9OwogCkBAIC02NTYsNiArNjYyLDcgQEAKIAkJCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25maWdfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25maWdfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX3NldF9uYW1lKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKIGV4dGVybiBib29sIGRybV9tb2RlX2VxdWFsKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCBmZTI5YWUzLi41ZmYxMTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC0yOCw3ICsyOCw2IEBACiAJezB4MTAwMiwgMHg0MTU2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzUwfSwgXAogCXsweDEwMDIsIDB4NDIzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4NDI0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SMjAwfSwgXAotCXsweDEwMDIsIDB4NDI0MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SMjAwfSwgXAogCXsweDEwMDIsIDB4NDMzNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzEwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDQzMzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg0NDM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IGU5NWE4NmIuLmU1YzYwN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTkwNyw2ICs5MDcsNyBAQAogI2RlZmluZSBSQURFT05fSU5GT19USUxJTkdfQ09ORklHCTB4MDYKICNkZWZpbmUgUkFERU9OX0lORk9fV0FOVF9IWVBFUloJCTB4MDcKICNkZWZpbmUgUkFERU9OX0lORk9fV0FOVF9DTUFTSwkJMHgwOCAvKiBnZXQgYWNjZXNzIHRvIENNQVNLIG9uIHIzMDAgKi8KKyNkZWZpbmUgUkFERU9OX0lORk9fQ0xPQ0tfQ1JZU1RBTF9GUkVRCTB4MDkgLyogY2xvY2sgY3J5c3RhbCBmcmVxdWVuY3kgKi8KIAogc3RydWN0IGRybV9yYWRlb25faW5mbyB7CiAJdWludDMyX3QJCXJlcXVlc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDIyOTZkOGIuLmIwYWRhNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xLDUgKzEsNiBAQAogaGVhZGVyLXkgKz0gYnl0ZW9yZGVyLwogaGVhZGVyLXkgKz0gY2FuLworaGVhZGVyLXkgKz0gY2FpZi8KIGhlYWRlci15ICs9IGR2Yi8KIGhlYWRlci15ICs9IGhkbGMvCiBoZWFkZXIteSArPSBpc2RuLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYWlmL0tidWlsZCBiL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljZjI1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQKQEAgLTAsMCArMSwyIEBACitoZWFkZXIteSArPSBjYWlmX3NvY2tldC5oCitoZWFkZXIteSArPSBpZl9jYWlmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggOTc3NGZlNi4uNzQ1M2NmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTEzOSw5ICsxMzksOSBAQAogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfY29uc29sZShzdHJ1Y3QgY29uc29sZSAqKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICopOwogZXh0ZXJuIHN0cnVjdCBjb25zb2xlICpjb25zb2xlX2RyaXZlcnM7Ci1leHRlcm4gdm9pZCBhY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpOwotZXh0ZXJuIGludCB0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlbGVhc2VfY29uc29sZV9zZW0odm9pZCk7CitleHRlcm4gdm9pZCBjb25zb2xlX2xvY2sodm9pZCk7CitleHRlcm4gaW50IGNvbnNvbGVfdHJ5bG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbnNvbGVfdW5sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSh2b2lkKTsKIGV4dGVybiB2b2lkIGNvbnNvbGVfdW5ibGFuayh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgdHR5X2RyaXZlciAqY29uc29sZV9kZXZpY2UoaW50ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDMyYjM4Y2QuLmJkMzIxNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI1NTUsOSArMjU1NSwxMiBAQAogCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAorI2RlZmluZSBfX0ZNT0RFX0VYRUMJCSgoX19mb3JjZSBpbnQpIEZNT0RFX0VYRUMpCisjZGVmaW5lIF9fRk1PREVfTk9OT1RJRlkJKChfX2ZvcmNlIGludCkgRk1PREVfTk9OT1RJRlkpCisKICNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDA0XDAwMlwwMDZcMDA2IlsoeCkmT19BQ0NNT0RFXSkKICNkZWZpbmUgT1BFTl9GTU9ERShmbGFnKSAoKF9fZm9yY2UgZm1vZGVfdCkoKChmbGFnICsgMSkgJiBPX0FDQ01PREUpIHwgXAotCQkJCQkgICAgKGZsYWcgJiBGTU9ERV9OT05PVElGWSkpKQorCQkJCQkgICAgKGZsYWcgJiBfX0ZNT0RFX05PTk9USUZZKSkpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGEzYjE0OGEuLjBiODRjNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCQkJCSAoKDEgPDwgWk9ORVNfU0hJRlQpIC0gMSk7CiAKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSkKLQkJTUFZQkVfQlVJTERfQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOworCQlCVUlMRF9CVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CiAJZWxzZSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCiAJCUJVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvYnUyMTAxMy5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9idTIxMDEzLmgKaW5kZXggZTQ3MGQzOC4uMDVlMDMyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9idTIxMDEzLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9idTIxMDEzLmgKQEAgLTEyLDggKzEyLDYgQEAKICAqIEBjc19lbjoJcG9pbnRlciB0byB0aGUgY3MgZW5hYmxlIGZ1bmN0aW9uCiAgKiBAY3NfZGlzOglwb2ludGVyIHRvIHRoZSBjcyBkaXNhYmxlIGZ1bmN0aW9uCiAgKiBAaXJxX3JlYWRfdmFsOiAgICBwb2ludGVyIHRvIHJlYWQgdGhlIHBlbiBpcnEgdmFsdWUgZnVuY3Rpb24KLSAqIEB4X21heF9yZXM6IHhtYXggcmVzb2x1dGlvbgotICogQHlfbWF4X3JlczogeW1heCByZXNvbHV0aW9uCiAgKiBAdG91Y2hfeF9tYXg6IHRvdWNoIHggbWF4CiAgKiBAdG91Y2hfeV9tYXg6IHRvdWNoIHkgbWF4CiAgKiBAY3NfcGluOiBjaGlwIHNlbGVjdCBwaW4KQEAgLTI5LDggKzI3LDYgQEAKIAlpbnQgKCpjc19lbikoaW50IHJlc2V0X3Bpbik7CiAJaW50ICgqY3NfZGlzKShpbnQgcmVzZXRfcGluKTsKIAlpbnQgKCppcnFfcmVhZF92YWwpKHZvaWQpOwotCWludCB4X21heF9yZXM7Ci0JaW50IHlfbWF4X3JlczsKIAlpbnQgdG91Y2hfeF9tYXg7CiAJaW50IHRvdWNoX3lfbWF4OwogCXVuc2lnbmVkIGludCBjc19waW47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBhYmRlMjUyLi44MGZjYjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTc0LDcgKzc0LDggQEAKIAogI2RlZmluZSBJUlFGX01PRElGWV9NQVNLCVwKIAkoSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9OT1BST0JFIHwgSVJRX05PUkVRVUVTVCB8IFwKLQkgSVJRX05PQVVUT0VOIHwgSVJRX01PVkVfUENOVFhUIHwgSVJRX0xFVkVMKQorCSBJUlFfTk9BVVRPRU4gfCBJUlFfTU9WRV9QQ05UWFQgfCBJUlFfTEVWRUwgfCBJUlFfTk9fQkFMQU5DSU5HIHwgXAorCSBJUlFfUEVSX0NQVSkKIAogI2lmZGVmIENPTkZJR19JUlFfUEVSX0NQVQogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGQwN2Q4MDUuLjJmZTZlODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNTc1LDEyICs1NzUsNiBAQAogCWNoYXIgX2ZbMjAtMipzaXplb2YobG9uZyktc2l6ZW9mKGludCldOwkvKiBQYWRkaW5nOiBsaWJjNSB1c2VzIHRoaXMuLiAqLwogfTsKIAotLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgdHJ1ZSAqLwotI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpQlVJTERfQlVHX09OX1pFUk8oY29uZGl0aW9uKSkKLQotLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgY29uc3RhbnQgYW5kIHRydWUgKi8KLSNkZWZpbmUgTUFZQkVfQlVJTERfQlVHX09OKGNvbmQpICgodm9pZClzaXplb2YoY2hhclsxIC0gMiAqICEhKGNvbmQpXSkpCi0KIC8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgYSBjb25zdGFudCBleHByZXNzaW9uIGlzIG5vdCBhIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgQlVJTERfQlVHX09OX05PVF9QT1dFUl9PRl8yKG4pCQkJXAogCUJVSUxEX0JVR19PTigobikgPT0gMCB8fCAoKChuKSAmICgobikgLSAxKSkgIT0gMCkpCkBAIC01OTIsNiArNTg2LDMyIEBACiAjZGVmaW5lIEJVSUxEX0JVR19PTl9aRVJPKGUpIChzaXplb2Yoc3RydWN0IHsgaW50Oi0hIShlKTsgfSkpCiAjZGVmaW5lIEJVSUxEX0JVR19PTl9OVUxMKGUpICgodm9pZCAqKXNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKIAorLyoqCisgKiBCVUlMRF9CVUdfT04gLSBicmVhayBjb21waWxlIGlmIGEgY29uZGl0aW9uIGlzIHRydWUuCisgKiBAY29uZGl0aW9uOiB0aGUgY29uZGl0aW9uIHdoaWNoIHRoZSBjb21waWxlciBzaG91bGQga25vdyBpcyBmYWxzZS4KKyAqCisgKiBJZiB5b3UgaGF2ZSBzb21lIGNvZGUgd2hpY2ggcmVsaWVzIG9uIGNlcnRhaW4gY29uc3RhbnRzIGJlaW5nIGVxdWFsLCBvcgorICogb3RoZXIgY29tcGlsZS10aW1lLWV2YWx1YXRlZCBjb25kaXRpb24sIHlvdSBzaG91bGQgdXNlIEJVSUxEX0JVR19PTiB0bworICogZGV0ZWN0IGlmIHNvbWVvbmUgY2hhbmdlcyBpdC4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBnY2MncyByZWx1Y3RhbmNlIHRvIGNyZWF0ZSBhIG5lZ2F0aXZlIGFycmF5LCBidXQKKyAqIGdjYyAoYXMgb2YgNC40KSBvbmx5IGVtaXRzIHRoYXQgZXJyb3IgZm9yIG9idmlvdXMgY2FzZXMgKGVnLiBub3QgYXJndW1lbnRzCisgKiB0byBpbmxpbmUgZnVuY3Rpb25zKS4gIFNvIGFzIGEgZmFsbGJhY2sgd2UgdXNlIHRoZSBvcHRpbWl6ZXI7IGlmIGl0IGNhbid0CisgKiBwcm92ZSB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBpdCB3aWxsIGNhdXNlIGEgbGluayBlcnJvciBvbiB0aGUgdW5kZWZpbmVkCisgKiAiX19idWlsZF9idWdfb25fZmFpbGVkIi4gIFRoaXMgZXJyb3IgbWVzc2FnZSBjYW4gYmUgaGFyZGVyIHRvIHRyYWNrIGRvd24KKyAqIHRob3VnaCwgaGVuY2UgdGhlIHR3byBkaWZmZXJlbnQgbWV0aG9kcy4KKyAqLworI2lmbmRlZiBfX09QVElNSVpFX18KKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSkKKyNlbHNlCitleHRlcm4gaW50IF9fYnVpbGRfYnVnX29uX2ZhaWxlZDsKKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSk7CVwKKwkJaWYgKGNvbmRpdGlvbikgX19idWlsZF9idWdfb25fZmFpbGVkID0gMTsJXAorCX0gd2hpbGUoMCkKKyNlbmRpZgorCiAvKiBUcmFwIHBhc3RlcnMgb2YgX19GVU5DVElPTl9fIGF0IGNvbXBpbGUtdGltZSAqLwogI2RlZmluZSBfX0ZVTkNUSU9OX18gKF9fZnVuY19fKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tsaXN0LmggYi9pbmNsdWRlL2xpbnV4L2tsaXN0LmgKaW5kZXggZTkxYTRlNS4uYTM3MGNlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2xpc3QuaApAQCAtMjIsNyArMjIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJa19saXN0OwogCXZvaWQJCQkoKmdldCkoc3RydWN0IGtsaXN0X25vZGUgKik7CiAJdm9pZAkJCSgqcHV0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChzaXplb2Yodm9pZCAqKSkpKTsKIAogI2RlZmluZSBLTElTVF9JTklUKF9uYW1lLCBfZ2V0LCBfcHV0KQkJCQkJXAogCXsgLmtfbG9jawk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKF9uYW1lLmtfbG9jayksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAppbmRleCAwOGQ3ZGM0Li4zOWY4NDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCisrKyBiL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCQkJCQkJCVwKIAkJX24gPSAobG9uZykgJigocHRyKS0+bmFtZSMjX2VuZCkJCQlcCiAJCQktIChsb25nKSAmKChwdHIpLT5uYW1lIyNfYmVnaW4pOwkJXAotCQlNQVlCRV9CVUlMRF9CVUdfT04oX24gPCAwKTsJCQkJXAorCQlCVUlMRF9CVUdfT04oX24gPCAwKTsJCQkJCVwKIAkJCQkJCQkJCVwKIAkJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQoJigocHRyKS0+bmFtZSMjX2JlZ2luKSwgX24pOwlcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oCmluZGV4IGJmMTczNTAuLjM4ZDM5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaApAQCAtOTQsMTIgKzk0LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHNoX21tY2lmX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHJlZykKIHsKLQlyZXR1cm4gcmVhZGwoYWRkciArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGFkZHIgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfbW1jaWZfd3JpdGVsKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHJlZywgdTMyIHZhbCkKIHsKLQl3cml0ZWwodmFsLCBhZGRyICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBhZGRyICsgcmVnKTsKIH0KIAogI2RlZmluZSBTSF9NTUNJRl9CQlMgNTEyIC8qIGJvb3QgYmxvY2sgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggOGIxN2ZkOC4uOWJkZjI3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC01OCw2ICs1OCwxMiBAQAogCXZvaWQgKCpmcmVlKShzdHJ1Y3QgbW9kdWxlICopOwogfTsKIAorc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSB7CisJc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbWF0dHI7CisJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJY29uc3QgY2hhciAqdmVyc2lvbjsKK307CisKIHN0cnVjdCBtb2R1bGVfa29iamVjdAogewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CkBAIC0xNjEsNyArMTY3LDI4IEBACiAgIFVzaW5nIHRoaXMgYXV0b21hdGljYWxseSBhZGRzIGEgY2hlY2tzdW0gb2YgdGhlIC5jIGZpbGVzIGFuZCB0aGUKICAgbG9jYWwgaGVhZGVycyBpbiAic3JjdmVyc2lvbiIuCiAqLworCisjaWYgZGVmaW5lZChNT0RVTEUpIHx8ICFkZWZpbmVkKENPTkZJR19TWVNGUykKICNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pIE1PRFVMRV9JTkZPKHZlcnNpb24sIF92ZXJzaW9uKQorI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pCQkJCQlcCisJZXh0ZXJuIHNzaXplX3QgX19tb2R2ZXJfdmVyc2lvbl9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICosCVwKKwkJCQkJICAgICBzdHJ1Y3QgbW9kdWxlICosIGNoYXIgKik7CVwKKwlzdGF0aWMgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX21vZHZlcl92ZXJzaW9uX2F0dHIJXAorCV9fdXNlZAkJCQkJCQkJXAorICAgIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIl9fbW9kdmVyIiksYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKSBcCisJPSB7CQkJCQkJCQlcCisJCS5tYXR0cgk9IHsJCQkJCQlcCisJCQkuYXR0cgk9IHsJCQkJCVwKKwkJCQkubmFtZQk9ICJ2ZXJzaW9uIiwJCQlcCisJCQkJLm1vZGUJPSBTX0lSVUdPLAkJCVwKKwkJCX0sCQkJCQkJXAorCQkJLnNob3cJPSBfX21vZHZlcl92ZXJzaW9uX3Nob3csCQlcCisJCX0sCQkJCQkJCVwKKwkJLm1vZHVsZV9uYW1lCT0gS0JVSUxEX01PRE5BTUUsCQkJXAorCQkudmVyc2lvbgk9IF92ZXJzaW9uLAkJCQlcCisJfQorI2VuZGlmCiAKIC8qIE9wdGlvbmFsIGZpcm13YXJlIGZpbGUgKG9yIGZpbGVzKSBuZWVkZWQgYnkgdGhlIG1vZHVsZQogICogZm9ybWF0IGlzIHNpbXBseSBmaXJtd2FyZSBmaWxlIG5hbWUuICBNdWx0aXBsZSBmaXJtd2FyZQpAQCAtMzUwLDcgKzM3Nyw3IEBACiAJICAga2VlcGluZyBwb2ludGVycyB0byB0aGlzIHN0dWZmICovCiAJY2hhciAqYXJnczsKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqdHJhY2Vwb2ludHM7CisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHJhY2Vwb2ludHNfcHRyczsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCkBAIC0zNjIsNyArMzg5LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlX2JwcmludGtfZm10OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnRyYWNlX2V2ZW50czsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKip0cmFjZV9ldmVudHM7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9ldmVudHM7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAppbmRleCAxMTJhZGY4Li4wN2I0MTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0xNiwxNSArMTYsMTcgQEAKIC8qIENob3NlbiBzbyB0aGF0IHN0cnVjdHMgd2l0aCBhbiB1bnNpZ25lZCBsb25nIGxpbmUgdXAuICovCiAjZGVmaW5lIE1BWF9QQVJBTV9QUkVGSVhfTEVOICg2NCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkKIAotI2lmZGVmIE1PRFVMRQogI2RlZmluZSBfX19tb2R1bGVfY2F0KGEsYikgX19tb2RfICMjIGEgIyMgYgogI2RlZmluZSBfX21vZHVsZV9jYXQoYSxiKSBfX19tb2R1bGVfY2F0KGEsYikKKyNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCQkJCQkgIFwKIHN0YXRpYyBjb25zdCBjaGFyIF9fbW9kdWxlX2NhdChuYW1lLF9fTElORV9fKVtdCQkJCSAgXAogICBfX3VzZWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm1vZGluZm8iKSwgdW51c2VkLCBhbGlnbmVkKDEpKSkJICBcCiAgID0gX19zdHJpbmdpZnkodGFnKSAiPSIgaW5mbwogI2Vsc2UgIC8qICFNT0RVTEUgKi8KLSNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCisvKiBUaGlzIHN0cnVjdCBpcyBoZXJlIGZvciBzeW50YWN0aWMgY29oZXJlbmN5LCBpdCBpcyBub3QgdXNlZCAqLworI2RlZmluZSBfX01PRFVMRV9JTkZPKHRhZywgbmFtZSwgaW5mbykJCQkJCSAgXAorICBzdHJ1Y3QgX19tb2R1bGVfY2F0KG5hbWUsX19MSU5FX18pIHt9CiAjZW5kaWYKICNkZWZpbmUgX19NT0RVTEVfUEFSTV9UWVBFKG5hbWUsIF90eXBlKQkJCQkJICBcCiAgIF9fTU9EVUxFX0lORk8ocGFybXR5cGUsIG5hbWUjI3R5cGUsICNuYW1lICI6IiBfdHlwZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCmluZGV4IDBmYTdhM2EuLmIyMWQ1NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaApAQCAtMTUwLDYgKzE1MCw3IEBACiBleHRlcm4gaW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwogZXh0ZXJuIGludCBpcG1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGlwbXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGlwX21yX2luaXQodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCA2MDkxYWI3Li45ZDJkZWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaApAQCAtMTM2LDYgKzEzNiw3IEBACiBleHRlcm4gaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIGludCBfX3VzZXIgKik7CiBleHRlcm4gaW50IGlwNl9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKK2V4dGVybiBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGlwNl9tcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXA2X21yX2NsZWFudXAodm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaCBiL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKaW5kZXggZjMyMWI1Ny4uZmFiY2IxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCkBAIC01MSwxMCArNTEsMTAgQEAKIAlyZXR1cm4gdzsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGludAorZXh0ZXJuIGludAogbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQKK2V4dGVybiBpbnQKIG5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAogCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaCBiL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKaW5kZXggZDY4MjgzYS4uNTQyMTFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCkBAIC03MSw2ICs3MSw3IEBACiAKIC8qIHBvc2l4X2FjbC5jICovCiAKK2V4dGVybiB2b2lkIHBvc2l4X2FjbF9pbml0KHN0cnVjdCBwb3NpeF9hY2wgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfYWxsb2MoaW50LCBnZnBfdCk7CiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2Nsb25lKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgZ2ZwX3QpOwogZXh0ZXJuIGludCBwb3NpeF9hY2xfdmFsaWQoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAppbmRleCBmY2I5ODg0Li5hNTkzMGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCkBAIC0xODIsNiArMTgyLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiByZXNfY291bnRlcl9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgY291bnRlciBhbGxvd3MgY2hhcmdpbmcKKyAqIEBjbnQ6IHRoZSByZXNvdXJjZSBjb3VudGVyIHRvIGNoZWNrCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY2hlY2sgdGhlIHJlbWFpbmluZyBzcGFjZSBhZ2FpbnN0CisgKgorICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgb24gd2hldGhlciB0aGUgY291bnRlciBjYW4gYmUgY2hhcmdlZAorICogQGJ5dGVzIG9yIHdoZXRoZXIgdGhpcyB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKHN0cnVjdCByZXNfY291bnRlciAqY250LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwlib29sIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldCA9IGNudC0+bGltaXQgLSBjbnQtPnVzYWdlID49IGJ5dGVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9jaGVja191bmRlcl9zb2Z0X2xpbWl0KHN0cnVjdCByZXNfY291bnRlciAqY250KQogewogCWJvb2wgcmV0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMuaCBiL2luY2x1ZGUvbGludXgvcnRjLmgKaW5kZXggM2M5OTViNC4uYTBiNjM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0yMzUsOCArMjM1LDYgQEAKIAkJCQlzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2ssIGludCBmcmVxKTsKIGV4dGVybiBpbnQgcnRjX3VwZGF0ZV9pcnFfZW5hYmxlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHVuc2lnbmVkIGludCBlbmFibGVkKTsKIGV4dGVybiBpbnQgcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgdW5zaWduZWQgaW50IGVuYWJsZWQpOwotZXh0ZXJuIGludCBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKLQkJCQkJCXVuc2lnbmVkIGludCBlbmFibGVkKTsKIAogdm9pZCBydGNfYWllX3VwZGF0ZV9pcnEodm9pZCAqcHJpdmF0ZSk7CiB2b2lkIHJ0Y191aWVfdXBkYXRlX2lycSh2b2lkICpwcml2YXRlKTsKQEAgLTI0Niw4ICsyNDQsNiBAQAogaW50IHJ0Y191bnJlZ2lzdGVyKHJ0Y190YXNrX3QgKnRhc2spOwogaW50IHJ0Y19jb250cm9sKHJ0Y190YXNrX3QgKnQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotdm9pZCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcik7Ci12b2lkIHJ0Y190aW1lcl9yZW1vdmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpOwogdm9pZCBydGNfdGltZXJfaW5pdChzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lciwgdm9pZCAoKmYpKHZvaWQqIHApLCB2b2lkKiBkYXRhKTsKIGludCBydGNfdGltZXJfc3RhcnQoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciogdGltZXIsCiAJCQlrdGltZV90IGV4cGlyZXMsIGt0aW1lX3QgcGVyaW9kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCBjNjQyYmI4Li5iMmI3Zjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNjYyLDcgKzE2NjIsNyBAQAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpOwotaW50IHNlY3VyaXR5X2NhcGFibGUoaW50IGNhcCk7CitpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCk7CiBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCk7CiBpbnQgc2VjdXJpdHlfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApOwpAQCAtMTg1Niw5ICsxODU2LDkgQEAKIAlyZXR1cm4gY2FwX2NhcHNldChuZXcsIG9sZCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShpbnQgY2FwKQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCkKIHsKLQlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKKwlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3JlZCwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKaW5kZXggYzUwYjQ1OC4uMDgyODg0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaApAQCAtNDcsMTQgKzQ3LDYgQEAKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJcmV0dXJuIChzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKikKLQkJCXJxc3RwLT5ycV9zZXJ2ZXItPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KICNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLwogc3RhdGljIGlubGluZSBpbnQgeHBydF9zZXR1cF9iYWNrY2hhbm5lbChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbWluX3JlcXMpCkBAIC02NywxMSArNTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHhwcnRfZnJlZV9iY19yZXF1ZXN0KHN0cnVjdCBycGNfcnFzdCAqcmVxKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKaW5kZXggMDU5ODc3Yi4uN2FkOTc1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCkBAIC03Nyw3ICs3Nyw2IEBACiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXhwdF91c2VyczsJLyogY2FsbGJhY2tzIG9uIGZyZWUgKi8KLQl2b2lkCQkJKnhwdF9iY19zaWQ7CS8qIGJhY2sgY2hhbm5lbCBzZXNzaW9uIElEICovCiAKIAlzdHJ1Y3QgbmV0CQkqeHB0X25ldDsKIAlzdHJ1Y3QgcnBjX3hwcnQJCSp4cHRfYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDE4Y2QwNjguLjk4NjY0ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTEyNSwzOSArMTI1LDM3IEBACiBleHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBleGl0X3N5c2NhbGxfcHJpbnRfZnVuY3M7CiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAotCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKIAkgIGV2ZW50X2VudGVyXyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19lbnRlciIjc25hbWUsCQlcCiAJCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzX3N5c2NhbGxfZW50ZXIsCVwKIAkJLmV2ZW50LmZ1bmNzICAgICAgICAgICAgPSAmZW50ZXJfc3lzY2FsbF9wcmludF9mdW5jcywJXAogCQkuZGF0YQkJCT0gKHZvaWQgKikmX19zeXNjYWxsX21ldGFfIyNzbmFtZSxcCiAJfTsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCisJICpfX2V2ZW50X2VudGVyXyMjc25hbWUgPSAmZXZlbnRfZW50ZXJfIyNzbmFtZTsJCQlcCiAJX19UUkFDRV9FVkVOVF9GTEFHUyhlbnRlcl8jI3NuYW1lLCBUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZKQogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCiAJICBldmVudF9leGl0XyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9leGl0LAlcCiAJCS5ldmVudC5mdW5jcwkJPSAmZXhpdF9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAl9OwkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkqX19ldmVudF9leGl0XyMjc25hbWUgPSAmZXZlbnRfZXhpdF8jI3NuYW1lOwkJCVwKIAlfX1RSQUNFX0VWRU5UX0ZMQUdTKGV4aXRfIyNzbmFtZSwgVFJBQ0VfRVZFTlRfRkxfQ0FQX0FOWSkKIAogI2RlZmluZSBTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCBuYikJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXMiI3NuYW1lLAkJCVwKIAkJLm5iX2FyZ3MgCT0gbmIsCQkJCVwKQEAgLTE2NiwxNCArMTY0LDE1IEBACiAJCS5lbnRlcl9ldmVudAk9ICZldmVudF9lbnRlcl8jI3NuYW1lLAkJXAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0XyMjc25hbWUsCQlcCiAJCS5lbnRlcl9maWVsZHMJPSBMSVNUX0hFQURfSU5JVChfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKLQl9OworCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAqX19wX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gJl9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKQkJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lID0gewkJCQlcCiAJCS5uYW1lIAkJPSAic3lzXyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSAwLAkJCQlcCkBAIC0xODEsNiArMTgwLDkgQEAKIAkJLmV4aXRfZXZlbnQJPSAmZXZlbnRfZXhpdF9fIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKIAl9OwkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgKl9fcF9zeXNjYWxsX21ldGFfIyNzbmFtZSA9ICZfX3N5c2NhbGxfbWV0YV9fIyNzbmFtZTsJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXNfIyNzbmFtZSh2b2lkKQogI2Vsc2UKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKG5hbWUpCSAgIGFzbWxpbmthZ2UgbG9uZyBzeXNfIyNuYW1lKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggMzg3ZmE3ZC4uN2ZhZjkzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorLyogRW5hYmxlL2Rpc2FibGUgU1lTUlEgc3VwcG9ydCBieSBkZWZhdWx0ICgwPT1ubywgMT09eWVzKS4gKi8KKyNkZWZpbmUgU1lTUlFfREVGQVVMVF9FTkFCTEUJMQorCiAvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgYml0bWFzayBmb3IgZW5hYmxpbmcgc3lzcnEgZnVuY3Rpb25zICovCiAvKiAweDAwMDEgaXMgcmVzZXJ2ZWQgZm9yIGVuYWJsZSBldmVyeXRoaW5nICovCiAjZGVmaW5lIFNZU1JRX0VOQUJMRV9MT0cJMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGM2ODE0NjEuLjk3Yzg0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMywxMiArMzMsNyBAQAogCXZvaWQgKCpyZWdmdW5jKSh2b2lkKTsKIAl2b2lkICgqdW5yZWdmdW5jKSh2b2lkKTsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jIF9fcmN1ICpmdW5jczsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsJCS8qCi0JCQkJCSAqIEFsaWduZWQgb24gMzIgYnl0ZXMgYmVjYXVzZSBpdCBpcwotCQkJCQkgKiBnbG9iYWxseSB2aXNpYmxlIGFuZCBnY2MgaGFwcGlseQotCQkJCQkgKiBhbGlnbiB0aGVzZSBvbiB0aGUgc3RydWN0dXJlIHNpemUuCi0JCQkJCSAqIEtlZXAgaW4gc3luYyB3aXRoIHZtbGludXgubGRzLmguCi0JCQkJCSAqLworfTsKIAogLyoKICAqIENvbm5lY3QgYSBwcm9iZSB0byBhIHRyYWNlcG9pbnQuCkBAIC02MSwxNSArNTYsMTUgQEAKIAogc3RydWN0IHRyYWNlcG9pbnRfaXRlciB7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50OworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnQ7CiB9OwogCiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RhcnQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfbmV4dChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKIGV4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9zdG9wKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwotZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogCiAvKgogICogdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgdHJhY2Vwb2ludApAQCAtODQsMTEgKzc5LDEzIEBACiAjZGVmaW5lIFBBUkFNUyhhcmdzLi4uKSBhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLWV4dGVybiB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKK2V4dGVybgordm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogeyB9CiAjZW5kaWYgLyogQ09ORklHX1RSQUNFUE9JTlRTICovCiAKQEAgLTE3NCwxMiArMTcxLDIwIEBACiAJewkJCQkJCQkJXAogCX0KIAorLyoKKyAqIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgZ2NjIGFuZCB0aGUgbGlua2VyIHdvbid0IHVwLWFsaWduIHRoZSB0cmFjZXBvaW50CisgKiBzdHJ1Y3R1cmVzLCBzbyB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbgorICogb24gdGhlIHRyYWNlcG9pbnRzLgorICovCiAjZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQlcCiAJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKSA9ICNuYW1lOwlcCiAJc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpLCBhbGlnbmVkKDMyKSkpID0JXAotCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH0KKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIikpKSA9CQkJXAorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH07CQlcCisJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCVwKKwkJJl9fdHJhY2Vwb2ludF8jI25hbWU7CiAKICNkZWZpbmUgREVGSU5FX1RSQUNFKG5hbWUpCQkJCQkJXAogCURFRklORV9UUkFDRV9GTihuYW1lLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKaW5kZXggNWU4NmRjNy4uODFhOTI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKQEAgLTg5LDcgKzg5LDcgQEAKIAogI2RlZmluZSBVU0JfQ0RDX0NPTU1fRkVBVFVSRQkweDAxCiAjZGVmaW5lIFVTQl9DRENfQ0FQX0xJTkUJMHgwMgotI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJMHgwNAorI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJCTB4MDQKICNkZWZpbmUgVVNCX0NEQ19DQVBfTk9USUZZCTB4MDgKIAogLyogIlVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy44ICovCkBAIC0yNzEsNiArMjcxLDExIEBACiAJX19sZTE2CXdMZW5ndGg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlIHsKKwlfX2xlMzIJRExCaXRSUmF0ZTsJLyogY29udGFpbnMgdGhlIGRvd25saW5rIGJpdCByYXRlIChJTiBwaXBlKSAqLworCV9fbGUzMglVTEJpdFJhdGU7CS8qIGNvbnRhaW5zIHRoZSB1cGxpbmsgYml0IHJhdGUgKE9VVCBwaXBlKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0yOTIsNyArMjk3LDcgQEAKIAlfX2xlMTYJd05kcE91dERpdmlzb3I7CiAJX19sZTE2CXdOZHBPdXRQYXlsb2FkUmVtYWluZGVyOwogCV9fbGUxNgl3TmRwT3V0QWxpZ25tZW50OwotCV9fbGUxNgl3UGFkZGluZzI7CisJX19sZTE2CXdOdGJPdXRNYXhEYXRhZ3JhbXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKQEAgLTMwNyw3ICszMTIsNyBAQAogCV9fbGUxNgl3SGVhZGVyTGVuZ3RoOwogCV9fbGUxNgl3U2VxdWVuY2U7CiAJX19sZTE2CXdCbG9ja0xlbmd0aDsKLQlfX2xlMTYJd0ZwSW5kZXg7CisJX19sZTE2CXdOZHBJbmRleDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMzIgewpAQCAtMzE1LDcgKzMyMCw3IEBACiAJX19sZTE2CXdIZWFkZXJMZW5ndGg7CiAJX19sZTE2CXdTZXF1ZW5jZTsKIAlfX2xlMzIJZHdCbG9ja0xlbmd0aDsKLQlfX2xlMzIJZHdGcEluZGV4OworCV9fbGUzMglkd05kcEluZGV4OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qCkBAIC0zMzcsNyArMzQyLDcgQEAKIHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNiB7CiAJX19sZTMyCWR3U2lnbmF0dXJlOwogCV9fbGUxNgl3TGVuZ3RoOwotCV9fbGUxNgl3TmV4dEZwSW5kZXg7CisJX19sZTE2CXdOZXh0TmRwSW5kZXg7CiAJc3RydWN0CXVzYl9jZGNfbmNtX2RwZTE2IGRwZTE2WzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTM3NSw2ICszODAsNyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0VOQ0FQX0NPTU1BTkQJCQkoMSA8PCAyKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFCQkoMSA8PCAzKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0NSQ19NT0RFCQkJKDEgPDwgNCkKKyNkZWZpbmUJVVNCX0NEQ19OQ01fTkNBUF9OVEJfSU5QVVRfU0laRQkJCSgxIDw8IDUpCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgVGFibGUgNi0zOiBOVEIgUGFyYW1ldGVyIFN0cnVjdHVyZSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIxNl9TVVBQT1JURUQJCQkoMSA8PCAwKQpAQCAtMzkyLDYgKzM5OCwxMyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUJCQkyMDQ4CiAjZGVmaW5lIFVTQl9DRENfTkNNX05UQl9NSU5fT1VUX1NJWkUJCQkyMDQ4CiAKKy8qIE5UQiBJbnB1dCBTaXplIFN0cnVjdHVyZSAqLworc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplIHsKKwlfX2xlMzIJZHdOdGJJbk1heFNpemU7CisJX19sZTE2CXdOdGJJbk1heERhdGFncmFtczsKKwlfX2xlMTYJd1Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIENEQyBOQ00gc3ViY2xhc3MgNi4yLjExIFNldENyY01vZGUgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRAkJCTB4MDAKICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX0FQUEVOREVECQkJMHgwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAppbmRleCBkZDZlZTQ5Li5hODU0ZmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaApAQCAtMTEyLDYgKzExMiw3IEBACiAJLyogRmxhZ3MgdGhhdCBnZXQgc2V0IG9ubHkgZHVyaW5nIEhDRCByZWdpc3RyYXRpb24gb3IgcmVtb3ZhbC4gKi8KIAl1bnNpZ25lZAkJcmhfcmVnaXN0ZXJlZDoxOy8qIGlzIHJvb3QgaHViIHJlZ2lzdGVyZWQ/ICovCiAJdW5zaWduZWQJCXJoX3BvbGxhYmxlOjE7CS8qIG1heSB3ZSBwb2xsIHRoZSByb290IGh1Yj8gKi8KKwl1bnNpZ25lZAkJbXNpeF9lbmFibGVkOjE7CS8qIGRyaXZlciBoYXMgTVNJLVggZW5hYmxlZD8gKi8KIAogCS8qIFRoZSBuZXh0IGZsYWcgaXMgYSBzdG9wZ2FwLCB0byBiZSByZW1vdmVkIHdoZW4gYWxsIHRoZSBIQ0RzCiAJICogc3VwcG9ydCB0aGUgbmV3IHJvb3QtaHViIHBvbGxpbmcgbWVjaGFuaXNtLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAppbmRleCBiOTJlMTczLi43ZDFiYWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaApAQCAtMTYsMTIgKzE2LDggQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX01TTTcyS19VRENfSF9fCiAjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9NU003MktfVURDX0hfXwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVNNN1gwMEEKLSNkZWZpbmUgVVNCX1NCVVNDRkcgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDA5MCkKLSNlbHNlCiAjZGVmaW5lIFVTQl9BSEJCVVJTVCAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCiAjZGVmaW5lIFVTQl9BSEJNT0RFICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTgpCi0jZW5kaWYKICNkZWZpbmUgVVNCX0NBUExFTkdUSCAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDEwMCkgLyogOCBiaXQgKi8KIAogI2RlZmluZSBVU0JfVVNCQ01EICAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMTQwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAxNmQ2ODJmLi5jOTA0OTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMzQ3LDYgKzM0Nyw5IEBACiBleHRlcm4gaW50IHVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJdW5zaWduZWQgaW50IGNoKTsKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCQkgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJIHVuc2lnbmVkIGludCBzdGF0dXMpOwogCiAKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAppbmRleCAwMDkzZGQ3Li44MDA2MTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaApAQCAtMTA5LDcgKzEwOSwxMCBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBmYml0KQogewogCS8qIERpZCB5b3UgZm9yZ2V0IHRvIGZpeCBhc3N1bXB0aW9ucyBvbiBtYXggZmVhdHVyZXM/ICovCi0JTUFZQkVfQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmYml0KSkKKwkJQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCWVsc2UKKwkJQlVHX09OKGZiaXQgPj0gMzIpOwogCiAJaWYgKGZiaXQgPCBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQpCiAJCXZpcnRpb19jaGVja19kcml2ZXJfb2ZmZXJlZF9mZWF0dXJlKHZkZXYsIGZiaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGE4NTA2NGQuLmU0ZDMzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTcsNyArNyw4IEBACiAgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwCisgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAsIDIwMTEKKyAqIENvcHlyaWdodCAoQykgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4sIDIwMDksIDIwMTAsIDIwMTEKICAqLwogCiAvKiBGZWF0dXJlIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggYTI5ZmViMC4uZDJjZjg4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTE4NCw2ICsxODQsNyBAQAogCV9fdTMyCQkgbGlua19tb2RlOwogCV9fdTggICAgICAgICAgICAgYXV0aF90eXBlOwogCV9fdTggICAgICAgICAgICAgc2VjX2xldmVsOworCV9fdTgJCSBwZW5kaW5nX3NlY19sZXZlbDsKIAlfX3U4ICAgICAgICAgICAgIHBvd2VyX3NhdmU7CiAJX191MTYgICAgICAgICAgICBkaXNjX3RpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZwkgcGVuZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKaW5kZXggOGE2NGI4MS4uYjRjN2MxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKQEAgLTE5NSw3ICsxOTUsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VubG1zZ19jYW5jZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyKQogewotCW5sbXNnX2NhbmNlbChza2IsIGhkciAtIEdFTkxfSERSTEVOIC0gTkxNU0dfSERSTEVOKTsKKwlpZiAoaGRyKQorCQlubG1zZ19jYW5jZWwoc2tiLCBoZHIgLSBHRU5MX0hEUkxFTiAtIE5MTVNHX0hEUkxFTik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKaW5kZXggOTZiYTVmNy4uMzQ5Y2VmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCkBAIC03Nyw5ICs3Nyw2IEBACiAJaWYgKGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaWYgKCEoZS0+Y3RtYXNrICYgKDEgPDwgZXZlbnQpKSkKLQkJcmV0dXJuOwotCiAJc2V0X2JpdChldmVudCwgJmUtPmNhY2hlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZTllZWU5OS4uMTYwYTQwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC00NDUsNyArNDQ1LDYgQEAKIHsKIAlfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYik7CiAJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KQEAgLTQ2MCw4ICs0NTksMTAgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KTsKIAotCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQorCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gcWRpc2NfcGt0X2xlbihza2IpOworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKKwl9CiAKIAlyZXR1cm4gc2tiOwogfQpAQCAtNDc0LDEwICs0NzUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQogewotCXN0cnVjdCBza19idWZmICpza2IgPSBfX3FkaXNjX2RlcXVldWVfaGVhZChzY2gsIGxpc3QpOworCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpOwogCiAJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKIAkJdW5zaWduZWQgaW50IGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBsZW47CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gbGVuOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBkODg0ZDI2Li5iYzFjZjdkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtNzUzLDYgKzc1Myw4IEBACiAJCQkJCWludCBsZXZlbCwKIAkJCQkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCiAJCQkJCWludCBfX3VzZXIgKm9wdGlvbik7CisJaW50CQkJKCpjb21wYXRfaW9jdGwpKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogI2VuZGlmCiAJaW50CQkJKCpzZW5kbXNnKShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDY0OGQyMzMuLmI3NmQ0MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtOSw2ICs5LDcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IGUxNjYxMGMuLjNlNjgzNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaApAQCAtNDQ2LDE0ICs0NDYsMTYgQEAKICAqCS5yZWcJCQk9IGZ0cmFjZV9ldmVudF9yZWcsCiAgKiB9OwogICoKLSAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCi0gKiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCi0gKiBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfPGNhbGw+ID0geworICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF88Y2FsbD4gPSB7CiAgKgkubmFtZQkJCT0gIjxjYWxsPiIsCiAgKgkuY2xhc3MJCQk9IGV2ZW50X2NsYXNzXzx0ZW1wbGF0ZT4sCiAgKgkuZXZlbnQJCQk9ICZmdHJhY2VfZXZlbnRfdHlwZV88Y2FsbD4sCiAgKgkucHJpbnRfZm10CQk9IHByaW50X2ZtdF88Y2FsbD4sCiAgKiB9OworICogLy8gaXRzIG9ubHkgc2FmZSB0byB1c2UgcG9pbnRlcnMgd2hlbiBkb2luZyBsaW5rZXIgdHJpY2tzIHRvCisgKiAvLyBjcmVhdGUgYW4gYXJyYXkuCisgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAorICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpICpfX2V2ZW50XzxjYWxsPiA9ICZldmVudF88Y2FsbD47CiAgKgogICovCiAKQEAgLTU3OSwyOCArNTgxLDI4IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKLV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQgZXZlbnRfIyNjYWxsID0gewkJCVwKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc18jI3RlbXBsYXRlLAkJXAogCS5ldmVudC5mdW5jcwkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfZnVuY3NfIyN0ZW1wbGF0ZSwJXAogCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjdGVtcGxhdGUsCQkJXAotfTsKK307CQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsCiAKICN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncywgcHJpbnQpCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgY29uc3QgY2hhciBwcmludF9mbXRfIyNjYWxsW10gPSBwcmludDsJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKLV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQgZXZlbnRfIyNjYWxsID0gewkJCVwKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc18jI3RlbXBsYXRlLAkJXAogCS5ldmVudC5mdW5jcwkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfZnVuY3NfIyNjYWxsLAlcCiAJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfIyNjYWxsLAkJCVwKLX0KK307CQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsCiAKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCmRpZmYgLS1naXQgYS9pbml0L2NhbGlicmF0ZS5jIGIvaW5pdC9jYWxpYnJhdGUuYwppbmRleCA2ZWI0OGU1Li4yNGZlMDIyIDEwMDY0NAotLS0gYS9pbml0L2NhbGlicmF0ZS5jCisrKyBiL2luaXQvY2FsaWJyYXRlLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJcHJlX3N0YXJ0ID0gMDsKIAkJcmVhZF9jdXJyZW50X3RpbWVyKCZzdGFydCk7CiAJCXN0YXJ0X2ppZmZpZXMgPSBqaWZmaWVzOwotCQl3aGlsZSAoamlmZmllcyA8PSAoc3RhcnRfamlmZmllcyArIDEpKSB7CisJCXdoaWxlICh0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBzdGFydF9qaWZmaWVzICsgMSkpIHsKIAkJCXByZV9zdGFydCA9IHN0YXJ0OwogCQkJcmVhZF9jdXJyZW50X3RpbWVyKCZzdGFydCk7CiAJCX0KQEAgLTc0LDggKzc0LDggQEAKIAogCQlwcmVfZW5kID0gMDsKIAkJZW5kID0gcG9zdF9zdGFydDsKLQkJd2hpbGUgKGppZmZpZXMgPD0KLQkJICAgICAgIChzdGFydF9qaWZmaWVzICsgMSArIERFTEFZX0NBTElCUkFUSU9OX1RJQ0tTKSkgeworCQl3aGlsZSAodGltZV9iZWZvcmVfZXEoamlmZmllcywgc3RhcnRfamlmZmllcyArIDEgKworCQkJCQkgICAgICAgREVMQVlfQ0FMSUJSQVRJT05fVElDS1MpKSB7CiAJCQlwcmVfZW5kID0gZW5kOwogCQkJcmVhZF9jdXJyZW50X3RpbWVyKCZlbmQpOwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvY2FwYWJpbGl0eS5jIGIva2VybmVsL2NhcGFiaWxpdHkuYwppbmRleCAyZjA1MzAzLi45ZTkzODVmIDEwMDY0NAotLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jCisrKyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCQlCVUcoKTsKIAl9CiAKLQlpZiAoc2VjdXJpdHlfY2FwYWJsZShjYXApID09IDApIHsKKwlpZiAoc2VjdXJpdHlfY2FwYWJsZShjdXJyZW50X2NyZWQoKSwgY2FwKSA9PSAwKSB7CiAJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NVUEVSUFJJVjsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NyZWQuYyBiL2tlcm5lbC9jcmVkLmMKaW5kZXggNmExYWEwMC4uM2E5ZDZkZCAxMDA2NDQKLS0tIGEva2VybmVsL2NyZWQuYworKysgYi9rZXJuZWwvY3JlZC5jCkBAIC0yNTIsMTMgKzI1MiwxMyBAQAogI2VuZGlmCiAKIAlhdG9taWNfc2V0KCZuZXctPnVzYWdlLCAxKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKKwluZXctPm1hZ2ljID0gQ1JFRF9NQUdJQzsKKyNlbmRpZgogCiAJaWYgKHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsobmV3LCBHRlBfS0VSTkVMKSA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKLQluZXctPm1hZ2ljID0gQ1JFRF9NQUdJQzsKLSNlbmRpZgogCXJldHVybiBuZXc7CiAKIGVycm9yOgpAQCAtNjU3LDYgKzY1Nyw4IEBACiAJdmFsaWRhdGVfY3JlZHMob2xkKTsKIAogCSpuZXcgPSAqb2xkOworCWF0b21pY19zZXQoJm5ldy0+dXNhZ2UsIDEpOworCXNldF9jcmVkX3N1YnNjcmliZXJzKG5ldywgMCk7CiAJZ2V0X3VpZChuZXctPnVzZXIpOwogCWdldF9ncm91cF9pbmZvKG5ldy0+Z3JvdXBfaW5mbyk7CiAKQEAgLTY3NCw4ICs2NzYsNiBAQAogCWlmIChzZWN1cml0eV9wcmVwYXJlX2NyZWRzKG5ldywgb2xkLCBHRlBfS0VSTkVMKSA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQlhdG9taWNfc2V0KCZuZXctPnVzYWdlLCAxKTsKLQlzZXRfY3JlZF9zdWJzY3JpYmVycyhuZXcsIDApOwogCXB1dF9jcmVkKG9sZCk7CiAJdmFsaWRhdGVfY3JlZHMobmV3KTsKIAlyZXR1cm4gbmV3OwpAQCAtNzQ4LDcgKzc0OCwxMSBAQAogCWlmIChjcmVkLT5tYWdpYyAhPSBDUkVEX01BR0lDKQogCQlyZXR1cm4gdHJ1ZTsKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWAotCWlmIChzZWxpbnV4X2lzX2VuYWJsZWQoKSkgeworCS8qCisJICogY3JlZC0+c2VjdXJpdHkgPT0gTlVMTCBpZiBzZWN1cml0eV9jcmVkX2FsbG9jX2JsYW5rKCkgb3IKKwkgKiBzZWN1cml0eV9wcmVwYXJlX2NyZWRzKCkgcmV0dXJuZWQgYW4gZXJyb3IuCisJICovCisJaWYgKHNlbGludXhfaXNfZW5hYmxlZCgpICYmIGNyZWQtPnNlY3VyaXR5KSB7CiAJCWlmICgodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJaWYgKCgqKHUzMiAqKWNyZWQtPnNlY3VyaXR5ICYgMHhmZmZmZmYwMCkgPT0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDFkMjU0MTkuLjQ0MWZkNjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtNTYsNiArNTYsNyBAQAogdm9pZCBtb3ZlX25hdGl2ZV9pcnEoaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWJvb2wgbWFza2VkOwogCiAJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSkKIAkJcmV0dXJuOwpAQCAtNjMsOCArNjQsMTUgQEAKIAlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKIAkJcmV0dXJuOwogCi0JZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsKKwkvKgorCSAqIEJlIGNhcmVmdWwgdnMuIGFscmVhZHkgbWFza2VkIGludGVycnVwdHMuIElmIHRoaXMgaXMgYQorCSAqIHRocmVhZGVkIGludGVycnVwdCB3aXRoIE9ORVNIT1Qgc2V0LCB3ZSBjYW4gZW5kIHVwIHdpdGggYW4KKwkgKiBpbnRlcnJ1cHQgc3Rvcm0uCisJICovCisJbWFza2VkID0gZGVzYy0+c3RhdHVzICYgSVJRX01BU0tFRDsKKwlpZiAoIW1hc2tlZCkKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsKIAltb3ZlX21hc2tlZF9pcnEoaXJxKTsKLQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CisJaWYgKCFtYXNrZWQpCisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDM0ZTAwYjcuLmVmYTI5MGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTI0NjAsOSArMjQ2MCw5IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwotCW1vZC0+dHJhY2Vwb2ludHMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fdHJhY2Vwb2ludHMiLAotCQkJCQlzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHMpLAotCQkJCQkmbW9kLT5udW1fdHJhY2Vwb2ludHMpOworCW1vZC0+dHJhY2Vwb2ludHNfcHRycyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX190cmFjZXBvaW50c19wdHJzIiwKKwkJCQkJICAgICBzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHNfcHRycyksCisJCQkJCSAgICAgJm1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAogCW1vZC0+anVtcF9lbnRyaWVzID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX2p1bXBfdGFibGUiLApAQCAtMzM5Myw3ICszMzkzLDcgQEAKIAkJICAgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLAogCQkgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwKIAkJICAgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzLAotCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCisJCSAgIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRwKQogewogfQogRVhQT1JUX1NZTUJPTChtb2R1bGVfbGF5b3V0KTsKQEAgLTM0MDcsOCArMzQwNyw4IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpCiAJCWlmICghbW9kLT50YWludHMpCi0JCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAotCQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzX3B0cnMsCisJCQkJbW9kLT50cmFjZXBvaW50c19wdHJzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIH0KIApAQCAtMzQzMiw4ICszNDMyLDggQEAKIAkJCWVsc2UgaWYgKGl0ZXJfbW9kID4gaXRlci0+bW9kdWxlKQogCQkJCWl0ZXItPnRyYWNlcG9pbnQgPSBOVUxMOwogCQkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50cywKLQkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHMKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHNfcHRycwogCQkJCQkrIGl0ZXJfbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCQkJaWYgKGZvdW5kKSB7CiAJCQkJaXRlci0+bW9kdWxlID0gaXRlcl9tb2Q7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggMDgxMDdkMS4uMGRhMTQxMSAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtNzE5LDkgKzcxOSw3IEBACiAJCQlwYXJhbXNbaV0ub3BzLT5mcmVlKHBhcmFtc1tpXS5hcmcpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKLQkJCQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQorc3RhdGljIHN0cnVjdCBtb2R1bGVfa29iamVjdCAqIF9faW5pdCBsb2NhdGVfbW9kdWxlX2tvYmplY3QoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rOwogCXN0cnVjdCBrb2JqZWN0ICprb2JqOwpAQCAtNzI5LDEwICs3MjcsNyBAQAogCiAJa29iaiA9IGtzZXRfZmluZF9vYmoobW9kdWxlX2tzZXQsIG5hbWUpOwogCWlmIChrb2JqKSB7Ci0JCS8qIFdlIGFscmVhZHkgaGF2ZSBvbmUuICBSZW1vdmUgcGFyYW1zIHNvIHdlIGNhbiBhZGQgbW9yZS4gKi8KIAkJbWsgPSB0b19tb2R1bGVfa29iamVjdChrb2JqKTsKLQkJLyogV2UgbmVlZCB0byByZW1vdmUgaXQgYmVmb3JlIGFkZGluZyBwYXJhbWV0ZXJzLiAqLwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1rLT5rb2JqLCAmbWstPm1wLT5ncnApOwogCX0gZWxzZSB7CiAJCW1rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vZHVsZV9rb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CiAJCUJVR19PTighbWspOwpAQCAtNzQzLDE1ICs3MzgsMzYgQEAKIAkJCQkJICAgIiVzIiwgbmFtZSk7CiAJCWlmIChlcnIpIHsKIAkJCWtvYmplY3RfcHV0KCZtay0+a29iaik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk1vZHVsZSAnJXMnIGZhaWxlZCBhZGQgdG8gc3lzZnMsICIKLQkJCSAgICAgICAiZXJyb3IgbnVtYmVyICVkXG4iLCBuYW1lLCBlcnIpOwotCQkJcHJpbnRrKEtFUk5fRVJSCSJUaGUgc3lzdGVtIHdpbGwgYmUgdW5zdGFibGUgbm93LlxuIik7Ci0JCQlyZXR1cm47CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiTW9kdWxlICclcycgZmFpbGVkIGFkZCB0byBzeXNmcywgZXJyb3IgbnVtYmVyICVkXG4iLAorCQkJCW5hbWUsIGVycik7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiVGhlIHN5c3RlbSB3aWxsIGJlIHVuc3RhYmxlIG5vdy5cbiIpOworCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJLyogU28gdGhhdCBleGl0IHBhdGggaXMgZXZlbi4gKi8KKworCQkvKiBTbyB0aGF0IHdlIGhvbGQgcmVmZXJlbmNlIGluIGJvdGggY2FzZXMuICovCiAJCWtvYmplY3RfZ2V0KCZtay0+a29iaik7CiAJfQogCisJcmV0dXJuIG1rOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQoreworCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CisJaW50IGVycjsKKworCW1rID0gbG9jYXRlX21vZHVsZV9rb2JqZWN0KG5hbWUpOworCWlmICghbWspCisJCXJldHVybjsKKworCS8qIFdlIG5lZWQgdG8gcmVtb3ZlIG9sZCBwYXJhbWV0ZXJzIGJlZm9yZSBhZGRpbmcgbW9yZS4gKi8KKwlpZiAobWstPm1wKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1rLT5rb2JqLCAmbWstPm1wLT5ncnApOworCiAJLyogVGhlc2Ugc2hvdWxkIG5vdCBmYWlsIGF0IGJvb3QuICovCiAJZXJyID0gYWRkX3N5c2ZzX3BhcmFtKG1rLCBrcGFyYW0sIGtwYXJhbS0+bmFtZSArIG5hbWVfc2tpcCk7CiAJQlVHX09OKGVycik7CkBAIC03OTYsNiArODEyLDMyIEBACiAJfQogfQogCitzc2l6ZV90IF9fbW9kdmVyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlICp2YXR0ciA9CisJCWNvbnRhaW5lcl9vZihtYXR0ciwgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSwgbWF0dHIpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHZhdHRyLT52ZXJzaW9uKTsKK30KKworZXh0ZXJuIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19zdGFydF9fX21vZHZlcltdLCBfX3N0b3BfX19tb2R2ZXJbXTsKKworc3RhdGljIHZvaWQgX19pbml0IHZlcnNpb25fc3lzZnNfYnVpbHRpbih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKnZhdHRyOworCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CisJaW50IGVycjsKKworCWZvciAodmF0dHIgPSBfX3N0YXJ0X19fbW9kdmVyOyB2YXR0ciA8IF9fc3RvcF9fX21vZHZlcjsgdmF0dHIrKykgeworCQltayA9IGxvY2F0ZV9tb2R1bGVfa29iamVjdCh2YXR0ci0+bW9kdWxlX25hbWUpOworCQlpZiAobWspIHsKKwkJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZtay0+a29iaiwgJnZhdHRyLT5tYXR0ci5hdHRyKTsKKwkJCWtvYmplY3RfdWV2ZW50KCZtay0+a29iaiwgS09CSl9BREQpOworCQkJa29iamVjdF9wdXQoJm1rLT5rb2JqKTsKKwkJfQorCX0KK30KIAogLyogbW9kdWxlLXJlbGF0ZWQgc3lzZnMgc3R1ZmYgKi8KIApAQCAtODc1LDYgKzkxNyw3IEBACiAJfQogCW1vZHVsZV9zeXNmc19pbml0aWFsaXplZCA9IDE7CiAKKwl2ZXJzaW9uX3N5c2ZzX2J1aWx0aW4oKTsKIAlwYXJhbV9zeXNmc19idWlsdGluKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDg0NTIyYzcuLjk5OTgzNWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTkwMSwxMSArMTkwMSwxMiBAQAogCQlyZXR1cm47CiAKIAlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKwlpZiAoY3R4LT5pc19hY3RpdmUpCisJCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKIAl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOworCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLQotCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2V2ZW50X2NvdW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTE5OTksOCArMjAwMCw3IEBACiAJICogYWNjZXNzZWQgZnJvbSBOTUkuIFVzZSBhIHRlbXBvcmFyeSBtYW51YWwgcGVyIGNwdSBhbGxvY2F0aW9uCiAJICogdW50aWwgdGhhdCBnZXRzIHNvcnRlZCBvdXQuCiAJICovCi0Jc2l6ZSA9IHNpemVvZigqZW50cmllcykgKyBzaXplb2Yoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICopICoKLQkJbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKwlzaXplID0gb2Zmc2V0b2Yoc3RydWN0IGNhbGxjaGFpbl9jcHVzX2VudHJpZXMsIGNwdV9lbnRyaWVzW25yX2NwdV9pZHNdKTsKIAogCWVudHJpZXMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghZW50cmllcykKQEAgLTIyMDEsMTMgKzIyMDEsNiBAQAogCWlmICghdGFzaykKIAkJcmV0dXJuIEVSUl9QVFIoLUVTUkNIKTsKIAotCS8qCi0JICogQ2FuJ3QgYXR0YWNoIGV2ZW50cyB0byBhIGR5aW5nIHRhc2suCi0JICovCi0JZXJyID0gLUVTUkNIOwotCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCi0JCWdvdG8gZXJyb3V0OwotCiAJLyogUmV1c2UgcHRyYWNlIHBlcm1pc3Npb24gY2hlY2tzIGZvciBub3cuICovCiAJZXJyID0gLUVBQ0NFUzsKIAlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQpAQCAtMjI2OCwxNCArMjI2MSwyNyBAQAogCiAJCWdldF9jdHgoY3R4KTsKIAotCQlpZiAoY21weGNoZygmdGFzay0+cGVyZl9ldmVudF9jdHhwW2N0eG5dLCBOVUxMLCBjdHgpKSB7Ci0JCQkvKgotCQkJICogV2UgcmFjZWQgd2l0aCBzb21lIG90aGVyIHRhc2s7IHVzZQotCQkJICogdGhlIGNvbnRleHQgdGhleSBzZXQuCi0JCQkgKi8KKwkJZXJyID0gMDsKKwkJbXV0ZXhfbG9jaygmdGFzay0+cGVyZl9ldmVudF9tdXRleCk7CisJCS8qCisJCSAqIElmIGl0IGhhcyBhbHJlYWR5IHBhc3NlZCBwZXJmX2V2ZW50X2V4aXRfdGFzaygpLgorCQkgKiB3ZSBtdXN0IHNlZSBQRl9FWElUSU5HLCBpdCB0YWtlcyB0aGlzIG11dGV4IHRvby4KKwkJICovCisJCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCQllcnIgPSAtRVNSQ0g7CisJCWVsc2UgaWYgKHRhc2stPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSkKKwkJCWVyciA9IC1FQUdBSU47CisJCWVsc2UKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcih0YXNrLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0sIGN0eCk7CisJCW11dGV4X3VubG9jaygmdGFzay0+cGVyZl9ldmVudF9tdXRleCk7CisKKwkJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAkJCWtmcmVlKGN0eCk7Ci0JCQlnb3RvIHJldHJ5OworCisJCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCQkJZ290byByZXRyeTsKKwkJCWdvdG8gZXJyb3V0OwogCQl9CiAJfQogCkBAIC01Mzc0LDYgKzUzODAsOCBAQAogCWdvdG8gb3V0OwogfQogCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGNwdWN0eF9tdXRleDsKKwogaW50IHBlcmZfcG11X3JlZ2lzdGVyKHN0cnVjdCBwbXUgKnBtdSwgY2hhciAqbmFtZSwgaW50IHR5cGUpCiB7CiAJaW50IGNwdSwgcmV0OwpAQCAtNTQyMiw2ICs1NDMwLDcgQEAKIAogCQljcHVjdHggPSBwZXJfY3B1X3B0cihwbXUtPnBtdV9jcHVfY29udGV4dCwgY3B1KTsKIAkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dCgmY3B1Y3R4LT5jdHgpOworCQlsb2NrZGVwX3NldF9jbGFzcygmY3B1Y3R4LT5jdHgubXV0ZXgsICZjcHVjdHhfbXV0ZXgpOwogCQljcHVjdHgtPmN0eC50eXBlID0gY3B1X2NvbnRleHQ7CiAJCWNwdWN0eC0+Y3R4LnBtdSA9IHBtdTsKIAkJY3B1Y3R4LT5qaWZmaWVzX2ludGVydmFsID0gMTsKQEAgLTYxMjcsNyArNjEzNiw3IEBACiAJICogc2NoZWR1bGVkLCBzbyB3ZSBhcmUgbm93IHNhZmUgZnJvbSByZXNjaGVkdWxpbmcgY2hhbmdpbmcKIAkgKiBvdXIgY29udGV4dC4KIAkgKi8KLQljaGlsZF9jdHggPSBjaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dOworCWNoaWxkX2N0eCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoY2hpbGQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSk7CiAJdGFza19jdHhfc2NoZWRfb3V0KGNoaWxkX2N0eCwgRVZFTlRfQUxMKTsKIAogCS8qCkBAIC02NDQwLDExICs2NDQ5LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0JY2hpbGQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSA9IE5VTEw7Ci0KLQltdXRleF9pbml0KCZjaGlsZC0+cGVyZl9ldmVudF9tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5wZXJmX2V2ZW50X2xpc3QpOwotCiAJaWYgKGxpa2VseSghcGFyZW50LT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0pKQogCQlyZXR1cm4gMDsKIApAQCAtNjUzMyw2ICs2NTM3LDEwIEBACiB7CiAJaW50IGN0eG4sIHJldDsKIAorCW1lbXNldChjaGlsZC0+cGVyZl9ldmVudF9jdHhwLCAwLCBzaXplb2YoY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCkpOworCW11dGV4X2luaXQoJmNoaWxkLT5wZXJmX2V2ZW50X211dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPnBlcmZfZXZlbnRfbGlzdCk7CisKIAlmb3JfZWFjaF90YXNrX2NvbnRleHRfbnIoY3R4bikgewogCQlyZXQgPSBwZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZCwgY3R4bik7CiAJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggNTNkOWE5ZS4uMzYyMzE1MiAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtOTcsNyArOTcsNyBAQAogLyoKICAqIGxvZ2J1Zl9sb2NrIHByb3RlY3RzIGxvZ19idWYsIGxvZ19zdGFydCwgbG9nX2VuZCwgY29uX3N0YXJ0IGFuZCBsb2dnZWRfY2hhcnMKICAqIEl0IGlzIGFsc28gdXNlZCBpbiBpbnRlcmVzdGluZyB3YXlzIHRvIHByb3ZpZGUgaW50ZXJsb2NraW5nIGluCi0gKiByZWxlYXNlX2NvbnNvbGVfc2VtKCkuCisgKiBjb25zb2xlX3VubG9jaygpOy4KICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhsb2didWZfbG9jayk7CiAKQEAgLTI2MiwyNSArMjYyLDQ3IEBACiBpbnQgZG1lc2dfcmVzdHJpY3Q7CiAjZW5kaWYKIAorc3RhdGljIGludCBzeXNsb2dfYWN0aW9uX3Jlc3RyaWN0ZWQoaW50IHR5cGUpCit7CisJaWYgKGRtZXNnX3Jlc3RyaWN0KQorCQlyZXR1cm4gMTsKKwkvKiBVbmxlc3MgcmVzdHJpY3RlZCwgd2UgYWxsb3cgInJlYWQgYWxsIiBhbmQgImdldCBidWZmZXIgc2l6ZSIgZm9yIGV2ZXJ5Ym9keSAqLworCXJldHVybiB0eXBlICE9IFNZU0xPR19BQ1RJT05fUkVBRF9BTEwgJiYgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX1NJWkVfQlVGRkVSOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCit7CisJLyoKKwkgKiBJZiB0aGlzIGlzIGZyb20gL3Byb2Mva21zZyBhbmQgd2UndmUgYWxyZWFkeSBvcGVuZWQgaXQsIHRoZW4gd2UndmUKKwkgKiBhbHJlYWR5IGRvbmUgdGhlIGNhcGFiaWxpdGllcyBjaGVja3MgYXQgb3BlbiB0aW1lLgorCSAqLworCWlmIChmcm9tX2ZpbGUgJiYgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX09QRU4pCisJCXJldHVybiAwOworCisJaWYgKHN5c2xvZ19hY3Rpb25fcmVzdHJpY3RlZCh0eXBlKSkgeworCQlpZiAoY2FwYWJsZShDQVBfU1lTTE9HKSkKKwkJCXJldHVybiAwOworCQkvKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBhY2NlcHQgQ0FQX1NZU19BRE1JTiB0b28sIHdpdGggYSB3YXJuaW5nICovCisJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJCQlXQVJOX09OQ0UoMSwgIkF0dGVtcHQgdG8gYWNjZXNzIHN5c2xvZyB3aXRoIENBUF9TWVNfQURNSU4gIgorCQkJCSAiYnV0IG5vIENBUF9TWVNMT0cgKGRlcHJlY2F0ZWQpLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gLUVQRVJNOworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGxlbiwgYm9vbCBmcm9tX2ZpbGUpCiB7CiAJdW5zaWduZWQgaSwgaiwgbGltaXQsIGNvdW50OwogCWludCBkb19jbGVhciA9IDA7CiAJY2hhciBjOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGZyb20gL3Byb2Mva21zZyB3ZSBvbmx5IGRvIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tzCi0JICogYXQgb3BlbiB0aW1lLgotCSAqLwotCWlmICh0eXBlID09IFNZU0xPR19BQ1RJT05fT1BFTiB8fCAhZnJvbV9maWxlKSB7Ci0JCWlmIChkbWVzZ19yZXN0cmljdCAmJiAhY2FwYWJsZShDQVBfU1lTTE9HKSkKLQkJCWdvdG8gd2FybjsgLyogc3dpdGNoIHRvIHJldHVybiAtRVBFUk0gYWZ0ZXIgMi42LjM5ICovCi0JCWlmICgodHlwZSAhPSBTWVNMT0dfQUNUSU9OX1JFQURfQUxMICYmCi0JCSAgICAgdHlwZSAhPSBTWVNMT0dfQUNUSU9OX1NJWkVfQlVGRkVSKSAmJgotCQkgICAgIWNhcGFibGUoQ0FQX1NZU0xPRykpCi0JCQlnb3RvIHdhcm47IC8qIHN3aXRjaCB0byByZXR1cm4gLUVQRVJNIGFmdGVyIDIuNi4zOSAqLwotCX0KKwllcnJvciA9IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyh0eXBlLCBmcm9tX2ZpbGUpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CiAKIAllcnJvciA9IHNlY3VyaXR5X3N5c2xvZyh0eXBlKTsKIAlpZiAoZXJyb3IpCkBAIC00MjMsMTIgKzQ0NSw2IEBACiAJfQogb3V0OgogCXJldHVybiBlcnJvcjsKLXdhcm46Ci0JLyogcmVtb3ZlIGFmdGVyIDIuNi4zOSAqLwotCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlXQVJOX09OQ0UoMSwgIkF0dGVtcHQgdG8gYWNjZXNzIHN5c2xvZyB3aXRoIENBUF9TWVNfQURNSU4gIgotCQkgICJidXQgbm8gQ0FQX1NZU0xPRyAoZGVwcmVjYXRlZCBhbmQgZGVuaWVkKS5cbiIpOwotCXJldHVybiAtRVBFUk07CiB9CiAKIFNZU0NBTExfREVGSU5FMyhzeXNsb2csIGludCwgdHlwZSwgY2hhciBfX3VzZXIgKiwgYnVmLCBpbnQsIGxlbikKQEAgLTUwMSw3ICs1MTcsNyBAQAogLyoKICAqIENhbGwgdGhlIGNvbnNvbGUgZHJpdmVycywgYXNraW5nIHRoZW0gdG8gd3JpdGUgb3V0CiAgKiBsb2dfYnVmW3N0YXJ0XSB0byBsb2dfYnVmW2VuZCAtIDFdLgotICogVGhlIGNvbnNvbGVfc2VtIG11c3QgYmUgaGVsZC4KKyAqIFRoZSBjb25zb2xlX2xvY2sgbXVzdCBiZSBoZWxkLgogICovCiBzdGF0aWMgdm9pZCBjYWxsX2NvbnNvbGVfZHJpdmVycyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogewpAQCAtNjA0LDExICs2MjAsMTEgQEAKICAqCiAgKiBUaGlzIGlzIHByaW50aygpLiAgSXQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LiAgV2Ugd2FudCBpdCB0byB3b3JrLgogICoKLSAqIFdlIHRyeSB0byBncmFiIHRoZSBjb25zb2xlX3NlbS4gIElmIHdlIHN1Y2NlZWQsIGl0J3MgZWFzeSAtIHdlIGxvZyB0aGUgb3V0cHV0IGFuZAorICogV2UgdHJ5IHRvIGdyYWIgdGhlIGNvbnNvbGVfbG9jay4gIElmIHdlIHN1Y2NlZWQsIGl0J3MgZWFzeSAtIHdlIGxvZyB0aGUgb3V0cHV0IGFuZAogICogY2FsbCB0aGUgY29uc29sZSBkcml2ZXJzLiAgSWYgd2UgZmFpbCB0byBnZXQgdGhlIHNlbWFwaG9yZSB3ZSBwbGFjZSB0aGUgb3V0cHV0CiAgKiBpbnRvIHRoZSBsb2cgYnVmZmVyIGFuZCByZXR1cm4uICBUaGUgY3VycmVudCBob2xkZXIgb2YgdGhlIGNvbnNvbGVfc2VtIHdpbGwKLSAqIG5vdGljZSB0aGUgbmV3IG91dHB1dCBpbiByZWxlYXNlX2NvbnNvbGVfc2VtKCkgYW5kIHdpbGwgc2VuZCBpdCB0byB0aGUKLSAqIGNvbnNvbGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlbWFwaG9yZS4KKyAqIG5vdGljZSB0aGUgbmV3IG91dHB1dCBpbiBjb25zb2xlX3VubG9jaygpOyBhbmQgd2lsbCBzZW5kIGl0IHRvIHRoZQorICogY29uc29sZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jay4KICAqCiAgKiBPbmUgZWZmZWN0IG9mIHRoaXMgZGVmZXJyZWQgcHJpbnRpbmcgaXMgdGhhdCBjb2RlIHdoaWNoIGNhbGxzIHByaW50aygpIGFuZAogICogdGhlbiBjaGFuZ2VzIGNvbnNvbGVfbG9nbGV2ZWwgbWF5IGJyZWFrLiBUaGlzIGlzIGJlY2F1c2UgY29uc29sZV9sb2dsZXZlbApAQCAtNjU5LDE5ICs2NzUsMTkgQEAKIC8qCiAgKiBUcnkgdG8gZ2V0IGNvbnNvbGUgb3duZXJzaGlwIHRvIGFjdHVhbGx5IHNob3cgdGhlIGtlcm5lbAogICogbWVzc2FnZXMgZnJvbSBhICdwcmludGsnLiBSZXR1cm4gdHJ1ZSAoYW5kIHdpdGggdGhlCi0gKiBjb25zb2xlX3NlbWFwaG9yZSBoZWxkLCBhbmQgJ2NvbnNvbGVfbG9ja2VkJyBzZXQpIGlmIGl0CisgKiBjb25zb2xlX2xvY2sgaGVsZCwgYW5kICdjb25zb2xlX2xvY2tlZCcgc2V0KSBpZiBpdAogICogaXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlLgogICoKICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2l0aCB0aGUgJ2xvZ2J1Zl9sb2NrJyBzcGlubG9jayBoZWxkIGFuZAogICogaW50ZXJydXB0cyBkaXNhYmxlZC4gSXQgc2hvdWxkIHJldHVybiB3aXRoICdsb2NrYnVmX2xvY2snCiAgKiByZWxlYXNlZCBidXQgaW50ZXJydXB0cyBzdGlsbCBkaXNhYmxlZC4KICAqLwotc3RhdGljIGludCBhY3F1aXJlX2NvbnNvbGVfc2VtYXBob3JlX2Zvcl9wcmludGsodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgY29uc29sZV90cnlsb2NrX2Zvcl9wcmludGsodW5zaWduZWQgaW50IGNwdSkKIAlfX3JlbGVhc2VzKCZsb2didWZfbG9jaykKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmICghdHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkgeworCWlmIChjb25zb2xlX3RyeWxvY2soKSkgewogCQlyZXR2YWwgPSAxOwogCiAJCS8qCkBAIC04MjcsMTIgKzg0MywxMiBAQAogCSAqIGFjdHVhbCBtYWdpYyAocHJpbnQgb3V0IGJ1ZmZlcnMsIHdha2UgdXAga2xvZ2QsCiAJICogZXRjKS4gCiAJICoKLQkgKiBUaGUgYWNxdWlyZV9jb25zb2xlX3NlbWFwaG9yZV9mb3JfcHJpbnRrKCkgZnVuY3Rpb24KKwkgKiBUaGUgY29uc29sZV90cnlsb2NrX2Zvcl9wcmludGsoKSBmdW5jdGlvbgogCSAqIHdpbGwgcmVsZWFzZSAnbG9nYnVmX2xvY2snIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdAogCSAqIGFjdHVhbGx5IGdldHMgdGhlIHNlbWFwaG9yZSBvciBub3QuCiAJICovCi0JaWYgKGFjcXVpcmVfY29uc29sZV9zZW1hcGhvcmVfZm9yX3ByaW50ayh0aGlzX2NwdSkpCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlpZiAoY29uc29sZV90cnlsb2NrX2Zvcl9wcmludGsodGhpc19jcHUpKQorCQljb25zb2xlX3VubG9jaygpOwogCiAJbG9ja2RlcF9vbigpOwogb3V0X3Jlc3RvcmVfaXJxczoKQEAgLTk5Myw3ICsxMDA5LDcgQEAKIAlpZiAoIWNvbnNvbGVfc3VzcGVuZF9lbmFibGVkKQogCQlyZXR1cm47CiAJcHJpbnRrKCJTdXNwZW5kaW5nIGNvbnNvbGUocykgKHVzZSBub19jb25zb2xlX3N1c3BlbmQgdG8gZGVidWcpXG4iKTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uc29sZV9zdXNwZW5kZWQgPSAxOwogCXVwKCZjb25zb2xlX3NlbSk7CiB9CkBAIC0xMDA0LDcgKzEwMjAsNyBAQAogCQlyZXR1cm47CiAJZG93bigmY29uc29sZV9zZW0pOwogCWNvbnNvbGVfc3VzcGVuZGVkID0gMDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogLyoqCkBAIC0xMDI3LDIxICsxMDQzLDIxIEBACiAJY2FzZSBDUFVfRFlJTkc6CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAogLyoqCi0gKiBhY3F1aXJlX2NvbnNvbGVfc2VtIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCisgKiBjb25zb2xlX2xvY2sgLSBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KICAqCi0gKiBBY3F1aXJlcyBhIHNlbWFwaG9yZSB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKKyAqIEFjcXVpcmVzIGEgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKICAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc3lzdGVtIGFuZCB0aGUgY29uc29sZV9kcml2ZXJzIGxpc3QuCiAgKgogICogQ2FuIHNsZWVwLCByZXR1cm5zIG5vdGhpbmcuCiAgKi8KLXZvaWQgYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKQordm9pZCBjb25zb2xlX2xvY2sodm9pZCkKIHsKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWRvd24oJmNvbnNvbGVfc2VtKTsKQEAgLTEwNTAsMjEgKzEwNjYsMjkgQEAKIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAxOwogfQotRVhQT1JUX1NZTUJPTChhY3F1aXJlX2NvbnNvbGVfc2VtKTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9sb2NrKTsKIAotaW50IHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpCisvKioKKyAqIGNvbnNvbGVfdHJ5bG9jayAtIHRyeSB0byBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KKyAqCisgKiBUcmllZCB0byBhY3F1aXJlIGEgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgc3lzdGVtIGFuZCB0aGUgY29uc29sZV9kcml2ZXJzIGxpc3QuCisgKgorICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIGFuZCAwIG9uIGZhaWx1cmUgdG8gYWNxdWlyZSB0aGUgbG9jay4KKyAqLworaW50IGNvbnNvbGVfdHJ5bG9jayh2b2lkKQogewogCWlmIChkb3duX3RyeWxvY2soJmNvbnNvbGVfc2VtKSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKIAlpZiAoY29uc29sZV9zdXNwZW5kZWQpIHsKIAkJdXAoJmNvbnNvbGVfc2VtKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKIAl9CiAJY29uc29sZV9sb2NrZWQgPSAxOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KLUVYUE9SVF9TWU1CT0wodHJ5X2FjcXVpcmVfY29uc29sZV9zZW0pOworRVhQT1JUX1NZTUJPTChjb25zb2xlX3RyeWxvY2spOwogCiBpbnQgaXNfY29uc29sZV9sb2NrZWQodm9pZCkKIHsKQEAgLTEwOTUsMjAgKzExMTksMjAgQEAKIH0KIAogLyoqCi0gKiByZWxlYXNlX2NvbnNvbGVfc2VtIC0gdW5sb2NrIHRoZSBjb25zb2xlIHN5c3RlbQorICogY29uc29sZV91bmxvY2sgLSB1bmxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtCiAgKgotICogUmVsZWFzZXMgdGhlIHNlbWFwaG9yZSB3aGljaCB0aGUgY2FsbGVyIGhvbGRzIG9uIHRoZSBjb25zb2xlIHN5c3RlbQorICogUmVsZWFzZXMgdGhlIGNvbnNvbGVfbG9jayB3aGljaCB0aGUgY2FsbGVyIGhvbGRzIG9uIHRoZSBjb25zb2xlIHN5c3RlbQogICogYW5kIHRoZSBjb25zb2xlIGRyaXZlciBsaXN0LgogICoKLSAqIFdoaWxlIHRoZSBzZW1hcGhvcmUgd2FzIGhlbGQsIGNvbnNvbGUgb3V0cHV0IG1heSBoYXZlIGJlZW4gYnVmZmVyZWQKLSAqIGJ5IHByaW50aygpLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgcmVsZWFzZV9jb25zb2xlX3NlbSgpIGVtaXRzCi0gKiB0aGUgb3V0cHV0IHByaW9yIHRvIHJlbGVhc2luZyB0aGUgc2VtYXBob3JlLgorICogV2hpbGUgdGhlIGNvbnNvbGVfbG9jayB3YXMgaGVsZCwgY29uc29sZSBvdXRwdXQgbWF5IGhhdmUgYmVlbiBidWZmZXJlZAorICogYnkgcHJpbnRrKCkuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBjb25zb2xlX3VubG9jaygpOyBlbWl0cworICogdGhlIG91dHB1dCBwcmlvciB0byByZWxlYXNpbmcgdGhlIGxvY2suCiAgKgogICogSWYgdGhlcmUgaXMgb3V0cHV0IHdhaXRpbmcgZm9yIGtsb2dkLCB3ZSB3YWtlIGl0IHVwLgogICoKLSAqIHJlbGVhc2VfY29uc29sZV9zZW0oKSBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCisgKiBjb25zb2xlX3VubG9jaygpOyBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCiAgKi8KLXZvaWQgcmVsZWFzZV9jb25zb2xlX3NlbSh2b2lkKQordm9pZCBjb25zb2xlX3VubG9jayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgX2Nvbl9zdGFydCwgX2xvZ19lbmQ7CkBAIC0xMTQxLDcgKzExNjUsNyBAQAogCWlmICh3YWtlX2tsb2dkKQogCQl3YWtlX3VwX2tsb2dkKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHJlbGVhc2VfY29uc29sZV9zZW0pOworRVhQT1JUX1NZTUJPTChjb25zb2xlX3VubG9jayk7CiAKIC8qKgogICogY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSAtIHlpZWxkIHRoZSBDUFUgaWYgcmVxdWlyZWQKQEAgLTExNTAsNyArMTE3NCw3IEBACiAgKiBpZiB0aGlzIENQVSBzaG91bGQgeWllbGQgdGhlIENQVSB0byBhbm90aGVyIHRhc2ssIGRvCiAgKiBzbyBoZXJlLgogICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhY3F1aXJlX2NvbnNvbGVfc2VtKCkuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gY29uc29sZV9sb2NrKCk7LgogICovCiB2b2lkIF9fc2NoZWQgY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSh2b2lkKQogewpAQCAtMTE3MSwxNCArMTE5NSwxNCBAQAogCQlpZiAoZG93bl90cnlsb2NrKCZjb25zb2xlX3NlbSkgIT0gMCkKIAkJCXJldHVybjsKIAl9IGVsc2UKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDA7CiAJZm9yX2VhY2hfY29uc29sZShjKQogCQlpZiAoKGMtPmZsYWdzICYgQ09OX0VOQUJMRUQpICYmIGMtPnVuYmxhbmspCiAJCQljLT51bmJsYW5rKCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIC8qCkBAIC0xMTg5LDcgKzEyMTMsNyBAQAogCXN0cnVjdCBjb25zb2xlICpjOwogCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIgPSBOVUxMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIWMtPmRldmljZSkKIAkJCWNvbnRpbnVlOwpAQCAtMTE5Nyw3ICsxMjIxLDcgQEAKIAkJaWYgKGRyaXZlcikKIAkJCWJyZWFrOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gZHJpdmVyOwogfQogCkBAIC0xMjA4LDE3ICsxMjMyLDE3IEBACiAgKi8KIHZvaWQgY29uc29sZV9zdG9wKHN0cnVjdCBjb25zb2xlICpjb25zb2xlKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAljb25zb2xlLT5mbGFncyAmPSB+Q09OX0VOQUJMRUQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbnNvbGVfc3RvcCk7CiAKIHZvaWQgY29uc29sZV9zdGFydChzdHJ1Y3QgY29uc29sZSAqY29uc29sZSkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uc29sZS0+ZmxhZ3MgfD0gQ09OX0VOQUJMRUQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbnNvbGVfc3RhcnQpOwogCkBAIC0xMzQwLDcgKzEzNjQsNyBAQAogCSAqCVB1dCB0aGlzIGNvbnNvbGUgaW4gdGhlIGxpc3QgLSBrZWVwIHRoZQogCSAqCXByZWZlcnJlZCBkcml2ZXIgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCiAJICovCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICgobmV3Y29uLT5mbGFncyAmIENPTl9DT05TREVWKSB8fCBjb25zb2xlX2RyaXZlcnMgPT0gTlVMTCkgewogCQluZXdjb24tPm5leHQgPSBjb25zb2xlX2RyaXZlcnM7CiAJCWNvbnNvbGVfZHJpdmVycyA9IG5ld2NvbjsKQEAgLTEzNTIsMTQgKzEzNzYsMTQgQEAKIAl9CiAJaWYgKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fUFJJTlRCVUZGRVIpIHsKIAkJLyoKLQkJICogcmVsZWFzZV9jb25zb2xlX3NlbSgpIHdpbGwgcHJpbnQgb3V0IHRoZSBidWZmZXJlZCBtZXNzYWdlcworCQkgKiBjb25zb2xlX3VubG9jaygpOyB3aWxsIHByaW50IG91dCB0aGUgYnVmZmVyZWQgbWVzc2FnZXMKIAkJICogZm9yIHVzLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJCWNvbl9zdGFydCA9IGxvZ19zdGFydDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJY29uc29sZV9zeXNmc19ub3RpZnkoKTsKIAogCS8qCkBAIC0xMzk2LDcgKzE0MjAsNyBAQAogCQlyZXR1cm4gYnJhaWxsZV91bnJlZ2lzdGVyX2NvbnNvbGUoY29uc29sZSk7CiAjZW5kaWYKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAoY29uc29sZV9kcml2ZXJzID09IGNvbnNvbGUpIHsKIAkJY29uc29sZV9kcml2ZXJzPWNvbnNvbGUtPm5leHQ7CiAJCXJlcyA9IDA7CkBAIC0xNDE4LDcgKzE0NDIsNyBAQAogCWlmIChjb25zb2xlX2RyaXZlcnMgIT0gTlVMTCAmJiBjb25zb2xlLT5mbGFncyAmIENPTl9DT05TREVWKQogCQljb25zb2xlX2RyaXZlcnMtPmZsYWdzIHw9IENPTl9DT05TREVWOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJY29uc29sZV9zeXNmc19ub3RpZnkoKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDk5YmJhYTMuLjE3MDhiMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTMxMyw3ICszMTMsNyBAQAogCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKIAkJZGVhZCA9IF9fcHRyYWNlX2RldGFjaChjdXJyZW50LCBjaGlsZCk7CiAJCWlmICghY2hpbGQtPmV4aXRfc3RhdGUpCi0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJd2FrZV91cF9zdGF0ZShjaGlsZCwgVEFTS19UUkFDRUQgfCBUQVNLX1NUT1BQRUQpOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNzdlOTE2Ni4uMGMyNmUyZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC02OTksNyArNjk5LDggQEAKIAljZnNfcnEtPm5yX3J1bm5pbmctLTsKIH0KIAotI2lmIGRlZmluZWQgQ09ORklHX1NNUCAmJiBkZWZpbmVkIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKyMgaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19ycV9sb2FkX2NvbnRyaWJ1dGlvbihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsCiAJCQkJCSAgICBpbnQgZ2xvYmFsX3VwZGF0ZSkKIHsKQEAgLTcyMSwxMCArNzIyLDEwIEBACiAJdTY0IG5vdywgZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodDsKIAotCWlmICghY2ZzX3JxKQorCWlmIChjZnNfcnEtPnRnID09ICZyb290X3Rhc2tfZ3JvdXApCiAJCXJldHVybjsKIAotCW5vdyA9IHJxX29mKGNmc19ycSktPmNsb2NrOworCW5vdyA9IHJxX29mKGNmc19ycSktPmNsb2NrX3Rhc2s7CiAJZGVsdGEgPSBub3cgLSBjZnNfcnEtPmxvYWRfc3RhbXA7CiAKIAkvKiB0cnVuY2F0ZSBsb2FkIGhpc3RvcnkgYXQgNCBpZGxlIHBlcmlvZHMgKi8KQEAgLTc2Miw2ICs3NjMsNTEgQEAKIAkJbGlzdF9kZWxfbGVhZl9jZnNfcnEoY2ZzX3JxKTsKIH0KIAorc3RhdGljIGxvbmcgY2FsY19jZnNfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHRhc2tfZ3JvdXAgKnRnLAorCQkJCWxvbmcgd2VpZ2h0X2RlbHRhKQoreworCWxvbmcgbG9hZF93ZWlnaHQsIGxvYWQsIHNoYXJlczsKKworCWxvYWQgPSBjZnNfcnEtPmxvYWQud2VpZ2h0ICsgd2VpZ2h0X2RlbHRhOworCisJbG9hZF93ZWlnaHQgPSBhdG9taWNfcmVhZCgmdGctPmxvYWRfd2VpZ2h0KTsKKwlsb2FkX3dlaWdodCAtPSBjZnNfcnEtPmxvYWRfY29udHJpYnV0aW9uOworCWxvYWRfd2VpZ2h0ICs9IGxvYWQ7CisKKwlzaGFyZXMgPSAodGctPnNoYXJlcyAqIGxvYWQpOworCWlmIChsb2FkX3dlaWdodCkKKwkJc2hhcmVzIC89IGxvYWRfd2VpZ2h0OworCisJaWYgKHNoYXJlcyA8IE1JTl9TSEFSRVMpCisJCXNoYXJlcyA9IE1JTl9TSEFSRVM7CisJaWYgKHNoYXJlcyA+IHRnLT5zaGFyZXMpCisJCXNoYXJlcyA9IHRnLT5zaGFyZXM7CisKKwlyZXR1cm4gc2hhcmVzOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKKwlpZiAoY2ZzX3JxLT5sb2FkX3VuYWNjX2V4ZWNfdGltZSA+IHN5c2N0bF9zY2hlZF9zaGFyZXNfd2luZG93KSB7CisJCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDApOworCQl1cGRhdGVfY2ZzX3NoYXJlcyhjZnNfcnEsIDApOworCX0KK30KKyMgZWxzZSAvKiBDT05GSUdfU01QICovCitzdGF0aWMgdm9pZCB1cGRhdGVfY2ZzX2xvYWQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgZ2xvYmFsX3VwZGF0ZSkKK3sKK30KKworc3RhdGljIGlubGluZSBsb25nIGNhbGNfY2ZzX3NoYXJlcyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZywKKwkJCQlsb25nIHdlaWdodF9kZWx0YSkKK3sKKwlyZXR1cm4gdGctPnNoYXJlczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9lbnRpdHlfc2hhcmVzX3RpY2soc3RydWN0IGNmc19ycSAqY2ZzX3JxKQoreworfQorIyBlbmRpZiAvKiBDT05GSUdfU01QICovCiBzdGF0aWMgdm9pZCByZXdlaWdodF9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIHdlaWdodCkKIHsKQEAgLTc4Miw0MSArODI4LDIwIEBACiB7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlOwotCWxvbmcgbG9hZF93ZWlnaHQsIGxvYWQsIHNoYXJlczsKLQotCWlmICghY2ZzX3JxKQotCQlyZXR1cm47CisJbG9uZyBzaGFyZXM7CiAKIAl0ZyA9IGNmc19ycS0+dGc7CiAJc2UgPSB0Zy0+c2VbY3B1X29mKHJxX29mKGNmc19ycSkpXTsKIAlpZiAoIXNlKQogCQlyZXR1cm47Ci0KLQlsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodCArIHdlaWdodF9kZWx0YTsKLQotCWxvYWRfd2VpZ2h0ID0gYXRvbWljX3JlYWQoJnRnLT5sb2FkX3dlaWdodCk7Ci0JbG9hZF93ZWlnaHQgLT0gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbjsKLQlsb2FkX3dlaWdodCArPSBsb2FkOwotCi0Jc2hhcmVzID0gKHRnLT5zaGFyZXMgKiBsb2FkKTsKLQlpZiAobG9hZF93ZWlnaHQpCi0JCXNoYXJlcyAvPSBsb2FkX3dlaWdodDsKLQotCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQotCQlzaGFyZXMgPSBNSU5fU0hBUkVTOwotCWlmIChzaGFyZXMgPiB0Zy0+c2hhcmVzKQotCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOworI2lmbmRlZiBDT05GSUdfU01QCisJaWYgKGxpa2VseShzZS0+bG9hZC53ZWlnaHQgPT0gdGctPnNoYXJlcykpCisJCXJldHVybjsKKyNlbmRpZgorCXNoYXJlcyA9IGNhbGNfY2ZzX3NoYXJlcyhjZnNfcnEsIHRnLCB3ZWlnaHRfZGVsdGEpOwogCiAJcmV3ZWlnaHRfZW50aXR5KGNmc19ycV9vZihzZSksIHNlLCBzaGFyZXMpOwogfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKLXsKLQlpZiAoY2ZzX3JxLT5sb2FkX3VuYWNjX2V4ZWNfdGltZSA+IHN5c2N0bF9zY2hlZF9zaGFyZXNfd2luZG93KSB7Ci0JCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDApOwotCQl1cGRhdGVfY2ZzX3NoYXJlcyhjZnNfcnEsIDApOwotCX0KLX0KICNlbHNlIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfY2ZzX2xvYWQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgZ2xvYmFsX3VwZGF0ZSkKIHsKQEAgLTE0MDQsNyArMTQyOSw3IEBACiAKIHN0YXRpYyBpbnQgd2FrZV9hZmZpbmUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN5bmMpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQsIGxvYWQ7CisJczY0IHRoaXNfbG9hZCwgbG9hZDsKIAlpbnQgaWR4LCB0aGlzX2NwdSwgcHJldl9jcHU7CiAJdW5zaWduZWQgbG9uZyB0bF9wZXJfdGFzazsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CkBAIC0xNDQzLDggKzE0NjgsOCBAQAogCSAqIE90aGVyd2lzZSBjaGVjayBpZiBlaXRoZXIgY3B1cyBhcmUgbmVhciBlbm91Z2ggaW4gbG9hZCB0byBhbGxvdyB0aGlzCiAJICogdGFzayB0byBiZSB3b2tlbiBvbiB0aGlzX2NwdS4KIAkgKi8KLQlpZiAodGhpc19sb2FkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdGhpc19lZmZfbG9hZCwgcHJldl9lZmZfbG9hZDsKKwlpZiAodGhpc19sb2FkID4gMCkgeworCQlzNjQgdGhpc19lZmZfbG9hZCwgcHJldl9lZmZfbG9hZDsKIAogCQl0aGlzX2VmZl9sb2FkID0gMTAwOwogCQl0aGlzX2VmZl9sb2FkICo9IHBvd2VyX29mKHByZXZfY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYzkxNGVjNy4uYWQ2MjY3NyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9ycV9vZl9zZShydF9zZSk7CiAJdTY0IGRlbHRhX2V4ZWM7CiAKLQlpZiAoIXRhc2tfaGFzX3J0X3BvbGljeShjdXJyKSkKKwlpZiAoY3Vyci0+c2NoZWRfY2xhc3MgIT0gJnJ0X3NjaGVkX2NsYXNzKQogCQlyZXR1cm47CiAKIAlkZWx0YV9leGVjID0gcnEtPmNsb2NrX3Rhc2sgLSBjdXJyLT5zZS5leGVjX3N0YXJ0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDMxYjcxYTIuLjE4ZGE3MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTEzODUsNyArMTM4NSw4IEBACiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKSwgKnRjcmVkOwogCiAJdGNyZWQgPSBfX3Rhc2tfY3JlZCh0YXNrKTsKLQlpZiAoKGNyZWQtPnVpZCAhPSB0Y3JlZC0+ZXVpZCB8fAorCWlmIChjdXJyZW50ICE9IHRhc2sgJiYKKwkgICAgKGNyZWQtPnVpZCAhPSB0Y3JlZC0+ZXVpZCB8fAogCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT5zdWlkIHx8CiAJICAgICBjcmVkLT51aWQgIT0gdGNyZWQtPnVpZCAgfHwKIAkgICAgIGNyZWQtPmdpZCAhPSB0Y3JlZC0+ZWdpZCB8fApkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGJjODZiYjMuLjBmMWJkODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE3MCw3ICsxNzAsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKLXN0YXRpYyBpbnQgX19zeXNycV9lbmFibGVkOyAvKiBOb3RlOiBzeXNycSBjb2RlIGlzZXMgaXQncyBvd24gcHJpdmF0ZSBjb3B5ICovCisvKiBOb3RlOiBzeXNycSBjb2RlIHVzZXMgaXQncyBvd24gcHJpdmF0ZSBjb3B5ICovCitzdGF0aWMgaW50IF9fc3lzcnFfZW5hYmxlZCA9IFNZU1JRX0RFRkFVTFRfRU5BQkxFOwogCiBzdGF0aWMgaW50IHN5c3JxX3N5c2N0bF9oYW5kbGVyKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJCQl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggM2UyMTZlMC4uYzU1ZWEyNCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtNjQyLDggKzY0Miw3IEBACiAJfQogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIE5PSHogbW9kZSBvbiBDUFUgIyVkXG4iLAotCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIE5PSHogbW9kZSBvbiBDUFUgIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCiAvKgpAQCAtNzk1LDggKzc5NCwxMCBAQAogCX0KIAogI2lmZGVmIENPTkZJR19OT19IWgotCWlmICh0aWNrX25vaHpfZW5hYmxlZCkKKwlpZiAodGlja19ub2h6X2VuYWJsZWQpIHsKIAkJdHMtPm5vaHpfbW9kZSA9IE5PSFpfTU9ERV9ISUdIUkVTOworCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl9CiAjZW5kaWYKIH0KICNlbmRpZiAvKiBISUdIX1JFU19USU1FUlMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggNDNjYTk5My4uZDUzY2U2NiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTk2OSwxMCArOTY5LDE0IEBACiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewogI2lmZGVmIENPTkZJR19MT0NLREVQCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWxvY2tfbWFwX2FjcXVpcmUoJnRpbWVyLT5sb2NrZGVwX21hcCk7CiAJbG9ja19tYXBfcmVsZWFzZSgmdGltZXItPmxvY2tkZXBfbWFwKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKKwlfbG9jYWxfYmhfZW5hYmxlKCk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogCS8qCiAJICogZG9uJ3QgdXNlIGl0IGluIGhhcmRpcnEgY29udGV4dCwgYmVjYXVzZSBpdApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCAxNTM1NjJkLi5kOTU3MjFmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMTM4LDYgKzEzOCwxMyBAQAogCQkgICAgICFibGtfdHJhY2VyX2VuYWJsZWQpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIHRoZSBCTEtfVENfTk9USUZZIGFjdGlvbiBtYXNrIGlzbid0IHNldCwgZG9uJ3Qgc2VuZCBhbnkgbm90ZQorCSAqIG1lc3NhZ2UgdG8gdGhlIHRyYWNlLgorCSAqLworCWlmICghKGJ0LT5hY3RfbWFzayAmIEJMS19UQ19OT1RJRlkpKQorCQlyZXR1cm47CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYnVmID0gcGVyX2NwdV9wdHIoYnQtPm1zZ19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggMzVmZGUwOS4uNWY0OTllMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIHN0YXRpYyB2b2lkIHRyYWNlX21vZHVsZV9hZGRfZXZlbnRzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyAqZmlsZV9vcHMgPSBOVUxMOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgKnN0YXJ0LCAqZW5kOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKmNhbGwsICoqc3RhcnQsICoqZW5kOwogCiAJc3RhcnQgPSBtb2QtPnRyYWNlX2V2ZW50czsKIAllbmQgPSBtb2QtPnRyYWNlX2V2ZW50cyArIG1vZC0+bnVtX3RyYWNlX2V2ZW50czsKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCXJldHVybjsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIHN0YXJ0LCBlbmQpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBtb2QsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIG1vZCwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5pZCwgJmZpbGVfb3BzLT5lbmFibGUsCiAJCQkJICAgICAgICZmaWxlX29wcy0+ZmlsdGVyLCAmZmlsZV9vcHMtPmZvcm1hdCk7CiAJfQpAQCAtMTM2Nyw4ICsxMzY3LDggQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0YXJ0X2Z0cmFjZV9ldmVudHNbXTsKLWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKl9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKIAogc3RhdGljIGNoYXIgYm9vdHVwX2V2ZW50X2J1ZltDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKIApAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfaW5pdCh2b2lkKQogewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKipjYWxsOwogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCXN0cnVjdCBkZW50cnkgKmVudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOwpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAkJcHJfd2FybmluZygidHJhY2luZzogRmFpbGVkIHRvIGFsbG9jYXRlIGNvbW1vbiBmaWVsZHMiKTsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIF9fc3RhcnRfZnRyYWNlX2V2ZW50cywgX19zdG9wX2Z0cmFjZV9ldmVudHMpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIE5VTEwsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9lbmFibGVfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggNGI3NGQ3MS4uYmJlZWMzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTYxLDEzICsxNjEsMTMgQEAKIAkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLmZpZWxkcyksXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmV2ZW50LnR5cGUJCT0gZXR5cGUsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLAkJXAogCS5wcmludF9mbXQJCT0gcHJpbnQsCQkJCVwKIH07CQkJCQkJCQkJXAorc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsOwogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCBiNzA2NTI5Li41YzlmZTA4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtNTUsMjAgKzU1LDIxIEBACiAJLnJhd19pbml0CT0gaW5pdF9zeXNjYWxsX3RyYWNlLAogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKl9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOwogCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKK3N0YXRpYyBfX2luaXQgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKgorZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyBzeXNjYWxsKQogewotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdGFydDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RvcDsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN0YXJ0OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3RvcDsKIAljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwogCiAKLQlzdGFydCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7Ci0Jc3RvcCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKKwlzdGFydCA9IF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7CisJc3RvcCA9IF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKIAlrYWxsc3ltc19sb29rdXAoc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIAogCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7CkBAIC03OCw4ICs3OSw4IEBACiAJCSAqIHdpdGggIlN5UyIgaW5zdGVhZCBvZiAic3lzIiwgbGVhZGluZyB0byBhbiB1bndhbnRlZAogCQkgKiBtaXNtYXRjaC4KIAkJICovCi0JCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lICsgMywgc3RyICsgMykpCi0JCQlyZXR1cm4gc3RhcnQ7CisJCWlmICgoKnN0YXJ0KS0+bmFtZSAmJiAhc3RyY21wKCgqc3RhcnQpLT5uYW1lICsgMywgc3RyICsgMykpCisJCQlyZXR1cm4gKnN0YXJ0OwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IGU5NWVlN2YuLjY4MTg3YWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCi1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdGFydF9fX3RyYWNlcG9pbnRzW107Ci1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdG9wX19fdHJhY2Vwb2ludHNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzW107CitleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCBfX3N0b3BfX190cmFjZXBvaW50c19wdHJzW107CiAKIC8qIFNldCB0byAxIHRvIGVuYWJsZSB0cmFjZXBvaW50IGRlYnVnIG91dHB1dCAqLwogc3RhdGljIGNvbnN0IGludCB0cmFjZXBvaW50X2RlYnVnOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAKICAqCiAgKiBVcGRhdGVzIHRoZSBwcm9iZSBjYWxsYmFjayBjb3JyZXNwb25kaW5nIHRvIGEgcmFuZ2Ugb2YgdHJhY2Vwb2ludHMuCiAgKi8KLXZvaWQKLXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJCQkJICAgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogewotCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKml0ZXI7CiAJc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKm1hcmtfZW50cnk7CiAKIAlpZiAoIWJlZ2luKQpAQCAtMzA5LDEyICszMDksMTIgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKIAlmb3IgKGl0ZXIgPSBiZWdpbjsgaXRlciA8IGVuZDsgaXRlcisrKSB7Ci0JCW1hcmtfZW50cnkgPSBnZXRfdHJhY2Vwb2ludChpdGVyLT5uYW1lKTsKKwkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KCgqaXRlciktPm5hbWUpOwogCQlpZiAobWFya19lbnRyeSkgewotCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksIGl0ZXIsCisJCQlzZXRfdHJhY2Vwb2ludCgmbWFya19lbnRyeSwgKml0ZXIsCiAJCQkJCSEhbWFya19lbnRyeS0+cmVmY291bnQpOwogCQl9IGVsc2UgewotCQkJZGlzYWJsZV90cmFjZXBvaW50KGl0ZXIpOworCQkJZGlzYWJsZV90cmFjZXBvaW50KCppdGVyKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKQEAgLTMyNiw4ICszMjYsOCBAQAogc3RhdGljIHZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVzKHZvaWQpCiB7CiAJLyogQ29yZSBrZXJuZWwgdHJhY2Vwb2ludHMgKi8KLQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHMsCi0JCV9fc3RvcF9fX3RyYWNlcG9pbnRzKTsKKwl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycywKKwkJX19zdG9wX19fdHJhY2Vwb2ludHNfcHRycyk7CiAJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KIAltb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKCk7CiB9CkBAIC01MTQsOCArNTE0LDggQEAKICAqIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCB0cmFjZXBvaW50IGluIHRoZSByYW5nZSBpZiB0aGUgaW5wdXQgdHJhY2Vwb2ludCBpcwogICogTlVMTC4KICAqLwotaW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKip0cmFjZXBvaW50LAotCXN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK2ludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpCiB7CiAJaWYgKCEqdHJhY2Vwb2ludCAmJiBiZWdpbiAhPSBlbmQpIHsKIAkJKnRyYWNlcG9pbnQgPSBiZWdpbjsKQEAgLTUzNCw3ICs1MzQsOCBAQAogCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCiAJaWYgKCFpdGVyLT5tb2R1bGUpIHsKIAkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCV9fc3RhcnRfX190cmFjZXBvaW50cywgX19zdG9wX19fdHJhY2Vwb2ludHMpOworCQkJCV9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzLAorCQkJCV9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpOwogCQlpZiAoZm91bmQpCiAJCQlnb3RvIGVuZDsKIAl9CkBAIC01ODUsOCArNTg2LDggQEAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKIAljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKLQkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50cywKLQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCW1vZC0+dHJhY2Vwb2ludHNfcHRycyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCBkN2ViZGY0Li5mMzdmOTc0IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAotaW50IHdhdGNoZG9nX2VuYWJsZWQ7CitpbnQgd2F0Y2hkb2dfZW5hYmxlZCA9IDE7CiBpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgd2F0Y2hkb2dfdG91Y2hfdHMpOwpAQCAtNDMsOSArNDMsNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICosIHdhdGNoZG9nX2V2KTsKICNlbmRpZgogCi1zdGF0aWMgaW50IG5vX3dhdGNoZG9nOwotCi0KIC8qIGJvb3QgY29tbWFuZHMgKi8KIC8qCiAgKiBTaG91bGQgd2UgcGFuaWMgd2hlbiBhIHNvZnQtbG9ja3VwIG9yIGhhcmQtbG9ja3VwIG9jY3VyczoKQEAgLTU4LDcgKzU1LDcgQEAKIAlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkKIAkJaGFyZGxvY2t1cF9wYW5pYyA9IDE7CiAJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiMCIsIDEpKQotCQlub193YXRjaGRvZyA9IDE7CisJCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm1pX3dhdGNoZG9nPSIsIGhhcmRsb2NrdXBfcGFuaWNfc2V0dXApOwpAQCAtNzcsNyArNzQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBub3dhdGNoZG9nX3NldHVwKGNoYXIgKnN0cikKIHsKLQlub193YXRjaGRvZyA9IDE7CisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3dhdGNoZG9nIiwgbm93YXRjaGRvZ19zZXR1cCk7CkBAIC04NSw3ICs4Miw3IEBACiAvKiBkZXByZWNhdGVkICovCiBzdGF0aWMgaW50IF9faW5pdCBub3NvZnRsb2NrdXBfc2V0dXAoY2hhciAqc3RyKQogewotCW5vX3dhdGNoZG9nID0gMTsKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7CkBAIC00MzIsOSArNDI5LDYgQEAKIAkJd2FrZV91cF9wcm9jZXNzKHApOwogCX0KIAotCS8qIGlmIGFueSBjcHUgc3VjY2VlZHMsIHdhdGNoZG9nIGlzIGNvbnNpZGVyZWQgZW5hYmxlZCBmb3IgdGhlIHN5c3RlbSAqLwotCXdhdGNoZG9nX2VuYWJsZWQgPSAxOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2MiwxMiArNDU2LDE2IEBACiBzdGF0aWMgdm9pZCB3YXRjaGRvZ19lbmFibGVfYWxsX2NwdXModm9pZCkKIHsKIAlpbnQgY3B1OwotCWludCByZXN1bHQgPSAwOworCisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJcmVzdWx0ICs9IHdhdGNoZG9nX2VuYWJsZShjcHUpOworCQlpZiAoIXdhdGNoZG9nX2VuYWJsZShjcHUpKQorCQkJLyogaWYgYW55IGNwdSBzdWNjZWVkcywgd2F0Y2hkb2cgaXMgY29uc2lkZXJlZAorCQkJICAgZW5hYmxlZCBmb3IgdGhlIHN5c3RlbSAqLworCQkJd2F0Y2hkb2dfZW5hYmxlZCA9IDE7CiAKLQlpZiAocmVzdWx0KQorCWlmICghd2F0Y2hkb2dfZW5hYmxlZCkKIAkJcHJpbnRrKEtFUk5fRVJSICJ3YXRjaGRvZzogZmFpbGVkIHRvIGJlIGVuYWJsZWQgb24gc29tZSBjcHVzXG4iKTsKIAogfQpAQCAtNDc2LDkgKzQ3NCw2IEBACiB7CiAJaW50IGNwdTsKIAotCWlmIChub193YXRjaGRvZykKLQkJcmV0dXJuOwotCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCXdhdGNoZG9nX2Rpc2FibGUoY3B1KTsKIApAQCAtNDk4LDEwICs0OTMsMTIgQEAKIHsKIAlwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOwogCi0JaWYgKHdhdGNoZG9nX2VuYWJsZWQpCi0JCXdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cygpOwotCWVsc2UKLQkJd2F0Y2hkb2dfZGlzYWJsZV9hbGxfY3B1cygpOworCWlmICh3cml0ZSkgeworCQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKKwkJCXdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cygpOworCQllbHNlCisJCQl3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKCk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC01MzAsNyArNTI3LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46Ci0JCWVyciA9IHdhdGNoZG9nX2VuYWJsZShob3RjcHUpOworCQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKKwkJCWVyciA9IHdhdGNoZG9nX2VuYWJsZShob3RjcHUpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKQEAgLTU1NSw5ICs1NTMsNiBAQAogCXZvaWQgKmNwdSA9ICh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBlcnI7CiAKLQlpZiAobm9fd2F0Y2hkb2cpCi0JCXJldHVybjsKLQogCWVyciA9IGNwdV9jYWxsYmFjaygmY3B1X25mYiwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CiAJV0FSTl9PTihub3RpZmllcl90b19lcnJubyhlcnIpKTsKIApkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggNTA4NmJiOS4uN2VhMmUwMyAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC03MzYsMTAgKzczNiwxMSBAQAogCQl9CiAJfQogCS8qCi0JICogVGhlIGlmdGFnIG11c3QgaGF2ZSBiZWVuIHNldCBzb21ld2hlcmUgYmVjYXVzZSBvdGhlcndpc2UKLQkgKiB3ZSB3b3VsZCByZXR1cm4gaW1tZWRpYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbgorCSAqIFdlIG5lZWQgbm90IHRvIHRhZyB0aGUgcm9vdCB0YWcgaWYgdGhlcmUgaXMgbm8gdGFnIHdoaWNoIGlzIHNldCB3aXRoCisJICogc2V0dGFnIHdpdGhpbiB0aGUgcmFuZ2UgZnJvbSAqZmlyc3RfaW5kZXhwIHRvIGxhc3RfaW5kZXguCiAJICovCi0Jcm9vdF90YWdfc2V0KHJvb3QsIHNldHRhZyk7CisJaWYgKHRhZ2dlZCA+IDApCisJCXJvb3RfdGFnX3NldChyb290LCBzZXR0YWcpOwogCSpmaXJzdF9pbmRleHAgPSBpbmRleDsKIAogCXJldHVybiB0YWdnZWQ7CmRpZmYgLS1naXQgYS9saWIvcmJ0cmVlLmMgYi9saWIvcmJ0cmVlLmMKaW5kZXggNDY5M2Y3OS4uYTE2YmUxOSAxMDA2NDQKLS0tIGEvbGliL3JidHJlZS5jCisrKyBiL2xpYi9yYnRyZWUuYwpAQCAtMzE1LDYgKzMxNSw3IEBACiAKIAlyYl9hdWdtZW50X3BhdGgobm9kZSwgZnVuYywgZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHJiX2F1Z21lbnRfaW5zZXJ0KTsKIAogLyoKICAqIGJlZm9yZSByZW1vdmluZyB0aGUgbm9kZSwgZmluZCB0aGUgZGVlcGVzdCBub2RlIG9uIHRoZSByZWJhbGFuY2UgcGF0aApAQCAtMzQwLDYgKzM0MSw3IEBACiAKIAlyZXR1cm4gZGVlcGVzdDsKIH0KK0VYUE9SVF9TWU1CT0wocmJfYXVnbWVudF9lcmFzZV9iZWdpbik7CiAKIC8qCiAgKiBhZnRlciByZW1vdmFsLCB1cGRhdGUgdGhlIHRyZWUgdG8gYWNjb3VudCBmb3IgdGhlIHJlbW92ZWQgZW50cnkKQEAgLTM1MCw2ICszNTIsNyBAQAogCWlmIChub2RlKQogCQlyYl9hdWdtZW50X3BhdGgobm9kZSwgZnVuYywgZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHJiX2F1Z21lbnRfZXJhc2VfZW5kKTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgbm9kZSAoaW4gc29ydCBvcmRlcikgb2YgdGhlIHRyZWUuCmRpZmYgLS1naXQgYS9saWIvdGV4dHNlYXJjaC5jIGIvbGliL3RleHRzZWFyY2guYwppbmRleCBkNjA4MzMxLi5lMGNjMDE0IDEwMDY0NAotLS0gYS9saWIvdGV4dHNlYXJjaC5jCisrKyBiL2xpYi90ZXh0c2VhcmNoLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqCiAgKiBJTlRST0RVQ1RJT04KICAqCi0gKiAgIFRoZSB0ZXh0c2VhcmNoIGluZnJhc3RydWN0dXJlIHByb3ZpZGVzIHRleHQgc2VhcmNoaW5nIGZhY2l0aWxpZXMgZm9yCisgKiAgIFRoZSB0ZXh0c2VhcmNoIGluZnJhc3RydWN0dXJlIHByb3ZpZGVzIHRleHQgc2VhcmNoaW5nIGZhY2lsaXRpZXMgZm9yCiAgKiAgIGJvdGggbGluZWFyIGFuZCBub24tbGluZWFyIGRhdGEuIEluZGl2aWR1YWwgc2VhcmNoIGFsZ29yaXRobXMgYXJlCiAgKiAgIGltcGxlbWVudGVkIGluIG1vZHVsZXMgYW5kIGNob3NlbiBieSB0aGUgdXNlci4KICAqCkBAIC00Myw3ICs0Myw3IEBACiAgKiAgICAgICB0byB0aGUgYWxnb3JpdGhtIHRvIHN0b3JlIHBlcnNpc3RlbnQgdmFyaWFibGVzLgogICogICAoNCkgQ29yZSBldmVudHVhbGx5IHJlc2V0cyB0aGUgc2VhcmNoIG9mZnNldCBhbmQgZm9yd2FyZHMgdGhlIGZpbmQoKQogICogICAgICAgcmVxdWVzdCB0byB0aGUgYWxnb3JpdGhtLgotICogICAoNSkgQWxnb3JpdGhtIGNhbGxzIGdldF9uZXh0X2Jsb2NrKCkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY29udGlub3VzbHkKKyAqICAgKDUpIEFsZ29yaXRobSBjYWxscyBnZXRfbmV4dF9ibG9jaygpIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGNvbnRpbnVvdXNseQogICogICAgICAgdG8gZmV0Y2ggdGhlIGRhdGEgdG8gYmUgc2VhcmNoZWQgaW4gYmxvY2sgYnkgYmxvY2suCiAgKiAgICg2KSBBbGdvcml0aG0gaW52b2tlcyBmaW5pc2goKSBhZnRlciB0aGUgbGFzdCBjYWxsIHRvIGdldF9uZXh0X2Jsb2NrCiAgKiAgICAgICB0byBjbGVhbiB1cCBhbnkgbGVmdG92ZXJzIGZyb20gZ2V0X25leHRfYmxvY2suIChPcHRpb25hbCkKQEAgLTU4LDE1ICs1OCwxNSBAQAogICogICB0aGUgcGF0dGVybiB0byBsb29rIGZvciBhbmQgZmxhZ3MuIEFzIGEgZmxhZywgeW91IGNhbiBzZXQgVFNfSUdOT1JFQ0FTRQogICogICB0byBwZXJmb3JtIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmcuIEJ1dCBpdCBtaWdodCBzbG93IGRvd24KICAqICAgcGVyZm9ybWFuY2Ugb2YgYWxnb3JpdGhtLCBzbyB5b3Ugc2hvdWxkIHVzZSBpdCBhdCBvd24geW91ciByaXNrLgotICogICBUaGUgcmV0dXJuZWQgY29uZmlndXJhdGlvbiBtYXkgdGhlbiBiZSB1c2VkIGZvciBhbiBhcmJpdGFyeQorICogICBUaGUgcmV0dXJuZWQgY29uZmlndXJhdGlvbiBtYXkgdGhlbiBiZSB1c2VkIGZvciBhbiBhcmJpdHJhcnkKICAqICAgYW1vdW50IG9mIHRpbWVzIGFuZCBldmVuIGluIHBhcmFsbGVsIGFzIGxvbmcgYXMgYSBzZXBhcmF0ZSBzdHJ1Y3QKICAqICAgdHNfc3RhdGUgdmFyaWFibGUgaXMgcHJvdmlkZWQgdG8gZXZlcnkgaW5zdGFuY2UuCiAgKgogICogICBUaGUgYWN0dWFsIHNlYXJjaCBpcyBwZXJmb3JtZWQgYnkgZWl0aGVyIGNhbGxpbmcgdGV4dHNlYXJjaF9maW5kXy0KICAqICAgY29udGludW91cygpIGZvciBsaW5lYXIgZGF0YSBvciBieSBwcm92aWRpbmcgYW4gb3duIGdldF9uZXh0X2Jsb2NrKCkKICAqICAgaW1wbGVtZW50YXRpb24gYW5kIGNhbGxpbmcgdGV4dHNlYXJjaF9maW5kKCkuIEJvdGggZnVuY3Rpb25zIHJldHVybgotICogICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHBhdGVybiBvciBVSU5UX01BWCBpZgotICogICBubyBtYXRjaCB3YXMgZm91bmQuIFN1YnNlcXVlbnQgb2NjdXJlbmNlcyBjYW4gYmUgZm91bmQgYnkgY2FsbGluZworICogICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHBhdHRlcm4gb3IgVUlOVF9NQVggaWYKKyAqICAgbm8gbWF0Y2ggd2FzIGZvdW5kLiBTdWJzZXF1ZW50IG9jY3VycmVuY2VzIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nCiAgKiAgIHRleHRzZWFyY2hfbmV4dCgpIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpbmVhcml0eSBvZiB0aGUgZGF0YS4KICAqCiAgKiAgIE9uY2UgeW91J3JlIGRvbmUgdXNpbmcgYSBjb25maWd1cmF0aW9uIGl0IG11c3QgYmUgZ2l2ZW4gYmFjayB2aWEKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDNhZDQ4M2IuLmU5YzBjNjEgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTc5LDcgKzE3OSw3IEBACiBjb25maWcgQ09NUEFDVElPTgogCWJvb2wgIkFsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvbiIKIAlzZWxlY3QgTUlHUkFUSU9OCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgSFVHRVRMQl9QQUdFICYmIE1NVQorCWRlcGVuZHMgb24gTU1VCiAJaGVscAogCSAgQWxsb3dzIHRoZSBjb21wYWN0aW9uIG9mIG1lbW9yeSBmb3IgdGhlIGFsbG9jYXRpb24gb2YgaHVnZSBwYWdlcy4KIApkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZTE4NzQ1NC4uZTYyZGRiOCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMTYyLDcgKzExNjIsMTIgQEAKIAkJLyogYWZ0ZXIgY2xlYXJpbmcgUGFnZVRhaWwgdGhlIGd1cCByZWZjb3VudCBjYW4gYmUgcmVsZWFzZWQgKi8KIAkJc21wX21iKCk7CiAKLQkJcGFnZV90YWlsLT5mbGFncyAmPSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOworCQkvKgorCQkgKiByZXRhaW4gaHdwb2lzb24gZmxhZyBvZiB0aGUgcG9pc29uZWQgdGFpbCBwYWdlOgorCQkgKiAgIGZpeCBmb3IgdGhlIHVuc3VpdGFibGUgcHJvY2VzcyBraWxsZWQgb24gR3Vlc3QgTWFjaGluZShLVk0pCisJCSAqICAgYnkgdGhlIG1lbW9yeS1mYWlsdXJlLgorCQkgKi8KKwkJcGFnZV90YWlsLT5mbGFncyAmPSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQIHwgX19QR19IV1BPSVNPTjsKIAkJcGFnZV90YWlsLT5mbGFncyB8PSAocGFnZS0+ZmxhZ3MgJgogCQkJCSAgICAgKCgxTCA8PCBQR19yZWZlcmVuY2VkKSB8CiAJCQkJICAgICAgKDFMIDw8IFBHX3N3YXBiYWNrZWQpIHwKQEAgLTE4NDcsNyArMTg1Miw2IEBACiAJCXNldF9wbWRfYXQobW0sIGFkZHJlc3MsIHBtZCwgX3BtZCk7CiAJCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkJYW5vbl92bWFfdW5sb2NrKHZtYS0+YW5vbl92bWEpOwotCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UobmV3X3BhZ2UpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE4OTMsNiArMTg5Nyw3IEBACiAJcmV0dXJuOwogCiBvdXQ6CisJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKG5ld19wYWdlKTsKICNpZmRlZiBDT05GSUdfTlVNQQogCXB1dF9wYWdlKG5ld19wYWdlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWstdGVzdC5jIGIvbW0va21lbWxlYWstdGVzdC5jCmluZGV4IDE3N2E1MTYuLmZmMGQ5NzcgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLXRlc3QuYworKysgYi9tbS9rbWVtbGVhay10ZXN0LmMKQEAgLTc1LDEzICs3NSwxMSBAQAogCSAqIGFmdGVyIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQllbGVtID0ga21hbGxvYyhzaXplb2YoKmVsZW0pLCBHRlBfS0VSTkVMKTsKLQkJcHJfaW5mbygia21lbWxlYWs6IGttYWxsb2Moc2l6ZW9mKCplbGVtKSkgPSAlcFxuIiwgZWxlbSk7CisJCWVsZW0gPSBremFsbG9jKHNpemVvZigqZWxlbSksIEdGUF9LRVJORUwpOworCQlwcl9pbmZvKCJrbWVtbGVhazoga3phbGxvYyhzaXplb2YoKmVsZW0pKSA9ICVwXG4iLCBlbGVtKTsKIAkJaWYgKCFlbGVtKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbXNldChlbGVtLCAwLCBzaXplb2YoKmVsZW0pKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmVsZW0tPmxpc3QpOwotCiAJCWxpc3RfYWRkX3RhaWwoJmVsZW0tPmxpc3QsICZ0ZXN0X2xpc3QpOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggYmQ5YmMyMS4uODQyMjVmMyAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysgYi9tbS9rbWVtbGVhay5jCkBAIC0xMTMsNyArMTEzLDkgQEAKICNkZWZpbmUgQllURVNfUEVSX1BPSU5URVIJc2l6ZW9mKHZvaWQgKikKIAogLyogR0ZQIGJpdG1hc2sgZm9yIGttZW1sZWFrIGludGVybmFsIGFsbG9jYXRpb25zICovCi0jZGVmaW5lIEdGUF9LTUVNTEVBS19NQVNLCShHRlBfS0VSTkVMIHwgR0ZQX0FUT01JQykKKyNkZWZpbmUgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKQkoKChnZnApICYgKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDKSkgfCBcCisJCQkJIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DIHwgXAorCQkJCSBfX0dGUF9OT1dBUk4pCiAKIC8qIHNjYW5uaW5nIGFyZWEgaW5zaWRlIGEgbWVtb3J5IGJsb2NrICovCiBzdHJ1Y3Qga21lbWxlYWtfc2Nhbl9hcmVhIHsKQEAgLTUxMSw5ICs1MTMsMTAgQEAKIAlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiAJc3RydWN0IHByaW9fdHJlZV9ub2RlICpub2RlOwogCi0Jb2JqZWN0ID0ga21lbV9jYWNoZV9hbGxvYyhvYmplY3RfY2FjaGUsIGdmcCAmIEdGUF9LTUVNTEVBS19NQVNLKTsKKwlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKSk7CiAJaWYgKCFvYmplY3QpIHsKLQkJa21lbWxlYWtfc3RvcCgiQ2Fubm90IGFsbG9jYXRlIGEga21lbWxlYWtfb2JqZWN0IHN0cnVjdHVyZVxuIik7CisJCXByX3dhcm5pbmcoIkNhbm5vdCBhbGxvY2F0ZSBhIGttZW1sZWFrX29iamVjdCBzdHJ1Y3R1cmVcbiIpOworCQlrbWVtbGVha19kaXNhYmxlKCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzM0LDkgKzczNyw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlhcmVhID0ga21lbV9jYWNoZV9hbGxvYyhzY2FuX2FyZWFfY2FjaGUsIGdmcCAmIEdGUF9LTUVNTEVBS19NQVNLKTsKKwlhcmVhID0ga21lbV9jYWNoZV9hbGxvYyhzY2FuX2FyZWFfY2FjaGUsIGdmcF9rbWVtbGVha19tYXNrKGdmcCkpOwogCWlmICghYXJlYSkgewotCQlrbWVtbGVha193YXJuKCJDYW5ub3QgYWxsb2NhdGUgYSBzY2FuIGFyZWFcbiIpOworCQlwcl93YXJuaW5nKCJDYW5ub3QgYWxsb2NhdGUgYSBzY2FuIGFyZWFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jCmluZGV4IGJkYmEyNDUuLjQ2MThmZGEgMTAwNjQ0Ci0tLSBhL21tL21lbWJsb2NrLmMKKysrIGIvbW0vbWVtYmxvY2suYwpAQCAtMTM3LDggKzEzNyw2IEBACiAKIAlCVUdfT04oMCA9PSBzaXplKTsKIAotCXNpemUgPSBtZW1ibG9ja19hbGlnbl91cChzaXplLCBhbGlnbik7Ci0KIAkvKiBQdW1wIHVwIG1heF9hZGRyICovCiAJaWYgKGVuZCA9PSBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFKQogCQllbmQgPSBtZW1ibG9jay5jdXJyZW50X2xpbWl0OwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGRiNzZlZjcuLmRhNTNhMjUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTYxMiw4ICs2MTIsMTAgQEAKIAkvKiBwYWdlaW4gb2YgYSBiaWcgcGFnZSBpcyBhbiBldmVudC4gU28sIGlnbm9yZSBwYWdlIHNpemUgKi8KIAlpZiAobnJfcGFnZXMgPiAwKQogCQlfX3RoaXNfY3B1X2luYyhtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9QR1BHSU5fQ09VTlRdKTsKLQllbHNlCisJZWxzZSB7CiAJCV9fdGhpc19jcHVfaW5jKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlRdKTsKKwkJbnJfcGFnZXMgPSAtbnJfcGFnZXM7IC8qIGZvciBldmVudCAqLworCX0KIAogCV9fdGhpc19jcHVfYWRkKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9FVkVOVFNdLCBucl9wYWdlcyk7CiAKQEAgLTExMTEsNiArMTExMywyMyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorLyoqCisgKiBtZW1fY2dyb3VwX2NoZWNrX21hcmdpbiAtIGNoZWNrIGlmIHRoZSBtZW1vcnkgY2dyb3VwIGFsbG93cyBjaGFyZ2luZworICogQG1lbTogbWVtb3J5IGNncm91cCB0byBjaGVjaworICogQGJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBjaGFyZ2UKKyAqCisgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBvbiB3aGV0aGVyIEBtZW0gY2FuIGJlIGNoYXJnZWQgQGJ5dGVzIG9yCisgKiB3aGV0aGVyIHRoaXMgd291bGQgZXhjZWVkIHRoZSBsaW1pdC4KKyAqLworc3RhdGljIGJvb2wgbWVtX2Nncm91cF9jaGVja19tYXJnaW4oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwlpZiAoIXJlc19jb3VudGVyX2NoZWNrX21hcmdpbigmbWVtLT5yZXMsIGJ5dGVzKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChkb19zd2FwX2FjY291bnQgJiYgIXJlc19jb3VudGVyX2NoZWNrX21hcmdpbigmbWVtLT5tZW1zdywgYnl0ZXMpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBtZW1jZy0+Y3NzLmNncm91cDsKQEAgLTE4MzIsMjcgKzE4NTEsMzkgQEAKIAkJaWYgKGxpa2VseSghcmV0KSkKIAkJCXJldHVybiBDSEFSR0VfT0s7CiAKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBjc2l6ZSk7CiAJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCBtZW1zdyk7CiAJCWZsYWdzIHw9IE1FTV9DR1JPVVBfUkVDTEFJTV9OT1NXQVA7CiAJfSBlbHNlCiAJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCByZXMpOwotCi0JaWYgKGNzaXplID4gUEFHRV9TSVpFKSAvKiBjaGFuZ2UgY3NpemUgYW5kIHJldHJ5ICovCisJLyoKKwkgKiBjc2l6ZSBjYW4gYmUgZWl0aGVyIGEgaHVnZSBwYWdlIChIUEFHRV9TSVpFKSwgYSBiYXRjaCBvZgorCSAqIHJlZ3VsYXIgcGFnZXMgKENIQVJHRV9TSVpFKSwgb3IgYSBzaW5nbGUgcmVndWxhciBwYWdlCisJICogKFBBR0VfU0laRSkuCisJICoKKwkgKiBOZXZlciByZWNsYWltIG9uIGJlaGFsZiBvZiBvcHRpb25hbCBiYXRjaGluZywgcmV0cnkgd2l0aCBhCisJICogc2luZ2xlIHBhZ2UgaW5zdGVhZC4KKwkgKi8KKwlpZiAoY3NpemUgPT0gQ0hBUkdFX1NJWkUpCiAJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQlyZXR1cm4gQ0hBUkdFX1dPVUxEQkxPQ0s7CiAKIAlyZXQgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbV9vdmVyX2xpbWl0LCBOVUxMLAotCQkJCQlnZnBfbWFzaywgZmxhZ3MpOworCQkJCQkgICAgICBnZnBfbWFzaywgZmxhZ3MpOworCWlmIChtZW1fY2dyb3VwX2NoZWNrX21hcmdpbihtZW1fb3Zlcl9saW1pdCwgY3NpemUpKQorCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCS8qCi0JICogdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcygpIG1pZ2h0IG5vdCBnaXZlIHVzIGEgZnVsbAotCSAqIHBpY3R1cmUgb2YgcmVjbGFpbS4gU29tZSBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBtaWdodCBiZQotCSAqIG1vdmVkIHRvIHN3YXAgY2FjaGUgb3IganVzdCB1bm1hcHBlZCBmcm9tIHRoZSBjZ3JvdXAuCi0JICogQ2hlY2sgdGhlIGxpbWl0IGFnYWluIHRvIHNlZSBpZiB0aGUgcmVjbGFpbSByZWR1Y2VkIHRoZQotCSAqIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGNncm91cCBiZWZvcmUgZ2l2aW5nIHVwCisJICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW0KKwkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQorCSAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLgorCSAqCisJICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKKwkgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFjaworCSAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS4KIAkgKi8KLQlpZiAocmV0IHx8IG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQobWVtX292ZXJfbGltaXQpKQorCWlmIChjc2l6ZSA9PSBQQUdFX1NJWkUgJiYgcmV0KQogCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCiAJLyoKQEAgLTIxNDQsNiArMjE3NSw4IEBACiAJc3RydWN0IHBhZ2VfY2dyb3VwICp0YWlsX3BjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHRhaWwpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQorCQlyZXR1cm47CiAJLyoKIAkgKiBXZSBoYXZlIG5vIHJhY2VzIHdpdGggY2hhcmdlL3VuY2hhcmdlIGJ1dCB3aWxsIGhhdmUgcmFjZXMgd2l0aAogCSAqIHBhZ2Ugc3RhdGUgYWNjb3VudGluZy4KQEAgLTIyMzMsNyArMjI2NiwxMiBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKwkvKgorCSAqIFRoZSBwYWdlIGlzIGlzb2xhdGVkIGZyb20gTFJVLiBTbywgY29sbGFwc2UgZnVuY3Rpb24KKwkgKiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBwYWdlLiBCdXQgcGFnZSBzcGxpdHRpbmcgY2FuIGhhcHBlbi4KKwkgKiBEbyB0aGlzIGNoZWNrIHVuZGVyIGNvbXBvdW5kX3BhZ2VfbG9jaygpLiBUaGUgY2FsbGVyIHNob3VsZAorCSAqIGhvbGQgaXQuCisJICovCiAJaWYgKChjaGFyZ2Vfc2l6ZSA+IFBBR0VfU0laRSkgJiYgIVBhZ2VUcmFuc0h1Z2UocGMtPnBhZ2UpKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0yMjY1LDcgKzIzMDMsNyBAQAogCXN0cnVjdCBjZ3JvdXAgKmNnID0gY2hpbGQtPmNzcy5jZ3JvdXA7CiAJc3RydWN0IGNncm91cCAqcGNnID0gY2ctPnBhcmVudDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50OwotCWludCBjaGFyZ2UgPSBQQUdFX1NJWkU7CisJaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKQEAgLTIyNzgsMjMgKzIzMTYsMjYgQEAKIAkJZ290byBvdXQ7CiAJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCiAJCWdvdG8gcHV0OwotCS8qIFRoZSBwYWdlIGlzIGlzb2xhdGVkIGZyb20gTFJVIGFuZCB3ZSBoYXZlIG5vIHJhY2Ugd2l0aCBzcGxpdHRpbmcgKi8KLQljaGFyZ2UgPSBQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CisKKwlpZiAoUGFnZVRyYW5zSHVnZShwYWdlKSkKKwkJcGFnZV9zaXplID0gSFBBR0VfU0laRTsKIAogCXBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KHBjZyk7Ci0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgZ2ZwX21hc2ssICZwYXJlbnQsIGZhbHNlLCBjaGFyZ2UpOworCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKE5VTEwsIGdmcF9tYXNrLAorCQkJCSZwYXJlbnQsIGZhbHNlLCBwYWdlX3NpemUpOwogCWlmIChyZXQgfHwgIXBhcmVudCkKIAkJZ290byBwdXRfYmFjazsKIAotCWlmIChjaGFyZ2UgPiBQQUdFX1NJWkUpCisJaWYgKHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkKIAkJZmxhZ3MgPSBjb21wb3VuZF9sb2NrX2lycXNhdmUocGFnZSk7CiAKLQlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSwgY2hhcmdlKTsKKwlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSwgcGFnZV9zaXplKTsKIAlpZiAocmV0KQotCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50LCBjaGFyZ2UpOwotcHV0X2JhY2s6Ci0JaWYgKGNoYXJnZSA+IFBBR0VfU0laRSkKKwkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHBhcmVudCwgcGFnZV9zaXplKTsKKworCWlmIChwYWdlX3NpemUgPiBQQUdFX1NJWkUpCiAJCWNvbXBvdW5kX3VubG9ja19pcnFyZXN0b3JlKHBhZ2UsIGZsYWdzKTsKK3B1dF9iYWNrOgogCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CiBwdXQ6CiAJcHV0X3BhZ2UocGFnZSk7CkBAIC0yMzEyLDEzICsyMzUzLDE5IEBACiAJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQlpbnQgcmV0OwogCWludCBwYWdlX3NpemUgPSBQQUdFX1NJWkU7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKKwlib29sIG9vbSA9IHRydWU7CisJaW50IHJldDsKIAogCWlmIChQYWdlVHJhbnNIdWdlKHBhZ2UpKSB7CiAJCXBhZ2Vfc2l6ZSA8PD0gY29tcG91bmRfb3JkZXIocGFnZSk7CiAJCVZNX0JVR19PTighUGFnZVRyYW5zSHVnZShwYWdlKSk7CisJCS8qCisJCSAqIE5ldmVyIE9PTS1raWxsIGEgcHJvY2VzcyBmb3IgYSBodWdlIHBhZ2UuICBUaGUKKwkJICogZmF1bHQgaGFuZGxlciB3aWxsIGZhbGwgYmFjayB0byByZWd1bGFyIHBhZ2VzLgorCQkgKi8KKwkJb29tID0gZmFsc2U7CiAJfQogCiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CkBAIC0yMzI3LDcgKzIzNzQsNyBAQAogCQlyZXR1cm4gMDsKIAlwcmVmZXRjaHcocGMpOwogCi0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAmbWVtLCB0cnVlLCBwYWdlX3NpemUpOworCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgJm1lbSwgb29tLCBwYWdlX3NpemUpOwogCWlmIChyZXQgfHwgIW1lbSkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTAxMyw5ICs1MDYwLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9zd2FwX2FjY291bnQoY2hhciAqcykKIHsKIAkvKiBjb25zaWRlciBlbmFibGVkIGlmIG5vIHBhcmFtZXRlciBvciAxIGlzIGdpdmVuICovCi0JaWYgKCFzIHx8ICFzdHJjbXAocywgIjEiKSkKKwlpZiAoISgqcykgfHwgIXN0cmNtcChzLCAiPTEiKSkKIAkJcmVhbGx5X2RvX3N3YXBfYWNjb3VudCA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChzLCAiMCIpKQorCWVsc2UgaWYgKCFzdHJjbXAocywgIj0wIikpCiAJCXJlYWxseV9kb19zd2FwX2FjY291bnQgPSAwOwogCXJldHVybiAxOwogfQpAQCAtNTAyMyw3ICs1MDcwLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9zd2FwX2FjY291bnQoY2hhciAqcykKIHsKLQllbmFibGVfc3dhcF9hY2NvdW50KCIwIik7CisJcHJpbnRrX29uY2UoIm5vc3dhcGFjY291bnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDIuNi40MC4gVXNlIHN3YXBhY2NvdW50PTAgaW5zdGVhZFxuIik7CisJZW5hYmxlX3N3YXBfYWNjb3VudCgiPTAiKTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc3dhcGFjY291bnQiLCBkaXNhYmxlX3N3YXBfYWNjb3VudCk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1NDhmYmQ3Li4wMjA3YzJmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTIzMyw4ICsyMzMsOCBAQAogCX0KIAogCS8qCi0JICogT25seSBhbGwgc2hyaW5rX3NsYWIgaGVyZSAod2hpY2ggd291bGQgYWxzbwotCSAqIHNocmluayBvdGhlciBjYWNoZXMpIGlmIGFjY2VzcyBpcyBub3QgcG90ZW50aWFsbHkgZmF0YWwuCisJICogT25seSBjYWxsIHNocmlua19zbGFiIGhlcmUgKHdoaWNoIHdvdWxkIGFsc28gc2hyaW5rIG90aGVyIGNhY2hlcykgaWYKKwkgKiBhY2Nlc3MgaXMgbm90IHBvdGVudGlhbGx5IGZhdGFsLgogCSAqLwogCWlmIChhY2Nlc3MpIHsKIAkJaW50IG5yOwpAQCAtMzg2LDggKzM4Niw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJc3RydWN0IGFub25fdm1hICphdjsKIAotCWlmICghUGFnZUh1Z2UocGFnZSkgJiYgdW5saWtlbHkoc3BsaXRfaHVnZV9wYWdlKHBhZ2UpKSkKLQkJcmV0dXJuOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJYXYgPSBwYWdlX2xvY2tfYW5vbl92bWEocGFnZSk7CiAJaWYgKGF2ID09IE5VTEwpCS8qIE5vdCBhY3R1YWxseSBtYXBwZWQgYW55bW9yZSAqLwpAQCAtODU2LDYgKzg1NCw3IEBACiAJaW50IHJldDsKIAlpbnQga2lsbCA9IDE7CiAJc3RydWN0IHBhZ2UgKmhwYWdlID0gY29tcG91bmRfaGVhZChwKTsKKwlzdHJ1Y3QgcGFnZSAqcHBhZ2U7CiAKIAlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VTbGFiKHApKQogCQlyZXR1cm4gU1dBUF9TVUNDRVNTOwpAQCAtODk3LDYgKzg5Niw0NCBAQAogCX0KIAogCS8qCisJICogcHBhZ2U6IHBvaXNvbmVkIHBhZ2UKKwkgKiAgIGlmIHAgaXMgcmVndWxhciBwYWdlKDRrIHBhZ2UpCisJICogICAgICAgIHBwYWdlID09IHJlYWwgcG9pc29uZWQgcGFnZTsKKwkgKiAgIGVsc2UgcCBpcyBodWdldGxiIG9yIFRIUCwgcHBhZ2UgPT0gaGVhZCBwYWdlLgorCSAqLworCXBwYWdlID0gaHBhZ2U7CisKKwlpZiAoUGFnZVRyYW5zSHVnZShocGFnZSkpIHsKKwkJLyoKKwkJICogVmVyaWZ5IHRoYXQgdGhpcyBpc24ndCBhIGh1Z2V0bGJmcyBoZWFkIHBhZ2UsIHRoZSBjaGVjayBmb3IKKwkJICogUGFnZUFub24gaXMganVzdCBmb3IgYXZvaWQgdHJpcHBpbmcgYSBzcGxpdF9odWdlX3BhZ2UKKwkJICogaW50ZXJuYWwgZGVidWcgY2hlY2ssIGFzIHNwbGl0X2h1Z2VfcGFnZSByZWZ1c2VzIHRvIGRlYWwgd2l0aAorCQkgKiBhbnl0aGluZyB0aGF0IGlzbid0IGFuIGFub24gcGFnZS4gUGFnZUFub24gY2FuJ3QgZ28gYXdheSBmcm8KKwkJICogdW5kZXIgdXMgYmVjYXVzZSB3ZSBob2xkIGEgcmVmY291bnQgb24gdGhlIGhwYWdlLCB3aXRob3V0IGEKKwkJICogcmVmY291bnQgb24gdGhlIGhwYWdlLiBzcGxpdF9odWdlX3BhZ2UgY2FuJ3QgYmUgc2FmZWx5IGNhbGxlZAorCQkgKiBpbiB0aGUgZmlyc3QgcGxhY2UsIGhhdmluZyBhIHJlZmNvdW50IG9uIHRoZSB0YWlsIGlzbid0CisJCSAqIGVub3VnaCAqIHRvIGJlIHNhZmUuCisJCSAqLworCQlpZiAoIVBhZ2VIdWdlKGhwYWdlKSAmJiBQYWdlQW5vbihocGFnZSkpIHsKKwkJCWlmICh1bmxpa2VseShzcGxpdF9odWdlX3BhZ2UoaHBhZ2UpKSkgeworCQkJCS8qCisJCQkJICogRklYTUU6IGlmIHNwbGl0dGluZyBUSFAgaXMgZmFpbGVkLCBpdCBpcworCQkJCSAqIGJldHRlciB0byBzdG9wIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIHJhdGhlcgorCQkJCSAqIHRoYW4gY2F1c2luZyBwYW5pYyBieSB1bm1hcHBpbmcuIFN5c3RlbSBtaWdodAorCQkJCSAqIHN1cnZpdmUgaWYgdGhlIHBhZ2UgaXMgZnJlZWQgbGF0ZXIuCisJCQkJICovCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiTUNFICUjbHg6IGZhaWxlZCB0byBzcGxpdCBUSFBcbiIsIHBmbik7CisKKwkJCQlCVUdfT04oIVBhZ2VIV1BvaXNvbihwKSk7CisJCQkJcmV0dXJuIFNXQVBfRkFJTDsKKwkJCX0KKwkJCS8qIFRIUCBpcyBzcGxpdCwgc28gcHBhZ2Ugc2hvdWxkIGJlIHRoZSByZWFsIHBvaXNvbmVkIHBhZ2UuICovCisJCQlwcGFnZSA9IHA7CisJCX0KKwl9CisKKwkvKgogCSAqIEZpcnN0IGNvbGxlY3QgYWxsIHRoZSBwcm9jZXNzZXMgdGhhdCBoYXZlIHRoZSBwYWdlCiAJICogbWFwcGVkIGluIGRpcnR5IGZvcm0uICBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSB0cnlfdG9fdW5tYXAsCiAJICogYmVjYXVzZSB0dHUgdGFrZXMgdGhlIHJtYXAgZGF0YSBzdHJ1Y3R1cmVzIGRvd24uCkBAIC05MDUsMTIgKzk0MiwxOCBAQAogCSAqIHRoZXJlJ3Mgbm90aGluZyB0aGF0IGNhbiBiZSBkb25lLgogCSAqLwogCWlmIChraWxsKQotCQljb2xsZWN0X3Byb2NzKGhwYWdlLCAmdG9raWxsKTsKKwkJY29sbGVjdF9wcm9jcyhwcGFnZSwgJnRva2lsbCk7CiAKLQlyZXQgPSB0cnlfdG9fdW5tYXAoaHBhZ2UsIHR0dSk7CisJaWYgKGhwYWdlICE9IHBwYWdlKQorCQlsb2NrX3BhZ2Vfbm9zeW5jKHBwYWdlKTsKKworCXJldCA9IHRyeV90b191bm1hcChwcGFnZSwgdHR1KTsKIAlpZiAocmV0ICE9IFNXQVBfU1VDQ0VTUykKIAkJcHJpbnRrKEtFUk5fRVJSICJNQ0UgJSNseDogZmFpbGVkIHRvIHVubWFwIHBhZ2UgKG1hcGNvdW50PSVkKVxuIiwKLQkJCQlwZm4sIHBhZ2VfbWFwY291bnQoaHBhZ2UpKTsKKwkJCQlwZm4sIHBhZ2VfbWFwY291bnQocHBhZ2UpKTsKKworCWlmIChocGFnZSAhPSBwcGFnZSkKKwkJdW5sb2NrX3BhZ2UocHBhZ2UpOwogCiAJLyoKIAkgKiBOb3cgdGhhdCB0aGUgZGlydHkgYml0IGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhlCkBAIC05MjEsNyArOTY0LDcgQEAKIAkgKiB1c2UgYSBtb3JlIGZvcmNlLWZ1bGwgdW5jYXRjaGFibGUga2lsbCB0byBwcmV2ZW50CiAJICogYW55IGFjY2Vzc2VzIHRvIHRoZSBwb2lzb25lZCBtZW1vcnkuCiAJICovCi0Ja2lsbF9wcm9jc19hbygmdG9raWxsLCAhIVBhZ2VEaXJ0eShocGFnZSksIHRyYXBubywKKwlraWxsX3Byb2NzX2FvKCZ0b2tpbGwsICEhUGFnZURpcnR5KHBwYWdlKSwgdHJhcG5vLAogCQkgICAgICByZXQgIT0gU1dBUF9TVUNDRVNTLCBwLCBwZm4pOwogCiAJcmV0dXJuIHJldDsKQEAgLTEwMjIsMTkgKzEwNjUsMjIgQEAKIAkgKiBUaGUgY2hlY2sgKHVubmVjZXNzYXJpbHkpIGlnbm9yZXMgTFJVIHBhZ2VzIGJlaW5nIGlzb2xhdGVkIGFuZAogCSAqIHdhbGtlZCBieSB0aGUgcGFnZSByZWNsYWltIGNvZGUsIGhvd2V2ZXIgdGhhdCdzIG5vdCBhIGJpZyBsb3NzLgogCSAqLwotCWlmICghUGFnZUxSVShwKSAmJiAhUGFnZUh1Z2UocCkpCi0JCXNoYWtlX3BhZ2UocCwgMCk7Ci0JaWYgKCFQYWdlTFJVKHApICYmICFQYWdlSHVnZShwKSkgewotCQkvKgotCQkgKiBzaGFrZV9wYWdlIGNvdWxkIGhhdmUgdHVybmVkIGl0IGZyZWUuCi0JCSAqLwotCQlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7Ci0JCQlhY3Rpb25fcmVzdWx0KHBmbiwgImZyZWUgYnVkZHksIDJuZCB0cnkiLCBERUxBWUVEKTsKLQkJCXJldHVybiAwOworCWlmICghUGFnZUh1Z2UocCkgJiYgIVBhZ2VUcmFuc0NvbXBvdW5kKHApKSB7CisJCWlmICghUGFnZUxSVShwKSkKKwkJCXNoYWtlX3BhZ2UocCwgMCk7CisJCWlmICghUGFnZUxSVShwKSkgeworCQkJLyoKKwkJCSAqIHNoYWtlX3BhZ2UgY291bGQgaGF2ZSB0dXJuZWQgaXQgZnJlZS4KKwkJCSAqLworCQkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgeworCQkJCWFjdGlvbl9yZXN1bHQocGZuLCAiZnJlZSBidWRkeSwgMm5kIHRyeSIsCisJCQkJCQlERUxBWUVEKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOworCQkJcHV0X3BhZ2UocCk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0JCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOwotCQlwdXRfcGFnZShwKTsKLQkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKgpAQCAtMTA2NCw3ICsxMTEwLDcgQEAKIAkgKiBGb3IgZXJyb3Igb24gdGhlIHRhaWwgcGFnZSwgd2Ugc2hvdWxkIHNldCBQR19od3BvaXNvbgogCSAqIG9uIHRoZSBoZWFkIHBhZ2UgdG8gc2hvdyB0aGF0IHRoZSBodWdlcGFnZSBpcyBod3BvaXNvbmVkCiAJICovCi0JaWYgKFBhZ2VUYWlsKHApICYmIFRlc3RTZXRQYWdlSFdQb2lzb24oaHBhZ2UpKSB7CisJaWYgKFBhZ2VIdWdlKHApICYmIFBhZ2VUYWlsKHApICYmIFRlc3RTZXRQYWdlSFdQb2lzb24oaHBhZ2UpKSB7CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAiaHVnZXBhZ2UgYWxyZWFkeSBoYXJkd2FyZSBwb2lzb25lZCIsCiAJCQkJSUdOT1JFRCk7CiAJCXVubG9ja19wYWdlKGhwYWdlKTsKQEAgLTEyOTUsNyArMTM0MSwxMCBAQAogCXJldCA9IG1pZ3JhdGVfaHVnZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLCAwLAogCQkJCXRydWUpOwogCWlmIChyZXQpIHsKLQkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UxLCAqcGFnZTI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlMSwgcGFnZTIsICZwYWdlbGlzdCwgbHJ1KQorCQkJcHV0X3BhZ2UocGFnZTEpOworCiAJCXByX2RlYnVnKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IG1pZ3JhdGlvbiBmYWlsZWQgJWQsIHR5cGUgJWx4XG4iLAogCQkJIHBmbiwgcmV0LCBwYWdlLT5mbGFncyk7CiAJCWlmIChyZXQgPiAwKQpAQCAtMTQxOSw2ICsxNDY4LDcgQEAKIAkJcmV0ID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLAogCQkJCQkJCQkwLCB0cnVlKTsKIAkJaWYgKHJldCkgeworCQkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKIAkJCXByX2luZm8oInNvZnQgb2ZmbGluZTogJSNseDogbWlncmF0aW9uIGZhaWxlZCAlZCwgdHlwZSAlbHhcbiIsCiAJCQkJcGZuLCByZXQsIHBhZ2UtPmZsYWdzKTsKIAkJCWlmIChyZXQgPiAwKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAzMTI1MGZhLi44ZThjMTgzMiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTIyMTksNyArMjIxOSw2IEBACiAJCQkJCQkJICZwdGwpOwogCQkJaWYgKCFwdGVfc2FtZSgqcGFnZV90YWJsZSwgb3JpZ19wdGUpKSB7CiAJCQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CiAJCQkJZ290byB1bmxvY2s7CiAJCQl9CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwpAQCAtMjI4OSw3ICsyMjg4LDYgQEAKIAkJCQkJCQkgJnB0bCk7CiAJCQlpZiAoIXB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpIHsKIAkJCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIAkJCQlnb3RvIHVubG9jazsKIAkJCX0KIApAQCAtMjM2NywxNiArMjM2NSw2IEBACiAJfQogCV9fU2V0UGFnZVVwdG9kYXRlKG5ld19wYWdlKTsKIAotCS8qCi0JICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCi0JICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgotCSAqLwotCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYgb2xkX3BhZ2UpIHsKLQkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogZm9yIExSVSBtYW5pcHVsYXRpb24gKi8KLQkJY2xlYXJfcGFnZV9tbG9jayhvbGRfcGFnZSk7Ci0JCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKLQl9Ci0KIAlpZiAobWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShuZXdfcGFnZSwgbW0sIEdGUF9LRVJORUwpKQogCQlnb3RvIG9vbV9mcmVlX25ldzsKIApAQCAtMjQ0NCwxMCArMjQzMiwyMCBAQAogCiAJaWYgKG5ld19wYWdlKQogCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3X3BhZ2UpOwotCWlmIChvbGRfcGFnZSkKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIHVubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CisJaWYgKG9sZF9wYWdlKSB7CisJCS8qCisJCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAorCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJCSAqLworCQlpZiAoKHJldCAmIFZNX0ZBVUxUX1dSSVRFKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpIHsKKwkJCWxvY2tfcGFnZShvbGRfcGFnZSk7CS8qIExSVSBtYW5pcHVsYXRpb24gKi8KKwkJCW11bmxvY2tfdm1hX3BhZ2Uob2xkX3BhZ2UpOworCQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOworCQl9CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CisJfQogCXJldHVybiByZXQ7CiBvb21fZnJlZV9uZXc6CiAJcGFnZV9jYWNoZV9yZWxlYXNlKG5ld19wYWdlKTsKQEAgLTMwNTMsMTIgKzMwNTEsNiBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJY2hhcmdlZCA9IDE7Ci0JCQkvKgotCQkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCi0JCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCi0JCQkgKi8KLQkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQkJCWNsZWFyX3BhZ2VfbWxvY2sodm1mLnBhZ2UpOwogCQkJY29weV91c2VyX2hpZ2hwYWdlKHBhZ2UsIHZtZi5wYWdlLCBhZGRyZXNzLCB2bWEpOwogCQkJX19TZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggNDZmZThjYy4uNzY2MTE1MiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNzcyLDYgKzc3Miw3IEBACiB1bmxvY2s6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAKK21vdmVfbmV3cGFnZToKIAlpZiAocmMgIT0gLUVBR0FJTikgewogIAkJLyoKICAJCSAqIEEgcGFnZSB0aGF0IGhhcyBiZWVuIG1pZ3JhdGVkIGhhcyBhbGwgcmVmZXJlbmNlcwpAQCAtNzg1LDggKzc4Niw2IEBACiAJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CiAJfQogCi1tb3ZlX25ld3BhZ2U6Ci0KIAkvKgogCSAqIE1vdmUgdGhlIG5ldyBwYWdlIHRvIHRoZSBMUlUuIElmIG1pZ3JhdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwKIAkgKiB0aGVuIHRoaXMgd2lsbCBmcmVlIHRoZSBwYWdlLgpAQCAtODg4LDcgKzg4Nyw3IEBACiAgKiBhcmUgbW92YWJsZSBhbnltb3JlIGJlY2F1c2UgdG8gaGFzIGJlY29tZSBlbXB0eQogICogb3Igbm8gcmV0cnlhYmxlIHBhZ2VzIGV4aXN0IGFueW1vcmUuCiAgKiBDYWxsZXIgc2hvdWxkIGNhbGwgcHV0YmFja19scnVfcGFnZXMgdG8gcmV0dXJuIHBhZ2VzIHRvIHRoZSBMUlUKLSAqIG9yIGZyZWUgbGlzdC4KKyAqIG9yIGZyZWUgbGlzdCBvbmx5IGlmIHJldCAhPSAwLgogICoKICAqIFJldHVybjogTnVtYmVyIG9mIHBhZ2VzIG5vdCBtaWdyYXRlZCBvciBlcnJvciBjb2RlLgogICovCkBAIC05ODEsMTAgKzk4MCw2IEBACiAJfQogCXJjID0gMDsKIG91dDoKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBwYWdlMiwgZnJvbSwgbHJ1KQotCQlwdXRfcGFnZShwYWdlKTsKLQogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCAxM2U4MWVlLi5jMzkyNGM3ZiAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0xNzgsNiArMTc4LDEzIEBACiAJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX1dSSVRFIHwgVk1fU0hBUkVEKSkgPT0gVk1fV1JJVEUpCiAJCWd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwogCisJLyoKKwkgKiBXZSB3YW50IG1sb2NrIHRvIHN1Y2NlZWQgZm9yIHJlZ2lvbnMgdGhhdCBoYXZlIGFueSBwZXJtaXNzaW9ucworCSAqIG90aGVyIHRoYW4gUFJPVF9OT05FLgorCSAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKQorCQlndXBfZmxhZ3MgfD0gRk9MTF9GT1JDRTsKKwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQogCQlndXBfZmxhZ3MgfD0gRk9MTF9NTE9DSzsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDkwYzE0MzkuLmE4NzNlNjEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEwODgsOCArMTA4OCwxMCBAQAogCQlwc2V0ID0gcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KTsKIAogCQlwY3AgPSAmcHNldC0+cGNwOwotCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKLQkJcGNwLT5jb3VudCA9IDA7CisJCWlmIChwY3AtPmNvdW50KSB7CisJCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKKwkJCXBjcC0+Y291bnQgPSAwOworCQl9CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CkBAIC0yMDM0LDYgKzIwMzYsMTQgQEAKIAkgKi8KIAlhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzayk7CiAKKwkvKgorCSAqIEZpbmQgdGhlIHRydWUgcHJlZmVycmVkIHpvbmUgaWYgdGhlIGFsbG9jYXRpb24gaXMgdW5jb25zdHJhaW5lZCBieQorCSAqIGNwdXNldHMuCisJICovCisJaWYgKCEoYWxsb2NfZmxhZ3MgJiBBTExPQ19DUFVTRVQpICYmICFub2RlbWFzaykKKwkJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwgTlVMTCwKKwkJCQkJJnByZWZlcnJlZF96b25lKTsKKwogCS8qIFRoaXMgaXMgdGhlIGxhc3QgY2hhbmNlLCBpbiBnZW5lcmFsLCBiZWZvcmUgdGhlIGdvdG8gbm9wYWdlLiAqLwogCXBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF9tYXNrLCBub2RlbWFzaywgb3JkZXIsIHpvbmVsaXN0LAogCQkJaGlnaF96b25laWR4LCBhbGxvY19mbGFncyAmIH5BTExPQ19OT19XQVRFUk1BUktTLApAQCAtMjE5Miw3ICsyMjAyLDkgQEAKIAogCWdldF9tZW1zX2FsbG93ZWQoKTsKIAkvKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBsYXRlciAqLwotCWZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLCAmcHJlZmVycmVkX3pvbmUpOworCWZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCisJCQkJbm9kZW1hc2sgPyA6ICZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJJnByZWZlcnJlZF96b25lKTsKIAlpZiAoIXByZWZlcnJlZF96b25lKSB7CiAJCXB1dF9tZW1zX2FsbG93ZWQoKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IDAzNjlmNWIuLmViNjYzZmIgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC02LDYgKzYsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAxMCAgTGludXMgVG9ydmFsZHMKICAqLwogCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZjVkOTBkZS4uMTc0OTdkMCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTE4ODIsMTIgKzE4ODIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107CiAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuOwogCWVudW0gbHJ1X2xpc3QgbDsKLQl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKKwl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0gPSBzYy0+bnJfdG9fcmVjbGFpbTsKLQl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQgPSBzYy0+bnJfc2Nhbm5lZDsKIAogcmVzdGFydDoKIAlucl9yZWNsYWltZWQgPSAwOworCW5yX3NjYW5uZWQgPSBzYy0+bnJfc2Nhbm5lZDsKIAlnZXRfc2Nhbl9jb3VudCh6b25lLCBzYywgbnIsIHByaW9yaXR5KTsKIAogCXdoaWxlIChucltMUlVfSU5BQ1RJVkVfQU5PTl0gfHwgbnJbTFJVX0FDVElWRV9GSUxFXSB8fApAQCAtMjA4Myw3ICsyMDgzLDggQEAKIAkJCXN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZTsKIAogCQkJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGdmcF96b25lKHNjLT5nZnBfbWFzayksCi0JCQkJCQkJTlVMTCwgJnByZWZlcnJlZF96b25lKTsKKwkJCQkJCSZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJCQkmcHJlZmVycmVkX3pvbmUpOwogCQkJd2FpdF9pZmZfY29uZ2VzdGVkKHByZWZlcnJlZF96b25lLCBCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYwppbmRleCBlZTQxZmVmLi5kMWE2MTEzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCkBAIC01MCwxMiArNTAsMTIgQEAKIAkJc2tiID0gdGZwLT5za2I7CiAJfQogCisJaWYgKHNrYl9saW5lYXJpemUoc2tiKSA8IDAgfHwgc2tiX2xpbmVhcml6ZSh0bXBfc2tiKSA8IDApCisJCWdvdG8gZXJyOworCiAJc2tiX3B1bGwodG1wX3NrYiwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KSk7Ci0JaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0bXBfc2tiLT5sZW4sIEdGUF9BVE9NSUMpIDwgMCkgewotCQkvKiBmcmVlIGJ1ZmZlcmVkIHNrYiwgc2tiIHdpbGwgYmUgZnJlZWQgbGF0ZXIgKi8KLQkJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdG1wX3NrYi0+bGVuLCBHRlBfQVRPTUlDKSA8IDApCisJCWdvdG8gZXJyOwogCiAJLyogbW92ZSBmcmVlIGVudHJ5IHRvIGVuZCAqLwogCXRmcC0+c2tiID0gTlVMTDsKQEAgLTcwLDYgKzcwLDExIEBACiAJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7CiAKIAlyZXR1cm4gc2tiOworCitlcnI6CisJLyogZnJlZSBidWZmZXJlZCBza2IsIHNrYiB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZnJhZ19jcmVhdGVfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3Zpcy5jIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggY2Q0YzQyMy4uZGUxMDIyYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2xpc3RfbG9jayk7CiAJa2ZyZWVfc2tiKGluZm8tPnNrYl9wYWNrZXQpOworCWtmcmVlKGluZm8pOwogfQogCiAvKiBDb21wYXJlIHR3byB2aXMgcGFja2V0cywgdXNlZCBieSB0aGUgaGFzaGluZyBhbGdvcml0aG0gKi8KQEAgLTI2OCwxMCArMjY5LDEwIEBACiAJCQkJYnVmZl9wb3MgKz0gc3ByaW50ZihidWZmICsgYnVmZl9wb3MsICIlcE0sIiwKIAkJCQkJCWVudHJ5LT5hZGRyKTsKIAotCQkJCWZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPmVudHJpZXM7IGkrKykKKwkJCQlmb3IgKGogPSAwOyBqIDwgcGFja2V0LT5lbnRyaWVzOyBqKyspCiAJCQkJCWJ1ZmZfcG9zICs9IHZpc19kYXRhX3JlYWRfZW50cnkoCiAJCQkJCQkJYnVmZiArIGJ1ZmZfcG9zLAotCQkJCQkJCSZlbnRyaWVzW2ldLAorCQkJCQkJCSZlbnRyaWVzW2pdLAogCQkJCQkJCWVudHJ5LT5hZGRyLAogCQkJCQkJCWVudHJ5LT5wcmltYXJ5KTsKIApAQCAtNDQ0LDcgKzQ0NSw3IEBACiAJCQkgICAgICBpbmZvKTsKIAlpZiAoaGFzaF9hZGRlZCA8IDApIHsKIAkJLyogZGlkIG5vdCB3b3JrIChmb3Igc29tZSByZWFzb24pICovCi0JCWtyZWZfcHV0KCZvbGRfaW5mby0+cmVmY291bnQsIGZyZWVfaW5mbyk7CisJCWtyZWZfcHV0KCZpbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKIAkJaW5mbyA9IE5VTEw7CiAJfQogCkBAIC04MTUsNyArODE2LDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPQogCQljb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgYmF0X3ByaXYsIHZpc193b3JrKTsKLQlzdHJ1Y3QgdmlzX2luZm8gKmluZm8sICp0ZW1wOworCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKIAogCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwogCXB1cmdlX3Zpc19wYWNrZXRzKGJhdF9wcml2KTsKQEAgLTgyNSw4ICs4MjYsOSBAQAogCQlzZW5kX2xpc3RfYWRkKGJhdF9wcml2LCBiYXRfcHJpdi0+bXlfdmlzX2luZm8pOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmZvLCB0ZW1wLCAmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QsCi0JCQkJIHNlbmRfbGlzdCkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QpKSB7CisJCWluZm8gPSBsaXN0X2ZpcnN0X2VudHJ5KCZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCwKKwkJCQkJdHlwZW9mKCppbmZvKSwgc2VuZF9saXN0KTsKIAogCQlrcmVmX2dldCgmaW5mby0+cmVmY291bnQpOwogCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IDZiOTBhNDEuLjk5Y2Q4ZDkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTM3OSwxNCArMzc5LDEwIEBACiAJaGNpX2Nvbm5faG9sZChhY2wpOwogCiAJaWYgKGFjbC0+c3RhdGUgPT0gQlRfT1BFTiB8fCBhY2wtPnN0YXRlID09IEJUX0NMT1NFRCkgewotCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJYWNsLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWFjbC0+cGVuZGluZ19zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJCWFjbC0+YXV0aF90eXBlID0gYXV0aF90eXBlOwogCQloY2lfYWNsX2Nvbm5lY3QoYWNsKTsKLQl9IGVsc2UgewotCQlpZiAoYWNsLT5zZWNfbGV2ZWwgPCBzZWNfbGV2ZWwpCi0JCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKLQkJaWYgKGFjbC0+YXV0aF90eXBlIDwgYXV0aF90eXBlKQotCQkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJfQogCiAJaWYgKHR5cGUgPT0gQUNMX0xJTkspCkBAIC00NDIsMTEgKzQzOCwxNyBAQAogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID4gc2VjX2xldmVsKQorCQlzZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKKwogCWlmIChzZWNfbGV2ZWwgPiBjb25uLT5zZWNfbGV2ZWwpCi0JCWNvbm4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJZWxzZSBpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpCiAJCXJldHVybiAxOwogCisJLyogTWFrZSBzdXJlIHdlIHByZXNlcnZlIGFuIGV4aXN0aW5nIE1JVE0gcmVxdWlyZW1lbnQqLworCWF1dGhfdHlwZSB8PSAoY29ubi0+YXV0aF90eXBlICYgMHgwMSk7CisKIAljb25uLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA4YjYwMmQ4Li45YzQ1NDFiIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC0xMDExLDYgKzEwMTEsMTAgQEAKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKGhkZXYtPndvcmtxdWV1ZSk7CiAKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2JsYWNrbGlzdF9jbGVhcihoZGV2KTsKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwogCV9faGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDM4MTAwMTcuLmEyOTA4NTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNjkyLDEzICs2OTIsMTMgQEAKIAlpZiAoY29ubi0+c3RhdGUgIT0gQlRfQ09ORklHIHx8ICFjb25uLT5vdXQpCiAJCXJldHVybiAwOwogCi0JaWYgKGNvbm4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBPbmx5IHJlcXVlc3QgYXV0aGVudGljYXRpb24gZm9yIFNTUCBjb25uZWN0aW9ucyBvciBub24tU1NQCiAJICogZGV2aWNlcyB3aXRoIHNlY19sZXZlbCBISUdIICovCiAJaWYgKCEoaGRldi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPnNzcF9tb2RlID4gMCkgJiYKLQkJCQkJY29ubi0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX0hJR0gpCisJCQkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKQEAgLTEwOTUsOSArMTA5NSwxMCBAQAogCiAJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubikgewotCQlpZiAoIWV2LT5zdGF0dXMpCisJCWlmICghZXYtPnN0YXR1cykgewogCQkJY29ubi0+bGlua19tb2RlIHw9IEhDSV9MTV9BVVRIOwotCQllbHNlCisJCQljb25uLT5zZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKKwkJfSBlbHNlCiAJCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CiAKIAkJY2xlYXJfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGM3OTFmY2QuLjc1NTBhYmIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTMwNSwzMyArMzA1LDQ0IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHU4IGwyY2FwX2dldF9hdXRoX3R5cGUoc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCXJldHVybiBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlyZXR1cm4gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOworCQl9CisJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOworCQllbHNlCisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlyZXR1cm4gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCXJldHVybiBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOworCQl9CisJfQorfQorCiAvKiBTZXJ2aWNlIGxldmVsIHNlY3VyaXR5ICovCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAJX191OCBhdXRoX3R5cGU7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07Ci0JCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CiAKIAlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkoY29ubi0+aGNvbiwgbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsCiAJCQkJCQkJCWF1dGhfdHlwZSk7CkBAIC0xMDY4LDM5ICsxMDc5LDcgQEAKIAogCWVyciA9IC1FTk9NRU07CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19SQVcpIHsKLQkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgewotCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6Ci0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07Ci0JCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CiAKIAloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwKIAkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CkBAIC0xMTI3LDcgKzExMDYsOCBAQAogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYKIAkJCQlzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgewogCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKQorCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIAkJfSBlbHNlCiAJCQlsMmNhcF9kb19zdGFydChzayk7CiAJfQpAQCAtMTg5Myw4ICsxODczLDggQEAKIAkJaWYgKHBpLT5tb2RlID09IEwyQ0FQX01PREVfU1RSRUFNSU5HKSB7CiAJCQlsMmNhcF9zdHJlYW1pbmdfc2VuZChzayk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZICYmCi0JCQkJCXBpLT5jb25uX3N0YXRlICYmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQlpZiAoKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkgJiYKKwkJCQkJKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpKSB7CiAJCQkJZXJyID0gbGVuOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IGZmOGFhYTcuLjZiODM3NzYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTExNjQsNyArMTE2NCw4IEBACiAJCQkgKiBpbml0aWF0b3IgcmZjb21tX3Byb2Nlc3NfcnggYWxyZWFkeSBjYWxscwogCQkJICogcmZjb21tX3Nlc3Npb25fcHV0KCkgKi8KIAkJCWlmIChzLT5zb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ0xPU0VEKQotCQkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKKwkJCQlpZiAobGlzdF9lbXB0eSgmcy0+ZGxjcykpCisJCQkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mZGIuYyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKaW5kZXggMjg3MjM5My4uODg0ODVjYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCkBAIC0zMjgsMTIgKzMyOCwxMiBAQAogCWZkYiA9IGttZW1fY2FjaGVfYWxsb2MoYnJfZmRiX2NhY2hlLCBHRlBfQVRPTUlDKTsKIAlpZiAoZmRiKSB7CiAJCW1lbWNweShmZGItPmFkZHIuYWRkciwgYWRkciwgRVRIX0FMRU4pOwotCQlobGlzdF9hZGRfaGVhZF9yY3UoJmZkYi0+aGxpc3QsIGhlYWQpOwotCiAJCWZkYi0+ZHN0ID0gc291cmNlOwogCQlmZGItPmlzX2xvY2FsID0gaXNfbG9jYWw7CiAJCWZkYi0+aXNfc3RhdGljID0gaXNfbG9jYWw7CiAJCWZkYi0+YWdlaW5nX3RpbWVyID0gamlmZmllczsKKworCQlobGlzdF9hZGRfaGVhZF9yY3UoJmZkYi0+aGxpc3QsIGhlYWQpOwogCX0KIAlyZXR1cm4gZmRiOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2hubF9uZXQuYyBiL25ldC9jYWlmL2NobmxfbmV0LmMKaW5kZXggZmE5ZGFiMy4uNjAwOGQ2ZCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC0zOTQsOSArMzk0LDcgQEAKIAlwcml2LT5jb25uX3JlcS5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkID0gLTE7CiAJcHJpdi0+Zmxvd2VuYWJsZWQgPSBmYWxzZTsKIAotCUFTU0VSVF9SVE5MKCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+bmV0bWdtdF93cSk7Ci0JbGlzdF9hZGQoJnByaXYtPmxpc3RfZmllbGQsICZjaG5sX25ldF9saXN0KTsKIH0KIAogCkBAIC00NTMsNiArNDUxLDggQEAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQogCQlwcl93YXJuKCJkZXZpY2UgcnRtbCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwllbHNlCisJCWxpc3RfYWRkKCZjYWlmZGV2LT5saXN0X2ZpZWxkLCAmY2hubF9uZXRfbGlzdCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA3YzZhNDZmLi44ZTcyNmNiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzQ5LDcgKzc0OSw4IEBACiAgKglAaGE6IGhhcmR3YXJlIGFkZHJlc3MKICAqCiAgKglTZWFyY2ggZm9yIGFuIGludGVyZmFjZSBieSBNQUMgYWRkcmVzcy4gUmV0dXJucyBOVUxMIGlmIHRoZSBkZXZpY2UKLSAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgUkNVCisgKglpcyBub3QgZm91bmQgb3IgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UuCisgKglUaGUgY2FsbGVyIG11c3QgaG9sZCBSQ1Ugb3IgUlROTC4KICAqCVRoZSByZXR1cm5lZCBkZXZpY2UgaGFzIG5vdCBoYWQgaXRzIHJlZiBjb3VudCBpbmNyZWFzZWQKICAqCWFuZCB0aGUgY2FsbGVyIG11c3QgdGhlcmVmb3JlIGJlIGNhcmVmdWwgYWJvdXQgbG9ja2luZwogICoKQEAgLTI1NjIsNyArMjU2Myw4IEBACiAKIAltYXAgPSByY3VfZGVyZWZlcmVuY2UocnhxdWV1ZS0+cnBzX21hcCk7CiAJaWYgKG1hcCkgewotCQlpZiAobWFwLT5sZW4gPT0gMSkgeworCQlpZiAobWFwLT5sZW4gPT0gMSAmJgorCQkgICAgIXJjdV9kZXJlZmVyZW5jZV9yYXcocnhxdWV1ZS0+cnBzX2Zsb3dfdGFibGUpKSB7CiAJCQl0Y3B1ID0gbWFwLT5jcHVzWzBdOwogCQkJaWYgKGNwdV9vbmxpbmUodGNwdSkpCiAJCQkJY3B1ID0gdGNwdTsKQEAgLTM0MjMsNiArMzQyNSw4IEBACiAJX19za2JfcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOwogCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOIC0gc2tiX2hlYWRyb29tKHNrYikpOwogCXNrYi0+dmxhbl90Y2kgPSAwOworCXNrYi0+ZGV2ID0gbmFwaS0+ZGV2OworCXNrYi0+c2tiX2lpZiA9IDA7CiAKIAluYXBpLT5za2IgPSBza2I7CiB9CkBAIC01NjU2LDE4ICs1NjYwLDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgJmluaXRfbmV0KTsKIAotCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHR4cXM7Ci0JZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0eHFzOwotCWlmIChuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKGRldikpCi0JCWdvdG8gZnJlZV9wY3B1OwotCi0jaWZkZWYgQ09ORklHX1JQUwotCWRldi0+bnVtX3J4X3F1ZXVlcyA9IHJ4cXM7Ci0JZGV2LT5yZWFsX251bV9yeF9xdWV1ZXMgPSByeHFzOwotCWlmIChuZXRpZl9hbGxvY19yeF9xdWV1ZXMoZGV2KSkKLQkJZ290byBmcmVlX3BjcHU7Ci0jZW5kaWYKLQogCWRldi0+Z3NvX21heF9zaXplID0gR1NPX01BWF9TSVpFOwogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXRodG9vbF9udHVwbGVfbGlzdC5saXN0KTsKQEAgLTU2NzcsOSArNTY2OSwyNiBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmxpbmtfd2F0Y2hfbGlzdCk7CiAJZGV2LT5wcml2X2ZsYWdzID0gSUZGX1hNSVRfRFNUX1JFTEVBU0U7CiAJc2V0dXAoZGV2KTsKKworCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHR4cXM7CisJZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0eHFzOworCWlmIChuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKGRldikpCisJCWdvdG8gZnJlZV9hbGw7CisKKyNpZmRlZiBDT05GSUdfUlBTCisJZGV2LT5udW1fcnhfcXVldWVzID0gcnhxczsKKwlkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA9IHJ4cXM7CisJaWYgKG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhkZXYpKQorCQlnb3RvIGZyZWVfYWxsOworI2VuZGlmCisKIAlzdHJjcHkoZGV2LT5uYW1lLCBuYW1lKTsKIAlyZXR1cm4gZGV2OwogCitmcmVlX2FsbDoKKwlmcmVlX25ldGRldihkZXYpOworCXJldHVybiBOVUxMOworCiBmcmVlX3BjcHU6CiAJZnJlZV9wZXJjcHUoZGV2LT5wY3B1X3JlZmNudCk7CiAJa2ZyZWUoZGV2LT5fdHgpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDE3NzQxNzguLmZmMjMwMjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTgxNyw3ICs4MTcsNyBAQAogCWlmIChyZWdzLmxlbiA+IHJlZ2xlbikKIAkJcmVncy5sZW4gPSByZWdsZW47CiAKLQlyZWdidWYgPSB2bWFsbG9jKHJlZ2xlbik7CisJcmVnYnVmID0gdnphbGxvYyhyZWdsZW4pOwogCWlmICghcmVnYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3NTBkYjU3Li4yZDY1YzZiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMTEyMSw4ICsxMTIxLDcgQEAKIAkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkJCWlmIChhZl9vcHMtPnZhbGlkYXRlX2xpbmtfYWYpIHsKLQkJCQllcnIgPSBhZl9vcHMtPnZhbGlkYXRlX2xpbmtfYWYoZGV2LAotCQkJCQkJCXRiW0lGTEFfQUZfU1BFQ10pOworCQkJCWVyciA9IGFmX29wcy0+dmFsaWRhdGVfbGlua19hZihkZXYsIGFmKTsKIAkJCQlpZiAoZXJyIDwgMCkKIAkJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTE2NzIsNiArMTY3MSw5IEBACiAJCQlzbnByaW50ZihpZm5hbWUsIElGTkFNU0laLCAiJXMlJWQiLCBvcHMtPmtpbmQpOwogCiAJCWRlc3RfbmV0ID0gcnRubF9saW5rX2dldF9uZXQobmV0LCB0Yik7CisJCWlmIChJU19FUlIoZGVzdF9uZXQpKQorCQkJcmV0dXJuIFBUUl9FUlIoZGVzdF9uZXQpOworCiAJCWRldiA9IHJ0bmxfY3JlYXRlX2xpbmsobmV0LCBkZXN0X25ldCwgaWZuYW1lLCBvcHMsIHRiKTsKIAogCQlpZiAoSVNfRVJSKGRldikpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGQzMWJiMzYuLmQ4ODNkY2MgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0yMTAsNiArMjEwLDcgQEAKIAlzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7CiAJbWVtc2V0KHNoaW5mbywgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywgZGF0YXJlZikpOwogCWF0b21pY19zZXQoJnNoaW5mby0+ZGF0YXJlZiwgMSk7CisJa21lbWNoZWNrX2Fubm90YXRlX3ZhcmlhYmxlKHNoaW5mby0+ZGVzdHJ1Y3Rvcl9hcmcpOwogCiAJaWYgKGZjbG9uZSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQgPSBza2IgKyAxOwpAQCAtMjc0NCw4ICsyNzQ1LDEyIEBACiAKIG1lcmdlOgogCWlmIChvZmZzZXQgPiBoZWFkbGVuKSB7Ci0JCXNrYmluZm8tPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9IG9mZnNldCAtIGhlYWRsZW47Ci0JCXNrYmluZm8tPmZyYWdzWzBdLnNpemUgLT0gb2Zmc2V0IC0gaGVhZGxlbjsKKwkJdW5zaWduZWQgaW50IGVhdCA9IG9mZnNldCAtIGhlYWRsZW47CisKKwkJc2tiaW5mby0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0gZWF0OworCQlza2JpbmZvLT5mcmFnc1swXS5zaXplIC09IGVhdDsKKwkJc2tiLT5kYXRhX2xlbiAtPSBlYXQ7CisJCXNrYi0+bGVuIC09IGVhdDsKIAkJb2Zmc2V0ID0gaGVhZGxlbjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9kY2IvZGNibmwuYyBiL25ldC9kY2IvZGNibmwuYwppbmRleCBkOTAwYWI5Li42YjAzZjU2IDEwMDY0NAotLS0gYS9uZXQvZGNiL2RjYm5sLmMKKysrIGIvbmV0L2RjYi9kY2JubC5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAl1OCB1cCwgaWR0eXBlOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKCF0YltEQ0JfQVRUUl9BUFBdIHx8ICFuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKQorCWlmICghdGJbRENCX0FUVFJfQVBQXSkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGFwcF90YiwgRENCX0FQUF9BVFRSX01BWCwgdGJbRENCX0FUVFJfQVBQXSwKQEAgLTYwNCw3ICs2MDQsMTYgQEAKIAkJZ290byBvdXQ7CiAKIAlpZCA9IG5sYV9nZXRfdTE2KGFwcF90YltEQ0JfQVBQX0FUVFJfSURdKTsKLQl1cCA9IG5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHAobmV0ZGV2LCBpZHR5cGUsIGlkKTsKKworCWlmIChuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKSB7CisJCXVwID0gbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcChuZXRkZXYsIGlkdHlwZSwgaWQpOworCX0gZWxzZSB7CisJCXN0cnVjdCBkY2JfYXBwIGFwcCA9IHsKKwkJCQkJLnNlbGVjdG9yID0gaWR0eXBlLAorCQkJCQkucHJvdG9jb2wgPSBpZCwKKwkJCQkgICAgIH07CisJCXVwID0gZGNiX2dldGFwcChuZXRkZXYsICZhcHApOworCX0KIAogCS8qIHNlbmQgdGhpcyBiYWNrICovCiAJZGNibmxfc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYS5jIGIvbmV0L2RzYS9kc2EuYwppbmRleCAwYzg3N2E3Li4zZmIxNGI3IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYS5jCisrKyBiL25ldC9kc2EvZHNhLmMKQEAgLTQyOCw3ICs0MjgsNyBAQAogfQogbW9kdWxlX2V4aXQoZHNhX2NsZWFudXBfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+IikKK01PRFVMRV9BVVRIT1IoIkxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgc3dpdGNoIGNoaXBzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRzYSIpOwpkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggMTVkY2MxYS4uMGMyODI2MyAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC0yNjUsMTMgKzI2NSwxMyBAQAogc3RhdGljIGludCBlY29uZXRfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc29ja2FkZHJfZWMgKnNhZGRyPShzdHJ1Y3Qgc29ja2FkZHJfZWMgKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGVjX2FkZHIgYWRkcjsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgcG9ydCwgY2I7CiAjaWYgZGVmaW5lZChDT05GSUdfRUNPTkVUX0FVTlVEUCkgfHwgZGVmaW5lZChDT05GSUdfRUNPTkVUX05BVElWRSkKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBlY19jYiAqZWI7CiAjZW5kaWYKQEAgLTQ4OCwxMCArNDg4LDEwIEBACiAKIGVycm9yX2ZyZWVfYnVmOgogCXZmcmVlKHVzZXJidWYpOworZXJyb3I6CiAjZWxzZQogCWVyciA9IC1FUFJPVE9UWVBFOwogI2VuZGlmCi0JZXJyb3I6CiAJbXV0ZXhfdW5sb2NrKCZlY29uZXRfbXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBmMmI2MTEwLi40NWI4OWQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC04ODAsNiArODgwLDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGluZXRfaW9jdGwpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGluZXRfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBlcnIgPSAtRU5PSU9DVExDTUQ7CisKKwlpZiAoc2stPnNrX3Byb3QtPmNvbXBhdF9pb2N0bCkKKwkJZXJyID0gc2stPnNrX3Byb3QtPmNvbXBhdF9pb2N0bChzaywgY21kLCBhcmcpOworCisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHsKIAkuZmFtaWx5CQkgICA9IFBGX0lORVQsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApAQCAtOTAzLDYgKzkxNiw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woaW5ldF9zdHJlYW1fb3BzKTsKQEAgLTkyOSw2ICs5NDMsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gaW5ldF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGluZXRfZGdyYW1fb3BzKTsKQEAgLTk1OSw2ICs5NzQsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gaW5ldF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggMDRjOGI2OS4uNzkyNzU4OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTEwMTcsMTQgKzEwMTcsMTMgQEAKIAkJSVBWNF9ERVZDT05GX0FMTChuZXQsIFBST1hZX0FSUCkgPSBvbjsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChfX2luX2Rldl9nZXRfcmN1KGRldikpIHsKLQkJSU5fREVWX0NPTkZfU0VUKF9faW5fZGV2X2dldF9yY3UoZGV2KSwgUFJPWFlfQVJQLCBvbik7CisJaWYgKF9faW5fZGV2X2dldF9ydG5sKGRldikpIHsKKwkJSU5fREVWX0NPTkZfU0VUKF9faW5fZGV2X2dldF9ydG5sKGRldiksIFBST1hZX0FSUCwgb24pOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBpbnQgYXJwX3JlcV9zZXRfcHVibGljKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqciwKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEyMzMsMTAgKzEyMzIsMTAgQEAKIAlpZiAoIShyLmFycF9mbGFncyAmIEFURl9ORVRNQVNLKSkKIAkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmci5hcnBfbmV0bWFzayktPnNpbl9hZGRyLnNfYWRkciA9CiAJCQkJCQkJICAgaHRvbmwoMHhGRkZGRkZGRlVMKTsKLQlyY3VfcmVhZF9sb2NrKCk7CisJcnRubF9sb2NrKCk7CiAJaWYgKHIuYXJwX2RldlswXSkgewogCQllcnIgPSAtRU5PREVWOwotCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWVfcmN1KG5ldCwgci5hcnBfZGV2KTsKKwkJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCByLmFycF9kZXYpOwogCQlpZiAoZGV2ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIApAQCAtMTI2Myw3ICsxMjYyLDcgQEAKIAkJYnJlYWs7CiAJfQogb3V0OgotCXJjdV9yZWFkX3VubG9jaygpOworCXJ0bmxfdW5sb2NrKCk7CiAJaWYgKGNtZCA9PSBTSU9DR0FSUCAmJiAhZXJyICYmIGNvcHlfdG9fdXNlcihhcmcsICZyLCBzaXplb2YocikpKQogCQllcnIgPSAtRUZBVUxUOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwppbmRleCBkOWJjODU3Li5hOTZlNjU2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jCisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkciwgaW50IGNyZWF0ZSkKIHsKIAlzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqc3RhY2tbUEVFUl9NQVhERVBUSF0sICoqKnN0YWNrcHRyOwotCXN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSA9IGZhbWlseV90b19iYXNlKEFGX0lORVQpOworCXN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSA9IGZhbWlseV90b19iYXNlKGRhZGRyLT5mYW1pbHkpOwogCXN0cnVjdCBpbmV0X3BlZXIgKnA7CiAKIAkvKiBMb29rIHVwIGZvciB0aGUgYWRkcmVzcyBxdWlja2x5LCBsb2NrbGVzcy4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAzZjNhOWFmLi44YjY1YTEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPG5ldC9pcGlwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KQEAgLTE0MzQsNiArMTQzNSw4MSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfc2lvY19zZ19yZXEgeworCXN0cnVjdCBpbl9hZGRyIHNyYzsKKwlzdHJ1Y3QgaW5fYWRkciBncnA7CisJY29tcGF0X3Vsb25nX3QgcGt0Y250OworCWNvbXBhdF91bG9uZ190IGJ5dGVjbnQ7CisJY29tcGF0X3Vsb25nX3Qgd3JvbmdfaWY7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Npb2NfdmlmX3JlcSB7CisJdmlmaV90CXZpZmk7CQkvKiBXaGljaCBpZmFjZSAqLworCWNvbXBhdF91bG9uZ190IGljb3VudDsKKwljb21wYXRfdWxvbmdfdCBvY291bnQ7CisJY29tcGF0X3Vsb25nX3QgaWJ5dGVzOworCWNvbXBhdF91bG9uZ190IG9ieXRlczsKK307CisKK2ludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcSBzcjsKKwlzdHJ1Y3QgY29tcGF0X3Npb2NfdmlmX3JlcSB2cjsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCXN0cnVjdCBtcl90YWJsZSAqbXJ0OworCisJbXJ0ID0gaXBtcl9nZXRfdGFibGUobmV0LCByYXdfc2soc2spLT5pcG1yX3RhYmxlID8gOiBSVF9UQUJMRV9ERUZBVUxUKTsKKwlpZiAobXJ0ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRWSUZDTlQ6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdnIsIGFyZywgc2l6ZW9mKHZyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZyLnZpZmkgPj0gbXJ0LT5tYXh2aWYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJCXZpZiA9ICZtcnQtPnZpZl90YWJsZVt2ci52aWZpXTsKKwkJaWYgKFZJRl9FWElTVFMobXJ0LCB2ci52aWZpKSkgeworCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CisJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CisJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOworCQkJdnIub2J5dGVzID0gdmlmLT5ieXRlc19vdXQ7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnZyLCBzaXplb2YodnIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwljYXNlIFNJT0NHRVRTR0NOVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJYyA9IGlwbXJfY2FjaGVfZmluZChtcnQsIHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOworCQlpZiAoYykgeworCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CisJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKKwkJCXNyLndyb25nX2lmID0gYy0+bWZjX3VuLnJlcy53cm9uZ19pZjsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnNyLCBzaXplb2Yoc3IpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKKwogCiBzdGF0aWMgaW50IGlwbXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwppbmRleCBiOGRkY2M0Li5hNWU1MmE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwpAQCAtNjAsMTIgKzYwLDEyIEBACiAKIAlpZiAobWFuZ2xlLT5mbGFncyAmIH5BUlBUX01BTkdMRV9NQVNLIHx8CiAJICAgICEobWFuZ2xlLT5mbGFncyAmIEFSUFRfTUFOR0xFX01BU0spKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1hbmdsZS0+dGFyZ2V0ICE9IE5GX0RST1AgJiYgbWFuZ2xlLT50YXJnZXQgIT0gTkZfQUNDRVBUICYmCiAJICAgbWFuZ2xlLT50YXJnZXQgIT0gWFRfQ09OVElOVUUpCi0JCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGFycHRfbWFuZ2xlX3JlZyBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCBhM2Q1YWI3Li42MzkwYmEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogc3RhdGljIHN0cnVjdCByYXdfaGFzaGluZm8gcmF3X3Y0X2hhc2hpbmZvID0gewogCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHJhd192NF9oYXNoaW5mby5sb2NrKSwKQEAgLTgzOCw2ICs4MzksMjMgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ09VVFE6CisJY2FzZSBTSU9DSU5ROgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWRlZmF1bHQ6CisjaWZkZWYgQ09ORklHX0lQX01ST1VURQorCQlyZXR1cm4gaXBtcl9jb21wYXRfaW9jdGwoc2ssIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKyNlbHNlCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisjZW5kaWYKKwl9Cit9CisjZW5kaWYKKwogc3RydWN0IHByb3RvIHJhd19wcm90ID0gewogCS5uYW1lCQkgICA9ICJSQVciLAogCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKQEAgLTg2MCw2ICs4NzgsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfcmF3X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd19nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBjb21wYXRfcmF3X2lvY3RsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAzNTFkYzRlLi43ODhhM2U3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTI3MDcsNiArMjcwNywxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KQogewogfQpAQCAtMjcxNiw2ICsyNzIxLDcgQEAKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcHY0X2JsYWNraG9sZV9kc3RfY2hlY2ssCisJLmRlZmF1bHRfbXR1CQk9CWlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAogCS51cGRhdGVfcG10dQkJPQlpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMjU0OWIyOS4uZWI3ZjgyZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTQzOTksNyArNDM5OSw3IEBACiAJCQlpZiAoIXNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgdHAtPnVjb3B5LmlvdiwgY2h1bmspKSB7CiAJCQkJdHAtPnVjb3B5LmxlbiAtPSBjaHVuazsKIAkJCQl0cC0+Y29waWVkX3NlcSArPSBjaHVuazsKLQkJCQllYXRlbiA9IChjaHVuayA9PSBza2ItPmxlbiAmJiAhdGgtPmZpbik7CisJCQkJZWF0ZW4gPSAoY2h1bmsgPT0gc2tiLT5sZW4pOwogCQkJCXRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTsKIAkJCX0KIAkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDg1NmY2ODQuLjAyZjU4M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTk5NCw3ICsxOTk0LDYgQEAKIAkJCQl9CiAJCQkJcmVxID0gcmVxLT5kbF9uZXh0OwogCQkJfQotCQkJc3QtPm9mZnNldCA9IDA7CiAJCQlpZiAoKytzdC0+c2J1Y2tldCA+PSBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5saXN0ZW5fb3B0LT5ucl90YWJsZV9lbnRyaWVzKQogCQkJCWJyZWFrOwogZ2V0X3JlcToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDI0YTFjZjEuLmZkNjc4MmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjY2MSwxNCArMjY2MSwxMiBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKLQlMSVNUX0hFQUQoa2VlcF9saXN0KTsKLQlpbnQgc3RhdGU7CisJaW50IHN0YXRlLCBpOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCS8qIEZsdXNoIHJvdXRlcyBpZiBkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCBvciBpdCBpcyBub3QgbG9vcGJhY2sgKi8KLQlpZiAoaG93IHx8ICEoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpCi0JCXJ0Nl9pZmRvd24obmV0LCBkZXYpOworCXJ0Nl9pZmRvd24obmV0LCBkZXYpOworCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwogCiAJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoaWRldiA9PSBOVUxMKQpAQCAtMjY4OSw2ICsyNjg3LDIzIEBACiAKIAl9CiAKKwkvKiBTdGVwIDI6IGNsZWFyIGhhc2ggdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSU42X0FERFJfSFNJWkU7IGkrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaCA9ICZpbmV0Nl9hZGRyX2xzdFtpXTsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwkJc3Bpbl9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOworCXJlc3RhcnQ6CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZmEsIG4sIGgsIGFkZHJfbHN0KSB7CisJCQlpZiAoaWZhLT5pZGV2ID09IGlkZXYpIHsKKwkJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmlmYS0+YWRkcl9sc3QpOworCQkJCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKKwl9CisKIAl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCS8qIFN0ZXAgMjogY2xlYXIgZmxhZ3MgZm9yIHN0YXRlbGVzcyBhZGRyY29uZiAqLwpAQCAtMjcyMiw1MiArMjczNywyMyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaW5ldDZfaWZhZGRyLCBpZl9saXN0KTsKIAkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmYSk7CiAKLQkJLyogSWYganVzdCBkb2luZyBsaW5rIGRvd24sIGFuZCBhZGRyZXNzIGlzIHBlcm1hbmVudAotCQkgICBhbmQgbm90IGxpbmstbG9jYWwsIHRoZW4gcmV0YWluIGl0LiAqLwotCQlpZiAoIWhvdyAmJgotCQkgICAgKGlmYS0+ZmxhZ3MmSUZBX0ZfUEVSTUFORU5UKSAmJgotCQkgICAgIShpcHY2X2FkZHJfdHlwZSgmaWZhLT5hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmaWZhLT5pZl9saXN0LCAma2VlcF9saXN0KTsKKwkJbGlzdF9kZWwoJmlmYS0+aWZfbGlzdCk7CiAKLQkJCS8qIElmIG5vdCBkb2luZyBEQUQgb24gdGhpcyBhZGRyZXNzLCBqdXN0IGtlZXAgaXQuICovCi0JCQlpZiAoKGRldi0+ZmxhZ3MmKElGRl9OT0FSUHxJRkZfTE9PUEJBQ0spKSB8fAotCQkJICAgIGlkZXYtPmNuZi5hY2NlcHRfZGFkIDw9IDAgfHwKLQkJCSAgICAoaWZhLT5mbGFncyAmIElGQV9GX05PREFEKSkKLQkJCQljb250aW51ZTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAotCQkJLyogSWYgaXQgd2FzIHRlbnRhdGl2ZSBhbHJlYWR5LCBubyBuZWVkIHRvIG5vdGlmeSAqLwotCQkJaWYgKGlmYS0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpCi0JCQkJY29udGludWU7CisJCXNwaW5fbG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKKwkJc3RhdGUgPSBpZmEtPnN0YXRlOworCQlpZmEtPnN0YXRlID0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwogCi0JCQkvKiBGbGFnIGl0IGZvciBsYXRlciByZXN0b3JhdGlvbiB3aGVuIGxpbmsgY29tZXMgdXAgKi8KLQkJCWlmYS0+ZmxhZ3MgfD0gSUZBX0ZfVEVOVEFUSVZFOwotCQkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9EQUQ7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0X2RlbCgmaWZhLT5pZl9saXN0KTsKLQotCQkJLyogY2xlYXIgaGFzaCB0YWJsZSAqLwotCQkJc3Bpbl9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwotCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZpZmEtPmFkZHJfbHN0KTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwotCi0JCQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQkJc3Bpbl9sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwotCQkJc3RhdGUgPSBpZmEtPnN0YXRlOwotCQkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEOwotCQkJc3Bpbl91bmxvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7Ci0KLQkJCWlmIChzdGF0ZSAhPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCkgewotCQkJCV9faXB2Nl9pZmFfbm90aWZ5KFJUTV9ERUxBRERSLCBpZmEpOwotCQkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sCi0JCQkJCQkJICAgTkVUREVWX0RPV04sIGlmYSk7Ci0JCQl9Ci0KLQkJCWluNl9pZmFfcHV0KGlmYSk7Ci0JCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwkJaWYgKHN0YXRlICE9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEKSB7CisJCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKKwkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sIE5FVERFVl9ET1dOLCBpZmEpOwogCQl9Ci0JfQorCQlpbjZfaWZhX3B1dChpZmEpOwogCi0JbGlzdF9zcGxpY2UoJmtlZXBfbGlzdCwgJmlkZXYtPmFkZHJfbGlzdCk7CisJCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCX0KIAogCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKQEAgLTQxNTYsOCArNDE0Miw3IEBACiAJCWFkZHJjb25mX2xlYXZlX3NvbGljdChpZnAtPmlkZXYsICZpZnAtPmFkZHIpOwogCQlkc3RfaG9sZCgmaWZwLT5ydC0+ZHN0KTsKIAotCQlpZiAoaWZwLT5zdGF0ZSA9PSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCAmJgotCQkgICAgaXA2X2RlbF9ydChpZnAtPnJ0KSkKKwkJaWYgKGlwNl9kZWxfcnQoaWZwLT5ydCkpCiAJCQlkc3RfZnJlZSgmaWZwLT5ydC0+ZHN0KTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggOWZhYjI3NC4uMGUxZDUzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC0xODA0LDYgKzE4MDUsODAgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7CisJc3RydWN0IHNvY2thZGRyX2luNiBzcmM7CisJc3RydWN0IHNvY2thZGRyX2luNiBncnA7CisJY29tcGF0X3Vsb25nX3QgcGt0Y250OworCWNvbXBhdF91bG9uZ190IGJ5dGVjbnQ7CisJY29tcGF0X3Vsb25nX3Qgd3JvbmdfaWY7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Npb2NfbWlmX3JlcTYgeworCW1pZmlfdAltaWZpOworCWNvbXBhdF91bG9uZ190IGljb3VudDsKKwljb21wYXRfdWxvbmdfdCBvY291bnQ7CisJY29tcGF0X3Vsb25nX3QgaWJ5dGVzOworCWNvbXBhdF91bG9uZ190IG9ieXRlczsKK307CisKK2ludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBjb21wYXRfc2lvY19zZ19yZXE2IHNyOworCXN0cnVjdCBjb21wYXRfc2lvY19taWZfcmVxNiB2cjsKKwlzdHJ1Y3QgbWlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmM2X2NhY2hlICpjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlzdHJ1Y3QgbXI2X3RhYmxlICptcnQ7CisKKwltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0+aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKKwlpZiAobXJ0ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRNSUZDTlRfSU42OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZyLCBhcmcsIHNpemVvZih2cikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2ci5taWZpID49IG1ydC0+bWF4dmlmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQl2aWYgPSAmbXJ0LT52aWY2X3RhYmxlW3ZyLm1pZmldOworCQlpZiAoTUlGX0VYSVNUUyhtcnQsIHZyLm1pZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UX0lONjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQljID0gaXA2bXJfY2FjaGVfZmluZChtcnQsICZzci5zcmMuc2luNl9hZGRyLCAmc3IuZ3JwLnNpbjZfYWRkcik7CisJCWlmIChjKSB7CisJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKKwkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOworCQkJc3Iud3JvbmdfaWYgPSBjLT5tZmNfdW4ucmVzLndyb25nX2lmOworCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZzciwgc2l6ZW9mKHNyKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgaXA2bXJfZm9yd2FyZDJfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IDg2YzM5NTIuLmM1YjA5MTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KIApAQCAtMTE1Nyw2ICsxMTU4LDIzIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGludCBjb21wYXRfcmF3djZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ09VVFE6CisJY2FzZSBTSU9DSU5ROgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWRlZmF1bHQ6CisjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFCisJCXJldHVybiBpcDZtcl9jb21wYXRfaW9jdGwoc2ssIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKyNlbHNlCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisjZW5kaWYKKwl9Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgcmF3djZfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiB7CiAJaWYgKGluZXRfc2soc2spLT5pbmV0X251bSA9PSBJUFBST1RPX1JBVykKQEAgLTEyMTUsNiArMTIzMyw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9yYXd2Nl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9yYXd2Nl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBjb21wYXRfcmF3djZfaW9jdGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDM3M2JkMDQuLjFjMjlmOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtNzIsOCArNzIsNiBAQAogI2RlZmluZSBSVDZfVFJBQ0UoeC4uLikgZG8geyA7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBDTE9ORV9PRkZMSU5LX1JPVVRFIDAKLQogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqIGlwNl9ydF9jb3B5KHN0cnVjdCBydDZfaW5mbyAqb3J0KTsKIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5CSppcDZfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7CiBzdGF0aWMgdW5zaWduZWQgaW50CSBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKQEAgLTExNSw2ICsxMTMsMTEgQEAKIAkubG9jYWxfb3V0CQk9CV9faXA2X2xvY2FsX291dCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2JsYWNraG9sZV9kZWZhdWx0X210dShjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KQogewogfQpAQCAtMTI0LDYgKzEyNyw3IEBACiAJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQVjYpLAogCS5kZXN0cm95CQk9CWlwNl9kc3RfZGVzdHJveSwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCisJLmRlZmF1bHRfbXR1CQk9CWlwNl9ibGFja2hvbGVfZGVmYXVsdF9tdHUsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCiB9OwogCkBAIC0xOTYsNyArMjAwLDYgQEAKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJfQogCWlmIChwZWVyKSB7Ci0JCUJVR19PTighKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSk7CiAJCXJ0LT5ydDZpX3BlZXIgPSBOVUxMOwogCQlpbmV0X3B1dHBlZXIocGVlcik7CiAJfQpAQCAtMjA2LDkgKzIwOSw2IEBACiB7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKIAotCWlmIChXQVJOX09OKCEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpKSkKLQkJcmV0dXJuOwotCiAJcGVlciA9IGluZXRfZ2V0cGVlcl92NigmcnQtPnJ0NmlfZHN0LmFkZHIsIGNyZWF0ZSk7CiAJaWYgKHBlZXIgJiYgY21weGNoZygmcnQtPnJ0NmlfcGVlciwgTlVMTCwgcGVlcikgIT0gTlVMTCkKIAkJaW5ldF9wdXRwZWVyKHBlZXIpOwpAQCAtNzM4LDEzICs3MzgsOCBAQAogCiAJaWYgKCFydC0+cnQ2aV9uZXh0aG9wICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkKIAkJbnJ0ID0gcnQ2X2FsbG9jX2NvdyhydCwgJmZsLT5mbDZfZHN0LCAmZmwtPmZsNl9zcmMpOwotCWVsc2UgewotI2lmIENMT05FX09GRkxJTktfUk9VVEUKKwllbHNlCiAJCW5ydCA9IHJ0Nl9hbGxvY19jbG9uZShydCwgJmZsLT5mbDZfZHN0KTsKLSNlbHNlCi0JCWdvdG8gb3V0MjsKLSNlbmRpZgotCX0KIAogCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAlydCA9IG5ydCA/IDogbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwppbmRleCBmYTFkOGY0Li43Y2I2NWVmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYworKysgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2ZyYWcuaD4KIAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZW1wdHlbMV07CisKIHN0YXRpYyBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gInJvdXRlIiwKQEAgLTM1LDYgKzM3LDEyIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiAJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJuZWlnaCIsCisJCS5tYXhsZW4JCT0gMCwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IGVtcHR5LAorCX0sCiAJeyB9CiB9OwogCkBAIC0xNTIsNyArMTYwLDYgQEAKIAogaW50IGlwdjZfc3RhdGljX3N5c2N0bF9yZWdpc3Rlcih2b2lkKQogewotCXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGVtcHR5WzFdOwogCWlwNl9iYXNlID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5ldF9pcHY2X2N0bF9wYXRoLCBlbXB0eSk7CiAJaWYgKGlwNl9iYXNlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA3ZTc0MDIzLi5kYTg3NDI4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtOTgsNiArOTgsMTAgQEAKIAlpZiAoIXhkc3QtPnUucnQ2LnJ0NmlfaWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwl4ZHN0LT51LnJ0Ni5ydDZpX3BlZXIgPSBydC0+cnQ2aV9wZWVyOworCWlmIChydC0+cnQ2aV9wZWVyKQorCQlhdG9taWNfaW5jKCZydC0+cnQ2aV9wZWVyLT5yZWZjbnQpOworCiAJLyogU2hlaXQuLi4gSSByZW1lbWJlciBJIGRpZCB0aGlzIHJpZ2h0LiBBcHBhcmVudGx5LAogCSAqIGl0IHdhcyBtYWdpY2FsbHkgbG9zdCwgc28gdGhpcyBjb2RlIG5lZWRzIGF1ZGl0ICovCiAJeGRzdC0+dS5ydDYucnQ2aV9mbGFncyA9IHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9BTllDQVNUIHwKQEAgLTIxNiw2ICsyMjAsOCBAQAogCiAJaWYgKGxpa2VseSh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpKQogCQlpbjZfZGV2X3B1dCh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpOworCWlmIChsaWtlbHkoeGRzdC0+dS5ydDYucnQ2aV9wZWVyKSkKKwkJaW5ldF9wdXRwZWVyKHhkc3QtPnUucnQ2LnJ0NmlfcGVlcik7CiAJeGZybV9kc3RfZGVzdHJveSh4ZHN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDRiYzhhOTIuLjljZDczYjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTE4MjIsNiArMTgyMiw3IEBACiAJCSpjb29raWUgXj0gMjsKIAkJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1RYX09GRkNIQU47CiAJCWxvY2FsLT5od19yb2Nfc2tiID0gc2tiOworCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gc2tiOwogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwogCiAJCXJldHVybiAwOwpAQCAtMTg3NSw2ICsxODc2LDcgQEAKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlrZnJlZV9za2IobG9jYWwtPmh3X3JvY19za2IpOwogCQkJbG9jYWwtPmh3X3JvY19za2IgPSBOVUxMOworCQkJbG9jYWwtPmh3X3JvY19za2JfZm9yX3N0YXR1cyA9IE5VTEw7CiAJCX0KIAogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBjNDdkN2MwLi41MzNmZDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtOTUzLDcgKzk1Myw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpod19yb2NfZGV2OwotCXN0cnVjdCBza19idWZmICpod19yb2Nfc2tiOworCXN0cnVjdCBza19idWZmICpod19yb2Nfc2tiLCAqaHdfcm9jX3NrYl9mb3Jfc3RhdHVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBod19yb2Nfc3RhcnQsIGh3X3JvY19kb25lOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgaHdfcm9jX2NoYW5uZWxfdHlwZTsKIAl1bnNpZ25lZCBpbnQgaHdfcm9jX2R1cmF0aW9uOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IDM4YTc5NzIuLjA3MWFjOTUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYworKysgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKQEAgLTMyMyw2ICszMjMsNyBAQAogCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFgpIHsKIAkJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKwkJdTY0IGNvb2tpZSA9ICh1bnNpZ25lZCBsb25nKXNrYjsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHdrLCAmbG9jYWwtPndvcmtfbGlzdCwgbGlzdCkgewpAQCAtMzM0LDggKzMzNSwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWlmIChsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID09IHNrYikgeworCQkJY29va2llID0gbG9jYWwtPmh3X3JvY19jb29raWUgXiAyOworCQkJbG9jYWwtPmh3X3JvY19za2JfZm9yX3N0YXR1cyA9IE5VTEw7CisJCX0KIAkJY2ZnODAyMTFfbWdtdF90eF9zdGF0dXMoCi0JCQlza2ItPmRldiwgKHVuc2lnbmVkIGxvbmcpIHNrYiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCXNrYi0+ZGV2LCBjb29raWUsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQkhIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSyksIEdGUF9BVE9NSUMpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA1OTUwZTNhLi5iMGJlYWE1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTU0Nyw3ICsxNTQ3LDcgQEAKIAkJc2tiX29ycGhhbihza2IpOwogCX0KIAotCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKQorCWlmIChza2JfY2xvbmVkKHNrYikpCiAJCUk4MDJfREVCVUdfSU5DKGxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWRfY2xvbmVkKTsKIAllbHNlIGlmIChoZWFkX25lZWQgfHwgdGFpbF9uZWVkKQogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfZXhwYW5kX3NrYl9oZWFkKTsKQEAgLTIyMzAsNiArMjIzMCw5IEBACiAKIAlzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOwogCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCWdvdG8gb3V0OworCiAJaWYgKHRpbV9vZmZzZXQpCiAJCSp0aW1fb2Zmc2V0ID0gMDsKIAlpZiAodGltX2xlbmd0aCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBlNjE1MTE5Li44NGY0ZmNjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC05NDIsOCArOTQyLDE1IEBACiAJaWYgKHNldF9yZXBseSAmJiAhdGVzdF9hbmRfc2V0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjdC0+c3RhdHVzKSkKIAkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUkVQTFksIGN0KTsKIG91dDoKLQlpZiAodG1wbCkKLQkJbmZfY3RfcHV0KHRtcGwpOworCWlmICh0bXBsKSB7CisJCS8qIFNwZWNpYWwgY2FzZTogd2UgaGF2ZSB0byByZXBlYXQgdGhpcyBob29rLCBhc3NpZ24gdGhlCisJCSAqIHRlbXBsYXRlIGFnYWluIHRvIHRoaXMgcGFja2V0LiBXZSBhc3N1bWUgdGhhdCB0aGlzIHBhY2tldAorCQkgKiBoYXMgbm8gY29ubnRyYWNrIGFzc2lnbmVkLiBUaGlzIGlzIHVzZWQgYnkgbmZfY3RfdGNwLiAqLworCQlpZiAocmV0ID09IE5GX1JFUEVBVCkKKwkJCXNrYi0+bmZjdCA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrICopdG1wbDsKKwkJZWxzZQorCQkJbmZfY3RfcHV0KHRtcGwpOworCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCmluZGV4IDU3MDJkZTMuLjYzYTFiOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCkBAIC02Myw2ICs2Myw5IEBACiAJCSAqIHRoaXMgZG9lcyBub3QgaGFybSBhbmQgaXQgaGFwcGVucyB2ZXJ5IHJhcmVseS4gKi8KIAkJdW5zaWduZWQgbG9uZyBtaXNzZWQgPSBlLT5taXNzZWQ7CiAKKwkJaWYgKCEoKGV2ZW50cyB8IG1pc3NlZCkgJiBlLT5jdG1hc2spKQorCQkJZ290byBvdXRfdW5sb2NrOworCiAJCXJldCA9IG5vdGlmeS0+ZmNuKGV2ZW50cyB8IG1pc3NlZCwgJml0ZW0pOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCB8fCBtaXNzZWQpKSB7CiAJCQlzcGluX2xvY2tfYmgoJmN0LT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5MzI5N2FhLi5lZWFkOWRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC02NjcsNiArNjY3LDcgQEAKIAkJCWlmIChjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCQljYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCQlJUENUTkxfTVNHX0NUX05FVywgY3QpIDwgMCkgeworCQkJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCA4OGY3YzM1Li43M2MzM2E0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtNTMsMTUgKzUzLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pcHJhbmdlX2lwdjZfc3ViKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQoraXByYW5nZV9pcHY2X2x0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQogewogCXVuc2lnbmVkIGludCBpOwotCWludCByOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQlyID0gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSAtIG50b2hsKGItPnM2X2FkZHIzMltpXSk7Ci0JCWlmIChyICE9IDApCi0JCQlyZXR1cm4gcjsKKwkJaWYgKGEtPnM2X2FkZHIzMltpXSAhPSBiLT5zNl9hZGRyMzJbaV0pCisJCQlyZXR1cm4gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSA8IG50b2hsKGItPnM2X2FkZHIzMltpXSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NSwxNSArNzMsMTUgQEAKIAlib29sIG07CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewotCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNikgPCAwOwotCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWF4LmluNikgPiAwOworCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KTsKKwkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmluZm8tPnNyY19tYXguaW42LCAmaXBoLT5zYWRkcik7CiAJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKLQkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKKwkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWluLmluNik7CisJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZpbmZvLT5kc3RfbWF4LmluNiwgJmlwaC0+ZGFkZHIpOwogCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2NicS5jIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwppbmRleCBjODBkMWMyLi41ZjYzZWM1IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2NicS5jCisrKyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKQEAgLTM5MCw3ICszOTAsNiBAQAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cSk7CiAJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7CiAJCXNjaC0+cS5xbGVuKys7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQljYnFfbWFya190b3BsZXZlbChxLCBjbCk7CiAJCWlmICghY2wtPm5leHRfYWxpdmUpCiAJCQljYnFfYWN0aXZhdGVfY2xhc3MoY2wpOwpAQCAtNjQ5LDcgKzY0OCw2IEBACiAJCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cSk7CiAJCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQkJc2NoLT5xLnFsZW4rKzsKLQkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJaWYgKCFjbC0+bmV4dF9hbGl2ZSkKIAkJCQljYnFfYWN0aXZhdGVfY2xhc3MoY2wpOwogCQkJcmV0dXJuIDA7CkBAIC05NzEsNiArOTY5LDcgQEAKIAogCQlza2IgPSBjYnFfZGVxdWV1ZV8xKHNjaCk7CiAJCWlmIChza2IpIHsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKIAkJCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwppbmRleCBkZTU1ZTY0Li42YjdmZTRhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKQEAgLTM3Niw3ICszNzYsNiBAQAogCX0KIAogCWJzdGF0c191cGRhdGUoJmNsLT5ic3RhdHMsIHNrYik7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAKIAlzY2gtPnEucWxlbisrOwogCXJldHVybiBlcnI7CkBAIC00MDMsNiArNDAyLDcgQEAKIAkJCXNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLT5xZGlzYyk7CiAJCQlpZiAoY2wtPnFkaXNjLT5xLnFsZW4gPT0gMCkKIAkJCQlsaXN0X2RlbCgmY2wtPmFsaXN0KTsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCmluZGV4IDYwZjRiZGQuLjBmN2JmM2YgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwpAQCAtMjYwLDcgKzI2MCw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4rKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMjgzLDYgKzI4Miw3IEBACiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAorCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuLS07CiAKIAlpbmRleCA9IHNrYi0+dGNfaW5kZXggJiAocC0+aW5kaWNlcyAtIDEpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9maWZvLmMgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwppbmRleCBhYTRkNjMzLi5kNDY4YjQ3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZpZm8uYworKysgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwpAQCAtNDYsMTcgKzQ2LDE0IEBACiAKIHN0YXRpYyBpbnQgcGZpZm9fdGFpbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyogc2NoKQogewotCXN0cnVjdCBza19idWZmICpza2JfaGVhZDsKIAlzdHJ1Y3QgZmlmb19zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCiAJaWYgKGxpa2VseShza2JfcXVldWVfbGVuKCZzY2gtPnEpIDwgcS0+bGltaXQpKQogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAogCS8qIHF1ZXVlIGZ1bGwsIHJlbW92ZSBvbmUgc2tiIHRvIGZ1bGZpbGwgdGhlIGxpbWl0ICovCi0Jc2tiX2hlYWQgPSBxZGlzY19kZXF1ZXVlX2hlYWQoc2NoKTsKKwlfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzY2gsICZzY2gtPnEpOwogCXNjaC0+cXN0YXRzLmRyb3BzKys7Ci0Ja2ZyZWVfc2tiKHNrYl9oZWFkKTsKLQogCXFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CiAKIAlyZXR1cm4gTkVUX1hNSVRfQ047CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDJlNDU3OTEuLjE0YTc5OWQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0xNjAwLDcgKzE2MDAsNiBAQAogCQlzZXRfYWN0aXZlKGNsLCBxZGlzY19wa3RfbGVuKHNrYikpOwogCiAJYnN0YXRzX3VwZGF0ZSgmY2wtPmJzdGF0cywgc2tiKTsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbisrOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CkBAIC0xNjY2LDYgKzE2NjUsNyBAQAogCX0KIAogCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCiAJcmV0dXJuIHNrYjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDk4NGMxYjAuLmZjMTJmZTYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtNTc0LDcgKzU3NCw2IEBACiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtODQyLDcgKzg0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaHRiX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCWludCBsZXZlbDsKIAlwc2NoZWRfdGltZV90IG5leHRfZXZlbnQ7CkBAIC04NTEsNiArODUwLDggQEAKIAkvKiB0cnkgdG8gZGVxdWV1ZSBkaXJlY3QgcGFja2V0cyBhcyBoaWdoIHByaW8gKCEpIHRvIG1pbmltaXplIGNwdSB3b3JrICovCiAJc2tiID0gX19za2JfZGVxdWV1ZSgmcS0+ZGlyZWN0X3F1ZXVlKTsKIAlpZiAoc2tiICE9IE5VTEwpIHsKK29rOgorCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwogCQlzY2gtPnEucWxlbi0tOwogCQlyZXR1cm4gc2tiOwpAQCAtODg0LDExICs4ODUsOCBAQAogCQkJaW50IHByaW8gPSBmZnoobSk7CiAJCQltIHw9IDEgPDwgcHJpbzsKIAkJCXNrYiA9IGh0Yl9kZXF1ZXVlX3RyZWUocSwgcHJpbywgbGV2ZWwpOwotCQkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKLQkJCQlzY2gtPnEucWxlbi0tOwotCQkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKLQkJCQlnb3RvIGZpbjsKLQkJCX0KKwkJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQorCQkJCWdvdG8gb2s7CiAJCX0KIAl9CiAJc2NoLT5xc3RhdHMub3ZlcmxpbWl0cysrOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKaW5kZXggMjFmMTNkYS4uNDM2YTJlNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYworKysgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCkBAIC04Myw3ICs4Myw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcWRpc2MpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpAQCAtMTEyLDYgKzExMSw3IEBACiAJCQlxZGlzYyA9IHEtPnF1ZXVlc1txLT5jdXJiYW5kXTsKIAkJCXNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKIAkJCWlmIChza2IpIHsKKwkJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCQlzY2gtPnEucWxlbi0tOwogCQkJCXJldHVybiBza2I7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggMWM0YmNlOC4uNmEzMDA2YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtMjQwLDcgKzI0MCw2IEBACiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewogCQlzY2gtPnEucWxlbisrOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAl9IGVsc2UgaWYgKG5ldF94bWl0X2Ryb3BfY291bnQocmV0KSkgewogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCX0KQEAgLTI4OSw2ICsyODgsNyBAQAogCQkJCXNrYi0+dHN0YW1wLnR2NjQgPSAwOwogI2VuZGlmCiAJCQlwcl9kZWJ1ZygibmV0ZW1fZGVxdWV1ZTogcmV0dXJuIHNrYj0lcFxuIiwgc2tiKTsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KQEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlfX3NrYl9xdWV1ZV9hZnRlcihsaXN0LCBza2IsIG5za2IpOwogCiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihuc2tiKTsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIG5za2IpOwogCiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggOTY2MTU4ZC4uZmJkNzEwZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBxZGlzYyk7CiAJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CkBAIC0xMTYsNiArMTE1LDcgQEAKIAkJc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1twcmlvXTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKIAkJaWYgKHNrYikgeworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJcmV0dXJuIHNrYjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9yZWQuYyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKaW5kZXggYTYwMDljNS4uOWY5OGRiZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9yZWQuYworKysgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCkBAIC05NCw3ICs5NCw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2hpbGQpOwogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCX0gZWxzZSBpZiAobmV0X3htaXRfZHJvcF9jb3VudChyZXQpKSB7CiAJCXEtPnN0YXRzLnBkcm9wKys7CkBAIC0xMTQsMTEgKzExMywxMyBAQAogCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBxLT5xZGlzYzsKIAogCXNrYiA9IGNoaWxkLT5kZXF1ZXVlKGNoaWxkKTsKLQlpZiAoc2tiKQorCWlmIChza2IpIHsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuLS07Ci0JZWxzZSBpZiAoIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKLQkJcmVkX3N0YXJ0X29mX2lkbGVfcGVyaW9kKCZxLT5wYXJtcyk7Ci0KKwl9IGVsc2UgeworCQlpZiAoIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKKwkJCXJlZF9zdGFydF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOworCX0KIAlyZXR1cm4gc2tiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCAyMzllYzUzLi5lZGVhOGNlIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTQwMiwxMCArNDAyLDggQEAKIAkJcS0+dGFpbCA9IHNsb3Q7CiAJCXNsb3QtPmFsbG90ID0gcS0+c2NhbGVkX3F1YW50dW07CiAJfQotCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOworCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KQogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKLQl9CiAKIAlzZnFfZHJvcChzY2gpOwogCXJldHVybiBORVRfWE1JVF9DTjsKQEAgLTQ0NSw2ICs0NDMsNyBAQAogCX0KIAlza2IgPSBzbG90X2RlcXVldWVfaGVhZChzbG90KTsKIAlzZnFfZGVjKHEsIGEpOworCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuLS07CiAJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IDc3NTY1ZTcuLmU5MzE2NTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMTM0LDcgKzEzNCw2IEBACiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtMTg3LDYgKzE4Niw3IEBACiAJCQlxLT5wdG9rZW5zID0gcHRva3M7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlyZXR1cm4gc2tiOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGVxbC5jIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKaW5kZXggODRjZTQ4ZS4uZDg0ZTczMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAogCWlmIChxLT5xLnFsZW4gPCBkZXYtPnR4X3F1ZXVlX2xlbikgewogCQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xLCBza2IpOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQogCkBAIC0xMTEsNiArMTEwLDggQEAKIAkJCWRhdC0+bS0+c2xhdmVzID0gc2NoOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShtKTsKIAkJfQorCX0gZWxzZSB7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCX0KIAlzY2gtPnEucWxlbiA9IGRhdC0+cS5xbGVuICsgZGF0X3F1ZXVlLT5xZGlzYy0+cS5xbGVuOwogCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDdiZDNiYmIuLmQ4MDJlOTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNjA5LDkgKzE2MDksNyBAQAogICovCiBzdGF0aWMgdm9pZCBzdmNfYmNfc29ja19mcmVlKHN0cnVjdCBzdmNfeHBydCAqeHBydCkKIHsKLQlpZiAoeHBydCkgewotCQlrZnJlZSh4cHJ0LT54cHRfYmNfc2lkKTsKKwlpZiAoeHBydCkKIAkJa2ZyZWUoY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCkpOwotCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYyBiL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYwppbmRleCA1NTE4N2M4Li40MDYyMDc1IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKKysrIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCkBAIC0yNyw5ICsyNywxOSBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3gyNS5oPgogCi0vKgotICogUGFyc2UgYSBzZXQgb2YgZmFjaWxpdGllcyBpbnRvIHRoZSBmYWNpbGl0aWVzIHN0cnVjdHVyZXMuIFVucmVjb2duaXNlZAotICoJZmFjaWxpdGllcyBhcmUgd3JpdHRlbiB0byB0aGUgZGVidWcgbG9nIGZpbGUuCisvKioKKyAqIHgyNV9wYXJzZV9mYWNpbGl0aWVzIC0gUGFyc2UgZmFjaWxpdGllcyBmcm9tIHNrYiBpbnRvIHRoZSBmYWNpbGl0aWVzIHN0cnVjdHMKKyAqCisgKiBAc2tiOiBza19idWZmIHRvIHBhcnNlCisgKiBAZmFjaWxpdGllczogUmVndWxhciBmYWNpbGl0ZXMsIHVwZGF0ZWQgYXMgZmFjaWxpdGllcyBhcmUgZm91bmQKKyAqIEBkdGVfZmFjczogSVRVIERURSBmYWNpbGl0aWVzLCB1cGRhdGVkIGFzIERURSBmYWNpbGl0aWVzIGFyZSBmb3VuZAorICogQHZjX2ZhY19tYXNrOiBtYXNrIGlzIHVwZGF0ZWQgd2l0aCBhbGwgZmFjaWxpdGllcyBmb3VuZAorICoKKyAqIFJldHVybiBjb2RlczoKKyAqICAtMSAtIFBhcnNpbmcgZXJyb3IsIGNhbGxlciBzaG91bGQgZHJvcCBjYWxsIGFuZCBjbGVhbiB1cAorICogICAwIC0gUGFyc2UgT0ssIHRoaXMgc2tiIGhhcyBubyBmYWNpbGl0aWVzCisgKiAgPjAgLSBQYXJzZSBPSywgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBmYWNpbGl0aWVzIGhlYWRlcgorICoKICAqLwogaW50IHgyNV9wYXJzZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqZmFjaWxpdGllcywKIAkJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyAqZHRlX2ZhY3MsIHVuc2lnbmVkIGxvbmcgKnZjX2ZhY19tYXNrKQpAQCAtNjIsNyArNzIsNyBAQAogCQlzd2l0Y2ggKCpwICYgWDI1X0ZBQ19DTEFTU19NQVNLKSB7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19BOgogCQkJaWYgKGxlbiA8IDIpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX1JFVkVSU0U6CiAJCQkJaWYoKHBbMV0gJiAweDgxKSA9PSAweDgxKSB7CkBAIC0xMDcsNyArMTE3LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFgyNV9GQUNfQ0xBU1NfQjoKIAkJCWlmIChsZW4gPCAzKQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAtMTsKIAkJCXN3aXRjaCAoKnApIHsKIAkJCWNhc2UgWDI1X0ZBQ19QQUNLRVRfU0laRToKIAkJCQlmYWNpbGl0aWVzLT5wYWNzaXplX2luICA9IHBbMV07CkBAIC0xMzAsNyArMTQwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFgyNV9GQUNfQ0xBU1NfQzoKIAkJCWlmIChsZW4gPCA0KQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAtMTsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJYLjI1OiB1bmtub3duIGZhY2lsaXR5ICUwMlgsICIKIAkJCSAgICAgICAidmFsdWVzICUwMlgsICUwMlgsICUwMlhcbiIsCiAJCQkgICAgICAgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7CkBAIC0xMzksMTggKzE0OSwxOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19EOgogCQkJaWYgKGxlbiA8IHBbMV0gKyAyKQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAtMTsKIAkJCXN3aXRjaCAoKnApIHsKIAkJCWNhc2UgWDI1X0ZBQ19DQUxMSU5HX0FFOgogCQkJCWlmIChwWzFdID4gWDI1X01BWF9EVEVfRkFDSUxfTEVOIHx8IHBbMV0gPD0gMSkKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldHVybiAtMTsKIAkJCQlkdGVfZmFjcy0+Y2FsbGluZ19sZW4gPSBwWzJdOwogCQkJCW1lbWNweShkdGVfZmFjcy0+Y2FsbGluZ19hZSwgJnBbM10sIHBbMV0gLSAxKTsKIAkJCQkqdmNfZmFjX21hc2sgfD0gWDI1X01BU0tfQ0FMTElOR19BRTsKIAkJCQlicmVhazsKIAkJCWNhc2UgWDI1X0ZBQ19DQUxMRURfQUU6CiAJCQkJaWYgKHBbMV0gPiBYMjVfTUFYX0RURV9GQUNJTF9MRU4gfHwgcFsxXSA8PSAxKQotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIC0xOwogCQkJCWR0ZV9mYWNzLT5jYWxsZWRfbGVuID0gcFsyXTsKIAkJCQltZW1jcHkoZHRlX2ZhY3MtPmNhbGxlZF9hZSwgJnBbM10sIHBbMV0gLSAxKTsKIAkJCQkqdmNfZmFjX21hc2sgfD0gWDI1X01BU0tfQ0FMTEVEX0FFOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfaW4uYyBiL25ldC94MjUveDI1X2luLmMKaW5kZXggZjcyOWYwMi4uMTVkZTY1ZiAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfaW4uYworKysgYi9uZXQveDI1L3gyNV9pbi5jCkBAIC05MSwxMCArOTEsMTAgQEAKIHsKIAlzdHJ1Y3QgeDI1X2FkZHJlc3Mgc291cmNlX2FkZHIsIGRlc3RfYWRkcjsKIAlpbnQgbGVuOworCXN0cnVjdCB4MjVfc29jayAqeDI1ID0geDI1X3NrKHNrKTsKIAogCXN3aXRjaCAoZnJhbWV0eXBlKSB7CiAJCWNhc2UgWDI1X0NBTExfQUNDRVBURUQ6IHsKLQkJCXN0cnVjdCB4MjVfc29jayAqeDI1ID0geDI1X3NrKHNrKTsKIAogCQkJeDI1X3N0b3BfdGltZXIoc2spOwogCQkJeDI1LT5jb25kaXRpb24gPSAweDAwOwpAQCAtMTEzLDE0ICsxMTMsMTYgQEAKIAkJCQkJCSZkZXN0X2FkZHIpOwogCQkJaWYgKGxlbiA+IDApCiAJCQkJc2tiX3B1bGwoc2tiLCBsZW4pOworCQkJZWxzZSBpZiAobGVuIDwgMCkKKwkJCQlnb3RvIG91dF9jbGVhcjsKIAogCQkJbGVuID0geDI1X3BhcnNlX2ZhY2lsaXRpZXMoc2tiLCAmeDI1LT5mYWNpbGl0aWVzLAogCQkJCQkJJngyNS0+ZHRlX2ZhY2lsaXRpZXMsCiAJCQkJCQkmeDI1LT52Y19mYWNpbF9tYXNrKTsKIAkJCWlmIChsZW4gPiAwKQogCQkJCXNrYl9wdWxsKHNrYiwgbGVuKTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLTE7CisJCQllbHNlIGlmIChsZW4gPCAwKQorCQkJCWdvdG8gb3V0X2NsZWFyOwogCQkJLyoKIAkJCSAqCUNvcHkgYW55IENhbGwgVXNlciBEYXRhLgogCQkJICovCkBAIC0xNDQsNiArMTQ2LDEyIEBACiAJfQogCiAJcmV0dXJuIDA7CisKK291dF9jbGVhcjoKKwl4MjVfd3JpdGVfaW50ZXJuYWwoc2ssIFgyNV9DTEVBUl9SRVFVRVNUKTsKKwl4MjUtPnN0YXRlID0gWDI1X1NUQVRFXzI7CisJeDI1X3N0YXJ0X3QyM3RpbWVyKHNrKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2xpbmsuYyBiL25ldC94MjUveDI1X2xpbmsuYwppbmRleCA0Y2JjOTQyLi4yMTMwNjkyIDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9saW5rLmMKKysrIGIvbmV0L3gyNS94MjVfbGluay5jCkBAIC0zOTYsOSArMzk2LDEyIEBACiAJd3JpdGVfbG9ja19iaCgmeDI1X25laWdoX2xpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJngyNV9uZWlnaF9saXN0KSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKIAkJbmIgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgeDI1X25laWdoLCBub2RlKTsKKwkJZGV2ID0gbmItPmRldjsKIAkJX194MjVfcmVtb3ZlX25laWdoKG5iKTsKLQkJZGV2X3B1dChuYi0+ZGV2KTsKKwkJZGV2X3B1dChkZXYpOwogCX0KIAl3cml0ZV91bmxvY2tfYmgoJngyNV9uZWlnaF9saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IGIwYjIzNTcuLmY2Y2JjM2QgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTIzOCwxMiArMjM4LDEyIEBACiBmaQogCiAjIEJ1aWxkIGhlYWRlciBwYWNrYWdlCi1maW5kIC4gLW5hbWUgTWFrZWZpbGUgLW8gLW5hbWUgS2NvbmZpZ1wqIC1vIC1uYW1lIFwqLnBsID4gL3RtcC9maWxlcyQkCi1maW5kIGFyY2gveDg2L2luY2x1ZGUgaW5jbHVkZSBzY3JpcHRzIC10eXBlIGYgPj4gL3RtcC9maWxlcyQkCisoY2QgJHNyY3RyZWU7IGZpbmQgLiAtbmFtZSBNYWtlZmlsZSAtbyAtbmFtZSBLY29uZmlnXCogLW8gLW5hbWUgXCoucGwgPiAvdG1wL2ZpbGVzJCQpCisoY2QgJHNyY3RyZWU7IGZpbmQgYXJjaC8kU1JDQVJDSC9pbmNsdWRlIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvZmlsZXMkJCkKIChjZCAkb2JqdHJlZTsgZmluZCAuY29uZmlnIE1vZHVsZS5zeW12ZXJzIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvb2JqZmlsZXMkJCkKIGRlc3RkaXI9JGtlcm5lbF9oZWFkZXJzX2Rpci91c3Ivc3JjL2xpbnV4LWhlYWRlcnMtJHZlcnNpb24KIG1rZGlyIC1wICIkZGVzdGRpciIKLXRhciAtYyAtZiAtIC1UIC90bXAvZmlsZXMkJCB8IChjZCAkZGVzdGRpcjsgdGFyIC14ZiAtKQorKGNkICRzcmN0cmVlOyB0YXIgLWMgLWYgLSAtVCAvdG1wL2ZpbGVzJCQpIHwgKGNkICRkZXN0ZGlyOyB0YXIgLXhmIC0pCiAoY2QgJG9ianRyZWU7IHRhciAtYyAtZiAtIC1UIC90bXAvb2JqZmlsZXMkJCkgfCAoY2QgJGRlc3RkaXI7IHRhciAteGYgLSkKIHJtIC1mIC90bXAvZmlsZXMkJCAvdG1wL29iamZpbGVzJCQKIGFyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZSBiL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKaW5kZXggNmM5NDEwNS4uMWJmMDkwYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlCkBAIC0xMyw4ICsxMyw4IEBACiAJcmVxdWVzdF9rZXlfYXV0aC5vIFwKIAl1c2VyX2RlZmluZWQubwogCi1vYmotJChDT05GSUdfVFJVU1RFRF9LRVlTKSArPSB0cnVzdGVkX2RlZmluZWQubwotb2JqLSQoQ09ORklHX0VOQ1JZUFRFRF9LRVlTKSArPSBlbmNyeXB0ZWRfZGVmaW5lZC5vCitvYmotJChDT05GSUdfVFJVU1RFRF9LRVlTKSArPSB0cnVzdGVkLm8KK29iai0kKENPTkZJR19FTkNSWVBURURfS0VZUykgKz0gZW5jcnlwdGVkLm8KIG9iai0kKENPTkZJR19LRVlTX0NPTVBBVCkgKz0gY29tcGF0Lm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkX2RlZmluZWQuYwpyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYwppbmRleCAyODc5MWE2Li45ZTdlNGNlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmMKKysrIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KICNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CiAKLSNpbmNsdWRlICJlbmNyeXB0ZWRfZGVmaW5lZC5oIgorI2luY2x1ZGUgImVuY3J5cHRlZC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBLRVlfVFJVU1RFRF9QUkVGSVhbXSA9ICJ0cnVzdGVkOiI7CiBzdGF0aWMgY29uc3QgY2hhciBLRVlfVVNFUl9QUkVGSVhbXSA9ICJ1c2VyOiI7CkBAIC04ODgsNiArODg4LDcgQEAKIG91dDoKIAllbmNyeXB0ZWRfc2hhc2hfcmVsZWFzZSgpOwogCXJldHVybiByZXQ7CisKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfZW5jcnlwdGVkKHZvaWQpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmggYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmgKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmgKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaCBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAppbmRleCBlZGZhNTBkLi5hNTJhYTdjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKKysrIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCkBAIC04NywxMyArODcsMTMgQEAKIGV4dGVybiBpbnQgX19rZXlfbGlua19iZWdpbihzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJICAgIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKIAkJCSAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLQkJCSAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKTsKKwkJCSAgICB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpOwogZXh0ZXJuIGludCBfX2tleV9saW5rX2NoZWNrX2xpdmVfa2V5KHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSk7CiBleHRlcm4gdm9pZCBfX2tleV9saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSwKLQkJICAgICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpOworCQkgICAgICAgdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKTsKIGV4dGVybiB2b2lkIF9fa2V5X2xpbmtfZW5kKHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCQkgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYyk7CisJCQkgICB1bnNpZ25lZCBsb25nIHByZWFsbG9jKTsKIAogZXh0ZXJuIGtleV9yZWZfdCBfX2tleXJpbmdfc2VhcmNoX29uZShrZXlfcmVmX3Qga2V5cmluZ19yZWYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmMKaW5kZXggODRkNGViNS4uMWMyZDQzZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL2tleS5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAkJCQkgICAgICBzaXplX3QgZGF0YWxlbiwKIAkJCQkgICAgICBzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJCSAgICAgIHN0cnVjdCBrZXkgKmF1dGhrZXksCi0JCQkJICAgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYykKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiB7CiAJaW50IHJldCwgYXdha2VuOwogCkBAIC00ODEsNyArNDgxLDcgQEAKIAkJCSAgICAgc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSAgICAgc3RydWN0IGtleSAqYXV0aGtleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCWludCByZXQ7CiAKIAlpZiAoa2V5cmluZykgewpAQCAtNTI2LDcgKzUyNiw3IEBACiAJCQlzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJc3RydWN0IGtleSAqYXV0aGtleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCXN0cnVjdCB0aW1lc3BlYyBub3c7CiAJaW50IHJldCwgYXdha2VuLCBsaW5rX3JldCA9IDA7CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCQkJICAgICAgIGtleV9wZXJtX3QgcGVybSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlOwogCXN0cnVjdCBrZXkgKmtleXJpbmcsICprZXkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCA5MjAyNGVkLi41NjIwZjA4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtMjUsNiArMjUsOCBAQAogCQkoa2V5cmluZyktPnBheWxvYWQuc3Vic2NyaXB0aW9ucywJCQlcCiAJCXJ3c2VtX2lzX2xvY2tlZCgoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKSYoa2V5cmluZyktPnNlbSkpKQogCisjZGVmaW5lIEtFWV9MSU5LX0ZJWFFVT1RBIDFVTAorCiAvKgogICogV2hlbiBwbHVtYmluZyB0aGUgZGVwdGhzIG9mIHRoZSBrZXkgdHJlZSwgdGhpcyBzZXRzIGEgaGFyZCBsaW1pdAogICogc2V0IG9uIGhvdyBkZWVwIHdlJ3JlIHdpbGxpbmcgdG8gZ28uCkBAIC02OTksMTEgKzcwMSwxMSBAQAogICogUHJlYWxsb2NhdGUgbWVtb3J5IHNvIHRoYXQgYSBrZXkgY2FuIGJlIGxpbmtlZCBpbnRvIHRvIGEga2V5cmluZy4KICAqLwogaW50IF9fa2V5X2xpbmtfYmVnaW4oc3RydWN0IGtleSAqa2V5cmluZywgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkgICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpCisJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIHVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYykKIAlfX2FjcXVpcmVzKCZrZXlyaW5nLT5zZW0pCiB7CiAJc3RydWN0IGtleXJpbmdfbGlzdCAqa2xpc3QsICpua2xpc3Q7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAl1bnNpZ25lZCBtYXg7CiAJc2l6ZV90IHNpemU7CiAJaW50IGxvb3AsIHJldDsKQEAgLTc0Niw2ICs3NDgsNyBAQAogCiAJCQkJLyogbm90ZSByZXBsYWNlbWVudCBzbG90ICovCiAJCQkJa2xpc3QtPmRlbGtleSA9IG5rbGlzdC0+ZGVsa2V5ID0gbG9vcDsKKwkJCQlwcmVhbGxvYyA9ICh1bnNpZ25lZCBsb25nKW5rbGlzdDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KQEAgLTc2MCw2ICs3NjMsNyBAQAogCWlmIChrbGlzdCAmJiBrbGlzdC0+bmtleXMgPCBrbGlzdC0+bWF4a2V5cykgewogCQkvKiB0aGVyZSdzIHN1ZmZpY2llbnQgc2xhY2sgc3BhY2UgdG8gYXBwZW5kIGRpcmVjdGx5ICovCiAJCW5rbGlzdCA9IE5VTEw7CisJCXByZWFsbG9jID0gS0VZX0xJTktfRklYUVVPVEE7CiAJfSBlbHNlIHsKIAkJLyogZ3JvdyB0aGUga2V5IGxpc3QgKi8KIAkJbWF4ID0gNDsKQEAgLTc5NCw4ICs3OTgsOSBAQAogCQlua2xpc3QtPmtleXNbbmtsaXN0LT5kZWxrZXldID0gTlVMTDsKIAl9CiAKKwlwcmVhbGxvYyA9ICh1bnNpZ25lZCBsb25nKW5rbGlzdCB8IEtFWV9MSU5LX0ZJWFFVT1RBOwogZG9uZToKLQkqX3ByZWFsbG9jID0gbmtsaXN0OworCSpfcHJlYWxsb2MgPSBwcmVhbGxvYzsKIAlrbGVhdmUoIiA9IDAiKTsKIAlyZXR1cm4gMDsKIApAQCAtODM2LDEyICs4NDEsMTIgQEAKICAqIGNvbWJpbmF0aW9uLgogICovCiB2b2lkIF9fa2V5X2xpbmsoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5LAotCQlzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKQorCQl1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiB7CiAJc3RydWN0IGtleXJpbmdfbGlzdCAqa2xpc3QsICpua2xpc3Q7CiAKLQlua2xpc3QgPSAqX3ByZWFsbG9jOwotCSpfcHJlYWxsb2MgPSBOVUxMOworCW5rbGlzdCA9IChzdHJ1Y3Qga2V5cmluZ19saXN0ICopKCpfcHJlYWxsb2MgJiB+S0VZX0xJTktfRklYUVVPVEEpOworCSpfcHJlYWxsb2MgPSAwOwogCiAJa2VudGVyKCIlZCwlZCwlcCIsIGtleXJpbmctPnNlcmlhbCwga2V5LT5zZXJpYWwsIG5rbGlzdCk7CiAKQEAgLTg4MSwyMCArODg2LDIyIEBACiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIF9fa2V5X2xpbmtfYmVnaW4oKSBoYXZpbmcgYmVpbmcgY2FsbGVkLgogICovCiB2b2lkIF9fa2V5X2xpbmtfZW5kKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jKQorCQkgICAgdW5zaWduZWQgbG9uZyBwcmVhbGxvYykKIAlfX3JlbGVhc2VzKCZrZXlyaW5nLT5zZW0pCiB7CiAJQlVHX09OKHR5cGUgPT0gTlVMTCk7CiAJQlVHX09OKHR5cGUtPm5hbWUgPT0gTlVMTCk7Ci0Ja2VudGVyKCIlZCwlcywlcCIsIGtleXJpbmctPnNlcmlhbCwgdHlwZS0+bmFtZSwgcHJlYWxsb2MpOworCWtlbnRlcigiJWQsJXMsJWx4Iiwga2V5cmluZy0+c2VyaWFsLCB0eXBlLT5uYW1lLCBwcmVhbGxvYyk7CiAKIAlpZiAodHlwZSA9PSAma2V5X3R5cGVfa2V5cmluZykKIAkJdXBfd3JpdGUoJmtleXJpbmdfc2VyaWFsaXNlX2xpbmtfc2VtKTsKIAogCWlmIChwcmVhbGxvYykgewotCQlrZnJlZShwcmVhbGxvYyk7Ci0JCWtleV9wYXlsb2FkX3Jlc2VydmUoa2V5cmluZywKLQkJCQkgICAga2V5cmluZy0+ZGF0YWxlbiAtIEtFWVFVT1RBX0xJTktfQllURVMpOworCQlpZiAocHJlYWxsb2MgJiBLRVlfTElOS19GSVhRVU9UQSkKKwkJCWtleV9wYXlsb2FkX3Jlc2VydmUoa2V5cmluZywKKwkJCQkJICAgIGtleXJpbmctPmRhdGFsZW4gLQorCQkJCQkgICAgS0VZUVVPVEFfTElOS19CWVRFUyk7CisJCWtmcmVlKChzdHJ1Y3Qga2V5cmluZ19saXN0ICopKHByZWFsbG9jICYgfktFWV9MSU5LX0ZJWFFVT1RBKSk7CiAJfQogCXVwX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogfQpAQCAtOTIxLDcgKzkyOCw3IEBACiAgKi8KIGludCBrZXlfbGluayhzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5ICprZXkpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlpbnQgcmV0OwogCiAJa2V5X2NoZWNrKGtleXJpbmcpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCmluZGV4IDlhN2ZiMzkuLmEzZGMwZDQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKQEAgLTM1Miw4ICszNTIsOCBAQAogCQkJICAgICAgIHN0cnVjdCBrZXlfdXNlciAqdXNlciwKIAkJCSAgICAgICBzdHJ1Y3Qga2V5ICoqX2tleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJc3RydWN0IGtleSAqa2V5OwogCWtleV9yZWZfdCBrZXlfcmVmOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYwpyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKaW5kZXggMjgzNmM2ZC4uODNmYzkyZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYworKysgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RwbV9jb21tYW5kLmg+CiAKLSNpbmNsdWRlICJ0cnVzdGVkX2RlZmluZWQuaCIKKyNpbmNsdWRlICJ0cnVzdGVkLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGhtYWNfYWxnW10gPSAiaG1hYyhzaGExKSI7CiBzdGF0aWMgY29uc3QgY2hhciBoYXNoX2FsZ1tdID0gInNoYTEiOwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAlyZXQgPSBkYXRhYmxvYl9wYXJzZShkYXRhYmxvYiwgbmV3X3AsIG5ld19vKTsKIAlpZiAocmV0ICE9IE9wdF91cGRhdGUpIHsKIAkJcmV0ID0gLUVJTlZBTDsKKwkJa2ZyZWUobmV3X3ApOwogCQlnb3RvIG91dDsKIAl9CiAJLyogY29weSBvbGQga2V5IHZhbHVlcywgYW5kIHJlc2VhbCB3aXRoIG5ldyBwY3JzICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5oIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmgKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvdHJ1c3RlZC5oCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MzllNDAzLi43YjczMDhhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE1NCwxMCArMTU0LDkgQEAKIAkJCQkgICAgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAotaW50IHNlY3VyaXR5X2NhcGFibGUoaW50IGNhcCkKK2ludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPmNhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIGNhcCwKLQkJCQkgICAgIFNFQ1VSSVRZX0NBUF9BVURJVCk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+Y2FwYWJsZShjdXJyZW50LCBjcmVkLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CiB9CiAKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggZTI3NmViNC4uYzhkNjk5MiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzE5OCw3ICszMTk4LDExIEBACiB7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3JlZC0+c2VjdXJpdHk7CiAKLQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKTsKKwkvKgorCSAqIGNyZWQtPnNlY3VyaXR5ID09IE5VTEwgaWYgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuaygpIG9yCisJICogc2VjdXJpdHlfcHJlcGFyZV9jcmVkcygpIHJldHVybmVkIGFuIGVycm9yLgorCSAqLworCUJVR19PTihjcmVkLT5zZWN1cml0eSAmJiAodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpOwogCWNyZWQtPnNlY3VyaXR5ID0gKHZvaWQgKikgMHg3VUw7CiAJa2ZyZWUodHNlYyk7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKaW5kZXggYzNmODQ1Yy4uYTUzMzczMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcC0+Ym9vbF92YWxfdG9fc3RydWN0ID0gKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0gKiopCiAJCWttYWxsb2MocC0+cF9ib29scy5ucHJpbSAqIHNpemVvZihzdHJ1Y3QgY29uZF9ib29sX2RhdHVtICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXAtPmJvb2xfdmFsX3RvX3N0cnVjdCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGJlOWRlMzguLjU3MzYzNTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTUwMSw4ICs1MDEsOCBAQAogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlyYyA9IC1FTk9NRU07Ci0JaWYgKGNvbmRfaW5pdF9ib29sX2luZGV4ZXMocCkpCisJcmMgPSBjb25kX2luaXRfYm9vbF9pbmRleGVzKHApOworCWlmIChyYykKIAkJZ290byBvdXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1lNX05VTTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCA5MWFjYzlhLi43YzFmYzY0IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTMwLDYgKzMwLDggQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkiYWFjaS1wbDA0MSIKIAorI2RlZmluZSBGUkFNRV9QRVJJT0RfVVMJMjEKKwogLyoKICAqIFBNIHN1cHBvcnQgaXMgbm90IGNvbXBsZXRlLiAgVHVybiBpdCBvZmYuCiAgKi8KQEAgLTQ4LDcgKzUwLDExIEBACiAJaWYgKHYgJiBTTEZSXzFSWFYpCiAJCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMMVJYKTsKIAotCXdyaXRlbChtYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJaWYgKG1haW5jciAhPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpKSB7CisJCXdyaXRlbChtYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJCXVkZWxheSgxKTsKKwl9CiB9CiAKIC8qCkBAIC02NCw4ICs3MCw4IEBACiAJCQkgICAgdW5zaWduZWQgc2hvcnQgdmFsKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWludCB0aW1lb3V0OwogCXUzMiB2OwotCWludCB0aW1lb3V0ID0gNTAwMDsKIAogCWlmIChhYzk3LT5udW0gPj0gNCkKIAkJcmV0dXJuOwpAQCAtODEsMTQgKzg3LDE3IEBACiAJd3JpdGVsKHZhbCA8PCA0LCBhYWNpLT5iYXNlICsgQUFDSV9TTDJUWCk7CiAJd3JpdGVsKHJlZyA8PCAxMiwgYWFjaS0+YmFzZSArIEFBQ0lfU0wxVFgpOwogCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIGJvdGggc2xvdHMgdG8gY29tcGxldGUuCi0JICovCisJLyogSW5pdGlhbGx5LCB3YWl0IG9uZSBmcmFtZSBwZXJpb2QgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKKworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBpdCB0byBiZSBzZW50ICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICgodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkKKwlpZiAodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkKIAkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsCiAJCQkidGltZW91dCB3YWl0aW5nIGZvciB3cml0ZSB0byBjb21wbGV0ZVxuIik7CiAKQEAgLTEwMSw5ICsxMTAsOCBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGFhY2lfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWludCB0aW1lb3V0LCByZXRyaWVzID0gMTA7CiAJdTMyIHY7Ci0JaW50IHRpbWVvdXQgPSA1MDAwOwotCWludCByZXRyaWVzID0gMTA7CiAKIAlpZiAoYWM5Ny0+bnVtID49IDQpCiAJCXJldHVybiB+MDsKQEAgLTExNywzNSArMTI1LDM0IEBACiAJICovCiAJd3JpdGVsKChyZWcgPDwgMTIpIHwgKDEgPDwgMTkpLCBhYWNpLT5iYXNlICsgQUFDSV9TTDFUWCk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHRoZSB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuCi0JICovCisJLyogSW5pdGlhbGx5LCB3YWl0IG9uZSBmcmFtZSBwZXJpb2QgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKKworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBpdCB0byBiZSBzZW50ICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICgodiAmIFNMRlJfMVRYQikgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkgeworCWlmICh2ICYgU0xGUl8xVFhCKSB7CiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LCAidGltZW91dCBvbiBzbG90IDEgVFggYnVzeVxuIik7CiAJCXYgPSB+MDsKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBHaXZlIHRoZSBBQyc5NyBjb2RlYyBtb3JlIHRoYW4gZW5vdWdoIHRpbWUKLQkgKiB0byByZXNwb25kLiAoNDJ1cyA9IH4yIGZyYW1lcyBhdCA0OGtIei4pCi0JICovCi0JdWRlbGF5KDQyKTsKKwkvKiBOb3cgd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGZyYW1lICovCisJdWRlbGF5KEZSQU1FX1BFUklPRF9VUyk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHNsb3QgMiB0byBpbmRpY2F0ZSBkYXRhLgotCSAqLwotCXRpbWVvdXQgPSA1MDAwOworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBkYXRhICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0xGUikgJiAoU0xGUl8xUlhWfFNMRlJfMlJYVik7CiAJfSB3aGlsZSAoKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSAmJiAtLXRpbWVvdXQpOwogCi0JaWYgKCF0aW1lb3V0KSB7CisJaWYgKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSB7CiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LCAidGltZW91dCBvbiBSWCB2YWxpZFxuIik7CiAJCXYgPSB+MDsKIAkJZ290byBvdXQ7CkBAIC0xNzksNiArMTg2LDcgQEAKIAlpbnQgdGltZW91dCA9IDUwMDA7CiAKIAlkbyB7CisJCXVkZWxheSgxKTsKIAkJdmFsID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfU1IpOwogCX0gd2hpbGUgKHZhbCAmIG1hc2sgJiYgdGltZW91dC0tKTsKIH0KQEAgLTg3NCw3ICs4ODIsNyBAQAogCSAqIEdpdmUgdGhlIEFDJzk3IGNvZGVjIG1vcmUgdGhhbiBlbm91Z2ggdGltZQogCSAqIHRvIHdha2UgdXAuICg0MnVzID0gfjIgZnJhbWVzIGF0IDQ4a0h6LikKIAkgKi8KLQl1ZGVsYXkoNDIpOworCXVkZWxheShGUkFNRV9QRVJJT0RfVVMgKiAyKTsKIAogCXJldCA9IHNuZF9hYzk3X2J1cyhhYWNpLT5jYXJkLCAwLCAmYWFjaV9idXNfb3BzLCBhYWNpLCAmYWM5N19idXMpOwogCWlmIChyZXQpCkBAIC05ODksNiArOTk3LDggQEAKIAkgKiBkaXNhYmxpbmcgdGhlIGNoYW5uZWwgZG9lc24ndCBjbGVhciB0aGUgRklGTy4KIAkgKi8KIAl3cml0ZWwoYWFjaS0+bWFpbmNyICYgfk1BSU5DUl9JRSwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCXVkZWxheSgxKTsKIAl3cml0ZWwoYWFjaS0+bWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmMgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCmluZGV4IDEwYzNhODcuLmIzMTA3MDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2F0bWVsL2FjOTdjLmMKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuYwpAQCAtMzMsOSArMzMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTEKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImFjOTdjLmgiCiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9ocnRpbWVyLmMgYi9zb3VuZC9jb3JlL2hydGltZXIuYwppbmRleCA3NzMwNTc1Li5iOGIzMWM0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2hydGltZXIuYworKysgYi9zb3VuZC9jb3JlL2hydGltZXIuYwpAQCAtNDUsMTIgKzQ1LDEzIEBACiB7CiAJc3RydWN0IHNuZF9ocnRpbWVyICpzdGltZSA9IGNvbnRhaW5lcl9vZihocnQsIHN0cnVjdCBzbmRfaHJ0aW1lciwgaHJ0KTsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0ID0gc3RpbWUtPnRpbWVyOworCXVuc2lnbmVkIGxvbmcgb3J1bnM7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZzdGltZS0+cnVubmluZykpCiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIAotCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0LCBuc190b19rdGltZSh0LT5zdGlja3MgKiByZXNvbHV0aW9uKSk7Ci0Jc25kX3RpbWVyX2ludGVycnVwdChzdGltZS0+dGltZXIsIHQtPnN0aWNrcyk7CisJb3J1bnMgPSBocnRpbWVyX2ZvcndhcmRfbm93KGhydCwgbnNfdG9fa3RpbWUodC0+c3RpY2tzICogcmVzb2x1dGlvbikpOworCXNuZF90aW1lcl9pbnRlcnJ1cHQoc3RpbWUtPnRpbWVyLCB0LT5zdGlja3MgKiBvcnVucyk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZzdGltZS0+cnVubmluZykpCiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTEwNCw3ICsxMDUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF90aW1lcl9oYXJkd2FyZSBocnRpbWVyX2h3ID0gewotCS5mbGFncyA9CVNORFJWX1RJTUVSX0hXX0FVVE8sCisJLmZsYWdzID0JU05EUlZfVElNRVJfSFdfQVVUTyB8IFNORFJWX1RJTUVSX0hXX1RBU0tMRVQsCiAJLm9wZW4gPQkJc25kX2hydGltZXJfb3BlbiwKIAkuY2xvc2UgPQlzbmRfaHJ0aW1lcl9jbG9zZSwKIAkuc3RhcnQgPQlzbmRfaHJ0aW1lcl9zdGFydCwKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwppbmRleCBkYTAzNTk3Li41YzQyNmRmIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210cGF2LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCkBAIC01NSwxNCArNTUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotCiAvKgogICogICAgICBnbG9iYWxzCiAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9NYWtlZmlsZSBiL3NvdW5kL29zcy9NYWtlZmlsZQppbmRleCA5NmYxNGRjLi45MGZmYjk5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvTWFrZWZpbGUKKysrIGIvc291bmQvb3NzL01ha2VmaWxlCkBAIC04Nyw3ICs4Nyw3IEBACiAJJChvYmopL2JpbjJoZXggcHNzX3N5bnRoIDwgJDwgPiAkQAogZWxzZQogICAgICQob2JqKS9wc3NfYm9vdC5oOgotCSgJCQkJCQkJXAorCSQoUSkoCQkJCQkJCVwKIAkgICAgZWNobyAnc3RhdGljIHVuc2lnbmVkIGNoYXIgKiBwc3Nfc3ludGggPSBOVUxMOyc7CVwKIAkgICAgZWNobyAnc3RhdGljIGludCBwc3Nfc3ludGhMZW4gPSAwOyc7CQlcCiAJKSA+ICRACkBAIC0xMDIsNyArMTAyLDcgQEAKIAkkKG9iaikvaGV4MmhleCAtaSB0cml4X2Jvb3QgPCAkPCA+ICRACiBlbHNlCiAgICAgJChvYmopL3RyaXhfYm9vdC5oOgotCSgJCQkJCQkJXAorCSQoUSkoCQkJCQkJCVwKIAkgICAgZWNobyAnc3RhdGljIHVuc2lnbmVkIGNoYXIgKiB0cml4X2Jvb3QgPSBOVUxMOyc7CVwKIAkgICAgZWNobyAnc3RhdGljIGludCB0cml4X2Jvb3RfbGVuID0gMDsnOwkJXAogCSkgPiAkQApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggNjExNzU5NS4uNTczNTk0YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC05NzksMzEgKzk3OSwyNSBAQAogCiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7CiAJc3dpdGNoIChiaXRyYXRlKSB7Ci0jZGVmaW5lIEFaRl9GTVRfWExBVEUoaW5fZnJlcSwgb3V0X2JpdHMpIFwKLQlkbyB7IFwKLQkJY2FzZSBBWkZfRlJFUV8gIyMgaW5fZnJlcTogXAotCQkJZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfICMjIG91dF9iaXRzOyBcCi0JCQlicmVhazsgXAotCX0gd2hpbGUgKDApOwotCUFaRl9GTVRfWExBVEUoNDAwMCwgU1VTUEVDVEVEXzQwMDApCi0JQVpGX0ZNVF9YTEFURSg0ODAwLCBTVVNQRUNURURfNDgwMCkKLQkvKiB0aGUgQVpGMzMyOCBuYW1lcyBpdCAiNTUxMCIgZm9yIHNvbWUgc3RyYW5nZSByZWFzb246ICovCi0JQVpGX0ZNVF9YTEFURSg1NTEyLCA1NTEwKQotCUFaRl9GTVRfWExBVEUoNjYyMCwgNjYyMCkKLQlBWkZfRk1UX1hMQVRFKDgwMDAsIDgwMDApCi0JQVpGX0ZNVF9YTEFURSg5NjAwLCA5NjAwKQotCUFaRl9GTVRfWExBVEUoMTEwMjUsIDExMDI1KQotCUFaRl9GTVRfWExBVEUoMTMyNDAsIFNVU1BFQ1RFRF8xMzI0MCkKLQlBWkZfRk1UX1hMQVRFKDE2MDAwLCAxNjAwMCkKLQlBWkZfRk1UX1hMQVRFKDIyMDUwLCAyMjA1MCkKLQlBWkZfRk1UX1hMQVRFKDMyMDAwLCAzMjAwMCkKKwljYXNlIEFaRl9GUkVRXzQwMDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfNDAwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV80ODAwOiAgZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzQ4MDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNTUxMjoKKwkJLyogdGhlIEFaRjMzMjggbmFtZXMgaXQgIjU1MTAiIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uICovCisJCQkgICAgIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzU1MTA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNjYyMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzY2MjA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfODAwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzgwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfOTYwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzk2MDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMTEwMjU6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzExMDI1OyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzEzMjQwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfMTMyNDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMTYwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzE2MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzIyMDUwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8yMjA1MDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8zMjAwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfMzIwMDA7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ1bmtub3duIGJpdHJhdGUgJWQsIGFzc3VtaW5nIDQ0LjFrSHohXG4iLCBiaXRyYXRlKTsKIAkJLyogZmFsbC10aHJvdWdoICovCi0JQVpGX0ZNVF9YTEFURSg0NDEwMCwgNDQxMDApCi0JQVpGX0ZNVF9YTEFURSg0ODAwMCwgNDgwMDApCi0JQVpGX0ZNVF9YTEFURSg2NjIwMCwgU1VTUEVDVEVEXzY2MjAwKQotI3VuZGVmIEFaRl9GTVRfWExBVEUKKwljYXNlIEFaRl9GUkVRXzQ0MTAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV80NDEwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV80ODAwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfNDgwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNjYyMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRX1NVU1BFQ1RFRF82NjIwMDsgYnJlYWs7CiAJfQogCS8qIHZhbCA9IDB4ZmYwNzsgM20yNy45OTNzICg2NTMwMUh6OyAtPiA2NDAwMEh6Pz8/KSBobW0sIDY2MTIwLCA2NTk2NywgNjYxMjMgKi8KIAkvKiB2YWwgPSAweGZmMDk7IDE3bTE1LjA5OHMgKDEzMTIzLDQ3OEh6OyAtPiAxMjAwMEh6Pz8/KSBobW0sIDEzMjM3LjJIej8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKaW5kZXggNGE2NjM0Ny4uNzRiMDU2MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCXNuZF9wcmludF9wY21fcmF0ZXMoYS0+cmF0ZXMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAJaWYgKGEtPmZvcm1hdCA9PSBBVURJT19DT0RJTkdfVFlQRV9MUENNKQotCQlzbmRfcHJpbnRfcGNtX2JpdHMoYS0+c2FtcGxlX2JpdHMsIGJ1ZjIgKyA4LCBzaXplb2YoYnVmMiAtIDgpKTsKKwkJc25kX3ByaW50X3BjbV9iaXRzKGEtPnNhbXBsZV9iaXRzLCBidWYyICsgOCwgc2l6ZW9mKGJ1ZjIpIC0gOCk7CiAJZWxzZSBpZiAoYS0+bWF4X2JpdHJhdGUpCiAJCXNucHJpbnRmKGJ1ZjIsIHNpemVvZihidWYyKSwKIAkJCQkiLCBtYXggYml0cmF0ZSA9ICVkIiwgYS0+bWF4X2JpdHJhdGUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMmU5MWE5OS4uMGJhZmZjZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0yNzAzLDcgKzI3MDMsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUgotCWlmIChwYXRjaFtkZXZdKSB7CisJaWYgKHBhdGNoW2Rldl0gJiYgKnBhdGNoW2Rldl0pIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkFwcGx5aW5nIHBhdGNoIGZpcm13YXJlICclcydcbiIsCiAJCQkgICBwYXRjaFtkZXZdKTsKIAkJZXJyID0gc25kX2hkYV9sb2FkX3BhdGNoKGNoaXAtPmJ1cywgcGF0Y2hbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggOWJiMDMwYS4uZmJlOTdkMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtODUsNiArODUsNyBAQAogCXVuc2lnbmVkIGludCBhdXRvX21pYzsKIAlpbnQgYXV0b19taWNfZXh0OwkJLyogYXV0b2NmZy5pbnB1dHNbXSBpbmRleCBmb3IgZXh0IG1pYyAqLwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CisJaGRhX25pZF90IHNsYXZlX2RpZ19vdXRzWzJdOwogCiAJLyogY2FwdHVyZSAqLwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7CkBAIC0xMjcsNiArMTI4LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWRlYXBhZDoxOwogCXVuc2lnbmVkIGludCB0aGlua3BhZDoxOwogCXVuc2lnbmVkIGludCBocF9sYXB0b3A6MTsKKwl1bnNpZ25lZCBpbnQgYXN1czoxOwogCiAJdW5zaWduZWQgaW50IGV4dF9taWNfcHJlc2VudDsKIAl1bnNpZ25lZCBpbnQgcmVjb3JkaW5nOwpAQCAtMzUyLDYgKzM1NCw4IEBACiAJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5uaWQgPQogCQkJCXNwZWMtPmRpZ19pbl9uaWQ7CiAJCX0KKwkJaWYgKHNwZWMtPnNsYXZlX2RpZ19vdXRzWzBdKQorCQkJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MDMsMTAgKzQwNywxNiBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjOwogCXN0cnVjdCBjb25leGFudF9qYWNrICpqYWNrOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGVycjsKKwlpbnQgaSwgZXJyOwogCiAJc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNuZF9hcnJheV9pbml0KCZzcGVjLT5qYWNrcywgc2l6ZW9mKCpqYWNrKSwgMzIpOworCisJamFjayA9IHNwZWMtPmphY2tzLmxpc3Q7CisJZm9yIChpID0gMDsgaSA8IHNwZWMtPmphY2tzLnVzZWQ7IGkrKywgamFjaysrKQorCQlpZiAoamFjay0+bmlkID09IG5pZCkKKwkJCXJldHVybiAwIDsgLyogYWxyZWFkeSBwcmVzZW50ICovCisKIAlqYWNrID0gc25kX2FycmF5X25ldygmc3BlYy0+amFja3MpOwogCW5hbWUgPSAodHlwZSA9PSBTTkRfSkFDS19IRUFEUEhPTkUpID8gIkhlYWRwaG9uZSIgOiAiTWljIiA7CiAKQEAgLTIxMDAsNyArMjExMCw3IEBACiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfZGFjX25pZHNbMV0gPSB7IDB4MTAgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9hZGNfbmlkc1szXSA9IHsgMHgxNCwgMHgxNSwgMHgxNiB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2NhcHNyY19uaWRzWzFdID0geyAweDE3IH07Ci0jZGVmaW5lIENYVDUwNjZfU1BESUZfT1VUCTB4MjEKK3N0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9kaWdvdXRfcGluX25pZHNbMl0gPSB7IDB4MjAsIDB4MjIgfTsKIAogLyogT0xQQydzIG1pY3JvcGhvbmUgcG9ydCBpcyBEQyBjb3VwbGVkIGZvciB1c2Ugd2l0aCBleHRlcm5hbCBzZW5zb3JzLAogICogdGhlcmVmb3JlIHdlIHVzZSBhIDUwJSBtaWMgYmlhcyBpbiBvcmRlciB0byBjZW50ZXIgdGhlIGlucHV0IHNpZ25hbCB3aXRoCkBAIC0yMzEyLDYgKzIzMjIsMTkgQEAKIAl9CiB9CiAKKworLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2FzdXNfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFiKTsKKwlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBwcmVzZW50PSVkXG4iLCBwcmVzZW50KTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE3LCAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKKwkJCSAgICBwcmVzZW50ID8gMSA6IDApOworfQorCisKIC8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBkaWdpdGFsIG1pYyBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9ocF9sYXB0b3BfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTIzODcsNiArMjQxMCwyMyBAQAogCWN4dDUwNjZfdXBkYXRlX3NwZWFrZXIoY29kZWMpOwogfQogCisvKiBEaXNwYXRjaCB0aGUgcmlnaHQgbWljIGF1dG9zd2l0Y2ggZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKHNwZWMtPmRlbGxfdm9zdHJvKQorCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT5pZGVhcGFkKQorCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7CisJZWxzZSBpZiAoc3BlYy0+dGhpbmtwYWQpCisJCWN4dDUwNjZfdGhpbmtwYWRfYXV0b21pYyhjb2RlYyk7CisJZWxzZSBpZiAoc3BlYy0+aHBfbGFwdG9wKQorCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT5hc3VzKQorCQljeHQ1MDY2X2FzdXNfYXV0b21pYyhjb2RlYyk7Cit9CisKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIHsKQEAgLTI0MDUsNjAgKzI0NDUsMTkgQEAKIH0KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl92b3N0cm9fZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCitzdGF0aWMgdm9pZCBjeHQ1MDY2X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQogewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X3Zvc3RybzogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfdm9zdHJvX2F1dG9taWMoY29kZWMpOworCQljeHQ1MDY2X2F1dG9taWMoY29kZWMpOwogCQlicmVhazsKIAl9CiB9CiAKLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfaWRlYXBhZF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzbmRfcHJpbnRkZCgiQ1hUNTA2Nl9pZGVhcGFkOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X2hwX2xhcHRvcF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzbmRfcHJpbnRkZCgiQ1hUNTA2Nl9ocF9sYXB0b3A6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl9ocF9sYXB0b3BfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl90aGlua3BhZF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzbmRfcHJpbnRkZCgiQ1hUNTA2Nl90aGlua3BhZDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X3RoaW5rcGFkX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QgPSB7CiAJLm51bV9pdGVtcyA9IDUsCkBAIC0yNjMzLDYgKzI2MzIsMjcgQEAKIAlzcGVjLT5yZWNvcmRpbmcgPSAwOwogfQogCitzdGF0aWMgdm9pZCBjb25leGFudF9jaGVja19kaWdfb3V0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgaGRhX25pZF90ICpkaWdfcGlucywKKwkJCQkgICAgaW50IG51bV9waW5zKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaGRhX25pZF90ICpuaWRfbG9jID0gJnNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9waW5zOyBpKyssIGRpZ19waW5zKyspIHsKKwkJdW5zaWduZWQgaW50IGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgKmRpZ19waW5zKTsKKwkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChjZmcpID09IEFDX0pBQ0tfUE9SVF9OT05FKQorCQkJY29udGludWU7CisJCWlmIChzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgKmRpZ19waW5zLCBuaWRfbG9jLCAxKSAhPSAxKQorCQkJY29udGludWU7CisJCWlmIChzcGVjLT5zbGF2ZV9kaWdfb3V0c1swXSkKKwkJCW5pZF9sb2MrKzsKKwkJZWxzZQorCQkJbmlkX2xvYyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtMzAzOSwyMCArMzA1OSwxMSBAQAogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDY2X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQogCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBpbml0XG4iKTsKIAljb25leGFudF9pbml0KGNvZGVjKTsKIAlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkgewogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJaWYgKHNwZWMtPmRlbGxfdm9zdHJvKQotCQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7Ci0JCWVsc2UgaWYgKHNwZWMtPmlkZWFwYWQpCi0JCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7Ci0JCWVsc2UgaWYgKHNwZWMtPnRoaW5rcGFkKQotCQkJY3h0NTA2Nl90aGlua3BhZF9hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+aHBfbGFwdG9wKQotCQkJY3h0NTA2Nl9ocF9sYXB0b3BfYXV0b21pYyhjb2RlYyk7CisJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CiAJfQogCWN4dDUwNjZfc2V0X21pY19ib29zdChjb2RlYyk7CiAJcmV0dXJuIDA7CkBAIC0zMDgwLDYgKzMwOTEsNyBAQAogCUNYVDUwNjZfREVMTF9WT1NUUk8sCS8qIERlbGwgVm9zdHJvIDEwMTVpICovCiAJQ1hUNTA2Nl9JREVBUEFELAkvKiBMZW5vdm8gSWRlYVBhZCBVMTUwICovCiAJQ1hUNTA2Nl9USElOS1BBRCwJLyogTGVub3ZvIFRoaW5rUGFkIFQ0MTBzLCBvdGhlcnM/ICovCisJQ1hUNTA2Nl9BU1VTLAkJLyogQXN1cyBLNTJKVSwgTGVub3ZvIEc1NjAgLSBJbnQgbWljIGF0IDB4MWEgYW5kIEV4dCBtaWMgYXQgMHgxYiAqLwogCUNYVDUwNjZfSFBfTEFQVE9QLCAgICAgIC8qIEhQIExhcHRvcCAqLwogCUNYVDUwNjZfTU9ERUxTCiB9OwpAQCAtMzA5MSw2ICszMTAzLDcgQEAKIAlbQ1hUNTA2Nl9ERUxMX1ZPU1RST10JPSAiZGVsbC12b3N0cm8iLAogCVtDWFQ1MDY2X0lERUFQQURdCT0gImlkZWFwYWQiLAogCVtDWFQ1MDY2X1RISU5LUEFEXQk9ICJ0aGlua3BhZCIsCisJW0NYVDUwNjZfQVNVU10JCT0gImFzdXMiLAogCVtDWFQ1MDY2X0hQX0xBUFRPUF0JPSAiaHAtbGFwdG9wIiwKIH07CiAKQEAgLTMxMDIsNyArMzExNSw5IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwMiwgIkRlbGwgVm9zdHJvIiwgQ1hUNTA2Nl9ERUxMX1ZPU1RSTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwOCwgIkRlbGwgSW5zcGlyb24gT25lIDE5VCIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzYwYiwgIkhQIEc2MCIsIENYVDUwNjZfSFBfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2YzLCAiQXN1cyBBNTJKIiwgQ1hUNTA2Nl9IUF9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZjMsICJBc3VzIEE1MkoiLCBDWFQ1MDY2X0FTVVMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NDMsICJBc3VzIEs1MkpVIiwgQ1hUNTA2Nl9BU1VTKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQXN1cyBVNTBGIiwgQ1hUNTA2Nl9BU1VTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjFlLCAiVG9zaGliYSBTYXRlbGxpdGUgQzY1MEQiLCBDWFQ1MDY2X0lERUFQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNTAsICJUb3NoaWJhIFNhdGVsbGl0ZSBQNTAwLVBTUEdTQy0wMTgwMFQiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZmUwLCAiVG9zaGliYSBTYXRlbGxpdGUgUHJvIFQxMzAtMTVGIiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCkBAIC0zMTExLDcgKzMxMjYsOSBAQAogCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDA4MzMsICJPTFBDIFhPLTEuNSIsIENYVDUwNjZfT0xQQ19YT18xXzUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwZjIsICJMZW5vdm8gVDQwMHMiLCBDWFQ1MDY2X1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWM1LCAiVGhpbmtwYWQgRWRnZSAxMyIsIENYVDUwNjZfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYzYsICJUaGlua3BhZCBFZGdlIDEzIiwgQ1hUNTA2Nl9BU1VTKSwKICAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjE1ZSwgIkxlbm92byBUaGlua3BhZCIsIENYVDUwNjZfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gRzU2MCIsIENYVDUwNjZfQVNVUyksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQ1hUNTA2Nl9JREVBUEFEKSwgLyogRmFsbGJhY2sgZm9yIExlbm92b3Mgd2l0aG91dCBkb2NrIG1pYyAqLwogCXt9CiB9OwpAQCAtMzEzMyw3ICszMTUwLDggQEAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShjeHQ1MDY2X2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGN4dDUwNjZfZGFjX25pZHM7Ci0Jc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDWFQ1MDY2X1NQRElGX09VVDsKKwljb25leGFudF9jaGVja19kaWdfb3V0cyhjb2RlYywgY3h0NTA2Nl9kaWdvdXRfcGluX25pZHMsCisJICAgIEFSUkFZX1NJWkUoY3h0NTA2Nl9kaWdvdXRfcGluX25pZHMpKTsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA2Nl9hZGNfbmlkczsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGN4dDUwNjZfY2Fwc3JjX25pZHM7CkBAIC0zMTY3LDE3ICszMTg1LDIwIEBACiAJCXNwZWMtPm51bV9pbml0X3ZlcmJzKys7CiAJCXNwZWMtPmRlbGxfYXV0b211dGUgPSAxOwogCQlicmVhazsKKwljYXNlIENYVDUwNjZfQVNVUzoKIAljYXNlIENYVDUwNjZfSFBfTEFQVE9QOgogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X2hwX2xhcHRvcF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2luaXRfdmVyYnNdID0KIAkJCWN4dDUwNjZfaW5pdF92ZXJic19ocF9sYXB0b3A7CiAJCXNwZWMtPm51bV9pbml0X3ZlcmJzKys7Ci0JCXNwZWMtPmhwX2xhcHRvcCA9IDE7CisJCXNwZWMtPmhwX2xhcHRvcCA9IGJvYXJkX2NvbmZpZyA9PSBDWFQ1MDY2X0hQX0xBUFRPUDsKKwkJc3BlYy0+YXN1cyA9IGJvYXJkX2NvbmZpZyA9PSBDWFQ1MDY2X0FTVVM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCS8qIG5vIFMvUERJRiBvdXQgKi8KLQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOworCQlpZiAoYm9hcmRfY29uZmlnID09IENYVDUwNjZfSFBfTEFQVE9QKQorCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOwogCQkvKiBpbnB1dCBzb3VyY2UgYXV0b21hdGljYWxseSBzZWxlY3RlZCAqLwogCQlzcGVjLT5pbnB1dF9tdXggPSBOVUxMOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CkBAIC0zMjA3LDcgKzMyMjgsNyBAQAogCQlicmVhazsKIAljYXNlIENYVDUwNjZfREVMTF9WT1NUUk86CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdm9zdHJvX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic192b3N0cm87CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXJfb2xwYzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKQEAgLTMyMjQsNyArMzI0NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9JREVBUEFEOgogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X2lkZWFwYWRfZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX2lkZWFwYWQ7CkBAIC0zMjQwLDcgKzMyNjEsNyBAQAogCQlicmVhazsKIAljYXNlIENYVDUwNjZfVEhJTktQQUQ6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdGhpbmtwYWRfZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX3RoaW5rcGFkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwppbmRleCAyZDViODNmLi5hNTg3Njc3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwpAQCAtNjQyLDYgKzY0Miw3IEBACiAJCQloZG1pX2FpLT52ZXIJCT0gMHgwMTsKIAkJCWhkbWlfYWktPmxlbgkJPSAweDBhOwogCQkJaGRtaV9haS0+Q0MwMl9DVDQ3CT0gY2hhbm5lbHMgLSAxOworCQkJaGRtaV9haS0+Q0EJCT0gY2E7CiAJCQloZG1pX2NoZWNrc3VtX2F1ZGlvX2luZm9mcmFtZShoZG1pX2FpKTsKIAkJfSBlbHNlIGlmIChzcGVjLT5zaW5rX2VsZFtpXS5jb25uX3R5cGUgPT0gMSkgeyAvKiBEaXNwbGF5UG9ydCAqLwogCQkJc3RydWN0IGRwX2F1ZGlvX2luZm9mcmFtZSAqZHBfYWk7CkBAIC02NTEsNiArNjUyLDcgQEAKIAkJCWRwX2FpLT5sZW4JCT0gMHgxYjsKIAkJCWRwX2FpLT52ZXIJCT0gMHgxMSA8PCAyOwogCQkJZHBfYWktPkNDMDJfQ1Q0Nwk9IGNoYW5uZWxzIC0gMTsKKwkJCWRwX2FpLT5DQQkJPSBjYTsKIAkJfSBlbHNlIHsKIAkJCXNuZF9wcmludGQoIkhETUk6IHVua25vd24gY29ubmVjdGlvbiB0eXBlIGF0IHBpbiAlZFxuIiwKIAkJCQkgICBwaW5fbmlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggYmU0ZGY0Yy4uMzMyOGEyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTIyOTAsNiArMjI5MCwyOSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDIsIDB4MCwKKwkJSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMiwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAxLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDEsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU2lkZSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLApAQCAtMTAzNTksNyArMTAzODIsNyBAQAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEddID0gewotCQkubWl4ZXJzID0geyBhbGM4ODhfYmFzZV9taXhlciwKKwkJLm1peGVycyA9IHsgYWxjODg4X2FjZXJfYXNwaXJlXzQ5MzBnX21peGVyLAogCQkJCWFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4M19pbml0X3ZlcmJzLCBhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicywKIAkJCQlhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfdmVyYnMgfSwKQEAgLTE0OTU0LDkgKzE0OTc3LDExIEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA4NCwgIlNvbnkgVkFJTyIsIEFMQzI3NV9GSVhVUF9TT05ZX0hXRVEpLAogCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA0ZCwgIlNvbnkgVkFJTyIsIEFMQzI2OV9GSVhVUF9TT05ZX1ZBSU8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA0NzAsICJEZWxsIE0xMDF6IiwgQUxDMjY5X0ZJWFVQX0RFTExfTTEwMVopLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjgsICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxZTksICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwZjIsICJUaGlua3BhZCBTTDQxMC81MTAiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjE1ZSwgIlRoaW5rcGFkIEw1MTIiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiOCwgIlRoaW5rcGFkIEVkZ2UgMTQiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjYSwgIlRoaW5rcGFkIEw0MTIiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFlOSwgIlRoaW5rcGFkIEVkZ2UgMTUiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MWExMywgIkFzdXMgRzczSnciLCBBTEMyNjlfRklYVVBfQVNVU19HNzNKVyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4OWU1NCwgIkxFTk9WTyBOQiIsIEFMQzI2OV9GSVhVUF9MRU5PVk9fRUFQRCksCiAJe30KQEAgLTE4ODAwLDYgKzE4ODI1LDcgQEAKIAkJCQkJQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxODU0LCAweGYwMDAsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMHgiLAogCQkJICAgQUxDNjYzX0FTVVNfSDEzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTk5MSwgMHg1NjI4LCAiT3JkaXNzaW1vIEVWRSIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCiAJe30KIH07CiAKQEAgLTE5NDkyLDYgKzE5NTE4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM2NjJfZml4dXBfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDMwOCwgIkFjZXIgQXNwaXJlIDg5NDJHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDM4YiwgIkFjZXIgQXNwaXJlIDg5NDNHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzA1MSwgIlNhbXN1bmcgUjcyMCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIElkZWFwYWQgWTU1MFAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAppbmRleCBjMmFlNjNkLi5mNTM4OTdhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKQEAgLTkyLDYgKzkyLDggQEAKIAl2b2lkICgqdXBkYXRlX2RhY192b2x1bWUpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCp1cGRhdGVfZGFjX211dGUpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCp1cGRhdGVfY2VudGVyX2xmZV9taXgpKHN0cnVjdCBveHlnZW4gKmNoaXAsIGJvb2wgbWl4ZWQpOworCXVuc2lnbmVkIGludCAoKmFkanVzdF9kYWNfcm91dGluZykoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHBsYXlfcm91dGluZyk7CiAJdm9pZCAoKmdwaW9fY2hhbmdlZCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKnVhcnRfaW5wdXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCphYzk3X3N3aXRjaCkoc3RydWN0IG94eWdlbiAqY2hpcCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCmluZGV4IDliZmYxNGQuLjI2YzdlOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYwpAQCAtMTgwLDYgKzE4MCw4IEBACiAJCQkgICAgKDEgPDwgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfU0hJRlQpIHwKIAkJCSAgICAoMiA8PCBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9TSElGVCkgfAogCQkJICAgICgzIDw8IE9YWUdFTl9QTEFZX0RBQzNfU09VUkNFX1NISUZUKTsKKwlpZiAoY2hpcC0+bW9kZWwuYWRqdXN0X2RhY19yb3V0aW5nKQorCQlyZWdfdmFsdWUgPSBjaGlwLT5tb2RlbC5hZGp1c3RfZGFjX3JvdXRpbmcoY2hpcCwgcmVnX3ZhbHVlKTsKIAlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX1BMQVlfUk9VVElORywgcmVnX3ZhbHVlLAogCQkJICAgICAgT1hZR0VOX1BMQVlfREFDMF9TT1VSQ0VfTUFTSyB8CiAJCQkgICAgICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9NQVNLIHwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jCmluZGV4IDlmNzJkNDIuLjI1MjcxOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYwpAQCAtMzkyLDcgKzM5Miw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbkNTNDM5ODogNz8iKTsKLQlmb3IgKGkgPSAyOyBpIDw9IDg7ICsraSkKKwlmb3IgKGkgPSAyOyBpIDwgODsgKytpKQogCQlzbmRfaXByaW50ZihidWZmZXIsICIgJTAyeCIsIGRhdGEtPmNzNDM5OF9yZWdzW2ldKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCWR1bXBfY3M0MzYyYV9yZWdpc3RlcnMoZGF0YSwgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYwppbmRleCBlMWZhNjAyLi5iYzZlYjU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jCkBAIC0yNCw2ICsyNCwxMSBAQAogICoKICAqICAgU1BJIDAgLT4gQ1M0MjQ1CiAgKgorICogICBJwrJTIDEgLT4gQ1M0MjQ1CisgKiAgIEnCslMgMiAtPiBDUzQzNjEgKGNlbnRlci9MRkUpCisgKiAgIEnCslMgMyAtPiBDUzQzNjEgKHN1cnJvdW5kKQorICogICBJwrJTIDQgLT4gQ1M0MzYxIChmcm9udCkKKyAqCiAgKiAgIEdQSU8gMyA8LSA/CiAgKiAgIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0CiAgKiAgIEdQSU8gNSAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAoMSkKQEAgLTM2LDYgKzQxLDcgQEAKICAqICAgaW5wdXQgMSA8LSBhdXgKICAqICAgaW5wdXQgMiA8LSBmcm9udCBtaWMKICAqICAgaW5wdXQgNCA8LSBsaW5lL21pYworICogICBEQUMgb3V0IC0+IGhlYWRwaG9uZXMKICAqICAgYXV4IG91dCAtPiBmcm9udCBwYW5lbCBoZWFkcGhvbmVzCiAgKi8KIApAQCAtMjA3LDYgKzIxMywzNSBAQAogCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X0FEQ19DVFJMLCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNoaWZ0X2JpdHModW5zaWduZWQgaW50IHZhbHVlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaGlmdF9mcm9tLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaGlmdF90bywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwlpZiAoc2hpZnRfZnJvbSA8IHNoaWZ0X3RvKQorCQlyZXR1cm4gKHZhbHVlIDw8IChzaGlmdF90byAtIHNoaWZ0X2Zyb20pKSAmIG1hc2s7CisJZWxzZQorCQlyZXR1cm4gKHZhbHVlID4+IChzaGlmdF9mcm9tIC0gc2hpZnRfdG8pKSAmIG1hc2s7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWRqdXN0X2RnX2RhY19yb3V0aW5nKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJCSAgdW5zaWduZWQgaW50IHBsYXlfcm91dGluZykKK3sKKwlyZXR1cm4gKHBsYXlfcm91dGluZyAmIE9YWUdFTl9QTEFZX0RBQzBfU09VUkNFX01BU0spIHwKKwkgICAgICAgc2hpZnRfYml0cyhwbGF5X3JvdXRpbmcsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfTUFTSykgfAorCSAgICAgICBzaGlmdF9iaXRzKHBsYXlfcm91dGluZywKKwkJCSAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9NQVNLKSB8CisJICAgICAgIHNoaWZ0X2JpdHMocGxheV9yb3V0aW5nLAorCQkJICBPWFlHRU5fUExBWV9EQUMwX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzNfU09VUkNFX01BU0spOworfQorCiBzdGF0aWMgaW50IG91dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCiB7CkBAIC01NTcsNiArNTkyLDcgQEAKIAkucmVzdW1lID0gZGdfcmVzdW1lLAogCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9jczQyNDVfZGFjX3BhcmFtcywKIAkuc2V0X2FkY19wYXJhbXMgPSBzZXRfY3M0MjQ1X2FkY19wYXJhbXMsCisJLmFkanVzdF9kYWNfcm91dGluZyA9IGFkanVzdF9kZ19kYWNfcm91dGluZywKIAkuZHVtcF9yZWdpc3RlcnMgPSBkdW1wX2NzNDI0NV9yZWdpc3RlcnMsCiAJLm1vZGVsX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZGcpLAogCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfApkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaCBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKaW5kZXggYmQyNmUwOS4uNmNlOWFkNyAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaAorKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIF9fUERBVURJT0NGX0gKIAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBfb3BzLmMKaW5kZXggOTg5ZTA0YS4uZmUzM2UxMiAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInZ4cG9ja2V0LmgiCiAKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYyBiL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMKaW5kZXggZGEyMjA4ZS4uNWU0ZDQ5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAkuY3B1X2RhaV9uYW1lID0gImF0bWVsLXNzYy1kYWkuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzIzLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gImF0bWVsX3BjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAidGx2MzIwYWljMjMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ0bHYzMjBhaWMyMy1jb2RlYy4wLTAwMWEiLAogCS5pbml0ID0gYWZlYjkyNjBfdGx2MzIwYWljMjNfaW5pdCwKIAkub3BzID0gJmFmZWI5MjYwX29wcywKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYwppbmRleCBlOTAyYjI0Li5hZDI4NjYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYmY1eHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAic3NtMjYwMi1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJiZjV4eC1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gInNzbTI2MDItY29kZWMuMC0weDFiIiwKKwkuY29kZWNfbmFtZSA9ICJzc20yNjAyLWNvZGVjLjAtMDAxYiIsCiAJLm9wcyA9ICZiZjV4eF9zc20yNjAyX29wcywKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jCmluZGV4IDQ2ZGJmZDAuLjM0N2E1NjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIHN0YXRpYyBpbnQgY3E5M3ZjX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgZGF2aW5jaV92YyAqZGF2aW5jaV92YyA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRhdmluY2lfdmMgKmRhdmluY2lfdmMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCWRhdmluY2lfdmMtPmNxOTN2Yy5jb2RlYyA9IGNvZGVjOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBkYXZpbmNpX3ZjOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwppbmRleCAwM2QxZTg2Li5iYjRiZjY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwpAQCAtMzY3LDkgKzM2NywxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgdTggY3gyMDQ0Ml9yZWcgPSBDWDIwNDQyX1RFTE9VVCB8IENYMjA0NDJfTUlDOworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIGN4MjA0NDJfY29kZWNfZGV2ID0gewogCS5wcm9iZSA9IAljeDIwNDQyX2NvZGVjX3Byb2JlLAogCS5yZW1vdmUgPSAJY3gyMDQ0Ml9jb2RlY19yZW1vdmUsCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gJmN4MjA0NDJfcmVnLAogCS5yZWdfY2FjaGVfc2l6ZSA9IDEsCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAogCS5yZWFkID0gY3gyMDQ0Ml9yZWFkX3JlZ19jYWNoZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDI0N2E2YTkuLjM3YjhhYTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMTI4Nyw5ICsxMjg3LDkgQEAKIFNORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9TVVBQTFkoIkFJRjJDTEsiLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKIAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxTCIsICJBSUYxIENhcHR1cmUiLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxTCIsIE5VTEwsCiAJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgOSwgMCksCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFSIiwgIkFJRjEgQ2FwdHVyZSIsCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFSIiwgTlVMTCwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA4LCAwKSwKIFNORF9TT0NfREFQTV9BSUZfSU5fRSgiQUlGMURBQzFMIiwgTlVMTCwgMCwKIAkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOSwgMCwgd204OTU4X2FpZl9ldiwKQEAgLTEyOTgsOSArMTI5OCw5IEBACiAJCSAgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDgsIDAsIHdtODk1OF9haWZfZXYsCiAJCSAgICAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCiAKLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMkwiLCAiQUlGMSBDYXB0dXJlIiwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMkwiLCBOVUxMLAogCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDExLCAwKSwKLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMlIiLCAiQUlGMSBDYXB0dXJlIiwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMlIiLCBOVUxMLAogCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEwLCAwKSwKIFNORF9TT0NfREFQTV9BSUZfSU5fRSgiQUlGMURBQzJMIiwgTlVMTCwgMCwKIAkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTEsIDAsIHdtODk1OF9haWZfZXYsCkBAIC0xMzQ1LDYgKzEzNDUsNyBAQAogCiBTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDREFUIiwgIkFJRjEgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAogU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ0RBVCIsICJBSUYyIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDREFUIiwgIkFJRjEgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCiBTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMkFEQ0RBVCIsICJBSUYyIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAogCiBTTkRfU09DX0RBUE1fTVVYKCJBSUYxREFDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjFkYWNfbXV4KSwKQEAgLTE1NDYsNiArMTU0NywxMSBAQAogCXsgIkFJRjJEQUMyUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAogCXsgIkFJRjJEQUMyUiBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCiAKKwl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjFBREMxTCIgfSwKKwl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjFBREMxUiIgfSwKKwl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjFBREMyTCIgfSwKKwl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjFBREMyUiIgfSwKKwogCXsgIkFJRjJBRENEQVQiLCBOVUxMLCAiQUlGMkFEQyBNdXgiIH0sCiAKIAkvKiBBSUYzIG91dHB1dCAqLwpAQCAtMTU3OCw2ICsxNTg0LDEzIEBACiAJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDMVIiIH0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg5OTRfcmV2ZF9pbnRlcmNvbltdID0geworCXsgIkFJRjFEQUNEQVQiLCBOVUxMLCAiQUlGMkRBQ0RBVCIgfSwKKwl7ICJBSUYyREFDREFUIiwgTlVMTCwgIkFJRjFEQUNEQVQiIH0sCisJeyAiQUlGMUFEQ0RBVCIsIE5VTEwsICJBSUYyQURDREFUIiB9LAorCXsgIkFJRjJBRENEQVQiLCBOVUxMLCAiQUlGMUFEQ0RBVCIgfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9pbnRlcmNvbltdID0gewogCXsgIkFJRjJEQUNMIiwgTlVMTCwgIkFJRjJEQUMgTXV4IiB9LAogCXsgIkFJRjJEQUNSIiwgTlVMTCwgIkFJRjJEQUMgTXV4IiB9LApAQCAtMjM4Niw3ICsyMzk5LDcgQEAKIAllbHNlCiAJCXZhbCA9IDA7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCByZWcpOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiB9CiAKICNkZWZpbmUgV004OTk0X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKQEAgLTMxMjksNiArMzE0MiwxMSBAQAogCWNhc2UgV004OTk0OgogCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5OTRfaW50ZXJjb24sCiAJCQkJCUFSUkFZX1NJWkUod204OTk0X2ludGVyY29uKSk7CisKKwkJaWYgKHdtODk5NC0+cmV2aXNpb24gPCA0KQorCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X3JldmRfaW50ZXJjb24sCisJCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9yZXZkX2ludGVyY29uKSk7CisJCQkKIAkJYnJlYWs7CiAJY2FzZSBXTTg5NTg6CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk1OF9pbnRlcmNvbiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCmluZGV4IDYwNDVjYmQuLjYwOGM4NGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAllbHNlCiAJCXZhbCA9IDA7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCByZWcpOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiB9CiAKIC8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBjNDY2OTgyLi42MTNkZjVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtOTEsNiArOTEsNyBAQAogc3RhdGljIHZvaWQgY2FsaWJyYXRlX2RjX3NlcnZvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJczggb2Zmc2V0OwogCXUxNiByZWcsIHJlZ19sLCByZWdfciwgZGNzX2NmZzsKIAogCS8qIElmIHdlJ3JlIHVzaW5nIGEgZGlnaXRhbCBvbmx5IHBhdGggYW5kIGhhdmUgYSBwcmV2aW91c2x5CkBAIC0xNDksMTYgKzE1MCwxNCBAQAogCQkJaHVicy0+ZGNzX2NvZGVzKTsKIAogCQkvKiBIUE9VVDFMICovCi0JCWlmIChyZWdfbCArIGh1YnMtPmRjc19jb2RlcyA+IDAgJiYKLQkJICAgIHJlZ19sICsgaHVicy0+ZGNzX2NvZGVzIDwgMHhmZikKLQkJCXJlZ19sICs9IGh1YnMtPmRjc19jb2RlczsKLQkJZGNzX2NmZyA9IHJlZ19sIDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOworCQlvZmZzZXQgPSByZWdfbDsKKwkJb2Zmc2V0ICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyA9ICh1OClvZmZzZXQgPDwgV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7CiAKIAkJLyogSFBPVVQxUiAqLwotCQlpZiAocmVnX3IgKyBodWJzLT5kY3NfY29kZXMgPiAwICYmCi0JCSAgICByZWdfciArIGh1YnMtPmRjc19jb2RlcyA8IDB4ZmYpCi0JCQlyZWdfciArPSBodWJzLT5kY3NfY29kZXM7Ci0JCWRjc19jZmcgfD0gcmVnX3I7CisJCW9mZnNldCA9IHJlZ19yOworCQlvZmZzZXQgKz0gaHVicy0+ZGNzX2NvZGVzOworCQlkY3NfY2ZnIHw9ICh1OClvZmZzZXQ7CiAKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRENTIHJlc3VsdDogJXhcbiIsIGRjc19jZmcpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCAwYzJkNmJhLi5mZTc5ODQyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTIxOCwxMiArMjE4LDI0IEBACiAJCS5vcHMgPSAmZXZtX3NwZGlmX29wcywKIAl9LAogfTsKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYTh4eF9ldm1fZGFpID0geworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZGE4MzBfZXZtX2RhaSA9IHsKKwkubmFtZSA9ICJUTFYzMjBBSUMzWCIsCisJLnN0cmVhbV9uYW1lID0gIkFJQzNYIiwKKwkuY3B1X2RhaV9uYW1lID0gImRhdmluY2ktbWNhc3AuMSIsCisJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAorCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjEtMDAxOCIsCisJLnBsYXRmb3JtX25hbWUgPSAiZGF2aW5jaS1wY20tYXVkaW8iLAorCS5pbml0ID0gZXZtX2FpYzN4X2luaXQsCisJLm9wcyA9ICZldm1fb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRhODUwX2V2bV9kYWkgPSB7CiAJLm5hbWUgPSAiVExWMzIwQUlDM1giLAogCS5zdHJlYW1fbmFtZSA9ICJBSUMzWCIsCiAJLmNwdV9kYWlfbmFtZT0gImRhdmluY2ktbWNhc3AuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAotCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMS0wMDE4IiwKIAkucGxhdGZvcm1fbmFtZSA9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCiAJLmluaXQgPSBldm1fYWljM3hfaW5pdCwKIAkub3BzID0gJmV2bV9vcHMsCkBAIC0yNTksMTMgKzI3MSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYTgzMF9zbmRfc29jX2NhcmQgPSB7CiAJLm5hbWUgPSAiREE4MzAvT01BUC1MMTM3IEVWTSIsCi0JLmRhaV9saW5rID0gJmRhOHh4X2V2bV9kYWksCisJLmRhaV9saW5rID0gJmRhODMwX2V2bV9kYWksCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYTg1MF9zbmRfc29jX2NhcmQgPSB7CiAJLm5hbWUgPSAiREE4NTAvT01BUC1MMTM4IEVWTSIsCi0JLmRhaV9saW5rID0gJmRhOHh4X2V2bV9kYWksCisJLmRhaV9saW5rID0gJmRhODUwX2V2bV9kYWksCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCmluZGV4IDIxMDFiZGMuLjMxNjdiZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCkBAIC01MDcsOCArNTA3LDYgQEAKIAkvKiBTZXQgdXAgZGlnaXRhbCBtdXRlIGlmIG5vdCBwcm92aWRlZCBieSB0aGUgY29kZWMgKi8KIAlpZiAoIWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMpIHsKIAkJY29kZWNfZGFpLT5kcml2ZXItPm9wcyA9ICZhbXNfZGVsdGFfZGFpX29wczsKLQl9IGVsc2UgaWYgKCFjb2RlY19kYWktPmRyaXZlci0+b3BzLT5kaWdpdGFsX211dGUpIHsKLQkJY29kZWNfZGFpLT5kcml2ZXItPm9wcy0+ZGlnaXRhbF9tdXRlID0gYW1zX2RlbHRhX2RpZ2l0YWxfbXV0ZTsKIAl9IGVsc2UgewogCQlhbXNfZGVsdGFfb3BzLnN0YXJ0dXAgPSBhbXNfZGVsdGFfc3RhcnR1cDsKIAkJYW1zX2RlbHRhX29wcy5zaHV0ZG93biA9IGFtc19kZWx0YV9zaHV0ZG93bjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwppbmRleCBmYzU5MmYwLi43ODRjZmY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKKysrIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCkBAIC0zMDcsMTAgKzMwNywxMCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGNvcmdpX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg3MzEiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3MzEiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWlzMi1kYWkiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODczMS1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMtMC4wMDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMtMC4wMDFiIiwKIAkuaW5pdCA9IGNvcmdpX3dtODczMV9pbml0LAogCS5vcHMgPSAmY29yZ2lfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCmluZGV4IDYyOThlZTEuLmE3ZDQ5OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKKysrIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzMxLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy4wLTAwMWEiLAorCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy4wLTAwMWIiLAogCS5pbml0ID0gcG9vZGxlX3dtODczMV9pbml0LAogCS5vcHMgPSAmcG9vZGxlX29wcywKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggYzJhY2I2OS4uOGUxNTcxMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtMzE1LDEwICszMTUsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzcGl0el9kYWkgPSB7CiAJLm5hbWUgPSAid204NzUwIiwKIAkuc3RyZWFtX25hbWUgPSAiV004NzUwIiwKLQkuY3B1X2RhaV9uYW1lID0gInB4YS1pczIiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1MC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTAtY29kZWMuMC0wMDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTAtY29kZWMuMC0wMDFiIiwKIAkuaW5pdCA9IHNwaXR6X3dtODc1MF9pbml0LAogCS5vcHMgPSAmc3BpdHpfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCmluZGV4IDNlZWM2MTAuLjBkMGFlMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpAQCAtMzk3LDExICszOTcsMTEgQEAKIHsgLyogSGlmaSBQbGF5YmFjayAtIGZvciBzaW1pbGF0aW91cyB1c2Ugd2l0aCB2b2ljZSBiZWxvdyAqLwogCS5uYW1lID0gIldNODc1MyIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKLQkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaTJzIiwKKwkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLWhpZmkiLAogCS5pbml0ID0gbmVvMTk3M19ndGEwMl93bTg3NTNfaW5pdCwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJm5lbzE5NzNfZ3RhMDJfaGlmaV9vcHMsCiB9LAogeyAvKiBWb2ljZSB2aWEgQlQgKi8KQEAgLTQxMCw3ICs0MTAsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCiAJLm9wcyA9ICZuZW8xOTczX2d0YTAyX3ZvaWNlX29wcywKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggYzdhMjQ1MS4uZDIwODE1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC01NTksOSArNTU5LDkgQEAKIAkubmFtZSA9ICJXTTg3NTMiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3NTMgSGlGaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCisJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My1oaWZpIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IG5lbzE5NzNfd204NzUzX2luaXQsCiAJLm9wcyA9ICZuZW8xOTczX2hpZmlfb3BzLAogfSwKQEAgLTU3MSw3ICs1NzEsNyBAQAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCi0JLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMDAxYSIsCiAJLm9wcyA9ICZuZW8xOTczX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwppbmRleCBiYjQyOTJlLi4wOGZjYWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwpAQCAtOTQsOCArOTQsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNpbXRlY19kYWlfYWljMzMgPSB7CiAJLm5hbWUJCT0gInRsdjMyMGFpYzMzIiwKIAkuc3RyZWFtX25hbWUJPSAiVExWMzIwQUlDMzMiLAotCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMHgxYSIsCi0JLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWkycyIsCisJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0wMDFhIiwKKwkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmluaXQJCT0gc2ltdGVjX2hlcm1lc19pbml0LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKaW5kZXggZmJiYTRlMy4uMTE2ZTNlNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCkBAIC04NSw4ICs4NSw4IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMyMyA9IHsKIAkubmFtZQkJPSAidGx2MzIwYWljMjMiLAogCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMyMyIsCi0JLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0weDFhIiwKLQkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaTJzIiwKKwkuY29kZWNfbmFtZQk9ICJ0bHYzMjBhaWMzeC1jb2RlYy4wLTAwMWEiLAorCS5jcHVfZGFpX25hbWUJPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMzeC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuaW5pdAkJPSBzaW10ZWNfdGx2MzIwYWljMjNfaW5pdCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggY2RjOGVjYi4uMmMwOWU5MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJVREExMzRYIiwKIAkuY29kZWNfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1pMnMiLAorCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAogCS5vcHMgPSAmczNjMjR4eF91ZGExMzR4X29wcywKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGJhYzcyOTEuLmMzZjZmMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xNDQ5LDYgKzE0NDksNyBAQAogCQlydGQgPSAmY2FyZC0+cnRkX2F1eFtudW1dOwogCQluYW1lID0gYXV4X2Rldi0+bmFtZTsKIAl9CisJcnRkLT5jYXJkID0gY2FyZDsKIAogCS8qIG1hY2hpbmUgY29udHJvbHMsIHJvdXRlcyBhbmQgd2lkZ2V0cyBhcmUgbm90IHByZWZpeGVkICovCiAJdGVtcCA9IGNvZGVjLT5uYW1lX3ByZWZpeDsKQEAgLTE0NzEsNyArMTQ3Miw2IEBACiAKIAkvKiByZWdpc3RlciB0aGUgcnRkIGRldmljZSAqLwogCXJ0ZC0+Y29kZWMgPSBjb2RlYzsKLQlydGQtPmNhcmQgPSBjYXJkOwogCXJ0ZC0+ZGV2LnBhcmVudCA9IGNhcmQtPmRldjsKIAlydGQtPmRldi5yZWxlYXNlID0gcnRkX3JlbGVhc2U7CiAJcnRkLT5kZXYuaW5pdF9uYW1lID0gbmFtZTsKQEAgLTE2NjQsOSArMTY2NCw2IEBACiAJZ290byBvdXQ7CiAKIGZvdW5kOgotCWlmICghdHJ5X21vZHVsZV9nZXQoY29kZWMtPmRldi0+ZHJpdmVyLT5vd25lcikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0gc29jX3Byb2JlX2NvZGVjKGNhcmQsIGNvZGVjKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggNDk5NzMwYS4uODE5NGYxNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTE3NDIsNyArMTc0Miw3IEBACiAJaW50IG1heCA9IG1jLT5tYXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBmbHMobWF4KSkgLSAxOwogCXVuc2lnbmVkIGludCBpbnZlcnQgPSBtYy0+aW52ZXJ0OwotCXVuc2lnbmVkIGludCB2YWwsIHZhbF9tYXNrOworCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvbm5lY3QsIGNoYW5nZTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSB1cGRhdGU7CiAKQEAgLTE3NTAsMTMgKzE3NTAsMTMgQEAKIAogCWlmIChpbnZlcnQpCiAJCXZhbCA9IG1heCAtIHZhbDsKLQl2YWxfbWFzayA9IG1hc2sgPDwgc2hpZnQ7CisJbWFzayA9IG1hc2sgPDwgc2hpZnQ7CiAJdmFsID0gdmFsIDw8IHNoaWZ0OwogCiAJbXV0ZXhfbG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwogCXdpZGdldC0+dmFsdWUgPSB2YWw7CiAKLQljaGFuZ2UgPSBzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpOworCWNoYW5nZSA9IHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgbWFzaywgdmFsKTsKIAlpZiAoY2hhbmdlKSB7CiAJCWlmICh2YWwpCiAJCQkvKiBuZXcgY29ubmVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyLmMgYi9zb3VuZC91c2IvbWl4ZXIuYwppbmRleCA3ZGY4OWIzLi44NWFmNjA1IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXIuYworKysgYi9zb3VuZC91c2IvbWl4ZXIuYwpAQCAtOTUsNyArOTUsNyBAQAogfTsKIAogCi0vKkUtbXUgMDIwMigwNDA0KSBlWHRlbnNpb24gVW5pdChYVSkgY29udHJvbCovCisvKkUtbXUgMDIwMi8wNDA0LzAyMDQgZVh0ZW5zaW9uIFVuaXQoWFUpIGNvbnRyb2wqLwogZW51bSB7CiAJVVNCX1hVX0NMT0NLX1JBVEUgCQk9IDB4ZTMwMSwKIAlVU0JfWFVfQ0xPQ0tfU09VUkNFCQk9IDB4ZTMwMiwKQEAgLTE1NjYsNyArMTU2Niw3IEBACiAJCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CiAJCX0gZWxzZSB7CiAJCQlpZiAodHlwZSA9PSBVU0JfWFVfQ0xPQ0tfUkFURSkgewotCQkJCS8qIEUtTXUgVVNCIDA0MDQvMDIwMi9UcmFja2VyUHJlCisJCQkJLyogRS1NdSBVU0IgMDQwNC8wMjAyL1RyYWNrZXJQcmUvMDIwNAogCQkJCSAqIHNhbXBsZXJhdGUgY29udHJvbCBxdWlyawogCQkJCSAqLwogCQkJCWN2YWwtPm1pbiA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmggYi9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKaW5kZXggMzU5OTk4Ny4uOTIxYTg2ZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCisrKyBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaApAQCAtNzksNiArNzksMTMgQEAKIAkuaWRQcm9kdWN0ID0gMHgzZjBhLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCiB9LAoreworCS8qIEUtTXUgMDIwNCBVU0IgKi8KKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IgPSAweDA0MWUsCisJLmlkUHJvZHVjdCA9IDB4M2YxOSwKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorfSwKIAogLyoKICAqIExvZ2l0ZWNoIFF1aWNrQ2FtOiBiRGV2aWNlQ2xhc3MgaXMgdmVuZG9yLXNwZWNpZmljLCBzbyBnZW5lcmljIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IGNmOGJmMDguLmUzMTRjZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTUzMiw3ICs1MzIsNyBAQAogfQogCiAvKgotICogRm9yIEUtTXUgMDQwNFVTQi8wMjAyVVNCL1RyYWNrZXJQcmUgc2FtcGxlIHJhdGUgc2hvdWxkIGJlIHNldCBmb3IgZGV2aWNlLAorICogRm9yIEUtTXUgMDQwNFVTQi8wMjAyVVNCL1RyYWNrZXJQcmUvMDIwNCBzYW1wbGUgcmF0ZSBzaG91bGQgYmUgc2V0IGZvciBkZXZpY2UsCiAgKiBub3QgZm9yIGludGVyZmFjZS4KICAqLwogCkBAIC01ODksNiArNTg5LDcgQEAKIAljYXNlIFVTQl9JRCgweDA0MWUsIDB4M2YwMik6IC8qIEUtTXUgMDIwMiBVU0IgKi8KIAljYXNlIFVTQl9JRCgweDA0MWUsIDB4M2YwNCk6IC8qIEUtTXUgMDQwNCBVU0IgKi8KIAljYXNlIFVTQl9JRCgweDA0MWUsIDB4M2YwYSk6IC8qIEUtTXUgVHJhY2tlciBQcmUgKi8KKwljYXNlIFVTQl9JRCgweDA0MWUsIDB4M2YxOSk6IC8qIEUtTXUgMDIwNCBVU0IgKi8KIAkJc2V0X2Zvcm1hdF9lbXVfcXVpcmsoc3VicywgZm10KTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMmI1Mzg3ZC4uNzE0MWM0MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yMDQsMTMgKzIwNCwxMSBAQAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdpbml0LXNlbGYKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XcGFja2VkCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3JlZHVuZGFudC1kZWNscwotRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzdGFjay1wcm90ZWN0b3IKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RyaWN0LWFsaWFzaW5nPTMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3dpdGNoLWRlZmF1bHQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3dpdGNoLWVudW0KIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xbm8tc3lzdGVtLWhlYWRlcnMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XdW5kZWYKLUVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3dyaXRlLXN0cmluZ3MKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XYmFkLWZ1bmN0aW9uLWNhc3QKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMKQEAgLTI5NCw2ICsyOTIsMTMgQEAKIAlDRkxBR1MgOj0gJChDRkxBR1MpIC1mc3RhY2stcHJvdGVjdG9yLWFsbAogZW5kaWYKIAoraWZlcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9IRUxMTyksLVdlcnJvciAtV3N0YWNrLXByb3RlY3RvcikseSkKKyAgICAgICBDRkxBR1MgOj0gJChDRkxBR1MpIC1Xc3RhY2stcHJvdGVjdG9yCitlbmRpZgorCitpZmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0hFTExPKSwtV2Vycm9yIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyKSx5KQorICAgICAgIENGTEFHUyA6PSAkKENGTEFHUykgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIKK2VuZGlmCiAKICMjIyAtLS0gRU5EIENPTkZJR1VSQVRJT04gU0VDVElPTiAtLS0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCBjMDU2Y2RjLi44ODc5NDYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJCQljb250aW51ZTsKIAogCQlvZmZzZXQgPSBzdGFydCArIGk7Ci0JCXNwcmludGYoY21kLCAiYWRkcjJsaW5lIC1lICVzICUwMTZsbHgiLCBmaWxlbmFtZSwgb2Zmc2V0KTsKKwkJc3ByaW50ZihjbWQsICJhZGRyMmxpbmUgLWUgJXMgJTAxNiIgUFJJeDY0LCBmaWxlbmFtZSwgb2Zmc2V0KTsKIAkJZnAgPSBwb3BlbihjbWQsICJyIik7CiAJCWlmICghZnApCiAJCQljb250aW51ZTsKQEAgLTI3MCw5ICsyNzAsOSBAQAogCiAJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW47ICsrb2Zmc2V0KQogCQlpZiAoaC0+aXBbb2Zmc2V0XSAhPSAwKQotCQkJcHJpbnRmKCIlKkx4OiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLAorCQkJcHJpbnRmKCIlKiIgUFJJeDY0ICI6ICUiIFBSSXU2NCAiXG4iLCBCSVRTX1BFUl9MT05HIC8gMiwKIAkJCSAgICAgICBzeW0tPnN0YXJ0ICsgb2Zmc2V0LCBoLT5pcFtvZmZzZXRdKTsKLQlwcmludGYoIiUqczogJUx1XG4iLCBCSVRTX1BFUl9MT05HIC8gMiwgImgtPnN1bSIsIGgtPnN1bSk7CisJcHJpbnRmKCIlKnM6ICUiIFBSSXU2NCAiXG4iLCBCSVRTX1BFUl9MT05HIC8gMiwgImgtPnN1bSIsIGgtPnN1bSk7CiB9CiAKIHN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fdHR5X2Fubm90YXRlKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCmluZGV4IGRlZjdkZGMuLmQ5NzI1NmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpAQCAtMzcxLDEwICszNzEsMTAgQEAKIAkJCWFkZHIgPSBkYXRhLT5wdHI7CiAKIAkJaWYgKHN5bSAhPSBOVUxMKQotCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzKyVMeCIsIHN5bS0+bmFtZSwKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyslIiBQUkl4NjQgIiIsIHN5bS0+bmFtZSwKIAkJCQkgYWRkciAtIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPnN0YXJ0KSk7CiAJCWVsc2UKLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlI0x4IiwgYWRkcik7CisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSMiIFBSSXg2NCAiIiwgYWRkcik7CiAJCXByaW50ZigiICUtMzRzIHwiLCBidWYpOwogCiAJCXByaW50ZigiICU5bGx1LyUtNWx1IHwgJTlsbHUvJS01bHUgfCAlOGx1IHwgJThsdSB8ICU2LjNmJSVcbiIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwppbmRleCBiOWM2ZTU0Li4yYjM2ZGVmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKQEAgLTc4Miw5ICs3ODIsOSBAQAogCQlwcl9pbmZvKCIlMTB1ICIsIHN0LT5ucl9hY3F1aXJlZCk7CiAJCXByX2luZm8oIiUxMHUgIiwgc3QtPm5yX2NvbnRlbmRlZCk7CiAKLQkJcHJfaW5mbygiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfdG90YWwpOwotCQlwcl9pbmZvKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9tYXgpOwotCQlwcl9pbmZvKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9taW4gPT0gVUxMT05HX01BWCA/CisJCXByX2luZm8oIiUxNSIgUFJJdTY0ICIgIiwgc3QtPndhaXRfdGltZV90b3RhbCk7CisJCXByX2luZm8oIiUxNSIgUFJJdTY0ICIgIiwgc3QtPndhaXRfdGltZV9tYXgpOworCQlwcl9pbmZvKCIlMTUiIFBSSXU2NCAiICIsIHN0LT53YWl0X3RpbWVfbWluID09IFVMTE9OR19NQVggPwogCQkgICAgICAgMCA6IHN0LT53YWl0X3RpbWVfbWluKTsKIAkJcHJfaW5mbygiXG4iKTsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggZmNkMjllOC4uYjJmNzI5ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJICogQXBwcm94aW1hdGUgUklQIGV2ZW50IHNpemU6IDI0IGJ5dGVzLgogCSAqLwogCWZwcmludGYoc3RkZXJyLAotCQkiWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlICUuM2YgTUIgJXMgKH4lbGxkIHNhbXBsZXMpIF1cbiIsCisJCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyAofiUiIFBSSXU2NCAiIHNhbXBsZXMpIF1cbiIsCiAJCShkb3VibGUpYnl0ZXNfd3JpdHRlbiAvIDEwMjQuMCAvIDEwMjQuMCwKIAkJb3V0cHV0X25hbWUsCiAJCWJ5dGVzX3dyaXR0ZW4gLyAyNCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggNzUxODNhNC4uYzI3ZTMxZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCQkJCSAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiOiAlZCAlZCAlcyAlTHVcbiIsIGV2ZW50LT5yZWFkLnBpZCwgZXZlbnQtPnJlYWQudGlkLAorCWR1bXBfcHJpbnRmKCI6ICVkICVkICVzICUiIFBSSXU2NCAiXG4iLCBldmVudC0+cmVhZC5waWQsIGV2ZW50LT5yZWFkLnRpZCwKIAkJICAgIGF0dHIgPyBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKSA6ICJGQUlMIiwKIAkJICAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCAyOWU3ZmZkLi4yOWFjYjg5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfQogCXJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50ZigicnVuIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlTGQgbnNlY3NcbiIsIG1pbl9kZWx0YSk7CisJcHJpbnRmKCJydW4gbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBtaW5fZGVsdGEpOwogfQogCiBzdGF0aWMgdm9pZCBjYWxpYnJhdGVfc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQodm9pZCkKQEAgLTIxMSw3ICsyMTEsNyBAQAogCW1pbl9kZWx0YSAtPSAxMDAwMDsKIAlzbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50Zigic2xlZXAgbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICVMZCBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKKwlwcmludGYoInNsZWVwIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlIiBQUkl1NjQgIiBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY2hlZF9hdG9tICoKQEAgLTYxNywxMyArNjE3LDEzIEBACiAJYnVybl9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBydW4gdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOworCXByaW50ZigidGhlIHJ1biB0ZXN0IHRvb2sgJSIgUFJJdTY0ICIgbnNlY3NcbiIsIFQxIC0gVDApOwogCiAJVDAgPSBnZXRfbnNlY3MoKTsKIAlzbGVlcF9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBzbGVlcCB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7CisJcHJpbnRmKCJ0aGUgc2xlZXAgdGVzdCB0b29rICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBUMSAtIFQwKTsKIH0KIAogI2RlZmluZSBGSUxMX0ZJRUxEKHB0ciwgZmllbGQsIGV2ZW50LCBkYXRhKQlcCkBAIC04MTYsMTAgKzgxNiwxMCBAQAogCQlkZWx0YSA9IDA7CiAKIAlpZiAoZGVsdGEgPCAwKQotCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CisJCWRpZSgiaG0sIGRlbHRhOiAlIiBQUkl1NjQgIiA8IDAgP1xuIiwgZGVsdGEpOwogCiAJaWYgKHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJUxkIG5zZWNzXVxuIiwKKwkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJSIgUFJJdTY0ICIgbnNlY3NdXG4iLAogCQkJc3dpdGNoX2V2ZW50LT5wcmV2X2NvbW0sIHN3aXRjaF9ldmVudC0+cHJldl9waWQsCiAJCQlzd2l0Y2hfZXZlbnQtPm5leHRfY29tbSwgc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwKIAkJCWRlbHRhKTsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAlhdmcgPSB3b3JrX2xpc3QtPnRvdGFsX2xhdCAvIHdvcmtfbGlzdC0+bmJfYXRvbXM7CiAKLQlwcmludGYoInwlMTEuM2YgbXMgfCU5bGx1IHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAorCXByaW50ZigifCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAogCSAgICAgIChkb3VibGUpd29ya19saXN0LT50b3RhbF9ydW50aW1lIC8gMWU2LAogCQkgd29ya19saXN0LT5uYl9hdG9tcywgKGRvdWJsZSlhdmcgLyAxZTYsCiAJCSAoZG91YmxlKXdvcmtfbGlzdC0+bWF4X2xhdCAvIDFlNiwKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTE3MTMsNyArMTcxMyw3IEBACiAJfQogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTlMZCB8XG4iLAorCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHxcbiIsCiAJCShkb3VibGUpYWxsX3J1bnRpbWUvMWU2LCBhbGxfY291bnQpOwogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwppbmRleCAxNTBhNjA2Li5iNzY2YzJhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCkBAIC03Nyw4ICs3Nyw4IEBACiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CiAJCWlmIChkZWJ1Z19tb2RlKSB7CiAJCQlpZiAoc2FtcGxlLT50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKLQkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICVsbHUgIgotCQkJCQkidGhpczogJWxsdVxuIiwgbGFzdF90aW1lc3RhbXAsCisJCQkJcHJfZXJyKCJTYW1wbGVzIG1pc29yZGVyZWQsIHByZXZpb3VzOiAlIiBQUkl1NjQKKwkJCQkJIiB0aGlzOiAlIiBQUkl1NjQgIlxuIiwgbGFzdF90aW1lc3RhbXAsCiAJCQkJCXNhbXBsZS0+dGltZSk7CiAJCQkJbnJfdW5vcmRlcmVkKys7CiAJCQl9CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCiAJaWYgKGRlYnVnX21vZGUpCi0JCXByX2VycigiTWlzb3JkZXJlZCB0aW1lc3RhbXBzOiAlbGx1XG4iLCBucl91bm9yZGVyZWQpOworCQlwcl9lcnIoIk1pc29yZGVyZWQgdGltZXN0YW1wczogJSIgUFJJdTY0ICJcbiIsIG5yX3Vub3JkZXJlZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMGZmMTFkOS4uYTQ4MmExOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC0yMDYsOCArMjA2LDggQEAKIAkJdXBkYXRlX3N0YXRzKCZwcy0+cmVzX3N0YXRzW2ldLCBjb3VudFtpXSk7CiAKIAlpZiAodmVyYm9zZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlTGQgJUxkICVMZFxuIiwgZXZlbnRfbmFtZShjb3VudGVyKSwKLQkJCQljb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICJcbiIsCisJCQlldmVudF9uYW1lKGNvdW50ZXIpLCBjb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggZWQ1Njk2MS4uNWRjZGJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCQlpZiAobGxhYnMoc2tldykgPCBwYWdlX3NpemUpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJcHJfZGVidWcoIiUjTHg6IGRpZmYgZW5kIGFkZHIgZm9yICVzIHY6ICUjTHggazogJSNMeFxuIiwKKwkJCQlwcl9kZWJ1ZygiJSMiIFBSSXg2NCAiOiBkaWZmIGVuZCBhZGRyIGZvciAlcyB2OiAlIyIgUFJJeDY0ICIgazogJSMiIFBSSXg2NCAiXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBzeW0tPmVuZCwgcGFpci0+ZW5kKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IHJiX25vZGUgKm5uZDsKQEAgLTE2OCwxMSArMTY4LDExIEBACiAJCQkJCWdvdG8gZGV0b3VyOwogCQkJCX0KIAotCQkJCXByX2RlYnVnKCIlI0x4OiBkaWZmIG5hbWUgdjogJXMgazogJXNcbiIsCisJCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogZGlmZiBuYW1lIHY6ICVzIGs6ICVzXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBwYWlyLT5uYW1lKTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlwcl9kZWJ1ZygiJSNMeDogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOworCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOwogCiAJCWVyciA9IC0xOwogCX0KQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkJaWYgKHBhaXItPnN0YXJ0ID09IHBvcy0+c3RhcnQpIHsKIAkJCXBhaXItPnByaXYgPSAxOwotCQkJcHJfaW5mbygiICVMeC0lTHggJUx4ICVzIGluIGthbGxzeW1zIGFzIiwKKwkJCXByX2luZm8oIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlIiBQUkl4NjQgIiAlcyBpbiBrYWxsc3ltcyBhcyIsCiAJCQkJcG9zLT5zdGFydCwgcG9zLT5lbmQsIHBvcy0+cGdvZmYsIHBvcy0+ZHNvLT5uYW1lKTsKIAkJCWlmIChwb3MtPnBnb2ZmICE9IHBhaXItPnBnb2ZmIHx8IHBvcy0+ZW5kICE9IHBhaXItPmVuZCkKLQkJCQlwcl9pbmZvKCI6IFxuKiVMeC0lTHggJUx4IiwKKwkJCQlwcl9pbmZvKCI6IFxuKiUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiIiwKIAkJCQkJcGFpci0+c3RhcnQsIHBhaXItPmVuZCwgcGFpci0+cGdvZmYpOwogCQkJcHJfaW5mbygiICVzXG4iLCBwYWlyLT5kc28tPm5hbWUpOwogCQkJcGFpci0+cHJpdiA9IDE7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAl9CiAKIAlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1WzBdLnZhbCAhPSBucl9vcGVuX2NhbGxzKSB7Ci0JCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzLCBnb3QgJUxkXG4iLAorCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscywgZ290ICUiIFBSSXU2NCAiXG4iLAogCQkJIG5yX29wZW5fY2FsbHMsIGV2c2VsLT5jb3VudHMtPmNwdVswXS52YWwpOwogCQlnb3RvIG91dF9jbG9zZV9mZDsKIAl9CkBAIC0zMzIsOCArMzMyLDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCXVuc2lnbmVkIGludCBucl9vcGVuX2NhbGxzID0gMTExLCBpOwotCWNwdV9zZXRfdCAqY3B1X3NldDsKLQlzaXplX3QgY3B1X3NldF9zaXplOworCWNwdV9zZXRfdCBjcHVfc2V0OwogCWludCBpZCA9IHRyYWNlX2V2ZW50X19pZCgic3lzX2VudGVyX29wZW4iKTsKIAogCWlmIChpZCA8IDApIHsKQEAgLTM1MywxMyArMzUyLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWNwdV9zZXQgPSBDUFVfQUxMT0MoY3B1cy0+bnIpOwogCi0JaWYgKGNwdV9zZXQgPT0gTlVMTCkKLQkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7Ci0KLQljcHVfc2V0X3NpemUgPSBDUFVfQUxMT0NfU0laRShjcHVzLT5ucik7Ci0JQ1BVX1pFUk9fUyhjcHVfc2V0X3NpemUsIGNwdV9zZXQpOworCUNQVV9aRVJPKCZjcHVfc2V0KTsKIAogCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKIAlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKQEAgLTM2Nyw3ICszNjEsNyBAQAogCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKIAlpZiAoZXZzZWwgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKLQkJZ290byBvdXRfY3B1X2ZyZWU7CisJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOwogCX0KIAogCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzKSA8IDApIHsKQEAgLTM3OSwxNCArMzczLDI5IEBACiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyArK2NwdSkgewogCQl1bnNpZ25lZCBpbnQgbmNhbGxzID0gbnJfb3Blbl9jYWxscyArIGNwdTsKKwkJLyoKKwkJICogWFhYIGV2ZW50dWFsbHkgbGlmdCB0aGlzIHJlc3RyaWN0aW9uIGluIGEgd2F5IHRoYXQKKwkJICoga2VlcHMgcGVyZiBidWlsZGluZyBvbiBvbGRlciBnbGliYyBpbnN0YWxsYXRpb25zCisJCSAqIHdpdGhvdXQgQ1BVX0FMTE9DLiAxMDI0IGNwdXMgaW4gMjAxMCBzdGlsbCBzZWVtcworCQkgKiBhIHJlYXNvbmFibGUgdXBwZXIgbGltaXQgdGhvIDotKQorCQkgKi8KKwkJaWYgKGNwdXMtPm1hcFtjcHVdID49IENQVV9TRVRTSVpFKSB7CisJCQlwcl9kZWJ1ZygiSWdub3JpbmcgQ1BVICVkXG4iLCBjcHVzLT5tYXBbY3B1XSk7CisJCQljb250aW51ZTsKKwkJfQogCi0JCUNQVV9TRVQoY3B1LCBjcHVfc2V0KTsKLQkJc2NoZWRfc2V0YWZmaW5pdHkoMCwgY3B1X3NldF9zaXplLCBjcHVfc2V0KTsKKwkJQ1BVX1NFVChjcHVzLT5tYXBbY3B1XSwgJmNwdV9zZXQpOworCQlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXQpLCAmY3B1X3NldCkgPCAwKSB7CisJCQlwcl9kZWJ1Zygic2NoZWRfc2V0YWZmaW5pdHkoKSBmYWlsZWQgb24gQ1BVICVkOiAlcyAiLAorCQkJCSBjcHVzLT5tYXBbY3B1XSwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBuY2FsbHM7ICsraSkgewogCQkJZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKIAkJCWNsb3NlKGZkKTsKIAkJfQotCQlDUFVfQ0xSKGNwdSwgY3B1X3NldCk7CisJCUNQVV9DTFIoY3B1cy0+bWFwW2NwdV0sICZjcHVfc2V0KTsKIAl9CiAKIAkvKgpAQCAtNDAyLDYgKzQxMSw5IEBACiAJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgKytjcHUpIHsKIAkJdW5zaWduZWQgaW50IGV4cGVjdGVkOwogCisJCWlmIChjcHVzLT5tYXBbY3B1XSA+PSBDUFVfU0VUU0laRSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChwZXJmX2V2c2VsX19yZWFkX29uX2NwdShldnNlbCwgY3B1LCAwKSA8IDApIHsKIAkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19vcGVuX3JlYWRfb25fY3B1XG4iKTsKIAkJCWdvdG8gb3V0X2Nsb3NlX2ZkOwpAQCAtNDA5LDggKzQyMSw4IEBACiAKIAkJZXhwZWN0ZWQgPSBucl9vcGVuX2NhbGxzICsgY3B1OwogCQlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0udmFsICE9IGV4cGVjdGVkKSB7Ci0JCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlTGRcbiIsCi0JCQkJIGV4cGVjdGVkLCBjcHUsIGV2c2VsLT5jb3VudHMtPmNwdVtjcHVdLnZhbCk7CisJCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlIiBQUkl1NjQgIlxuIiwKKwkJCQkgZXhwZWN0ZWQsIGNwdXMtPm1hcFtjcHVdLCBldnNlbC0+Y291bnRzLT5jcHVbY3B1XS52YWwpOwogCQkJZ290byBvdXRfY2xvc2VfZmQ7CiAJCX0KIAl9CkBAIC00MjAsOCArNDMyLDYgQEAKIAlwZXJmX2V2c2VsX19jbG9zZV9mZChldnNlbCwgMSwgdGhyZWFkcy0+bnIpOwogb3V0X2V2c2VsX2RlbGV0ZToKIAlwZXJmX2V2c2VsX19kZWxldGUoZXZzZWwpOwotb3V0X2NwdV9mcmVlOgotCUNQVV9GUkVFKGNwdV9zZXQpOwogb3V0X3RocmVhZF9tYXBfZGVsZXRlOgogCXRocmVhZF9tYXBfX2RlbGV0ZSh0aHJlYWRzKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDA1MzQ0YzYuLmI2OTk4ZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC0yMTQsNyArMjE1LDcgQEAKIAlsZW4gPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAKIAlzcHJpbnRmKGNvbW1hbmQsCi0JCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqTHggLS1zdG9wLWFkZHJlc3M9JSMwKkx4IC1kUyAlcyIsCisJCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtLXN0b3AtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtZFMgJXMiLAogCQlCSVRTX1BFUl9MT05HIC8gNCwgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIApAQCAtMzA4LDcgKzMwOSw3IEBACiAJc3RydWN0IHNvdXJjZV9saW5lICpsaW5lOwogCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiJTAqTHggPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAorCXNwcmludGYocGF0dGVybiwgIiUwKiIgUFJJeDY0ICIgPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAogCQltYXBfX3JpcF8yb2JqZHVtcChzeW1lLT5tYXAsIHN5bWJvbC0+c3RhcnQpKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKQEAgLTUzNyw3ICs1MzgsNyBAQAogCWlmIChucl9jb3VudGVycyA9PSAxIHx8ICFkaXNwbGF5X3dlaWdodGVkKSB7CiAJCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKIAkJZmlyc3QgPSBsaXN0X2VudHJ5KGV2c2VsX2xpc3QubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOwotCQlwcmludGYoIiVMZCIsIGZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOworCQlwcmludGYoIiUiIFBSSXU2NCwgKHVpbnQ2NF90KWZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOwogCQlpZiAoZnJlcSkKIAkJCXByaW50ZigiSHogIik7CiAJCWVsc2UKQEAgLTY0MCw3ICs2NDEsNyBAQAogCiAJCXBlcmNlbnRfY29sb3JfZnByaW50ZihzdGRvdXQsICIlNC4xZiUlIiwgcGNudCk7CiAJCWlmICh2ZXJib3NlKQotCQkJcHJpbnRmKCIgJTAxNmxseCIsIHN5bS0+c3RhcnQpOworCQkJcHJpbnRmKCIgJTAxNiIgUFJJeDY0LCBzeW0tPnN0YXJ0KTsKIAkJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIHN5bS0+bmFtZSk7CiAJCXByaW50ZigiICUtKi4qc1xuIiwgZHNvX3dpZHRoLCBkc29fd2lkdGgsCiAJCSAgICAgICBkc29fd2lkdGggPj0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW4gPwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAyMzAyZWMwLi4xNDc4YWI0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtNDU5LDcgKzQ1OSw4IEBACiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCiAJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCWR1bXBfcHJpbnRmKCI6IGlkOiVMZDogbG9zdDolTGRcbiIsIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CisJZHVtcF9wcmludGYoIjogaWQ6JSIgUFJJdTY0ICI6IGxvc3Q6JSIgUFJJdTY0ICJcbiIsCisJCSAgICBzZWxmLT5sb3N0LmlkLCBzZWxmLT5sb3N0Lmxvc3QpOwogCXNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgKz0gc2VsZi0+bG9zdC5sb3N0OwogCXJldHVybiAwOwogfQpAQCAtNTc1LDcgKzU3Niw3IEBACiAJdTggY3B1bW9kZSA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAJaW50IHJldCA9IDA7CiAKLQlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSNMeCglI0x4KSBAICUjTHhdOiAlc1xuIiwKKwlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSMiIFBSSXg2NCAiKCUjIiBQUkl4NjQgIikgQCAlIyIgUFJJeDY0ICJdOiAlc1xuIiwKIAkJCXNlbGYtPm1tYXAucGlkLCBzZWxmLT5tbWFwLnRpZCwgc2VsZi0+bW1hcC5zdGFydCwKIAkJCXNlbGYtPm1tYXAubGVuLCBzZWxmLT5tbWFwLnBnb2ZmLCBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBmNWNmZWQ2Li5kODU3NWQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtOTAsNyArOTAsNyBAQAogCWludCBjcHUsIHRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmV2c2VsLT5jb3VudHMtPmFnZ3IsIGNvdW50OwogCi0JYWdnci0+dmFsID0gMDsKKwlhZ2dyLT52YWwgPSBhZ2dyLT5lbmEgPSBhZ2dyLT5ydW4gPSAwOwogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspIHsKIAkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBudGhyZWFkczsgdGhyZWFkKyspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA5ODlmYTJkLi5mNmE5MjllIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC03OTgsOCArNzk4LDggQEAKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewogCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKSB7Ci0JCXByX2RlYnVnKCJGYWlsZWQgdG8gbHNlZWsgdG8gJUxkIG9mZnNldCBmb3IgZmVhdHVyZSAlZCwgIgotCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5vZmZzZXQsIGZlYXQpOworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxzZWVrIHRvICUiIFBSSXU2NCAiIG9mZnNldCBmb3IgZmVhdHVyZSAiCisJCQkgICIlZCwgY29udGludWluZy4uLlxuIiwgc2VsZi0+b2Zmc2V0LCBmZWF0KTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwppbmRleCBjNzQ5YmE2Li4zMmY0ZjFmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKQEAgLTYzNiwxMyArNjM2LDEzIEBACiAJCQl9CiAJCX0KIAl9IGVsc2UKLQkJcmV0ID0gc25wcmludGYocywgc2l6ZSwgc2VwID8gIiVsbGQiIDogIiUxMmxsZCAiLCBwZXJpb2QpOworCQlyZXQgPSBzbnByaW50ZihzLCBzaXplLCBzZXAgPyAiJSIgUFJJdTY0IDogIiUxMiIgUFJJdTY0ICIgIiwgcGVyaW9kKTsKIAogCWlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMpIHsKIAkJaWYgKHNlcCkKLQkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJWMlbGxkIiwgKnNlcCwgcGVyaW9kKTsKKwkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJWMlIiBQUkl1NjQsICpzZXAsIHBlcmlvZCk7CiAJCWVsc2UKLQkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJTExbGxkIiwgcGVyaW9kKTsKKwkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJTExIiBQUkl1NjQsIHBlcmlvZCk7CiAJfQogCiAJaWYgKHBhaXJfaGlzdHMpIHsKQEAgLTk3MSw3ICs5NzEsNyBAQAogCXN5bV9zaXplID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0OwogCW9mZnNldCA9IGlwIC0gc3ltLT5zdGFydDsKIAotCXByX2RlYnVnMygiJXM6IGlwPSUjTHhcbiIsIF9fZnVuY19fLCBzZWxmLT5tcy5tYXAtPnVubWFwX2lwKHNlbGYtPm1zLm1hcCwgaXApKTsKKwlwcl9kZWJ1ZzMoIiVzOiBpcD0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLCBzZWxmLT5tcy5tYXAtPnVubWFwX2lwKHNlbGYtPm1zLm1hcCwgaXApKTsKIAogCWlmIChvZmZzZXQgPj0gc3ltX3NpemUpCiAJCXJldHVybiAwOwpAQCAtOTgwLDggKzk4MCw5IEBACiAJaC0+c3VtKys7CiAJaC0+aXBbb2Zmc2V0XSsrOwogCi0JcHJfZGVidWczKCIlI0x4ICVzOiBwZXJpb2QrKyBbaXA6ICUjTHgsICUjTHhdID0+ICVMZFxuIiwgc2VsZi0+bXMuc3ltLT5zdGFydCwKLQkJICBzZWxmLT5tcy5zeW0tPm5hbWUsIGlwLCBpcCAtIHNlbGYtPm1zLnN5bS0+c3RhcnQsIGgtPmlwW29mZnNldF0pOworCXByX2RlYnVnMygiJSMiIFBSSXg2NCAiICVzOiBwZXJpb2QrKyBbaXA6ICUjIiBQUkl4NjQgIiwgJSMiIFBSSXg2NAorCQkgICJdID0+ICUiIFBSSXU2NCAiXG4iLCBzZWxmLT5tcy5zeW0tPnN0YXJ0LCBzZWxmLT5tcy5zeW0tPm5hbWUsCisJCSAgaXAsIGlwIC0gc2VsZi0+bXMuc3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzIsNyArMTEzMyw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfZmlsZW5hbWU7CiAJfQogCi0JcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lI0x4LCBlbmQ9JSNMeFxuIiwgX19mdW5jX18sCisJcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lIyIgUFJJeDY0ICIsIGVuZD0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLAogCQkgZmlsZW5hbWUsIHN5bS0+bmFtZSwgbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAogCQkgbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CiAKQEAgLTExNDIsNyArMTE0Myw3IEBACiAJCSBkc28sIGRzby0+bG9uZ19uYW1lLCBzeW0sIHN5bS0+bmFtZSk7CiAKIAlzbnByaW50Zihjb21tYW5kLCBzaXplb2YoY29tbWFuZCksCi0JCSAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTIC1DICVzfGdyZXAgLXYgJXN8ZXhwYW5kIiwKKwkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTYiIFBSSXg2NCAiIC0tc3RvcC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0ICIgLWRTIC1DICVzfGdyZXAgLXYgJXN8ZXhwYW5kIiwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCiAJCSBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwKIAkJIHN5bWZzX2ZpbGVuYW1lLCBmaWxlbmFtZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IDhiZTBiOTYuLjMwNWM4NDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfUEVSRl9MSU5VWF9CSVRPUFNfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2h3ZWlnaHQuaD4KIAogI2RlZmluZSBCSVRTX1BFUl9MT05HIF9fV09SRFNJWkUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCAzYTdlYjZlLi5hMTZlY2FiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTE5NSw3ICsxOTYsNyBAQAogCiBzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKQogewotCXJldHVybiBmcHJpbnRmKGZwLCAiICVMeC0lTHggJUx4ICVzXG4iLAorCXJldHVybiBmcHJpbnRmKGZwLCAiICUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiICVzXG4iLAogCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+cGdvZmYsIHNlbGYtPmRzby0+bmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCBiYzI3MzJlLi4xMzVmNjliIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAlzdGF0aWMgY2hhciBidWZbMzJdOwogCiAJaWYgKHR5cGUgPT0gUEVSRl9UWVBFX1JBVykgewotCQlzcHJpbnRmKGJ1ZiwgInJhdyAweCVsbHgiLCBjb25maWcpOworCQlzcHJpbnRmKGJ1ZiwgInJhdyAweCUiIFBSSXg2NCwgY29uZmlnKTsKIAkJcmV0dXJuIGJ1ZjsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAppbmRleCBiODJjYWZiLi40NThlM2VjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCkBAIC0yMyw3ICsyMyw3IEBACiB9OwogCiBleHRlcm4gc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHJhY2Vwb2ludF9pZF90b19wYXRoKHU2NCBjb25maWcpOwotZXh0ZXJuIGJvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpldnNlbF9saXN0KTsKK2V4dGVybiBib29sIGhhdmVfdHJhY2Vwb2ludHMoc3RydWN0IGxpc3RfaGVhZCAqZXZsaXN0KTsKIAogZXh0ZXJuIGludAkJCW5yX2NvdW50ZXJzOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDEyOGFhYWIuLjZlMjlkOWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzeW0gPSBfX2ZpbmRfa2VybmVsX2Z1bmN0aW9uX2J5X25hbWUodHAtPnN5bWJvbCwgJm1hcCk7CiAJaWYgKHN5bSkgewogCQlhZGRyID0gbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQgKyB0cC0+b2Zmc2V0KTsKLQkJcHJfZGVidWcoInRyeSB0byBmaW5kICVzKyVsZEAlbGx4XG4iLCB0cC0+c3ltYm9sLAorCQlwcl9kZWJ1ZygidHJ5IHRvIGZpbmQgJXMrJWxkQCUiIFBSSXg2NCAiXG4iLCB0cC0+c3ltYm9sLAogCQkJIHRwLT5vZmZzZXQsIGFkZHIpOwogCQlyZXQgPSBmaW5kX3BlcmZfcHJvYmVfcG9pbnQoKHVuc2lnbmVkIGxvbmcpYWRkciwgcHApOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IDMxM2RhYzIuLjEwNWYwMGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtNjUyLDEwICs2NTIsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIHNhbXBsZS0+Y2FsbGNoYWluLT5ucik7CisJcHJpbnRmKCIuLi4gY2hhaW46IG5yOiUiIFBSSXU2NCAiXG4iLCBzYW1wbGUtPmNhbGxjaGFpbi0+bnIpOwogCiAJZm9yIChpID0gMDsgaSA8IHNhbXBsZS0+Y2FsbGNoYWluLT5ucjsgaSsrKQotCQlwcmludGYoIi4uLi4uICUyZDogJTAxNkx4XG4iLCBpLCBzYW1wbGUtPmNhbGxjaGFpbi0+aXBzW2ldKTsKKwkJcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTYiIFBSSXg2NCAiXG4iLAorCQkgICAgICAgaSwgc2FtcGxlLT5jYWxsY2hhaW4tPmlwc1tpXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCkBAIC02NzIsNyArNjczLDcgQEAKIAkJcHJpbnRmKCIldSAiLCBzYW1wbGUtPmNwdSk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQotCQlwcmludGYoIiVMdSAiLCBzYW1wbGUtPnRpbWUpOworCQlwcmludGYoIiUiIFBSSXU2NCAiICIsIHNhbXBsZS0+dGltZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgZXZlbnRfdCAqZXZlbnQsCkBAIC02ODEsMTYgKzY4MiwxNiBAQAogCWlmICghZHVtcF90cmFjZSkKIAkJcmV0dXJuOwogCi0JcHJpbnRmKCJcbiUjTHggWyUjeF06IGV2ZW50OiAlZFxuIiwgZmlsZV9vZmZzZXQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwKLQkgICAgICAgZXZlbnQtPmhlYWRlci50eXBlKTsKKwlwcmludGYoIlxuJSMiIFBSSXg2NCAiIFslI3hdOiBldmVudDogJWRcbiIsCisJICAgICAgIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAKIAl0cmFjZV9ldmVudChldmVudCk7CiAKIAlpZiAoc2FtcGxlKQogCQlwZXJmX3Nlc3Npb25fX3ByaW50X3RzdGFtcChzZXNzaW9uLCBldmVudCwgc2FtcGxlKTsKIAotCXByaW50ZigiJSNMeCBbJSN4XTogUEVSRl9SRUNPUkRfJXMiLCBmaWxlX29mZnNldCwgZXZlbnQtPmhlYWRlci5zaXplLAotCSAgICAgICBldmVudF9fZ2V0X2V2ZW50X25hbWUoZXZlbnQtPmhlYWRlci50eXBlKSk7CisJcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IFBFUkZfUkVDT1JEXyVzIiwgZmlsZV9vZmZzZXQsCisJICAgICAgIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnRfX2dldF9ldmVudF9uYW1lKGV2ZW50LT5oZWFkZXIudHlwZSkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wX3NhbXBsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBldmVudF90ICpldmVudCwKQEAgLTY5OSw4ICs3MDAsOSBAQAogCWlmICghZHVtcF90cmFjZSkKIAkJcmV0dXJuOwogCi0JcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGRcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKLQkgICAgICAgc2FtcGxlLT5waWQsIHNhbXBsZS0+dGlkLCBzYW1wbGUtPmlwLCBzYW1wbGUtPnBlcmlvZCk7CisJcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjIiBQUkl4NjQgIiBwZXJpb2Q6ICUiIFBSSXU2NCAiXG4iLAorCSAgICAgICBldmVudC0+aGVhZGVyLm1pc2MsIHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRpZCwgc2FtcGxlLT5pcCwKKwkgICAgICAgc2FtcGxlLT5wZXJpb2QpOwogCiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKQogCQljYWxsY2hhaW5fX3ByaW50ZihzYW1wbGUpOwpAQCAtODQzLDggKzg0NSw4IEBACiB7CiAJaWYgKG9wcy0+bG9zdCA9PSBldmVudF9fcHJvY2Vzc19sb3N0ICYmCiAJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgIT0gMCkgewotCQl1aV9fd2FybmluZygiUHJvY2Vzc2VkICVMdSBldmVudHMgYW5kIExPU1QgJUx1IVxuXG4iCi0JCQkgICAgIkNoZWNrIElPL0NQVSBvdmVybG9hZCFcblxuIiwKKwkJdWlfX3dhcm5pbmcoIlByb2Nlc3NlZCAlIiBQUkl1NjQgIiBldmVudHMgYW5kIExPU1QgJSIgUFJJdTY0CisJCQkgICAgIiFcblxuQ2hlY2sgSU8vQ1BVIG92ZXJsb2FkIVxuXG4iLAogCQkJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX3BlcmlvZCwKIAkJCSAgICBzZXNzaW9uLT5oaXN0cy5zdGF0cy50b3RhbF9sb3N0KTsKIAl9CkBAIC05MTgsNyArOTIwLDcgQEAKIAogCWlmIChzaXplID09IDAgfHwKIAkgICAgKHNraXAgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2VsZiwgJmV2ZW50LCBvcHMsIGhlYWQpKSA8IDApIHsKLQkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQlkdW1wX3ByaW50ZigiJSMiIFBSSXg2NCAiIFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKIAkJCSAgICBoZWFkLCBldmVudC5oZWFkZXIuc2l6ZSwgZXZlbnQuaGVhZGVyLnR5cGUpOwogCQkvKgogCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZApAQCAtMTAyMyw3ICsxMDI1LDcgQEAKIAogCWlmIChzaXplID09IDAgfHwKIAkgICAgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50KHNlc3Npb24sIGV2ZW50LCBvcHMsIGZpbGVfcG9zKSA8IDApIHsKLQkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQlkdW1wX3ByaW50ZigiJSMiIFBSSXg2NCAiIFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKIAkJCSAgICBmaWxlX29mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwKIAkJCSAgICBldmVudC0+aGVhZGVyLnR5cGUpOwogCQkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IGIzNjM3ZGIuLmZiNzM3ZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqIG9mIHRoZSBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00MywxMSArNDQsMTEgQEAKIAlyZXR1cm4gY3B1MnNsb3QoY3B1KSAqIFNMT1RfTVVMVDsKIH0KIAotc3RhdGljIGRvdWJsZSB0aW1lMnBpeGVscyh1NjQgdGltZSkKK3N0YXRpYyBkb3VibGUgdGltZTJwaXhlbHModTY0IF9fdGltZSkKIHsKIAlkb3VibGUgWDsKIAotCVggPSAxLjAgKiBzdmdfcGFnZV93aWR0aCAqICh0aW1lIC0gZmlyc3RfdGltZSkgLyAobGFzdF90aW1lIC0gZmlyc3RfdGltZSk7CisJWCA9IDEuMCAqIHN2Z19wYWdlX3dpZHRoICogKF9fdGltZSAtIGZpcnN0X3RpbWUpIC8gKGxhc3RfdGltZSAtIGZpcnN0X3RpbWUpOwogCXJldHVybiBYOwogfQogCkBAIC05NCw3ICs5NSw3IEBACiAKIAl0b3RhbF9oZWlnaHQgPSAoMSArIHJvd3MgKyBjcHUyc2xvdChjcHVzKSkgKiBTTE9UX01VTFQ7CiAJZnByaW50ZihzdmdmaWxlLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4gXG4iKTsKLQlmcHJpbnRmKHN2Z2ZpbGUsICI8c3ZnIHdpZHRoPVwiJWlcIiBoZWlnaHQ9XCIlbGx1XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiIsIHN2Z19wYWdlX3dpZHRoLCB0b3RhbF9oZWlnaHQpOworCWZwcmludGYoc3ZnZmlsZSwgIjxzdmcgd2lkdGg9XCIlaVwiIGhlaWdodD1cIiUiIFBSSXU2NCAiXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiIsIHN2Z19wYWdlX3dpZHRoLCB0b3RhbF9oZWlnaHQpOwogCiAJZnByaW50ZihzdmdmaWxlLCAiPGRlZnM+XG4gIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICA8IVtDREFUQVtcbiIpOwogCkBAIC00ODMsNyArNDg0LDcgQEAKIAkJCWNvbG9yID0gMTI4OwogCQl9CiAKLQkJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHkxPVwiJTQuMmZcIiB4Mj1cIiU0LjhmXCIgeTI9XCIlbGx1XCIgc3R5bGU9XCJzdHJva2U6cmdiKCVpLCVpLCVpKTtzdHJva2Utd2lkdGg6JTEuM2ZcIi8+XG4iLAorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiUiIFBSSXU2NCAiXCIgc3R5bGU9XCJzdHJva2U6cmdiKCVpLCVpLCVpKTtzdHJva2Utd2lkdGg6JTEuM2ZcIi8+XG4iLAogCQkJdGltZTJwaXhlbHMoaSksIFNMT1RfTVVMVC8yLCB0aW1lMnBpeGVscyhpKSwgdG90YWxfaGVpZ2h0LCBjb2xvciwgY29sb3IsIGNvbG9yLCB0aGlja25lc3MpOwogCiAJCWkgKz0gMTAwMDAwMDA7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggMTVjY2ZiYS4uNzgyMWQwZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlICJidWlsZC1pZC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCkBAIC0xNTMsNyArMTU0LDcgQEAKIAlzZWxmLT5iaW5kaW5nID0gYmluZGluZzsKIAlzZWxmLT5uYW1lbGVuID0gbmFtZWxlbiAtIDE7CiAKLQlwcl9kZWJ1ZzQoIiVzOiAlcyAlI0x4LSUjTHhcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKKwlwcl9kZWJ1ZzQoIiVzOiAlcyAlIyIgUFJJeDY0ICItJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CiAKIAltZW1jcHkoc2VsZi0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKQEAgLTE2Nyw3ICsxNjgsNyBAQAogCiBzdGF0aWMgc2l6ZV90IHN5bWJvbF9fZnByaW50ZihzdHJ1Y3Qgc3ltYm9sICpzZWxmLCBGSUxFICpmcCkKIHsKLQlyZXR1cm4gZnByaW50ZihmcCwgIiAlbGx4LSVsbHggJWMgJXNcbiIsCisJcmV0dXJuIGZwcmludGYoZnAsICIgJSIgUFJJeDY0ICItJSIgUFJJeDY0ICIgJWMgJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLAogCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfR0xPQkFMID8gJ2cnIDoKIAkJICAgICAgIHNlbGYtPmJpbmRpbmcgPT0gU1RCX0xPQ0FMICA/ICdsJyA6ICd3JywKQEAgLTExNjEsNiArMTE2MiwxMyBAQAogCiAJCXNlY3Rpb25fbmFtZSA9IGVsZl9zZWNfX25hbWUoJnNoZHIsIHNlY3N0cnMpOwogCisJCS8qIE9uIEFSTSwgc3ltYm9scyBmb3IgdGh1bWIgZnVuY3Rpb25zIGhhdmUgMSBhZGRlZCB0bworCQkgKiB0aGUgc3ltYm9sIGFkZHJlc3MgYXMgYSBmbGFnIC0gcmVtb3ZlIGl0ICovCisJCWlmICgoZWhkci5lX21hY2hpbmUgPT0gRU1fQVJNKSAmJgorCQkgICAgKG1hcC0+dHlwZSA9PSBNQVBfX0ZVTkNUSU9OKSAmJgorCQkgICAgKHN5bS5zdF92YWx1ZSAmIDEpKQorCQkJLS1zeW0uc3RfdmFsdWU7CisKIAkJaWYgKHNlbGYtPmtlcm5lbCAhPSBEU09fVFlQRV9VU0VSIHx8IGttb2R1bGUpIHsKIAkJCWNoYXIgZHNvX25hbWVbUEFUSF9NQVhdOwogCkBAIC0xMjA4LDggKzEyMTYsOCBAQAogCQl9CiAKIAkJaWYgKGN1cnJfZHNvLT5hZGp1c3Rfc3ltYm9scykgewotCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjTHggIgotCQkJCSAgInNoX2FkZHI6ICUjTHggc2hfb2Zmc2V0OiAlI0x4XG4iLCBfX2Z1bmNfXywKKwkJCXByX2RlYnVnNCgiJXM6IGFkanVzdGluZyBzeW1ib2w6IHN0X3ZhbHVlOiAlIyIgUFJJeDY0ICIgIgorCQkJCSAgInNoX2FkZHI6ICUjIiBQUkl4NjQgIiBzaF9vZmZzZXQ6ICUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sCiAJCQkJICAodTY0KXN5bS5zdF92YWx1ZSwgKHU2NClzaGRyLnNoX2FkZHIsCiAJCQkJICAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKIAkJCXN5bS5zdF92YWx1ZSAtPSBzaGRyLnNoX2FkZHIgLSBzaGRyLnNoX29mZnNldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90eXBlcy5oIGIvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKaW5kZXggN2Q2YjgzMy4uNWYzNjg5YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKQEAgLTEsMTIgKzEsMTQgQEAKICNpZm5kZWYgX19QRVJGX1RZUEVTX0gKICNkZWZpbmUgX19QRVJGX1RZUEVTX0gKIAorI2luY2x1ZGUgPHN0ZGludC5oPgorCiAvKgotICogV2UgZGVmaW5lIHU2NCBhcyB1bnNpZ25lZCBsb25nIGxvbmcgZm9yIGV2ZXJ5IGFyY2hpdGVjdHVyZQotICogc28gdGhhdCB3ZSBjYW4gcHJpbnQgaXQgd2l0aCAlTHggd2l0aG91dCBnZXR0aW5nIHdhcm5pbmdzLgorICogV2UgZGVmaW5lIHU2NCBhcyB1aW50NjRfdCBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlCisgKiBzbyB0aGF0IHdlIGNhbiBwcmludCBpdCB3aXRoICIlIlBSSXg2NCB3aXRob3V0IGdldHRpbmcgd2FybmluZ3MuCiAgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKLXR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyAgIHM2NDsKK3R5cGVkZWYgdWludDY0X3QJICAgdTY0OwordHlwZWRlZiBpbnQ2NF90CQkgICBzNjQ7CiB0eXBlZGVmIHVuc2lnbmVkIGludAkgICB1MzI7CiB0eXBlZGVmIHNpZ25lZCBpbnQJICAgczMyOwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkgICB1MTY7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCmluZGV4IGViZGE4YzMuLjYwYzQ2M2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpZiAoc2VsZi0+bXMuc3ltKQogCQlyZXR1cm4gc2VsZi0+bXMuc3ltLT5uYW1lOwogCi0Jc25wcmludGYoYmYsIGJmc2l6ZSwgIiUjTHgiLCBzZWxmLT5pcCk7CisJc25wcmludGYoYmYsIGJmc2l6ZSwgIiUjIiBQUkl4NjQsIHNlbGYtPmlwKTsKIAlyZXR1cm4gYmY7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYwppbmRleCBlMzU0MzdkLi5lNTE1ODM2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgIi4uL2xpYnNsYW5nLmgiCiAjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdHR5ZGVmYXVsdHMuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNTcsNyArNTgsNyBAQAogCWludCB3aWR0aDsKIAogCXVpX2Jyb3dzZXJfX3NldF9wZXJjZW50X2NvbG9yKHNlbGYsIDAsIGN1cnJlbnRfZW50cnkpOwotCXNsc21nX3ByaW50ZigiJSpsbHggJSpsbHggJWMgIiwKKwlzbHNtZ19wcmludGYoIiUqIiBQUkl4NjQgIiAlKiIgUFJJeDY0ICIgJWMgIiwKIAkJICAgICBtYi0+YWRkcmxlbiwgc3ltLT5zdGFydCwgbWItPmFkZHJsZW4sIHN5bS0+ZW5kLAogCQkgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfR0xPQkFMID8gJ2cnIDoKIAkJICAgICBzeW0tPmJpbmRpbmcgPT0gU1RCX0xPQ0FMICA/ICdsJyA6ICd3Jyk7CkBAIC0xNTAsNiArMTUxLDYgQEAKIAkJKyttYi5iLm5yX2VudHJpZXM7CiAJfQogCi0JbWIuYWRkcmxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlbGx4IiwgbWF4YWRkcik7CisJbWIuYWRkcmxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlIiBQUkl4NjQsIG1heGFkZHIpOwogCXJldHVybiBtYXBfYnJvd3Nlcl9fcnVuKCZtYik7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKaW5kZXggY2ZhNTVkNi4uYmRkMzM0NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCWlmICh3aWR0aCA+IHRpZHdpZHRoKQogCQkJdGlkd2lkdGggPSB3aWR0aDsKIAkJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykgewotCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJUx1IiwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CisJCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl1NjQsIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQkJaWYgKHdpZHRoID4gY291bnRlcndpZHRoW2pdKQogCQkJCWNvdW50ZXJ3aWR0aFtqXSA9IHdpZHRoOwogCQl9CkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJZnByaW50ZihmcCwgIiAgJSpkICAlKmQiLCBwaWR3aWR0aCwgdmFsdWVzLT5waWRbaV0sCiAJCQl0aWR3aWR0aCwgdmFsdWVzLT50aWRbaV0pOwogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKQotCQkJZnByaW50ZihmcCwgIiAgJSpMdSIsCisJCQlmcHJpbnRmKGZwLCAiICAlKiIgUFJJdTY0LAogCQkJCWNvdW50ZXJ3aWR0aFtqXSwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCWZwcmludGYoZnAsICJcbiIpOwogCX0KQEAgLTE5NiwxMyArMTk2LDEzIEBACiAJCXdpZHRoID0gc3RybGVuKHZhbHVlcy0+Y291bnRlcm5hbWVbal0pOwogCQlpZiAod2lkdGggPiBuYW1ld2lkdGgpCiAJCQluYW1ld2lkdGggPSB3aWR0aDsKLQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJWxseCIsIHZhbHVlcy0+Y291bnRlcnJhd2lkW2pdKTsKKwkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJSIgUFJJeDY0LCB2YWx1ZXMtPmNvdW50ZXJyYXdpZFtqXSk7CiAJCWlmICh3aWR0aCA+IHJhd3dpZHRoKQogCQkJcmF3d2lkdGggPSB3aWR0aDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+dGhyZWFkczsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspIHsKLQkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVMdSIsIHZhbHVlcy0+dmFsdWVbaV1bal0pOworCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJSIgUFJJdTY0LCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKIAkJCWlmICh3aWR0aCA+IGNvdW50d2lkdGgpCiAJCQkJY291bnR3aWR0aCA9IHdpZHRoOwogCQl9CkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJY291bnR3aWR0aCwgIkNvdW50Iik7CiAJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+dGhyZWFkczsgaSsrKQogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKQotCQkJZnByaW50ZihmcCwgIiAgJSpkICAlKmQgICUqcyAgJSpsbHggICUqTHVcbiIsCisJCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCAgJSpzICAlKiIgUFJJeDY0ICIgICUqIiBQUkl1NjQsCiAJCQkJcGlkd2lkdGgsIHZhbHVlcy0+cGlkW2ldLAogCQkJCXRpZHdpZHRoLCB2YWx1ZXMtPnRpZFtpXSwKIAkJCQluYW1ld2lkdGgsIHZhbHVlcy0+Y291bnRlcm5hbWVbal0sCg==