ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggNTgxZmQzOS4uMWViYTI4YSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTIzLDYgKzIzLDcgQEAKIEFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgogQXhlbCBEeWtzIDx4bEB4bHNpZ25lZC5uZXQ+CitBeGVsIExpbiA8YXhlbC5saW5AZ21haWwuY29tPgogQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+CiBCZW4gTSBDYWhpbGwgPGJlbi5tLmNhaGlsbEBpbnRlbC5jb20+CiBCasO2cm4gU3RlaW5icmluayA8Qi5TdGVpbmJyaW5rQGdteC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXQ5MSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXQ5MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M2YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxCkBAIC0wLDAgKzEsMjUgQEAKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXQ5MV9jYW4vbmV0LzxpZmFjZT4vbWIwX2lkCitEYXRlOgkJSmFudWFyeSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuMzgKK0NvbnRhY3Q6CU1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CitEZXNjcmlwdGlvbjoKKwkJVmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjYW5faWQgb2YgbWFpbGJveCAwLgorCisJCURlZmF1bHQ6IDB4N2ZmIChzdGFuZGFyZCBmcmFtZSkKKworCQlEdWUgdG8gYSBjaGlwIGJ1ZyAoZXJyYXRhIDUwLjIuNi4zICYgNTAuMy41LjMgaW4KKwkJIkFUOTFTQU05MjYzIFByZWxpbWluYXJ5IDYyNDlILUFUQVJNLTI3LUp1bC0wOSIpIHRoZQorCQljb250ZW50cyBvZiBtYWlsYm94IDAgbWF5IGJlIHNlbmQgdW5kZXIgY2VydGFpbgorCQljb25kaXRpb25zIChldmVuIGlmIGRpc2FibGVkIG9yIGluIHJ4IG1vZGUpLgorCisJCVRoZSB3b3JrYXJvdW5kIGluIHRoZSBlcnJhdGEgc3VnZ2VzdHMgbm90IHRvIHVzZSB0aGUKKwkJbWFpbGJveCBhbmQgbG9hZCBpdCB3aXRoIGFuIHVudXNlZCBpZGVudGlmaWVyLgorCisJCUluIG9yZGVyIHRvIHVzZSBhbiBleHRlbmRlZCBjYW5faWQgYWRkIHRoZQorCQlDQU5fRUZGX0ZMQUcgKDB4ODAwMDAwMDBVKSB0byB0aGUgY2FuX2lkLiBFeGFtcGxlOgorCisJCS0gc3RhbmRhcmQgaWQgMHg3ZmY6CisJCWVjaG8gMHg3ZmYgICAgICA+IC9zeXMvY2xhc3MvbmV0L2NhbjAvbWIwX2lkCisKKwkJLSBleHRlbmRlZCBpZCAweDFmZmZmZmZmOgorCQllY2hvIDB4OWZmZmZmZmYgPiAvc3lzL2NsYXNzL25ldC9jYW4wL21iMF9pZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAppbmRleCAzNTQ0N2UwLi4zNmY2M2Q0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtMjE3LDggKzIxNyw4IEBACiAgIDxjaGFwdGVyIGlkPSJ1YXJ0MTZ4NTAiPgogICAgICA8dGl0bGU+MTZ4NTAgVUFSVCBEcml2ZXI8L3RpdGxlPgogIUlpbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKLSFFZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwotIUVkcml2ZXJzL3NlcmlhbC84MjUwLmMKKyFFZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKyFFZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9ImZiZGV2Ij4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBiOTU5NjU5Li5iM2YzNWU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02MDMsMyArNjAzLDE5IEBACiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CW5vc3dhcGFjY291bnQga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIKK1doZW46CTIuNi40MAorV2h5OglUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gb2YgbWVtc3cgZmVhdHVyZSBlbmFibGVkIGJ5CisJQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBjb3VsZCBiZSBkaXNhYmxlZCBieSB0aGUgbm9zd2FwYWNjb3VudAorCWtlcm5lbCBwYXJhbWV0ZXIgKGludHJvZHVjZWQgaW4gMi42LjI5LXJjMSkuIExhdGVyIG9uLCB0aGlzIGRlY2lzaW9uCisJdHVybmVkIG91dCB0byBiZSBub3QgaWRlYWwgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSB0aGUgZmVhdHVyZSBjb21waWxlZAorCWluIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBsZXQgb25seSBpbnRlcmVzdGVkIHRvIGVuYWJsZSBpdAorCShlLmcuIGdlbmVyYWwgZGlzdHJpYnV0aW9uIGtlcm5lbHMgbWlnaHQgbmVlZCBpdCkuIFRoZXJlZm9yZSB3ZSBoYXZlCisJYWRkZWQgc3dhcGFjY291bnRbPTB8MV0gcGFyYW1ldGVyIChpbnRyb2R1Y2VkIGluIDIuNi4zNykgd2hpY2ggcHJvdmlkZXMKKwl0aGUgYm90aCBwb3NzaWJpbGl0aWVzLiBJZiB3ZSByZW1vdmUgbm9zd2FwYWNjb3VudCB3ZSB3aWxsIGhhdmUKKwlsZXNzIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhbmQgd2UKKwljYW4gYWxzbyBjbGVhbnVwIHRoZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYSBiaXQgKCkuCitXaG86CU1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY3o+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CmluZGV4IDZlZjhjZjMuLjkzM2JjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtNDYwLDYgKzQ2MCw4IEBACiAyLjEuMzA6CiAJLSBGaXggd3JpdGV2KCkgKGl0IGtlcHQgd3JpdGluZyB0aGUgZmlyc3Qgc2VnbWVudCBvdmVyIGFuZCBvdmVyIGFnYWluCiAJICBpbnN0ZWFkIG9mIG1vdmluZyBvbnRvIHN1YnNlcXVlbnQgc2VnbWVudHMpLgorCS0gRml4IGNyYXNoIGluIG50ZnNfbWZ0X3JlY29yZF9hbGxvYygpIHdoZW4gbWFwcGluZyB0aGUgbmV3IGV4dGVudCBtZnQKKwkgIHJlY29yZCBmYWlsZWQuCiAyLjEuMjk6CiAJLSBGaXggYSBkZWFkbG9jayB3aGVuIG1vdW50aW5nIHJlYWQtd3JpdGUuCiAyLjEuMjg6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGI3MmUwNzEuLjg5ODM1YTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00MywxMSArNDMsMTEgQEAKIAlBVlIzMglBVlIzMiBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlBWDI1CUFwcHJvcHJpYXRlIEFYLjI1IHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlCTEFDS0ZJTiBCbGFja2ZpbiBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlEUk0JRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VtZW50IHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlEWU5BTUlDX0RFQlVHIEJ1aWxkIGluIGRlYnVnIG1lc3NhZ2VzIGFuZCBlbmFibGUgdGhlbSBhdCBydW50aW1lCiAJRURECUJJT1MgRW5oYW5jZWQgRGlzayBEcml2ZSBTZXJ2aWNlcyAoRUREKSBpcyBlbmFibGVkCiAJRUZJCUVGSSBQYXJ0aXRpb25pbmcgKEdQVCkgaXMgZW5hYmxlZAogCUVJREUJRUlERS9BVEFQSSBzdXBwb3J0IGlzIGVuYWJsZWQuCi0JRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCi0JRFlOQU1JQ19ERUJVRyBCdWlsZCBpbiBkZWJ1ZyBtZXNzYWdlcyBhbmQgZW5hYmxlIHRoZW0gYXQgcnVudGltZQogCUZCCVRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGVuYWJsZWQuCiAJR0NPVglHQ09WIHByb2ZpbGluZyBpcyBlbmFibGVkLgogCUhXCUFwcHJvcHJpYXRlIGhhcmR3YXJlIGlzIGVuYWJsZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKaW5kZXggNWRjNjM4Ny4uMjVkMmY0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtNDksNyArNDksOCBAQAogMy4zCUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgd2l0aCBJZmVuc2xhdmUKIDMuMy4xCQlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyBNYW51YWxseQogMy40CUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgdmlhIFN5c2ZzCi0zLjUJT3ZlcnJpZGluZyBDb25maWd1cmF0aW9uIGZvciBTcGVjaWFsIENhc2VzCiszLjUJQ29uZmlndXJhdGlvbiB3aXRoIEludGVyZmFjZXMgU3VwcG9ydAorMy42CU92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogCiA0LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KIDQuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KQEAgLTE2MSw4ICsxNjIsOCBAQAogZGVmYXVsdCBrZXJuZWwgc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgogCiBTRUNPTkQgSU1QT1JUQU5UIE5PVEU6Ci0JSWYgeW91IHBsYW4gdG8gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgc3lzZnMsIHlvdSBkbyBub3QgbmVlZAotdG8gdXNlIGlmZW5zbGF2ZS4KKwlJZiB5b3UgcGxhbiB0byBjb25maWd1cmUgYm9uZGluZyB1c2luZyBzeXNmcyBvciB1c2luZyB0aGUKKy9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGZpbGUsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgaWZlbnNsYXZlLgogCiAyLiBCb25kaW5nIERyaXZlciBPcHRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NzksMjIgKzc4MCwyNiBAQAogCiAJWW91IGNhbiBjb25maWd1cmUgYm9uZGluZyB1c2luZyBlaXRoZXIgeW91ciBkaXN0cm8ncyBuZXR3b3JrCiBpbml0aWFsaXphdGlvbiBzY3JpcHRzLCBvciBtYW51YWxseSB1c2luZyBlaXRoZXIgaWZlbnNsYXZlIG9yIHRoZQotc3lzZnMgaW50ZXJmYWNlLiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0d28gcGFja2FnZXMgZm9yIHRoZQotbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcuICBSZWNlbnQKLXZlcnNpb25zIG9mIHRoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIKK3N5c2ZzIGludGVyZmFjZS4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdGhyZWUgcGFja2FnZXMgZm9yIHRoZQorbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cywgc3lzY29uZmlnIG9yIGludGVyZmFjZXMuCitSZWNlbnQgdmVyc2lvbnMgb2YgdGhlc2UgcGFja2FnZXMgaGF2ZSBzdXBwb3J0IGZvciBib25kaW5nLCB3aGlsZSBvbGRlcgogdmVyc2lvbnMgZG8gbm90LgogCiAJV2Ugd2lsbCBmaXJzdCBkZXNjcmliZSB0aGUgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYm9uZGluZyBmb3IKLWRpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgYW5kIHN5c2NvbmZpZyB3aXRoIGZ1bGwgb3IKLXBhcnRpYWwgc3VwcG9ydCBmb3IgYm9uZGluZywgdGhlbiBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nCitkaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzLCBzeXNjb25maWcgYW5kIGludGVyZmFjZXMgd2l0aCBmdWxsCitvciBwYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZwogYm9uZGluZyB3aXRob3V0IHN1cHBvcnQgZnJvbSB0aGUgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzIChpLmUuLAogb2xkZXIgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnKS4KIAotCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZyBvcgotaW5pdHNjcmlwdHMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCisJSWYgeW91J3JlIHVuc3VyZSB3aGV0aGVyIHlvdXIgZGlzdHJvIHVzZXMgc3lzY29uZmlnLAoraW5pdHNjcmlwdHMgb3IgaW50ZXJmYWNlcywgb3IgZG9uJ3Qga25vdyBpZiBpdCdzIG5ldyBlbm91Z2gsIGhhdmUgbm8gZmVhci4KIERldGVybWluaW5nIHRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KIAotCUZpcnN0LCBpc3N1ZSB0aGUgY29tbWFuZDoKKwlGaXJzdCwgbG9vayBmb3IgYSBmaWxlIGNhbGxlZCBpbnRlcmZhY2VzIGluIC9ldGMvbmV0d29yayBkaXJlY3RvcnkuCitJZiB0aGlzIGZpbGUgaXMgcHJlc2VudCBpbiB5b3VyIHN5c3RlbSwgdGhlbiB5b3VyIHN5c3RlbSB1c2UgaW50ZXJmYWNlcy4gU2VlCitDb25maWd1cmF0aW9uIHdpdGggSW50ZXJmYWNlcyBTdXBwb3J0LgorCisJRWxzZSwgaXNzdWUgdGhlIGNvbW1hbmQ6CiAKICQgcnBtIC1xZiAvc2Jpbi9pZnVwCiAKQEAgLTEzMjcsOCArMTMzMiw2MiBAQAogZWNobyArZXRoMiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCiBlY2hvICtldGgzID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKIAotMy41IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcworMy41IENvbmZpZ3VyYXRpb24gd2l0aCBJbnRlcmZhY2VzIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB3aGljaCB1c2UgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgZmlsZQordG8gZGVzY3JpYmUgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgbW9zdCBub3RhYmx5IERlYmlhbiBhbmQgaXQncworZGVyaXZhdGl2ZXMuCisKKwlUaGUgaWZ1cCBhbmQgaWZkb3duIGNvbW1hbmRzIG9uIERlYmlhbiBkb24ndCBzdXBwb3J0IGJvbmRpbmcgb3V0IG9mCit0aGUgYm94LiBUaGUgaWZlbnNsYXZlLTIuNiBwYWNrYWdlIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gcHJvdmlkZSBib25kaW5nCitzdXBwb3J0LiAgT25jZSBpbnN0YWxsZWQsIHRoaXMgcGFja2FnZSB3aWxsIHByb3ZpZGUgYm9uZC0qIG9wdGlvbnMgdG8gYmUgdXNlZAoraW50byAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy4KKworCU5vdGUgdGhhdCBpZmVuc2xhdmUtMi42IHBhY2thZ2Ugd2lsbCBsb2FkIHRoZSBib25kaW5nIG1vZHVsZSBhbmQgdXNlCit0aGUgaWZlbnNsYXZlIGNvbW1hbmQgd2hlbiBhcHByb3ByaWF0ZS4KKworRXhhbXBsZSBDb25maWd1cmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcywgdGhlIGZvbGxvd2luZyBzdGFuemEgd2lsbCBjb25maWd1cmUgYm9uZDAsIGluCithY3RpdmUtYmFja3VwIG1vZGUsIHdpdGggZXRoMCBhbmQgZXRoMSBhcyBzbGF2ZXMuCisKK2F1dG8gYm9uZDAKK2lmYWNlIGJvbmQwIGluZXQgZGhjcAorCWJvbmQtc2xhdmVzIGV0aDAgZXRoMQorCWJvbmQtbW9kZSBhY3RpdmUtYmFja3VwCisJYm9uZC1taWltb24gMTAwCisJYm9uZC1wcmltYXJ5IGV0aDAgZXRoMQorCitJZiB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiBkb2Vzbid0IHdvcmssIHlvdSBtaWdodCBoYXZlIGEgc3lzdGVtIHVzaW5nCit1cHN0YXJ0IGZvciBzeXN0ZW0gc3RhcnR1cC4gVGhpcyBpcyBtb3N0IG5vdGFibHkgdHJ1ZSBmb3IgcmVjZW50CitVYnVudHUgdmVyc2lvbnMuIFRoZSBmb2xsb3dpbmcgc3RhbnphIGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIHdpbGwKK3Byb2R1Y2UgdGhlIHNhbWUgcmVzdWx0IG9uIHRob3NlIHN5c3RlbXMuCisKK2F1dG8gYm9uZDAKK2lmYWNlIGJvbmQwIGluZXQgZGhjcAorCWJvbmQtc2xhdmVzIG5vbmUKKwlib25kLW1vZGUgYWN0aXZlLWJhY2t1cAorCWJvbmQtbWlpbW9uIDEwMAorCithdXRvIGV0aDAKK2lmYWNlIGV0aDAgaW5ldCBtYW51YWwKKwlib25kLW1hc3RlciBib25kMAorCWJvbmQtcHJpbWFyeSBldGgwIGV0aDEKKworYXV0byBldGgxCitpZmFjZSBldGgxIGluZXQgbWFudWFsCisJYm9uZC1tYXN0ZXIgYm9uZDAKKwlib25kLXByaW1hcnkgZXRoMCBldGgxCisKK0ZvciBhIGZ1bGwgbGlzdCBvZiBib25kLSogc3VwcG9ydGVkIG9wdGlvbnMgaW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgYW5kIHNvbWUKK21vcmUgYWR2YW5jZWQgZXhhbXBsZXMgdGFpbG9yZWQgdG8geW91IHBhcnRpY3VsYXIgZGlzdHJvcywgc2VlIHRoZSBmaWxlcyBpbgorL3Vzci9zaGFyZS9kb2MvaWZlbnNsYXZlLTIuNi4KKworMy42IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGVuIHVzaW5nIHRoZSBib25kaW5nIGRyaXZlciwgdGhlIHBoeXNpY2FsIHBvcnQgd2hpY2ggdHJhbnNtaXRzIGEgZnJhbWUgaXMKIHR5cGljYWxseSBzZWxlY3RlZCBieSB0aGUgYm9uZGluZyBkcml2ZXIsIGFuZCBpcyBub3QgcmVsZXZhbnQgdG8gdGhlIHVzZXIgb3IKIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiAgVGhlIG91dHB1dCBwb3J0IGlzIHNpbXBseSBzZWxlY3RlZCB1c2luZyB0aGUgcG9saWNpZXMgb2YKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZDk5OTQwZC4uYWMzYjRhNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTE4Nyw3ICsxODcsNyBAQAogdGNwX2RzYWNrIC0gQk9PTEVBTgogCUFsbG93cyBUQ1AgdG8gc2VuZCAiZHVwbGljYXRlIiBTQUNLcy4KIAotdGNwX2VjbiAtIEJPT0xFQU4KK3RjcF9lY24gLSBJTlRFR0VSCiAJRW5hYmxlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pIGluIFRDUC4gRUNOIGlzIG9ubHkKIAl1c2VkIHdoZW4gYm90aCBlbmRzIG9mIHRoZSBUQ1AgZmxvdyBzdXBwb3J0IGl0LiBJdCBpcyB1c2VmdWwgdG8KIAlhdm9pZCBsb3NzZXMgZHVlIHRvIGNvbmdlc3Rpb24gKHdoZW4gdGhlIGJvdHRsZW5lY2sgcm91dGVyIHN1cHBvcnRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKaW5kZXggMDFlNjk0MC4uMWNkNWQ1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dApAQCAtMSwzICsxLDcgQEAKK1ZlcnNpb24gMTUgb2Ygc2NoZWRzdGF0cyBkcm9wcGVkIGNvdW50ZXJzIGZvciBzb21lIHNjaGVkX3lpZWxkOgoreWxkX2V4cF9lbXB0eSwgeWxkX2FjdF9lbXB0eSBhbmQgeWxkX2JvdGhfZW1wdHkuIE90aGVyd2lzZSwgaXQgaXMKK2lkZW50aWNhbCB0byB2ZXJzaW9uIDE0LgorCiBWZXJzaW9uIDE0IG9mIHNjaGVkc3RhdHMgaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2NoZWRfZG9tYWlucywgd2hpY2ggaGl0IHRoZQogbWFpbmxpbmUga2VybmVsIGluIDIuNi4yMCBhbHRob3VnaCBpdCBpcyBpZGVudGljYWwgdG8gdGhlIHN0YXRzIGZyb20gdmVyc2lvbgogMTIgd2hpY2ggd2FzIGluIHRoZSBrZXJuZWwgZnJvbSAyLjYuMTMtMi42LjE5ICh2ZXJzaW9uIDEzIG5ldmVyIHNhdyBhIGtlcm5lbApAQCAtMjgsMzIgKzMyLDI1IEBACiAKIENQVSBzdGF0aXN0aWNzCiAtLS0tLS0tLS0tLS0tLQotY3B1PE4+IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyCitjcHU8Tj4gMSAyIDMgNCA1IDYgNyA4IDkKIAotTk9URTogSW4gdGhlIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljcywgdGhlIGFjdGl2ZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGVtcHR5Ci0gICAgaWYgaXQgaGFzIG9ubHkgb25lIHByb2Nlc3MgaW4gaXQsIHNpbmNlIG9idmlvdXNseSB0aGUgcHJvY2VzcyBjYWxsaW5nCi0gICAgc2NoZWRfeWllbGQoKSBpcyB0aGF0IHByb2Nlc3MuCi0KLUZpcnN0IGZvdXIgZmllbGRzIGFyZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3M6Ci0gICAgIDEpICMgb2YgdGltZXMgYm90aCB0aGUgYWN0aXZlIGFuZCB0aGUgZXhwaXJlZCBxdWV1ZSB3ZXJlIGVtcHR5Ci0gICAgIDIpICMgb2YgdGltZXMganVzdCB0aGUgYWN0aXZlIHF1ZXVlIHdhcyBlbXB0eQotICAgICAzKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGV4cGlyZWQgcXVldWUgd2FzIGVtcHR5Ci0gICAgIDQpICMgb2YgdGltZXMgc2NoZWRfeWllbGQoKSB3YXMgY2FsbGVkCitGaXJzdCBmaWVsZCBpcyBhIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljOgorICAgICAxKSAjIG9mIHRpbWVzIHNjaGVkX3lpZWxkKCkgd2FzIGNhbGxlZAogCiBOZXh0IHRocmVlIGFyZSBzY2hlZHVsZSgpIHN0YXRpc3RpY3M6Ci0gICAgIDUpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAotICAgICA2KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAotICAgICA3KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKKyAgICAgMikgIyBvZiB0aW1lcyB3ZSBzd2l0Y2hlZCB0byB0aGUgZXhwaXJlZCBxdWV1ZSBhbmQgcmV1c2VkIGl0CisgICAgIDMpICMgb2YgdGltZXMgc2NoZWR1bGUoKSB3YXMgY2FsbGVkCisgICAgIDQpICMgb2YgdGltZXMgc2NoZWR1bGUoKSBsZWZ0IHRoZSBwcm9jZXNzb3IgaWRsZQogCiBOZXh0IHR3byBhcmUgdHJ5X3RvX3dha2VfdXAoKSBzdGF0aXN0aWNzOgotICAgICA4KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZAotICAgICA5KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZCB0byB3YWtlIHVwIHRoZSBsb2NhbCBjcHUKKyAgICAgNSkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQKKyAgICAgNikgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQgdG8gd2FrZSB1cCB0aGUgbG9jYWwgY3B1CiAKIE5leHQgdGhyZWUgYXJlIHN0YXRpc3RpY3MgZGVzY3JpYmluZyBzY2hlZHVsaW5nIGxhdGVuY3k6Ci0gICAgMTApIHN1bSBvZiBhbGwgdGltZSBzcGVudCBydW5uaW5nIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbiBqaWZmaWVzKQotICAgIDExKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgd2FpdGluZyB0byBydW4gYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluCisgICAgIDcpIHN1bSBvZiBhbGwgdGltZSBzcGVudCBydW5uaW5nIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbiBqaWZmaWVzKQorICAgICA4KSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgd2FpdGluZyB0byBydW4gYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluCiAgICAgICAgIGppZmZpZXMpCi0gICAgMTIpICMgb2YgdGltZXNsaWNlcyBydW4gb24gdGhpcyBjcHUKKyAgICAgOSkgIyBvZiB0aW1lc2xpY2VzIHJ1biBvbiB0aGlzIGNwdQogCiAKIERvbWFpbiBzdGF0aXN0aWNzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDE2YWU0MzAuLjBjYWY3N2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yOTYsNiArMjk2LDcgQEAKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGhwLWxhcHRvcAlIUCBsYXB0b3BzLCBlIGcgRzYwCisgIGFzdXMJCUFzdXMgSzUySlUsIExlbm92byBHNTYwCiAgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcwogICBkZWxsLXZvc3RybwlEZWxsIFZvc3RybwogICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1NTU5MmY4Li41MzFjNWNmIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtOTc4LDYgKzk3OCw4IEBACiBGOglhcmNoL2FybS9wbGF0LXNhbXN1bmcvCiBGOglhcmNoL2FybS9wbGF0LXMzYzI0eHgvCiBGOglhcmNoL2FybS9wbGF0LXM1cC8KK0Y6CWRyaXZlcnMvKi8qczNjMjQxMCoKK0Y6CWRyaXZlcnMvKi8qLypzM2MyNDEwKgogCiBBUk0vUzNDMjQxMCBBUk0gQVJDSElURUNUVVJFCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CkBAIC0zMTM5LDYgKzMxNDEsMTIgQEAKIEY6CW5ldC9pZWVlODAyMTU0LwogRjoJZHJpdmVycy9pZWVlODAyMTU0LwogCitJS0FOT1MvQURJIEVBR0xFIEFEU0wgVVNCIERSSVZFUgorTToJTWF0dGhpZXUgQ2FzdGV0IDxjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcj4KK006CVN0YW5pc2xhdyBHcnVzemthIDxzdGZfeGxAd3AucGw+CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCisKIElOVEVHUklUWSBNRUFTVVJFTUVOVCBBUkNISVRFQ1RVUkUgKElNQSkKIE06CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CiBTOglTdXBwb3J0ZWQKQEAgLTMzMjcsNyArMzMzNSw2IEBACiBGOglpbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCiAKIElOVEVMIFdJUkVMRVNTIFdJRkkgTElOSyAoaXdsd2lmaSkKLU06CVJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KIE06CVdleS1ZaSBHdXkgPHdleS15aS53Lmd1eUBpbnRlbC5jb20+CiBNOglJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwpAQCAtMzY3NCw2ICszNjgxLDI4IEBACiBGOglpbmNsdWRlL2tleXMvCiBGOglzZWN1cml0eS9rZXlzLwogCitLRVlTLVRSVVNURUQKK006CURhdmlkIFNhZmZvcmQgPHNhZmZvcmRAd2F0c29uLmlibS5jb20+CitNOglNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZworTDoJa2V5cmluZ3NAbGludXgtbmZzLm9yZworUzoJU3VwcG9ydGVkCitGOglEb2N1bWVudGF0aW9uL2tleXMtdHJ1c3RlZC1lbmNyeXB0ZWQudHh0CitGOglpbmNsdWRlL2tleXMvdHJ1c3RlZC10eXBlLmgKK0Y6CXNlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCitGOglzZWN1cml0eS9rZXlzL3RydXN0ZWQuaAorCitLRVlTLUVOQ1JZUFRFRAorTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KK006CURhdmlkIFNhZmZvcmQgPHNhZmZvcmRAd2F0c29uLmlibS5jb20+CitMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnCitMOglrZXlyaW5nc0BsaW51eC1uZnMub3JnCitTOglTdXBwb3J0ZWQKK0Y6CURvY3VtZW50YXRpb24va2V5cy10cnVzdGVkLWVuY3J5cHRlZC50eHQKK0Y6CWluY2x1ZGUva2V5cy9lbmNyeXB0ZWQtdHlwZS5oCitGOglzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5jCitGOglzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5oCisKIEtHREIgLyBLREIgL2RlYnVnX2NvcmUKIE06CUphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CiBXOglodHRwOi8va2dkYi53aWtpLmtlcm5lbC5vcmcvCkBAIC01NTIyLDEyICs1NTUxLDExIEBACiBGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCiAKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgotTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KLU06CVNhcnZlc2h3YXIgQmFuZGkgPHNhcnZlc2h3YXJiQHNlcnZlcmVuZ2luZXMuY29tPgotTToJQWppdCBLaGFwYXJkZSA8YWppdGtAc2VydmVyZW5naW5lcy5jb20+CitNOglTYXRoeWEgUGVybGEgPHNhdGh5YS5wZXJsYUBlbXVsZXguY29tPgorTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1LnNlZXRoYXJhbWFuQGVtdWxleC5jb20+CitNOglBaml0IEtoYXBhcmRlIDxhaml0LmtoYXBhcmRlQGVtdWxleC5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitXOglodHRwOi8vd3d3LmVtdWxleC5jb20KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvYmVuZXQvCiAKQEAgLTU1ODcsMTggKzU2MTUsMjAgQEAKIAogU0lNVEVDIEVCMTEwQVRYIChDaGFsaWNlIENBVFMpCiBQOglCZW4gRG9va3MKLU06CVZpbmNlbnQgU2FuZGVycyA8c3VwcG9ydEBzaW10ZWMuY28udWs+CitQOglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KK006CVNpbXRlYyBMaW51eCBUZWFtIDxsaW51eEBzaW10ZWMuY28udWs+CiBXOglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjExMEFUWC8KIFM6CVN1cHBvcnRlZAogCiBTSU1URUMgRUIyNDEwSVRYIChCQVNUKQogUDoJQmVuIERvb2tzCi1NOglWaW5jZW50IFNhbmRlcnMgPHN1cHBvcnRAc2ltdGVjLmNvLnVrPgorUDoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CitNOglTaW10ZWMgTGludXggVGVhbSA8bGludXhAc2ltdGVjLmNvLnVrPgogVzoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLwogUzoJU3VwcG9ydGVkCi1GOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvCi1GOglkcml2ZXJzLyovKnMzYzI0MTAqCi1GOglkcml2ZXJzLyovKi8qczNjMjQxMCoKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaWRlLmMKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCiAKIFRJIERBVklOQ0kgTUFDSElORSBTVVBQT1JUCiBNOglLZXZpbiBIaWxtYW4gPGtoaWxtYW5AZGVlcHJvb3RzeXN0ZW1zLmNvbT4KQEAgLTY1NzMsNiArNjYwMywxNiBAQAogRjoJZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKIEY6CWluY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAogCitWSVJUSU8gQ09SRSwgTkVUIEFORCBCTE9DSyBEUklWRVJTCitNOglSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+CitNOgkiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+CitMOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy92aXJ0aW8vCitGOglkcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKK0Y6CWRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCitGOglpbmNsdWRlL2xpbnV4L3ZpcnRpb18qLmgKKwogVklSVElPIEhPU1QgKFZIT1NUKQogTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgogTDoJa3ZtQHZnZXIua2VybmVsLm9yZwpAQCAtNjc0NiwxMiArNjc4NiwxMiBAQAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxLyoKIAogV0wxMjcxIFdJUkVMRVNTIERSSVZFUgotTToJTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KK006CUx1Y2lhbm8gQ29lbGhvIDxjb2VsaG9AdGkuY29tPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZworVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy93bDEyeHgKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbHVjYS93bDEyeHguZ2l0CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxKgorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4LwogRjoJaW5jbHVkZS9saW51eC93bDEyeHguaAogCiBXTDM1MDEgV0lSRUxFU1MgUENNQ0lBIENBUkQgRFJJVkVSCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDFmNDc0OTUuLmM5YzhjOGYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDM4Ci1FWFRSQVZFUlNJT04gPSAtcmMyCitFWFRSQVZFUlNJT04gPSAtcmM0CiBOQU1FID0gRmxlc2gtRWF0aW5nIEJhdHMgd2l0aCBGYW5ncwogCiAjICpET0NVTUVOVEFUSU9OKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmgKaW5kZXggYTEwMWYxMC4uNzIxODQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oCkBAIC01MCw2ICs1MCwxMiBAQAogI2RlZmluZSBTQ1BDRUxMSUQyCQkweEZGOAogI2RlZmluZSBTQ1BDRUxMSUQzCQkweEZGQwogCisjZGVmaW5lIFNDQ1RSTF9USU1FUkVOMFNFTF9SRUZDTEsJKDAgPDwgMTUpCisjZGVmaW5lIFNDQ1RSTF9USU1FUkVOMFNFTF9USU1DTEsJKDEgPDwgMTUpCisKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4xU0VMX1JFRkNMSwkoMCA8PCAxNykKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4xU0VMX1RJTUNMSwkoMSA8PCAxNykKKwogc3RhdGljIGlubGluZSB2b2lkIHN5c2N0bF9zb2Z0X3Jlc2V0KHZvaWQgX19pb21lbSAqYmFzZSkKIHsKIAkvKiB3cml0aW5nIGFueSB2YWx1ZSB0byBTQ1NZU1NUQVQgcmVnIHdpbGwgcmVzZXQgc3lzdGVtICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAppbmRleCAyMGUwZjdjLi5kNjY2MDVkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC05NSw2ICs5NSwxNSBAQAogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKIH0KIAorLyogSU8gYmFycmllcnMgKi8KKyNpZmRlZiBDT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRQorI2RlZmluZSBfX2lvcm1iKCkJCXJtYigpCisjZGVmaW5lIF9faW93bWIoKQkJd21iKCkKKyNlbHNlCisjZGVmaW5lIF9faW9ybWIoKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2lvd21iKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKgogICogTm93LCBwaWNrIHVwIHRoZSBtYWNoaW5lLWRlZmluZWQgSU8gZGVmaW5pdGlvbnMKICAqLwpAQCAtMTI1LDE3ICsxMzQsMTcgQEAKICAqIFRoZSB7aW4sb3V0fVtid2xdIG1hY3JvcyBhcmUgZm9yIGVtdWxhdGluZyB4ODYtc3R5bGUgUENJL0lTQSBJTyBzcGFjZS4KICAqLwogI2lmZGVmIF9faW8KLSNkZWZpbmUgb3V0Yih2LHApCQlfX3Jhd193cml0ZWIodixfX2lvKHApKQotI2RlZmluZSBvdXR3KHYscCkJCV9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAotCQkJCQljcHVfdG9fbGUxNih2KSxfX2lvKHApKQotI2RlZmluZSBvdXRsKHYscCkJCV9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMikgXAotCQkJCQljcHVfdG9fbGUzMih2KSxfX2lvKHApKQorI2RlZmluZSBvdXRiKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWIodixfX2lvKHApKTsgfSkKKyNkZWZpbmUgb3V0dyh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLF9faW8ocCkpOyB9KQorI2RlZmluZSBvdXRsKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKKwkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSk7IH0pCiAKLSNkZWZpbmUgaW5iKHApCSh7IF9fdTggX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5iKHApCSh7IF9fdTggX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSBpbncocCkJKHsgX191MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCi0JCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9fdjsgfSkKKwkJCV9fcmF3X3JlYWR3KF9faW8ocCkpKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAjZGVmaW5lIGlubChwKQkoeyBfX3UzMiBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpIFwKLQkJCV9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX192OyB9KQorCQkJX19yYXdfcmVhZGwoX19pbyhwKSkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKIAogI2RlZmluZSBvdXRzYihwLGQsbCkJCV9fcmF3X3dyaXRlc2IoX19pbyhwKSxkLGwpCiAjZGVmaW5lIG91dHN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX2lvKHApLGQsbCkKQEAgLTE5MiwxNCArMjAxLDYgQEAKICNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQodixjKQkoKHZvaWQpX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgXAogCQkJCQljcHVfdG9fbGUzMih2KSxfX21lbV9wY2koYykpKQogCi0jaWZkZWYgQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEUKLSNkZWZpbmUgX19pb3JtYigpCQlybWIoKQotI2RlZmluZSBfX2lvd21iKCkJCXdtYigpCi0jZWxzZQotI2RlZmluZSBfX2lvcm1iKCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19pb3dtYigpCQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2RlZmluZSByZWFkYihjKQkJKHsgdTggIF9fdiA9IHJlYWRiX3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSByZWFkdyhjKQkJKHsgdTE2IF9fdiA9IHJlYWR3X3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSByZWFkbChjKQkJKHsgdTMyIF9fdiA9IHJlYWRsX3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAppbmRleCAyM2MyZThlLi5kMGVlNzRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaApAQCAtMTg4LDcgKzE4OCw3IEBACiAgKiB0cmFuc2xhdGlvbiBmb3IgdHJhbnNsYXRpbmcgRE1BIGFkZHJlc3Nlcy4gIFVzZSB0aGUgZHJpdmVyCiAgKiBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvaWQgKngpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKGNvbnN0IHZvbGF0aWxlIHZvaWQgKngpCiB7CiAJcmV0dXJuIF9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCBmMTdkOWEwLi5jMDIyNWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTM5MiwyNCArMzkyLDIyIEBACiAKICNpZmRlZiBDT05GSUdfU01QX09OX1VQCiBfX2ZpeHVwX3NtcDoKLQltb3YJcjQsICMweDAwMDcwMDAwCi0Jb3JyCXIzLCByNCwgIzB4ZmYwMDAwMDAJQCBtYXNrIDB4ZmYwNzAwMDAKLQlvcnIJcjQsIHI0LCAjMHg0MTAwMDAwMAlAIHZhbCAweDQxMDcwMDAwCi0JYW5kCXIwLCByOSwgcjMKLQl0ZXEJcjAsIHI0CQkJQCBBUk0gQ1BVIGFuZCBBUk12Ni92Nz8KKwlhbmQJcjMsIHI5LCAjMHgwMDBmMDAwMAlAIGFyY2hpdGVjdHVyZSB2ZXJzaW9uCisJdGVxCXIzLCAjMHgwMDBmMDAwMAkJQCBDUFUgSUQgc3VwcG9ydGVkPwogCWJuZQlfX2ZpeHVwX3NtcF9vbl91cAlAIG5vLCBhc3N1bWUgVVAKIAotCW9ycglyMywgcjMsICMweDAwMDBmZjAwCi0Jb3JyCXIzLCByMywgIzB4MDAwMDAwZjAJQCBtYXNrIDB4ZmYwN2ZmZjAKKwliaWMJcjMsIHI5LCAjMHgwMGZmMDAwMAorCWJpYwlyMywgcjMsICMweDAwMDAwMDBmCUAgbWFzayAweGZmMDBmZmYwCisJbW92CXI0LCAjMHg0MTAwMDAwMAogCW9ycglyNCwgcjQsICMweDAwMDBiMDAwCi0Jb3JyCXI0LCByNCwgIzB4MDAwMDAwMjAJQCB2YWwgMHg0MTA3YjAyMAotCWFuZAlyMCwgcjksIHIzCi0JdGVxCXIwLCByNAkJCUAgQVJNIDExTVBDb3JlPworCW9ycglyNCwgcjQsICMweDAwMDAwMDIwCUAgdmFsIDB4NDEwMGIwMjAKKwl0ZXEJcjMsIHI0CQkJQCBBUk0gMTFNUENvcmU/CiAJbW92ZXEJcGMsIGxyCQkJQCB5ZXMsIGFzc3VtZSBTTVAKIAogCW1yYwlwMTUsIDAsIHIwLCBjMCwgYzAsIDUJQCByZWFkIE1QSURSCi0JdHN0CXIwLCAjMSA8PCAzMQotCW1vdm5lCXBjLCBscgkJCUAgYml0IDMxID0+IFNNUAorCWFuZAlyMCwgcjAsICMweGMwMDAwMDAwCUAgbXVsdGlwcm9jZXNzaW5nIGV4dGVuc2lvbnMgYW5kCisJdGVxCXIwLCAjMHg4MDAwMDAwMAkJQCBub3QgcGFydCBvZiBhIHVuaXByb2Nlc3NvciBzeXN0ZW0/CisJbW92ZXEJcGMsIGxyCQkJQCB5ZXMsIGFzc3VtZSBTTVAKIAogX19maXh1cF9zbXBfb25fdXA6CiAJYWRyCXIwLCAxZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKaW5kZXggZmQ5MTU2Ni4uNjA2MzZmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCkBAIC0zNiw2ICszNiw3IEBACiAJCS8qIHRpbWVyIGxvYWQgYWxyZWFkeSBzZXQgdXAgKi8KIAkJY3RybCA9IFRXRF9USU1FUl9DT05UUk9MX0VOQUJMRSB8IFRXRF9USU1FUl9DT05UUk9MX0lUX0VOQUJMRQogCQkJfCBUV0RfVElNRVJfQ09OVFJPTF9QRVJJT0RJQzsKKwkJX19yYXdfd3JpdGVsKHR3ZF90aW1lcl9yYXRlIC8gSFosIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0xPQUQpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CiAJCS8qIHBlcmlvZCBzZXQsIGFuZCB0aW1lciBlbmFibGVkIGluICduZXh0X2V2ZW50JyBob29rICovCkBAIC04MSw3ICs4Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCB0d2RfY2FsaWJyYXRlX3JhdGUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvYWQsIGNvdW50OworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJdTY0IHdhaXRqaWZmaWVzOwogCiAJLyoKQEAgLTExNiwxMCArMTE3LDYgQEAKIAkJcHJpbnRrKCIlbHUuJTAybHVNSHouXG4iLCB0d2RfdGltZXJfcmF0ZSAvIDEwMDAwMDAsCiAJCQkodHdkX3RpbWVyX3JhdGUgLyAxMDAwMDAwKSAlIDEwMCk7CiAJfQotCi0JbG9hZCA9IHR3ZF90aW1lcl9yYXRlIC8gSFo7Ci0KLQlfX3Jhd193cml0ZWwobG9hZCwgdHdkX2Jhc2UgKyBUV0RfVElNRVJfTE9BRCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggZmZkZjg3Yi4uODIwNzk1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtODM4LDcgKzgzOCw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9hYzk3X3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UsCi0JCS5lbmQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSArIDB4YjAgLSAxLAorCQkuZW5kCT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UgKyAweGFjIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggZjNkYzc2Zi4uYmVjMzRiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtNDI3LDYgKzQyNywxMyBAQAogewogCWludCBpOwogCisJLyogU2V0IFBvcnRzIEMsIEQsIEUsIEcsIGFuZCBIIGZvciBHUElPIHVzZSAqLworCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfS0VZUyB8CisJCQkJIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTksgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19FT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19HT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IT05JREUpOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspCiAJCWdwaW9jaGlwX2FkZCgmZXA5M3h4X2dwaW9fYmFua3NbaV0uY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggM2M5ZTBjNC4uMzBiOTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTcsOCArMTcsOCBAQAogCS8qIEZvciBOZXRXaW5kZXIgZGVidWdnaW5nICovCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CiAJCW1vdglccnAsICMweDAwMDAwM2Y4Ci0JCW9ycglccnYsIFxycCwgIzB4N2MwMDAwMDAJQCBwaHlzaWNhbAotCQlvcnIJXHJwLCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJ2LCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJwLCBccnAsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKIAkJLmVuZG0KIAogI2RlZmluZSBVQVJUX1NISUZUCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwppbmRleCBhYTc2Y2ZkLi44MzgyZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAlLRVkoMywgMywgS0VZX1BPV0VSKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmtleW1hcAkJPSBteDI1cGRrX2tleW1hcCwKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDRkYzY4ZDYuLjlmZDg5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi11bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxID0gRlJFUTsKK3Vuc2lnbmVkIGxvbmcgaXhwNHh4X3RpbWVyX2ZyZXEgPSBJWFA0WFhfVElNRVJfRlJFUTsKIEVYUE9SVF9TWU1CT0woaXhwNHh4X3RpbWVyX2ZyZXEpOwogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CkBAIC00OTYsNyArNDk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja2V2ZW50X2luaXQodm9pZCkKIHsKLQljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKEZSRVEsIE5TRUNfUEVSX1NFQywKKwljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKElYUDRYWF9USU1FUl9GUkVRLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfaXhwNHh4LnNoaWZ0KTsKIAljbG9ja2V2ZW50X2l4cDR4eC5tYXhfZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50X2l4cDR4eCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDJjM2Y5M2MuLmM5ZTkzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKiA2Ni42Ni4uLiBNSHouIFdlIGRvIGEgY29udnVsdGVkIGNhbGN1bGF0aW9uIG9mIENMT0NLX1RJQ0tfUkFURSBiL2MgdGhlCiAgKiB0aW1lciByZWdpc3RlciBpZ25vcmVzIHRoZSBib3R0b20gMiBiaXRzIG9mIHRoZSBMQVRDSCB2YWx1ZS4KICAqLwotI2RlZmluZSBGUkVRIDY2NjY2MDAwCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoKChGUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBJWFA0WFhfVElNRVJfRlJFUSA2NjY2NjAwMAorI2RlZmluZSBDTE9DS19USUNLX1JBVEUgXAorCSgoKElYUDRYWF9USU1FUl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYwppbmRleCBiZmRiZTRiLi44NTJmN2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9xbWdyLmMKQEAgLTI2NSw2ICsyNjUsMTEgQEAKIAkgICAgICAgcW1ncl9xdWV1ZV9kZXNjc1txdWV1ZV0sIHF1ZXVlKTsKIAlxbWdyX3F1ZXVlX2Rlc2NzW3F1ZXVlXVswXSA9ICdceDAnOwogI2VuZGlmCisKKwl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQorCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAorCQkgICAgICAgcXVldWUsIGFkZHIpOworCiAJX19yYXdfd3JpdGVsKDAsICZxbWdyX3JlZ3MtPnNyYW1bcXVldWVdKTsKIAogCXVzZWRfc3JhbV9iaXRtYXBbMF0gJj0gfm1hc2tbMF07CkBAIC0yNzUsMTAgKzI4MCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxbWdyX2xvY2spOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLQl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQotCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAotCQkgICAgICAgcXVldWUsIGFkZHIpOwogfQogCiBzdGF0aWMgaW50IHFtZ3JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCmluZGV4IGIxYTM2MmUuLmNhNzJhMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJCVwKIAlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAotCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAorCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAogCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtMzQ3LDcgKzM0Nyw3IEBACiB7CQkJCQkJCQkJXAogCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpIHsJCQkJCVwKIAkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU18jI2JpdCwJCVwKLQkJCSBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwkJCVwKKwkJCSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CVwKIAkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CQkJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDU2MzEyYzAuLmZkMWM0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTM1NSwxMiArMzU1LDEyIEBACiAJfSBlbHNlIHsJCQkJCQkJXAogCQlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAogCQlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQlcCi0JCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCisJCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCiAJCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwlcCiAJCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJfQkJCQkJCQlcCiAJfQkJCQkJCQkJXAotCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFUpOwkJXAorCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAkJCQkJCQkJCVwKIAlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKIAkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogewkJCQkJCQkJCVwKIAlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KSB7CQkJCQlcCiAJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfIyNiaXQsCQlcCi0JCQkgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJCQlcCisJCQkgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwlcCiAJCWNsay0+cGFyZW50ID0gcGFyZW50OwkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTYwOSw3ICs2MDksNiBAQAogCV9SRUdJU1RFUl9DTE9DSygiZHVhcnQiLCBOVUxMLCB1YXJ0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4xIiwgTlVMTCwgZmVjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInJ0YyIsIE5VTEwsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJwbGwyIiwgTlVMTCwgcGxsMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGJ1c19jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwppbmRleCBlN2QyMjY5Li5hNzA5M2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLmMKQEAgLTU3LDcgKzU3LDYgQEAKIAkJaWYgKGNsay0+ZGlzYWJsZSkKIAkJCWNsay0+ZGlzYWJsZShjbGspOwogCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZGlzYWJsZShjbGstPnNlY29uZGFyeSk7CiAJfQogfQogCkBAIC02OCw3ICs2Nyw2IEBACiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKIAkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZW5hYmxlKGNsay0+c2Vjb25kYXJ5KTsKIAogCQlpZiAoY2xrLT5lbmFibGUpCiAJCQljbGstPmVuYWJsZShjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCmluZGV4IGQ3YWQ3YTYuLmNiMGMwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTEzOSw2ICsxMzksOCBAQAogCXN0cnVjdCBteHNfZ3Bpb19wb3J0ICpwb3J0ID0gKHN0cnVjdCBteHNfZ3Bpb19wb3J0ICopZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGdwaW9faXJxX25vX2Jhc2UgPSBwb3J0LT52aXJ0dWFsX2lycV9zdGFydDsKIAorCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsKKwogCWlycV9zdGF0ID0gX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRU1RBVChwb3J0LT5pZCkpICYKIAkJCV9fcmF3X3JlYWRsKHBvcnQtPmJhc2UgKyBQSU5DVFJMX0lSUUVOKHBvcnQtPmlkKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggMDQxZTI3Ni4uNTkyYzlhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKQEAgLTI5LDggKzI5LDYgQEAKIAlpbnQgaWQ7CiAJLyogU291cmNlIGNsb2NrIHRoaXMgY2xrIGRlcGVuZHMgb24gKi8KIAlzdHJ1Y3QgY2xrICpwYXJlbnQ7Ci0JLyogU2Vjb25kYXJ5IGNsb2NrIHRvIGVuYWJsZS9kaXNhYmxlIHdpdGggdGhpcyBjbG9jayAqLwotCXN0cnVjdCBjbGsgKnNlY29uZGFyeTsKIAkvKiBSZWZlcmVuY2UgY291bnQgb2YgY2xvY2sgZW5hYmxlL2Rpc2FibGUgKi8KIAlfX3M4IHVzZWNvdW50OwogCS8qIFJlZ2lzdGVyIGJpdCBwb3NpdGlvbiBmb3IgY2xvY2sncyBlbmFibGUvZGlzYWJsZSBjb250cm9sLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCmluZGV4IDhkMmYyZGEuLmUwYTAyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKQEAgLTksNiArOSw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJYm9vbCAiT01BUDczMCBCYXNlZCBTeXN0ZW0iCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IE9NQVBfTVBVX1RJTUVSCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAogY29uZmlnIEFSQ0hfT01BUDg1MApAQCAtMjIsNiArMjMsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIk9NQVAxNXh4IEJhc2VkIFN5c3RlbSIKIAlzZWxlY3QgQ1BVX0FSTTkyNVQKKwlzZWxlY3QgT01BUF9NUFVfVElNRVIKIAogY29uZmlnIEFSQ0hfT01BUDE2WFgKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IDZlZTE5NTAuLmJhNjAwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtMywxMiArMywxMSBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIGlycS5vIG11eC5vIGZsYXNoLm8gc2VyaWFsLm8gZGV2aWNlcy5vIGRtYS5vCitvYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIHRpbWUubyBpcnEubyBtdXgubyBmbGFzaC5vIHNlcmlhbC5vIGRldmljZXMubyBkbWEubwogb2JqLXkgKz0gY2xvY2subyBjbG9ja19kYXRhLm8gb3BwX2RhdGEubwogCiBvYmotJChDT05GSUdfT01BUF9NQ0JTUCkgKz0gbWNic3AubwogCi1vYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCSs9IHRpbWUubwogb2JqLSQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQkrPSB0aW1lcjMyay5vCiAKICMgUG93ZXIgTWFuYWdlbWVudApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggYzliZTZkNC4uYmZiNGZiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xNCwxOSArMTQsNiBAQAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KIAotLyoKLSAqIFdlIHVzZSBfX2dsdWUgdG8gYXZvaWQgZXJyb3JzIHdpdGggbXVsdGlwbGUgZGVmaW5pdGlvbnMgb2YKLSAqIC5nbG9ibCBvbWFwX2lycV9mbGFncyBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKLSAqIGZyb20gZW50cnktY29tbW9uLlMuCi0gKi8KLSNpZmRlZiBfX2dsdWUKLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi0JCS5nbG9ibAlvbWFwX2lycV9mbGFncwotb21hcF9pcnFfZmxhZ3M6Ci0JCS53b3JkCTAKLQkJLnBvcHNlY3Rpb24KLSNlbmRpZgotCiAgCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKaW5kZXggNDc3MDE1OC4uNzMxZGQzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyB3YWtlX2VuYWJsZTsKIH07CiAKK3UzMiBvbWFwX2lycV9mbGFnczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX2JhbmtfY291bnQ7CiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2JhbmsgKmlycV9iYW5rczsKIApAQCAtMTc2LDcgKzE3Nyw2IEBACiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKIHsKLQlleHRlcm4gdW5zaWduZWQgaW50IG9tYXBfaXJxX2ZsYWdzOwogCWludCBpLCBqOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xjZF9kbWEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCmluZGV4IGM5MDg4ZDguLjQ1MzgwOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCkBAIC0zNyw3ICszNyw3IEBACiAJICogT24gT01BUDE1MTAsIGludGVybmFsIExDRCBjb250cm9sbGVyIHdpbGwgc3RhcnQgdGhlIHRyYW5zZmVyCiAJICogd2hlbiBpdCBnZXRzIGVuYWJsZWQsIHNvIGFzc3VtZSBETUEgcnVubmluZyBpZiBMQ0QgZW5hYmxlZC4KIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQlpZiAob21hcF9yZWFkdyhPTUFQX0xDRENfQ09OVFJPTCkgJiBPTUFQX0xDRENfQ1RSTF9MQ0RfRU4pCiAJCQlyZXR1cm4gMTsKIApAQCAtOTUsNyArOTUsNyBAQAogCiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSkKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IoaW50IG1pcnJvcikKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgbWlycm9yIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJfQpAQCAtMTE2LDcgKzExNiw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyh1bnNpZ25lZCBsb25nIHZ4cmVzKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSB2aXJ0dWFsIHJlc3Vsb3Rpb24gaXMgbm90IHN1cHBvcnRlZCAiCiAJCQkJImluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9zY2FsZSh1bnNpZ25lZCBpbnQgeHNjYWxlLCB1bnNpZ25lZCBpbnQgeXNjYWxlKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSBzY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwogCX0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKIAkJCS8qIDE1MTAgRE1BIHJlcXVpcmVzIHRoZSBib3R0b20gYWRkcmVzcyB0byBiZSAyIG1vcmUKIAkJCSAqIHRoYW4gdGhlIGFjdHVhbCBsYXN0IG1lbW9yeSBhY2Nlc3MgbG9jYXRpb24uICovCi0JCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgJiYKKwkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJgogCQkJCWxjZF9kbWEuZGF0YV90eXBlID09IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIpCiAJCQkJCWJvdHRvbSArPSAyOwogCQkJZWkgPSBQSVhTVEVQKDAsIDAsIDEsIDApOwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCXJldHVybjsJLyogU3VwcHJlc3Mgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIHZhcnMgKi8KIAl9CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF93cml0ZXcodG9wID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9VKTsKIAkJb21hcF93cml0ZXcodG9wLCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MKTsKIAkJb21hcF93cml0ZXcoYm90dG9tID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VKTsKQEAgLTM0Myw3ICszNDMsNyBAQAogCQlCVUcoKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKQorCWlmICghY3B1X2lzX29tYXAxNXh4KCkpCiAJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCiAJCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwogCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJICogY29ubmVjdGVkLiBPdGhlcndpc2UgdGhlIE9NQVAgaW50ZXJuYWwgY29udHJvbGxlciB3aWxsCiAJICogc3RhcnQgdGhlIHRyYW5zZmVyIHdoZW4gaXQgZ2V0cyBlbmFibGVkLgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCiAJCXJldHVybjsKIAogCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CkBAIC0zNzgsMTQgKzM3OCwxNCBAQAogdm9pZCBvbWFwX3NldHVwX2xjZF9kbWEodm9pZCkKIHsKIAlCVUdfT04obGNkX2RtYS5hY3RpdmUpOwotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCS8qIFNldCBzb21lIHJlYXNvbmFibGUgZGVmYXVsdHMgKi8KIAkJb21hcF93cml0ZXcoMHg1NDQwLCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CiAJCW9tYXBfd3JpdGV3KDB4OTEwMiwgT01BUDE2MTBfRE1BX0xDRF9DU0RQKTsKIAkJb21hcF93cml0ZXcoMHgwMDA0LCBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMKTsKIAl9CiAJc2V0X2IxX3JlZ3MoKTsKLQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgewogCQl1MTYgdzsKIAogCQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CkBAIC00MDcsNyArNDA3LDcgQEAKIAl1MTYgdzsKIAogCWxjZF9kbWEuYWN0aXZlID0gMDsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQogCQlyZXR1cm47CiAKIAl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IGVkN2E2MWYuLjY4ODVkMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NjaGVkX2Nsb2NrLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRQkJT01BUF9NUFVfVElNRVIxX0JBU0UKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfT0ZGU0VUCQkweDEwMAogCkBAIC02Nyw3ICs3MSw3IEBACiAoKHZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCopT01BUDFfSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsJXAogCQkJCSAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vdHJhY2Ugb21hcF9tcHVfdGltZXJfcmVhZChpbnQgbnIpCiB7CiAJdm9sYXRpbGUgb21hcF9tcHVfdGltZXJfcmVnc190KiB0aW1lciA9IG9tYXBfbXB1X3RpbWVyX2Jhc2UobnIpOwogCXJldHVybiB0aW1lci0+cmVhZF90aW07CkBAIC0yMTIsNiArMjE2LDMyIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBfb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljID0gbXB1X3JlYWQoJmNsb2Nrc291cmNlX21wdSk7CisJcmV0dXJuIGN5Y190b19zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKKyNpZm5kZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF9tcHVfc2NoZWRfY2xvY2soKTsKK30KKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfbXB1X3NjaGVkX2Nsb2NrKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbm90cmFjZSBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IG1wdV9yZWFkKCZjbG9ja3NvdXJjZV9tcHUpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2UodW5zaWduZWQgbG9uZyByYXRlKQogewogCXN0YXRpYyBjaGFyIGVycltdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgpAQCAtMjE5LDE3ICsyNDksMTMgQEAKIAogCXNldHVwX2lycShJTlRfVElNRVIyLCAmb21hcF9tcHVfdGltZXIyX2lycSk7CiAJb21hcF9tcHVfdGltZXJfc3RhcnQoMSwgfjAsIDEpOworCWluaXRfc2NoZWRfY2xvY2soJmNkLCBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgcmF0ZSk7CiAKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21wdSwgcmF0ZSkpCiAJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX21wdS5uYW1lKTsKIH0KIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGltZXIgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBjbGsJKmNrX3JlZiA9IGNsa19nZXQoTlVMTCwgImNrX3JlZiIpOwogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKQEAgLTI0Niw2ICsyNzIsNjYgQEAKIAlvbWFwX2luaXRfY2xvY2tzb3VyY2UocmF0ZSk7CiB9CiAKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQoreworCXByX2VycigiQm9ndXMgdGltZXIsIHNob3VsZCBub3QgaGFwcGVuXG4iKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfT01BUF9NUFVfVElNRVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKSAmJiBkZWZpbmVkKENPTkZJR19PTUFQXzMyS19USU1FUikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKCpwcmVmZXJyZWRfc2NoZWRfY2xvY2spKHZvaWQpOworCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCWlmICghcHJlZmVycmVkX3NjaGVkX2Nsb2NrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwcmVmZXJyZWRfc2NoZWRfY2xvY2soKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZlcnJlZF9zY2hlZF9jbG9ja19pbml0KGJvb2wgdXNlXzMya19zY2hlZF9jbG9jaykKK3sKKwlpZiAodXNlXzMya19zY2hlZF9jbG9jaykKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrID0gb21hcF8zMmtfc2NoZWRfY2xvY2s7CisJZWxzZQorCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2sgPSBvbWFwX21wdV9zY2hlZF9jbG9jazsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCB1c2VfMzJrX3NjaGVkX2NsY29rKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfMzJrX3RpbWVyX3VzYWJsZSh2b2lkKQoreworCWludCByZXMgPSBmYWxzZTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKQorCQlyZXR1cm4gcmVzOworCisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJcmVzID0gb21hcF8zMmtfdGltZXJfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAob21hcF8zMmtfdGltZXJfdXNhYmxlKCkpIHsKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoMSk7CisJfSBlbHNlIHsKKwkJb21hcF9tcHVfdGltZXJfaW5pdCgpOworCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2tfaW5pdCgwKTsKKwl9Cit9CisKIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lciA9IHsKIAkuaW5pdAkJPSBvbWFwX3RpbWVyX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCmluZGV4IDIwY2ZiY2MuLjEzZDdiOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyMzJrLmMKQEAgLTUyLDEwICs1Miw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogCi1zdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7Ci0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDMyS0h6IE9TIHRpbWVyCkBAIC0xODEsMTQgKzE4MCwxNCBAQAogICogVGltZXIgaW5pdGlhbGl6YXRpb24KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitib29sIF9faW5pdCBvbWFwXzMya190aW1lcl9pbml0KHZvaWQpCiB7CisJb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyaygpOworCiAjaWZkZWYgQ09ORklHX09NQVBfRE1fVElNRVIKIAlvbWFwX2RtX3RpbWVyX2luaXQoKTsKICNlbmRpZgogCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKLX0KIAotc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0gewotCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKLX07CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggNWIwYzc3Ny4uOGY5YTY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtMTI0LDggKzEyNCw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMF9NT0RVTEUpCiAjZGVmaW5lIFJUQ19JT19HUElPCQkoMTUzKQogI2RlZmluZSBSVENfV1JfR1BJTwkJKDE1NCkKLSNkZWZpbmUgUlRDX1JEX0dQSU8JCSgxNjApCisjZGVmaW5lIFJUQ19SRF9HUElPCQkoNTMpCiAjZGVmaW5lIFJUQ19DU19HUElPCQkoMTYzKQorI2RlZmluZSBSVENfQ1NfRU5fR1BJTwkJKDE2MCkKIAogc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgY21fdDM1MTdfdjMwMjBfcGRhdGEgPSB7CiAJLnVzZV9ncGlvCT0gMSwKQEAgLTE0NSw2ICsxNDYsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNTE3X2luaXRfcnRjKHZvaWQpCiB7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChSVENfQ1NfRU5fR1BJTywgInJ0YyBjcyBlbiIpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJDTS1UMzUxNzogcnRjIGNzIGVuIGdwaW8gcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJUQ19DU19FTl9HUElPLCAxKTsKKwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY21fdDM1MTdfcnRjX2RldmljZSk7CiB9CiAjZWxzZQpAQCAtMjE0LDEyICsyMjUsMTIgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgICAgID0gImxpbnV4IiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IDMyICogTkFORF9CTE9DS19TSVpFLAogCX0sCiAJewogCQkubmFtZSAgICAgICAgICAgPSAicm9vdGZzIiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCiAJfSwKIH07CkBAIC0yNTYsMTEgKzI2NywxOSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCS8qIEdQSU8xODYgLSBHcmVlbiBMRUQgKi8KIAlPTUFQM19NVVgoU1lTX0NMS09VVDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKLQkvKiBSVEMgR1BJT3M6IElPLCBXUiMsIFJEIywgQ1MjICovCisKKwkvKiBSVEMgR1BJT3M6ICovCisJLyogSU8gLSBHUElPMTUzICovCiAJT01BUDNfTVVYKE1DQlNQNF9EUiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogV1IjIC0gR1BJTzE1NCAqLwogCU9NQVAzX01VWChNQ0JTUDRfRFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVQpLAotCU9NQVAzX01VWChNQ0JTUF9DTEtTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBSRCMgLSBHUElPNTMgKi8KKwlPTUFQM19NVVgoR1BNQ19OQ1MyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyMgLSBHUElPMTYzICovCiAJT01BUDNfTVVYKFVBUlQzX0NUU19SQ1RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyBFTiAtIEdQSU8xNjAgKi8KKwlPTUFQM19NVVgoTUNCU1BfQ0xLUywgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisKIAkvKiBIU1VTQjEgUkVTRVQgKi8KIAlPTUFQM19NVVgoVUFSVDJfVFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKIAkvKiBIU1VTQjIgUkVTRVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggMDBiYjFmYy4uOWEyYTMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTExNSw5ICsxMTUsNiBAQAogCiBzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCAweDgwLCBSRUdfR1BJT0RBVEFESVIxKTsKLQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgwLCAweDApOwotCiAJaWYgKGdwaW9faXNfdmFsaWQoZHNzZGV2LT5yZXNldF9ncGlvKSkKIAkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZHNzZGV2LT5yZXNldF9ncGlvLCAxKTsKIAlyZXR1cm4gMDsKQEAgLTI0Nyw2ICsyNDQsOCBAQAogc3RhdGljIGludCBkZXZraXQ4MDAwX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaW50IHJldDsKKwogCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOwogCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CkBAIC0yNTUsMTcgKzI1NCwyMyBAQAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwogCi0gICAgICAgIC8qIGdwaW8gKyAxIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLwotCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIDE7Ci0JZ3Bpb19yZXF1ZXN0KGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLCAiTENEX1BXUkVOIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLworCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAwOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJMQ0RfUFdSRU4iKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyBmb3IgTENEX1BXUk5cbiIpOworCX0KIAogCS8qIGdwaW8gKyA3IGlzICJEVklfUEQiIChvdXQsIGFjdGl2ZSBsb3cpICovCiAJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgNzsKLQlncGlvX3JlcXVlc3QoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sICJEVkkgUG93ZXJEb3duIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJEVkkgUG93ZXJEb3duIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSAtRUlOVkFMOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIERWSSBQb3dlckRvd25cbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjc1LDggKzI4MCw3IEBACiAJLmlycV9iYXNlCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9HUElPX0lSUV9FTkQsCiAJLnVzZV9sZWRzCT0gdHJ1ZSwKLQkucHVsbHVwcwk9IEJJVCgxKSwKLQkucHVsbGRvd25zCT0gQklUKDIpIHwgQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDEzKQorCS5wdWxsZG93bnMJPSBCSVQoMSkgfCBCSVQoMikgfCBCSVQoNikgfCBCSVQoOCkgfCBCSVQoMTMpCiAJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCiAJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCBlMDAxYTA0Li5lOTQ0MDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNDA5LDggKzQwOSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGFuZGFfZGV2aWNlcywgQVJSQVlfU0laRShwYW5kYV9kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXA0X3R3bDYwMzBfaHNtbWNfaW5pdChtbWMpOwotCS8qIE9NQVA0IFBhbmRhIHVzZXMgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgc28gcmVnaXN0ZXIgbm9wIHRyYW5zY2VpdmVyICovCi0JdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOwogCW9tYXA0X2VoY2lfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKaW5kZXggY2I3N2JlNy4uMzlhNzFiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwpAQCAtNDAsOSArNDAsNiBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJtNjgwX3ZlbW1jID0gewogCS5jb25zdHJhaW50cyA9CXsKIAkJLm5hbWUJCQk9ICJybTY4MF92ZW1tYyIsCi0JCS5taW5fdVYJCQk9IDI5MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI5MDAwMDAsCi0JCS5hcHBseV91VgkJPSAxLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCiAJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCmluZGV4IGU4Y2IzMmYuLmRlOWVjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJjbTJfNDR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKLSNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJzY3JtNDR4eC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IGUyMGI5ODYuLjU4ZTQyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTQyMyw2ICs0MjMsMTIgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAorCWlmICghY3B1X2lzX29tYXAyNHh4KCkgJiYgIWNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzLyVzOiAlczogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwKKwkJICAgICAgIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NTgsNiArNDY0LDEyIEBACiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTAwLDYgKzUxMiwxMiBAQAogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXMvJXM6ICVzOiBub3QgeWV0IGltcGxlbWVudGVkXG4iLAorCQkgICAgICAgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPndrZGVwX3NyY3MpOwogCWlmIChJU19FUlIoY2QpKSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKQEAgLTUyNyw2ICs1NDUsMTIgQEAKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAl1MzIgbWFzayA9IDA7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbS0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMwLDggKzg1NCw3IEBACiAJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgotCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5IHN1cHBvcnQ6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGNsa2RtLT5uYW1lKTsKIAl9IGVsc2UgewogCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CkBAIC04NzIsOCArODk1LDcgQEAKIAkgKiBkZXBlbmRlbmN5IGNvZGUgYW5kIGRhdGEgZm9yIE9NQVA0LgogCSAqLwogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlXQVJOX09OQ0UoMSwgImNsb2NrZG9tYWluOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSAiCi0JCQkgICJzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgc3VwcG9ydDogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgY2xrZG0tPm5hbWUpOwogCX0gZWxzZSB7CiAJCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCmluZGV4IDUxOTIwZmMuLjEwNjIyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4X2RhdGEuYwpAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgImNtMV80NHh4LmgiCiAjaW5jbHVkZSAiY20yXzQ0eHguaCIKIAotI2luY2x1ZGUgImNtMV80NHh4LmgiCi0jaW5jbHVkZSAiY20yXzQ0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJjbTQ0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IGQyZjE1ZjUuLjM0OTIyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWYgKElTX0VSUihvZCkpIHsKIAkJcHJfZXJyKCIlczogQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJX19mdW5jX18sIG5hbWUsIG9oLT5uYW1lKTsKLQkJcmV0dXJuIElTX0VSUihvZCk7CisJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoJm9kLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBiZWZhMzIxLi44MTk4NWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTM4LDIwICszOCw2IEBACiAgKi8KIAogI2lmZGVmIE1VTFRJX09NQVAyCi0KLS8qCi0gKiBXZSB1c2UgX19nbHVlIHRvIGF2b2lkIGVycm9ycyB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCi0gKiAuZ2xvYmwgb21hcF9pcnFfYmFzZSBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKLSAqIGZyb20gZW50cnktY29tbW9uLlMuCi0gKi8KLSNpZmRlZiBfX2dsdWUKLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi0JCS5nbG9ibAlvbWFwX2lycV9iYXNlCi1vbWFwX2lycV9iYXNlOgotCQkud29yZAkwCi0JCS5wb3BzZWN0aW9uCi0jZW5kaWYKLQogCQkvKgogCQkgKiBDb25maWd1cmUgdGhlIGludGVycnVwdCBiYXNlIG9uIHRoZSBmaXJzdCBpbnRlcnJ1cHQuCiAJCSAqIFNlZSBhbHNvIG9tYXBfaXJxX2Jhc2VfaW5pdCBmb3Igc2V0dGluZyBvbWFwX2lycV9iYXNlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IGU2NjY4N2IuLmMyMDMyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTMxNCwxNCArMzE0LDEzIEBACiAJcmV0dXJuIG9tYXBfaHdtb2Rfc2V0X3Bvc3RzZXR1cF9zdGF0ZShvaCwgKih1OCAqKWRhdGEpOwogfQogCit2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7CisKIC8qCiAgKiBJbml0aWFsaXplIGFzbV9pcnFfYmFzZSBmb3IgZW50cnktbWFjcm8uUwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pcnFfYmFzZV9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgX19pb21lbSAqb21hcF9pcnFfYmFzZTsKLQotI2lmZGVmIE1VTFRJX09NQVAyCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKQEAgLTMzMCw3ICszMjksNiBAQAogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDRYWF9HSUNfQ1BVX0JBU0UpOwogCWVsc2UKIAkJcHJfZXJyKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBvbWFwX2lycV9iYXNlXG4iKTsKLSNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggZGY4ZDJmMi4uOTgxNDhiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tdXggKm11eCA9IE5VTEw7CiAJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOwogCWNvbnN0IGNoYXIgKm1vZGVfbmFtZTsKLQlpbnQgZm91bmQgPSAwLCBmb3VuZF9tb2RlLCBtb2RlMF9sZW4gPSAwOworCWludCBmb3VuZCA9IDAsIGZvdW5kX21vZGUgPSAwLCBtb2RlMF9sZW4gPSAwOwogCXN0cnVjdCBsaXN0X2hlYWQgKm11eG1vZGVzID0gJnBhcnRpdGlvbi0+bXV4bW9kZXM7CiAKIAltb2RlX25hbWUgPSBzdHJjaHIobXV4bmFtZSwgJy4nKTsKQEAgLTEwMDAsNiArMTAwMCw3IEBACiAJaWYgKCFwYXJ0aXRpb24tPmJhc2UpIHsKIAkJcHJfZXJyKCIlczogQ291bGQgbm90IGlvcmVtYXAgbXV4IHBhcnRpdGlvbiBhdCAweCUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgcGFydGl0aW9uLT5waHlzKTsKKwkJa2ZyZWUocGFydGl0aW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwppbmRleCA5ZTVkYzhlLi45N2ZlYjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAJLyogQmxvY2sgY29uc29sZSBvdXRwdXQgaW4gY2FzZSBpdCBpcyBvbiBvbmUgb2YgdGhlIE9NQVAgVUFSVHMgKi8KIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJCWlmICghY29uc29sZV90cnlsb2NrKCkpCiAJCQlnb3RvIG5vX3NsZWVwOwogCiAJb21hcF91YXJ0X3ByZXBhcmVfaWRsZSgwKTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCW9tYXBfdWFydF9yZXN1bWVfaWRsZSgwKTsKIAogCWlmICghaXNfc3VzcGVuZGluZygpKQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIG5vX3NsZWVwOgogCWlmIChvbWFwMl9wbV9kZWJ1ZykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggOGNiYmVhZC4uMmY4NjRlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0xNjgsOSArMTY4LDEwIEBACiAgKiBvbmNlIGR1cmluZyBib290IHNlcXVlbmNlLCBidXQgdGhpcyB3b3JrcyBhcyB3ZSBhcmUgbm90IHVzaW5nIHNlY3VyZQogICogc2VydmljZXMuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KHUzMiB0YXJnZXRfbXB1X3N0YXRlKQorc3RhdGljIHZvaWQgb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQodm9pZCkKIHsKIAl1MzIgcmV0OworCWludCBtcHVfbmV4dF9zdGF0ZSA9IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChtcHVfcHdyZG0pOwogCiAJaWYgKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKSB7CiAJCS8qCkBAIC0xODEsNyArMTgyLDcgQEAKIAkJcHdyZG1fc2V0X25leHRfcHdyc3QobXB1X3B3cmRtLCBQV1JETV9QT1dFUl9PTik7CiAJCXJldCA9IF9vbWFwX3NhdmVfc2VjdXJlX3NyYW0oKHUzMiAqKQogCQkJCV9fcGEob21hcDNfc2VjdXJlX3JhbV9zdG9yYWdlKSk7Ci0JCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgdGFyZ2V0X21wdV9zdGF0ZSk7CisJCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgbXB1X25leHRfc3RhdGUpOwogCQkvKiBGb2xsb3dpbmcgaXMgZm9yIGVycm9yIHRyYWNraW5nLCBpdCBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNhdmVfc2VjdXJlX3NyYW0oKSByZXR1cm5zICUwOHhcbiIsCkBAIC0zOTgsNyArMzk5LDcgQEAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKIAkJaWYgKHBlcl9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04gfHwKIAkJICAgIGNvcmVfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OKQotCQkJaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJCQlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQkJCWdvdG8gY29uc29sZV9zdGlsbF9hY3RpdmU7CiAKIAkvKiBQRVIgKi8KQEAgLTQ4MSw3ICs0ODIsNyBAQAogCX0KIAogCWlmICghaXNfc3VzcGVuZGluZygpKQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIGNvbnNvbGVfc3RpbGxfYWN0aXZlOgogCS8qIERpc2FibGUgSU8tUEFEIGFuZCBJTy1DSEFJTiB3YWtldXAgKi8KQEAgLTEwOTQsNyArMTA5NSw3IEBACiAJCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CiAKIAkJb21hcF9kbWFfZ2xvYmFsX2NvbnRleHRfc2F2ZSgpOwotCQlvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dChQV1JETV9QT1dFUl9PTik7CisJCW9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KCk7CiAJCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3Jlc3RvcmUoKTsKIAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMKaW5kZXggZDUyMzM4OS4uY2Y2MDBlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgogCiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IDMwMmRhNzQuLjMyZTkxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAKIAlvaC0+ZGV2X2F0dHIgPSB1YXJ0OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOyAvKiBpbiBjYXNlIHRoZSBlYXJseWNvbiBpcyBvbiB0aGUgVUFSVCAqLworCWNvbnNvbGVfbG9jaygpOyAvKiBpbiBjYXNlIHRoZSBlYXJseWNvbiBpcyBvbiB0aGUgVUFSVCAqLwogCiAJLyoKIAkgKiBCZWNhdXNlIG9mIGVhcmx5IFVBUlQgcHJvYmluZywgVUFSVCBkaWQgbm90IGdldCBpZGxlZApAQCAtODM4LDcgKzgzOCw3IEBACiAJb21hcF91YXJ0X2Jsb2NrX3NsZWVwKHVhcnQpOwogCXVhcnQtPnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdWFydC0+cGFkY29uZikgfHwKIAkgICAgKHVhcnQtPndrX2VuICYmIHVhcnQtPndrX21hc2spKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKaW5kZXggNzdlY2ViZi4uYzM3ZTgyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwpAQCAtNzgwLDggKzc4MCw3IEBACiAJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKIAogCWlmICghc3JfaW5mbykgewotCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKLQkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzk1LDggKzc5NCw3IEBACiAJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKIAogCWlmICghc3JfaW5mbykgewotCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKLQkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODM0LDcgKzgzMiw4IEBACiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfZGV2aW5mbzsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtOTY2LDcgKzk2NSw3IEBACiAJfQogCiAJc3JfaW5mbyA9IF9zcl9sb29rdXAocGRhdGEtPnZvbHRkbSk7Ci0JaWYgKCFzcl9pbmZvKSB7CisJaWYgKElTX0VSUihzcl9pbmZvKSkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IG9tYXBfc3Igc3RydWN0IG5vdCBmb3VuZFxuIiwKIAkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKaW5kZXggNGU0OGU3OC4uN2I3YzI2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwpAQCAtNDIsNiArNDIsOCBAQAogCiAjaW5jbHVkZSAidGltZXItZ3AuaCIKIAorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKIC8qIE1BWF9HUFRJTUVSX0lEOiBudW1iZXIgb2YgR1BUSU1FUnMgb24gdGhlIGNoaXAgKi8KICNkZWZpbmUgTUFYX0dQVElNRVJfSUQJCTEyCiAKQEAgLTE3NiwxMCArMTc4LDE0IEBACiAvKiAKICAqIFdoZW4gMzJrLXRpbWVyIGlzIGVuYWJsZWQsIGRvbid0IHVzZSBHUFRpbWVyIGZvciBjbG9ja3NvdXJjZQogICogaW5zdGVhZCwganVzdCBsZWF2ZSBkZWZhdWx0IGNsb2Nrc291cmNlIHdoaWNoIHVzZXMgdGhlIDMyawotICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHNlZSBwbGF0LW9tYXAvY29tbW9uLmMuIAorICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHBsYXQtb21hcC9jb3VudGVyXzMyay5jCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwMl9ncF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpIHt9CitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCW9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsoKTsKK30KKwogI2Vsc2UKIC8qCiAgKiBjbG9ja3NvdXJjZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBlZDYwNzljOS4uMTJiZTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCXN0cmNhdChuYW1lLCB2ZGQtPnZvbHRkbS5uYW1lKTsKIAogCXZkZC0+ZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHZvbHRhZ2VfZGlyKTsKKwlrZnJlZShuYW1lKTsKIAlpZiAoSVNfRVJSKHZkZC0+ZGVidWdfZGlyKSkgewogCQlwcl93YXJuaW5nKCIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IiCiAJCQkiIHZkZF8lc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCmluZGV4IGI0NTc1YWUuLjdjYTEzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKQEAgLTIsNTIgKzIsNTYgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcKIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfRUIKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L0VCIHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgRW11bGF0aW9uIEJhc2Vib2FyZCIKIAlzZWxlY3QgQVJNX0dJQwogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQKKwkgIHBsYXRmb3JtLgogCiBjb25maWcgUkVBTFZJRVdfRUJfQTlNUAotCWJvb2wgIlN1cHBvcnQgTXVsdGljb3JlIENvcnRleC1BOSIKKwlib29sICJTdXBwb3J0IE11bHRpY29yZSBDb3J0ZXgtQTkgVGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVX1Y3CiAJaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBDb3J0ZXgtQTlNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIENvcnRleC1BOU1QQ29yZSB0aWxlIGZpdHRlZCB0byB0aGUKKwkgIFJlYWx2aWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uCiAKIGNvbmZpZyBSRUFMVklFV19FQl9BUk0xMU1QCi0JYm9vbCAiU3VwcG9ydCBBUk0xMU1QQ29yZSB0aWxlIgorCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgVGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSQ0hfSEFTX0JBUlJJRVJTIGlmIFNNUAogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIHRpbGUgZml0dGVkIHRvIHRoZSBSZWFsdmlldyhSKQorCSAgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KIAogY29uZmlnIFJFQUxWSUVXX0VCX0FSTTExTVBfUkVWQgotCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgUmV2QiB0aWxlIgorCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgUmV2QiBUaWxlIgogCWRlcGVuZHMgb24gUkVBTFZJRVdfRUJfQVJNMTFNUAogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgUmV2QiB0aWxlIG9uIHRoZSBSZWFsdmlldwotCSAgcGxhdGZvcm0uIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UgYWRkcmVzcyBkaWZmZXJlbmNlcywgYQotCSAga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi0JICBvdGhlciByZXZpc2lvbnMgb2YgdGhlIEFSTTExTVBDb3JlIHRpbGUuCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIFJldmlzaW9uIEIgdGlsZSBvbiB0aGUKKwkgIFJlYWx2aWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UKKwkgIGFkZHJlc3MgZGlmZmVyZW5jZXMsIGEga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcworCSAgbm90IGNvbXBhdGlibGUgd2l0aCBvdGhlciByZXZpc2lvbnMgb2YgdGhlIEFSTTExTVBDb3JlIHRpbGUuCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCMTFNUAotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEIxMU1QQ29yZSBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNMTFNUENvcmUiCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBBUkNIX0hBU19CQVJSSUVSUyBpZiBTTVAKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgTVBDb3JlIFBsYXRmb3JtIEJhc2Vib2FyZC4KLQkgIFBCMTFNUENvcmUgaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yCisJICB0aGUgQVJNMTFNUENvcmUuICBUaGlzIHBsYXRmb3JtIGhhcyBhbiBvbi1ib2FyZCBBUk0xMU1QQ29yZSBhbmQgaGFzCiAJICBzdXBwb3J0IGZvciBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEIxMTc2Ci0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQjExNzYgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExNzZKWkYtUyIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSTV9HSUMKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQVJNMTE3NiBQbGF0Zm9ybSBCYXNlYm9hcmQuCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgQVJNMTE3NkpaRi1TLgogCiBjb25maWcgUkVBTFZJRVdfUEIxMTc2X1NFQ1VSRV9GTEFTSAogCWJvb2wgIkFsbG93IGFjY2VzcyB0byB0aGUgc2VjdXJlIGZsYXNoIG1lbW9yeSBibG9jayIKQEAgLTU5LDIzICs2MywyNCBAQAogCSAgYmxvY2sgKDY0TUIgQCAweDNjMDAwMDAwKSBpcyByZXF1aXJlZC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEJBOAotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEItQTggcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIENvcnRleCh0bSktQTggcGxhdGZvcm0iCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBDb3J0ZXgtQTggUGxhdGZvcm0gQmFzZWJvYXJkLgotCSAgUEItQTggaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIENvcnRleC1BOCBhbmQgaGFzIHN1cHBvcnQgZm9yCi0JICBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yCisJICBDb3J0ZXgodG0pLUE4LiAgVGhpcyBwbGF0Zm9ybSBoYXMgYW4gb24tYm9hcmQgQ29ydGV4LUE4IGFuZCBoYXMKKwkgIHN1cHBvcnQgZm9yIFBDSS1FIGFuZCBDb21wYWN0IEZsYXNoLgogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQlgKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCWCBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBFeHBsb3JlIgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUgaWYgQ1BVX1Y3ICYmICFSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCiAJc2VsZWN0IFpPTkVfRE1BIGlmIFNQQVJTRU1FTQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQQlggcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkCisJICBFeHBsb3JlLgogCiBjb25maWcgUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCWJvb2wgIkhpZ2ggcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGZvciB0aGUgUmVhbFZpZXcgcGxhdGZvcm0iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGEyMmJmNjcuLjY5NTlkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgogICovCi1zdGF0aWMgdm9pZCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCiB7CiAJcGVuX3JlbGVhc2UgPSB2YWw7CiAJc21wX3dtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCmluZGV4IDRkMWI0YzUuLjBjOGY2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKQEAgLTYwLDYgKzYwLDggQEAKIAogY29uZmlnIE1BQ0hfQUc1RVZNCiAJYm9vbCAiQUc1RVZNIGJvYXJkIgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTSF9MQ0RfTUlQSV9EU0kKIAlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCiAKIGNvbmZpZyBNQUNIX01BQ0tFUkVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwppbmRleCBjMThhNzQwLi4yMTIzYjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKQEAgLTM0LDkgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQvc2hfa2V5c2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgotCisjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9taXBpX2RzaS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgotCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2g3M2EwLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KQEAgLTE4MywxMSArMTg0LDE2NSBAQAogCS5yZXNvdXJjZQk9IHNoX21tY2lmX3Jlc291cmNlcywKIH07CiAKKy8qIElyREEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4RTZEMDAwMDAsCisJCS5lbmQJPSAweEU2RDAxRkQ0IC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBnaWNfc3BpKDk1KSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfaXJkYSIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBsY2RfYmFja2xpZ2h0X3NlcVszXVsyXSA9IHsKKwl7IDB4MDQsIDB4MDcgfSwKKwl7IDB4MjMsIDB4ODAgfSwKKwl7IDB4MDMsIDB4MDEgfSwKK307CisKK3N0YXRpYyB2b2lkIGxjZF9iYWNrbGlnaHRfb24odm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmE7CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBrOworCisJYSA9IGkyY19nZXRfYWRhcHRlcigxKTsKKwlmb3IgKGsgPSAwOyBhICYmIGsgPCAzOyBrKyspIHsKKwkJbXNnLmFkZHIgPSAweDZkOworCQltc2cuYnVmID0gJmxjZF9iYWNrbGlnaHRfc2VxW2tdWzBdOworCQltc2cubGVuID0gMjsKKwkJbXNnLmZsYWdzID0gMDsKKwkJaWYgKGkyY190cmFuc2ZlcihhLCAmbXNnLCAxKSAhPSAxKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBsY2RfYmFja2xpZ2h0X3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUMjM1LCAwKTsKKwltZGVsYXkoMjQpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVDIzNSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vbih2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlsY2RfYmFja2xpZ2h0X29uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwlsY2RfYmFja2xpZ2h0X3Jlc2V0KCk7Cit9CisKKy8qIExDREMwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RjMF9tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlI2MzMwMihRSEQpIiwKKwkJLnhyZXMJCT0gNTQ0LAorCQkueXJlcwkJPSA5NjEsCisJCS5sZWZ0X21hcmdpbgk9IDcyLAorCQkucmlnaHRfbWFyZ2luCT0gNjAwLAorCQkuaHN5bmNfbGVuCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA4LAorCQkubG93ZXJfbWFyZ2luCT0gOCwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS5zeW5jCQk9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfSE9SX0hJR0hfQUNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkYzBfaW5mbyA9IHsKKwkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfUEVSSVBIRVJBTCwKKwkuY2hbMF0gPSB7CisJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCisJCS5pbnRlcmZhY2VfdHlwZSA9IFJHQjI0LAorCQkuY2xvY2tfZGl2aWRlciA9IDEsCisJCS5mbGFncyA9IExDRENfRkxBR1NfRFdQT0wsCisJCS5sY2Rfc2l6ZV9jZmcud2lkdGggPSA0NCwKKwkJLmxjZF9zaXplX2NmZy5oZWlnaHQgPSA3OSwKKwkJLmJwcCA9IDE2LAorCQkubGNkX2NmZyA9IGxjZGMwX21vZGVzLAorCQkubnVtX2NmZyA9IEFSUkFZX1NJWkUobGNkYzBfbW9kZXMpLAorCQkuYm9hcmRfY2ZnID0geworCQkJLmRpc3BsYXlfb24gPSBsY2Rfb24sCisJCQkuZGlzcGxheV9vZmYgPSBsY2Rfb2ZmLAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkYzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJMQ0RDMCIsCisJCS5zdGFydAk9IDB4ZmU5NDAwMDAsIC8qIFA0LW9ubHkgc3BhY2UgKi8KKwkJLmVuZAk9IDB4ZmU5NDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4NTgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZGMwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfbW9iaWxlX2xjZGNfZmIiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxjZGMwX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxjZGMwX2luZm8sCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAorCX0sCit9OworCisvKiBNSVBJLURTSSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaXBpZHNpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweGZlYWIwMDAwLAorCQkuZW5kICAgID0gMHhmZWFiM2ZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHhmZWFiNDAwMCwKKwkJLmVuZCAgICA9IDB4ZmVhYjdmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9taXBpX2RzaV9pbmZvIG1pcGlkc2kwX2luZm8gPSB7CisJLmRhdGFfZm9ybWF0CT0gTUlQSV9SR0I4ODgsCisJLmxjZF9jaGFuCT0gJmxjZGMwX2luZm8uY2hbMF0sCisJLnZzeW53X29mZnNldAk9IDIwLAorCS5jbGtzcmMJCT0gMSwKKwkuZmxhZ3MJCT0gU0hfTUlQSV9EU0lfSFNBQk0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXBpZHNpMF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLW1pcGktZHNpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1pcGlkc2kwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbWlwaWRzaTBfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWlwaWRzaTBfaW5mbywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFnNWV2bV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZXRoX2RldmljZSwKIAkma2V5c2NfZGV2aWNlLAogCSZmc2lfZGV2aWNlLAogCSZtbWNfZGV2aWNlLAorCSZpcmRhX2RldmljZSwKKwkmbGNkYzBfZGV2aWNlLAorCSZtaXBpZHNpMF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFnNWV2bV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTIyNCw2ICszNzksOCBAQAogCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQSU5UQ1IwQSkgfCAoMjw8MTApLCBQSU5UQ1IwQSk7CiB9CiAKKyNkZWZpbmUgRFNJMFBIWUNSCTB4ZTYxNTAwNmMKKwogc3RhdGljIHZvaWQgX19pbml0IGFnNWV2bV9pbml0KHZvaWQpCiB7CiAJc2g3M2EwX3Bpbm11eF9pbml0KCk7CkBAIC0yODcsNiArNDQ0LDI1IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlTTEQsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFPU0xELCBOVUxMKTsKIAorCS8qIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQxX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQyX0lSREFfSU4sICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQzX0lSREFfRklSU0VMLCBOVUxMKTsKKworCS8qIExDRCBwYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQyMTcsIE5VTEwpOyAvKiBSRVNFVCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQyMTcsIDApOworCW1kZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BPUlQyMTcsIDEpOworCisJLyogTENEIGJhY2tsaWdodCBjb250cm9sbGVyICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDIzNSwgTlVMTCk7IC8qIFJFU0VUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDIzNSwgMCk7CisJbGNkX2JhY2tsaWdodF9yZXNldCgpOworCisJLyogTUlQSS1EU0kgY2xvY2sgc2V0dXAgKi8KKwlfX3Jhd193cml0ZWwoMHgyYTgwOTAxMCwgRFNJMFBIWUNSKTsKKwogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiAJLyogU2hhcmVkIGF0dHJpYnV0ZSBvdmVycmlkZSBlbmFibGUsIDY0Syo4d2F5ICovCiAJbDJ4MF9pbml0KF9faW8oMHhmMDEwMDAwMCksIDB4MDA0NjAwMDAsIDB4YzIwMDBmZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCmluZGV4IDY4NmIzMDQuLmVmNDYxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfT1VULCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0lOLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0ZJUlNFTCwgTlVMTCk7Ci0Jc2V0X2lycV90eXBlKGV2dDJpcnEoMHg0ODApLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCiAJc2g3MzY3X2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwppbmRleCA3YjE1ZDIxLi5mYjQyMTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCkBAIC0xNjksOSArMTY5LDggQEAKICAqCVNXMQl8CVNXMzMKICAqCQl8IGJpdDEgfCBiaXQyIHwgYml0MyB8IGJpdDQKICAqIC0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLQotICogTU1DMAkgIE9GRgl8ICBPRkYgfCAgT04gIHwgIE9OICB8ICBYCi0gKiBNTUMxCSAgT04JfCAgT0ZGIHwgIE9OICB8ICBYICAgfCBPTgotICogU0RISTEgIE9GRgl8ICBPTiAgfCAgIFggIHwgIE9GRiB8IE9OCisgKiBNTUMwICAgT0ZGCXwgIE9GRiB8ICAgWCAgfCAgT04gIHwgIFggICAgICAgKFVzZSBNTUNJRikKKyAqIFNESEkxICBPRkYJfCAgT04gIHwgICBYICB8ICBPRkYgfCAgWCAgICAgICAoVXNlIE1GRF9TSF9NT0JJTEVfU0RISSkKICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggOWFhOGQ2OC4uZTk3MzFiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC0yMzQsNyArMjM0LDkgQEAKIAogCXZhbHVlID0gX19yYXdfcmVhZGwoUExMQzJDUikgJiB+KDB4M2YgPDwgMjQpOwogCi0JX19yYXdfd3JpdGVsKCh2YWx1ZSAmIH4weDgwMDAwMDAwKSB8ICgoaWR4ICsgMTkpIDw8IDI0KSwgUExMQzJDUik7CisJX19yYXdfd3JpdGVsKHZhbHVlIHwgKChpZHggKyAxOSkgPDwgMjQpLCBQTExDMkNSKTsKKworCWNsay0+cmF0ZSA9IGNsay0+ZnJlcV90YWJsZVtpZHhdLmZyZXF1ZW5jeTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKaW5kZXggNzIwYTcxNC4uZGRkNGExYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCkBAIC0xMTgsOCArMTE4LDE2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBtdWx0ID0gMTsKIAotCWlmIChfX3Jhd19yZWFkbChQTExFQ1IpICYgKDEgPDwgY2xrLT5lbmFibGVfYml0KSkKKwlpZiAoX19yYXdfcmVhZGwoUExMRUNSKSAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpIHsKIAkJbXVsdCA9ICgoKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgPj4gMjQpICYgMHgzZikgKyAxKTsKKwkJLyogaGFuZGxlIENGRyBiaXQgZm9yIFBMTDEgYW5kIFBMTDIgKi8KKwkJc3dpdGNoIChjbGstPmVuYWJsZV9iaXQpIHsKKwkJY2FzZSAxOgorCQljYXNlIDI6CisJCQlpZiAoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmICgxIDw8IDIwKSkKKwkJCQltdWx0ICo9IDI7CisJCX0KKwl9CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0OwogfQpAQCAtMjEyLDcgKzIyMCw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7CiAJW0RJVjRfSV0gPSBESVY0KEZSUUNSQSwgMjAsIDB4ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1pHXSA9IERJVjQoRlJRQ1JBLCAxNiwgMHhiZmYsIENMS19FTkFCTEVfT05fSU5JVCksCi0JW0RJVjRfTTNdID0gRElWNChGUlFDUkEsIDgsIDB4ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X00zXSA9IERJVjQoRlJRQ1JBLCAxMiwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQl0gPSBESVY0KEZSUUNSQSwgOCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfTTFdID0gRElWNChGUlFDUkEsIDQsIDB4ZmZmLCAwKSwKIAlbRElWNF9NMl0gPSBESVY0KEZSUUNSQSwgMCwgMHhmZmYsIDApLApAQCAtMjU1LDEwICsyNjMsMTAgQEAKIH07CiAKIGVudW0geyBNU1RQMDAxLAotCU1TVFAxMjUsIE1TVFAxMTYsCisJTVNUUDEyNSwgTVNUUDExOCwgTVNUUDExNiwgTVNUUDEwMCwKIAlNU1RQMjE5LAogCU1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCi0JTVNUUDMzMSwgTVNUUDMyOSwgTVNUUDMyMywgTVNUUDMxMiwKKwlNU1RQMzMxLCBNU1RQMzI5LCBNU1RQMzI1LCBNU1RQMzIzLCBNU1RQMzEyLAogCU1TVFA0MTEsIE1TVFA0MTAsIE1TVFA0MDMsCiAJTVNUUF9OUiB9OwogCkBAIC0yNjgsNyArMjc2LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tNU1RQX05SXSA9IHsKIAlbTVNUUDAwMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IwLCAxLCAwKSwgLyogSUlDMiAqLwogCVtNU1RQMTI1XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAyNSwgMCksIC8qIFRNVTAgKi8KKwlbTVNUUDExOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDE4LCAwKSwgLyogRFNJVFgwICovCiAJW01TVFAxMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMSwgMTYsIDApLCAvKiBJSUMwICovCisJW01TVFAxMDBdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAwLCAwKSwgLyogTENEQzAgKi8KIAlbTVNUUDIxOV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMTksIDApLCAvKiBTQ0lGQTcgKi8KIAlbTVNUUDIwN10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNywgMCksIC8qIFNDSUZBNSAqLwogCVtNU1RQMjA2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA2LCAwKSwgLyogU0NJRkIgKi8KQEAgLTI3OSw2ICsyODksNyBAQAogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAwLCAwKSwgLyogU0NJRkE0ICovCiAJW01TVFAzMzFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDMxLCAwKSwgLyogU0NJRkE2ICovCiAJW01TVFAzMjldID0gTVNUUCgmcl9jbGssIFNNU1RQQ1IzLCAyOSwgMCksIC8qIENNVDEwICovCisJW01TVFAzMjVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDI1LCAwKSwgLyogSXJEQSAqLwogCVtNU1RQMzIzXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDIzLCAwKSwgLyogSUlDMSAqLwogCVtNU1RQMzEyXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEyLCAwKSwgLyogTU1DSUYwICovCiAJW01TVFA0MTFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSNCwgMTEsIDApLCAvKiBJSUMzICovCkBAIC0yODgsMTYgKzI5OSwyNSBAQAogCiAjZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KICNkZWZpbmUgQ0xLREVWX0RFVl9JRChfaWQsIF9jbGspIHsgLmRldl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfSUNLX0lEKF9jaWQsIF9kaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9jaWQsIC5kZXZfaWQgPSBfZGlkLCAuY2xrID0gX2NsayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJyX2NsayIsICZyX2NsayksCiAKKwkvKiBESVY2IGNsb2NrcyAqLworCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjAiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaTBwX2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSTBQXSksCisJQ0xLREVWX0lDS19JRCgiZHNpMXBfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJMVBdKSwKKwogCS8qIE1TVFAzMiBjbG9ja3MgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjIiLCAmbXN0cF9jbGtzW01TVFAwMDFdKSwgLyogSTJDMiAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9sY2RjX2ZiLjAiLCAmbXN0cF9jbGtzW01TVFAxMDBdKSwgLyogTENEQzAgKi8KIAlDTEtERVZfREVWX0lEKCJzaF90bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDEyNV0pLCAvKiBUTVUwMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4xIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAxICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIEkyQzAgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE4XSksIC8qIERTSVRYICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFAyMTldKSwgLyogU0NJRkE3ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFAyMDddKSwgLyogU0NJRkE1ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFAyMDZdKSwgLyogU0NJRkIgKi8KQEAgLTMwOCw2ICszMjgsNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS40IiwgJm1zdHBfY2xrc1tNU1RQMjAwXSksIC8qIFNDSUZBNCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMzMxXSksIC8qIFNDSUZBNiAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4xMCIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLCAvKiBDTVQxMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX2lyZGEuMCIsICZtc3RwX2Nsa3NbTVNUUDMyNV0pLCAvKiBJckRBICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIEkyQzEgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9tbWNpZi4wIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksIC8qIE1NQ0lGMCAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMyIsICZtc3RwX2Nsa3NbTVNUUDQxMV0pLCAvKiBJMkMzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKaW5kZXggZjc4YTFlYS4uY2E1ZjlkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYwpAQCAtMzY1LDYgKzM2NSw3IEBACiAKIGVudW0gewogCVVOVVNFRF9JTlRDUyA9IDAsCisJRU5BQkxFRF9JTlRDUywKIAogCUlOVENTLAogCkBAIC00MTMsNyArNDE0LDcgQEAKIAlDTVQ0LAogCURTSVRYMV9EU0lUWDFfMCwKIAlEU0lUWDFfRFNJVFgxXzEsCi0JLyogTUZJUzIgKi8KKwlNRklTMl9JTlRDUywgLyogUHJpb3JpdHkgYWx3YXlzIGVuYWJsZWQgdXNpbmcgRU5BQkxFRF9JTlRDUyAqLwogCUNQT1JUUzJSLAogCS8qIENFQyAqLwogCUpQVTZFLApAQCAtNDc3LDcgKzQ3OCw3IEBACiAJSU5UQ1NfVkVDVChDTVQ0LCAweDE5ODApLAogCUlOVENTX1ZFQ1QoRFNJVFgxX0RTSVRYMV8wLCAweDE5YTApLAogCUlOVENTX1ZFQ1QoRFNJVFgxX0RTSVRYMV8xLCAweDE5YzApLAotCS8qIE1GSVMyICovCisJSU5UQ1NfVkVDVChNRklTMl9JTlRDUywgMHgxYTAwKSwKIAlJTlRDU19WRUNUKENQT1JUUzJSLCAweDFhMjApLAogCS8qIENFQyAqLwogCUlOVENTX1ZFQ1QoSlBVNkUsIDB4MWE4MCksCkBAIC01NDMsNyArNTQ0LDcgQEAKIAkgIHsgMCwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCwKIAkgICAgQ01UNCwgRFNJVFgxX0RTSVRYMV8wLCBEU0lUWDFfRFNJVFgxXzEsIDAgfSB9LAogCXsgMHhmZmQ1MDE5YywgMHhmZmQ1MDFkYywgOCwgLyogSU1SN1NBMyAvIElNQ1I3U0EzICovCi0JICB7IDAsIENQT1JUUzJSLCAwLCAwLAorCSAgeyBNRklTMl9JTlRDUywgQ1BPUlRTMlIsIDAsIDAsCiAJICAgIEpQVTZFLCAwLCAwLCAwIH0gfSwKIAl7IDB4ZmZkMjAxMDQsIDAsIDE2LCAvKiBJTlRBTUFTSyAqLwogCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLApAQCAtNTcxLDcgKzU3Miw4IEBACiAJeyAweGZmZDUwMDMwLCAwLCAxNiwgNCwgLyogSVBSTVMzICovIHsgVE1VMSwgMCwgMCwgMCB9IH0sCiAJeyAweGZmZDUwMDM0LCAwLCAxNiwgNCwgLyogSVBSTlMzICovIHsgQ01UNCwgRFNJVFgxX0RTSVRYMV8wLAogCQkJCQkgICAgICAgRFNJVFgxX0RTSVRYMV8xLCAwIH0gfSwKLQl7IDB4ZmZkNTAwMzgsIDAsIDE2LCA0LCAvKiBJUFJPUzMgKi8geyAwLCBDUE9SVFMyUiwgMCwgMCB9IH0sCisJeyAweGZmZDUwMDM4LCAwLCAxNiwgNCwgLyogSVBST1MzICovIHsgRU5BQkxFRF9JTlRDUywgQ1BPUlRTMlIsCisJCQkJCSAgICAgICAwLCAwIH0gfSwKIAl7IDB4ZmZkNTAwM2MsIDAsIDE2LCA0LCAvKiBJUFJQUzMgKi8geyBKUFU2RSwgMCwgMCwgMCB9IH0sCiB9OwogCkBAIC01OTAsNiArNTkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y3NfZGVzYyBfX2luaXRkYXRhID0gewogCS5uYW1lID0gInNoNzM3Mi1pbnRjcyIsCisJLmZvcmNlX2VuYWJsZSA9IEVOQUJMRURfSU5UQ1MsCiAJLnJlc291cmNlID0gaW50Y3NfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbnRjc19yZXNvdXJjZXMpLAogCS5odyA9IElOVENfSFdfREVTQyhpbnRjc192ZWN0b3JzLCBpbnRjc19ncm91cHMsIGludGNzX21hc2tfcmVnaXN0ZXJzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCmluZGV4IDMyMmQ4ZDUuLjVkMGUxNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKQEAgLTI1MiwxMCArMjUyLDExIEBACiAKIHZvaWQgX19pbml0IHNoNzNhMF9pbml0X2lycSh2b2lkKQogewotCXZvaWQgX19pb21lbSAqZ2ljX2Jhc2UgPSBfX2lvKDB4ZjAwMDEwMDApOworCXZvaWQgX19pb21lbSAqZ2ljX2Rpc3RfYmFzZSA9IF9faW8oMHhmMDAwMTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBfX2lvKDB4ZjAwMDAxMDApOwogCXZvaWQgX19pb21lbSAqaW50ZXZ0c2EgPSBpb3JlbWFwX25vY2FjaGUoMHhmZmQyMDEwMCwgUEFHRV9TSVpFKTsKIAotCWdpY19pbml0KDAsIDI5LCBnaWNfYmFzZSwgZ2ljX2Jhc2UpOworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjc19kZXNjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwppbmRleCBiZDA2NjIwLi5hZDgwNDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwpAQCAtMjA3LDkgKzIwNyw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bHZsX2xvY2tbcG9ydF0sIGZsYWdzKTsKIAogCWlmICh0eXBlICYgKElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9UWVBFX0xFVkVMX0hJR0gpKQotCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChkLT5pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCWVsc2UgaWYgKHR5cGUgJiAoSVJRX1RZUEVfRURHRV9GQUxMSU5HIHwgSVJRX1RZUEVfRURHRV9SSVNJTkcpKQotCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKGQtPmlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAppbmRleCBkNzcyMzk1Li5hMjE3ZjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaApAQCAtMjAsNiArMjAsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLX0gKICNkZWZpbmUgX19NQUNIX0NMS19ICiAKK3N0cnVjdCBjbGs7CisKIHZvaWQgdGVncmFfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwogdm9pZCB0ZWdyYV9wZXJpcGhfcmVzZXRfYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCmluZGV4IDQxMmY1YzYuLjY2Y2QzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAogI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKIAorc3RydWN0IGNsazsKKwogc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gva2JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhZDI3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBQbGF0Zm9ybSBkZWZpbml0aW9ucyBmb3IgdGVncmEta2JjIGtleWJvYXJkIGlucHV0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExLCBOVklESUEgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQVNNQVJNX0FSQ0hfVEVHUkFfS0JDX0gKKyNkZWZpbmUgQVNNQVJNX0FSQ0hfVEVHUkFfS0JDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfMnhfU09DCisjZGVmaW5lIEtCQ19NQVhfR1BJTwkyNAorI2RlZmluZSBLQkNfTUFYX0tQRU5UCTgKKyNlbHNlCisjZGVmaW5lIEtCQ19NQVhfR1BJTwkyMAorI2RlZmluZSBLQkNfTUFYX0tQRU5UCTcKKyNlbmRpZgorCisjZGVmaW5lIEtCQ19NQVhfUk9XCTE2CisjZGVmaW5lIEtCQ19NQVhfQ09MCTgKKyNkZWZpbmUgS0JDX01BWF9LRVkJKEtCQ19NQVhfUk9XICogS0JDX01BWF9DT0wpCisKK3N0cnVjdCB0ZWdyYV9rYmNfcGluX2NmZyB7CisJYm9vbCBpc19yb3c7CisJdW5zaWduZWQgY2hhciBudW07Cit9OworCitzdHJ1Y3QgdGVncmFfa2JjX3dha2Vfa2V5IHsKKwl1OCByb3c6NDsKKwl1OCBjb2w6NDsKK307CisKK3N0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IGRlYm91bmNlX2NudDsKKwl1bnNpZ25lZCBpbnQgcmVwZWF0X2NudDsKKworCXVuc2lnbmVkIGludCB3YWtlX2NudDsgLyogMDp3YWtlIG9uIGFueSBrZXkgPjE6d2FrZSBvbiB3YWtlX2NmZyAqLworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfd2FrZV9rZXkgKndha2VfY2ZnOworCisJc3RydWN0IHRlZ3JhX2tiY19waW5fY2ZnIHBpbl9jZmdbS0JDX01BWF9HUElPXTsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKKworCWJvb2wgd2FrZXVwOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKaW5kZXggZGU3ZGZhZC4uMTdjNzRkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCkBAIC00NiwyNCArNDYsMjQgQEAKICNkZWZpbmUgSUNUTFJfQ09QX0lFUl9DTFIJMHgzOAogI2RlZmluZSBJQ1RMUl9DT1BfSUVQX0NMQVNTCTB4M2MKIAotc3RhdGljIHZvaWQgKCpnaWNfbWFza19pcnEpKHN0cnVjdCBpcnFfZGF0YSAqZCk7Ci1zdGF0aWMgdm9pZCAoKmdpY191bm1hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworc3RhdGljIHZvaWQgKCp0ZWdyYV9naWNfbWFza19pcnEpKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitzdGF0aWMgdm9pZCAoKnRlZ3JhX2dpY191bm1hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwogCi0jZGVmaW5lIGlycV90b19pY3RscihpcnEpICgoKGlycSktMzIpID4+IDUpCisjZGVmaW5lIGlycV90b19pY3RscihpcnEpICgoKGlycSkgLSAzMikgPj4gNSkKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnRlZ3JhX2ljdGxyX2Jhc2UgPSBJT19BRERSRVNTKFRFR1JBX1BSSU1BUllfSUNUTFJfQkFTRSk7Ci0jZGVmaW5lIGljdGxyX3RvX3ZpcnQoaWN0bHIpICh0ZWdyYV9pY3Rscl9iYXNlICsgKGljdGxyKSoweDEwMCkKKyNkZWZpbmUgaWN0bHJfdG9fdmlydChpY3RscikgKHRlZ3JhX2ljdGxyX2Jhc2UgKyAoaWN0bHIpICogMHgxMDApCiAKIHN0YXRpYyB2b2lkIHRlZ3JhX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXZvaWQgX19pb21lbSAqYWRkciA9IGljdGxyX3RvX3ZpcnQoaXJxX3RvX2ljdGxyKGQtPmlycSkpOwotCWdpY19tYXNrX2lycShkKTsKLQl3cml0ZWwoMTw8KGQtPmlycSYzMSksIGFkZHIrSUNUTFJfQ1BVX0lFUl9DTFIpOworCXRlZ3JhX2dpY19tYXNrX2lycShkKTsKKwl3cml0ZWwoMSA8PCAoZC0+aXJxICYgMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfQ0xSKTsKIH0KIAogc3RhdGljIHZvaWQgdGVncmFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBpY3Rscl90b192aXJ0KGlycV90b19pY3RscihkLT5pcnEpKTsKLQlnaWNfdW5tYXNrX2lycShkKTsKKwl0ZWdyYV9naWNfdW5tYXNrX2lycShkKTsKIAl3cml0ZWwoMTw8KGQtPmlycSYzMSksIGFkZHIrSUNUTFJfQ1BVX0lFUl9TRVQpOwogfQogCkBAIC05OCw4ICs5OCw4IEBACiAJCSBJT19BRERSRVNTKFRFR1JBX0FSTV9QRVJJRl9CQVNFICsgMHgxMDApKTsKIAogCWdpYyA9IGdldF9pcnFfY2hpcCgyOSk7Ci0JZ2ljX3VubWFza19pcnEgPSBnaWMtPmlycV91bm1hc2s7Ci0JZ2ljX21hc2tfaXJxID0gZ2ljLT5pcnFfbWFzazsKKwl0ZWdyYV9naWNfdW5tYXNrX2lycSA9IGdpYy0+aXJxX3VubWFzazsKKwl0ZWdyYV9naWNfbWFza19pcnEgPSBnaWMtPmlycV9tYXNrOwogCXRlZ3JhX2lycS5pcnFfYWNrID0gZ2ljLT5pcnFfYWNrOwogI2lmZGVmIENPTkZJR19TTVAKIAl0ZWdyYV9pcnEuaXJxX3NldF9hZmZpbml0eSA9IGdpYy0+aXJxX3NldF9hZmZpbml0eTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCmluZGV4IDNmN2I1ZTkuLjljZGVjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwpAQCAtMiwxNyArMiwxOSBAQAogCWRlcGVuZHMgb24gQVJDSF9WRVJTQVRJTEUKIAogY29uZmlnIEFSQ0hfVkVSU0FUSUxFX1BCCi0JYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUvUEIgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBBUk05MjZFSi1TIgogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCWRlZmF1bHQgeQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUvUEIgcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlIFBsYXRmb3JtIEJhc2Vib2FyZAorCSAgZm9yIHRoZSBBUk05MjZFSi1TLgogCiBjb25maWcgTUFDSF9WRVJTQVRJTEVfQUIKLQlib29sICJTdXBwb3J0IFZlcnNhdGlsZS9BQiBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFZlcnNhdGlsZSBBcHBsaWNhdGlvbiBCYXNlYm9hcmQgZm9yIEFSTTkyNkVKLVMiCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFZlcnNhdGlsZS9BUCBwbGF0Zm9ybS4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUgQXBwbGljYXRpb24gQmFzZWJvYXJkCisJICBmb3IgdGhlIEFSTTkyNkVKLVMuCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKaW5kZXggYjE2ODdiNi4uNjM0YmYxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqIG9ic2VydmVycywgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSdyZSB0YWtpbmcgcGFydCBpbiBjb2hlcmVuY3kKICAqIG9yIG5vdC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgaG90cGx1ZyBjb2RlIHRvIHdvcmsgcmVsaWFibHkuCiAgKi8KLXN0YXRpYyB2b2lkIHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgd3JpdGVfcGVuX3JlbGVhc2UoaW50IHZhbCkKIHsKIAlwZW5fcmVsZWFzZSA9IHZhbDsKIAlzbXBfd21iKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwppbmRleCBhOWVkMzQyLi4xZWRhZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS90aW1lci1zcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zcDgxMC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tb3RoZXJib2FyZC5oPgogCkBAIC01MCw4ICs1MSwxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdjJtX3RpbWVyX2luaXQodm9pZCkKIHsKKwl1MzIgc2NjdHJsOworCiAJdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQoTU1JT19QMlYoVjJNX1NZU18yNE1IWiksIDI0MDAwMDAwKTsKIAorCS8qIFNlbGVjdCAxTUh6IFRJTUNMSyBhcyB0aGUgcmVmZXJlbmNlIGNsb2NrIGZvciBTUDgwNCB0aW1lcnMgKi8KKwlzY2N0cmwgPSByZWFkbChNTUlPX1AyVihWMk1fU1lTQ1RMICsgU0NDVFJMKSk7CisJc2NjdHJsIHw9IFNDQ1RSTF9USU1FUkVOMFNFTF9USU1DTEs7CisJc2NjdHJsIHw9IFNDQ1RSTF9USU1FUkVOMVNFTF9USU1DTEs7CisJd3JpdGVsKHNjY3RybCwgTU1JT19QMlYoVjJNX1NZU0NUTCArIFNDQ1RSTCkpOworCiAJd3JpdGVsKDAsIE1NSU9fUDJWKFYyTV9USU1FUjApICsgVElNRVJfQ1RSTCk7CiAJd3JpdGVsKDAsIE1NSU9fUDJWKFYyTV9USU1FUjEpICsgVElNRVJfQ1RSTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA1MTY0MDY5Li5jZGRkNjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0yOTcsNiArMjk3LDEyIEBACiAJbWVtYmxvY2tfcmVzZXJ2ZShfX3BhKF9zdGV4dCksIF9lbmQgLSBfc3RleHQpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaWYgKHBoeXNfaW5pdHJkX3NpemUgJiYKKwkgICAgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKHBoeXNfaW5pdHJkX3N0YXJ0LCBwaHlzX2luaXRyZF9zaXplKSkgeworCQlwcl9lcnIoIklOSVRSRDogMHglMDhseCsweCUwOGx4IG92ZXJsYXBzIGluLXVzZSBtZW1vcnkgcmVnaW9uIC0gZGlzYWJsaW5nIGluaXRyZFxuIiwKKwkJICAgICAgIHBoeXNfaW5pdHJkX3N0YXJ0LCBwaHlzX2luaXRyZF9zaXplKTsKKwkJcGh5c19pbml0cmRfc3RhcnQgPSBwaHlzX2luaXRyZF9zaXplID0gMDsKKwl9CiAJaWYgKHBoeXNfaW5pdHJkX3NpemUpIHsKIAkJbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDNhNzBlYmYuLmZmNDY5YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtOTUsNiArOTUsNyBAQAogCWNhc2UgTUFDSF9UWVBFX01YMzVfM0RTOgogCWNhc2UgTUFDSF9UWVBFX1BDTTA0MzoKIAljYXNlIE1BQ0hfVFlQRV9MSUxMWTExMzE6CisJY2FzZSBNQUNIX1RZUEVfVlBSMjAwOgogCQl1YXJ0X2Jhc2UgPSBNWDNYX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTUFHWF9aTjU6CkBAIC0xMDIsNiArMTAzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVg1MV9CQUJCQUdFOgogCWNhc2UgTUFDSF9UWVBFX0VVS1JFQV9DUFVJTVg1MVNEOgorCWNhc2UgTUFDSF9UWVBFX01YNTFfM0RTOgogCQl1YXJ0X2Jhc2UgPSBNWDUxX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVg1MF9SRFA6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IDE4ZmUzY2IuLmI2MzMzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xNDQsMTIgKzE0NCw5IEBACiBjb25maWcgT01BUF9JT01NVV9JVkEyCiAJYm9vbAogCi1jaG9pY2UKLQlwcm9tcHQgIlN5c3RlbSB0aW1lciIKLQlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSIGlmICFBUkNIX09NQVAxNVhYCi0KIGNvbmZpZyBPTUFQX01QVV9USU1FUgogCWJvb2wgIlVzZSBtcHUgdGltZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT01BUCBtcHUgdGltZXIuIFRoaXMKIAkgIHRpbWVyIHByb3ZpZGVzIG1vcmUgaW50cmEtdGljayByZXNvbHV0aW9uIHRoYW4gdGhlIDMyS0h6IHRpbWVyLApAQCAtMTU4LDYgKzE1NSw3IEBACiBjb25maWcgT01BUF8zMktfVElNRVIKIAlib29sICJVc2UgMzJLSHogdGltZXIiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDJQTFVTCisJZGVmYXVsdCB5IGlmIChBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDJQTFVTKQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIE9NQVAgMzJLSHogdGltZXIuCiAJICBUaGlzIHRpbWVyIHNhdmVzIHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBPTUFQX01QVV9USU1FUiwgYW5kIGhhcwpAQCAtMTY1LDggKzE2Myw2IEBACiAJICBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiBPTUFQX01QVV9USU1FUi4gVGhlIDMyS0h6IHRpbWVyIGlzCiAJICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAxNlhYLCAyNFhYLCAzNFhYIGFuZCBPTUFQNC4KIAotZW5kY2hvaWNlCi0KIGNvbmZpZyBPTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQogCWJvb2wgIk9NQVAzIEhTL0VNVSBzYXZlIGFuZCByZXN0b3JlIGZvciBMMiBBVVggY29udHJvbCByZWdpc3RlciIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgUE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMKaW5kZXggZWE0NjQ0MC4uODYyZGRhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMKQEAgLTM2LDggKzM2LDYgQEAKIAogI2RlZmluZSBPTUFQMTZYWF9USU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCiAKLSNpZiAhKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkpCi0KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogCiAvKgpAQCAtMTIyLDEyICsxMjAsMjQgQEAKICNkZWZpbmUgU0NfTVVMVAkJNDAwMDAwMDAwMHUKICNkZWZpbmUgU0NfU0hJRlQJMTcKIAotdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2UgX29tYXBfMzJrX3NjaGVkX2Nsb2NrKHZvaWQpCiB7CiAJdTMyIGN5YyA9IGNsb2Nrc291cmNlXzMyay5yZWFkKCZjbG9ja3NvdXJjZV8zMmspOwogCXJldHVybiBjeWNfdG9fZml4ZWRfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjAsIFNDX01VTFQsIFNDX1NISUZUKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfT01BUF9NUFVfVElNRVIKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIF9vbWFwXzMya19zY2hlZF9jbG9jaygpOworfQorI2Vsc2UKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIG9tYXBfMzJrX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIF9vbWFwXzMya19zY2hlZF9jbG9jaygpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIG5vdHJhY2Ugb21hcF91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKIHsKIAl1MzIgY3ljID0gY2xvY2tzb3VyY2VfMzJrLnJlYWQoJmNsb2Nrc291cmNlXzMyayk7CkBAIC0xNjAsNyArMTcwLDcgQEAKIAkqdHMgPSAqdHNwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKHZvaWQpCitpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCkKIHsKIAlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKIAkJCSIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iOwpAQCAtMTk1LDcgKzIwNSwzIEBACiAJfQogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKTsKLQotI2VuZGlmCS8qICEoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSkgKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IGM0YjJiNDcuLjg1MzYzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTUzLDcgKzUzLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJCTB4MDEKLSNkZWZpbmUgT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLCTB4ZmZlCisjZGVmaW5lIE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSwkweGZmZmZmZmZmCiAKICNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkJKDB4ZmZmZTEwMDAgKyAweGVjKQogCkBAIC0xODczLDcgKzE4NzMsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJETUEgbWlzYWxpZ25lZCBlcnJvciB3aXRoIGRldmljZSAlZFxuIiwKIAkJICAgICAgIGRtYV9jaGFuW2NoXS5kZXZfaWQpOwogCi0JcC0+ZG1hX3dyaXRlKE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSywgQ1NSLCBjaCk7CisJcC0+ZG1hX3dyaXRlKHN0YXR1cywgQ1NSLCBjaCk7CiAJcC0+ZG1hX3dyaXRlKDEgPDwgY2gsIElSUVNUQVRVU19MMCwgY2gpOwogCS8qIHJlYWQgYmFjayB0aGUgcmVnaXN0ZXIgdG8gZmx1c2ggdGhlIHdyaXRlICovCiAJcC0+ZG1hX3JlYWQoSVJRU1RBVFVTX0wwLCBjaCk7CkBAIC0xODkzLDEwICsxODkzLDkgQEAKIAkJCU9NQVBfRE1BX0NIQUlOX0lOQ1FIRUFEKGNoYWluX2lkKTsKIAogCQlzdGF0dXMgPSBwLT5kbWFfcmVhZChDU1IsIGNoKTsKKwkJcC0+ZG1hX3dyaXRlKHN0YXR1cywgQ1NSLCBjaCk7CiAJfQogCi0JcC0+ZG1hX3dyaXRlKHN0YXR1cywgQ1NSLCBjaCk7Ci0KIAlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkKIAkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGNoLCBzdGF0dXMsIGRtYV9jaGFuW2NoXS5kYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKaW5kZXggNmI4MDg4ZS4uMjliMmFmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCkBAIC0zNSw2ICszNSw5IEBACiAKIGV4dGVybiB2b2lkIG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CitleHRlcm4gYm9vbCBvbWFwXzMya190aW1lcl9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBvbWFwXzMya19zY2hlZF9jbG9jayh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgb21hcF9yZXNlcnZlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCAyZmVhODk3Li45ZDZmZWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTdW4gRGVjIDEyIDIzOjI0OjI3IDIwMTAKKyMgTGFzdCB1cGRhdGU6IE1vbiBGZWIgNyAwODo1OToyNyAyMDExCiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTIyNDAsNyArMjI0MCw3IEBACiB2c192MjEwCQkJTUFDSF9WU19WMjEwCQlWU19WMjEwCQkJMjI1MgogdnNfdjIxMgkJCU1BQ0hfVlNfVjIxMgkJVlNfVjIxMgkJCTIyNTMKIGhtdAkJCU1BQ0hfSE1UCQlITVQJCQkyMjU0Ci1zdWVuMwkJCU1BQ0hfU1VFTjMJCVNVRU4zCQkJMjI1NQora21fa2lya3dvb2QJCU1BQ0hfS01fS0lSS1dPT0QJS01fS0lSS1dPT0QJCTIyNTUKIHZlc3BlcgkJCU1BQ0hfVkVTUEVSCQlWRVNQRVIJCQkyMjU2CiBzdHI5CQkJTUFDSF9TVFI5CQlTVFI5CQkJMjI1Nwogb21hcDNfd2xfZmYJCU1BQ0hfT01BUDNfV0xfRkYJT01BUDNfV0xfRkYJCTIyNTgKQEAgLTI5ODcsNyArMjk4Nyw3IEBACiBlYTIwCQkJTUFDSF9FQTIwCQlFQTIwCQkJMzAwMgogYXdtMgkJCU1BQ0hfQVdNMgkJQVdNMgkJCTMwMDMKIHRpODE0OGV2bQkJTUFDSF9USTgxNDhFVk0JCVRJODE0OEVWTQkJMzAwNAotdGVncmFfc2VhYm9hcmQJCU1BQ0hfVEVHUkFfU0VBQk9BUkQJVEVHUkFfU0VBQk9BUkQJCTMwMDUKK3NlYWJvYXJkCQlNQUNIX1NFQUJPQVJECQlTRUFCT0FSRAkJMzAwNQogbGlua3N0YXRpb25fY2hsdjIJTUFDSF9MSU5LU1RBVElPTl9DSExWMglMSU5LU1RBVElPTl9DSExWMgkzMDA2CiB0ZXJhX3BybzJfcmFjawkJTUFDSF9URVJBX1BSTzJfUkFDSwlURVJBX1BSTzJfUkFDSwkJMzAwNwogcnVieXMJCQlNQUNIX1JVQllTCQlSVUJZUwkJCTMwMDgKQEAgLTMxOTAsNyArMzE5MCw3IEBACiBpY3NfaWZfdm9pcAkJTUFDSF9JQ1NfSUZfVk9JUAlJQ1NfSUZfVk9JUAkJMzIwNgogd2xmX2NyYWdnXzY0MTAJCU1BQ0hfV0xGX0NSQUdHXzY0MTAJV0xGX0NSQUdHXzY0MTAJCTMyMDcKIHB1bmljYQkJCU1BQ0hfUFVOSUNBCQlQVU5JQ0EJCQkzMjA4Ci1zYmNfbnQyNTAJCU1BQ0hfU0JDX05UMjUwCQlTQkNfTlQyNTAJCTMyMDkKK3RyaW1zbGljZQkJTUFDSF9UUklNU0xJQ0UJCVRSSU1TTElDRQkJMzIwOQogbXgyN193bXVsdHJhCQlNQUNIX01YMjdfV01VTFRSQQlNWDI3X1dNVUxUUkEJCTMyMTAKIG1hY2tlcmVsCQlNQUNIX01BQ0tFUkVMCQlNQUNLRVJFTAkJMzIxMQogZmE5eDI3CQkJTUFDSF9GQTlYMjcJCUZBOVgyNwkJCTMyMTMKQEAgLTMyMTksMyArMzIxOSwxMDAgQEAKIHBjbTA0OAkJCU1BQ0hfUENNMDQ4CQlQQ00wNDgJCQkzMjM2CiBkZHMJCQlNQUNIX0REUwkJRERTCQkJMzIzNwogY2hhbHRlbl94YTEJCU1BQ0hfQ0hBTFRFTl9YQTEJQ0hBTFRFTl9YQTEJCTMyMzgKK3RzNDh4eAkJCU1BQ0hfVFM0OFhYCQlUUzQ4WFgJCQkzMjM5Cit0b25nYTJfdGZ0dGltZXIJCU1BQ0hfVE9OR0EyX1RGVFRJTUVSCVRPTkdBMl9URlRUSU1FUgkJMzI0MAord2hpc3RsZXIJCU1BQ0hfV0hJU1RMRVIJCVdISVNUTEVSCQkzMjQxCithc2xfcGhvZW5peAkJTUFDSF9BU0xfUEhPRU5JWAlBU0xfUEhPRU5JWAkJMzI0MgorYXQ5MXNhbTkyNjNvdGxpdGUJTUFDSF9BVDkxU0FNOTI2M09UTElURQlBVDkxU0FNOTI2M09UTElURQkzMjQzCitkZHBsdWcJCQlNQUNIX0REUExVRwkJRERQTFVHCQkJMzI0NAorZDJwbHVnCQkJTUFDSF9EMlBMVUcJCUQyUExVRwkJCTMyNDUKK2t6bTlkCQkJTUFDSF9LWk05RAkJS1pNOUQJCQkzMjQ2Cit2ZXJkaV9sdGUJCU1BQ0hfVkVSRElfTFRFCQlWRVJESV9MVEUJCTMyNDcKK25hbm96b29tCQlNQUNIX05BTk9aT09NCQlOQU5PWk9PTQkJMzI0OAorZG0zNzMwX3NvbV9sdgkJTUFDSF9ETTM3MzBfU09NX0xWCURNMzczMF9TT01fTFYJCTMyNDkKK2RtMzczMF90b3JwZWRvCQlNQUNIX0RNMzczMF9UT1JQRURPCURNMzczMF9UT1JQRURPCQkzMjUwCithbmNob3Z5CQkJTUFDSF9BTkNIT1ZZCQlBTkNIT1ZZCQkJMzI1MQorcmUycmV2MjAJCU1BQ0hfUkUyUkVWMjAJCVJFMlJFVjIwCQkzMjUzCityZTJyZXYyMQkJTUFDSF9SRTJSRVYyMQkJUkUyUkVWMjEJCTMyNTQKK2NuczIxeHgJCQlNQUNIX0NOUzIxWFgJCUNOUzIxWFgJCQkzMjU1CityaWRlcgkJCU1BQ0hfUklERVIJCVJJREVSCQkJMzI1NworbnNrMzMwCQkJTUFDSF9OU0szMzAJCU5TSzMzMAkJCTMyNTgKK2NuczIxMzNldmIJCU1BQ0hfQ05TMjEzM0VWQgkJQ05TMjEzM0VWQgkJMzI1OQorejNfODE2eF9tb2QJCU1BQ0hfWjNfODE2WF9NT0QJWjNfODE2WF9NT0QJCTMyNjAKK3ozXzgxNHhfbW9kCQlNQUNIX1ozXzgxNFhfTU9ECVozXzgxNFhfTU9ECQkzMjYxCitiZWVjdAkJCU1BQ0hfQkVFQ1QJCUJFRUNUCQkJMzI2MgorZG1hX3RodW5kZXJidWcJCU1BQ0hfRE1BX1RIVU5ERVJCVUcJRE1BX1RIVU5ERVJCVUcJCTMyNjMKK29tbl9hdDkxc2FtOWcyMAkJTUFDSF9PTU5fQVQ5MVNBTTlHMjAJT01OX0FUOTFTQU05RzIwCQkzMjY0CitteDI1X2Uyc191YwkJTUFDSF9NWDI1X0UyU19VQwlNWDI1X0UyU19VQwkJMzI2NQorbWlvbmUJCQlNQUNIX01JT05FCQlNSU9ORQkJCTMyNjYKK3RvcDkwMDBfdGN1CQlNQUNIX1RPUDkwMDBfVENVCVRPUDkwMDBfVENVCQkzMjY3Cit0b3A5MDAwX2JzbAkJTUFDSF9UT1A5MDAwX0JTTAlUT1A5MDAwX0JTTAkJMzI2OAora2luZ2RvbQkJCU1BQ0hfS0lOR0RPTQkJS0lOR0RPTQkJCTMyNjkKK2FybWFkaWxsbzQ2MAkJTUFDSF9BUk1BRElMTE80NjAJQVJNQURJTExPNDYwCQkzMjcwCitscTIJCQlNQUNIX0xRMgkJTFEyCQkJMzI3MQorc3dlZGFfdG1zMgkJTUFDSF9TV0VEQV9UTVMyCQlTV0VEQV9UTVMyCQkzMjcyCitteDUzX2xvY28JCU1BQ0hfTVg1M19MT0NPCQlNWDUzX0xPQ08JCTMyNzMKK2FjZXJfYTgJCQlNQUNIX0FDRVJfQTgJCUFDRVJfQTgJCQkzMjc1CithY2VyX2dhdWd1aW4JCU1BQ0hfQUNFUl9HQVVHVUlOCUFDRVJfR0FVR1VJTgkJMzI3NgorZ3VwcHkJCQlNQUNIX0dVUFBZCQlHVVBQWQkJCTMyNzcKK214NjFfYXJkCQlNQUNIX01YNjFfQVJECQlNWDYxX0FSRAkJMzI3OAordHg1MwkJCU1BQ0hfVFg1MwkJVFg1MwkJCTMyNzkKK29tYXBsMTM4X2Nhc2VfYTMJTUFDSF9PTUFQTDEzOF9DQVNFX0EzCU9NQVBMMTM4X0NBU0VfQTMJMzI4MAordWVtZAkJCU1BQ0hfVUVNRAkJVUVNRAkJCTMyODEKK2Njd214NTFtdXQJCU1BQ0hfQ0NXTVg1MU1VVAkJQ0NXTVg1MU1VVAkJMzI4Mgorcm9ja2hvcHBlcgkJTUFDSF9ST0NLSE9QUEVSCQlST0NLSE9QUEVSCQkzMjgzCitub29rY29sb3IJCU1BQ0hfTk9PS0NPTE9SCQlOT09LQ09MT1IJCTMyODQKK2hrZGtjMTAwCQlNQUNIX0hLREtDMTAwCQlIS0RLQzEwMAkJMzI4NQordHM0Mnh4CQkJTUFDSF9UUzQyWFgJCVRTNDJYWAkJCTMyODYKK2FlYmwJCQlNQUNIX0FFQkwJCUFFQkwJCQkzMjg3Cit3YXJpbwkJCU1BQ0hfV0FSSU8JCVdBUklPCQkJMzI4OAorZ2ZzX3NwbQkJCU1BQ0hfR0ZTX1NQTQkJR0ZTX1NQTQkJCTMyODkKK2NtX3QzNzMwCQlNQUNIX0NNX1QzNzMwCQlDTV9UMzczMAkJMzI5MAoraXNjMwkJCU1BQ0hfSVNDMwkJSVNDMwkJCTMyOTEKK3Jhc2NhbAkJCU1BQ0hfUkFTQ0FMCQlSQVNDQUwJCQkzMjkyCitocmVmdjYwCQkJTUFDSF9IUkVGVjYwCQlIUkVGVjYwCQkJMzI5MwordHB0XzJfMAkJCU1BQ0hfVFBUXzJfMAkJVFBUXzJfMAkJCTMyOTQKK3B5cmFtaWRfdGQJCU1BQ0hfUFlSQU1JRF9URAkJUFlSQU1JRF9URAkJMzI5NQorc3BsZW5kb3IJCU1BQ0hfU1BMRU5ET1IJCVNQTEVORE9SCQkzMjk2CitndWZfcGxhbmV0CQlNQUNIX0dVRl9QTEFORVQJCUdVRl9QTEFORVQJCTMyOTcKK21zbTh4NjBfcXQJCU1BQ0hfTVNNOFg2MF9RVAkJTVNNOFg2MF9RVAkJMzI5OAoraHRjX2hkX21pbmkJCU1BQ0hfSFRDX0hEX01JTkkJSFRDX0hEX01JTkkJCTMyOTkKK2F0aGVuZQkJCU1BQ0hfQVRIRU5FCQlBVEhFTkUJCQkzMzAwCitkZWVwX3JfZWtfMQkJTUFDSF9ERUVQX1JfRUtfMQlERUVQX1JfRUtfMQkJMzMwMQordml2b3dfY3QJCU1BQ0hfVklWT1dfQ1QJCVZJVk9XX0NUCQkzMzAyCituZXJ5XzEwMDAJCU1BQ0hfTkVSWV8xMDAwCQlORVJZXzEwMDAJCTMzMDMKK3JmbDEwOTE0NV9zc3J2CQlNQUNIX1JGTDEwOTE0NV9TU1JWCVJGTDEwOTE0NV9TU1JWCQkzMzA0CitubWgJCQlNQUNIX05NSAkJTk1ICQkJMzMwNQord244MDJ0CQkJTUFDSF9XTjgwMlQJCVdOODAyVAkJCTMzMDYKK2RyYWdvbmV0CQlNQUNIX0RSQUdPTkVUCQlEUkFHT05FVAkJMzMwNworZ2VuZXZhX2IJCU1BQ0hfR0VORVZBX0IJCUdFTkVWQV9CCQkzMzA4CithdDkxc2FtOTI2M2Rlc2sxNmwJTUFDSF9BVDkxU0FNOTI2M0RFU0sxNkwJQVQ5MVNBTTkyNjNERVNLMTZMCTMzMDkKK2JjbWhhbmFfc3YJCU1BQ0hfQkNNSEFOQV9TVgkJQkNNSEFOQV9TVgkJMzMxMAorYmNtaGFuYV90YWJsZXQJCU1BQ0hfQkNNSEFOQV9UQUJMRVQJQkNNSEFOQV9UQUJMRVQJCTMzMTEKK2tvaQkJCU1BQ0hfS09JCQlLT0kJCQkzMzEyCit0czQ4MDAJCQlNQUNIX1RTNDgwMAkJVFM0ODAwCQkJMzMxMwordHFtYTkyNjMJCU1BQ0hfVFFNQTkyNjMJCVRRTUE5MjYzCQkzMzE0Citob2xpZGF5CQkJTUFDSF9IT0xJREFZCQlIT0xJREFZCQkJMzMxNQorZG1hXzY0MTAJCU1BQ0hfRE1BNjQxMAkJRE1BNjQxMAkJCTMzMTYKK3BjYXRzX292ZXJsYXkJCU1BQ0hfUENBVFNfT1ZFUkxBWQlQQ0FUU19PVkVSTEFZCQkzMzE3Citod2d3NjQxMAkJTUFDSF9IV0dXNjQxMAkJSFdHVzY0MTAJCTMzMTgKK3NoZW56aG91CQlNQUNIX1NIRU5aSE9VCQlTSEVOWkhPVQkJMzMxOQorY3dtZTkyMTAJCU1BQ0hfQ1dNRTkyMTAJCUNXTUU5MjEwCQkzMzIwCitjd21lOTIxMGpzCQlNQUNIX0NXTUU5MjEwSlMJCUNXTUU5MjEwSlMJCTMzMjEKK3Bnc192MQkJCU1BQ0hfUEdTX1NJVEFSQQkJUEdTX1NJVEFSQQkJMzMyMgorY29saWJyaV90ZWdyYTIJCU1BQ0hfQ09MSUJSSV9URUdSQTIJQ09MSUJSSV9URUdSQTIJCTMzMjMKK3cyMQkJCU1BQ0hfVzIxCQlXMjEJCQkzMzI0Citwb2x5c2F0MQkJTUFDSF9QT0xZU0FUMQkJUE9MWVNBVDEJCTMzMjUKK2RhdGF3YXkJCQlNQUNIX0RBVEFXQVkJCURBVEFXQVkJCQkzMzI2Citjb2JyYWwxMzgJCU1BQ0hfQ09CUkFMMTM4CQlDT0JSQUwxMzgJCTMzMjcKK3JvdmVycGNzOAkJTUFDSF9ST1ZFUlBDUzgJCVJPVkVSUENTOAkJMzMyOAorbWFydmVsYwkJCU1BQ0hfTUFSVkVMQwkJTUFSVkVMQwkJCTMzMjkKK25hdmVmaWhpZAkJTUFDSF9OQVZFRklISUQJCU5BVkVGSUhJRAkJMzMzMAorZG0zNjVfY3YxMDAJCU1BQ0hfRE0zNjVfQ1YxMDAJRE0zNjVfQ1YxMDAJCTMzMzEKK2FibGUJCQlNQUNIX0FCTEUJCUFCTEUJCQkzMzMyCitsZWdhY3kJCQlNQUNIX0xFR0FDWQkJTEVHQUNZCQkJMzMzMworaWNvbmcJCQlNQUNIX0lDT05HCQlJQ09ORwkJCTMzMzQKK3JvdmVyX2c4CQlNQUNIX1JPVkVSX0c4CQlST1ZFUl9HOAkJMzMzNQordDUzODhwCQkJTUFDSF9UNTM4OFAJCVQ1Mzg4UAkJCTMzMzYKK2RpbmdvCQkJTUFDSF9ESU5HTwkJRElOR08JCQkzMzM3Citnb2ZsZXhob21lCQlNQUNIX0dPRkxFWEhPTUUJCUdPRkxFWEhPTUUJCTMzMzgKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggOTJlY2Q4NC4uYmM3ZThhZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTgsNiArOCw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX1BHQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9QR0FMTE9DX0gKIAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggZjc0NWMxMi4uNzZlYWYzOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC04MCw3ICs4MCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIAkvKiBGSVhNRSBNMzJSICovCiAjZW5kaWYKLQlfX2RvX0lSUShpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IGIxNTc3ZjcuLjgyYTRiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTYxMCwxNyArNjEwLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFtaWdhX3NhdmVrbXNnX3NldHVwKGNoYXIgKmFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGRlYnVnX3JlcyA9IHsgLm5hbWUgPSAiRGVidWciIH07Ci0KIAlpZiAoIU1BQ0hfSVNfQU1JR0EgfHwgc3RyY21wKGFyZywgIm1lbSIpKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiAwOwogCi0JaWYgKCFBTUlHQUhXX1BSRVNFTlQoQ0hJUF9SQU0pKSB7Ci0JCXByaW50aygiV2FybmluZzogbm8gY2hpcHJhbSBwcmVzZW50IGZvciBkZWJ1Z2dpbmdcbiIpOwotCQlnb3RvIGRvbmU7CisJaWYgKGFtaWdhX2NoaXBfc2l6ZSA8IFNBVkVLTVNHX01BWE1FTSkgeworCQlwcl9lcnIoIk5vdCBlbm91Z2ggY2hpcHJhbSBmb3IgZGVidWdnaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2F2ZWttc2cgPSBhbWlnYV9jaGlwX2FsbG9jX3JlcyhTQVZFS01TR19NQVhNRU0sICZkZWJ1Z19yZXMpOworCS8qIEp1c3Qgc3RlYWwgdGhlIGJsb2NrLCB0aGUgY2hpcHJhbSBhbGxvY2F0b3IgaXNuJ3QgZnVuY3Rpb25hbCB5ZXQgKi8KKwlhbWlnYV9jaGlwX3NpemUgLT0gU0FWRUtNU0dfTUFYTUVNOworCXNhdmVrbXNnID0gKHZvaWQgKilaVFdPX1ZBRERSKENISVBfUEhZU0FERFIgKyBhbWlnYV9jaGlwX3NpemUpOwogCXNhdmVrbXNnLT5tYWdpYzEgPSBTQVZFS01TR19NQUdJQzE7CiAJc2F2ZWttc2ctPm1hZ2ljMiA9IFNBVkVLTVNHX01BR0lDMjsKIAlzYXZla21zZy0+bWFnaWNwdHIgPSBaVFdPX1BBRERSKHNhdmVrbXNnKTsKQEAgLTYyOCw4ICs2MjgsNiBAQAogCiAJYW1pZ2FfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhbWlnYV9tZW1fY29uc29sZV93cml0ZTsKIAlyZWdpc3Rlcl9jb25zb2xlKCZhbWlnYV9jb25zb2xlX2RyaXZlcik7Ci0KLWRvbmU6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMgYi9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCmluZGV4IDM5NDc4ZGQuLjI2YTgwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwpAQCAtMzg4LDkgKzM4OCw5IEBACiAJfQogCiAJaWYgKEFUQVJJSFdfUFJFU0VOVChTQ0MpICYmICFhdGFyaV9TQ0NfcmVzZXRfZG9uZSkgewotCQlzY2MuY2hhX2FfY3RybCA9IDk7CisJCWF0YXJpX3NjYy5jaGFfYV9jdHJsID0gOTsKIAkJTUZQREVMQVkoKTsKLQkJc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KKwkJYXRhcmlfc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KIAl9CiAKIAlpZiAoQVRBUklIV19QUkVTRU5UKFNDVSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCBhZTJkOTZlLi40MjAzZDEwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJQVRBUklIV19TRVQoU0NDX0RNQSk7CiAJCXByaW50aygiU0NDX0RNQSAiKTsKIAl9Ci0JaWYgKHNjY190ZXN0KCZzY2MuY2hhX2FfY3RybCkpIHsKKwlpZiAoc2NjX3Rlc3QoJmF0YXJpX3NjYy5jaGFfYV9jdHJsKSkgewogCQlBVEFSSUhXX1NFVChTQ0MpOwogCQlwcmludGsoIlNDQyAiKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCmluZGV4IDI4ZWZkYzMuLjVhNDg0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCkBAIC01Myw5ICs1Myw5IEBACiB7CiAJZG8gewogCQlNRlBERUxBWSgpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwogCU1GUERFTEFZKCk7Ci0Jc2NjLmNoYV9iX2RhdGEgPSBjOworCWF0YXJpX3NjYy5jaGFfYl9kYXRhID0gYzsKIH0KIAogc3RhdGljIHZvaWQgYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCkBAIC0xNDAsOSArMTQwLDkgQEAKIHsKIAlkbyB7CiAJCU1GUERFTEFZKCk7Ci0JfSB3aGlsZSAoIShzY2MuY2hhX2JfY3RybCAmIDB4MDEpKTsgLyogd2FpdCBmb3IgcnggYnVmIGZpbGxlZCAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDAxKSk7IC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KIAlNRlBERUxBWSgpOwotCXJldHVybiBzY2MuY2hhX2JfZGF0YTsKKwlyZXR1cm4gYXRhcmlfc2NjLmNoYV9iX2RhdGE7CiB9CiAKIGludCBhdGFyaV9taWRpX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQpAQCAtMTg1LDkgKzE4NSw5IEBACiAKICNkZWZpbmUgU0NDX1dSSVRFKHJlZywgdmFsKQkJCQlcCiAJZG8gewkJCQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlyZWczID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4YzAgOiAweDQwOwogCXJlZzUgPSAoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4ID8gMHg2MCA6IDB4MjAgfCAweDgyIC8qIGFzc2VydCBEVFIvUlRTICovOwogCi0JKHZvaWQpc2NjLmNoYV9iX2N0cmw7CQkvKiByZXNldCByZWcgcG9pbnRlciAqLworCSh2b2lkKWF0YXJpX3NjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwogCVNDQ19XUklURSg5LCAweGMwKTsJCS8qIHJlc2V0ICovCiAJTE9OR19ERUxBWSgpOwkJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KIAlTQ0NfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaAppbmRleCBhNzE0ZTFhLi5mNTFmNzA5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKQEAgLTQ0OSw3ICs0NDksNyBAQAogICB1X2NoYXIgY2hhcl9kdW1teTM7CiAgIHVfY2hhciBjaGFfYl9kYXRhOwogIH07Ci0jIGRlZmluZSBzY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKVNDQ19CQVMpKQorIyBkZWZpbmUgYXRhcmlfc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKIAogLyogVGhlIEVTQ0MgKFo4NTIzMCkgaW4gYW4gQXRhcmkgU1QuIFRoZSBjaGFubmVscyBhcmUgcmV2ZXJzZWQhICovCiAjIGRlZmluZSBzdF9lc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKikweGZmZmZmYTMxKSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCAyOTM2ZGRhLi42NWIxMzEyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC04MSwxOCArODEsNiBAQAogCXN0cmNweShfX2QgKyBzdHJsZW4oX19kKSwgKHMpKTsJCVwKIH0pCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCi1zdGF0aWMgaW5saW5lIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYykKLXsKLQljaGFyIHNjLCBjaCA9IGM7Ci0KLQlmb3IgKDsgKHNjID0gKnMrKykgIT0gY2g7ICkgewotCQlpZiAoIXNjKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAoY2hhciAqKXMgLSAxOwotfQotCiAjaWZuZGVmIENPTkZJR19DT0xERklSRQogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKIHN0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaGVhZC5TCmluZGV4IDQyNDM0MDAuLjBkYjIwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaGVhZC5TCkBAIC03Nyw4ICs3NywxOCBAQAogICAgV2UgZW5zdXJlIHI3IHBvaW50cyB0byBhIHZhbGlkIEZEVCwganVzdCBpbiBjYXNlIHRoZSBib290bG9hZGVyCiAgICBpcyBicm9rZW4gb3Igbm9uLWV4aXN0ZW50ICovCiAJYmVxaQlyNywgbm9fZmR0X2FyZwkJCS8qIE5VTEwgcG9pbnRlcj8gIGRvbid0IGNvcHkgKi8KLQlsdwlyMTEsIHIwLCByNwkJCS8qIERvZXMgcjcgcG9pbnQgdG8gYSAqLwotCXJzdWJpCXIxMSwgcjExLCBPRl9EVF9IRUFERVIJCS8qIHZhbGlkIEZEVD8gKi8KKy8qIERvZXMgcjcgcG9pbnQgdG8gYSB2YWxpZCBGRFQ/IExvYWQgSEVBREVSIG1hZ2ljIG51bWJlciAqLworCS8qIFJ1biB0aW1lIEJpZy9MaXR0bGUgZW5kaWFuIHBsYXRmb3JtICovCisJLyogU2F2ZSAxIGFzIHdvcmQgYW5kIGxvYWQgYnl0ZSAtIDAgLSBCSUcsIDEgLSBMSVRUTEUgKi8KKwlhZGRpawlyMTEsIHIwLCAweDEgLyogQklHL0xJVFRMRSBjaGVja2luZyB2YWx1ZSAqLworCS8qIF9fYnNzX3N0YXJ0IHdpbGwgYmUgemVyb2VkIGxhdGVyIC0gaXQgaXMganVzdCB0ZW1wIGxvY2F0aW9uICovCisJc3dpCXIxMSwgcjAsIFRPUEhZUyhfX2Jzc19zdGFydCkKKwlsYnVpCXIxMSwgcjAsIFRPUEhZUyhfX2Jzc19zdGFydCkKKwliZXFpZAlyMTEsIGJpZ19lbmRpYW4gLyogRE8gTk9UIGJyZWFrIGRlbGF5IHN0b3AgZGVwZW5kZW5jeSAqLworCWx3CXIxMSwgcjAsIHI3IC8qIEJpZyBlbmRpYW4gbG9hZCBpbiBkZWxheSBzbG90ICovCisJbHdyCXIxMSwgcjAsIHI3IC8qIExpdHRsZSBlbmRpYW4gbG9hZCAqLworYmlnX2VuZGlhbjoKKwlyc3ViaQlyMTEsIHIxMSwgT0ZfRFRfSEVBREVSCS8qIENoZWNrIEZEVCBoZWFkZXIgKi8KIAliZXFpCXIxMSwgX3ByZXBhcmVfY29weV9mZHQKIAlvcglyNywgcjAsIHIwCQkvKiBjbGVhciBSNyB3aGVuIG5vdCB2YWxpZCBEVEIgKi8KIAlibmVpCXIxMSwgbm9fZmR0X2FyZwkJCS8qIE5vIC0gZ2V0IG91dCBvZiBoZXJlICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKaW5kZXggMjVmNmUwNy4uNzgyNjgwZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwpAQCAtMTQ3LDEwICsxNDcsNiBAQAogCSNpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9CQVJSRUwgPiAwCiAJI2RlZmluZSBCU1JMSShyRCwgckEsIGltbSkJXAogCQlic3JsaSByRCwgckEsIGltbQotCSNlbGlmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX0RJViA+IDAKLQkjZGVmaW5lIEJTUkxJKHJELCByQSwgaW1tKQlcCi0JCW9yaSByRCwgcjAsICgxIDw8IGltbSk7CVwKLQkJaWRpdnUgckQsIHJELCByQQogCSNlbHNlCiAJI2RlZmluZSBCU1JMSShyRCwgckEsIGltbSkgQlNSTEkgIyMgaW1tIChyRCwgckEpCiAJLyogT25seSB0aGUgdXNlZCBzaGlmdCBjb25zdGFudHMgZGVmaW5lZCBoZXJlIC0gYWRkIG1vcmUgaWYgbmVlZGVkICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMgYi9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMKaW5kZXggZmRjNDhiYi4uNjIwMjFkNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvZmFzdGNvcHkuUwpAQCAtMjksNiArMjksMTAgQEAKICAqCWJldHdlZW4gbWVtIGxvY2F0aW9ucyB3aXRoIHNpemUgb2YgeGZlciBzcGVjJ2QgaW4gYnl0ZXMKICAqLwogCisjaWZkZWYgX19NSUNST0JMQVpFRUxfXworI2Vycm9yIE1pY3JvYmxhemUgTEUgbm90IHN1cHBvcnQgQVNNIG9wdGltaXplZCBsaWIgZnVuYy4gRGlzYWJsZSBPUFRfTElCX0FTTS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCS50ZXh0CiAJLmdsb2JsCW1lbWNweQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwppbmRleCAxMWJkZDY4Li5mYzc3MGJlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwpAQCAtMTY5LDExICsxNjksMTEgQEAKIAogCXN0cnVjdCBjb25zb2xlICp0bXA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZSh0bXApCiAJCWlmICh0bXAgPT0gJnBkY19jb25zKQogCQkJYnJlYWs7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoIXRtcCkgewogCQlwcmludGsoS0VSTl9JTkZPICJQREMgY29uc29sZSBkcml2ZXIgbm90IHJlZ2lzdGVyZWQgYW55bW9yZSwgbm90IGNyZWF0aW5nICVzXG4iLCBwZGNfY29ucy5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCmluZGV4IDhlYWVkODEuLjE3MTk0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaApAQCAtNDAsOCArNDAsOCBAQAogCiAvKiBNQVMgcmVnaXN0ZXJzIGJpdCBkZWZpbml0aW9ucyAqLwogCi0jZGVmaW5lIE1BUzBfVExCU0VMKHgpCQkoKHggPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCQkoKHggPDwgMTYpICYgMHgwRkZGMDAwMCkKKyNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJCSgoKHgpIDw8IDI4KSAmIDB4MzAwMDAwMDApCisjZGVmaW5lIE1BUzBfRVNFTCh4KQkJKCgoeCkgPDwgMTYpICYgMHgwRkZGMDAwMCkKICNkZWZpbmUgTUFTMF9OVih4KQkJKCh4KSAmIDB4MDAwMDBGRkYpCiAjZGVmaW5lIE1BUzBfSEVTCQkweDAwMDA0MDAwCiAjZGVmaW5lIE1BUzBfV1FfQUxMV0FZUwkJMHgwMDAwMDAwMApAQCAtNTAsMTIgKzUwLDEyIEBACiAKICNkZWZpbmUgTUFTMV9WQUxJRAkJMHg4MDAwMDAwMAogI2RlZmluZSBNQVMxX0lQUk9UCQkweDQwMDAwMDAwCi0jZGVmaW5lIE1BUzFfVElEKHgpCQkoKHggPDwgMTYpICYgMHgzRkZGMDAwMCkKKyNkZWZpbmUgTUFTMV9USUQoeCkJCSgoKHgpIDw8IDE2KSAmIDB4M0ZGRjAwMDApCiAjZGVmaW5lIE1BUzFfSU5ECQkweDAwMDAyMDAwCiAjZGVmaW5lIE1BUzFfVFMJCQkweDAwMDAxMDAwCiAjZGVmaW5lIE1BUzFfVFNJWkVfTUFTSwkJMHgwMDAwMGY4MAogI2RlZmluZSBNQVMxX1RTSVpFX1NISUZUCTcKLSNkZWZpbmUgTUFTMV9UU0laRSh4KQkJKCh4IDw8IE1BUzFfVFNJWkVfU0hJRlQpICYgTUFTMV9UU0laRV9NQVNLKQorI2RlZmluZSBNQVMxX1RTSVpFKHgpCQkoKCh4KSA8PCBNQVMxX1RTSVpFX1NISUZUKSAmIE1BUzFfVFNJWkVfTUFTSykKIAogI2RlZmluZSBNQVMyX0VQTgkJMHhGRkZGRjAwMAogI2RlZmluZSBNQVMyX1gwCQkJMHgwMDAwMDA0MApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNTNiNjRiZS4uZGE0YjIwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogI2lmZGVmIENPTkZJR19GTEFUTUVNCiAjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJKE1FTU9SWV9TVEFSVCA+PiBQQUdFX1NISUZUKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IEFSQ0hfUEZOX09GRlNFVCAmJiAocGZuKSA8IChBUkNIX1BGTl9PRkZTRVQgKyBtYXhfbWFwbnIpKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IEFSQ0hfUEZOX09GRlNFVCAmJiAocGZuKSA8IG1heF9tYXBucikKICNlbmRpZgogCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggNTVjYmE0YS4uZjhjZDlmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjAzKQotCW1mbHIJcjQKKwltZmxyCXI1CiBCRUdJTl9NTVVfRlRSX1NFQ1RJT04KIAlsaQlyMTAsMAogCW10c3ByCVNQUk5fU1BSR182MDNfTFJVLHIxMAkJLyogaW5pdCBTVyBMUlUgdHJhY2tpbmcgKi8KQEAgLTI3LDYwICsyNyw2MCBAQAogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9GUFVfVU5BVkFJTEFCTEUpCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1XzYwNCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF82MDRfaGlkMAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTBjeCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlibAlzZXR1cF83NTBjeAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MGZ4KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWJsCXNldHVwXzc1MGZ4Ci0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzQwMCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfNzQwMF93b3JrYXJvdW5kcwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzQxMCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfNzQxMF93b3JrYXJvdW5kcwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJbGkJcjMsMAogCW10c3ByCVNQUk5fTDJDUjIscjMKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDV4KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc0NXhfc3BlY2lmaWNzCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIAogLyogRW5hYmxlIGNhY2hlcyBmb3IgNjAzJ3MsIDYwNCwgNzUwICYgNzQwMCAqLwpAQCAtMTk0LDEwICsxOTQsMTAgQEAKIAljcm9yCTQqY3IwK2VxLDQqY3IwK2VxLDQqY3IxK2VxCiAJY3Jvcgk0KmNyMCtlcSw0KmNyMCtlcSw0KmNyMitlcQogCWJuZWxyCi0JbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI1KQorCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNCkKIAlsaQlyNyxDUFVfRlRSX0NBTl9OQVAKIAlhbmRjCXI2LHI2LHI3Ci0Jc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI1KQorCXN0dwlyNixDUFVfU1BFQ19GRUFUVVJFUyhyNCkKIAlibHIKIAogLyogNzUwZnggc3BlY2lmaWMKQEAgLTIyNSwxMiArMjI1LDEyIEBACiAJYW5kaXMuCXIxMSxyMTEsTDNDUl9MM0VAaAogCWJlcQkxZgogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfTDNDUikKLQlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWFuZGkuCXIwLHI2LENQVV9GVFJfTDNfRElTQUJMRV9OQVAKIAliZXEJMWYKIAlsaQlyNyxDUFVfRlRSX0NBTl9OQVAKIAlhbmRjCXI2LHI2LHI3Ci0Jc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI1KQorCXN0dwlyNixDUFVfU1BFQ19GRUFUVVJFUyhyNCkKIDE6CiAJbWZzcHIJcjExLFNQUk5fSElEMAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggOGQ3NGEyNC4uZThlOTE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMjA3Niw4ICsyMDc2LDggQEAKIAkgKiBwb2ludGVyIG9uIHBwYzY0IGFuZCBib29rZSBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwgbW9kZQogCSAqIG9uIHBwYzY0IGFuZCByZWxvY19vZmZzZXQgaXMgYWx3YXlzIDAgb24gYm9va2UuCiAJICovCi0JaWYgKHMtPmNwdV9zZXR1cCkgewotCQlzLT5jcHVfc2V0dXAob2Zmc2V0LCBzKTsKKwlpZiAodC0+Y3B1X3NldHVwKSB7CisJCXQtPmNwdV9zZXR1cChvZmZzZXQsIHQpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgfHwgQ09ORklHX0JPT0tFICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYwppbmRleCA0ZGNmNWY4Li5iMGRjOGY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKQEAgLTU5Niw2ICs1OTYsNyBAQAogCQkJaWYgKGxlZnQgPD0gMCkKIAkJCQlsZWZ0ID0gcGVyaW9kOwogCQkJcmVjb3JkID0gMTsKKwkJCWV2ZW50LT5ody5sYXN0X3BlcmlvZCA9IGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kOwogCQl9CiAJCWlmIChsZWZ0IDwgMHg4MDAwMDAwMExMKQogCQkJdmFsID0gMHg4MDAwMDAwMExMIC0gbGVmdDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGJmNWNiOTEuLmZkNDgxMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJZGJnKCJyZW1vdmluZyBjcHUgJWx1IGZyb20gbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSkpIHsKLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBjcHUgJWx1IG5vdCBmb3VuZCBpbiBub2RlICVkXG4iLAogCQkgICAgICAgY3B1LCBub2RlKTsKQEAgLTEyODksMTAgKzEyODksOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCi0vKiBWcnR1YWwgUHJvY2Vzc29yIEhvbWUgTm9kZSAoVlBITikgc3VwcG9ydCAqLworLyogVmlydHVhbCBQcm9jZXNzb3IgSG9tZSBOb2RlIChWUEhOKSBzdXBwb3J0ICovCiAjaWZkZWYgQ09ORklHX1BQQ19TUExQQVIKLSNkZWZpbmUgVlBITl9OUl9DSEFOR0VfQ1RSUyAoOCkKLXN0YXRpYyB1OCB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW05SX0NQVVNdW1ZQSE5fTlJfQ0hBTkdFX0NUUlNdOworc3RhdGljIHU4IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbTlJfQ1BVU11bTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFNdOwogc3RhdGljIGNwdW1hc2tfdCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiBzdGF0aWMgaW50IHZwaG5fZW5hYmxlZDsKIHN0YXRpYyB2b2lkIHNldF90b3BvbG9neV90aW1lcih2b2lkKTsKQEAgLTEzMDMsMTYgKzEzMDIsMTggQEAKICAqLwogc3RhdGljIHZvaWQgc2V0dXBfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlX2NvdW50ZXJzKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDA7CisJaW50IGNwdTsKKworCS8qIFRoZSBWUEhOIGZlYXR1cmUgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDggcmVmZXJlbmNlIHBvaW50cyAqLworCUJVSUxEX0JVR19PTihNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUyA+IDgpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpbnQgaSA9IDA7CisJCWludCBpOwogCQl1OCAqY291bnRzID0gdnBobl9jcHVfY2hhbmdlX2NvdW50c1tjcHVdOwogCQl2b2xhdGlsZSB1OCAqaHlwZXJ2aXNvcl9jb3VudHMgPSBscHBhY2FbY3B1XS52cGhuX2Fzc29jX2NvdW50czsKIAotCQlmb3IgKGkgPSAwOyBpIDwgVlBITl9OUl9DSEFOR0VfQ1RSUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspCiAJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKLQkJfQogCX0KIH0KIApAQCAtMTMyOSw3ICsxMzMwLDcgQEAKICAqLwogc3RhdGljIGludCB1cGRhdGVfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDAsIG5yX2NwdXMgPSAwOworCWludCBjcHUsIG5yX2NwdXMgPSAwOwogCWNwdW1hc2tfdCAqY2hhbmdlcyA9ICZjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiAKIAljcHVtYXNrX2NsZWFyKGNoYW5nZXMpOwpAQCAtMTMzOSw4ICsxMzQwLDggQEAKIAkJdTggKmNvdW50cyA9IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbY3B1XTsKIAkJdm9sYXRpbGUgdTggKmh5cGVydmlzb3JfY291bnRzID0gbHBwYWNhW2NwdV0udnBobl9hc3NvY19jb3VudHM7CiAKLQkJZm9yIChpID0gMDsgaSA8IFZQSE5fTlJfQ0hBTkdFX0NUUlM7IGkrKykgewotCQkJaWYgKGh5cGVydmlzb3JfY291bnRzW2ldID4gY291bnRzW2ldKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspIHsKKwkJCWlmIChoeXBlcnZpc29yX2NvdW50c1tpXSAhPSBjb3VudHNbaV0pIHsKIAkJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKIAkJCQljaGFuZ2VkID0gMTsKIAkJCX0KQEAgLTEzNTQsOCArMTM1NSwxMSBAQAogCXJldHVybiBucl9jcHVzOwogfQogCi0vKiA2IDY0LWJpdCByZWdpc3RlcnMgdW5wYWNrZWQgaW50byAxMiAzMi1iaXQgYXNzb2NpYXRpdml0eSB2YWx1ZXMgKi8KLSNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpKQorLyoKKyAqIDYgNjQtYml0IHJlZ2lzdGVycyB1bnBhY2tlZCBpbnRvIDEyIDMyLWJpdCBhc3NvY2lhdGl2aXR5IHZhbHVlcy4gVG8gZm9ybQorICogdGhlIGNvbXBsZXRlIHByb3BlcnR5IHdlIGhhdmUgdG8gYWRkIHRoZSBsZW5ndGggaW4gdGhlIGZpcnN0IGNlbGwuCisgKi8KKyNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpICsgMSkKIAogLyoKICAqIENvbnZlcnQgdGhlIGFzc29jaWF0aXZpdHkgZG9tYWluIG51bWJlcnMgcmV0dXJuZWQgZnJvbSB0aGUgaHlwZXJ2aXNvcgpAQCAtMTM2MywxNSArMTM2NywxNCBAQAogICovCiBzdGF0aWMgaW50IHZwaG5fdW5wYWNrX2Fzc29jaWF0aXZpdHkoY29uc3QgbG9uZyAqcGFja2VkLCB1bnNpZ25lZCBpbnQgKnVucGFja2VkKQogewotCWludCBpID0gMDsKLQlpbnQgbnJfYXNzb2NfZG9tcyA9IDA7CisJaW50IGksIG5yX2Fzc29jX2RvbXMgPSAwOwogCWNvbnN0IHUxNiAqZmllbGQgPSAoY29uc3QgdTE2KikgcGFja2VkOwogCiAjZGVmaW5lIFZQSE5fRklFTERfVU5VU0VECSgweGZmZmYpCiAjZGVmaW5lIFZQSE5fRklFTERfTVNCCQkoMHg4MDAwKQogI2RlZmluZSBWUEhOX0ZJRUxEX01BU0sJCSh+VlBITl9GSUVMRF9NU0IpCiAKLQlmb3IgKGkgPSAwOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKIAkJaWYgKCpmaWVsZCA9PSBWUEhOX0ZJRUxEX1VOVVNFRCkgewogCQkJLyogQWxsIHNpZ25pZmljYW50IGZpZWxkcyBwcm9jZXNzZWQsIGFuZCByZW1haW5pbmcKIAkJCSAqIGZpZWxkcyBjb250YWluIHRoZSByZXNlcnZlZCB2YWx1ZSBvZiBhbGwgMSdzLgpAQCAtMTM3OSwxNCArMTM4MiwxMiBAQAogCQkJICovCiAJCQl1bnBhY2tlZFtpXSA9ICooKHUzMiopZmllbGQpOwogCQkJZmllbGQgKz0gMjsKLQkJfQotCQllbHNlIGlmICgqZmllbGQgJiBWUEhOX0ZJRUxEX01TQikgeworCQl9IGVsc2UgaWYgKCpmaWVsZCAmIFZQSE5fRklFTERfTVNCKSB7CiAJCQkvKiBEYXRhIGlzIGluIHRoZSBsb3dlciAxNSBiaXRzIG9mIHRoaXMgZmllbGQgKi8KIAkJCXVucGFja2VkW2ldID0gKmZpZWxkICYgVlBITl9GSUVMRF9NQVNLOwogCQkJZmllbGQrKzsKIAkJCW5yX2Fzc29jX2RvbXMrKzsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIERhdGEgaXMgaW4gdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhpcyBmaWVsZAogCQkJICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIG5leHQgMTYgYml0IGZpZWxkCiAJCQkgKi8KQEAgLTEzOTYsNiArMTM5Nyw5IEBACiAJCX0KIAl9CiAKKwkvKiBUaGUgZmlyc3QgY2VsbCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSAqLworCXVucGFja2VkWzBdID0gbnJfYXNzb2NfZG9tczsKKwogCXJldHVybiBucl9hc3NvY19kb21zOwogfQogCkBAIC0xNDA1LDcgKzE0MDksNyBAQAogICovCiBzdGF0aWMgbG9uZyBoY2FsbF92cGhuKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCiB7Ci0JbG9uZyByYyA9IDA7CisJbG9uZyByYzsKIAlsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV0gPSB7MH07CiAJdTY0IGZsYWdzID0gMTsKIAlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CkBAIC0xNDE5LDcgKzE0MjMsNyBAQAogc3RhdGljIGxvbmcgdnBobl9nZXRfYXNzb2NpYXRpdml0eSh1bnNpZ25lZCBsb25nIGNwdSwKIAkJCQkJdW5zaWduZWQgaW50ICphc3NvY2lhdGl2aXR5KQogewotCWxvbmcgcmMgPSAwOworCWxvbmcgcmM7CiAKIAlyYyA9IGhjYWxsX3ZwaG4oY3B1LCBhc3NvY2lhdGl2aXR5KTsKIApAQCAtMTQ0NSw5ICsxNDQ5LDkgQEAKICAqLwogaW50IGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKQogewotCWludCBjcHUgPSAwLCBuaWQgPSAwLCBvbGRfbmlkID0gMDsKKwlpbnQgY3B1LCBuaWQsIG9sZF9uaWQ7CiAJdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHlbVlBITl9BU1NPQ19CVUZTSVpFXSA9IHswfTsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2spIHsKIAkJdnBobl9nZXRfYXNzb2NpYXRpdml0eShjcHUsIGFzc29jaWF0aXZpdHkpOwpAQCAtMTUxMiw3ICsxNTE2LDggQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfVlBITikpIHsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9WUEhOKSAmJgorCSAgICBnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKSB7CiAJCXZwaG5fZW5hYmxlZCA9IDE7CiAJCXNldHVwX2NwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZV9jb3VudGVycygpOwogCQlpbml0X3RpbWVyX2RlZmVycmFibGUoJnRvcG9sb2d5X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDVkM2VhOWYuLmNhNWQ1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNzEzLDYgKzcxMywxMyBAQAogLyogTkI6IHJlZy91bnJlZyBhcmUgY2FsbGVkIHdoaWxlIGd1YXJkZWQgd2l0aCB0aGUgdHJhY2Vwb2ludHNfbXV0ZXggKi8KIGV4dGVybiBsb25nIGhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQ7CiAKKy8qIAorICogU2luY2UgdGhlIHRyYWNpbmcgY29kZSBtaWdodCBleGVjdXRlIGhjYWxscyB3ZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QKKyAqIHJlY3Vyc2lvbi4gT25lIGV4YW1wbGUgb2YgdGhpcyBhcmUgc3BpbmxvY2tzIGNhbGxpbmcgSF9ZSUVMRCBvbgorICogc2hhcmVkIHByb2Nlc3NvciBwYXJ0aXRpb25zLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBoY2FsbF90cmFjZV9kZXB0aCk7CisKIHZvaWQgaGNhbGxfdHJhY2Vwb2ludF9yZWdmdW5jKHZvaWQpCiB7CiAJaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudCsrOwpAQCAtNzI1LDEyICs3MzIsNDIgQEAKIAogdm9pZCBfX3RyYWNlX2hjYWxsX2VudHJ5KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICphcmdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2VudHJ5KG9wY29kZSwgYXJncyk7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogdm9pZCBfX3RyYWNlX2hjYWxsX2V4aXQobG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgcmV0dmFsLAogCQkJdW5zaWduZWQgbG9uZyAqcmV0YnVmKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2V4aXQob3Bjb2RlLCByZXR2YWwsIHJldGJ1Zik7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBmZjE5ZWZkLi42MzZiY2I4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgQ0hTQ19TQ0gKLQlkZWZfdHJpc3RhdGUgeQorCWRlZl90cmlzdGF0ZSBtCiAJcHJvbXB0ICJTdXBwb3J0IGZvciBDSFNDIHN1YmNoYW5uZWxzIgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBDSFNDIHN1YmNoYW5uZWxzLiBBIENIU0Mgc3ViY2hhbm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNDA1Y2M5Ny4uN2UxZjc3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xLDI5ICsxLDggQEAKICNpZm5kZWYgX1MzOTBfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9TMzkwX0NBQ0hFRkxVU0hfSAogCi0vKiBLZWVwIGluY2x1ZGVzIHRoZSBzYW1lIGFjcm9zcyBhcmNoZXMuICAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgczM5MC4gKi8KLSNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgMAotI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLQltZW1jcHkoZHN0LCBzcmMsIGxlbikKLSNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2FjaGVmbHVzaC5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogdm9pZCBrZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGYxZjY0NGYuLjkwNzRhNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCmluZGV4IDA3ZGVhZWUuLmE2YzRmN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKQEAgLTEyNSw5ICsxMjUsOSBAQAogCXVuc2lnbmVkIGxvbmcgdG1wMTsKIAogCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKIAkJIiAgIGpvICAgIDVmXG4iCi0JCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIGJyYXMgICUzLDNmXG4iCiAJCSIwOiJBSEkiICAlMCwyNTdcbiIKIAkJIjE6IG12YyAgIDAoMSwlMSksMCglMilcbiIKQEAgLTE0Miw5ICsxNDIsOCBAQAogCQkiMzoiQUhJIiAgJTAsLTI1NlxuIgogCQkiICAgam5tICAgMmJcbiIKIAkJIjQ6IGV4ICAgICUwLDFiLTBiKCUzKVxuIgotCQkiICAgc2FjZiAgMFxuIgogCQkiNTogIlNMUiIgICUwLCUwXG4iCi0JCSI2OlxuIgorCQkiNjogc2FjZiAgMFxuIgogCQlFWF9UQUJMRSgxYiw2YikgRVhfVEFCTEUoMmIsMGIpIEVYX1RBQkxFKDRiLDBiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiICh0byksICIrYSIgKGZyb20pLCAiPWEiICh0bXAxKQogCQk6IDogImNjIiwgIm1lbW9yeSIpOwpAQCAtMTU2LDkgKzE1NSw5IEBACiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCiAJYXNtIHZvbGF0aWxlKAorCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICJBSEkiICAlMCwtMVxuIgogCQkiICAgam8gICAgNWZcbiIKLQkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAgYnJhcyAgJTMsM2ZcbiIKIAkJIiAgIHhjICAgIDAoMSwlMSksMCglMSlcbiIKIAkJIjA6IkFISSIgICUwLDI1N1xuIgpAQCAtMTc4LDkgKzE3Nyw4IEBACiAJCSIzOiJBSEkiICAlMCwtMjU2XG4iCiAJCSIgICBqbm0gICAyYlxuIgogCQkiNDogZXggICAgJTAsMCglMylcbiIKLQkJIiAgIHNhY2YgIDBcbiIKIAkJIjU6ICJTTFIiICAlMCwlMFxuIgotCQkiNjpcbiIKKwkJIjY6IHNhY2YgIDBcbiIKIAkJRVhfVEFCTEUoMWIsNmIpIEVYX1RBQkxFKDJiLDBiKSBFWF9UQUJMRSg0YiwwYikKIAkJOiAiK2EiIChzaXplKSwgIithIiAodG8pLCAiPWEiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDBjNzE5YzYuLmUxODUwYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMzM2LDcgKzMzNiw4IEBACiAJcGFnZS0+ZmxhZ3MgXj0gYml0czsKIAlpZiAocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spIHsKIAkJLyogUGFnZSBub3cgaGFzIHNvbWUgZnJlZSBwZ3RhYmxlIGZyYWdtZW50cy4gKi8KLQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOworCQlpZiAoIWxpc3RfZW1wdHkoJnBhZ2UtPmxydSkpCisJCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJCXBhZ2UgPSBOVUxMOwogCX0gZWxzZQogCQkvKiBBbGwgZnJhZ21lbnRzIG9mIHRoZSA0SyBwYWdlIGhhdmUgYmVlbiBmcmVlZC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBhZTU1NTU2Li44YTkwMTFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xNSw2ICsxNSw3IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQorCXNlbGVjdCBIQVZFX0tFUk5FTF9YWgogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggOWM4YzZlMS4uZTNkODE3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC0yMDAsNyArMjAwLDcgQEAKIGxpYnMtJChDT05GSUdfU1VQRVJIMzIpCQk6PSBhcmNoL3NoL2xpYi8JJChsaWJzLXkpCiBsaWJzLSQoQ09ORklHX1NVUEVSSDY0KQkJOj0gYXJjaC9zaC9saWI2NC8gJChsaWJzLXkpCiAKLUJPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIFwKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2UueHogdUltYWdlLmx6byBcCiAJICAgICAgIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gekltYWdlIHZtbGludXguYmluIHZtbGludXguc3JlYyBcCiAJICAgICAgIHJvbUltYWdlCiBQSE9OWSArPSAkKEJPT1RfVEFSR0VUUykKQEAgLTIzMCw1ICsyMzAsNiBAQAogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKKwlAZWNobyAnICB1SW1hZ2UueHoJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKHh6KScKIAlAZWNobyAnICB1SW1hZ2UubHpvCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem8pJwogZW5kZWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCAzM2I2NjI5Li43MDE2NjdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC0xMjk0LDYgKzEyOTQsNyBAQAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyYzFfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGkyYzFfZGV2aWNlcykpOwogCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fU0hfVk9VKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19TSF9WT1VfTU9EVUxFKQogCS8qIFZPVSAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0RWX0QxNSwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRFZfRDE0LCBOVUxMKTsKQEAgLTEzMjUsNiArMTMyNiw3IEBACiAKIAkvKiBSZW1vdmUgcmVzZXQgKi8KIAlncGlvX3NldF92YWx1ZShHUElPX1BURzQsIDEpOworI2VuZGlmCiAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZWNvdmVjX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUoZWNvdmVjX2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCAxY2U2MzYyLi5iYTUxNWQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0yNCwxMiArMjQsMTMgQEAKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkJOj0gZ3oKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpCTo9IGJ6Mgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKQk6PSBsem1hCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX1haKQk6PSB4egogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk8pCTo9IGx6bwogCiB0YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiBcCi0JICAgdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIHVJbWFnZS5iaW4KKwkgICB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS54eiB1SW1hZ2UubHpvIHVJbWFnZS5iaW4KIGV4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAotCSAgIHZtbGludXguYmluLmx6bworCSAgIHZtbGludXguYmluLnh6IHZtbGludXguYmluLmx6bwogc3ViZGlyLSA6PSBjb21wcmVzc2VkIHJvbWltYWdlCiAKICQob2JqKS96SW1hZ2U6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKQEAgLTc2LDYgKzc3LDkgQEAKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogCiskKG9iaikvdm1saW51eC5iaW4ueHo6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHh6a2VybikKKwogJChvYmopL3ZtbGludXguYmluLmx6bzogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHpvKQogCkBAIC04OCw2ICs5Miw5IEBACiAkKG9iaikvdUltYWdlLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbi5sem1hCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bWEpCiAKKyQob2JqKS91SW1hZ2UueHo6ICQob2JqKS92bWxpbnV4LmJpbi54egorCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSx4eikKKwogJChvYmopL3VJbWFnZS5sem86ICQob2JqKS92bWxpbnV4LmJpbi5sem8KIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UsbHpvKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGNmYTVhMDguLmUwYjAyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiB0YXJnZXRzCQk6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IFwKIAkJICAgdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAotCQkgICB2bWxpbnV4LmJpbi5sem8gXAorCQkgICB2bWxpbnV4LmJpbi54eiB2bWxpbnV4LmJpbi5sem8gXAogCQkgICBoZWFkXyQoQklUUykubyBtaXNjLm8gcGlnZ3kubwogCiBPQkpFQ1RTID0gJChvYmopL2hlYWRfJChCSVRTKS5vICQob2JqKS9taXNjLm8gJChvYmopL2NhY2hlLm8KQEAgLTUwLDYgKzUwLDggQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiskKG9iaikvdm1saW51eC5iaW4ueHo6ICQodm1saW51eC5iaW4uYWxsLXkpIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQseHprZXJuKQogJChvYmopL3ZtbGludXguYmluLmx6bzogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAyNzE0MGE2Li45NTQ3MGE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC02MSw2ICs2MSwxMCBAQAogI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfS0VSTkVMX1haCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW54ei5jIgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTwogI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHpvLmMiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMDgzZWEwNi4uZGI4NTkxNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogZXh0ZXJuIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CitzdHJ1Y3QgbW1fc3RydWN0OwogCiBleHRlcm4gdm9pZCBfX3VwZGF0ZV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCmluZGV4IGMyYjBhYWEuLjY3Mjk0NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwpAQCAtMjMwLDEwICsyMzAsMTAgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc1MF9kZXZpY2VzX3NldHVwKHZvaWQpCiB7CiAJaWYgKG1hY2hfaXNfcnRzNzc1MXIyZCgpKSB7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpZl9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaWZfZGV2aWNlKTsKIAl9IGVsc2UgewotCQlwbGF0Zm9ybV9yZWdpc3Rlcl9kZXZpY2UoJnNjaV9kZXZpY2UpOwotCQlwbGF0Zm9ybV9yZWdpc3Rlcl9kZXZpY2UoJnNjaWZfZGV2aWNlKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2lfZGV2aWNlKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2lmX2RldmljZSk7CiAJfQogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzc1MF9kZXZpY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggOTQ4ZmRiNi4uMzhlODYyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jCkBAIC0xNyw2ICsxNyw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwogCiBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdOworRVhQT1JUX1NZTUJPTChjcHVfY29yZV9tYXApOwogCiBzdGF0aWMgY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKHVuc2lnbmVkIGludCBjcHUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNjNlMzVlYy4uNjJmMDg0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSw0OCArMSw4IEBACiAjaWZuZGVmIF9BU01fWDg2X0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQVNNX1g4Nl9DQUNIRUZMVVNIX0gKIAotLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIGludGVsLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHZtYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pIHsgfQotI2RlZmluZSBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgMAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBsZW4pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3ZtYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3Z1bm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJICAgICB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCW1lbWNweShkc3QsIHNyYywgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLAotCQkJCSAgICAgICB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotfQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NhY2hlZmx1c2guaD4KIAogI2lmZGVmIENPTkZJR19YODZfUEFUCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCA0ZmFiMjRkLi42ZTZlNzU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMzIsNSArMzIsNiBAQAogCiBERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpOwogCitpbnQgX19jcHVpbml0IG13YWl0X3VzYWJsZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKik7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IGY1MmQ0MmUuLjU3NGRiYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlkbyB7CQkJCQkJCVwKIAkJYXNtIGdvdG8oIjE6IgkJCQkJXAogCQkJSlVNUF9MQUJFTF9JTklUSUFMX05PUAkJCVwKLQkJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhXCIgXG5cdCJcCisJCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYXdcIiBcblx0IlwKIAkJCV9BU01fUFRSICIxYiwgJWxbIiAjbGFiZWwgIl0sICVjMCBcblx0IiBcCiAJCQkiLnBvcHNlY3Rpb24gXG5cdCIJCQlcCiAJCQk6IDogICJpIiAoa2V5KSA6ICA6IGxhYmVsKTsJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDRhMmQ0ZTAuLjhiNTM5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMzYsOCArMzYsNiBAQAogCXVuc2lnbmVkIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewotCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5zdGF0ZSwgVExCU1RBVEVfT0spOwogCQlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSwgbmV4dCk7CkBAIC00Nyw2ICs0NSw5IEBACiAJCS8qIFJlLWxvYWQgcGFnZSB0YWJsZXMgKi8KIAkJbG9hZF9jcjMobmV4dC0+cGdkKTsKIAorCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOworCiAJCS8qCiAJCSAqIGxvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6CiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggMjA3MWE4Yi4uZWJiYzRkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC01NTgsMTMgKzU1OCwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpCiB7Ci0jaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCiAJaWYgKHNpemVvZihwbWR2YWxfdCkgPiBzaXplb2YobG9uZykpCiAJCS8qIDUgYXJnIHdvcmRzICovCiAJCXB2X21tdV9vcHMuc2V0X3BtZF9hdChtbSwgYWRkciwgcG1kcCwgcG1kKTsKIAllbHNlCi0JCVBWT1BfVkNBTEw0KHB2X21tdV9vcHMuc2V0X3BtZF9hdCwgbW0sIGFkZHIsIHBtZHAsIHBtZC5wbWQpOwotI2VuZGlmCisJCVBWT1BfVkNBTEw0KHB2X21tdV9vcHMuc2V0X3BtZF9hdCwgbW0sIGFkZHIsIHBtZHAsCisJCQkgICAgbmF0aXZlX3BtZF92YWwocG1kKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCAzNzg4ZjQ2Li43ZTE3Mjk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMjczLDM0ICsyNzMsMzQgQEAKIAl0eXBlb2YodmFyKSBweG9fbmV3X18gPSAobnZhbCk7CQkJCQlcCiAJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWFsIgkJCVwKLQkJICAgICJcblx0Y21weGNoZ2IgJTIsICJfX3BlcmNwdV9hcmcoMSkJCQlcCisJCWFzbSgiXG5cdG1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWFsIgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hnYiAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInEiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYXgiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hndyAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYXgiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGd3ICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVlYXgiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hnbCAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlZWF4IgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hnbCAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgODoJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlcmF4IgkJCVwKLQkJICAgICJcblx0Y21weGNoZ3EgJTIsICJfX3BlcmNwdV9hcmcoMSkJCQlcCisJCWFzbSgiXG5cdG1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJXJheCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ3EgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNGMyZjYzYy4uMWY0Njk1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKQEAgLTQwLDEwICs0MCw3IEBACiBERUNMQVJFX0VBUkxZX1BFUl9DUFUodTE2LCB4ODZfYmlvc19jcHVfYXBpY2lkKTsKIAogLyogU3RhdGljIHN0YXRlIGluIGhlYWQuUyB1c2VkIHRvIHNldCB1cCBhIENQVSAqLwotZXh0ZXJuIHN0cnVjdCB7Ci0Jdm9pZCAqc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3M7Ci19IHN0YWNrX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQ7IC8qIEluaXRpYWwgc3RhY2sgcG9pbnRlciBhZGRyZXNzICovCiAKIHN0cnVjdCBzbXBfb3BzIHsKIAl2b2lkICgqc21wX3ByZXBhcmVfYm9vdF9jcHUpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1OWUwOTEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X1NZU1RFTV82NF9ICi0jZGVmaW5lIF9BU01fWDg2X1NZU1RFTV82NF9ICi0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I4KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjcjg7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZxICUlY3I4LCUwIiA6ICI9ciIgKGNyOCkpOwotCXJldHVybiBjcjg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjgodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3ZxICUwLCUlY3I4IiA6OiAiciIgKHZhbCkgOiAibWVtb3J5Iik7Ci19Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotCi0jZW5kaWYgLyogX0FTTV9YODZfU1lTVEVNXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDY5ZmQ3MmEuLjY4ZDE1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTIsMTAgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAicmVhbG1vZGUvd2FrZXVwLmgiCiAjaW5jbHVkZSAic2xlZXAuaCIKQEAgLTEwMCw3ICs5OCw3IEBACiAjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KIAloZWFkZXItPnRyYW1wb2xpbmVfc2VnbWVudCA9IHNldHVwX3RyYW1wb2xpbmUoKSA+PiA0OwogI2lmZGVmIENPTkZJR19TTVAKLQlzdGFja19zdGFydC5zcCA9IHRlbXBfc3RhY2sgKyBzaXplb2YodGVtcF9zdGFjayk7CisJc3RhY2tfc3RhcnQgPSAodW5zaWduZWQgbG9uZyl0ZW1wX3N0YWNrICsgc2l6ZW9mKHRlbXBfc3RhY2spOwogCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0KIAkJCSh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaW5pdGlhbF9ncyA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CkBAIC0xNDksNiArMTQ3LDE1IEBACiAJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2UobWVtLCBtZW0gKyBXQUtFVVBfU0laRSwgIkFDUEkgV0FLRVVQIik7CiB9CiAKK2ludCBfX2luaXQgYWNwaV9jb25maWd1cmVfd2FrZXVwX21lbW9yeSh2b2lkKQoreworCWlmIChhY3BpX3JlYWxtb2RlKQorCQlzZXRfbWVtb3J5X3goYWNwaV9yZWFsbW9kZSwgV0FLRVVQX1NJWkUgPj4gUEFHRV9TSElGVCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYWNwaV9jb25maWd1cmVfd2FrZXVwX21lbW9yeSk7CisKIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9zbGVlcF9zZXR1cChjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDEyMzYwODUuLjcwMzhiOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC02NzEsNyArNjcxLDcgQEAKIAogCWF0b21pY19zZXQoJnN0b3BfbWFjaGluZV9maXJzdCwgMSk7CiAJd3JvdGVfdGV4dCA9IDA7Ci0Jc3RvcF9tYWNoaW5lKHN0b3BfbWFjaGluZV90ZXh0X3Bva2UsICh2b2lkICopJnRwcCwgTlVMTCk7CisJX19zdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSB8fCBkZWZpbmVkKEhBVkVfSlVNUF9MQUJFTCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDcyODNlOTguLmVjMmMxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtNDUsNiArNDUsNyBAQAogCXsgMHgwYSwgTFZMXzFfREFUQSwgOCB9LAkvKiAyIHdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDBjLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDBkLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDBlLCBMVkxfMV9EQVRBLCAyNCB9LAkvKiA2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIxLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgyMiwgTFZMXzMsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIzLCBMVkxfMywgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNjYsNiArNjcsNyBAQAogCXsgMHg0NSwgTFZMXzIsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0NiwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0NywgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0OCwgTFZMXzIsICAgICAgTUIoMykgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDRhLCBMVkxfMywgICAgICBNQig2KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0YiwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTg3LDYgKzg5LDcgQEAKIAl7IDB4N2MsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDdkLCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDdmLCBMVkxfMiwgICAgICA1MTIgfSwJLyogMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MCwgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4ODIsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDgzLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg4NCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggZTEyMjQ2Zi4uNmY4YzVlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC01OSw2ICs1OSw3IEBACiAKIC8qIENhbGxiYWNrIHRvIGhhbmRsZSBjb3JlIHRocmVzaG9sZCBpbnRlcnJ1cHRzICovCiBpbnQgKCpwbGF0Zm9ybV90aGVybWFsX25vdGlmeSkoX191NjQgbXNyX3ZhbCk7CitFWFBPUlRfU1lNQk9MKHBsYXRmb3JtX3RoZXJtYWxfbm90aWZ5KTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aGVybWFsX3N0YXRlLCB0aGVybWFsX3N0YXRlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggMDFjMGYzZS4uYmViYWJlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC03OTMsMTMgKzc5MywyMSBAQAogfQogCiAvKgotICogTVRSUiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIEFQJ3MKKyAqIERlbGF5ZWQgTVRSUiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIEFQJ3MKICAqLwogdm9pZCBtdHJyX2Fwc19pbml0KHZvaWQpCiB7CiAJaWYgKCF1c2VfaW50ZWwoKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBDaGVjayBpZiBzb21lb25lIGhhcyByZXF1ZXN0ZWQgdGhlIGRlbGF5IG9mIEFQIE1UUlIgaW5pdGlhbGl6YXRpb24sCisJICogYnkgZG9pbmcgc2V0X210cnJfYXBzX2RlbGF5ZWRfaW5pdCgpLCBwcmlvciB0byB0aGlzIHBvaW50LiBJZiBub3QsCisJICogdGhlbiB3ZSBhcmUgZG9uZS4KKwkgKi8KKwlpZiAoIW10cnJfYXBzX2RlbGF5ZWRfaW5pdCkKKwkJcmV0dXJuOworCiAJc2V0X210cnIofjBVLCAwLCAwLCAwKTsKIAltdHJyX2Fwc19kZWxheWVkX2luaXQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKaW5kZXggZTU2YjliZi4uZjdhMDk5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKQEAgLTY4Miw3ICs2ODIsNyBAQAogCSAqIGlmIGFuIGV2ZW50IGlzIHNoYXJlZCBhY2Nyb3NzIHRoZSBsb2dpY2FsIHRocmVhZHMKIAkgKiB0aGUgdXNlciBuZWVkcyBzcGVjaWFsIHBlcm1pc3Npb25zIHRvIGJlIGFibGUgdG8gdXNlIGl0CiAJICovCi0JaWYgKHA0X2V2ZW50X2JpbmRfbWFwW3ZdLnNoYXJlZCkgeworCWlmIChwNF9odF9hY3RpdmUoKSAmJiBwNF9ldmVudF9iaW5kX21hcFt2XS5zaGFyZWQpIHsKIAkJaWYgKHBlcmZfcGFyYW5vaWRfY3B1KCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC03MjcsNyArNzI3LDggQEAKIAkJZXZlbnQtPmh3LmNvbmZpZyA9IHA0X3NldF9odF9iaXQoZXZlbnQtPmh3LmNvbmZpZyk7CiAKIAlpZiAoZXZlbnQtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7Ci0KKwkJc3RydWN0IHA0X2V2ZW50X2JpbmQgKmJpbmQ7CisJCXVuc2lnbmVkIGludCBlc2VsOwogCQkvKgogCQkgKiBDbGVhciBiaXRzIHdlIHJlc2VydmUgdG8gYmUgbWFuYWdlZCBieSBrZXJuZWwgaXRzZWxmCiAJCSAqIGFuZCBuZXZlciBhbGxvd2VkIGZyb20gYSB1c2VyIHNwYWNlCkBAIC03NDMsNiArNzQ0LDEzIEBACiAJCSAqIGJpdHMgc2luY2Ugd2Uga2VlcCBhZGRpdGlvbmFsIGluZm8gaGVyZSAoZm9yIGNhY2hlIGV2ZW50cyBhbmQgZXRjKQogCQkgKi8KIAkJZXZlbnQtPmh3LmNvbmZpZyB8PSBldmVudC0+YXR0ci5jb25maWc7CisJCWJpbmQgPSBwNF9jb25maWdfZ2V0X2JpbmQoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwkJaWYgKCFiaW5kKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQllc2VsID0gUDRfT1BDT0RFX0VTRUwoYmluZC0+b3Bjb2RlKTsKKwkJZXZlbnQtPmh3LmNvbmZpZyB8PSBwNF9jb25maWdfcGFja19jY2NyKFA0X0NDQ1JfRVNFTChlc2VsKSk7CiAJfQogCiAJcmMgPSB4ODZfc2V0dXBfcGVyZmN0cihldmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggNjQxMDEzMy4uYTZiNmZjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMTQ5LDEzICsxNDksMTMgQEAKIAl1bnNpZ25lZCB1c2VkID0gMDsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvOwogCWludCBncmFwaCA9IDA7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKIAl1bnNpZ25lZCBsb25nIGJwOwogCiAJaWYgKCF0YXNrKQogCQl0YXNrID0gY3VycmVudDsKIAogCWlmICghc3RhY2spIHsKLQkJdW5zaWduZWQgbG9uZyBkdW1teTsKIAkJc3RhY2sgPSAmZHVtbXk7CiAJCWlmICh0YXNrICYmIHRhc2sgIT0gY3VycmVudCkKIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCBmYzI5M2RjLi43NjdkNmM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTg1LDYgKzg1LDggQEAKICAqLwogX19IRUFECiBFTlRSWShzdGFydHVwXzMyKQorCW1vdmwgcGEoc3RhY2tfc3RhcnQpLCVlY3gKKwkKIAkvKiB0ZXN0IEtFRVBfU0VHTUVOVFMgZmxhZyB0byBzZWUgaWYgdGhlIGJvb3Rsb2FkZXIgaXMgYXNraW5nCiAJCXVzIHRvIG5vdCByZWxvYWQgc2VnbWVudHMgKi8KIAl0ZXN0YiAkKDE8PDYpLCBCUF9sb2FkZmxhZ3MoJWVzaSkKQEAgLTk5LDcgKzEwMSw5IEBACiAJbW92bCAlZWF4LCVlcwogCW1vdmwgJWVheCwlZnMKIAltb3ZsICVlYXgsJWdzCisJbW92bCAlZWF4LCVzcwogMjoKKwlsZWFsIC1fX1BBR0VfT0ZGU0VUKCVlY3gpLCVlc3AKIAogLyoKICAqIENsZWFyIEJTUyBmaXJzdCBzbyB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuLi4KQEAgLTE0NSw4ICsxNDksNiBAQAogICogX2Jya19lbmQgaXMgc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBmaXJzdCAic2FmZSIgbG9jYXRpb24uCiAgKiBNYXBwaW5ncyBhcmUgY3JlYXRlZCBib3RoIGF0IHZpcnR1YWwgYWRkcmVzcyAwIChpZGVudGl0eSBtYXBwaW5nKQogICogYW5kIFBBR0VfT0ZGU0VUIGZvciB1cCB0byBfZW5kLgotICoKLSAqIE5vdGUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IHlldCBzZXQgdXAhCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCkBAIC0yODIsNiArMjg0LDkgQEAKIAltb3ZsICVlYXgsJWVzCiAJbW92bCAlZWF4LCVmcwogCW1vdmwgJWVheCwlZ3MKKwltb3ZsIHBhKHN0YWNrX3N0YXJ0KSwlZWN4CisJbW92bCAlZWF4LCVzcworCWxlYWwgLV9fUEFHRV9PRkZTRVQoJWVjeCksJWVzcAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIGRlZmF1bHRfZW50cnk6CiAKQEAgLTM0Nyw4ICszNTIsOCBAQAogCW1vdmwgJWVheCwlY3IwCQkvKiAuLmFuZCBzZXQgcGFnaW5nIChQRykgYml0ICovCiAJbGptcCAkX19CT09UX0NTLCQxZgkvKiBDbGVhciBwcmVmZXRjaCBhbmQgbm9ybWFsaXplICVlaXAgKi8KIDE6Ci0JLyogU2V0IHVwIHRoZSBzdGFjayBwb2ludGVyICovCi0JbHNzIHN0YWNrX3N0YXJ0LCVlc3AKKwkvKiBTaGlmdCB0aGUgc3RhY2sgcG9pbnRlciB0byBhIHZpcnR1YWwgYWRkcmVzcyAqLworCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlc3AKIAogLyoKICAqIEluaXRpYWxpemUgZWZsYWdzLiAgU29tZSBCSU9TJ3MgbGVhdmUgYml0cyBsaWtlIE5UIHNldC4gIFRoaXMgd291bGQKQEAgLTM2MCw5ICszNjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWNtcGIgJDAsIHJlYWR5Ci0JanogIDFmCQkJCS8qIEluaXRpYWwgQ1BVIGNsZWFucyBCU1MgKi8KLQlqbXAgY2hlY2tDUFV0eXBlCi0xOgorCWpueiBjaGVja0NQVXR5cGUKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC00NzAsMTQgKzQ3Myw3IEBACiAKIAljbGQJCQkjIGdjYzIgd2FudHMgdGhlIGRpcmVjdGlvbiBmbGFnIGNsZWFyZWQgYXQgYWxsIHRpbWVzCiAJcHVzaGwgJDAJCSMgZmFrZSByZXR1cm4gYWRkcmVzcyBmb3IgdW53aW5kZXIKLSNpZmRlZiBDT05GSUdfU01QCi0JbW92YiByZWFkeSwgJWNsCiAJbW92YiAkMSwgcmVhZHkKLQljbXBiICQwLCVjbAkJIyB0aGUgZmlyc3QgQ1BVIGNhbGxzIHN0YXJ0X2tlcm5lbAotCWplICAgMWYKLQltb3ZsIChzdGFja19zdGFydCksICVlc3AKLTE6Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCWptcCAqKGluaXRpYWxfY29kZSkKIAogLyoKQEAgLTY3MCwxNSArNjY2LDE1IEBACiAjZW5kaWYKIAogLmRhdGEKKy5iYWxpZ24gNAogRU5UUlkoc3RhY2tfc3RhcnQpCiAJLmxvbmcgaW5pdF90aHJlYWRfdW5pb24rVEhSRUFEX1NJWkUKLQkubG9uZyBfX0JPT1RfRFMKLQotcmVhZHk6CS5ieXRlIDAKIAogZWFybHlfcmVjdXJzaW9uX2ZsYWc6CiAJLmxvbmcgMAogCityZWFkeToJLmJ5dGUgMAorCiBpbnRfbXNnOgogCS5hc2NpeiAiVW5rbm93biBpbnRlcnJ1cHQgb3IgZmF1bHQgYXQ6ICVwICVwICVwXG4iCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGQ4Mjg2ZWQuLmU3NjRmYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgpAQCAtNTA1LDcgKzUwNiw3IEBACiAjZGVmaW5lIE1XQUlUX0VDWF9FWFRFTkRFRF9JTkZPCQkweDAxCiAjZGVmaW5lIE1XQUlUX0VEWF9DMQkJCTB4ZjAKIAotc3RhdGljIGludCBfX2NwdWluaXQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK2ludCBfX2NwdWluaXQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1MzIgZWF4LCBlYngsIGVjeCwgZWR4OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA3NjNkZjc3Li4wMzI3M2I2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTYzOCw3ICs2MzgsNyBAQAogCSAqIHRhcmdldCBwcm9jZXNzb3Igc3RhdGUuCiAJICovCiAJc3RhcnR1cF9pcGlfaG9vayhwaHlzX2FwaWNpZCwgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X3NlY29uZGFyeSwKLQkJCSAodW5zaWduZWQgbG9uZylzdGFja19zdGFydC5zcCk7CisJCQkgc3RhY2tfc3RhcnQpOwogCiAJLyoKIAkgKiBSdW4gU1RBUlRVUCBJUEkgbG9vcC4KQEAgLTc4NSw3ICs3ODUsNyBAQAogI2VuZGlmCiAJZWFybHlfZ2R0X2Rlc2NyLmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShjcHUpOwogCWluaXRpYWxfY29kZSA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0X3NlY29uZGFyeTsKLQlzdGFja19zdGFydC5zcCA9ICh2b2lkICopIGNfaWRsZS5pZGxlLT50aHJlYWQuc3A7CisJc3RhY2tfc3RhcnQgID0gY19pZGxlLmlkbGUtPnRocmVhZC5zcDsKIAogCS8qIHN0YXJ0X2lwIGhhZCBiZXR0ZXIgYmUgcGFnZS1hbGlnbmVkISAqLwogCXN0YXJ0X2lwID0gc2V0dXBfdHJhbXBvbGluZSgpOwpAQCAtMTQwMiw4ICsxNDAyLDkgQEAKIAl1bnNpZ25lZCBpbnQgaGlnaGVzdF9zdWJjc3RhdGUgPSAwOwogCWludCBpOwogCXZvaWQgKm13YWl0X3B0cjsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pOwogCi0JaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX01XQUlUKSkKKwlpZiAoIShjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpKQogCQlyZXR1cm47CiAJaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX0NMRkxTSCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDhiODMwY2EuLmQzNDNiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtMjU2LDcgKzI1Niw2IEBACiAJCQkJICAgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJcGdwcm90X3QgZm9yYmlkZGVuID0gX19wZ3Byb3QoMCk7Ci0JcGdwcm90X3QgcmVxdWlyZWQgPSBfX3BncHJvdCgwKTsKIAogCS8qCiAJICogVGhlIEJJT1MgYXJlYSBiZXR3ZWVuIDY0MGsgYW5kIDFNYiBuZWVkcyB0byBiZSBleGVjdXRhYmxlIGZvcgpAQCAtMjgyLDEyICsyODEsNiBAQAogCWlmICh3aXRoaW4ocGZuLCBfX3BhKCh1bnNpZ25lZCBsb25nKV9fc3RhcnRfcm9kYXRhKSA+PiBQQUdFX1NISUZULAogCQkgICBfX3BhKCh1bnNpZ25lZCBsb25nKV9fZW5kX3JvZGF0YSkgPj4gUEFHRV9TSElGVCkpCiAJCXBncHJvdF92YWwoZm9yYmlkZGVuKSB8PSBfUEFHRV9SVzsKLQkvKgotCSAqIC5kYXRhIGFuZCAuYnNzIHNob3VsZCBhbHdheXMgYmUgd3JpdGFibGUuCi0JICovCi0JaWYgKHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfc2RhdGEsICh1bnNpZ25lZCBsb25nKV9lZGF0YSkgfHwKLQkgICAgd2l0aGluKGFkZHJlc3MsICh1bnNpZ25lZCBsb25nKV9fYnNzX3N0YXJ0LCAodW5zaWduZWQgbG9uZylfX2Jzc19zdG9wKSkKLQkJcGdwcm90X3ZhbChyZXF1aXJlZCkgfD0gX1BBR0VfUlc7CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1JPREFUQSkKIAkvKgpAQCAtMzI3LDcgKzMyMCw2IEBACiAjZW5kaWYKIAogCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpICYgfnBncHJvdF92YWwoZm9yYmlkZGVuKSk7Ci0JcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBwZ3Byb3RfdmFsKHJlcXVpcmVkKSk7CiAKIAlyZXR1cm4gcHJvdDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wMm0uYyBiL2FyY2gveDg2L3hlbi9wMm0uYwppbmRleCBkZGM4MWEwLi5mZDEyZDdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vcDJtLmMKKysrIGIvYXJjaC94ODYveGVuL3AybS5jCkBAIC0yNDEsMjEgKzI0MSwxNSBAQAogCQkgKiBBcyBsb25nIGFzIHRoZSBtZm5fbGlzdCBoYXMgZW5vdWdoIGVudHJpZXMgdG8gY29tcGxldGVseQogCQkgKiBmaWxsIGEgcDJtIHBhZ2UsIHBvaW50aW5nIGludG8gdGhlIGFycmF5IGlzIG9rLiBCdXQgaWYKIAkJICogbm90IHRoZSBlbnRyaWVzIGJleW9uZCB0aGUgbGFzdCBwZm4gd2lsbCBiZSB1bmRlZmluZWQuCi0JCSAqIEFuZCBndWVzc2luZyB0aGF0IHRoZSAnd2hhdC1ldmVyLXRoZXJlLWlzJyBkb2VzIG5vdCB0YWtlIGl0Ci0JCSAqIHRvbyBraW5kbHkgd2hlbiBjaGFuZ2luZyBpdCB0byBpbnZhbGlkIG1hcmtlcnMsIGEgbmV3IHBhZ2UKLQkJICogaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCBhbmQgZmlsbGVkIHdpdGggdGhlIHZhbGlkIHBhcnQuCiAJCSAqLwogCQlpZiAodW5saWtlbHkocGZuICsgUDJNX1BFUl9QQUdFID4gbWF4X3BmbikpIHsKIAkJCXVuc2lnbmVkIGxvbmcgcDJtaWR4OwotCQkJdW5zaWduZWQgbG9uZyAqcDJtID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7Ci0JCQlwMm1faW5pdChwMm0pOwogCi0JCQlmb3IgKHAybWlkeCA9IDA7IHBmbiArIHAybWlkeCA8IG1heF9wZm47IHAybWlkeCsrKSB7Ci0JCQkJcDJtW3AybWlkeF0gPSBtZm5fbGlzdFtwZm4gKyBwMm1pZHhdOwotCQkJfQotCQkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSBwMm07Ci0JCX0gZWxzZQotCQkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSAmbWZuX2xpc3RbcGZuXTsKKwkJCXAybWlkeCA9IG1heF9wZm4gJSBQMk1fUEVSX1BBR0U7CisJCQlmb3IgKCA7IHAybWlkeCA8IFAyTV9QRVJfUEFHRTsgcDJtaWR4KyspCisJCQkJbWZuX2xpc3RbcGZuICsgcDJtaWR4XSA9IElOVkFMSURfUDJNX0VOVFJZOworCQl9CisJCXAybV90b3BbdG9waWR4XVttaWRpZHhdID0gJm1mbl9saXN0W3Bmbl07CiAJfQogCiAJbTJwX292ZXJyaWRlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggYjVhN2Y5Mi4uYThhNjZhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTE3OSw4ICsxNzksMTMgQEAKIAllODIwLm5yX21hcCA9IDA7CiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CiAJZm9yIChpID0gMDsgaSA8IG1lbW1hcC5ucl9lbnRyaWVzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKKwkJLyogR3VhcmQgYWdhaW5zdCBub24tcGFnZSBhbGlnbmVkIEU4MjAgZW50cmllcy4gKi8KKwkJaWYgKG1hcFtpXS50eXBlID09IEU4MjBfUkFNKQorCQkJbWFwW2ldLnNpemUgLT0gKG1hcFtpXS5zaXplICsgbWFwW2ldLmFkZHIpICUgUEFHRV9TSVpFOworCisJCWVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CiAJCWlmIChtYXBbaV0udHlwZSA9PSBFODIwX1JBTSAmJiBlbmQgPiBtZW1fZW5kKSB7CiAJCQkvKiBSQU0gb2ZmIHRoZSBlbmQgLSBtYXkgYmUgcGFydGlhbGx5IGluY2x1ZGVkICovCiAJCQl1NjQgZGVsdGEgPSBtaW4obWFwW2ldLnNpemUsIGVuZCAtIG1lbV9lbmQpOwpAQCAtMzUwLDYgKzM1NSw3IEBACiAJYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2sgPSAxOwogI2VuZGlmCiAJcG1faWRsZSA9IGRlZmF1bHRfaWRsZTsKKwlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9IQUxUOwogCiAJZmlkZGxlX3Zkc28oKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCAzMjg4MjYzLi5iOGQ5NmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0yNjAsNiArMjYwLDcgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDIpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBBSENJICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDA0KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwNiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDIzMjMpLCBib2FyZF9haGNpIH0sIC8qIERIODl4eENDIEFIQ0kgKi8KIAogCS8qIEpNaWNyb24gMzYwLzEvMy81LzYsIG1hdGNoIGNsYXNzIHRvIGF2b2lkIElERSBmdW5jdGlvbiAqLwogCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtMzc5LDYgKzM4MCw4IEBACiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDYxNDUpLCBib2FyZF9haGNpX212IH0sCS8qIDYxNDUgKi8KIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjEyMSksIGJvYXJkX2FoY2lfbXYgfSwJLyogNjEyMSAqLwogCXsgUENJX0RFVklDRSgweDFiNGIsIDB4OTEyMyksCisJICAuY2xhc3MgPSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQVRBX0FIQ0ksCisJICAuY2xhc3NfbWFzayA9IDB4ZmZmZmZmLAogCSAgLmRyaXZlcl9kYXRhID0gYm9hcmRfYWhjaV95ZXNfZmJzIH0sCQkJLyogODhzZTkxMjggKi8KIAogCS8qIFByb21pc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IGEzMWZlOTYuLmQ0ZTUyZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNDEzOCw2ICs0MTM4LDcgQEAKIAkgKiBkZXZpY2UgYW5kIGNvbnRyb2xsZXIgYXJlIFNBVEEuCiAJICovCiAJeyAiUElPTkVFUiBEVkQtUlcgIERWUlREMDgiLAkiMS4wMCIsCUFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAorCXsgIlBJT05FRVIgRFZELVJXICBEVlItMjEyRCIsCSIxLjI4IiwgQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCiAKIAkvKiBFbmQgTWFya2VyICovCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCA1ZGVmYzc0Li42MDBmNjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTEwOTksOSArMTA5OSw5IEBACiAJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gc2Rldi0+cmVxdWVzdF9xdWV1ZTsKIAkJdm9pZCAqYnVmOwogCi0JCS8qIHNldCB0aGUgbWluIGFsaWdubWVudCBhbmQgcGFkZGluZyAqLwotCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKLQkJCQkJICAgICAgIEFUQV9ETUFfUEFEX1NaIC0gMSk7CisJCXNkZXYtPnNlY3Rvcl9zaXplID0gQVRBX1NFQ1RfU0laRTsKKworCQkvKiBzZXQgRE1BIHBhZGRpbmcgKi8KIAkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfcGFkKHNkZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJCSBBVEFfRE1BX1BBRF9TWiAtIDEpOwogCkBAIC0xMTE1LDEzICsxMTE1LDI1IEBACiAKIAkJYmxrX3F1ZXVlX2RtYV9kcmFpbihxLCBhdGFwaV9kcmFpbl9uZWVkZWQsIGJ1ZiwgQVRBUElfTUFYX0RSQUlOKTsKIAl9IGVsc2UgewotCQkvKiBBVEEgZGV2aWNlcyBtdXN0IGJlIHNlY3RvciBhbGlnbmVkICovCiAJCXNkZXYtPnNlY3Rvcl9zaXplID0gYXRhX2lkX2xvZ2ljYWxfc2VjdG9yX3NpemUoZGV2LT5pZCk7Ci0JCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAotCQkJCQkgICAgICAgc2Rldi0+c2VjdG9yX3NpemUgLSAxKTsKIAkJc2Rldi0+bWFuYWdlX3N0YXJ0X3N0b3AgPSAxOwogCX0KIAorCS8qCisJICogYXRhX3Bpb19zZWN0b3JzKCkgZXhwZWN0cyBidWZmZXIgZm9yIGVhY2ggc2VjdG9yIHRvIG5vdCBjcm9zcworCSAqIHBhZ2UgYm91bmRhcnkuICBFbmZvcmNlIGl0IGJ5IHJlcXVpcmluZyBidWZmZXJzIHRvIGJlIHNlY3RvcgorCSAqIGFsaWduZWQsIHdoaWNoIHdvcmtzIGlmZiBzZWN0b3Jfc2l6ZSBpcyBub3QgbGFyZ2VyIHRoYW4KKwkgKiBQQUdFX1NJWkUuICBBVEFQSSBkZXZpY2VzIGFsc28gbmVlZCB0aGUgYWxpZ25tZW50IGFzCisJICogSURFTlRJRllfUEFDS0VUIGlzIGV4ZWN1dGVkIGFzIEFUQV9QUk9UX1BJTy4KKwkgKi8KKwlpZiAoc2Rldi0+c2VjdG9yX3NpemUgPiBQQUdFX1NJWkUpCisJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9XQVJOSU5HLAorCQkJInNlY3Rvcl9zaXplPSV1ID4gUEFHRV9TSVpFLCBQSU8gbWF5IG1hbGZ1bmN0aW9uXG4iLAorCQkJc2Rldi0+c2VjdG9yX3NpemUpOworCisJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCisJCQkJICAgICAgIHNkZXYtPnNlY3Rvcl9zaXplIC0gMSk7CisKIAlpZiAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19BTikKIAkJc2V0X2JpdChTREVWX0VWVF9NRURJQV9DSEFOR0UsIHNkZXYtPnN1cHBvcnRlZF9ldmVudHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwppbmRleCBkN2U1N2RiLi41MzhlYzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzNjYiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuOSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4xMCIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9tb2RlOwpAQCAtMTYwLDggKzE2MCw4IEBACiAKIAl3aGlsZSAobGlzdFtpXSAhPSBOVUxMKSB7CiAJCWlmICghc3RyY21wKGxpc3RbaV0sIG1vZGVsX251bSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAotCQkJCW1vZGVzdHIsIGxpc3RbaV0pOworCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCisJCQkJICAgbW9kZXN0ciwgbGlzdFtpXSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCBlZmRkMThiLi40YzViNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzN3giCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMTgiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMjIiCiAKIHN0cnVjdCBocHRfY2xvY2sgewogCXU4CXhmZXJfc3BlZWQ7CkBAIC0yMjksOCArMjI5LDggQEAKIAogCXdoaWxlIChsaXN0W2ldICE9IE5VTEwpIHsKIAkJaWYgKCFzdHJjbXAobGlzdFtpXSwgbW9kZWxfbnVtKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCi0JCQkJbW9kZXN0ciwgbGlzdFtpXSk7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKKwkJCQkgICBtb2Rlc3RyLCBsaXN0W2ldKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWkrKzsKQEAgLTY0Miw3ICs2NDIsNiBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDM3NF9mbjFfcG9ydF9vcHMgPSB7CiAJLmluaGVyaXRzCT0gJmhwdDM3Ml9wb3J0X29wcywKIAkuY2FibGVfZGV0ZWN0CT0gaHB0Mzc0X2ZuMV9jYWJsZV9kZXRlY3QsCi0JLnByZXJlc2V0CT0gaHB0Mzd4X3ByZV9yZXNldCwKIH07CiAKIC8qKgpAQCAtODAzLDcgKzgwMiw3IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzMDJfcG9ydF9vcHMKIAl9OwotCS8qIEhQVDM3NCAtIFVETUExMDAsIGZ1bmN0aW9uIDEgdXNlcyBkaWZmZXJlbnQgcHJlcmVzZXQgbWV0aG9kICovCisJLyogSFBUMzc0IC0gVURNQTEwMCwgZnVuY3Rpb24gMSB1c2VzIGRpZmZlcmVudCBjYWJsZV9kZXRlY3QgbWV0aG9kICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0X2ZuMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gQVRBX1BJTzQsCkBAIC04MzgsNyArODM3LDggQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjYpIHsKKwlzd2l0Y2ggKGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjY6CiAJCS8qIE1heSBiZSBhIGxhdGVyIGNoaXAgaW4gZGlzZ3Vpc2UuIENoZWNrICovCiAJCS8qIE9sZGVyIGNoaXBzIGFyZSBpbiB0aGUgSFBUMzY2IGRyaXZlci4gSWdub3JlIHRoZW0gKi8KIAkJaWYgKHJldiA8IDMpCkBAIC04NjMsNTQgKzg2Myw1MCBAQAogCQkJY2hpcF90YWJsZSA9ICZocHQzNzI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzN3g6IFVua25vd24gSFBUMzY2IHN1YnR5cGUsICIKKwkJCXByX2VycihEUlZfTkFNRSAiOiBVbmtub3duIEhQVDM2NiBzdWJ0eXBlLCAiCiAJCQkgICAgICAgInBsZWFzZSByZXBvcnQgKCVkKS5cbiIsIHJldik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzI6Ci0JCQkvKiAzNzJOIGlmIHJldiA+PSAyICovCi0JCQlpZiAocmV2ID49IDIpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlwcGlbMF0gPSAmaW5mb19ocHQzNzI7Ci0JCQljaGlwX3RhYmxlID0gJmhwdDM3MmE7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzMDI6Ci0JCQkvKiAzMDJOIGlmIHJldiA+IDEgKi8KLQkJCWlmIChyZXYgPiAxKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJcHBpWzBdID0gJmluZm9faHB0MzAyOwotCQkJLyogQ2hlY2sgdGhpcyAqLwotCQkJY2hpcF90YWJsZSA9ICZocHQzMDI7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzE6Ci0JCQlpZiAocmV2ID4gMSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKLQkJCWNoaXBfdGFibGUgPSAmaHB0MzcxOwotCQkJLyoKLQkJCSAqIFNpbmdsZSBjaGFubmVsIGRldmljZSwgbWFzdGVyIGlzIG5vdCBwcmVzZW50Ci0JCQkgKiBidXQgdGhlIEJJT1MgKG9yIHVzIGZvciBub24geDg2KSBtdXN0IG1hcmsgaXQKLQkJCSAqIGFic2VudAotCQkJICovCi0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZtY3IxKTsKLQkJCW1jcjEgJj0gfjB4MDQ7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCBtY3IxKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NDoKLQkJCWNoaXBfdGFibGUgPSAmaHB0Mzc0OwotCQkJaWYgKCEoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkKLQkJCQkqcHBpID0gJmluZm9faHB0Mzc0X2ZuMDsKLQkJCWVsc2UKLQkJCQkqcHBpID0gJmluZm9faHB0Mzc0X2ZuMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgInBhdGFfaHB0Mzd4OiBQQ0kgdGFibGUgaXMgYm9ndXMsIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCi0JCQkgICAgICAgZGV2LT5kZXZpY2UpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyOgorCQkvKiAzNzJOIGlmIHJldiA+PSAyICovCisJCWlmIChyZXYgPj0gMikKKwkJCXJldHVybiAtRU5PREVWOworCQlwcGlbMF0gPSAmaW5mb19ocHQzNzI7CisJCWNoaXBfdGFibGUgPSAmaHB0MzcyYTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzMDI6CisJCS8qIDMwMk4gaWYgcmV2ID4gMSAqLworCQlpZiAocmV2ID4gMSkKKwkJCXJldHVybiAtRU5PREVWOworCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7CisJCS8qIENoZWNrIHRoaXMgKi8KKwkJY2hpcF90YWJsZSA9ICZocHQzMDI7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxOgorCQlpZiAocmV2ID4gMSkKKwkJCXJldHVybiAtRU5PREVWOworCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7CisJCWNoaXBfdGFibGUgPSAmaHB0MzcxOworCQkvKgorCQkgKiBTaW5nbGUgY2hhbm5lbCBkZXZpY2UsIG1hc3RlciBpcyBub3QgcHJlc2VudCBidXQgdGhlIEJJT1MKKwkJICogKG9yIHVzIGZvciBub24geDg2KSBtdXN0IG1hcmsgaXQgYWJzZW50CisJCSAqLworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZtY3IxKTsKKwkJbWNyMSAmPSB+MHgwNDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSk7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzc0OgorCQljaGlwX3RhYmxlID0gJmhwdDM3NDsKKwkJaWYgKCEoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkKKwkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4wOworCQllbHNlCisJCQkqcHBpID0gJmluZm9faHB0Mzc0X2ZuMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKERSVl9OQU1FICI6IFBDSSB0YWJsZSBpcyBib2d1cywgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwKKwkJICAgICAgIGRldi0+ZGV2aWNlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCS8qIE9rIHNvIHRoaXMgaXMgYSBjaGlwIHdlIHN1cHBvcnQgKi8KIApAQCAtOTU3LDggKzk1Myw3IEBACiAJCXU4IHNyOwogCQl1MzIgdG90YWwgPSAwOwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJwYXRhX2hwdDM3eDogQklPUyBoYXMgbm90IHNldCB0aW1pbmcgY2xvY2tzLlxuIik7CisJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogQklPUyBoYXMgbm90IHNldCB0aW1pbmcgY2xvY2tzLlxuIik7CiAKIAkJLyogVGhpcyBpcyB0aGUgcHJvY2VzcyB0aGUgSFBUMzcxIEJJT1MgaXMgcmVwb3J0ZWQgdG8gdXNlICovCiAJCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewpAQCAtMTAxNCw3ICsxMDA5LDcgQEAKIAkJCQkJICAgICAgIChmX2hpZ2ggPDwgMTYpIHwgZl9sb3cgfCAweDEwMCk7CiAJCX0KIAkJaWYgKGFkanVzdCA9PSA4KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0Mzd4OiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CisJCQlwcl9lcnIoRFJWX05BTUUgIjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAkJaWYgKGRwbGwgPT0gMykKQEAgLTEwMjIsOCArMTAxNyw4IEBACiAJCWVsc2UKIAkJCXByaXZhdGVfZGF0YSA9ICh2b2lkICopaHB0Mzd4X3RpbWluZ3NfNTA7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgJWRNSHogRFBMTC5cbiIsCi0JCSAgICAgICBNSHpbY2xvY2tfc2xvdF0sIE1IeltkcGxsXSk7CisJCXByX2luZm8oRFJWX05BTUUgIjogYnVzIGNsb2NrICVkTUh6LCB1c2luZyAlZE1IeiBEUExMLlxuIiwKKwkJCU1IeltjbG9ja19zbG90XSwgTUh6W2RwbGxdKTsKIAl9IGVsc2UgewogCQlwcml2YXRlX2RhdGEgPSAodm9pZCAqKWNoaXBfdGFibGUtPmNsb2Nrc1tjbG9ja19zbG90XTsKIAkJLyoKQEAgLTEwMzYsOCArMTAzMSw5IEBACiAJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzBfMzM7CiAJCWlmIChjbG9ja19zbG90IDwgMiAmJiBwcGlbMF0gPT0gJmluZm9faHB0MzcwYSkKIAkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MGFfMzM7Ci0JCXByaW50ayhLRVJOX0lORk8gInBhdGFfaHB0Mzd4OiAlcyB1c2luZyAlZE1IeiBidXMgY2xvY2suXG4iLAotCQkgICAgICAgY2hpcF90YWJsZS0+bmFtZSwgTUh6W2Nsb2NrX3Nsb3RdKTsKKworCQlwcl9pbmZvKERSVl9OQU1FICI6ICVzIHVzaW5nICVkTUh6IGJ1cyBjbG9jay5cbiIsCisJCQljaGlwX3RhYmxlLT5uYW1lLCBNSHpbY2xvY2tfc2xvdF0pOwogCX0KIAogCS8qIE5vdyBraWNrIG9mZiBBVEEgc2V0IHVwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IGQyMjM5YmIuLmVjYTY4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0M3gybiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMy4xMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMy4xNCIKIAogZW51bSB7CiAJSFBUX1BDSV9GQVNUCT0JKDEgPDwgMzEpLApAQCAtNDE4LDcgKzQxOCw3IEBACiAJCXUxNiBzcjsKIAkJdTMyIHRvdGFsID0gMDsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwYXRhX2hwdDN4Mm46IEJJT1MgY2xvY2sgZGF0YSBub3Qgc2V0LlxuIik7CisJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogQklPUyBjbG9jayBkYXRhIG5vdCBzZXQuXG4iKTsKIAogCQkvKiBUaGlzIGlzIHRoZSBwcm9jZXNzIHRoZSBIUFQzNzEgQklPUyBpcyByZXBvcnRlZCB0byB1c2UgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CkBAIC01MjgsOCArNTI4LDcgQEAKIAkJcHBpWzBdID0gJmluZm9faHB0MzcybjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAicGF0YV9ocHQzeDJuOiBQQ0kgdGFibGUgaXMgYm9ndXMgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwKKwkJcHJfZXJyKERSVl9OQU1FICI6IFBDSSB0YWJsZSBpcyBib2d1cywgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwKIAkJICAgICAgIGRldi0+ZGV2aWNlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNTc5LDEyICs1NzgsMTEgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NUMsIChmX2hpZ2ggPDwgMTYpIHwgZl9sb3cpOwogCX0KIAlpZiAoYWRqdXN0ID09IDgpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDN4Mm46IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKKwkJcHJfZXJyKERSVl9OQU1FICI6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgNjZNSHogRFBMTC5cbiIsCi0JICAgICAgIHBjaV9taHopOworCXByX2luZm8oRFJWX05BTUUgIjogYnVzIGNsb2NrICVkTUh6LCB1c2luZyA2Nk1IeiBEUExMLlxuIiwgcGNpX21oeik7CiAKIAkvKgogCSAqIFNldCBvdXIgcHJpdmF0ZSBkYXRhIHVwLiBXZSBvbmx5IG5lZWQgYSBmZXcgZmxhZ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKaW5kZXggOGNjNTM2ZS4uZDdkODAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG1wYzUyeHhfYXRhX3BvcnRfb3BzID0gewotCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuc2ZmX2Rldl9zZWxlY3QJCT0gbXBjNTJ4eF9hdGFfZGV2X3NlbGVjdCwKIAkuc2V0X3Bpb21vZGUJCT0gbXBjNTJ4eF9hdGFfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IG1wYzUyeHhfYXRhX3NldF9kbWFtb2RlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcxMDUuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKaW5kZXggYmNhOWNiOC4uNDg3YTU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcxMDUuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZHQ3NzEwNV9wcml2X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJnID09IE5VTEwpCiAJCXJldHVybiAwOwotCXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmUFJJVihkZXYpLT5zdGF0cywKKwlyZXR1cm4gY29weV90b191c2VyKGFyZywgJnN0YXRzLAogCQkgICAgc2l6ZW9mKHN0cnVjdCBpZHQ3NzEwNV9zdGF0cykpID8gLUVGQVVMVCA6IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDY1NjQ5M2EuLjQyNjE1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNDA3LDEyICs0MDcsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyogTWF5YmUgdGhlIHBhcmVudCBpcyBub3cgYWJsZSB0byBzdXNwZW5kLiAqLwogCWlmIChwYXJlbnQgJiYgIXBhcmVudC0+cG93ZXIuaWdub3JlX2NoaWxkcmVuICYmICFkZXYtPnBvd2VyLmlycV9zYWZlKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+cG93ZXIubG9jayk7CiAKLQkJcG1fcmVxdWVzdF9pZGxlKHBhcmVudCk7CisJCXNwaW5fbG9jaygmcGFyZW50LT5wb3dlci5sb2NrKTsKKwkJcnBtX2lkbGUocGFyZW50LCBSUE1fQVNZTkMpOworCQlzcGluX3VubG9jaygmcGFyZW50LT5wb3dlci5sb2NrKTsKIAotCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlzcGluX2xvY2soJmRldi0+cG93ZXIubG9jayk7CiAJfQogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKaW5kZXggOTQ5ZWQwOS4uYTEyNmU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCkBAIC00NywzMyArNDcsMTYgQEAKICNkZWZpbmUgVVNCX1JFUV9ERlVfRE5MT0FECTEKICNkZWZpbmUgQlVMS19TSVpFCQk0MDk2CiAKLXN0cnVjdCBhdGgza19kYXRhIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQl1OCAqZndfZGF0YTsKLQl1MzIgZndfc2l6ZTsKLQl1MzIgZndfc2VudDsKLX07Ci0KLXN0YXRpYyBpbnQgYXRoM2tfbG9hZF9maXJtd2FyZShzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSwKLQkJCQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZSwKLQkJCQlpbnQgY291bnQpCitzdGF0aWMgaW50IGF0aDNrX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSkKIHsKIAl1OCAqc2VuZF9idWY7CiAJaW50IGVyciwgcGlwZSwgbGVuLCBzaXplLCBzZW50ID0gMDsKKwlpbnQgY291bnQgPSBmaXJtd2FyZS0+c2l6ZTsKIAotCUJUX0RCRygiYXRoM2sgJXAgdWRldiAlcCIsIGRhdGEsIGRhdGEtPnVkZXYpOworCUJUX0RCRygidWRldiAlcCIsIHVkZXYpOwogCi0JcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkYXRhLT51ZGV2LCAwKTsKLQotCWlmICgodXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVkZXYsIHBpcGUsCi0JCQkJVVNCX1JFUV9ERlVfRE5MT0FELAotCQkJCVVTQl9UWVBFX1ZFTkRPUiwgMCwgMCwKLQkJCQlmaXJtd2FyZSwgMjAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSkgPCAwKSB7Ci0JCUJUX0VSUigiQ2FuJ3QgY2hhbmdlIHRvIGxvYWRpbmcgY29uZmlndXJhdGlvbiBlcnIiKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0Jc2VudCArPSAyMDsKLQljb3VudCAtPSAyMDsKKwlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApOwogCiAJc2VuZF9idWYgPSBrbWFsbG9jKEJVTEtfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzZW5kX2J1ZikgewpAQCAtODEsMTIgKzY0LDIzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEsIDIwKTsKKwlpZiAoKGVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLAorCQkJCVVTQl9SRVFfREZVX0ROTE9BRCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IsIDAsIDAsCisJCQkJc2VuZF9idWYsIDIwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkgeworCQlCVF9FUlIoIkNhbid0IGNoYW5nZSB0byBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZXJyIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNlbnQgKz0gMjA7CisJY291bnQgLT0gMjA7CisKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCVUxLX1NJWkUpOwotCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVkZXYsIDB4MDIpOwotCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlICsgc2VudCwgc2l6ZSk7CisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMik7CisJCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEgKyBzZW50LCBzaXplKTsKIAotCQllcnIgPSB1c2JfYnVsa19tc2coZGF0YS0+dWRldiwgcGlwZSwgc2VuZF9idWYsIHNpemUsCisJCWVyciA9IHVzYl9idWxrX21zZyh1ZGV2LCBwaXBlLCBzZW5kX2J1Ziwgc2l6ZSwKIAkJCQkJJmxlbiwgMzAwMCk7CiAKIAkJaWYgKGVyciB8fCAobGVuICE9IHNpemUpKSB7CkBAIC0xMTIsNTcgKzEwNiwyOCBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCBhdGgza19kYXRhICpkYXRhOwotCWludCBzaXplOwogCiAJQlRfREJHKCJpbnRmICVwIGlkICVwIiwgaW50ZiwgaWQpOwogCiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGF0YS0+dWRldiA9IHVkZXY7Ci0KIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJhdGgzay0xLmZ3IiwgJnVkZXYtPmRldikgPCAwKSB7Ci0JCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzaXplID0gbWF4X3QodWludCwgZmlybXdhcmUtPnNpemUsIDQwOTYpOwotCWRhdGEtPmZ3X2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YS0+ZndfZGF0YSkgeworCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKHVkZXYsIGZpcm13YXJlKSkgewogCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbWNweShkYXRhLT5md19kYXRhLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwotCWRhdGEtPmZ3X3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKLQlkYXRhLT5md19zZW50ID0gMDsKLQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7Ci0JaWYgKGF0aDNrX2xvYWRfZmlybXdhcmUoZGF0YSwgZGF0YS0+ZndfZGF0YSwgZGF0YS0+Zndfc2l6ZSkpIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQkJa2ZyZWUoZGF0YS0+ZndfZGF0YSk7Ci0JCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYXRoM2tfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KIAlCVF9EQkcoImF0aDNrX2Rpc2Nvbm5lY3QgaW50ZiAlcCIsIGludGYpOwotCi0Ja2ZyZWUoZGF0YS0+ZndfZGF0YSk7Ci0Ja2ZyZWUoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGgza19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKaW5kZXggZmNkODY3ZC4uZDhiMWI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwpAQCAtNTAsNyArNTAsNyBAQAogCiBjb25maWcgQUdQX0FNRAogCXRyaXN0YXRlICJBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBR1AgJiYgKFg4Nl8zMiB8fCBBTFBIQSkKKwlkZXBlbmRzIG9uIEFHUCAmJiBYODZfMzIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCiAJICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwppbmRleCBiMWI0MzYyLi40NTY4MWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwpAQCAtNDEsMjIgKzQxLDggQEAKIAlpZiAocGFnZV9tYXAtPnJlYWwgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLSNpZm5kZWYgQ09ORklHX1g4NgotCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLQlwYWdlX21hcC0+cmVtYXBwZWQgPSBpb3JlbWFwX25vY2FjaGUodmlydF90b19waHlzKHBhZ2VfbWFwLT5yZWFsKSwKLQkJCQkJICAgIFBBR0VfU0laRSk7Ci0JaWYgKHBhZ2VfbWFwLT5yZW1hcHBlZCA9PSBOVUxMKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfbWFwLT5yZWFsKTsKLQkJcGFnZV9tYXAtPnJlYWwgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0jZWxzZQogCXNldF9tZW1vcnlfdWMoKHVuc2lnbmVkIGxvbmcpcGFnZV9tYXAtPnJlYWwsIDEpOwogCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IHBhZ2VfbWFwLT5yZWFsOwotI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKIAkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgcGFnZV9tYXAtPnJlbWFwcGVkK2kpOwpAQCAtNjgsMTIgKzU0LDcgQEAKIAogc3RhdGljIHZvaWQgYW1kX2ZyZWVfcGFnZV9tYXAoc3RydWN0IGFtZF9wYWdlX21hcCAqcGFnZV9tYXApCiB7Ci0jaWZuZGVmIENPTkZJR19YODYKLQlpb3VubWFwKHBhZ2VfbWFwLT5yZW1hcHBlZCk7Ci0JQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0jZWxzZQogCXNldF9tZW1vcnlfd2IoKHVuc2lnbmVkIGxvbmcpcGFnZV9tYXAtPnJlYWwsIDEpOwotI2VuZGlmCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX21hcC0+cmVhbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDg1N2RmMTAuLmIwYTBkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtNzc0LDIwICs3NzQsMTQgQEAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSW50ZWwgJXMgQ2hpcHNldFxuIiwgaW50ZWxfYWdwX2NoaXBzZXRzW2ldLm5hbWUpOwogCiAJLyoKLQkqIElmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHByb3Blcmx5IHNldHVwLCB0aGUgZm9sbG93aW5nIHdpbGwgY2F0Y2gKLQkqIHRoZSBwcm9ibGVtIGFuZCBzaG91bGQgc3RvcCB0aGUgc3lzdGVtIGZyb20gY3Jhc2hpbmcuCi0JKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCi0JKi8KLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOwotCQlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgogCSogVGhlIGZvbGxvd2luZyBmaXhlcyB0aGUgY2FzZSB3aGVyZSB0aGUgQklPUyBoYXMgImZvcmdvdHRlbiIgdG8KIAkqIHByb3ZpZGUgYW4gYWRkcmVzcyByYW5nZSBmb3IgdGhlIEdBUlQuCiAJKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCisJKiBUaGlzIGhhcHBlbnMgYmVmb3JlIHBjaV9lbmFibGVfZGV2aWNlKCkgaW50ZW50aW9uYWxseTsKKwkqIGNhbGxpbmcgcGNpX2VuYWJsZV9kZXZpY2UoKSBiZWZvcmUgYXNzaWduaW5nIHRoZSByZXNvdXJjZQorCSogd2lsbCByZXN1bHQgaW4gdGhlIEdBUlQgYmVpbmcgZGlzYWJsZWQgb24gbWFjaGluZXMgd2l0aCBzdWNoCisJKiBCSU9TcyAodGhlIEdBUlQgZW5kcyB1cCB3aXRoIGEgQkFSIHN0YXJ0aW5nIGF0IDAsIHdoaWNoCisJKiBjb25mbGljdHMgYSBsb3Qgb2Ygb3RoZXIgZGV2aWNlcykuCiAJKi8KIAlyID0gJnBkZXYtPnJlc291cmNlWzBdOwogCWlmICghci0+c3RhcnQgJiYgci0+ZW5kKSB7CkBAIC03OTgsNiArNzkyLDE3IEBACiAJCX0KIAl9CiAKKwkvKgorCSogSWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gcHJvcGVybHkgc2V0dXAsIHRoZSBmb2xsb3dpbmcgd2lsbCBjYXRjaAorCSogdGhlIHByb2JsZW0gYW5kIHNob3VsZCBzdG9wIHRoZSBzeXN0ZW0gZnJvbSBjcmFzaGluZy4KKwkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKKwkqLworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgUENJIGRldmljZVxuIik7CisJCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qIEZpbGwgaW4gdGhlIG1vZGUgcmVnaXN0ZXIgKi8KIAlpZiAoY2FwX3B0cikgewogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCmluZGV4IDgyNmFiMDkuLmZhYjNkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwpAQCAtNjgsNiArNjgsNyBAQAogCXBoeXNfYWRkcl90IGdtYV9idXNfYWRkcjsKIAl1MzIgUEdFVEJMX3NhdmU7CiAJdTMyIF9faW9tZW0gKmd0dDsJCS8qIEk5MTVHICovCisJYm9vbCBjbGVhcl9mYWtlX2FncDsgLyogb24gZmlyc3QgYWNjZXNzIHZpYSBhZ3AsIGZpbGwgd2l0aCBzY3JhdGNoICovCiAJaW50IG51bV9kY2FjaGVfZW50cmllczsKIAl1bmlvbiB7CiAJCXZvaWQgX19pb21lbSAqaTl4eF9mbHVzaF9wYWdlOwpAQCAtODY5LDIxICs4NzAsMTIgQEAKIAogc3RhdGljIGludCBpbnRlbF9mYWtlX2FncF9jb25maWd1cmUodm9pZCkKIHsKLQlpbnQgaTsKLQogCWlmICghaW50ZWxfZW5hYmxlX2d0dCgpKQogCSAgICByZXR1cm4gLUVJTzsKIAorCWludGVsX3ByaXZhdGUuY2xlYXJfZmFrZV9hZ3AgPSB0cnVlOwogCWFncF9icmlkZ2UtPmdhcnRfYnVzX2FkZHIgPSBpbnRlbF9wcml2YXRlLmdtYV9idXNfYWRkcjsKIAotCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X3RvdGFsX2VudHJpZXM7IGkrKykgewotCQlpbnRlbF9wcml2YXRlLmRyaXZlci0+d3JpdGVfZW50cnkoaW50ZWxfcHJpdmF0ZS5zY3JhdGNoX3BhZ2VfZG1hLAotCQkJCQkJICBpLCAwKTsKLQl9Ci0JcmVhZGwoaW50ZWxfcHJpdmF0ZS5ndHQraS0xKTsJLyogUENJIFBvc3RpbmcuICovCi0KLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLQogCXJldHVybiAwOwogfQogCkBAIC05NDUsNiArOTM3LDEzIEBACiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKKwlpZiAoaW50ZWxfcHJpdmF0ZS5jbGVhcl9mYWtlX2FncCkgeworCQlpbnQgc3RhcnQgPSBpbnRlbF9wcml2YXRlLmJhc2Uuc3RvbGVuX3NpemUgLyBQQUdFX1NJWkU7CisJCWludCBlbmQgPSBpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X21hcHBhYmxlX2VudHJpZXM7CisJCWludGVsX2d0dF9jbGVhcl9yYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpOworCQlpbnRlbF9wcml2YXRlLmNsZWFyX2Zha2VfYWdwID0gZmFsc2U7CisJfQorCiAJaWYgKElOVEVMX0dUVF9HRU4gPT0gMSAmJiB0eXBlID09IEFHUF9EQ0FDSEVfTUVNT1JZKQogCQlyZXR1cm4gaTgxMF9pbnNlcnRfZGNhY2hlX2VudHJpZXMobWVtLCBwZ19zdGFydCwgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jIGIvZHJpdmVycy9jaGFyL2JmaW5fanRhZ19jb21tLmMKaW5kZXggZTM5N2RmMy4uMTY0MDI0NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCisrKyBiL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCkBAIC0xODMsMTYgKzE4MywxNiBAQAogfQogCiAjaWZuZGVmIENPTkZJR19CRklOX0pUQUdfQ09NTV9DT05TT0xFCi0jIGRlZmluZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkKLSMgZGVmaW5lIHJlbGVhc2VfY29uc29sZV9zZW0oKQorIyBkZWZpbmUgY29uc29sZV9sb2NrKCkKKyMgZGVmaW5lIGNvbnNvbGVfdW5sb2NrKCkKICNlbmRpZgogc3RhdGljIGludAogYmZpbl9qY193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlpbnQgaTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaSA9IGJmaW5famNfY2lyY193cml0ZShidWYsIGNvdW50KTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl3YWtlX3VwX3Byb2Nlc3MoYmZpbl9qY19rdGhyZWFkKTsKIAlyZXR1cm4gaTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDFmNDZmMWMuLjM2ZTBmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtMzY0LDEyICszNjQsMTQgQEAKIAkJICAgIHRwbV9wcm90ZWN0ZWRfb3JkaW5hbF9kdXJhdGlvbltvcmRpbmFsICYKIAkJCQkJCSAgIFRQTV9QUk9URUNURURfT1JESU5BTF9NQVNLXTsKIAotCWlmIChkdXJhdGlvbl9pZHggIT0gVFBNX1VOREVGSU5FRCkKKwlpZiAoZHVyYXRpb25faWR4ICE9IFRQTV9VTkRFRklORUQpIHsKIAkJZHVyYXRpb24gPSBjaGlwLT52ZW5kb3IuZHVyYXRpb25bZHVyYXRpb25faWR4XTsKLQlpZiAoZHVyYXRpb24gPD0gMCkKKwkJLyogaWYgZHVyYXRpb24gaXMgMCwgaXQncyBiZWNhdXNlIGNoaXAtPnZlbmRvci5kdXJhdGlvbiB3YXNuJ3QgKi8KKwkJLyogZmlsbGVkIHlldCwgc28gd2Ugc2V0IHRoZSBsb3dlc3QgdGltZW91dCBqdXN0IHRvIGdpdmUgZW5vdWdoICovCisJCS8qIHRpbWUgZm9yIHRwbV9nZXRfdGltZW91dHMoKSB0byBzdWNjZWVkICovCisJCXJldHVybiAoZHVyYXRpb24gPD0gMCA/IEhaIDogZHVyYXRpb24pOworCX0gZWxzZQogCQlyZXR1cm4gMiAqIDYwICogSFo7Ci0JZWxzZQotCQlyZXR1cm4gZHVyYXRpb247CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwppbmRleCBjMTdhMzA1Li5kZDIxZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpAQCAtNDkzLDkgKzQ5Myw2IEBACiAJCSAiMS4yIFRQTSAoZGV2aWNlLWlkIDB4JVgsIHJldi1pZCAlZClcbiIsCiAJCSB2ZW5kb3IgPj4gMTYsIGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9SSUQoMCkpKTsKIAotCWlmIChpc19pdHBtKHRvX3BucF9kZXYoZGV2KSkpCi0JCWl0cG0gPSAxOwotCiAJaWYgKGl0cG0pCiAJCWRldl9pbmZvKGRldiwgIkludGVsIGlUUE0gd29ya2Fyb3VuZCBlbmFibGVkXG4iKTsKIApAQCAtNjM3LDYgKzYzNCw5IEBACiAJZWxzZQogCQlpbnRlcnJ1cHRzID0gMDsKIAorCWlmIChpc19pdHBtKHBucF9kZXYpKQorCQlpdHBtID0gMTsKKwogCXJldHVybiB0cG1fdGlzX2luaXQoJnBucF9kZXYtPmRldiwgc3RhcnQsIGxlbiwgaXJxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCBjZmIwZjUyLi5lZmZlNzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtMjAyLDE3ICsyMDIsMjEgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIlBNLVRpbWVyIGhhZCBpbmNvbnNpc3RlbnQgcmVzdWx0czoiCiAJCQkgICAgICAgIiAweCUjbGx4LCAweCUjbGx4IC0gYWJvcnRpbmcuXG4iLAogCQkJICAgICAgIHZhbHVlMSwgdmFsdWUyKTsKKwkJCXBtdG1yX2lvcG9ydCA9IDA7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoaSA9PSBBQ1BJX1BNX1JFQURfQ0hFQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJQTS1UaW1lciBmYWlsZWQgY29uc2lzdGVuY3kgY2hlY2sgIgogCQkJICAgICAgICIgKDB4JSNsbHgpIC0gYWJvcnRpbmcuXG4iLCB2YWx1ZTEpOworCQkJcG10bXJfaW9wb3J0ID0gMDsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCi0JaWYgKHZlcmlmeV9wbXRtcl9yYXRlKCkgIT0gMCkKKwlpZiAodmVyaWZ5X3BtdG1yX3JhdGUoKSAhPSAwKXsKKwkJcG10bXJfaW9wb3J0ID0gMDsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9hY3BpX3BtLAogCQkJCQkJUE1UTVJfVElDS1NfUEVSX1NFQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RjYl9jbGtzcmMuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jCmluZGV4IDAxYjg4NmUuLjc5YzQ3ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jCkBAIC0xOTYsOSArMTk2LDkgQEAKIAljbGtldnQuY2xrZXZ0Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJmNsa2V2dC5jbGtldnQpICsgMTsKIAljbGtldnQuY2xrZXZ0LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCi0Jc2V0dXBfaXJxKGlycSwgJnRjX2lycWFjdGlvbik7Ci0KIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmNsa2V2dC5jbGtldnQpOworCisJc2V0dXBfaXJxKGlycSwgJnRjX2lycWFjdGlvbik7CiB9CiAKICNlbHNlIC8qICFDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggZDgxY2M3NC4uNTRkNzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIHZvaWQgbG53X2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gKHN0cnVjdCBsbndfZ3BpbyAqKWdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGJhc2UsIGdwaW87CiAJdm9pZCBfX2lvbWVtICpnZWRyOwogCXUzMiBnZWRyX3Y7CkBAIC0yMDYsNyArMjA2LDEyIEBACiAJCS8qIGNsZWFyIHRoZSBlZGdlIGRldGVjdCBzdGF0dXMgYml0ICovCiAJCXdyaXRlbChnZWRyX3YsIGdlZHIpOwogCX0KLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQorCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7CisJZWxzZQorCQlkZXZfd2FybihsbnctPmNoaXAuZGV2LCAibWlzc2luZyBFT0kgaGFuZGxlciBmb3IgaXJxICVkXG4iLCBpcnEpOworCiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxud19ncGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCBiZWE5NjZmLi4wOTAyZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMTAwLDcgKzEwMCwxMCBAQAogY29uZmlnIERSTV9JOTE1CiAJdHJpc3RhdGUgImk5MTUgZHJpdmVyIgogCWRlcGVuZHMgb24gQUdQX0lOVEVMCisJIyB3ZSBuZWVkIHNobWZzIGZvciB0aGUgc3dhcHBhYmxlIGJhY2tpbmcgc3RvcmUsIGFuZCBpbiBwYXJ0aWN1bGFyCisJIyB0aGUgc2htZW1fcmVhZHBhZ2UoKSB3aGljaCBkZXBlbmRzIHVwb24gdG1wZnMKIAlzZWxlY3QgU0hNRU0KKwlzZWxlY3QgVE1QRlMKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCAyYmFhNjcwLi42NTRmYWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtMjY3NCwzICsyNjc0LDIzIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQorCit2b2lkIGRybV9tb2RlX2NvbmZpZ19yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQlpZiAoY3J0Yy0+ZnVuY3MtPnJlc2V0KQorCQkJY3J0Yy0+ZnVuY3MtPnJlc2V0KGNydGMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpCisJCWlmIChlbmNvZGVyLT5mdW5jcy0+cmVzZXQpCisJCQllbmNvZGVyLT5mdW5jcy0+cmVzZXQoZW5jb2Rlcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpCisJCWlmIChjb25uZWN0b3ItPmZ1bmNzLT5yZXNldCkKKwkJCWNvbm5lY3Rvci0+ZnVuY3MtPnJlc2V0KGNvbm5lY3Rvcik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NvbmZpZ19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggOTUyYjNkNC4uOTIzNjk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtMzQzLDEzICszNDMsMTIgQEAKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJYm9vbCByZXQgPSB0cnVlOwogCi0JYWRqdXN0ZWRfbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwotCiAJY3J0Yy0+ZW5hYmxlZCA9IGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0Yyk7Ci0KIAlpZiAoIWNydGMtPmVuYWJsZWQpCiAJCXJldHVybiB0cnVlOwogCisJYWRqdXN0ZWRfbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOworCiAJc2F2ZWRfaHdtb2RlID0gY3J0Yy0+aHdtb2RlOwogCXNhdmVkX21vZGUgPSBjcnRjLT5tb2RlOwogCXNhdmVkX3ggPSBjcnRjLT54OwpAQCAtNDM3LDEwICs0MzYsOSBAQAogCSAqLwogCWRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFudHMoY3J0Yyk7CiAKLQkvKiBYWFggZnJlZSBhZGp1c3RlZG1vZGUgKi8KLQlkcm1fbW9kZV9kZXN0cm95KGRldiwgYWRqdXN0ZWRfbW9kZSk7CiAJLyogRklYTUU6IGFkZCBzdWJwaXhlbCBvcmRlciAqLwogZG9uZToKKwlkcm1fbW9kZV9kZXN0cm95KGRldiwgYWRqdXN0ZWRfbW9kZSk7CiAJaWYgKCFyZXQpIHsKIAkJY3J0Yy0+aHdtb2RlID0gc2F2ZWRfaHdtb2RlOwogCQljcnRjLT5tb2RlID0gc2F2ZWRfbW9kZTsKQEAgLTQ5NywxNCArNDk1LDE3IEBACiAKIAljcnRjX2Z1bmNzID0gc2V0LT5jcnRjLT5oZWxwZXJfcHJpdmF0ZTsKIAorCWlmICghc2V0LT5tb2RlKQorCQlzZXQtPmZiID0gTlVMTDsKKwogCWlmIChzZXQtPmZiKSB7CiAJCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBbRkI6JWRdICNjb25uZWN0b3JzPSVkICh4IHkpICglaSAlaSlcbiIsCiAJCQkJc2V0LT5jcnRjLT5iYXNlLmlkLCBzZXQtPmZiLT5iYXNlLmlkLAogCQkJCShpbnQpc2V0LT5udW1fY29ubmVjdG9ycywgc2V0LT54LCBzZXQtPnkpOwogCX0gZWxzZSB7Ci0JCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBbTk9GQl0gI2Nvbm5lY3RvcnM9JWQgKHggeSkgKCVpICVpKVxuIiwKLQkJCQlzZXQtPmNydGMtPmJhc2UuaWQsIChpbnQpc2V0LT5udW1fY29ubmVjdG9ycywKLQkJCQlzZXQtPngsIHNldC0+eSk7CisJCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBbTk9GQl1cbiIsIHNldC0+Y3J0Yy0+YmFzZS5pZCk7CisJCXNldC0+bW9kZSA9IE5VTEw7CisJCXNldC0+bnVtX2Nvbm5lY3RvcnMgPSAwOwogCX0KIAogCWRldiA9IHNldC0+Y3J0Yy0+ZGV2OwpAQCAtNjQ5LDggKzY1MCw4IEBACiAJCW1vZGVfY2hhbmdlZCA9IHRydWU7CiAKIAlpZiAobW9kZV9jaGFuZ2VkKSB7Ci0JCXNldC0+Y3J0Yy0+ZW5hYmxlZCA9IChzZXQtPm1vZGUgIT0gTlVMTCk7Ci0JCWlmIChzZXQtPm1vZGUgIT0gTlVMTCkgeworCQlzZXQtPmNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKHNldC0+Y3J0Yyk7CisJCWlmIChzZXQtPmNydGMtPmVuYWJsZWQpIHsKIAkJCURSTV9ERUJVR19LTVMoImF0dGVtcHRpbmcgdG8gc2V0IG1vZGUgZnJvbSIKIAkJCQkJIiB1c2Vyc3BhY2VcbiIpOwogCQkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzZXQtPm1vZGUpOwpAQCAtNjY1LDYgKzY2NiwxMiBAQAogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBmYWlsOwogCQkJfQorCQkJRFJNX0RFQlVHX0tNUygiU2V0dGluZyBjb25uZWN0b3IgRFBNUyBzdGF0ZSB0byBvblxuIik7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7CisJCQkJRFJNX0RFQlVHX0tNUygiXHRbQ09OTkVDVE9SOiVkOiVzXSBzZXQgRFBNUyBvblxuIiwgc2V0LT5jb25uZWN0b3JzW2ldLT5iYXNlLmlkLAorCQkJCQkgICAgICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKHNldC0+Y29ubmVjdG9yc1tpXSkpOworCQkJCXNldC0+Y29ubmVjdG9yc1tpXS0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT047CisJCQl9CiAJCX0KIAkJZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZGV2KTsKIAl9IGVsc2UgaWYgKGZiX2NoYW5nZWQpIHsKQEAgLTY4MSwxMiArNjg4LDYgQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KLQlEUk1fREVCVUdfS01TKCJTZXR0aW5nIGNvbm5lY3RvciBEUE1TIHN0YXRlIHRvIG9uXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7Ci0JCURSTV9ERUJVR19LTVMoIlx0W0NPTk5FQ1RPUjolZDolc10gc2V0IERQTVMgb25cbiIsIHNldC0+Y29ubmVjdG9yc1tpXS0+YmFzZS5pZCwKLQkJCSAgICAgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoc2V0LT5jb25uZWN0b3JzW2ldKSk7Ci0JCXNldC0+Y29ubmVjdG9yc1tpXS0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT047Ci0JfQogCiAJa2ZyZWUoc2F2ZV9jb25uZWN0b3JzKTsKIAlrZnJlZShzYXZlX2VuY29kZXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IDAwNTRlOTUuLjNkYWRmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKICAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGluIHRoZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KICAqIHVwZGF0ZSB0aGUgdmJsYW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4KICAqLwotdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK2Jvb2wgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CiAJdTMyIHZibGNvdW50OwogCXM2NCBkaWZmX25zOwpAQCAtMTI1OCw3ICsxMjU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJaWYgKCFkZXYtPm51bV9jcnRjcykKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBOZWVkIHRpbWVzdGFtcCBsb2NrIHRvIHByZXZlbnQgY29uY3VycmVudCBleGVjdXRpb24gd2l0aAogCSAqIHZibGFuayBlbmFibGUvZGlzYWJsZSwgYXMgdGhpcyB3b3VsZCBjYXVzZSBpbmNvbnNpc3RlbnQKQEAgLTEyNjksNyArMTI2OSw3IEBACiAJLyogVmJsYW5rIGlycSBoYW5kbGluZyBkaXNhYmxlZC4gTm90aGluZyB0byBkby4gKi8KIAlpZiAoIWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10pIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxhbmtfdGltZV9sb2NrLCBpcnFmbGFncyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIEZldGNoIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wIGZvciB0aGlzIHZibGFuayBpbnRlcnZhbCBmcm9tCkBAIC0xMzExLDUgKzEzMTEsNiBAQAogCWRybV9oYW5kbGVfdmJsYW5rX2V2ZW50cyhkZXYsIGNydGMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxhbmtfdGltZV9sb2NrLCBpcnFmbGFncyk7CisJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJsYW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDg0NGYzYzkuLjE3YmQ3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKLQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSBMUF9SSU5HKGRldl9wcml2KTsKKwlpbnQgcmV0OwogCiAJbWFzdGVyX3ByaXYtPnNhcmVhID0gZHJtX2dldHNhcmVhKGRldik7CiAJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYSkgewpAQCAtMTYzLDMzICsxNjMsMjIgQEAKIAl9CiAKIAlpZiAoaW5pdC0+cmluZ19zaXplICE9IDApIHsKLQkJaWYgKHJpbmctPm9iaiAhPSBOVUxMKSB7CisJCWlmIChMUF9SSU5HKGRldl9wcml2KS0+b2JqICE9IE5VTEwpIHsKIAkJCWk5MTVfZG1hX2NsZWFudXAoZGV2KTsKIAkJCURSTV9FUlJPUigiQ2xpZW50IHRyaWVkIHRvIGluaXRpYWxpemUgcmluZ2J1ZmZlciBpbiAiCiAJCQkJICAiR0VNIG1vZGVcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyaW5nLT5zaXplID0gaW5pdC0+cmluZ19zaXplOwotCi0JCXJpbmctPm1hcC5vZmZzZXQgPSBpbml0LT5yaW5nX3N0YXJ0OwotCQlyaW5nLT5tYXAuc2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKLQkJcmluZy0+bWFwLnR5cGUgPSAwOwotCQlyaW5nLT5tYXAuZmxhZ3MgPSAwOwotCQlyaW5nLT5tYXAubXRyciA9IDA7Ci0KLQkJZHJtX2NvcmVfaW9yZW1hcF93YygmcmluZy0+bWFwLCBkZXYpOwotCi0JCWlmIChyaW5nLT5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJcmV0ID0gaW50ZWxfcmVuZGVyX3JpbmdfaW5pdF9kcmkoZGV2LAorCQkJCQkJIGluaXQtPnJpbmdfc3RhcnQsCisJCQkJCQkgaW5pdC0+cmluZ19zaXplKTsKKwkJaWYgKHJldCkgewogCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKLQkJCQkgICIgcmluZyBidWZmZXJcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCi0JcmluZy0+dmlydHVhbF9zdGFydCA9IHJpbmctPm1hcC5oYW5kbGU7Ci0KIAlkZXZfcHJpdi0+Y3BwID0gaW5pdC0+Y3BwOwogCWRldl9wcml2LT5iYWNrX29mZnNldCA9IGluaXQtPmJhY2tfb2Zmc2V0OwogCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CkBAIC0xMjI2LDkgKzEyMTUsMTUgQEAKIAlpZiAocmV0KQogCQlEUk1fSU5GTygiZmFpbGVkIHRvIGZpbmQgVkJJT1MgdGFibGVzXG4iKTsKIAotCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLworCS8qIElmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiB3ZSBuZWVkIHRvIGFyYml0cmF0ZSBhY2Nlc3MKKwkgKiB0byB0aGUgY29tbW9uIFZHQSByZXNvdXJjZXMuCisJICoKKwkgKiBJZiB3ZSBhcmUgYSBzZWNvbmRhcnkgZGlzcGxheSBjb250cm9sbGVyICghUENJX0RJU1BMQVlfQ0xBU1NfVkdBKSwKKwkgKiB0aGVuIHdlIGRvIG5vdCB0YWtlIHBhcnQgaW4gVkdBIGFyYml0cmF0aW9uIGFuZCB0aGUKKwkgKiB2Z2FfY2xpZW50X3JlZ2lzdGVyKCkgZmFpbHMgd2l0aCAtRU5PREVWLgorCSAqLwogCXJldCA9IHZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBkZXYsIE5VTEwsIGk5MTVfdmdhX3NldF9kZWNvZGUpOwotCWlmIChyZXQpCisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKIAkJZ290byBjbGVhbnVwX3JpbmdidWZmZXI7CiAKIAlpbnRlbF9yZWdpc3Rlcl9kc21faGFuZGxlcigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNzJmZWEyYi4uY2ZiNTZkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC02MCw3ICs2MCw3IEBACiAKICNkZWZpbmUgSU5URUxfVkdBX0RFVklDRShpZCwgaW5mbykgewkJXAogCS5jbGFzcyA9IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LAlcCi0JLmNsYXNzX21hc2sgPSAweGZmZmYwMCwJCQlcCisJLmNsYXNzX21hc2sgPSAweGZmMDAwMCwJCQlcCiAJLnZlbmRvciA9IDB4ODA4NiwJCQlcCiAJLmRldmljZSA9IGlkLAkJCQlcCiAJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCQlcCkBAIC0zNTQsNiArMzU0LDcgQEAKIAkJZXJyb3IgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwkJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAJCWRybV9pcnFfaW5zdGFsbChkZXYpOwogCiAJCS8qIFJlc3VtZSB0aGUgbW9kZXNldCBmb3IgZXZlcnkgYWN0aXZhdGVkIENSVEMgKi8KQEAgLTU0Miw2ICs1NDMsNyBAQAogCiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCQlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsKIAkJZHJtX2lycV9pbnN0YWxsKGRldik7CiAJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAl9CkBAIC01NjYsNiArNTY4LDE0IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogaTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CisJLyogT25seSBiaW5kIHRvIGZ1bmN0aW9uIDAgb2YgdGhlIGRldmljZS4gRWFybHkgZ2VuZXJhdGlvbnMKKwkgKiB1c2VkIGZ1bmN0aW9uIDEgYXMgYSBwbGFjZWhvbGRlciBmb3IgbXVsdGktaGVhZC4gVGhpcyBjYXVzZXMKKwkgKiB1cyBjb25mdXNpb24gaW5zdGVhZCwgZXNwZWNpYWxseSBvbiB0aGUgc3lzdGVtcyB3aGVyZSBib3RoCisJICogZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUgUENJLUlEIQorCSAqLworCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIGRybV9nZXRfcGNpX2RldihwZGV2LCBlbnQsICZkcml2ZXIpOwogfQogCkBAIC03NTIsNiArNzYyLDkgQEAKIAkJZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyAmPSB+RFJJVkVSX01PREVTRVQ7CiAjZW5kaWYKIAorCWlmICghKGRyaXZlci5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkpCisJCWRyaXZlci5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IE5VTEw7CisKIAlyZXR1cm4gZHJtX2luaXQoJmRyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDU5NjlmNDYuLmEwMTQ5YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNTQzLDggKzU0MywxMSBAQAogCQkvKiogTGlzdCBvZiBhbGwgb2JqZWN0cyBpbiBndHRfc3BhY2UuIFVzZWQgdG8gcmVzdG9yZSBndHQKIAkJICogbWFwcGluZ3Mgb24gcmVzdW1lICovCiAJCXN0cnVjdCBsaXN0X2hlYWQgZ3R0X2xpc3Q7Ci0JCS8qKiBFbmQgb2YgbWFwcGFibGUgcGFydCBvZiBHVFQgKi8KKworCQkvKiogVXNhYmxlIHBvcnRpb24gb2YgdGhlIEdUVCBmb3IgR0VNICovCisJCXVuc2lnbmVkIGxvbmcgZ3R0X3N0YXJ0OwogCQl1bnNpZ25lZCBsb25nIGd0dF9tYXBwYWJsZV9lbmQ7CisJCXVuc2lnbmVkIGxvbmcgZ3R0X2VuZDsKIAogCQlzdHJ1Y3QgaW9fbWFwcGluZyAqZ3R0X21hcHBpbmc7CiAJCWludCBndHRfbXRycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDNkZmM4NDguLmNmNGY3NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTQwLDEyICsxNDAsMTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBzdGFydCwKLQkJICAgIGVuZCAtIHN0YXJ0KTsKKwlkcm1fbW1faW5pdCgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAorCWRldl9wcml2LT5tbS5ndHRfc3RhcnQgPSBzdGFydDsKKwlkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA9IG1hcHBhYmxlX2VuZDsKKwlkZXZfcHJpdi0+bW0uZ3R0X2VuZCA9IGVuZDsKIAlkZXZfcHJpdi0+bW0uZ3R0X3RvdGFsID0gZW5kIC0gc3RhcnQ7CiAJZGV2X3ByaXYtPm1tLm1hcHBhYmxlX2d0dF90b3RhbCA9IG1pbihlbmQsIG1hcHBhYmxlX2VuZCkgLSBzdGFydDsKLQlkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA9IG1hcHBhYmxlX2VuZDsKKworCS8qIFRha2Ugb3ZlciB0aGlzIHBvcnRpb24gb2YgdGhlIEdUVCAqLworCWludGVsX2d0dF9jbGVhcl9yYW5nZShzdGFydCAvIFBBR0VfU0laRSwgKGVuZC1zdGFydCkgLyBQQUdFX1NJWkUpOwogfQogCiBpbnQKQEAgLTE4NTcsNyArMTg2MSw3IEBACiAKIAlzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKIAotCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpbmctPnN5bmNfc2Vxbm8pOyBpKyspCiAJCWlmIChzZXFubyA+PSByaW5nLT5zeW5jX3NlcW5vW2ldKQogCQkJcmluZy0+c3luY19zZXFub1tpXSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCBkY2ZkZjQxLi5kMmY0NDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC0xMTc1LDcgKzExNzUsNyBAQAogCQlnb3RvIGVycjsKIAogCXNlcW5vID0gaTkxNV9nZW1fbmV4dF9yZXF1ZXN0X3NlcW5vKGRldiwgcmluZyk7Ci0JZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTLTE7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpbmctPnN5bmNfc2Vxbm8pOyBpKyspIHsKIAkJaWYgKHNlcW5vIDwgcmluZy0+c3luY19zZXFub1tpXSkgewogCQkJLyogVGhlIEdQVSBjYW4gbm90IGhhbmRsZSBpdHMgc2VtYXBob3JlIHZhbHVlIHdyYXBwaW5nLAogCQkJICogc28gZXZlcnkgYmlsbGlvbiBvciBzbyBleGVjYnVmZmVycywgd2UgbmVlZCB0byBzdGFsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRleCA3MDQzM2FlLi5iMGFiZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMzQsNiArMzQsMTAgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKKwkvKiBGaXJzdCBmaWxsIG91ciBwb3J0aW9uIG9mIHRoZSBHVFQgd2l0aCBzY3JhdGNoIHBhZ2VzICovCisJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKGRldl9wcml2LT5tbS5ndHRfc3RhcnQgLyBQQUdFX1NJWkUsCisJCQkgICAgICAoZGV2X3ByaXYtPm1tLmd0dF9lbmQgLSBkZXZfcHJpdi0+bW0uZ3R0X3N0YXJ0KSAvIFBBR0VfU0laRSk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5tbS5ndHRfbGlzdCwgZ3R0X2xpc3QpIHsKIAkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggYjhlNTA5YS4uOTdmOTQ2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMjc0LDI0ICsyNzQsMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKK2ludCBpOTE1X2dldF92YmxhbmtfdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlLAogCQkJICAgICAgaW50ICptYXhfZXJyb3IsCiAJCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCiAJCQkgICAgICB1bnNpZ25lZCBmbGFncykKIHsKLQlzdHJ1Y3QgZHJtX2NydGMgKmRybWNydGM7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKLQlpZiAoY3J0YyA8IDAgfHwgY3J0YyA+PSBkZXYtPm51bV9jcnRjcykgewotCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CisJaWYgKHBpcGUgPCAwIHx8IHBpcGUgPj0gZGV2X3ByaXYtPm51bV9waXBlKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBwaXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogR2V0IGRybV9jcnRjIHRvIHRpbWVzdGFtcDogKi8KLQlkcm1jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2LCBjcnRjKTsKKwljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2LCBwaXBlKTsKKwlpZiAoY3J0YyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBwaXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjcnRjLT5lbmFibGVkKSB7CisJCURSTV9ERUJVR19LTVMoImNydGMgJWQgaXMgZGlzYWJsZWRcbiIsIHBpcGUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCS8qIEhlbHBlciByb3V0aW5lIGluIERSTSBjb3JlIGRvZXMgYWxsIHRoZSB3b3JrOiAqLwotCXJldHVybiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKGRldiwgY3J0YywgbWF4X2Vycm9yLAotCQkJCQkJICAgICB2YmxhbmtfdGltZSwgZmxhZ3MsIGRybWNydGMpOworCXJldHVybiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKGRldiwgcGlwZSwgbWF4X2Vycm9yLAorCQkJCQkJICAgICB2YmxhbmtfdGltZSwgZmxhZ3MsCisJCQkJCQkgICAgIGNydGMpOwogfQogCiAvKgpAQCAtMzQ4LDggKzM1OSwxMiBAQAogCQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIHNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcpOworCXUzMiBzZXFubzsKIAorCWlmIChyaW5nLT5vYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZyk7CiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZShkZXYsIHNlcW5vKTsKIAogCXJpbmctPmlycV9zZXFubyA9IHNlcW5vOwpAQCAtODMxLDYgKzg0Niw4IEBACiAJCWkrKzsKIAllcnJvci0+cGlubmVkX2JvX2NvdW50ID0gaSAtIGVycm9yLT5hY3RpdmVfYm9fY291bnQ7CiAKKwllcnJvci0+YWN0aXZlX2JvID0gTlVMTDsKKwllcnJvci0+cGlubmVkX2JvID0gTlVMTDsKIAlpZiAoaSkgewogCQllcnJvci0+YWN0aXZlX2JvID0ga21hbGxvYyhzaXplb2YoKmVycm9yLT5hY3RpdmVfYm8pKmksCiAJCQkJCSAgIEdGUF9BVE9NSUMpOwpAQCAtMTE3OSwxOCArMTE5NiwxOCBAQAogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXBfcGxhbmUoZGV2LCAxKTsKIAkJfQogCi0JCWlmIChwaXBlYV9zdGF0cyAmIHZibGFua19zdGF0dXMpIHsKKwkJaWYgKHBpcGVhX3N0YXRzICYgdmJsYW5rX3N0YXR1cyAmJgorCQkgICAgZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKSkgewogCQkJdmJsYW5rKys7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOwogCQkJaWYgKCFkZXZfcHJpdi0+ZmxpcF9wZW5kaW5nX2lzX2RvbmUpIHsKIAkJCQlpOTE1X3BhZ2VmbGlwX3N0YWxsX2NoZWNrKGRldiwgMCk7CiAJCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcChkZXYsIDApOwogCQkJfQogCQl9CiAKLQkJaWYgKHBpcGViX3N0YXRzICYgdmJsYW5rX3N0YXR1cykgeworCQlpZiAocGlwZWJfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzICYmCisJCSAgICBkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpKSB7CiAJCQl2YmxhbmsrKzsKLQkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CiAJCQlpZiAoIWRldl9wcml2LT5mbGlwX3BlbmRpbmdfaXNfZG9uZSkgewogCQkJCWk5MTVfcGFnZWZsaXBfc3RhbGxfY2hlY2soZGV2LCAxKTsKIAkJCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgMSk7CkBAIC0xMjc4LDEyICsxMjk1LDEyIEBACiAJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2KQogCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCi0JcmV0ID0gLUVOT0RFVjsKIAlpZiAocmluZy0+aXJxX2dldChyaW5nKSkgewogCQlEUk1fV0FJVF9PTihyZXQsIHJpbmctPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKIAkJCSAgICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucik7CiAJCXJpbmctPmlycV9wdXQocmluZyk7Ci0JfQorCX0gZWxzZSBpZiAod2FpdF9mb3IoUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIsIDMwMDApKQorCQlyZXQgPSAtRUJVU1k7CiAKIAlpZiAocmV0ID09IC1FQlVTWSkgewogCQlEUk1fRVJST1IoIkVCVVNZIC0tIHJlYzogJWQgZW1pdHRlZDogJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA0MGE0MDdmLi41Y2ZjNjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTUxMyw2ICs1MTMsMTAgQEAKICNkZWZpbmUgICBHRU42X0JMSVRURVJfU1lOQ19TVEFUVVMJCQkoMSA8PCAyNCkKICNkZWZpbmUgICBHRU42X0JMSVRURVJfVVNFUl9JTlRFUlJVUFQJCQkoMSA8PCAyMikKIAorI2RlZmluZSBHRU42X0JMSVRURVJfRUNPU0tQRAkweDIyMWQwCisjZGVmaW5lICAgR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQJCQkxNgorI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZCQkJKDE8PDMpCisKICNkZWZpbmUgR0VONl9CU0RfU0xFRVBfUFNNSV9DT05UUk9MCTB4MTIwNTAKICNkZWZpbmUgICBHRU42X0JTRF9TTEVFUF9QU01JX0NPTlRST0xfUkNfSUxETF9NRVNTQUdFX01PRElGWV9NQVNLCSgxIDw8IDE2KQogI2RlZmluZSAgIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTF9SQ19JTERMX01FU1NBR0VfRElTQUJMRQkJKDEgPDwgMCkKQEAgLTI2MjYsNiArMjYzMCw4IEBACiAjZGVmaW5lIERJU1BMQVlfUE9SVF9QTExfQklPU18yICAgICAgICAgMHg0NjAxNAogCiAjZGVmaW5lIFBDSF9EU1BDTEtfR0FURV9ECTB4NDIwMjAKKyMgZGVmaW5lIERQRkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgOSkKKyMgZGVmaW5lIERQRkNSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDgpCiAjIGRlZmluZSBEUEZEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDcpCiAjIGRlZmluZSBEUEFSQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA1KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDE3MDM1YjguLjhhNzdmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC01MzUsNiArNTM1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2NydF9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgaW50ZWxfY3J0ICpjcnQgPSBpbnRlbF9hdHRhY2hlZF9jcnQoY29ubmVjdG9yKTsKKworCWlmIChIQVNfUENIX1NQTElUKGRldikpCisJCWNydC0+Zm9yY2VfaG90cGx1Z19yZXF1aXJlZCA9IDE7Cit9CisKIC8qCiAgKiBSb3V0aW5lcyBmb3IgY29udHJvbGxpbmcgc3R1ZmYgb24gdGhlIGFuYWxvZyBwb3J0CiAgKi8KQEAgLTU0OCw2ICs1NTcsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGludGVsX2NydF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLnJlc2V0ID0gaW50ZWxfY3J0X3Jlc2V0LAogCS5kcG1zID0gZHJtX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKIAkuZGV0ZWN0ID0gaW50ZWxfY3J0X2RldGVjdCwKIAkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5ODk2N2YzLi43ZTQyYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMjEzLDYgKzEyMTMsMjYgQEAKIAlyZXR1cm4gSTkxNV9SRUFEKERQRkNfQ09OVFJPTCkgJiBEUEZDX0NUTF9FTjsKIH0KIAorc3RhdGljIHZvaWQgc2FuZHlicmlkZ2VfYmxpdF9mYmNfdXBkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgYmx0X2Vjb3NrcGQ7CisKKwkvKiBNYWtlIHN1cmUgYmxpdHRlciBub3RpZmllcyBGQkMgb2Ygd3JpdGVzICovCisJX19nZW42X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKKwlibHRfZWNvc2twZCA9IEk5MTVfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7CisJYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkgPDwKKwkJR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQ7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCWJsdF9lY29za3BkIHw9IEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZOworCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKKwlibHRfZWNvc2twZCAmPSB+KEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZIDw8CisJCQkgR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQpOworCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKKwlQT1NUSU5HX1JFQUQoR0VONl9CTElUVEVSX0VDT1NLUEQpOworCV9fZ2VuNl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7Cit9CisKIHN0YXRpYyB2b2lkIGlyb25sYWtlX2VuYWJsZV9mYmMoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBsb25nIGludGVydmFsKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMjY2LDYgKzEyODYsNyBAQAogCQlJOTE1X1dSSVRFKFNOQl9EUEZDX0NUTF9TQSwKIAkJCSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFIHwgZGV2X3ByaXYtPmNmYl9mZW5jZSk7CiAJCUk5MTVfV1JJVEUoRFBGQ19DUFVfRkVOQ0VfT0ZGU0VULCBjcnRjLT55KTsKKwkJc2FuZHlicmlkZ2VfYmxpdF9mYmNfdXBkYXRlKGRldik7CiAJfQogCiAJRFJNX0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24gcGxhbmUgJWRcbiIsIGludGVsX2NydGMtPnBsYW5lKTsKQEAgLTU1MzAsNiArNTU1MSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCS8qIFJlc2V0IGZsYWdzIGJhY2sgdG8gdGhlICd1bmtub3duJyBzdGF0dXMgc28gdGhhdCB0aGV5CisJICogd2lsbCBiZSBjb3JyZWN0bHkgc2V0IG9uIHRoZSBpbml0aWFsIG1vZGVzZXQuCisJICovCisJaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSAwOworCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IC0xOworCWludGVsX2NydGMtPmFjdGl2ZSA9IHRydWU7IC8qIGZvcmNlIHRoZSBwaXBlIG9mZiBvbiBzZXR1cF9pbml0X2NvbmZpZyAqLworfQorCiBzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CiAJLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCiAJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCkBAIC01NTQxLDYgKzU1NzQsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0geworCS5yZXNldCA9IGludGVsX2NydGNfcmVzZXQsCiAJLmN1cnNvcl9zZXQgPSBpbnRlbF9jcnRjX2N1cnNvcl9zZXQsCiAJLmN1cnNvcl9tb3ZlID0gaW50ZWxfY3J0Y19jdXJzb3JfbW92ZSwKIAkuZ2FtbWFfc2V0ID0gaW50ZWxfY3J0Y19nYW1tYV9zZXQsCkBAIC01NjMxLDkgKzU2NjUsNyBAQAogCWRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaW50ZWxfY3J0Yy0+cGxhbmVdID0gJmludGVsX2NydGMtPmJhc2U7CiAJZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBpcGVdID0gJmludGVsX2NydGMtPmJhc2U7CiAKLQlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IDA7Ci0JaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gLTE7Ci0JaW50ZWxfY3J0Yy0+YWN0aXZlID0gdHJ1ZTsgLyogZm9yY2UgdGhlIHBpcGUgb2ZmIG9uIHNldHVwX2luaXRfY29uZmlnICovCisJaW50ZWxfY3J0Y19yZXNldCgmaW50ZWxfY3J0Yy0+YmFzZSk7CiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCWludGVsX2hlbHBlcl9mdW5jcy5wcmVwYXJlID0gaXJvbmxha2VfY3J0Y19wcmVwYXJlOwpAQCAtNjI4Niw3ICs2MzE4LDkgQEAKIAogCQlpZiAoSVNfR0VONShkZXYpKSB7CiAJCQkvKiBSZXF1aXJlZCBmb3IgRkJDICovCi0JCQlkc3BjbGtfZ2F0ZSB8PSBEUEZEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CisJCQlkc3BjbGtfZ2F0ZSB8PSBEUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJCURQRkNSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJCURQRkRVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKIAkJCS8qIFJlcXVpcmVkIGZvciBDeFNSICovCiAJCQlkc3BjbGtfZ2F0ZSB8PSBEUEFSQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYwppbmRleCBmMjk1YTdhLi42NGZkNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW8uaD4KICNpbmNsdWRlIDxhY3BpL3ZpZGVvLmg+CiAKICNpbmNsdWRlICJkcm1QLmgiCkBAIC00NzYsNyArNDc3LDcgQEAKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKLQliYXNlID0gaW9yZW1hcChhc2xzLCBPUFJFR0lPTl9TSVpFKTsKKwliYXNlID0gYWNwaV9vc19pb3JlbWFwKGFzbHMsIE9QUkVHSU9OX1NJWkUpOwogCWlmICghYmFzZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCBmNmI5YmFhLi42MjE4ZmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0zNCw2ICszNCwxNCBAQAogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKIAorc3RhdGljIGlubGluZSBpbnQgcmluZ19zcGFjZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJaW50IHNwYWNlID0gKHJpbmctPmhlYWQgJiBIRUFEX0FERFIpIC0gKHJpbmctPnRhaWwgKyA4KTsKKwlpZiAoc3BhY2UgPCAwKQorCQlzcGFjZSArPSByaW5nLT5zaXplOworCXJldHVybiBzcGFjZTsKK30KKwogc3RhdGljIHUzMiBpOTE1X2dlbV9nZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTIwNCwxMSArMjEyLDkgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUocmluZy0+ZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChyaW5nLT5kZXYpOwogCWVsc2UgewotCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZykgJiBIRUFEX0FERFI7CisJCXJpbmctPmhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKTsKIAkJcmluZy0+dGFpbCA9IEk5MTVfUkVBRF9UQUlMKHJpbmcpICYgVEFJTF9BRERSOwotCQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCArIDgpOwotCQlpZiAocmluZy0+c3BhY2UgPCAwKQotCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKKwkJcmluZy0+c3BhY2UgPSByaW5nX3NwYWNlKHJpbmcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTIxLDMyICs5MjcsMzQgQEAKIAl9CiAKIAlyaW5nLT50YWlsID0gMDsKLQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSA4OworCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAogCXJldHVybiAwOwogfQogCiBpbnQgaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKQogewotCWludCByZXJlYWQgPSAwOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAl1MzIgaGVhZDsKIAorCS8qIElmIHRoZSByZXBvcnRlZCBoZWFkIHBvc2l0aW9uIGhhcyB3cmFwcGVkIG9yIGhhc24ndCBhZHZhbmNlZCwKKwkgKiBmYWxsYmFjayB0byB0aGUgc2xvdyBhbmQgYWNjdXJhdGUgcGF0aC4KKwkgKi8KKwloZWFkID0gaW50ZWxfcmVhZF9zdGF0dXNfcGFnZShyaW5nLCA0KTsKKwlpZiAoaGVhZCA+IHJpbmctPmhlYWQpIHsKKwkJcmluZy0+aGVhZCA9IGhlYWQ7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKKwkJaWYgKHJpbmctPnNwYWNlID49IG4pCisJCQlyZXR1cm4gMDsKKwl9CisKIAl0cmFjZV9pOTE1X3Jpbmdfd2FpdF9iZWdpbiAoZGV2KTsKIAllbmQgPSBqaWZmaWVzICsgMyAqIEhaOwogCWRvIHsKLQkJLyogSWYgdGhlIHJlcG9ydGVkIGhlYWQgcG9zaXRpb24gaGFzIHdyYXBwZWQgb3IgaGFzbid0IGFkdmFuY2VkLAotCQkgKiBmYWxsYmFjayB0byB0aGUgc2xvdyBhbmQgYWNjdXJhdGUgcGF0aC4KLQkJICovCi0JCWhlYWQgPSBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKHJpbmcsIDQpOwotCQlpZiAocmVyZWFkKQotCQkJaGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpOwotCQlyaW5nLT5oZWFkID0gaGVhZCAmIEhFQURfQUREUjsKLQkJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKLQkJaWYgKHJpbmctPnNwYWNlIDwgMCkKLQkJCXJpbmctPnNwYWNlICs9IHJpbmctPnNpemU7CisJCXJpbmctPmhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKTsKKwkJcmluZy0+c3BhY2UgPSByaW5nX3NwYWNlKHJpbmcpOwogCQlpZiAocmluZy0+c3BhY2UgPj0gbikgewogCQkJdHJhY2VfaTkxNV9yaW5nX3dhaXRfZW5kKGRldik7CiAJCQlyZXR1cm4gMDsKQEAgLTk2MSw3ICs5NjksNiBAQAogCQltc2xlZXAoMSk7CiAJCWlmIChhdG9taWNfcmVhZCgmZGV2X3ByaXYtPm1tLndlZGdlZCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJcmVyZWFkID0gMTsKIAl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBlbmQpKTsKIAl0cmFjZV9pOTE1X3Jpbmdfd2FpdF9lbmQgKGRldik7CiAJcmV0dXJuIC1FQlVTWTsKQEAgLTEyOTIsNiArMTI5OSw0OCBAQAogCXJldHVybiBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKGRldiwgcmluZyk7CiB9CiAKK2ludCBpbnRlbF9yZW5kZXJfcmluZ19pbml0X2RyaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgc3RhcnQsIHUzMiBzaXplKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tSQ1NdOworCisJKnJpbmcgPSByZW5kZXJfcmluZzsKKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNikgeworCQlyaW5nLT5hZGRfcmVxdWVzdCA9IGdlbjZfYWRkX3JlcXVlc3Q7CisJCXJpbmctPmlycV9nZXQgPSBnZW42X3JlbmRlcl9yaW5nX2dldF9pcnE7CisJCXJpbmctPmlycV9wdXQgPSBnZW42X3JlbmRlcl9yaW5nX3B1dF9pcnE7CisJfSBlbHNlIGlmIChJU19HRU41KGRldikpIHsKKwkJcmluZy0+YWRkX3JlcXVlc3QgPSBwY19yZW5kZXJfYWRkX3JlcXVlc3Q7CisJCXJpbmctPmdldF9zZXFubyA9IHBjX3JlbmRlcl9nZXRfc2Vxbm87CisJfQorCisJcmluZy0+ZGV2ID0gZGV2OworCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJpbmctPmdwdV93cml0ZV9saXN0KTsKKworCXJpbmctPnNpemUgPSBzaXplOworCXJpbmctPmVmZmVjdGl2ZV9zaXplID0gcmluZy0+c2l6ZTsKKwlpZiAoSVNfSTgzMChyaW5nLT5kZXYpKQorCQlyaW5nLT5lZmZlY3RpdmVfc2l6ZSAtPSAxMjg7CisKKwlyaW5nLT5tYXAub2Zmc2V0ID0gc3RhcnQ7CisJcmluZy0+bWFwLnNpemUgPSBzaXplOworCXJpbmctPm1hcC50eXBlID0gMDsKKwlyaW5nLT5tYXAuZmxhZ3MgPSAwOworCXJpbmctPm1hcC5tdHJyID0gMDsKKworCWRybV9jb3JlX2lvcmVtYXBfd2MoJnJpbmctPm1hcCwgZGV2KTsKKwlpZiAocmluZy0+bWFwLmhhbmRsZSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCisJCQkgICIgcmluZyBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyaW5nLT52aXJ0dWFsX3N0YXJ0ID0gKHZvaWQgX19mb3JjZSBfX2lvbWVtICopcmluZy0+bWFwLmhhbmRsZTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggNWIwYWJmYS4uNmQ2ZmRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtMTY2LDQgKzE2Niw3IEBACiB1MzIgaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKIHZvaWQgaW50ZWxfcmluZ19zZXR1cF9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogCisvKiBEUkkgd2FydHMgKi8KK2ludCBpbnRlbF9yZW5kZXJfcmluZ19pbml0X2RyaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgc3RhcnQsIHUzMiBzaXplKTsKKwogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKaW5kZXggNDVjZDM3Ni4uNmEwOWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtNDczLDIwICs0NzMsNiBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaSA9IDM7Ci0Jd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiBpLS0pIHsKLQkJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAotCQkJCQkgIFNEVk9fSTJDX0NNRF9TVEFUVVMsCi0JCQkJCSAgJnN0YXR1cykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJRFJNX0RFQlVHX0tNUygiY29tbWFuZCByZXR1cm5zIHJlc3BvbnNlICVzIFslZF1cbiIsCi0JCQkgICAgICBzdGF0dXMgPD0gU0RWT19DTURfU1RBVFVTX1NDQUxJTkdfTk9UX1NVUFAgPyBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10gOiAiPz8/IiwKLQkJCSAgICAgIHN0YXR1cyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDk3LDYgKzQ4Myw4IEBACiAJdTggc3RhdHVzOwogCWludCBpOwogCisJRFJNX0RFQlVHX0tNUygiJXM6IFI6ICIsIFNEVk9fTkFNRShpbnRlbF9zZHZvKSk7CisKIAkvKgogCSAqIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGFsbCBjb21tYW5kcyB3aWxsIGJlCiAJICogcHJvY2Vzc2VkIHdpdGhpbiAxNcK1cywgYW5kIHRoYXQgd2UgbmVlZCBvbmx5IHBvbGwKQEAgLTUwNSwxNCArNDkzLDE5IEBACiAJICoKIAkgKiBDaGVjayA1IHRpbWVzIGluIGNhc2UgdGhlIGhhcmR3YXJlIGZhaWxlZCB0byByZWFkIHRoZSBkb2NzLgogCSAqLwotCWRvIHsKKwlpZiAoIWludGVsX3Nkdm9fcmVhZF9ieXRlKGludGVsX3Nkdm8sCisJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAorCQkJCSAgJnN0YXR1cykpCisJCWdvdG8gbG9nX2ZhaWw7CisKKwl3aGlsZSAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HICYmIHJldHJ5LS0pIHsKKwkJdWRlbGF5KDE1KTsKIAkJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAogCQkJCQkgIFNEVk9fSTJDX0NNRF9TVEFUVVMsCiAJCQkJCSAgJnN0YXR1cykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfSB3aGlsZSAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HICYmIC0tcmV0cnkpOworCQkJZ290byBsb2dfZmFpbDsKKwl9CiAKLQlEUk1fREVCVUdfS01TKCIlczogUjogIiwgU0RWT19OQU1FKGludGVsX3Nkdm8pKTsKIAlpZiAoc3RhdHVzIDw9IFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQKQogCQlEUk1fTE9HX0tNUygiKCVzKSIsIGNtZF9zdGF0dXNfbmFtZXNbc3RhdHVzXSk7CiAJZWxzZQpAQCAtNTMzLDcgKzUyNiw3IEBACiAJcmV0dXJuIHRydWU7CiAKIGxvZ19mYWlsOgotCURSTV9MT0dfS01TKCJcbiIpOworCURSTV9MT0dfS01TKCIuLi4gZmFpbGVkXG4iKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTU1MCw2ICs1NDMsNyBAQAogc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfY29udHJvbF9idXNfc3dpdGNoKHN0cnVjdCBpbnRlbF9zZHZvICppbnRlbF9zZHZvLAogCQkJCQkgICAgICB1OCBkZGNfYnVzKQogeworCS8qIFRoaXMgbXVzdCBiZSB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHdyaXRlIGJlZm9yZSB0aGUgaTJjIHhmZXIgKi8KIAlyZXR1cm4gaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywKIAkJCQkgICAgU0RWT19DTURfU0VUX0NPTlRST0xfQlVTX1NXSVRDSCwKIAkJCQkgICAgJmRkY19idXMsIDEpOwpAQCAtNTU3LDcgKzU1MSwxMCBAQAogCiBzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX3NldF92YWx1ZShzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2bywgdTggY21kLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewotCXJldHVybiBpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBjbWQsIGRhdGEsIGxlbik7CisJaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBjbWQsIGRhdGEsIGxlbikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfc2R2bywgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBib29sCkBAIC04NTksMTggKzg1NiwyMSBAQAogCiAJaW50ZWxfZGlwX2luZm9mcmFtZV9jc3VtKCZhdmlfaWYpOwogCi0JaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9JTkRFWCwKKwlpZiAoIWludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJICBTRFZPX0NNRF9TRVRfSEJVRl9JTkRFWCwKIAkJCQkgIHNldF9idWZfaW5kZXgsIDIpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGF2aV9pZik7IGkgKz0gOCkgewotCQlpZiAoIWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIFNEVk9fQ01EX1NFVF9IQlVGX0RBVEEsCisJCWlmICghaW50ZWxfc2R2b19zZXRfdmFsdWUoaW50ZWxfc2R2bywKKwkJCQkJICBTRFZPX0NNRF9TRVRfSEJVRl9EQVRBLAogCQkJCQkgIGRhdGEsIDgpKQogCQkJcmV0dXJuIGZhbHNlOwogCQlkYXRhKys7CiAJfQogCi0JcmV0dXJuIGludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIFNEVk9fQ01EX1NFVF9IQlVGX1RYUkFURSwKKwlyZXR1cm4gaW50ZWxfc2R2b19zZXRfdmFsdWUoaW50ZWxfc2R2bywKKwkJCQkgICAgU0RWT19DTURfU0VUX0hCVUZfVFhSQVRFLAogCQkJCSAgICAmdHhfcmF0ZSwgMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggMmFlZjVjZC4uNDllNWU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKQEAgLTYzMTAsNiArNjMxMCw5IEBACiBzdGF0aWMgYm9vbAogYXBwbHlfZGNiX2VuY29kZXJfcXVpcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpZHgsIHUzMiAqY29ubiwgdTMyICpjb25mKQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRjYl90YWJsZSAqZGNiID0gJmRldl9wcml2LT52Ymlvcy5kY2I7CisKIAkvKiBEZWxsIFByZWNpc2lvbiBNNjMwMAogCSAqICAgRENCIGVudHJ5IDI6IDAyMDI1MzEyIDAwMDAwMDEwCiAJICogICBEQ0IgZW50cnkgMzogMDIwMjYzMTIgMDAwMDAwMjAKQEAgLTYzMjcsNiArNjMzMCwxOCBAQAogCQkJcmV0dXJuIGZhbHNlOwogCX0KIAorCS8qIEdlRm9yY2UzIFRpIDIwMAorCSAqCisJICogRENCIHJlcG9ydHMgYW4gTFZEUyBvdXRwdXQgdGhhdCBzaG91bGQgYmUgVE1EUzoKKwkgKiAgIERDQiBlbnRyeSAxOiBmMjAwNTAxNCBmZmZmZmZmZgorCSAqLworCWlmIChudl9tYXRjaF9kZXZpY2UoZGV2LCAweDAyMDEsIDB4MTQ2MiwgMHg4ODUxKSkgeworCQlpZiAoKmNvbm4gPT0gMHhmMjAwNTAxNCAmJiAqY29uZiA9PSAweGZmZmZmZmZmKSB7CisJCQlmYWJyaWNhdGVfZGNiX291dHB1dChkY2IsIE9VVFBVVF9UTURTLCAxLCAxLCAxKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwppbmRleCAxM2JiNjcyLi5mNjU4YTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKQEAgLTIzNCw5ICsyMzQsOSBAQAogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW5vdXZlYXVfZmJjb25fc2V0X3N1c3BlbmQoZGV2LCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlub3V2ZWF1X2ZiY29uX3Jlc3RvcmVfYWNjZWwoZGV2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzU5LDkgKzM1OSw5IEBACiAJCW52X2NydGMtPmx1dC5kZXB0aCA9IDA7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW5vdXZlYXVfZmJjb25fc2V0X3N1c3BlbmQoZGV2LCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCW5vdXZlYXVfZmJjb25femZpbGxfYWxsKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCmluZGV4IDAxYmZmYzQuLjk4MjFmY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaApAQCAtODQ4LDkgKzg0OCw2IEBACiAJCQkJICAgICBzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIG5vdXZlYXVfdnJhbV9tYW5hZ2VyOwogCi0vKiBudmMwX3ZyYW0uYyAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIG52YzBfdnJhbV9tYW5hZ2VyOwotCiAvKiBub3V2ZWF1X25vdGlmaWVyLmMgKi8KIGV4dGVybiBpbnQgIG5vdXZlYXVfbm90aWZpZXJfaW5pdF9jaGFubmVsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gdm9pZCBub3V2ZWF1X25vdGlmaWVyX3Rha2Vkb3duX2NoYW5uZWwoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwppbmRleCBmYjg0NmEzLi5mMDVjMGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9wbV9lbmdpbmUgKnBtID0gJmRldl9wcml2LT5lbmdpbmUucG07CiAKIAlpZiAocG0tPmh3bW9uKSB7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmcG0tPmh3bW9uLT5rb2JqLCAmaHdtb25fYXR0cmdyb3VwKTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPnBkZXYtPmRldi5rb2JqLCAmaHdtb25fYXR0cmdyb3VwKTsKIAkJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIocG0tPmh3bW9uKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKaW5kZXggN2VjYzRhZC4uOGQ5OTY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvW10gPSB7CiAJCXsgSTJDX0JPQVJEX0lORk8oInc4M2w3ODV0cyIsIDB4MmQpIH0sCiAJCXsgSTJDX0JPQVJEX0lORk8oInc4Mzc4MWQiLCAweDJkKSB9LAotCQl7IEkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSB9LAogCQl7IEkyQ19CT0FSRF9JTkZPKCJhZHQ3NDczIiwgMHgyZSkgfSwKKwkJeyBJMkNfQk9BUkRfSU5GTygiZjc1Mzc1IiwgMHgyZSkgfSwKIAkJeyBJMkNfQk9BUkRfSU5GTygibG05OSIsIDB4NGMpIH0sCiAJCXsgfQogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwppbmRleCAxNGUyNGU5Li4wZWEwOTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKQEAgLTI4Myw4ICsyODMsNyBAQAogCQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCX0gZWxzZQotCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7CisJfSBlbHNlIHsKIAkJcmV0ID0gbnY1MF9ldm9fZG1hb2JqX25ldyhldm8sIDB4M2QsIE52RXZvRkIxNiwgMHg3MCwgMHgxOSwKIAkJCQkJICAwLCAweGZmZmZmZmZmLCAweDAwMDEwMDAwKTsKIAkJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCmluZGV4IDJkN2VhNzUuLjM3ZTIxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKQEAgLTI1Niw2ICsyNTYsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOwogCWludCBpLCBoZHIgPSAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkgPyAweDIwMCA6IDB4MjA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjY1LDYgKzI2Niw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgZmFsc2UpOwogCiAJaWYgKHBncmFwaC0+Y2hhbm5lbChkZXYpID09IGNoYW4pCkBAIC0yNzUsNiArMjc3LDcgQEAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCB0cnVlKTsKKwlwZmlmby0+cmVhc3NpZ24oZGV2LCB0cnVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5yYW1pbl9ncmN0eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKaW5kZXggMzhlNTIzZS4uNDU5ZmYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYwpAQCAtNDUsMTEgKzQ1LDYgQEAKIAl9CiAKIAlpZiAocGh5cyAmIDEpIHsKLQkJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7Ci0JCQlwaHlzICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOwotCQkJcGh5cyB8PSAweDMwOwotCQl9Ci0KIAkJaWYgKGNvdmVyYWdlIDw9IDMyICogMTAyNCAqIDEwMjQpCiAJCQlwaHlzIHw9IDB4NjA7CiAJCWVsc2UgaWYgKGNvdmVyYWdlIDw9IDY0ICogMTAyNCAqIDEwMjQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKaW5kZXggZTZlYTdkOC4uZWIxOGE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIm52YzBfZ3JhcGguaCIKIAogc3RhdGljIHZvaWQgbnZjMF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBudmMwX3J1bmsxNDBfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICopOwogc3RhdGljIGludCAgbnZjMF9ncmFwaF91bmxvYWRfY29udGV4dF90byhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgY2hhbik7CiAKIHZvaWQKQEAgLTI4MSw2ICsyODIsNyBAQAogCQlyZXR1cm47CiAKIAlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgMTIpOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAyNSk7CiAKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnVuazQxODhiOCk7CiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwcml2LT51bms0MTg4YjQpOwpAQCAtMzkwLDYgKzM5Miw3IEBACiAJfQogCiAJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAxMiwgbnZjMF9ncmFwaF9pc3IpOworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMjUsIG52YzBfcnVuazE0MF9pc3IpOwogCU5WT0JKX0NMQVNTKGRldiwgMHg5MDJkLCBHUik7IC8qIDJEICovCiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwMzksIEdSKTsgLyogTTJNRiAqLwogCU5WT0JKX0NMQVNTKGRldiwgMHg5MDk3LCBHUik7IC8qIDNEICovCkBAIC01MTIsOCArNTE1LDggQEAKIAkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4MjI0KSwgMHhjMDAwMDAwMCk7CiAJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDQ4YyksIDB4YzAwMDAwMDApOwogCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHgwODQpLCAweGMwMDAwMDAwKTsKLQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4ZTQ0KSwgMHgwMDFmZmZmZSk7Ci0JCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweGU0YyksIDB4MDAwMDAwMGYpOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg2NDQpLCAweDAwMWZmZmZlKTsKKwkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NjRjKSwgMHgwMDAwMDAwZik7CiAJCX0KIAkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgyYzkwKSwgMHhmZmZmZmZmZik7CiAJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MmM5NCksIDB4ZmZmZmZmZmYpOwpAQCAtNzc3LDMgKzc4MCwxOSBAQAogCiAJbnZfd3IzMihkZXYsIDB4NDAwNTAwLCAweDAwMDEwMDAxKTsKIH0KKworc3RhdGljIHZvaWQKK252YzBfcnVuazE0MF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwl1MzIgdW5pdHMgPSBudl9yZDMyKGRldiwgMHgwMDAxN2MpICYgMHgxZjsKKworCXdoaWxlICh1bml0cykgeworCQl1MzIgdW5pdCA9IGZmcyh1bml0cykgLSAxOworCQl1MzIgcmVnID0gMHgxNDAwMDAgKyB1bml0ICogMHgyMDAwOworCQl1MzIgc3QwID0gbnZfbWFzayhkZXYsIHJlZyArIDB4MTAyMCwgMCwgMCk7CisJCXUzMiBzdDEgPSBudl9tYXNrKGRldiwgcmVnICsgMHgxNDIwLCAwLCAwKTsKKworCQlOVl9JTkZPKGRldiwgIlBSVU5LMTQwOiAlZCAweCUwOHggMHglMDh4XG4iLCB1bml0LCBzdDAsIHN0MSk7CisJCXVuaXRzICY9IH4oMSA8PCB1bml0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKaW5kZXggYjllNjhiMi4uZjg4MGZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYwpAQCAtMTgzMCw3ICsxODMwLDcgQEAKIAogCWZvciAodHAgPSAwLCBpZCA9IDA7IHRwIDwgNDsgdHArKykgewogCQlmb3IgKGdwYyA9IDA7IGdwYyA8IHByaXYtPmdwY19ucjsgZ3BjKyspIHsKLQkJCWlmICh0cCA8PSBwcml2LT50cF9ucltncGNdKSB7CisJCQlpZiAodHAgPCBwcml2LT50cF9ucltncGNdKSB7CiAJCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg2OTgpLCBpZCk7CiAJCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg0ZTgpLCBpZCk7CiAJCQkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgwYzEwICsgdHAgKiA0KSwgaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCBiMGFiMTg1Li5iMTUzNzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtNTU1LDYgKzU1NSw3IEBACiAJCQkJCWRwX2Nsb2NrID0gZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2s7CiAJCQkJfQogCQkJfQorLyogdGhpcyBtaWdodCB3b3JrIHByb3Blcmx5IHdpdGggdGhlIG5ldyBwbGwgYWxnbyAqLwogI2lmIDAgLyogZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIHNvbWUgbGFwdG9wcyAqLwogCQkJLyogdXNlIHJlY29tbWVuZGVkIHJlZl9kaXYgZm9yIHNzICovCiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CkBAIC01NzIsNiArNTczLDExIEBACiAJCQkJCWFkanVzdGVkX2Nsb2NrID0gbW9kZS0+Y2xvY2sgKiAyOwogCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9DTE9TRVNUX0xPV0VSOworCQkJCS8qIHJ2NTE1IG5lZWRzIG1vcmUgdGVzdGluZyB3aXRoIHRoaXMgb3B0aW9uICovCisJCQkJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1JWNTE1KSB7CisJCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpCisJCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfSVNfTENEOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSAhPSBEUk1fTU9ERV9FTkNPREVSX0RBQykKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKQEAgLTYwNiwxNCArNjEyLDkgQEAKIAkJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KG1vZGUtPmNsb2NrIC8gMTApOwogCQkJCWFyZ3MudjEudWNUcmFuc21pdHRlcklEID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7CiAJCQkJYXJncy52MS51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7Ci0JCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCWFyZ3MudjEudWNDb25maWcgfD0KLQkJCQkJCQlBREpVU1RfRElTUExBWV9DT05GSUdfU1NfRU5BQkxFOwotCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKKwkJCQlpZiAoc3NfZW5hYmxlZCkKIAkJCQkJYXJncy52MS51Y0NvbmZpZyB8PQogCQkJCQkJQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRTsKLQkJCQl9CiAKIAkJCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC02MjQsMTIgKzYyNSwxMiBAQAogCQkJCWFyZ3MudjMuc0lucHV0LnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOwogCQkJCWFyZ3MudjMuc0lucHV0LnVjRW5jb2RlTW9kZSA9IGVuY29kZXJfbW9kZTsKIAkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgPSAwOworCQkJCWlmIChzc19lbmFibGVkKQorCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSB7CiAJCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCQkJCQlpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7Ci0JCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KLQkJCQkJCQkJRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFOwogCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CiAJCQkJCQkJRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERTsKIAkJCQkJCS8qIDE2MjAwIG9yIDI3MDAwICovCkBAIC02NDksMTggKzY1MCwxMSBAQAogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQkJaWYgKHNzX2VuYWJsZWQpCi0JCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9Ci0JCQkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQogCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CiAJCQkJCQkvKiAxNjIwMCBvciAyNzAwMCAqLwogCQkJCQkJYXJncy52My5zSW5wdXQudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZHBfY2xvY2sgLyAxMCk7Ci0JCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKLQkJCQkJCWlmIChzc19lbmFibGVkKQotCQkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQotCQkJCQkJCQlESVNQUExMX0NPTkZJR19TU19FTkFCTEU7Ci0JCQkJCX0gZWxzZSB7CisJCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlICE9IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKIAkJCQkJCWlmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkKIAkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KIAkJCQkJCQkJRElTUFBMTF9DT05GSUdfRFVBTF9MSU5LOwpAQCAtOTYzLDggKzk1NywxNiBAQAogCS8qIGFkanVzdCBwaXhlbCBjbG9jayBhcyBuZWVkZWQgKi8KIAlhZGp1c3RlZF9jbG9jayA9IGF0b21iaW9zX2FkanVzdF9wbGwoY3J0YywgbW9kZSwgcGxsLCBzc19lbmFibGVkLCAmc3MpOwogCi0JcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCSAgICZyZWZfZGl2LCAmcG9zdF9kaXYpOworCS8qIHJ2NTE1IHNlZW1zIGhhcHBpZXIgd2l0aCB0aGUgb2xkIGFsZ28gKi8KKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY1MTUpCisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZfZGl2LCAmcG9zdF9kaXYpOworCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCXJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkJCSAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwllbHNlCisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZfZGl2LCAmcG9zdF9kaXYpOwogCiAJYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3NzKGNydGMsIEFUT01fRElTQUJMRSwgcmFkZW9uX2NydGMtPnBsbF9pZCwgJnNzKTsKIApAQCAtMTAwNiw2ICsxMDA4LDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2JvICpyYm87CiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwl1MzIgZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl9OT05FKTsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMDU3LDExICsxMDYwLDE3IEBACiAJY2FzZSAxNjoKIAkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzE2QlBQKSB8CiAJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjU2NSkpOworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOXzhJTjE2KTsKKyNlbmRpZgogCQlicmVhazsKIAljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWZiX2Zvcm1hdCA9IChFVkVSR1JFRU5fR1JQSF9ERVBUSChFVkVSR1JFRU5fR1JQSF9ERVBUSF8zMkJQUCkgfAogCQkJICAgICBFVkVSR1JFRU5fR1JQSF9GT1JNQVQoRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0I4ODg4KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fU1dBUChFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMzIpOworI2VuZGlmCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgc2NyZWVuIGRlcHRoICVkXG4iLApAQCAtMTEwNiw2ICsxMTE1LDcgQEAKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKIAkgICAgICAgKHUzMikgZmJfbG9jYXRpb24gJiBFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX0FERFJFU1NfTUFTSyk7CiAJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGZiX2Zvcm1hdCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NXQVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfc3dhcCk7CiAKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9PRkZTRVRfWCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CiAJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfT0ZGU0VUX1kgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwpAQCAtMTE2Miw2ICsxMTcyLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0YXJnZXRfZmI7CiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwl1MzIgZmJfc3dhcCA9IFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkU7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTIxNSwxMiArMTIyNiwxOCBAQAogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMTZCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMTZCUFBfUkdCNTY1OworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMTZCSVQ7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMzJCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMzJCUFBfQVJHQjg4ODg7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8zMkJJVDsKKyNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKQEAgLTEyNjAsNiArMTI3Nyw4IEBACiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsKIAkgICAgICAgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAodTMyKSBmYl9sb2NhdGlvbik7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlXUkVHMzIoUjYwMF9EMUdSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCA0ZTc3NzhkLi42OTVkZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC0xODcsOSArMTg3LDkgQEAKIGludCBkcF9tb2RlX3ZhbGlkKHU4IGRwY2RbRFBfRFBDRF9TSVpFXSwgaW50IG1vZGVfY2xvY2spCiB7CiAJaW50IGxhbmVzID0gZHBfbGFuZXNfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7Ci0JaW50IGJ3ID0gZHBfbGFuZXNfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7CisJaW50IGRwX2Nsb2NrID0gZHBfbGlua19jbG9ja19mb3JfbW9kZV9jbG9jayhkcGNkLCBtb2RlX2Nsb2NrKTsKIAotCWlmICgobGFuZXMgPT0gMCkgfHwgKGJ3ID09IDApKQorCWlmICgobGFuZXMgPT0gMCkgfHwgKGRwX2Nsb2NrID09IDApKQogCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwogCiAJcmV0dXJuIE1PREVfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCBhODk3M2FjLi5mZmRjODMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTk3LDI2ICs5NywyOSBAQAogfQogCiAvKiBnZXQgdGVtcGVyYXR1cmUgaW4gbWlsbGlkZWdyZWVzICovCi11MzIgZXZlcmdyZWVuX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KIAkJQVNJQ19UX1NISUZUOwogCXUzMiBhY3R1YWxfdGVtcCA9IDA7CiAKLQlpZiAoKHRlbXAgPj4gMTApICYgMSkKLQkJYWN0dWFsX3RlbXAgPSAwOwotCWVsc2UgaWYgKCh0ZW1wID4+IDkpICYgMSkKKwlpZiAodGVtcCAmIDB4NDAwKQorCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJZWxzZSBpZiAodGVtcCAmIDB4MjAwKQogCQlhY3R1YWxfdGVtcCA9IDI1NTsKLQllbHNlCi0JCWFjdHVhbF90ZW1wID0gKHRlbXAgPj4gMSkgJiAweGZmOworCWVsc2UgaWYgKHRlbXAgJiAweDEwMCkgeworCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweDFmZjsKKwkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOworCX0gZWxzZQorCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOwogCi0JcmV0dXJuIGFjdHVhbF90ZW1wICogMTAwMDsKKwlyZXR1cm4gKGFjdHVhbF90ZW1wICogMTAwMCkgLyAyOwogfQogCi11MzIgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBzdW1vX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0ZW1wID0gUlJFRzMyKENHX1RIRVJNQUxfU1RBVFVTKSAmIDB4ZmY7Ci0JdTMyIGFjdHVhbF90ZW1wID0gKHRlbXAgPj4gMSkgJiAweGZmOworCWludCBhY3R1YWxfdGVtcCA9IHRlbXAgLSA0OTsKIAogCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CiB9CkBAIC0xMTgyLDYgKzExODUsMTggQEAKIC8qCiAgKiBDUC4KICAqLwordm9pZCBldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYikKK3sKKwkvKiBzZXQgdG8gRFgxMC8xMSBtb2RlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX01PREVfQ09OVFJPTCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEpOworCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2FkZHIpICYgMHhGRik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmxlbmd0aF9kdyk7Cit9CisKIAogc3RhdGljIGludCBldmVyZ3JlZW5fY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CkBAIC0xMjMzLDcgKzEyNDgsNyBAQAogCWNwX21lID0gMHhmZjsKIAlXUkVHMzIoQ1BfTUVfQ05UTCwgY3BfbWUpOwogCi0JciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZSArIDE1KTsKKwlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCBldmVyZ3JlZW5fZGVmYXVsdF9zaXplICsgMTkpOwogCWlmIChyKSB7CiAJCURSTV9FUlJPUigicmFkZW9uOiBjcCBmYWlsZWQgdG8gbG9jayByaW5nICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CkBAIC0xMjY2LDYgKzEyODEsMTEgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGZmZmZmZmZmKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGZmZmZmZmZmKTsKIAorCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4YzAwMjY5MDApOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4MDAwMDAzMTYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4MDAwMDAwMGUpOyAvKiBWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDEwKTsgLyogICovCisKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0yMDcyLDYgKzIwOTIsNyBAQAogCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCB2Z3RfY2FjaGVfaW52YWxpZGF0aW9uKTsKIAogCVdSRUczMihWR1RfR1NfVkVSVEVYX1JFVVNFLCAxNik7CisJV1JFRzMyKFBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRSwgMCk7CiAJV1JFRzMyKFBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CiAKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAxNCk7CkBAIC0yMjAxLDYgKzIyMjIsOSBAQAogCXN0cnVjdCBldmVyZ3JlZW5fbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX3Jlc2V0ID0gMDsKIAorCWlmICghKFJSRUczMihHUkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkKKwkJcmV0dXJuIDA7CisKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBHUkJNX1NUQVRVUz0weCUwOFhcbiIsCiAJCVJSRUczMihHUkJNX1NUQVRVUykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKaW5kZXggYjc1OGRjNy4uYTFiYTRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAogfQogCi0vKiBlbWl0cyAzMCAqLworLyogZW1pdHMgMzYgKi8KIHN0YXRpYyB2b2lkCiBzZXRfZGVmYXVsdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKQEAgLTI0NSw2ICsyNDUsOCBAQAogCWludCBudW1faHNfdGhyZWFkcywgbnVtX2xzX3RocmVhZHM7CiAJaW50IG51bV9wc19zdGFja19lbnRyaWVzLCBudW1fdnNfc3RhY2tfZW50cmllcywgbnVtX2dzX3N0YWNrX2VudHJpZXMsIG51bV9lc19zdGFja19lbnRyaWVzOwogCWludCBudW1faHNfc3RhY2tfZW50cmllcywgbnVtX2xzX3N0YWNrX2VudHJpZXM7CisJdTY0IGdwdV9hZGRyOworCWludCBkd29yZHM7CiAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKQEAgLTQ5Nyw2ICs0OTksMTggQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAorCS8qIHNldCB0byBEWDEwLzExIG1vZGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfTU9ERV9DT05UUk9MLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CisKKwkvKiBlbWl0IGFuIElCIHBvaW50aW5nIGF0IGRlZmF1bHQgc3RhdGUgKi8KKwlkd29yZHMgPSBBTElHTihyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuLCAweDEwKTsKKwlncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0OworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKKwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGkyZih1aW50MzJfdCBpbnB1dCkKQEAgLTUyNyw4ICs1NDEsMTAgQEAKIGludCBldmVyZ3JlZW5fYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBvYmpfc2l6ZTsKLQlpbnQgcjsKKwlpbnQgciwgZHdvcmRzOwogCXZvaWQgKnB0cjsKKwl1MzIgcGFja2V0MnNbMTZdOworCWludCBudW1fcGFja2V0MnMgPSAwOwogCiAJLyogcGluIGNvcHkgc2hhZGVyIGludG8gdnJhbSBpZiBhbHJlYWR5IGluaXRpYWxpemVkICovCiAJaWYgKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKQpAQCAtNTM2LDggKzU1MiwxNyBAQAogCiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKLQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gMDsKLQlvYmpfc2l6ZSA9IDA7CisKKwlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZTsKKworCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CisJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBQQUNLRVQyKDApOworCQlkd29yZHMrKzsKKwl9CisKKwlvYmpfc2l6ZSA9IGR3b3JkcyAqIDQ7CisJb2JqX3NpemUgPSBBTElHTihvYmpfc2l6ZSwgMjU2KTsKIAogCXJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgPSBvYmpfc2l6ZTsKIAlvYmpfc2l6ZSArPSBldmVyZ3JlZW5fdnNfc2l6ZSAqIDQ7CkBAIC01NjcsNiArNTkyLDEyIEBACiAJCXJldHVybiByOwogCX0KIAorCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCisJCSAgICBldmVyZ3JlZW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCisJaWYgKG51bV9wYWNrZXQycykKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCArIChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCksCisJCQkgICAgcGFja2V0MnMsIG51bV9wYWNrZXQycyAqIDQpOwogCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0LCBldmVyZ3JlZW5fdnMsIGV2ZXJncmVlbl92c19zaXplICogNCk7CiAJbWVtY3B5KHB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQsIGV2ZXJncmVlbl9wcywgZXZlcmdyZWVuX3BzX3NpemUgKiA0KTsKIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKQEAgLTY1Miw3ICs2ODMsNyBAQAogCS8qIGNhbGN1bGF0ZSBudW1iZXIgb2YgbG9vcHMgY29ycmVjdGx5ICovCiAJcmluZ19zaXplID0gbnVtX2xvb3BzICogZHdvcmRzX3Blcl9sb29wOwogCS8qIHNldCBkZWZhdWx0ICArIHNoYWRlcnMgKi8KLQlyaW5nX3NpemUgKz0gNDY7IC8qIHNoYWRlcnMgKyBkZWYgc3RhdGUgKi8KKwlyaW5nX3NpemUgKz0gNTI7IC8qIHNoYWRlcnMgKyBkZWYgc3RhdGUgKi8KIAlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIFZCIElCICovCiAJcmluZ19zaXplICs9IDU7IC8qIGRvbmUgY29weSAqLwogCXJpbmdfc2l6ZSArPSAxMDsgLyogZmVuY2UgZW1pdCBmb3IgZG9uZSBjb3B5ICovCkBAIC02NjAsNyArNjkxLDcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlzZXRfZGVmYXVsdF9zdGF0ZShyZGV2KTsgLyogMzAgKi8KKwlzZXRfZGVmYXVsdF9zdGF0ZShyZGV2KTsgLyogMzYgKi8KIAlzZXRfc2hhZGVycyhyZGV2KTsgLyogMTYgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKaW5kZXggMzZkMzJkOC4uYWZlYzFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKQEAgLTI0MCw2ICsyNDAsNyBAQAogI2RlZmluZQkJRk9SQ0VfRU9WX01BWF9DTEtfQ05UKHgpCQkJKCh4KSA8PCAwKQogI2RlZmluZQkJRk9SQ0VfRU9WX01BWF9SRVpfQ05UKHgpCQkJKCh4KSA8PCAxNikKICNkZWZpbmUgUEFfU0NfTElORV9TVElQUExFCQkJCTB4MjhBMEMKKyNkZWZpbmUJUEFfU1VfTElORV9TVElQUExFX1ZBTFVFCQkJMHg4QTYwCiAjZGVmaW5lCVBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURQkJCTB4OEIxMAogCiAjZGVmaW5lCVNDUkFUQ0hfUkVHMAkJCQkJMHg4NTAwCkBAIC02NTIsNiArNjUzLDcgQEAKICNkZWZpbmUJUEFDS0VUM19ESVNQQVRDSF9ESVJFQ1QJCQkJMHgxNQogI2RlZmluZQlQQUNLRVQzX0RJU1BBVENIX0lORElSRUNUCQkJMHgxNgogI2RlZmluZQlQQUNLRVQzX0lORElSRUNUX0JVRkZFUl9FTkQJCQkweDE3CisjZGVmaW5lCVBBQ0tFVDNfTU9ERV9DT05UUk9MCQkJCTB4MTgKICNkZWZpbmUJUEFDS0VUM19TRVRfUFJFRElDQVRJT04JCQkJMHgyMAogI2RlZmluZQlQQUNLRVQzX1JFR19STVcJCQkJCTB4MjEKICNkZWZpbmUJUEFDS0VUM19DT05EX0VYRUMJCQkJMHgyMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCA0NmRhNTE0Mi4uNWYxNTgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTEwMzEsOCArMTAzMSw4IEBACiAJV1JFRzMyKFJBREVPTl9DUF9DU1FfTU9ERSwKIAkgICAgICAgUkVHX1NFVChSQURFT05fSU5ESVJFQ1QyX1NUQVJULCBpbmRpcmVjdDJfc3RhcnQpIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fSU5ESVJFQ1QxX1NUQVJULCBpbmRpcmVjdDFfc3RhcnQpKTsKLQlXUkVHMzIoMHg3MTgsIDApOwotCVdSRUczMigweDc0NCwgMHgwMDAwNEQ0RCk7CisJV1JFRzMyKFJBREVPTl9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKKwlXUkVHMzIoUkFERU9OX0NQX0NTUV9NT0RFLCAweDAwMDA0RDREKTsKIAlXUkVHMzIoUkFERU9OX0NQX0NTUV9DTlRMLCBSQURFT05fQ1NRX1BSSUJNX0lOREJNKTsKIAlyYWRlb25fcmluZ19zdGFydChyZGV2KTsKIAlyID0gcmFkZW9uX3JpbmdfdGVzdChyZGV2KTsKQEAgLTIzNDcsMTAgKzIzNDcsMTAgQEAKIAogCXRlbXAgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19DTlRMKTsKIAlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJdGVtcCAmPSB+KDE8PDgpOwotCQl0ZW1wIHw9ICgxPDw5KTsKKwkJdGVtcCAmPSB+UkFERU9OX0NGR19WR0FfUkFNX0VOOworCQl0ZW1wIHw9IFJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9IGVsc2UgewotCQl0ZW1wICY9IH4oMTw8OSk7CisJCXRlbXAgJj0gflJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9CiAJV1JFRzMyKFJBREVPTl9DT05GSUdfQ05UTCwgdGVtcCk7CiB9CkBAIC0zNTIyLDcgKzM1MjIsNyBAQAogCWlmIChpIDwgcmRldi0+dXNlY190aW1lb3V0KSB7CiAJCURSTV9JTkZPKCJyaW5nIHRlc3Qgc3VjY2VlZGVkIGluICVkIHVzZWNzXG4iLCBpKTsKIAl9IGVsc2UgewotCQlEUk1fRVJST1IoInJhZGVvbjogcmluZyB0ZXN0IGZhaWxlZCAoc3JhY3RoKDB4JTA0WCk9MHglMDhYKVxuIiwKKwkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNjcmF0Y2goMHglMDRYKT0weCUwOFgpXG4iLAogCQkJICBzY3JhdGNoLCB0bXApOwogCQlyID0gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGNmODYyY2EuLjU1ZmU1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC02OSw2ICs2OSw5IEBACiAJbWIoKTsKIH0KIAorI2RlZmluZSBSMzAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUjMwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCisKIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKQogewogCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucHRyOwpAQCAtNzgsNyArODEsNyBAQAogCX0KIAlhZGRyID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgPj4gOCkgfAogCSAgICAgICAoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCAyNCkgfAotCSAgICAgICAweGM7CisJICAgICAgIFIzMDBfUFRFX1dSSVRFQUJMRSB8IFIzMDBfUFRFX1JFQURBQkxFOwogCS8qIG9uIHg4NiB3ZSB3YW50IHRoaXMgdG8gYmUgQ1BVIGVuZGlhbiwgb24gcG93ZXJwYwogCSAqIG9uIHBvd2VycGMgd2l0aG91dCBIVyBzd2FwcGVycywgaXQnbGwgZ2V0IHN3YXBwZWQgb24gd2F5CiAJICogaW50byBWUkFNIC0gc28gbm8gbmVlZCBmb3IgY3B1X3RvX2xlMzIgb24gVlJBTSB0YWJsZXMgKi8KQEAgLTEzNSw3ICsxMzgsNyBAQAogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9MTywgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0hJLCAwKTsKIAkvKiBDbGVhciBlcnJvciAqLwotCVdSRUczMl9QQ0lFKDB4MTgsIDApOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfRVJST1IsIDApOwogCXRtcCA9IFJSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfRU47CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfVU5NQVBQRURfQUNDRVNTX0RJU0NBUkQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IGMzODczNDYuLjBiNTllZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC05Niw3ICs5Niw3IEBACiAJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CiAJfQogCS8qIGdldCBtYXggbnVtYmVyIG9mIHBpcGVzICovCi0JZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKKwlnYl9waXBlX3NlbGVjdCA9IFJSRUczMihSNDAwX0dCX1BJUEVfU0VMRUNUKTsKIAludW1fcGlwZXMgPSAoKGdiX3BpcGVfc2VsZWN0ID4+IDEyKSAmIDMpICsgMTsKIAogCS8qIFNFIGNoaXBzIGhhdmUgMSBwaXBlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IDNjODY3N2YuLjJjZTgwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC03OSw4ICs3OSw4IEBACiAJCVdSRUczMigweDQxMjgsIDB4RkYpOwogCX0KIAlyNDIwX3BpcGVzX2luaXQocmRldik7Ci0JZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKLQl0bXAgPSBSUkVHMzIoMHgxNzBDKTsKKwlnYl9waXBlX3NlbGVjdCA9IFJSRUczMihSNDAwX0dCX1BJUEVfU0VMRUNUKTsKKwl0bXAgPSBSUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcpOwogCXBpcGVfc2VsZWN0X2N1cnJlbnQgPSAodG1wID4+IDIpICYgMzsKIAl0bXAgPSAoMSA8PCBwaXBlX3NlbGVjdF9jdXJyZW50KSB8CiAJICAgICAgKCgoZ2JfcGlwZV9zZWxlY3QgPj4gOCkgJiAweEYpIDw8IDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBhY2EyMjM2Li42NTA2NzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtOTcsMTIgKzk3LDE2IEBACiBzdGF0aWMgdm9pZCByNjAwX3BjaWVfZ2VuMl9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBnZXQgdGVtcGVyYXR1cmUgaW4gbWlsbGlkZWdyZWVzICovCi11MzIgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7CisJaW50IGFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CiAKLQlyZXR1cm4gdGVtcCAqIDEwMDA7CisJaWYgKHRlbXAgJiAweDEwMCkKKwkJYWN0dWFsX3RlbXAgLT0gMjU2OworCisJcmV0dXJuIGFjdHVhbF90ZW1wICogMTAwMDsKIH0KIAogdm9pZCByNjAwX3BtX2dldF9keW5wbV9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTEyODcsNiArMTI5MSw5IEBACiAJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOwogCXUzMiB0bXA7CiAKKwlpZiAoIShSUkVHMzIoR1JCTV9TVEFUVVMpICYgR1VJX0FDVElWRSkpCisJCXJldHVybiAwOworCiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOwogCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAogCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaAppbmRleCAzM2NkYTAxLi5mODY5ODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCkBAIC04MSw3ICs4MSwxMSBAQAogI2RlZmluZSBSNjAwX01FRElVTV9WSURfTE9XRVJfR1BJT19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIwCiAjZGVmaW5lIFI2MDBfTE9XX1ZJRF9MT1dFUl9HUElPX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MjQKIAotCisjZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMEMKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkUgICAgICAgICAgICAgICAgICAgICgwIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8xNkJJVCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMzJCSVQgICAgICAgICAgICAgICAgICAgKDIgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzY0QklUICAgICAgICAgICAgICAgICAgICgzIDw8IDApCiAKICNkZWZpbmUgUjYwMF9IRFBfTk9OU1VSRkFDRV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjMDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggNzFkMmE1NS4uNTZjNDhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUxNiBsZXZlbCk7CiB2b2lkIHJzNjkwX3BtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgZXZlcmdyZWVuX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnY3NzBfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBzdW1vX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIEZlbmNlcy4KQEAgLTgxMiw4ICs4MTIsNyBAQAogCWZpeGVkMjBfMTIJCXNjbGs7CiAJZml4ZWQyMF8xMgkJbWNsazsKIAlmaXhlZDIwXzEyCQluZWVkZWRfYmFuZHdpZHRoOwotCS8qIFhYWDogdXNlIGEgZGVmaW5lIGZvciBudW0gcG93ZXIgbW9kZXMgKi8KLQlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlIHBvd2VyX3N0YXRlWzhdOworCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnBvd2VyX3N0YXRlOwogCS8qIG51bWJlciBvZiB2YWxpZCBwb3dlciBzdGF0ZXMgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICBudW1fcG93ZXJfc3RhdGVzOwogCWludCAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKaW5kZXggM2ExYjE2MS4uZTc1ZDYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwpAQCAtNzU5LDcgKzc1OSw3IEBACiAJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKLQkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZSwKIAkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKQEAgLTgwNSw3ICs4MDUsNyBAQAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCi0JLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkucmluZ19pYl9leGVjdXRlID0gJmV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUsCiAJLmlycV9zZXQgPSAmZXZlcmdyZWVuX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJmV2ZXJncmVlbl9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC04NDgsNyArODQ4LDcgQEAKIAkuZ2FydF90bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAotCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlLAogCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IGUwMWYwNzcxLi5jNTliZDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0zNTUsNiArMzU1LDcgQEAKIGJvb2wgZXZlcmdyZWVuX2dwdV9pc19sb2NrdXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IGV2ZXJncmVlbl9hc2ljX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgZXZlcmdyZWVuX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7CiBpbnQgZXZlcmdyZWVuX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCXVpbnQ2NF90IHNyY19vZmZzZXQsIHVpbnQ2NF90IGRzdF9vZmZzZXQsCiAJCQl1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDE1NzMyMDIuLjVjMWNjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtMzg3LDE1ICszODcsMTEgQEAKIAkJCSpsaW5lX211eCA9IDB4OTA7CiAJfQogCi0JLyogbWFjIHJ2NjMwICovCi0JaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1ODgpICYmCi0JICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDZiKSAmJgotCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDBhNikpIHsKLQkJaWYgKChzdXBwb3J0ZWRfZGV2aWNlID09IEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSAmJgotCQkgICAgKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkpIHsKLQkJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOwotCQkJKmxpbmVfbXV4ID0gQ09OTkVDVE9SXzdQSU5fRElOX0VOVU1fSUQxOwotCQl9CisJLyogbWFjIHJ2NjMwLCBydjczMCwgb3RoZXJzICovCisJaWYgKChzdXBwb3J0ZWRfZGV2aWNlID09IEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSAmJgorCSAgICAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSkgeworCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjsKKwkJKmxpbmVfbXV4ID0gQ09OTkVDVE9SXzdQSU5fRElOX0VOVU1fSUQxOwogCX0KIAogCS8qIEFTVVMgSEQgMzYwMCBYVCBib2FyZCBsaXN0cyB0aGUgRFZJIHBvcnQgYXMgSERNSSAqLwpAQCAtMTE2NywxNiArMTE2Myw2IEBACiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCQllbHNlCiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gMjAwMDA7Ci0JCX0gZWxzZSBpZiAocDFwbGwtPnBsbF9vdXRfbWluID4gNjQ4MDApIHsKLQkJCS8qIExpbWl0aW5nIHRoZSBwbGwgb3V0cHV0IHJhbmdlIGlzIGEgZ29vZCB0aGluZyBnZW5lcmFsbHkgYXMKLQkJCSAqIGl0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHBsbCBjb21iaW5hdGlvbnMgZm9yIGEgZ2l2ZW4KLQkJCSAqIGZyZXF1ZW5jeSBwcmVzdW1hYmx5IHRvIHRoZSBvbmVzIHRoYXQgd29yayBiZXN0IG9uIGVhY2ggY2FyZC4KLQkJCSAqIEhvd2V2ZXIsIGNlcnRhaW4gZHVhbGxpbmsgRFZJIG1vbml0b3JzIHNlZW0gdG8gbGlrZQotCQkJICogcGxsIGNvbWJpbmF0aW9ucyB0aGF0IHdvdWxkIGJlIGxpbWl0ZWQgYnkgdGhpcyBhdCBsZWFzdCBvbgotCQkJICogcHJlLURDRSAzLjAgcjZ4eCBoYXJkd2FyZS4gIFRoaXMgbWlnaHQgbmVlZCB0byBiZSBhZGp1c3RlZCBwZXIKLQkJCSAqIGZhbWlseS4KLQkJCSAqLwotCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCX0KIAogCQlwMXBsbC0+cGxsX2luX21pbiA9CkBAIC0xOTkxLDYgKzE5NzcsOSBAQAogCW51bV9tb2RlcyA9IHBvd2VyX2luZm8tPmluZm8udWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CiAJaWYgKG51bV9tb2RlcyA+IEFUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLKQogCQludW1fbW9kZXMgPSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSzsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICogbnVtX21vZGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJLyogbGFzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgYXJyYXkgaXMgbG93IHRvIGhpZ2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOwpAQCAtMjM0Miw2ICsyMzMxLDEwIEBACiAJcG93ZXJfaW5mbyA9ICh1bmlvbiBwb3dlcl9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOwogCiAJcmFkZW9uX2F0b21iaW9zX2FkZF9wcGxpYl90aGVybWFsX2NvbnRyb2xsZXIocmRldiwgJnBvd2VyX2luZm8tPnBwbGliLnNUaGVybWFsQ29udHJvbGxlcik7CisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqCisJCQkJICAgICAgIHBvd2VyX2luZm8tPnBwbGliLnVjTnVtU3RhdGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJLyogZmlyc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQsIGZvbGxvd2VkIGJ5IGxvdyB0byBoaWdoICovCiAJZm9yIChpID0gMDsgaSA8IHBvd2VyX2luZm8tPnBwbGliLnVjTnVtU3RhdGVzOyBpKyspIHsKIAkJbW9kZV9pbmRleCA9IDA7CkBAIC0yNDIyLDYgKzI0MTUsMTAgQEAKIAlub25fY2xvY2tfaW5mb19hcnJheSA9IChzdHJ1Y3QgTm9uQ2xvY2tJbmZvQXJyYXkgKikKIAkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKwogCQkgcG93ZXJfaW5mby0+cHBsaWIudXNOb25DbG9ja0luZm9BcnJheU9mZnNldCk7CisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqCisJCQkJICAgICAgIHN0YXRlX2FycmF5LT51Y051bUVudHJpZXMsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKIAlmb3IgKGkgPSAwOyBpIDwgc3RhdGVfYXJyYXktPnVjTnVtRW50cmllczsgaSsrKSB7CiAJCW1vZGVfaW5kZXggPSAwOwogCQlwb3dlcl9zdGF0ZSA9ICh1bmlvbiBwcGxpYl9wb3dlcl9zdGF0ZSAqKSZzdGF0ZV9hcnJheS0+c3RhdGVzW2ldOwpAQCAtMjQ5NSwxOSArMjQ5MiwyMiBAQAogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewotCQkvKiBhZGQgdGhlIGRlZmF1bHQgbW9kZSAqLwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KLQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ucGNpZV9sYW5lcyA9IDE2OwotCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyA9IDA7Ci0JCXN0YXRlX2luZGV4Kys7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAocmRldi0+cG0ucG93ZXJfc3RhdGUpIHsKKwkJCS8qIGFkZCB0aGUgZGVmYXVsdCBtb2RlICovCisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQorCQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0gMTY7CisJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSAwOworCQkJc3RhdGVfaW5kZXgrKzsKKwkJfQogCX0KIAogCXJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMgPSBzdGF0ZV9pbmRleDsKQEAgLTI2MjMsNyArMjYyMyw3IEBACiAJYmlvc18yX3NjcmF0Y2ggJj0gfkFUT01fUzJfVlJJX0JSSUdIVF9FTkFCTEU7CiAKIAkvKiB0ZWxsIHRoZSBiaW9zIG5vdCB0byBoYW5kbGUgbW9kZSBzd2l0Y2hpbmcgKi8KLQliaW9zXzZfc2NyYXRjaCB8PSAoQVRPTV9TNl9BQ0NfQkxPQ0tfRElTUExBWV9TV0lUQ0ggfCBBVE9NX1M2X0FDQ19NT0RFKTsKKwliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19CTE9DS19ESVNQTEFZX1NXSVRDSDsKIAogCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CiAJCVdSRUczMihSNjAwX0JJT1NfMl9TQ1JBVENILCBiaW9zXzJfc2NyYXRjaCk7CkBAIC0yNjc0LDEwICsyNjc0LDEzIEBACiAJZWxzZQogCQliaW9zXzZfc2NyYXRjaCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOwogCi0JaWYgKGxvY2spCisJaWYgKGxvY2spIHsKIAkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9DUklUSUNBTF9TVEFURTsKLQllbHNlCisJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19NT0RFOworCX0gZWxzZSB7CiAJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0NSSVRJQ0FMX1NUQVRFOworCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19NT0RFOworCX0KIAogCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQogCQlXUkVHMzIoUjYwMF9CSU9TXzZfU0NSQVRDSCwgYmlvc182X3NjcmF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDU5MWZjYWUuLmQyN2VmNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTI0NDIsNiArMjQ0MiwxNyBAQAogCiAJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IC0xOwogCisJLyogYWxsb2NhdGUgMiBwb3dlciBzdGF0ZXMgKi8KKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkgeworCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7CisJCXJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMgPSAwOworCisJCXJkZXYtPnBtLmN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXggPSByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4OworCQlyZGV2LT5wbS5jdXJyZW50X2Nsb2NrX21vZGVfaW5kZXggPSAwOworCQlyZXR1cm47CisJfQorCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CiAJCW9mZnNldCA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfUE9XRVJQTEFZX0lORk9fVEFCTEUpOwogCQlpZiAob2Zmc2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDI2MDkxZDYuLjBkNDc4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC04OTEsOSArODkxLDkgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldi0+cGRldik7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDNob3QpOwogCX0KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmFkZW9uX2ZiZGV2X3NldF9zdXNwZW5kKHJkZXYsIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCkBAIC05MDUsMTEgKzkwNSwxMSBAQAogCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2LT5wZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAtMTsKIAl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKQEAgLTkyMCw3ICs5MjAsNyBAQAogCXJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCiAJcmFkZW9uX2ZiZGV2X3NldF9zdXNwZW5kKHJkZXYsIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJLyogcmVzZXQgaHBkIHN0YXRlICovCiAJcmFkZW9uX2hwZF9pbml0KHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGQyNmRhYmYuLjJlZmY5OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC03ODAsNiArNzgwLDExNSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIGF2aXZvICovCitzdGF0aWMgdm9pZCBhdml2b19nZXRfZmJfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgIHUzMiB0YXJnZXRfY2xvY2ssCisJCQkgICAgIHUzMiBwb3N0X2RpdiwKKwkJCSAgICAgdTMyIHJlZl9kaXYsCisJCQkgICAgIHUzMiAqZmJfZGl2LAorCQkJICAgICB1MzIgKmZyYWNfZmJfZGl2KQoreworCXUzMiB0bXAgPSBwb3N0X2RpdiAqIHJlZl9kaXY7CisKKwl0bXAgKj0gdGFyZ2V0X2Nsb2NrOworCSpmYl9kaXYgPSB0bXAgLyBwbGwtPnJlZmVyZW5jZV9mcmVxOworCSpmcmFjX2ZiX2RpdiA9IHRtcCAlIHBsbC0+cmVmZXJlbmNlX2ZyZXE7Cit9CisKK3N0YXRpYyB1MzIgYXZpdm9fZ2V0X3Bvc3RfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgICB1MzIgdGFyZ2V0X2Nsb2NrKQoreworCXUzMiB2Y28sIHBvc3RfZGl2LCB0bXA7CisKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1BPU1RfRElWKQorCQlyZXR1cm4gcGxsLT5wb3N0X2RpdjsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFApIHsKKwkJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX0lTX0xDRCkKKwkJCXZjbyA9IHBsbC0+bGNkX3BsbF9vdXRfbWluOworCQllbHNlCisJCQl2Y28gPSBwbGwtPnBsbF9vdXRfbWluOworCX0gZWxzZSB7CisJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9JU19MQ0QpCisJCQl2Y28gPSBwbGwtPmxjZF9wbGxfb3V0X21heDsKKwkJZWxzZQorCQkJdmNvID0gcGxsLT5wbGxfb3V0X21heDsKKwl9CisKKwlwb3N0X2RpdiA9IHZjbyAvIHRhcmdldF9jbG9jazsKKwl0bXAgPSB2Y28gJSB0YXJnZXRfY2xvY2s7CisKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQKSB7CisJCWlmICh0bXApCisJCQlwb3N0X2RpdisrOworCX0gZWxzZSB7CisJCWlmICghdG1wKQorCQkJcG9zdF9kaXYtLTsKKwl9CisKKwlyZXR1cm4gcG9zdF9kaXY7Cit9CisKKyNkZWZpbmUgTUFYX1RPTEVSQU5DRSAxMAorCit2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgdTMyIGZyZXEsCisJCQkgICAgICB1MzIgKmRvdF9jbG9ja19wLAorCQkJICAgICAgdTMyICpmYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqZnJhY19mYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqcmVmX2Rpdl9wLAorCQkJICAgICAgdTMyICpwb3N0X2Rpdl9wKQoreworCXUzMiB0YXJnZXRfY2xvY2sgPSBmcmVxIC8gMTA7CisJdTMyIHBvc3RfZGl2ID0gYXZpdm9fZ2V0X3Bvc3RfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrKTsKKwl1MzIgcmVmX2RpdiA9IHBsbC0+bWluX3JlZl9kaXY7CisJdTMyIGZiX2RpdiA9IDAsIGZyYWNfZmJfZGl2ID0gMCwgdG1wOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9SRUZfRElWKQorCQlyZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJVikgeworCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwgJmZiX2RpdiwgJmZyYWNfZmJfZGl2KTsKKwkJZnJhY19mYl9kaXYgPSAoMTAwICogZnJhY19mYl9kaXYpIC8gcGxsLT5yZWZlcmVuY2VfZnJlcTsKKwkJaWYgKGZyYWNfZmJfZGl2ID49IDUpIHsKKwkJCWZyYWNfZmJfZGl2IC09IDU7CisJCQlmcmFjX2ZiX2RpdiA9IGZyYWNfZmJfZGl2IC8gMTA7CisJCQlmcmFjX2ZiX2RpdisrOworCQl9CisJCWlmIChmcmFjX2ZiX2RpdiA+PSAxMCkgeworCQkJZmJfZGl2Kys7CisJCQlmcmFjX2ZiX2RpdiA9IDA7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAocmVmX2RpdiA8PSBwbGwtPm1heF9yZWZfZGl2KSB7CisJCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwKKwkJCQkJICZmYl9kaXYsICZmcmFjX2ZiX2Rpdik7CisJCQlpZiAoZnJhY19mYl9kaXYgPj0gKHBsbC0+cmVmZXJlbmNlX2ZyZXEgLyAyKSkKKwkJCQlmYl9kaXYrKzsKKwkJCWZyYWNfZmJfZGl2ID0gMDsKKwkJCXRtcCA9IChwbGwtPnJlZmVyZW5jZV9mcmVxICogZmJfZGl2KSAvIChwb3N0X2RpdiAqIHJlZl9kaXYpOworCQkJdG1wID0gKHRtcCAqIDEwMDAwKSAvIHRhcmdldF9jbG9jazsKKworCQkJaWYgKHRtcCA+ICgxMDAwMCArIE1BWF9UT0xFUkFOQ0UpKQorCQkJCXJlZl9kaXYrKzsKKwkJCWVsc2UgaWYgKHRtcCA+PSAoMTAwMDAgLSBNQVhfVE9MRVJBTkNFKSkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlyZWZfZGl2Kys7CisJCX0KKwl9CisKKwkqZG90X2Nsb2NrX3AgPSAoKHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiBmYl9kaXYgKiAxMCkgKyAocGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZyYWNfZmJfZGl2KSkgLworCQkocmVmX2RpdiAqIHBvc3RfZGl2ICogMTApOworCSpmYl9kaXZfcCA9IGZiX2RpdjsKKwkqZnJhY19mYl9kaXZfcCA9IGZyYWNfZmJfZGl2OworCSpyZWZfZGl2X3AgPSByZWZfZGl2OworCSpwb3N0X2Rpdl9wID0gcG9zdF9kaXY7CisJRFJNX0RFQlVHX0tNUygiJWQsIHBsbCBkaXZpZGVycyAtIGZiOiAlZC4lZCByZWY6ICVkLCBwb3N0ICVkXG4iLAorCQkgICAgICAqZG90X2Nsb2NrX3AsIGZiX2RpdiwgZnJhY19mYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2KTsKK30KKworLyogcHJlLWF2aXZvICovCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJhZGVvbl9kaXYodWludDY0X3QgbiwgdWludDMyX3QgZCkKIHsKIAl1aW50NjRfdCBtb2Q7CkBAIC03OTAsMTMgKzg5OSwxMyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIHJhZGVvbl9jb21wdXRlX3BsbChzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAotCQkJdWludDY0X3QgZnJlcSwKLQkJCXVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCXVpbnQzMl90ICpmYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCXVpbnQzMl90ICpwb3N0X2Rpdl9wKQordm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgICAgdWludDY0X3QgZnJlcSwKKwkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApCiB7CiAJdWludDMyX3QgbWluX3JlZl9kaXYgPSBwbGwtPm1pbl9yZWZfZGl2OwogCXVpbnQzMl90IG1heF9yZWZfZGl2ID0gcGxsLT5tYXhfcmVmX2RpdjsKQEAgLTgyNiw2ICs5MzUsOSBAQAogCQlwbGxfb3V0X21heCA9IHBsbC0+cGxsX291dF9tYXg7CiAJfQogCisJaWYgKHBsbF9vdXRfbWluID4gNjQ4MDApCisJCXBsbF9vdXRfbWluID0gNjQ4MDA7CisKIAlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1JFRl9ESVYpCiAJCW1pbl9yZWZfZGl2ID0gbWF4X3JlZl9kaXYgPSBwbGwtPnJlZmVyZW5jZV9kaXY7CiAJZWxzZSB7CkBAIC04NDksNyArOTYxLDcgQEAKIAkJbWF4X2ZyYWN0aW9uYWxfZmVlZF9kaXYgPSBwbGwtPm1heF9mcmFjX2ZlZWRiYWNrX2RpdjsKIAl9CiAKLQlmb3IgKHBvc3RfZGl2ID0gbWF4X3Bvc3RfZGl2OyBwb3N0X2RpdiA+PSBtaW5fcG9zdF9kaXY7IC0tcG9zdF9kaXYpIHsKKwlmb3IgKHBvc3RfZGl2ID0gbWluX3Bvc3RfZGl2OyBwb3N0X2RpdiA8PSBtYXhfcG9zdF9kaXY7ICsrcG9zdF9kaXYpIHsKIAkJdWludDMyX3QgcmVmX2RpdjsKIAogCQlpZiAoKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVikgJiYgKHBvc3RfZGl2ICYgMSkpCkBAIC05NjUsNiArMTA3NywxMCBAQAogCSpmcmFjX2ZiX2Rpdl9wID0gYmVzdF9mcmFjX2ZlZWRiYWNrX2RpdjsKIAkqcmVmX2Rpdl9wID0gYmVzdF9yZWZfZGl2OwogCSpwb3N0X2Rpdl9wID0gYmVzdF9wb3N0X2RpdjsKKwlEUk1fREVCVUdfS01TKCIlZCAlZCwgcGxsIGRpdmlkZXJzIC0gZmI6ICVkLiVkIHJlZjogJWQsIHBvc3QgJWRcbiIsCisJCSAgICAgIGZyZXEsIGJlc3RfZnJlcSAvIDEwMDAsIGJlc3RfZmVlZGJhY2tfZGl2LCBiZXN0X2ZyYWNfZmVlZGJhY2tfZGl2LAorCQkgICAgICBiZXN0X3JlZl9kaXYsIGJlc3RfcG9zdF9kaXYpOworCiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IGQ1NjgwYTAuLjI3NWIyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC00OCw3ICs0OCw3IEBACiAgKiAtIDIuNS4wIC0gYWRkIGdldCBhY2NlbCAyIHRvIHdvcmsgYXJvdW5kIGRkeCBicmVha2FnZSBmb3IgZXZlcmdyZWVuCiAgKiAtIDIuNi4wIC0gYWRkIHRpbGluZyBjb25maWcgcXVlcnkgKHI2eHgrKSwgYWRkIGluaXRpYWwgSGlaIHN1cHBvcnQgKHIzMDAtPnI1MDApCiAgKiAgIDIuNy4wIC0gZml4dXBzIGZvciByNjAwIDJEIHRpbGluZyBzdXBwb3J0LiAobm8gZXh0ZXJuYWwgQUJJIGNoYW5nZSksIGFkZCBlZyBkeW4gZ3ByIHJlZ3MKLSAqICAgMi44LjAgLSBwYWdlZmxpcCBzdXBwb3J0LCByNTAwIFVTX0ZPUk1BVCByZWdzLiByNTAwIEFSR0IyMTAxMDEwIGNvbG9yYnVmLCByMzAwLT5yNTAwIENNQVNLCisgKiAgIDIuOC4wIC0gcGFnZWZsaXAgc3VwcG9ydCwgcjUwMCBVU19GT1JNQVQgcmVncy4gcjUwMCBBUkdCMjEwMTAxMCBjb2xvcmJ1ZiwgcjMwMC0+cjUwMCBDTUFTSywgY2xvY2sgY3J5c3RhbCBxdWVyeQogICovCiAjZGVmaW5lIEtNU19EUklWRVJfTUFKT1IJMgogI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDhmZDE4NDIuLmQ0YTU0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjogLyogSERNSS1CIGlzIGJhc2ljYWxseSBETC1EVkk7IGFuYWxvZyB3b3JrcyBmaW5lICovCi0JCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSAmJiByYWRlb25fYXVkaW8pIHsKIAkJCS8qIGZpeCBtZSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAlkZWZhdWx0OgotCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgJiYgcmFkZW9uX2F1ZGlvKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCQlpZiAoKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAogCQkgICAgKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7Ci0JCWVsc2UgaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQllbHNlIGlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgJiYgcmFkZW9uX2F1ZGlvKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJaWYgKCFBU0lDX0lTX0RDRTQocmRldikpCiAJCXJldHVybjsKIAotCWlmICgoYWN0aW9uICE9IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09OKSB8fAorCWlmICgoYWN0aW9uICE9IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09OKSAmJgogCSAgICAoYWN0aW9uICE9IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09GRikpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCmluZGV4IGEyODk2NDYuLjllYzgzMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKQEAgLTExMCwxMSArMTEwLDE0IEBACiAKIGludCByYWRlb25faXJxX2ttc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWludCBpOwogCWludCByID0gMDsKIAogCUlOSVRfV09SSygmcmRldi0+aG90cGx1Z193b3JrLCByYWRlb25faG90cGx1Z193b3JrX2Z1bmMpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmlycS5zd19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+bnVtX2NydGM7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmlycS5wZmxpcF9sb2NrW2ldKTsKIAlyID0gZHJtX3ZibGFua19pbml0KHJkZXYtPmRkZXYsIHJkZXYtPm51bV9jcnRjKTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggMjhhNTNlNGEuLjgzODdkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC0yMDEsNiArMjAxLDEwIEBACiAJCX0KIAkJcmFkZW9uX3NldF9maWxwX3JpZ2h0cyhkZXYsICZyZGV2LT5jbWFza19maWxwLCBmaWxwLCAmdmFsdWUpOwogCQlicmVhazsKKwljYXNlIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUToKKwkJLyogcmV0dXJuIGNsb2NrIHZhbHVlIGluIEtIeiAqLworCQl2YWx1ZSA9IHJkZXYtPmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXEgKiAxMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNDMsNiArMjQ3LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKHJkZXYtPmh5cGVyel9maWxwID09IGZpbGVfcHJpdikKIAkJcmRldi0+aHlwZXJ6X2ZpbHAgPSBOVUxMOworCWlmIChyZGV2LT5jbWFza19maWxwID09IGZpbGVfcHJpdikKKwkJcmRldi0+Y21hc2tfZmlscCA9IE5VTEw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCBhY2UyZTYzLi5jZjA2MzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTc3OCw5ICs3NzgsOSBAQAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAoIXVzZV9iaW9zX2RpdnMpIHsKLQkJcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgbW9kZS0+Y2xvY2ssCi0JCQkJICAgJmZyZXEsICZmZWVkYmFja19kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCQkgICAmcmVmZXJlbmNlX2RpdiwgJnBvc3RfZGl2aWRlcik7CisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBtb2RlLT5jbG9jaywKKwkJCQkJICAmZnJlcSwgJmZlZWRiYWNrX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZlcmVuY2VfZGl2LCAmcG9zdF9kaXZpZGVyKTsKIAogCQlmb3IgKHBvc3RfZGl2ID0gJnBvc3RfZGl2c1swXTsgcG9zdF9kaXYtPmRpdmlkZXI7ICsrcG9zdF9kaXYpIHsKIAkJCWlmIChwb3N0X2Rpdi0+ZGl2aWRlciA9PSBwb3N0X2RpdmlkZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggMTJiZGVhYi4uNjc5NGNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVIgKDEgPDwgMTEpCiAjZGVmaW5lIFJBREVPTl9QTExfVVNFX1BPU1RfRElWICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIFJBREVPTl9QTExfSVNfTENEICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQICgxIDw8IDE0KQogCiBzdHJ1Y3QgcmFkZW9uX3BsbCB7CiAJLyogcmVmZXJlbmNlIGZyZXF1ZW5jeSAqLwpAQCAtNTEwLDEzICs1MTEsMjEgQEAKIAkJCQkJICAgICBzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzLAogCQkJCQkgICAgIGludCBpZCwgdTMyIGNsb2NrKTsKIAotZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQkgICAgICAgdWludDY0X3QgZnJlcSwKLQkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJCSAgICAgIHVpbnQ2NF90IGZyZXEsCisJCQkJICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKTsKKworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgICB1MzIgZnJlcSwKKwkJCQkgICAgIHUzMiAqZG90X2Nsb2NrX3AsCisJCQkJICAgICB1MzIgKmZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpyZWZfZGl2X3AsCisJCQkJICAgICB1MzIgKnBvc3RfZGl2X3ApOwogCiBleHRlcm4gdm9pZCByYWRlb25fc2V0dXBfZW5jb2Rlcl9jbG9uZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDNiMWIyYmYuLjJhZWQwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtNDMwLDcgKzQzMCw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRkZXYtPmRldl9wcml2YXRlOwotCXUzMiB0ZW1wOworCWludCB0ZW1wOwogCiAJc3dpdGNoIChyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlKSB7CiAJY2FzZSBUSEVSTUFMX1RZUEVfUlY2WFg6CkBAIC02NDYsNiArNjQ2LDkgQEAKICNlbmRpZgogCX0KIAorCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJa2ZyZWUocmRldi0+cG0ucG93ZXJfc3RhdGUpOworCiAJcmFkZW9uX2h3bW9uX2ZpbmkocmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggM2NkNGRhYy4uZWM5M2E3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTM3NSw2ICszNzUsOCBAQAogI2RlZmluZSBSQURFT05fQ09ORklHX0FQRVJfU0laRSAgICAgICAgICAgICAweDAxMDgKICNkZWZpbmUgUkFERU9OX0NPTkZJR19CT05EUyAgICAgICAgICAgICAgICAgMHgwMGU4CiAjZGVmaW5lIFJBREVPTl9DT05GSUdfQ05UTCAgICAgICAgICAgICAgICAgIDB4MDBlMAorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfUkFNX0VOICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfSU9fRElTICAgICAgICAoMSA8PCA5KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMSAgICAgICAoMCAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMiAgICAgICAoMSAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMyAgICAgICAoMiAgIDw8IDE2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IDU1MTJlNGUuLmM3NjI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIwMyw2ICsyMDMsOSBAQAogCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwogfQogCisjZGVmaW5lIFJTNDAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUlM0MDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQorCiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCiB7CiAJdWludDMyX3QgZW50cnk7CkBAIC0yMTMsNyArMjE2LDcgQEAKIAogCWVudHJ5ID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgJiBQQUdFX01BU0spIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgNCkgfAotCQkweGM7CisJCVJTNDAwX1BURV9XUklURUFCTEUgfCBSUzQwMF9QVEVfUkVBREFCTEU7CiAJZW50cnkgPSBjcHVfdG9fbGUzMihlbnRyeSk7CiAJcmRldi0+Z2FydC50YWJsZS5yYW0ucHRyW2ldID0gZW50cnk7CiAJcmV0dXJuIDA7CkBAIC0yMjYsOCArMjI5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzIoMHgwMTUwKTsKLQkJaWYgKHRtcCAmICgxIDw8IDIpKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fTUNfU1RBVFVTKTsKKwkJaWYgKHRtcCAmIFJBREVPTl9NQ19JRExFKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlEUk1fVURFTEFZKDEpOwpAQCAtMjQxLDcgKzI0NCw3IEBACiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwogCWlmIChyczQwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJzNDAwOiBGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uICUwOHhcbiIsIFJSRUczMigweDE1MCkpOworCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gJTA4eFxuIiwgUlJFRzMyKFJBREVPTl9NQ19TVEFUVVMpKTsKIAl9CiB9CiAKQEAgLTMwMCw5ICszMDMsOSBAQAogCQlzZXFfcHJpbnRmKG0sICJNQ0NGR19BR1BfQkFTRV8yIDB4JTA4eFxuIiwgdG1wKTsKIAkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DQ0ZHX0FHUF9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0FHUF9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7Ci0JCXRtcCA9IFJSRUczMl9NQygweDEwMCk7CisJCXRtcCA9IFJSRUczMl9NQyhSUzY5MF9NQ0NGR19GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0ZCX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKLQkJdG1wID0gUlJFRzMyKDB4MTM0KTsKKwkJdG1wID0gUlJFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIkhEUF9GQl9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7CiAJfSBlbHNlIHsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9BR1BfQkFTRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNWQ1NjlmNC4uNjRiNTdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtNjksMTMgKzY5LDEzIEBACiAJCQkgIElTWU5DX0NQU0NSQVRDSF9JRExFR1VJKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFdBSVRfVU5USUwsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfM0RfSURMRUNMRUFOKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcwQywgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMzEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9EU1RfUElQRV9DT05GSUcsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1BJUEVfQVVUT19DT05GSUcpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoR0JfU0VMRUNULCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChHQl9FTkFCTEUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4NDJDOCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjUwMF9TVV9SRUdfREVTVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IHJkZXYtPm51bV9nYl9waXBlcykgLSAxKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFZBUF9JTkRFWF9PRkZTRVQsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogCX0KIAlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKDB4NDAyQyk7Ci0JdG1wID0gUlJFRzMyKDB4MTcwQyk7CisJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoUjQwMF9HQl9QSVBFX1NFTEVDVCk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKIAlwaXBlX3NlbGVjdF9jdXJyZW50ID0gKHRtcCA+PiAyKSAmIDM7CiAJdG1wID0gKDEgPDwgcGlwZV9zZWxlY3RfY3VycmVudCkgfAogCSAgICAgICgoKGdiX3BpcGVfc2VsZWN0ID4+IDgpICYgMHhGKSA8PCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA0OTFkYzkwLi4yMjExYTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC03OCwxOCArNzgsMjMgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7Ci0JdTMyIGFjdHVhbF90ZW1wID0gMDsKKwlpbnQgYWN0dWFsX3RlbXA7CiAKLQlpZiAoKHRlbXAgPj4gOSkgJiAxKQotCQlhY3R1YWxfdGVtcCA9IDA7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpZiAodGVtcCAmIDB4NDAwKQorCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJZWxzZSBpZiAodGVtcCAmIDB4MjAwKQorCQlhY3R1YWxfdGVtcCA9IDI1NTsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAogdm9pZCBydjc3MF9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCmluZGV4IDA5YWVhNWYuLjcwZTYwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKQEAgLTEsMTEgKzEsMTMgQEAKIGNvbmZpZyBTVFVCX1BPVUxTQk8KIAl0cmlzdGF0ZSAiSW50ZWwgR01BNTAwIFN0dWIgRHJpdmVyIgogCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBORVQgIyBmb3IgVEhFUk1BTAogCSMgUG91bHNibyBzdHViIGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFDUEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3QgQUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaWYgQUNQSQogCXNlbGVjdCBJTlBVVCBpZiBBQ1BJCiAJc2VsZWN0IEFDUElfVklERU8gaWYgQUNQSQorCXNlbGVjdCBUSEVSTUFMIGlmIEFDUEkKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgSW50ZWwgR01BNTAwCiAJICAoUG91bHNibykgaW50ZWdyYXRlZCBncmFwaGljcy4gSWYgTSBpcyBzZWxlY3RlZCwgdGhlIG1vZHVsZSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKaW5kZXggYzM4MGM2NS4uYWNlMmIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwpAQCAtNjM2LDcgKzYzNiw3IEBACiAJCQl2b2lkICgqaXJxX3NldF9zdGF0ZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSwKIAkJCXVuc2lnbmVkIGludCAoKnNldF92Z2FfZGVjb2RlKSh2b2lkICpjb29raWUsIGJvb2wgZGVjb2RlKSkKIHsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldCA9IC1FTk9ERVY7CiAJc3RydWN0IHZnYV9kZXZpY2UgKnZnYWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggY2UwMzcyZjAuLjRjMDc0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKQEAgLTEwNzIsNiArMTA3Miw3IEBACiAJCQlub2RlLT5zZGEuZGV2X2F0dHIuc2hvdyA9IGdycC0+c2hvdzsKIAkJCW5vZGUtPnNkYS5kZXZfYXR0ci5zdG9yZSA9IGdycC0+c3RvcmU7CiAJCQlhdHRyID0gJm5vZGUtPnNkYS5kZXZfYXR0ci5hdHRyOworCQkJc3lzZnNfYXR0cl9pbml0KGF0dHIpOwogCQkJYXR0ci0+bmFtZSA9IG5vZGUtPm5hbWU7CiAJCQlhdHRyLT5tb2RlID0gU19JUlVHTyB8IChncnAtPnN0b3JlID8gU19JV1VTUiA6IDApOwogCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCmluZGV4IDJkNjhjZjMuLmI1ZTg5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKKysrIGIvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGl4Zi5oPgpAQCAtMjIsNiArMjMsMjEgQEAKIAogI2RlZmluZSBBVEtfSElEICJBVEswMTEwIgogCitzdGF0aWMgYm9vbCBuZXdfaWY7Cittb2R1bGVfcGFyYW0obmV3X2lmLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobmV3X2lmLCAiT3ZlcnJpZGUgZGV0ZWN0aW9uIGhldXJpc3RpYyBhbmQgZm9yY2UgdGhlIHVzZSBvZiB0aGUgbmV3IEFUSzAxMTAgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdCBhdGtfZm9yY2VfbmV3X2lmW10gPSB7CisJeworCQkvKiBPbGQgaW50ZXJmYWNlIGhhcyBicm9rZW4gTUNIIHRlbXAgbW9uaXRvcmluZyAqLworCQkuaWRlbnQgPSAiQXN1cyBTYWJlcnRvb3RoIFg1OCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiU0FCRVJUT09USCBYNTgiKQorCQl9CisJfSwKKwl7IH0KK307CisKIC8qIE1pbmltdW0gdGltZSBiZXR3ZWVuIHJlYWRpbmdzLCBlbmZvcmNlZCBpbiBvcmRlciB0byBhdm9pZAogICogaG9nZ2luZyB0aGUgQ1BVLgogICovCkBAIC0xMzAyLDcgKzEzMTgsOSBAQAogCSAqIGFuYWx5c2lzIG9mIG11bHRpcGxlIERTRFRzIGluZGljYXRlcyB0aGF0IHdoZW4gYm90aCBpbnRlcmZhY2VzCiAJICogYXJlIHByZXNlbnQgdGhlIG5ldyBvbmUgKEdHUlAvR0lUTSkgaXMgbm90IGZ1bmN0aW9uYWwuCiAJICovCi0JaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlKQorCWlmIChuZXdfaWYpCisJCWRldl9pbmZvKGRldiwgIk92ZXJyaWRpbmcgaW50ZXJmYWNlIGRldGVjdGlvblxuIik7CisJaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlICYmICFuZXdfaWYpCiAJCWRhdGEtPm9sZF9pbnRlcmZhY2UgPSB0cnVlOwogCWVsc2UgaWYgKGRhdGEtPmVudW1lcmF0ZV9oYW5kbGUgJiYgZGF0YS0+cmVhZF9oYW5kbGUgJiYKIAkJCWRhdGEtPndyaXRlX2hhbmRsZSkKQEAgLTE0MjAsNiArMTQzOCw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCisJaWYgKGRtaV9jaGVja19zeXN0ZW0oYXRrX2ZvcmNlX25ld19pZikpCisJCW5ld19pZiA9IHRydWU7CisKIAlyZXQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmF0a19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXByX2luZm8oImFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKaW5kZXggMWI2NzRiNy4uZDgwNWU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYworKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCkBAIC05NTcsNyArOTU3LDcgQEAKIAogCS8qIGJhaWwgaWYgd2UgZGlkIG5vdCBnZXQgYW4gSVJRIGZyb20gdGhlIGJ1cyBsYXllciAqLwogCWlmICghZGV2LT5pcnEpIHsKLQkJcHJfZXJyKCJObyBJUlEuIERpc2FibGluZyAvZGV2L2ZyZWVmYWxsXG4iKTsKKwkJcHJfZGVidWcoIk5vIElSUS4gRGlzYWJsaW5nIC9kZXYvZnJlZWZhbGxcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCmluZGV4IDdhY2IzMmUuLjFmYTA5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKKysrIGIvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJY2xvY2tldmVudHNfbm90aWZ5KHJlYXNvbiwgJmNwdSk7CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IHNldHVwX2Jyb2FkY2FzdF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAorc3RhdGljIGludCBzZXR1cF9icm9hZGNhc3RfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKIAkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJaW50IGhvdGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CkBAIC0yNzMsMTUgKzI3MywxMSBAQAogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaG90Y3B1LCBfX3NldHVwX2Jyb2FkY2FzdF90aW1lciwKIAkJCSh2b2lkICopdHJ1ZSwgMSk7CiAJCWJyZWFrOwotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGhvdGNwdSwgX19zZXR1cF9icm9hZGNhc3RfdGltZXIsCi0JCQkodm9pZCAqKWZhbHNlLCAxKTsKLQkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBzZXR1cF9icm9hZGNhc3Rfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNldHVwX2Jyb2FkY2FzdF9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IHNldHVwX2Jyb2FkY2FzdF9jcHVocF9ub3RpZnksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCBlMzhiZTFiYy4uZmJiZmEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCiAJaWJfdW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKCZzYV9kZXYtPmV2ZW50X2hhbmRsZXIpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrcXVldWUoaWJfd3EpOwogCiAJZm9yIChpID0gMDsgaSA8PSBzYV9kZXYtPmVuZF9wb3J0IC0gc2FfZGV2LT5zdGFydF9wb3J0OyArK2kpIHsKIAkJaWYgKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihkZXZpY2UsIGkgKyAxKSA9PSBJQl9MSU5LX0xBWUVSX0lORklOSUJBTkQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwppbmRleCBjYTEyYWNmLi5lYzFlOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCkBAIC02MzYsNiArNjM2LDE2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB1Y21hX2NvcHlfaXdfcm91dGUoc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3JvdXRlX3Jlc3AgKnJlc3AsCisJCQkgICAgICAgc3RydWN0IHJkbWFfcm91dGUgKnJvdXRlKQoreworCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCWRldl9hZGRyID0gJnJvdXRlLT5hZGRyLmRldl9hZGRyOworCXJkbWFfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmcmVzcC0+aWJfcm91dGVbMF0uZGdpZCk7CisJcmRtYV9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZyZXNwLT5pYl9yb3V0ZVswXS5zZ2lkKTsKK30KKwogc3RhdGljIHNzaXplX3QgdWNtYV9xdWVyeV9yb3V0ZShzdHJ1Y3QgdWNtYV9maWxlICpmaWxlLAogCQkJCWNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKIAkJCQlpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKQEAgLTY3MCw4ICs2ODAsMTAgQEAKIAogCXJlc3Aubm9kZV9ndWlkID0gKF9fZm9yY2UgX191NjQpIGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV9ndWlkOwogCXJlc3AucG9ydF9udW0gPSBjdHgtPmNtX2lkLT5wb3J0X251bTsKLQlpZiAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoY3R4LT5jbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUpID09IFJETUFfVFJBTlNQT1JUX0lCKSB7Ci0JCXN3aXRjaCAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGN0eC0+Y21faWQtPmRldmljZSwgY3R4LT5jbV9pZC0+cG9ydF9udW0pKSB7CisJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChjdHgtPmNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgorCQlzd2l0Y2ggKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihjdHgtPmNtX2lkLT5kZXZpY2UsCisJCQljdHgtPmNtX2lkLT5wb3J0X251bSkpIHsKIAkJY2FzZSBJQl9MSU5LX0xBWUVSX0lORklOSUJBTkQ6CiAJCQl1Y21hX2NvcHlfaWJfcm91dGUoJnJlc3AsICZjdHgtPmNtX2lkLT5yb3V0ZSk7CiAJCQlicmVhazsKQEAgLTY4MSw2ICs2OTMsMTIgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCXVjbWFfY29weV9pd19yb3V0ZSgmcmVzcCwgJmN0eC0+Y21faWQtPnJvdXRlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCmluZGV4IDljZTc4MTliLi4yZWM3MTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjMl92cV9yZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAocikgewogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyLT53YWl0X29iamVjdCk7Ci0JCXItPnJlcGx5X21zZyA9ICh1NjQpIE5VTEw7CisJCXItPnJlcGx5X21zZyA9IDA7CiAJCXItPmV2ZW50ID0gMDsKIAkJci0+Y21faWQgPSBOVUxMOwogCQlyLT5xcCA9IE5VTEw7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAqLwogdm9pZCB2cV9yZXFfZnJlZShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcikKIHsKLQlyLT5yZXBseV9tc2cgPSAodTY0KSBOVUxMOworCXItPnJlcGx5X21zZyA9IDA7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJlZmNudCkpIHsKIAkJa2ZyZWUocik7CiAJfQpAQCAtMTUxLDcgKzE1MSw3IEBACiB2b2lkIHZxX3JlcV9wdXQoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl92cV9yZXEgKnIpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJlZmNudCkpIHsKLQkJaWYgKHItPnJlcGx5X21zZyAhPSAodTY0KSBOVUxMKQorCQlpZiAoci0+cmVwbHlfbXNnICE9IDApCiAJCQl2cV9yZXBidWZfZnJlZShjMmRldiwKIAkJCQkgICAgICAgKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIHItPnJlcGx5X21zZyk7CiAJCWtmcmVlKHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwppbmRleCAwZGM2MmIxLi44YjAwZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJCQkJCSAgMTYpKSB8IEZXX1dSX0ZMT1dJRChlcC0+aHd0aWQpKTsKIAogCWZsb3djLT5tbmVtdmFsWzBdLm1uZW1vbmljID0gRldfRkxPV0NfTU5FTV9QRk5WRk47Ci0JZmxvd2MtPm1uZW12YWxbMF0udmFsID0gY3B1X3RvX2JlMzIoMCk7CisJZmxvd2MtPm1uZW12YWxbMF0udmFsID0gY3B1X3RvX2JlMzIoUENJX0ZVTkMoZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5wZGV2LT5kZXZmbikgPDwgOCk7CiAJZmxvd2MtPm1uZW12YWxbMV0ubW5lbW9uaWMgPSBGV19GTE9XQ19NTkVNX0NIOwogCWZsb3djLT5tbmVtdmFsWzFdLnZhbCA9IGNwdV90b19iZTMyKGVwLT50eF9jaGFuKTsKIAlmbG93Yy0+bW5lbXZhbFsyXS5tbmVtb25pYyA9IEZXX0ZMT1dDX01ORU1fUE9SVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKaW5kZXggMjA4MDA5MC4uNGYwYmUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CiAJCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0ZCTUlOKDIpIHwKLQkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMykgfAorCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgyKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRVFTSVpFKGVxc2l6ZSkpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCVZfRldfUklfUkVTX1dSX0RDQUVOKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRENBQ1BVKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAotCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgzKSB8CisJCVZfRldfUklfUkVTX1dSX0ZCTUFYKDIpIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0goMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9FUVNJWkUoZXFzaXplKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNTBjY2ViMy4uYjAxODA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtNjIzLDcgKzYyMyw2IEBACiAJdTggaWJtYWxmdXNlc25hcDsKIAlzdHJ1Y3QgcWliX3FzZnBfZGF0YSBxc2ZwX2RhdGE7CiAJY2hhciBlcG1zZ2J1ZlsxOTJdOyAvKiBmb3IgcG9ydCBlcnJvciBpbnRlcnJ1cHQgbXNnIGJ1ZmZlciAqLwotCXU4IGJvdW5jZWQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTE4ODEsMjMgKzE4ODAsNyBAQAogCQkgICAgSUJfUEhZU1BPUlRTVEFURV9ESVNBQkxFRCkKIAkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAogCQkJICAgICAgIFFMT0dJQ19JQl9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUpOwotCQllbHNlIHsKLQkJCXUzMiBsc3RhdGU7Ci0JCQkvKgotCQkJICogV2UgbmVlZCB0aGUgY3VycmVudCBsb2dpY2FsIGxpbmsgc3RhdGUgYmVmb3JlCi0JCQkgKiBsZmxhZ3MgYXJlIHNldCBpbiBoYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQuCi0JCQkgKi8KLQkJCWxzdGF0ZSA9IHFpYl83MzIyX2libGlua19zdGF0ZShpYmNzKTsKLQotCQkJaWYgKElTX1FNSChkZCkgJiYgIXBwZC0+Y3BzcGVjLT5ib3VuY2VkICYmCi0JCQkgICAgbHRzdGF0ZSA9PSBJQl9QSFlTUE9SVFNUQVRFX0xJTktVUCAmJgotCQkJICAgIChsc3RhdGUgPj0gSUJfUE9SVF9JTklUICYmCi0JCQkJbHN0YXRlIDw9IElCX1BPUlRfQUNUSVZFKSkgewotCQkJCXBwZC0+Y3BzcGVjLT5ib3VuY2VkID0gMTsKLQkJCQlxaWJfNzMyMl9zZXRfaWJfY2ZnKHBwZCwgUUlCX0lCX0NGR19MU1RBVEUsCi0JCQkJCUlCX0xJTktDTURfRE9XTiB8IElCX0xJTktJTklUQ01EX1BPTEwpOwotCQkJfQotCisJCWVsc2UKIAkJCS8qCiAJCQkgKiBTaW5jZSBnb2luZyBpbnRvIGEgcmVjb3Zlcnkgc3RhdGUgY2F1c2VzIHRoZSBsaW5rCiAJCQkgKiBzdGF0ZSB0byBnbyBkb3duIGFuZCBzaW5jZSByZWNvdmVyeSBpcyB0cmFuc2l0b3J5LApAQCAtMTkxMSw3ICsxODk0LDYgQEAKIAkJCSAgICBsdHN0YXRlICE9IElCX1BIWVNQT1JUU1RBVEVfUkVDT1ZFUllfV0FJVFJNVCAmJgogCQkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9JRExFKQogCQkJCXFpYl9oYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQocHBkLCBpYmNzKTsKLQkJfQogCX0KIAlpZiAoKm1zZyAmJiBpc2VycikKIAkJcWliX2Rldl9wb3J0ZXJyKGRkLCBwcGQtPnBvcnQsICIlcyBlcnJvclxuIiwgbXNnKTsKQEAgLTIzODEsNiArMjM2MywxMSBAQAogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfcmN2Y3RybCwgcHBkLT5wX3JjdmN0cmwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5jc3BlYy0+cmN2bW9kX2xvY2ssIGZsYWdzKTsKIAorCS8qIEhvbGQgdGhlIGxpbmsgc3RhdGUgbWFjaGluZSBmb3IgbWV6eiBib2FyZHMgKi8KKwlpZiAoSVNfUU1IKGRkKSB8fCBJU19RTUUoZGQpKQorCQlxaWJfc2V0X2liXzczMjJfbHN0YXRlKHBwZCwgMCwKKwkJCQkgICAgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7CisKIAkvKiBBbHNvIGVuYWJsZSBJQlNUQVRVU0NIRyBpbnRlcnJ1cHQuICAqLwogCXZhbCA9IHFpYl9yZWFkX2tyZWdfcG9ydChwcGQsIGtycF9lcnJtYXNrKTsKIAlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX2Vycm1hc2ssCkBAIC01NzAyLDYgKzU2ODksMTEgQEAKIAkJCQlwcGQtPmNwc3BlYy0+aDFfdmFsID0gaDE7CiAJCQkvKiBub3cgY2hhbmdlIHRoZSBJQkMgYW5kIHNlcmRlcywgb3ZlcnJpZGluZyBnZW5lcmljICovCiAJCQlpbml0X3R4ZGRzX3RhYmxlKHBwZCwgMSk7CisJCQkvKiBSZS1lbmFibGUgdGhlIHBoeXNpY2FsIHN0YXRlIG1hY2hpbmUgb24gbWV6eiBib2FyZHMKKwkJCSAqIG5vdyB0aGF0IHRoZSBjb3JyZWN0IHNldHRpbmdzIGhhdmUgYmVlbiBzZXQuICovCisJCQlpZiAoSVNfUU1IKGRkKSB8fCBJU19RTUUoZGQpKQorCQkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAorCQkJCQkgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfU0xFRVApOwogCQkJYW55Kys7CiAJCX0KIAkJaWYgKCpueHQgPT0gJ1xuJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCA0MTc1MDczLi5jN2E5MjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0zNDMsNiArMzQzLDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBubWstc2tlLWtleXBhZC4KIAorY29uZmlnIEtFWUJPQVJEX1RFR1JBCisJdHJpc3RhdGUgIk5WSURJQSBUZWdyYSBpbnRlcm5hbCBtYXRyaXgga2V5Ym9hcmQgY29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9URUdSQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgbWF0cml4IGtleWJvYXJkIGNvbm5lY3RlZCBkaXJlY3RseQorCSAgdG8gdGhlIGludGVybmFsIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gVGVncmEgU29Dcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGVncmEta2JjLgorCiBjb25maWcgS0VZQk9BUkRfT1BFTkNPUkVTCiAJdHJpc3RhdGUgIk9wZW5Db3JlcyBLZXlib2FyZCBDb250cm9sbGVyIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCmluZGV4IDRlNTU3MWIuLjQ2OGM2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQAogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZKQkJKz0gc3Rvd2F3YXkubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NVTktCRCkJCSs9IHN1bmtiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVEMzNTg5WCkJCSs9IHRjMzU4OXgta2V5cGFkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9URUdSQSkJCSs9IHRlZ3JhLWtiYy5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVE5FVFYxMDdYKQkrPSB0bmV0djEwN3gta2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKQkJKz0gdHdsNDAzMF9rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1hUS0JEKQkJKz0geHRrYmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggNjA2OWFiZS4uZWIzMDA2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uID0gYmRhdGEtPmJ1dHRvbjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGJkYXRhLT5pbnB1dDsKIAl1bnNpZ25lZCBpbnQgdHlwZSA9IGJ1dHRvbi0+dHlwZSA/OiBFVl9LRVk7Ci0JaW50IHN0YXRlID0gKGdwaW9fZ2V0X3ZhbHVlKGJ1dHRvbi0+Z3BpbykgPyAxIDogMCkgXiBidXR0b24tPmFjdGl2ZV9sb3c7CisJaW50IHN0YXRlID0gKGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGJ1dHRvbi0+Z3BpbykgPyAxIDogMCkgXiBidXR0b24tPmFjdGl2ZV9sb3c7CiAKIAlpbnB1dF9ldmVudChpbnB1dCwgdHlwZSwgYnV0dG9uLT5jb2RlLCAhIXN0YXRlKTsKIAlpbnB1dF9zeW5jKGlucHV0KTsKQEAgLTQxMCw4ICs0MTAsOCBAQAogCWlmICghYnV0dG9uLT5jYW5fZGlzYWJsZSkKIAkJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAKLQllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgaXJxZmxhZ3MsIGRlc2MsIGJkYXRhKTsKLQlpZiAoZXJyb3IpIHsKKwllcnJvciA9IHJlcXVlc3RfYW55X2NvbnRleHRfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgaXJxZmxhZ3MsIGRlc2MsIGJkYXRhKTsKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGNsYWltIGlycSAlZDsgZXJyb3IgJWRcbiIsCiAJCQlpcnEsIGVycm9yKTsKIAkJZ290byBmYWlsMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGVncmEta2JjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDcxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jCkBAIC0wLDAgKzEsNzI3IEBACisvKgorICogS2V5Ym9hcmQgY2xhc3MgaW5wdXQgZHJpdmVyIGZvciB0aGUgTlZJRElBIFRlZ3JhIFNvQyBpbnRlcm5hbCBtYXRyaXgKKyAqIGtleWJvYXJkIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG1hY2gvY2xrLmg+CisjaW5jbHVkZSA8bWFjaC9rYmMuaD4KKworI2RlZmluZSBLQkNfTUFYX0RFQk9VTkNFX0NOVAkweDNmZnUKKworLyogS0JDIHJvdyBzY2FuIHRpbWUgYW5kIGRlbGF5IGZvciBiZWdpbm5pbmcgdGhlIHJvdyBzY2FuLiAqLworI2RlZmluZSBLQkNfUk9XX1NDQU5fVElNRQkxNgorI2RlZmluZSBLQkNfUk9XX1NDQU5fRExZCTUKKworLyogS0JDIHVzZXMgYSAzMktIeiBjbG9jayBzbyBhIGN5Y2xlID0gMS8zMktoeiAqLworI2RlZmluZSBLQkNfQ1lDTEVfVVNFQwkzMgorCisvKiBLQkMgUmVnaXN0ZXJzICovCisKKy8qIEtCQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtCQ19DT05UUk9MXzAJMHgwCisjZGVmaW5lIEtCQ19GSUZPX1RIX0NOVF9TSElGVChjbnQpCShjbnQgPDwgMTQpCisjZGVmaW5lIEtCQ19ERUJPVU5DRV9DTlRfU0hJRlQoY250KQkoY250IDw8IDQpCisjZGVmaW5lIEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTgkoMSA8PCAzKQorI2RlZmluZSBLQkNfQ09OVFJPTF9LQkNfRU4JCSgxIDw8IDApCisKKy8qIEtCQyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS0JDX0lOVF8wCTB4NAorI2RlZmluZSBLQkNfSU5UX0ZJRk9fQ05UX0lOVF9TVEFUVVMJKDEgPDwgMikKKworI2RlZmluZSBLQkNfUk9XX0NGRzBfMAkweDgKKyNkZWZpbmUgS0JDX0NPTF9DRkcwXzAJMHgxOAorI2RlZmluZSBLQkNfSU5JVF9ETFlfMAkweDI4CisjZGVmaW5lIEtCQ19SUFRfRExZXzAJMHgyYworI2RlZmluZSBLQkNfS1BfRU5UMF8wCTB4MzAKKyNkZWZpbmUgS0JDX0tQX0VOVDFfMAkweDM0CisjZGVmaW5lIEtCQ19ST1cwX01BU0tfMAkweDM4CisKKyNkZWZpbmUgS0JDX1JPV19TSElGVAkzCisKK3N0cnVjdCB0ZWdyYV9rYmMgeworCXZvaWQgX19pb21lbSAqbW1pbzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IHdha2VfZW5hYmxlX3Jvd3M7CisJdW5zaWduZWQgaW50IHdha2VfZW5hYmxlX2NvbHM7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludCByZXBvbGxfZGx5OworCXVuc2lnbmVkIGxvbmcgY3BfZGx5X2ppZmZpZXM7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlW0tCQ19NQVhfS0VZXTsKKwl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X2tleXNbS0JDX01BWF9LUEVOVF07CisJdW5zaWduZWQgaW50IG51bV9wcmVzc2VkX2tleXM7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworc3RhdGljIGNvbnN0IHUzMiB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMiwgS0VZX1cpLAorCUtFWSgwLCAzLCBLRVlfUyksCisJS0VZKDAsIDQsIEtFWV9BKSwKKwlLRVkoMCwgNSwgS0VZX1opLAorCUtFWSgwLCA3LCBLRVlfRk4pLAorCisJS0VZKDEsIDcsIEtFWV9MRUZUTUVUQSksCisKKwlLRVkoMiwgNiwgS0VZX1JJR0hUQUxUKSwKKwlLRVkoMiwgNywgS0VZX0xFRlRBTFQpLAorCisJS0VZKDMsIDAsIEtFWV81KSwKKwlLRVkoMywgMSwgS0VZXzQpLAorCUtFWSgzLCAyLCBLRVlfUiksCisJS0VZKDMsIDMsIEtFWV9FKSwKKwlLRVkoMywgNCwgS0VZX0YpLAorCUtFWSgzLCA1LCBLRVlfRCksCisJS0VZKDMsIDYsIEtFWV9YKSwKKworCUtFWSg0LCAwLCBLRVlfNyksCisJS0VZKDQsIDEsIEtFWV82KSwKKwlLRVkoNCwgMiwgS0VZX1QpLAorCUtFWSg0LCAzLCBLRVlfSCksCisJS0VZKDQsIDQsIEtFWV9HKSwKKwlLRVkoNCwgNSwgS0VZX1YpLAorCUtFWSg0LCA2LCBLRVlfQyksCisJS0VZKDQsIDcsIEtFWV9TUEFDRSksCisKKwlLRVkoNSwgMCwgS0VZXzkpLAorCUtFWSg1LCAxLCBLRVlfOCksCisJS0VZKDUsIDIsIEtFWV9VKSwKKwlLRVkoNSwgMywgS0VZX1kpLAorCUtFWSg1LCA0LCBLRVlfSiksCisJS0VZKDUsIDUsIEtFWV9OKSwKKwlLRVkoNSwgNiwgS0VZX0IpLAorCUtFWSg1LCA3LCBLRVlfQkFDS1NMQVNIKSwKKworCUtFWSg2LCAwLCBLRVlfTUlOVVMpLAorCUtFWSg2LCAxLCBLRVlfMCksCisJS0VZKDYsIDIsIEtFWV9PKSwKKwlLRVkoNiwgMywgS0VZX0kpLAorCUtFWSg2LCA0LCBLRVlfTCksCisJS0VZKDYsIDUsIEtFWV9LKSwKKwlLRVkoNiwgNiwgS0VZX0NPTU1BKSwKKwlLRVkoNiwgNywgS0VZX00pLAorCisJS0VZKDcsIDEsIEtFWV9FUVVBTCksCisJS0VZKDcsIDIsIEtFWV9SSUdIVEJSQUNFKSwKKwlLRVkoNywgMywgS0VZX0VOVEVSKSwKKwlLRVkoNywgNywgS0VZX01FTlUpLAorCisJS0VZKDgsIDQsIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoOCwgNSwgS0VZX0xFRlRTSElGVCksCisKKwlLRVkoOSwgNSwgS0VZX1JJR0hUQ1RSTCksCisJS0VZKDksIDcsIEtFWV9MRUZUQ1RSTCksCisKKwlLRVkoMTEsIDAsIEtFWV9MRUZUQlJBQ0UpLAorCUtFWSgxMSwgMSwgS0VZX1ApLAorCUtFWSgxMSwgMiwgS0VZX0FQT1NUUk9QSEUpLAorCUtFWSgxMSwgMywgS0VZX1NFTUlDT0xPTiksCisJS0VZKDExLCA0LCBLRVlfU0xBU0gpLAorCUtFWSgxMSwgNSwgS0VZX0RPVCksCisKKwlLRVkoMTIsIDAsIEtFWV9GMTApLAorCUtFWSgxMiwgMSwgS0VZX0Y5KSwKKwlLRVkoMTIsIDIsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgxMiwgMywgS0VZXzMpLAorCUtFWSgxMiwgNCwgS0VZXzIpLAorCUtFWSgxMiwgNSwgS0VZX1VQKSwKKwlLRVkoMTIsIDYsIEtFWV9QUklOVCksCisJS0VZKDEyLCA3LCBLRVlfUEFVU0UpLAorCisJS0VZKDEzLCAwLCBLRVlfSU5TRVJUKSwKKwlLRVkoMTMsIDEsIEtFWV9ERUxFVEUpLAorCUtFWSgxMywgMywgS0VZX1BBR0VVUCksCisJS0VZKDEzLCA0LCBLRVlfUEFHRURPV04pLAorCUtFWSgxMywgNSwgS0VZX1JJR0hUKSwKKwlLRVkoMTMsIDYsIEtFWV9ET1dOKSwKKwlLRVkoMTMsIDcsIEtFWV9MRUZUKSwKKworCUtFWSgxNCwgMCwgS0VZX0YxMSksCisJS0VZKDE0LCAxLCBLRVlfRjEyKSwKKwlLRVkoMTQsIDIsIEtFWV9GOCksCisJS0VZKDE0LCAzLCBLRVlfUSksCisJS0VZKDE0LCA0LCBLRVlfRjQpLAorCUtFWSgxNCwgNSwgS0VZX0YzKSwKKwlLRVkoMTQsIDYsIEtFWV8xKSwKKwlLRVkoMTQsIDcsIEtFWV9GNyksCisKKwlLRVkoMTUsIDAsIEtFWV9FU0MpLAorCUtFWSgxNSwgMSwgS0VZX0dSQVZFKSwKKwlLRVkoMTUsIDIsIEtFWV9GNSksCisJS0VZKDE1LCAzLCBLRVlfVEFCKSwKKwlLRVkoMTUsIDQsIEtFWV9GMSksCisJS0VZKDE1LCA1LCBLRVlfRjIpLAorCUtFWSgxNSwgNiwgS0VZX0NBUFNMT0NLKSwKKwlLRVkoMTUsIDcsIEtFWV9GNiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcCksCit9OworCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X3JlbGVhc2VkX2tleXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkJCSAgIHVuc2lnbmVkIHNob3J0IG9sZF9rZXljb2Rlc1tdLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgb2xkX251bV9rZXlzLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBuZXdfa2V5Y29kZXNbXSwKKwkJCQkJICAgdW5zaWduZWQgaW50IG5ld19udW1fa2V5cykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfbnVtX2tleXM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgbmV3X251bV9rZXlzOyBqKyspCisJCQlpZiAob2xkX2tleWNvZGVzW2ldID09IG5ld19rZXljb2Rlc1tqXSkKKwkJCQlicmVhazsKKworCQlpZiAoaiA9PSBuZXdfbnVtX2tleXMpCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBvbGRfa2V5Y29kZXNbaV0sIDApOworCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3JlcG9ydF9wcmVzc2VkX2tleXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkJCSAgdW5zaWduZWQgY2hhciBzY2FuY29kZXNbXSwKKwkJCQkJICB1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tdLAorCQkJCQkgIHVuc2lnbmVkIGludCBudW1fcHJlc3NlZF9rZXlzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wcmVzc2VkX2tleXM7IGkrKykgeworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGVzW2ldKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZXNbaV0sIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3JlcG9ydF9rZXlzKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwl1bnNpZ25lZCBjaGFyIHNjYW5jb2Rlc1tLQkNfTUFYX0tQRU5UXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tLQkNfTUFYX0tQRU5UXTsKKwl1MzIgdmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbnVtX2Rvd24gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IEtCQ19NQVhfS1BFTlQ7IGkrKykgeworCQlpZiAoKGkgJSA0KSA9PSAwKQorCQkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0tQX0VOVDBfMCArIGkpOworCisJCWlmICh2YWwgJiAweDgwKSB7CisJCQl1bnNpZ25lZCBpbnQgY29sID0gdmFsICYgMHgwNzsKKwkJCXVuc2lnbmVkIGludCByb3cgPSAodmFsID4+IDMpICYgMHgwZjsKKwkJCXVuc2lnbmVkIGNoYXIgc2NhbmNvZGUgPQorCQkJCU1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIEtCQ19ST1dfU0hJRlQpOworCisJCQlzY2FuY29kZXNbbnVtX2Rvd25dID0gc2NhbmNvZGU7CisJCQlrZXljb2Rlc1tudW1fZG93bisrXSA9IGtiYy0+a2V5Y29kZVtzY2FuY29kZV07CisJCX0KKworCQl2YWwgPj49IDg7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCisJdGVncmFfa2JjX3JlcG9ydF9yZWxlYXNlZF9rZXlzKGtiYy0+aWRldiwKKwkJCQkgICAgICAga2JjLT5jdXJyZW50X2tleXMsIGtiYy0+bnVtX3ByZXNzZWRfa2V5cywKKwkJCQkgICAgICAga2V5Y29kZXMsIG51bV9kb3duKTsKKwl0ZWdyYV9rYmNfcmVwb3J0X3ByZXNzZWRfa2V5cyhrYmMtPmlkZXYsIHNjYW5jb2Rlcywga2V5Y29kZXMsIG51bV9kb3duKTsKKwlpbnB1dF9zeW5jKGtiYy0+aWRldik7CisKKwltZW1jcHkoa2JjLT5jdXJyZW50X2tleXMsIGtleWNvZGVzLCBzaXplb2Yoa2JjLT5jdXJyZW50X2tleXMpKTsKKwlrYmMtPm51bV9wcmVzc2VkX2tleXMgPSBudW1fZG93bjsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX2tleXByZXNzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSAoc3RydWN0IHRlZ3JhX2tiYyAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCXVuc2lnbmVkIGludCBpOworCisJdmFsID0gKHJlYWRsKGtiYy0+bW1pbyArIEtCQ19JTlRfMCkgPj4gNCkgJiAweGY7CisJaWYgKHZhbCkgeworCQl1bnNpZ25lZCBsb25nIGRseTsKKworCQl0ZWdyYV9rYmNfcmVwb3J0X2tleXMoa2JjKTsKKworCQkvKgorCQkgKiBJZiBtb3JlIHRoYW4gb25lIGtleXMgYXJlIHByZXNzZWQgd2UgbmVlZCBub3Qgd2FpdAorCQkgKiBmb3IgdGhlIHJlcG9sbCBkZWxheS4KKwkJICovCisJCWRseSA9ICh2YWwgPT0gMSkgPyBrYmMtPnJlcG9sbF9kbHkgOiAxOworCQltb2RfdGltZXIoJmtiYy0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRseSkpOworCX0gZWxzZSB7CisJCS8qIFJlbGVhc2UgYW55IHByZXNzZWQga2V5cyBhbmQgZXhpdCB0aGUgcG9sbGluZyBsb29wICovCisJCWZvciAoaSA9IDA7IGkgPCBrYmMtPm51bV9wcmVzc2VkX2tleXM7IGkrKykKKwkJCWlucHV0X3JlcG9ydF9rZXkoa2JjLT5pZGV2LCBrYmMtPmN1cnJlbnRfa2V5c1tpXSwgMCk7CisJCWlucHV0X3N5bmMoa2JjLT5pZGV2KTsKKworCQlrYmMtPm51bV9wcmVzc2VkX2tleXMgPSAwOworCisJCS8qIEFsbCBrZXlzIGFyZSByZWxlYXNlZCBzbyBlbmFibGUgdGhlIGtleXByZXNzIGludGVycnVwdCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCQl2YWwgfD0gS0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOworCQl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2JjLT5sb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGVncmFfa2JjX2lzcihpbnQgaXJxLCB2b2lkICphcmdzKQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IGFyZ3M7CisJdTMyIHZhbCwgY3RsOworCisJLyoKKwkgKiBVbnRpbCBhbGwga2V5cyBhcmUgcmVsZWFzZWQsIGRlZmVyIGZ1cnRoZXIgcHJvY2Vzc2luZyB0bworCSAqIHRoZSBwb2xsaW5nIGxvb3AgaW4gdGVncmFfa2JjX2tleXByZXNzX3RpbWVyCisJICovCisJY3RsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJY3RsICY9IH5LQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU47CisJd3JpdGVsKGN0bCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisKKwkvKgorCSAqIFF1aWNrbHkgYmFpbCBvdXQgJiByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZSBmaWZvIHRocmVzaG9sZAorCSAqIGNvdW50IGludGVycnVwdCB3YXNuJ3QgdGhlIGludGVycnVwdCBzb3VyY2UKKwkgKi8KKwl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisKKwlpZiAodmFsICYgS0JDX0lOVF9GSUZPX0NOVF9JTlRfU1RBVFVTKSB7CisJCS8qCisJCSAqIFNjaGVkdWxlIHRpbWVyIHRvIHJ1biB3aGVuIGhhcmR3YXJlIGlzIGluIGNvbnRpbnVvdXMKKwkJICogcG9sbGluZyBtb2RlLgorCQkgKi8KKwkJbW9kX3RpbWVyKCZrYmMtPnRpbWVyLCBqaWZmaWVzICsga2JjLT5jcF9kbHlfamlmZmllcyk7CisJfSBlbHNlIHsKKwkJY3RsIHw9IEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsKKwkJd3JpdGVsKGN0bCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfc2V0dXBfd2FrZWtleXMoc3RydWN0IHRlZ3JhX2tiYyAqa2JjLCBib29sIGZpbHRlcikKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2JjLT5wZGF0YTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcnN0X3ZhbDsKKworCUJVR19PTihwZGF0YS0+d2FrZV9jbnQgPiBLQkNfTUFYX0tFWSk7CisJcnN0X3ZhbCA9IChmaWx0ZXIgJiYgcGRhdGEtPndha2VfY250KSA/IH4wIDogMDsKKworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX1JPVzsgaSsrKQorCQl3cml0ZWwocnN0X3ZhbCwga2JjLT5tbWlvICsgS0JDX1JPVzBfTUFTS18wICsgaSAqIDQpOworCisJaWYgKGZpbHRlcikgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPndha2VfY250OyBpKyspIHsKKwkJCXUzMiB2YWwsIGFkZHI7CisJCQlhZGRyID0gcGRhdGEtPndha2VfY2ZnW2ldLnJvdyAqIDQgKyBLQkNfUk9XMF9NQVNLXzA7CisJCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBhZGRyKTsKKwkJCXZhbCAmPSB+KDEgPDwgcGRhdGEtPndha2VfY2ZnW2ldLmNvbCk7CisJCQl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBhZGRyKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX2NvbmZpZ19waW5zKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2JjLT5wZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX0dQSU87IGkrKykgeworCQl1MzIgcl9zaGZ0ID0gNSAqIChpICUgNik7CisJCXUzMiBjX3NoZnQgPSA0ICogKGkgJSA4KTsKKwkJdTMyIHJfbWFzayA9IDB4MWYgPDwgcl9zaGZ0OworCQl1MzIgY19tYXNrID0gMHgwZiA8PCBjX3NoZnQ7CisJCXUzMiByX29mZnMgPSAoaSAvIDYpICogNCArIEtCQ19ST1dfQ0ZHMF8wOworCQl1MzIgY19vZmZzID0gKGkgLyA4KSAqIDQgKyBLQkNfQ09MX0NGRzBfMDsKKwkJdTMyIHJvd19jZmcgPSByZWFkbChrYmMtPm1taW8gKyByX29mZnMpOworCQl1MzIgY29sX2NmZyA9IHJlYWRsKGtiYy0+bW1pbyArIGNfb2Zmcyk7CisKKwkJcm93X2NmZyAmPSB+cl9tYXNrOworCQljb2xfY2ZnICY9IH5jX21hc2s7CisKKwkJaWYgKHBkYXRhLT5waW5fY2ZnW2ldLmlzX3JvdykKKwkJCXJvd19jZmcgfD0gKChwZGF0YS0+cGluX2NmZ1tpXS5udW0gPDwgMSkgfCAxKSA8PCByX3NoZnQ7CisJCWVsc2UKKwkJCWNvbF9jZmcgfD0gKChwZGF0YS0+cGluX2NmZ1tpXS5udW0gPDwgMSkgfCAxKSA8PCBjX3NoZnQ7CisKKwkJd3JpdGVsKHJvd19jZmcsIGtiYy0+bW1pbyArIHJfb2Zmcyk7CisJCXdyaXRlbChjb2xfY2ZnLCBrYmMtPm1taW8gKyBjX29mZnMpOworCX0KK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfc3RhcnQoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrYmMtPnBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGRlYm91bmNlX2NudDsKKwl1MzIgdmFsID0gMDsKKworCWNsa19lbmFibGUoa2JjLT5jbGspOworCisJLyogUmVzZXQgdGhlIEtCQyBjb250cm9sbGVyIHRvIGNsZWFyIGFsbCBwcmV2aW91cyBzdGF0dXMuKi8KKwl0ZWdyYV9wZXJpcGhfcmVzZXRfYXNzZXJ0KGtiYy0+Y2xrKTsKKwl1ZGVsYXkoMTAwKTsKKwl0ZWdyYV9wZXJpcGhfcmVzZXRfZGVhc3NlcnQoa2JjLT5jbGspOworCXVkZWxheSgxMDApOworCisJdGVncmFfa2JjX2NvbmZpZ19waW5zKGtiYyk7CisJdGVncmFfa2JjX3NldHVwX3dha2VrZXlzKGtiYywgZmFsc2UpOworCisJd3JpdGVsKHBkYXRhLT5yZXBlYXRfY250LCBrYmMtPm1taW8gKyBLQkNfUlBUX0RMWV8wKTsKKworCS8qIEtleWJvYXJkIGRlYm91bmNlIGNvdW50IGlzIG1heGltdW0gb2YgMTIgYml0cy4gKi8KKwlkZWJvdW5jZV9jbnQgPSBtaW4ocGRhdGEtPmRlYm91bmNlX2NudCwgS0JDX01BWF9ERUJPVU5DRV9DTlQpOworCXZhbCA9IEtCQ19ERUJPVU5DRV9DTlRfU0hJRlQoZGVib3VuY2VfY250KTsKKwl2YWwgfD0gS0JDX0ZJRk9fVEhfQ05UX1NISUZUKDEpOyAvKiBzZXQgZmlmbyBpbnRlcnJ1cHQgdGhyZXNob2xkIHRvIDEgKi8KKwl2YWwgfD0gS0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOyAgLyogaW50ZXJydXB0IG9uIEZJRk8gdGhyZXNob2xkICovCisJdmFsIHw9IEtCQ19DT05UUk9MX0tCQ19FTjsgICAgIC8qIGVuYWJsZSAqLworCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBkZWxheShucykgZnJvbSBpbnRlcnJ1cHQgbW9kZSB0byBjb250aW51b3VzIHBvbGxpbmcKKwkgKiBtb2RlIHNvIHRoZSB0aW1lciByb3V0aW5lIGlzIHNjaGVkdWxlZCBhcHByb3ByaWF0ZWx5LgorCSAqLworCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19JTklUX0RMWV8wKTsKKwlrYmMtPmNwX2RseV9qaWZmaWVzID0gdXNlY3NfdG9famlmZmllcygodmFsICYgMHhmZmZmZikgKiAzMik7CisKKwlrYmMtPm51bV9wcmVzc2VkX2tleXMgPSAwOworCisJLyoKKwkgKiBBdG9taWNhbGx5IGNsZWFyIG91dCBhbnkgcmVtYWluaW5nIGVudHJpZXMgaW4gdGhlIGtleSBGSUZPCisJICogYW5kIGVuYWJsZSBrZXlib2FyZCBpbnRlcnJ1cHRzLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoMSkgeworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCQl2YWwgPj49IDQ7CisJCWlmICghdmFsKQorCQkJYnJlYWs7CisKKwkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0tQX0VOVDBfMCk7CisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19LUF9FTlQxXzApOworCX0KKwl3cml0ZWwoMHg3LCBrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCisJZW5hYmxlX2lycShrYmMtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3N0b3Aoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwl2YWwgJj0gfjE7CisJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2JjLT5sb2NrLCBmbGFncyk7CisKKwlkaXNhYmxlX2lycShrYmMtPmlycSk7CisJZGVsX3RpbWVyX3N5bmMoJmtiYy0+dGltZXIpOworCisJY2xrX2Rpc2FibGUoa2JjLT5jbGspOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2tiY19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHRlZ3JhX2tiY19zdGFydChrYmMpOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gdGVncmFfa2JjX3N0b3Aoa2JjKTsKK30KKworc3RhdGljIGJvb2wgX19kZXZpbml0Cit0ZWdyYV9rYmNfY2hlY2tfcGluX2NmZyhjb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQkJc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKm51bV9yb3dzKQoreworCWludCBpOworCisJKm51bV9yb3dzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX0dQSU87IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3Bpbl9jZmcgKnBpbl9jZmcgPSAmcGRhdGEtPnBpbl9jZmdbaV07CisKKwkJaWYgKHBpbl9jZmctPmlzX3JvdykgeworCQkJaWYgKHBpbl9jZmctPm51bSA+PSBLQkNfTUFYX1JPVykgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkicGluX2NmZ1slZF06IGludmFsaWQgcm93IG51bWJlciAlZFxuIiwKKwkJCQkJaSwgcGluX2NmZy0+bnVtKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQkoKm51bV9yb3dzKSsrOworCQl9IGVsc2UgeworCQkJaWYgKHBpbl9jZmctPm51bSA+PSBLQkNfTUFYX0NPTCkgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkicGluX2NmZ1slZF06IGludmFsaWQgY29sdW1uIG51bWJlciAlZFxuIiwKKwkJCQkJaSwgcGluX2NmZy0+bnVtKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdGVncmFfa2JjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlpbnQgZXJyOworCWludCBpOworCWludCBudW1fcm93cyA9IDA7CisJdW5zaWduZWQgaW50IGRlYm91bmNlX2NudDsKKwl1bnNpZ25lZCBpbnQgc2Nhbl90aW1lX3Jvd3M7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghdGVncmFfa2JjX2NoZWNrX3Bpbl9jZmcocGRhdGEsICZwZGV2LT5kZXYsICZudW1fcm93cykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlib2FyZCBJUlFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWtiYyA9IGt6YWxsb2Moc2l6ZW9mKCprYmMpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWtiYyB8fCAhaW5wdXRfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWtiYy0+cGRhdGEgPSBwZGF0YTsKKwlrYmMtPmlkZXYgPSBpbnB1dF9kZXY7CisJa2JjLT5pcnEgPSBpcnE7CisJc3Bpbl9sb2NrX2luaXQoJmtiYy0+bG9jayk7CisJc2V0dXBfdGltZXIoJmtiYy0+dGltZXIsIHRlZ3JhX2tiY19rZXlwcmVzc190aW1lciwgKHVuc2lnbmVkIGxvbmcpa2JjKTsKKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWtiYy0+bW1pbyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWtiYy0+bW1pbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfZnJlZV9tZW1fcmVnaW9uOworCX0KKworCWtiYy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGtiYy0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleWJvYXJkIGNsb2NrXG4iKTsKKwkJZXJyID0gUFRSX0VSUihrYmMtPmNsayk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJa2JjLT53YWtlX2VuYWJsZV9yb3dzID0gMDsKKwlrYmMtPndha2VfZW5hYmxlX2NvbHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+d2FrZV9jbnQ7IGkrKykgeworCQlrYmMtPndha2VfZW5hYmxlX3Jvd3MgfD0gKDEgPDwgcGRhdGEtPndha2VfY2ZnW2ldLnJvdyk7CisJCWtiYy0+d2FrZV9lbmFibGVfY29scyB8PSAoMSA8PCBwZGF0YS0+d2FrZV9jZmdbaV0uY29sKTsKKwl9CisKKwkvKgorCSAqIFRoZSB0aW1lIGRlbGF5IGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIHJlYWRzIG9mIHRoZSBGSUZPIGlzCisJICogdGhlIHN1bSBvZiB0aGUgcmVwZWF0IHRpbWUgYW5kIHRoZSB0aW1lIHRha2VuIGZvciBzY2FubmluZworCSAqIHRoZSByb3dzLiBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIGRlbGF5IGJlZm9yZSB0aGUgcm93IHNjYW5uaW5nCisJICogc3RhcnRzLiBUaGUgcmVwb2xsIGRlbGF5IGlzIGNvbXB1dGVkIGluIG1pbGxpc2Vjb25kcy4KKwkgKi8KKwlkZWJvdW5jZV9jbnQgPSBtaW4ocGRhdGEtPmRlYm91bmNlX2NudCwgS0JDX01BWF9ERUJPVU5DRV9DTlQpOworCXNjYW5fdGltZV9yb3dzID0gKEtCQ19ST1dfU0NBTl9USU1FICsgZGVib3VuY2VfY250KSAqIG51bV9yb3dzOworCWtiYy0+cmVwb2xsX2RseSA9IEtCQ19ST1dfU0NBTl9ETFkgKyBzY2FuX3RpbWVfcm93cyArIHBkYXRhLT5yZXBlYXRfY250OworCWtiYy0+cmVwb2xsX2RseSA9ICgoa2JjLT5yZXBvbGxfZGx5ICogS0JDX0NZQ0xFX1VTRUMpICsgOTk5KSAvIDEwMDA7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSBwZGV2LT5uYW1lOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaW5wdXRfZGV2LT5vcGVuID0gdGVncmFfa2JjX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHRlZ3JhX2tiY19jbG9zZTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2JjKTsKKworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTik7CisKKwlpbnB1dF9kZXYtPmtleWNvZGUgPSBrYmMtPmtleWNvZGU7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrYmMtPmtleWNvZGVbMF0pOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2JjLT5rZXljb2RlKTsKKworCWtleW1hcF9kYXRhID0gcGRhdGEtPmtleW1hcF9kYXRhID86ICZ0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBfZGF0YTsKKwltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChrZXltYXBfZGF0YSwgS0JDX1JPV19TSElGVCwKKwkJCQkgICBpbnB1dF9kZXYtPmtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGtiYy0+aXJxLCB0ZWdyYV9rYmNfaXNyLCBJUlFGX1RSSUdHRVJfSElHSCwKKwkJCSAgcGRldi0+bmFtZSwga2JjKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGtleWJvYXJkIElSUVxuIik7CisJCWdvdG8gZXJyX3B1dF9jbGs7CisJfQorCisJZGlzYWJsZV9pcnEoa2JjLT5pcnEpOworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGtiYy0+aWRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwga2JjKTsKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgcGRhdGEtPndha2V1cCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGtiYy0+aXJxLCBwZGV2KTsKK2Vycl9wdXRfY2xrOgorCWNsa19wdXQoa2JjLT5jbGspOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChrYmMtPm1taW8pOworZXJyX2ZyZWVfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2Vycl9mcmVlX21lbToKKwlpbnB1dF9mcmVlX2RldmljZShrYmMtPmlkZXYpOworCWtmcmVlKGtiYyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0ZWdyYV9rYmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlmcmVlX2lycShrYmMtPmlycSwgcGRldik7CisJY2xrX3B1dChrYmMtPmNsayk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrYmMtPmlkZXYpOworCWlvdW5tYXAoa2JjLT5tbWlvKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJa2ZyZWUoa2JjKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgdGVncmFfa2JjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgeworCQl0ZWdyYV9rYmNfc2V0dXBfd2FrZWtleXMoa2JjLCB0cnVlKTsKKwkJZW5hYmxlX2lycV93YWtlKGtiYy0+aXJxKTsKKwkJLyogRm9yY2VmdWxseSBjbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLworCQl3cml0ZWwoMHg3LCBrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCQltc2xlZXAoMzApOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJmtiYy0+aWRldi0+bXV0ZXgpOworCQlpZiAoa2JjLT5pZGV2LT51c2VycykKKwkJCXRlZ3JhX2tiY19zdG9wKGtiYyk7CisJCW11dGV4X3VubG9jaygma2JjLT5pZGV2LT5tdXRleCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfa2JjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnIgPSAwOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CisJCWRpc2FibGVfaXJxX3dha2Uoa2JjLT5pcnEpOworCQl0ZWdyYV9rYmNfc2V0dXBfd2FrZWtleXMoa2JjLCBmYWxzZSk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygma2JjLT5pZGV2LT5tdXRleCk7CisJCWlmIChrYmMtPmlkZXYtPnVzZXJzKQorCQkJZXJyID0gdGVncmFfa2JjX3N0YXJ0KGtiYyk7CisJCW11dGV4X3VubG9jaygma2JjLT5pZGV2LT5tdXRleCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModGVncmFfa2JjX3BtX29wcywgdGVncmFfa2JjX3N1c3BlbmQsIHRlZ3JhX2tiY19yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9rYmNfZHJpdmVyID0geworCS5wcm9iZQkJPSB0ZWdyYV9rYmNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0ZWdyYV9rYmNfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ0ZWdyYS1rYmMiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZ0ZWdyYV9rYmNfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgdGVncmFfa2JjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGVncmFfa2JjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0ZWdyYV9rYmNfZXhpdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHRlZ3JhX2tiY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfa2JjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh0ZWdyYV9rYmNfaW5pdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlJha2VzaCBJeWVyIDxyaXllckBudmlkaWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZWdyYSBtYXRyaXgga2V5Ym9hcmQgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06dGVncmEta2JjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RuZXR2MTA3eC1rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG5ldHYxMDd4LWtleXBhZC5jCmluZGV4IGI0YTgxZWIuLmM4ZjA5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG5ldHYxMDd4LWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG5ldHYxMDd4LWtleXBhZC5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTIxOSw5ICsyMjAsOSBAQAogCX0KIAogCWtwLT5jbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7Ci0JaWYgKCFrcC0+Y2xrKSB7CisJaWYgKElTX0VSUihrcC0+Y2xrKSkgewogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBjbGFpbSBkZXZpY2UgY2xvY2tcbiIpOwotCQllcnJvciA9IC1FSU5WQUw7CisJCWVycm9yID0gUFRSX0VSUihrcC0+Y2xrKTsKIAkJZ290byBlcnJvcl9jbGs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwppbmRleCA5ZGZkNmU1Li4xZjM4MzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKQEAgLTY5LDExICs2OSw3IEBACiAJfQogCiAJaWYgKHZhbHVlID4gMjAgJiYgdmFsdWUgPCAzMjc2NykKLSNpZm5kZWYgRlJFUQotCQljb3VudCA9IChpeHA0eHhfZ2V0X2JvYXJkX3RpY2tfcmF0ZSgpIC8gKHZhbHVlICogNCkpIC0gMTsKLSNlbHNlCi0JCWNvdW50ID0gKEZSRVEgLyAodmFsdWUgKiA0KSkgLSAxOwotI2VuZGlmCisJCWNvdW50ID0gKElYUDRYWF9USU1FUl9GUkVRIC8gKHZhbHVlICogNCkpIC0gMTsKIAogCWl4cDR4eF9zcGtyX2NvbnRyb2wocGluLCBjb3VudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCmluZGV4IGRhMzkyYzIuLmFhMTg2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwpAQCAtNzU1LDIzICs3NTUsMjYgQEAKIHsKIAlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSBvbGRfcHJpdiA9ICpwcml2OworCWludCByZXRyeSA9IDA7CisJaW50IGVycm9yOwogCi0JcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwlkbyB7CisJCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJCWVycm9yID0gc3luYXB0aWNzX2RldGVjdChwc21vdXNlLCAwKTsKKwl9IHdoaWxlIChlcnJvciAmJiArK3JldHJ5IDwgMyk7CiAKLQlpZiAoc3luYXB0aWNzX2RldGVjdChwc21vdXNlLCAwKSkKKwlpZiAoZXJyb3IpCiAJCXJldHVybiAtMTsKIAorCWlmIChyZXRyeSA+IDEpCisJCXByaW50ayhLRVJOX0RFQlVHICJTeW5hcHRpY3MgcmVjb25uZWN0ZWQgYWZ0ZXIgJWQgdHJpZXNcbiIsCisJCQlyZXRyeSk7CisKIAlpZiAoc3luYXB0aWNzX3F1ZXJ5X2hhcmR3YXJlKHBzbW91c2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHF1ZXJ5IFN5bmFwdGljcyBoYXJkd2FyZS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKG9sZF9wcml2LmlkZW50aXR5ICE9IHByaXYtPmlkZW50aXR5IHx8Ci0JICAgIG9sZF9wcml2Lm1vZGVsX2lkICE9IHByaXYtPm1vZGVsX2lkIHx8Ci0JICAgIG9sZF9wcml2LmNhcGFiaWxpdGllcyAhPSBwcml2LT5jYXBhYmlsaXRpZXMgfHwKLQkgICAgb2xkX3ByaXYuZXh0X2NhcCAhPSBwcml2LT5leHRfY2FwKQotCQlyZXR1cm4gLTE7Ci0KIAlpZiAoc3luYXB0aWNzX3NldF9hYnNvbHV0ZV9tb2RlKHBzbW91c2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGluaXRpYWxpemUgU3luYXB0aWNzIGhhcmR3YXJlLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTc4Miw2ICs3ODUsMTkgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmIChvbGRfcHJpdi5pZGVudGl0eSAhPSBwcml2LT5pZGVudGl0eSB8fAorCSAgICBvbGRfcHJpdi5tb2RlbF9pZCAhPSBwcml2LT5tb2RlbF9pZCB8fAorCSAgICBvbGRfcHJpdi5jYXBhYmlsaXRpZXMgIT0gcHJpdi0+Y2FwYWJpbGl0aWVzIHx8CisJICAgIG9sZF9wcml2LmV4dF9jYXAgIT0gcHJpdi0+ZXh0X2NhcCkgeworCQlwcmludGsoS0VSTl9FUlIgIlN5bmFwdGljcyBoYXJkd2FyZSBhcHBlYXJzIHRvIGJlIGRpZmZlcmVudDogIgorCQkJImlkKCVsZC0lbGQpLCBtb2RlbCglbGQtJWxkKSwgY2FwcyglbHgtJWx4KSwgZXh0KCVseC0lbHgpLlxuIiwKKwkJCW9sZF9wcml2LmlkZW50aXR5LCBwcml2LT5pZGVudGl0eSwKKwkJCW9sZF9wcml2Lm1vZGVsX2lkLCBwcml2LT5tb2RlbF9pZCwKKwkJCW9sZF9wcml2LmNhcGFiaWxpdGllcywgcHJpdi0+Y2FwYWJpbGl0aWVzLAorCQkJb2xkX3ByaXYuZXh0X2NhcCwgcHJpdi0+ZXh0X2NhcCk7CisJCXJldHVybiAtMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCmluZGV4IDQ0OGM3NzIuLjg1MjgxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKQEAgLTExMSw5ICsxMTEsMTEgQEAKIHN0YXRpYyBpbnQgY3Q4MmM3MTBfb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCWludCBlcnI7CiAKLQlpZiAocmVxdWVzdF9pcnEoQ1Q4MkM3MTBfSVJRLCBjdDgyYzcxMF9pbnRlcnJ1cHQsIDAsICJjdDgyYzcxMCIsIE5VTEwpKQotCQlyZXR1cm4gLTE7CisJZXJyID0gcmVxdWVzdF9pcnEoQ1Q4MkM3MTBfSVJRLCBjdDgyYzcxMF9pbnRlcnJ1cHQsIDAsICJjdDgyYzcxMCIsIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlzdGF0dXMgPSBpbmJfcChDVDgyQzcxMF9TVEFUVVMpOwogCkBAIC0xMzEsNyArMTMzLDcgQEAKIAkJc3RhdHVzICY9IH4oQ1Q4MkM3MTBfRU5BQkxFIHwgQ1Q4MkM3MTBfSU5UU19PTik7CiAJCW91dGJfcChzdGF0dXMsIENUODJDNzEwX1NUQVRVUyk7CiAJCWZyZWVfaXJxKENUODJDNzEwX0lSUSwgTlVMTCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKaW5kZXggNmUzNjJkZS4uODc1NWY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKQEAgLTExNiwxNCArMTE2LDE1IEBACiAKIC8qCiAgKiBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoKSBpcyBjYWxsZWQgYnkgdGhlIGxvdyBsZXZlbCB0dHkgZHJpdmVyIHdoZW4gY2hhcmFjdGVycwotICogYXJlIHJlYWR5IGZvciB1cy4gV2UgZm9yd2FyZCB0aGUgY2hhcmFjdGVycywgb25lIGJ5IG9uZSB0byB0aGUgJ2ludGVycnVwdCcKLSAqIHJvdXRpbmUuCisgKiBhcmUgcmVhZHkgZm9yIHVzLiBXZSBmb3J3YXJkIHRoZSBjaGFyYWN0ZXJzIGFuZCBmbGFncywgb25lIGJ5IG9uZSB0byB0aGUKKyAqICdpbnRlcnJ1cHQnIHJvdXRpbmUuCiAgKi8KIAogc3RhdGljIHZvaWQgc2VycG9ydF9sZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBzZXJwb3J0ICpzZXJwb3J0ID0gKHN0cnVjdCBzZXJwb3J0KikgdHR5LT5kaXNjX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2hfZmxhZ3M7CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtMTMxLDggKzEzMiwyMyBAQAogCWlmICghdGVzdF9iaXQoU0VSUE9SVF9BQ1RJVkUsICZzZXJwb3J0LT5mbGFncykpCiAJCWdvdG8gb3V0OwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXNlcmlvX2ludGVycnVwdChzZXJwb3J0LT5zZXJpbywgY3BbaV0sIDApOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN3aXRjaCAoZnBbaV0pIHsKKwkJY2FzZSBUVFlfRlJBTUU6CisJCQljaF9mbGFncyA9IFNFUklPX0ZSQU1FOworCQkJYnJlYWs7CisKKwkJY2FzZSBUVFlfUEFSSVRZOgorCQkJY2hfZmxhZ3MgPSBTRVJJT19QQVJJVFk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY2hfZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlzZXJpb19pbnRlcnJ1cHQoc2VycG9ydC0+c2VyaW8sIGNwW2ldLCBjaF9mbGFncyk7CisJfQogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMgYi9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYwppbmRleCBhMjlhNzgxMi4uNzcyOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBLRV9TVzoKKwkJY2FzZSBLRV9WU1c6CiAJCQlfX3NldF9iaXQoRVZfU1csIGRldi0+ZXZiaXQpOwogCQkJX19zZXRfYml0KGVudHJ5LT5zdy5jb2RlLCBkZXYtPnN3Yml0KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwppbmRleCA1MTg3ODI5Li4zNjdmYTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwpAQCAtMTEwMSw2ICsxMTAxLDEzIEBACiAJfQogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXModW5zaWduZWQgaW50IGxvZ2ljYWxfbWF4LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGh5c2ljYWxfbWF4KQoreworICAgICAgIC8qIFRvdWNoIHBoeXNpY2FsIGRpbWVuc2lvbnMgYXJlIGluIDEwMHRoIG9mIG1tICovCisgICAgICAgcmV0dXJuIChsb2dpY2FsX21heCAqIDEwMCkgLyBwaHlzaWNhbF9tYXg7Cit9CisKIHZvaWQgd2Fjb21fc2V0dXBfaW5wdXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKIAkJCQkgICAgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewpAQCAtMTIyOCw4ICsxMjM1LDEyIEBACiAJY2FzZSBUQUJMRVRQQzoKIAkJaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9ET1VCTEVUQVAgfHwKIAkJICAgIGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9UUklQTEVUQVApIHsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCBmZWF0dXJlcy0+eF9waHksIDAsIDApOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIGZlYXR1cmVzLT55X3BoeSwgMCwgMCk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19YLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnhfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWSwKKwkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT55X21heCwKKwkJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKIAkJCV9fc2V0X2JpdChCVE5fVE9PTF9ET1VCTEVUQVAsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAkJfQogCkBAIC0xMjcyLDYgKzEyODMsMTIgQEAKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BSRVNTVVJFLAogCQkJCQkgICAgIDAsIGZlYXR1cmVzLT5wcmVzc3VyZV9tYXgsCiAJCQkJCSAgICAgZmVhdHVyZXMtPnByZXNzdXJlX2Z1enosIDApOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWCwKKwkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT54X21heCwKKwkJCQkJCQlmZWF0dXJlcy0+eF9waHkpKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1ksCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eV9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnlfcGh5KSk7CiAJCX0gZWxzZSBpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1BFTikgewogCQkJX19zZXRfYml0KEJUTl9UT09MX1JVQkJFUiwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQkJX19zZXRfYml0KEJUTl9UT09MX1BFTiwgaW5wdXRfZGV2LT5rZXliaXQpOwpAQCAtMTQyNiw2ICsxNDQzLDEwIEBACiAJeyAiV2Fjb20gQmFtYm9vIDJGRyA2eDgiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAyMTY0OCwgMTM1MzAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhENCA9CiAJeyAiV2Fjb20gQmFtYm9vIFBlbiIsICAgICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAxNDcyMCwgIDkyMDAsICAyNTUsIDYzLCBCQU1CT09fUFQgfTsKK3N0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhENiA9CisJeyAiV2Fjb20gQmFtYm9vUFQgMkZHIDR4NSIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAxNDcyMCwgIDkyMDAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKK3N0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhENyA9CisJeyAiV2Fjb20gQmFtYm9vUFQgMkZHIFNtYWxsIiwgV0FDT01fUEtHTEVOX0JCRlVOLCAxNDcyMCwgIDkyMDAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKIHN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhEOCA9CiAJeyAiV2Fjb20gQmFtYm9vIENvbWljIDJGRyIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAyMTY0OCwgMTM1MzAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKIHN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhEQSA9CkBAIC0xNTA3LDYgKzE1MjgsOCBAQAogCXsgVVNCX0RFVklDRV9XQUNPTSgweEQyKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweEQzKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweEQ0KSB9LAorCXsgVVNCX0RFVklDRV9XQUNPTSgweEQ2KSB9LAorCXsgVVNCX0RFVklDRV9XQUNPTSgweEQ3KSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweEQ4KSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweERBKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweERCKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYwppbmRleCBmN2ZhOWVmLi4xNTA3Y2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvYnUyMTAxMy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2RlZmluZSBQRU5fRE9XTl9JTlRSCTAKICNkZWZpbmUgTUFYX0ZJTkdFUlMJMgpAQCAtMTM5LDYgKzE0MCw3IEBACiAgKiBAY2hpcDogcG9pbnRlciB0byB0aGUgdG91Y2ggcGFuZWwgY29udHJvbGxlcgogICogQGluX2RldjogcG9pbnRlciB0byB0aGUgaW5wdXQgZGV2aWNlIHN0cnVjdHVyZQogICogQGludHJfcGluOiBpbnRlcnJ1cHQgcGluIHZhbHVlCisgKiBAcmVndWxhdG9yOiBwb2ludGVyIHRvIHRoZSBSZWd1bGF0b3IgdXNlZCBmb3IgdG91Y2ggc2NyZWVuCiAgKgogICogVG91Y2ggcGFuZWwgZGV2aWNlIGRhdGEgc3RydWN0dXJlCiAgKi8KQEAgLTE0OSw2ICsxNTEsNyBAQAogCWNvbnN0IHN0cnVjdCBidTIxMDEzX3BsYXRmb3JtX2RldmljZSAqY2hpcDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbl9kZXY7CiAJdW5zaWduZWQgaW50IGludHJfcGluOworCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKIH07CiAKIC8qKgpAQCAtNDU2LDYgKzQ1OSwyMCBAQAogCWJ1MjEwMTNfZGF0YS0+aW5fZGV2ID0gaW5fZGV2OwogCWJ1MjEwMTNfZGF0YS0+Y2hpcCA9IHBkYXRhOwogCWJ1MjEwMTNfZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCisJYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IgPSByZWd1bGF0b3JfZ2V0KCZjbGllbnQtPmRldiwgIlYtVE9VQ0giKTsKKwlpZiAoSVNfRVJSKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInJlZ3VsYXRvcl9nZXQgZmFpbGVkXG4iKTsKKwkJZXJyb3IgPSBQVFJfRVJSKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZXJyb3IgPSByZWd1bGF0b3JfZW5hYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicmVndWxhdG9yIGVuYWJsZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9wdXRfcmVndWxhdG9yOworCX0KKwogCWJ1MjEwMTNfZGF0YS0+dG91Y2hfc3RvcHBlZCA9IGZhbHNlOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ1MjEwMTNfZGF0YS0+d2FpdCk7CiAKQEAgLTQ2NCw3ICs0ODEsNyBAQAogCQllcnJvciA9IHBkYXRhLT5jc19lbihwZGF0YS0+Y3NfcGluKTsKIAkJaWYgKGVycm9yIDwgMCkgewogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJjaGlwIGluaXQgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZXJyX2ZyZWVfbWVtOworCQkJZ290byBlcnJfZGlzYWJsZV9yZWd1bGF0b3I7CiAJCX0KIAl9CiAKQEAgLTQ4NSw5ICs1MDIsOSBAQAogCV9fc2V0X2JpdChFVl9BQlMsIGluX2Rldi0+ZXZiaXQpOwogCiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5fZGV2LCBBQlNfTVRfUE9TSVRJT05fWCwgMCwKLQkJCQkJCXBkYXRhLT54X21heF9yZXMsIDAsIDApOworCQkJCQkJcGRhdGEtPnRvdWNoX3hfbWF4LCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbl9kZXYsIEFCU19NVF9QT1NJVElPTl9ZLCAwLAotCQkJCQkJcGRhdGEtPnlfbWF4X3JlcywgMCwgMCk7CisJCQkJCQlwZGF0YS0+dG91Y2hfeV9tYXgsIDAsIDApOwogCWlucHV0X3NldF9kcnZkYXRhKGluX2RldiwgYnUyMTAxM19kYXRhKTsKIAogCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGRhdGEtPmlycSwgTlVMTCwgYnUyMTAxM19ncGlvX2lycSwKQEAgLTUxMyw2ICs1MzAsMTAgQEAKIAlidTIxMDEzX2ZyZWVfaXJxKGJ1MjEwMTNfZGF0YSk7CiBlcnJfY3NfZGlzYWJsZToKIAlwZGF0YS0+Y3NfZGlzKHBkYXRhLT5jc19waW4pOworZXJyX2Rpc2FibGVfcmVndWxhdG9yOgorCXJlZ3VsYXRvcl9kaXNhYmxlKGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKK2Vycl9wdXRfcmVndWxhdG9yOgorCXJlZ3VsYXRvcl9wdXQoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOwogZXJyX2ZyZWVfbWVtOgogCWlucHV0X2ZyZWVfZGV2aWNlKGluX2Rldik7CiAJa2ZyZWUoYnUyMTAxM19kYXRhKTsKQEAgLTUzNSw2ICs1NTYsMTAgQEAKIAlidTIxMDEzX2RhdGEtPmNoaXAtPmNzX2RpcyhidTIxMDEzX2RhdGEtPmNoaXAtPmNzX3Bpbik7CiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShidTIxMDEzX2RhdGEtPmluX2Rldik7CisKKwlyZWd1bGF0b3JfZGlzYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisJcmVndWxhdG9yX3B1dChidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisKIAlrZnJlZShidTIxMDEzX2RhdGEpOwogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZjbGllbnQtPmRldiwgZmFsc2UpOwpAQCAtNTYxLDYgKzU4Niw4IEBACiAJZWxzZQogCQlkaXNhYmxlX2lycShidTIxMDEzX2RhdGEtPmNoaXAtPmlycSk7CiAKKwlyZWd1bGF0b3JfZGlzYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc3LDYgKzYwNCwxMiBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBidTIxMDEzX2RhdGEtPmNsaWVudDsKIAlpbnQgcmV0dmFsOwogCisJcmV0dmFsID0gcmVndWxhdG9yX2VuYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJidTIxMDEzIHJlZ3VsYXRvciBlbmFibGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKIAlyZXR2YWwgPSBidTIxMDEzX2luaXRfY2hpcChidTIxMDEzX2RhdGEpOwogCWlmIChyZXR2YWwgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYnUyMTAxMyBjb250cm9sbGVyIGNvbmZpZyBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMKaW5kZXggY2YxZGJhMi4uMjJhMzQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTI4OSw5ICsyOTAsOSBAQAogCX0KIAogCXRzLT5jbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7Ci0JaWYgKCF0cy0+Y2xrKSB7CisJaWYgKElTX0VSUih0cy0+Y2xrKSkgewogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBjbGFpbSBkZXZpY2UgY2xvY2tcbiIpOwotCQllcnJvciA9IC1FSU5WQUw7CisJCWVycm9yID0gUFRSX0VSUih0cy0+Y2xrKTsKIAkJZ290byBlcnJvcl9jbGs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwppbmRleCBmMmI1YmFiLi4xZjM1NWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKQEAgLTE2MjcsNyArMTYyNyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpY25faW5pdCh2b2lkKQogewogCWNoYXIgKnA7Ci0JY2hhciByZXZbMjBdOworCWNoYXIgcmV2WzIxXTsKIAogCW1lbXNldCgmZGV2LCAwLCBzaXplb2YoaWNuX2RldikpOwogCWRldi5tZW1hZGRyID0gKG1lbWJhc2UgJiAweDBmZmMwMDApOwpAQCAtMTYzOCw2ICsxNjM4LDcgQEAKIAogCWlmICgocCA9IHN0cmNocihyZXZpc2lvbiwgJzonKSkpIHsKIAkJc3RybmNweShyZXYsIHAgKyAxLCAyMCk7CisJCXJldlsyMF0gPSAnXDAnOwogCQlwID0gc3RyY2hyKHJldiwgJyQnKTsKIAkJaWYgKHApCiAJCQkqcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wd20uYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jCmluZGV4IGRhM2ZhOGQuLjY2NmRhZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jCkBAIC02OSw2ICs2OSw3IEBACiAJCWxlZF9kYXQtPnB3bSA9IHB3bV9yZXF1ZXN0KGN1cl9sZWQtPnB3bV9pZCwKIAkJCQljdXJfbGVkLT5uYW1lKTsKIAkJaWYgKElTX0VSUihsZWRfZGF0LT5wd20pKSB7CisJCQlyZXQgPSBQVFJfRVJSKGxlZF9kYXQtPnB3bSk7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBQV00gJWRcbiIsCiAJCQkJCWN1cl9sZWQtPnB3bV9pZCk7CiAJCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItbGlyYy1jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKaW5kZXggZjAxMWM1ZC4uMWM1Y2M2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKQEAgLTEsNCArMSw0IEBACi0vKiBpci1saXJjLWNvZGVjLmMgLSBpci1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCisvKiBpci1saXJjLWNvZGVjLmMgLSByYy1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCkBAIC00Nyw2ICs0Nyw3IEBACiAJLyogQ2FycmllciByZXBvcnRzICovCiAJaWYgKGV2LmNhcnJpZXJfcmVwb3J0KSB7CiAJCXNhbXBsZSA9IExJUkNfRlJFUVVFTkNZKGV2LmNhcnJpZXIpOworCQlJUl9kcHJpbnRrKDIsICJjYXJyaWVyIHJlcG9ydCAoZnJlcTogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogUGFja2V0IGVuZCAqLwogCX0gZWxzZSBpZiAoZXYudGltZW91dCkgewpAQCAtNjIsNiArNjMsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJc2FtcGxlID0gTElSQ19USU1FT1VUKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgInRpbWVvdXQgcmVwb3J0IChkdXJhdGlvbjogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogTm9ybWFsIHNhbXBsZSAqLwogCX0gZWxzZSB7CkBAIC04NSw2ICs4Nyw4IEBACiAKIAkJc2FtcGxlID0gZXYucHVsc2UgPyBMSVJDX1BVTFNFKGV2LmR1cmF0aW9uIC8gMTAwMCkgOgogCQkJCQlMSVJDX1NQQUNFKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgImRlbGl2ZXJpbmcgJXV1cyAlcyB0byBsaXJjX2RldlxuIiwKKwkJCSAgIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CiAJfQogCiAJbGlyY19idWZmZXJfd3JpdGUoZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKaW5kZXggM2JmMzMzNy4uMmY1ZGMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CiAgKgorICogU2VlIGh0dHA6Ly9tZWRpYWNlbnRlcmd1aWRlcy5jb20vYm9vay9leHBvcnQvaHRtbC8zMSBmb3IgZGV0YWlscyBvbgorICoga2V5IG1hcHBpbmdzLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTYwLDYgKzYzLDkgQEAKIAl7IDB4ODAwZjA0MjYsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCiAJeyAweDgwMGYwNDI3LCBLRVlfWk9PTSB9LAkJLyogQXNwZWN0ICovCiAKKwl7IDB4ODAwZjA0MzIsIEtFWV9NT0RFIH0sCQkvKiBWaXN1YWxpemF0aW9uICovCisJeyAweDgwMGYwNDMzLCBLRVlfUFJFU0VOVEFUSU9OIH0sCS8qIFNsaWRlIFNob3cgKi8KKwl7IDB4ODAwZjA0MzQsIEtFWV9FSkVDVENEIH0sCiAJeyAweDgwMGYwNDNhLCBLRVlfQlJJR0hUTkVTU1VQIH0sCiAKIAl7IDB4ODAwZjA0NDYsIEtFWV9UViB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKaW5kZXggMDc5MzUzZS4uNmRmMGE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCkBAIC04MTYsNyArODE2LDcgQEAKIAlzd2l0Y2ggKGlyLT5idWZfaW5baW5kZXhdKSB7CiAJLyogMi1ieXRlIHJldHVybiB2YWx1ZSBjb21tYW5kcyAqLwogCWNhc2UgTUNFX0NNRF9TX1RJTUVPVVQ6Ci0JCWlyLT5yYy0+dGltZW91dCA9IE1TX1RPX05TKChoaSA8PCA4IHwgbG8pIC8gMik7CisJCWlyLT5yYy0+dGltZW91dCA9IFVTX1RPX05TKChoaSA8PCA4IHwgbG8pIC8gMik7CiAJCWJyZWFrOwogCiAJLyogMS1ieXRlIHJldHVybiB2YWx1ZSBjb21tYW5kcyAqLwpAQCAtODU1LDkgKzg1NSwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUEFSU0VfSVJEQVRBOgogCQkJaXItPnJlbS0tOworCQkJaW5pdF9pcl9yYXdfZXZlbnQoJnJhd2lyKTsKIAkJCXJhd2lyLnB1bHNlID0gKChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX0JJVCkgIT0gMCk7CiAJCQlyYXdpci5kdXJhdGlvbiA9IChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX01BU0spCi0JCQkJCSAqIE1TX1RPX1VTKE1DRV9USU1FX1VOSVQpOworCQkJCQkgKiBVU19UT19OUyhNQ0VfVElNRV9VTklUKTsKIAogCQkJZGV2X2RiZyhpci0+ZGV2LCAiU3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkXG4iLAogCQkJCXJhd2lyLnB1bHNlID8gInB1bHNlIiA6ICJzcGFjZSIsCkBAIC04ODMsNiArODg0LDggQEAKIAkJCQkJICAgICBpLCBpci0+cmVtICsgMSwgZmFsc2UpOwogCQkJaWYgKGlyLT5yZW0pCiAJCQkJaXItPnBhcnNlcl9zdGF0ZSA9IFBBUlNFX0lSREFUQTsKKwkJCWVsc2UKKwkJCQlpcl9yYXdfZXZlbnRfcmVzZXQoaXItPnJjKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEwNjAsNyArMTA2Myw3IEBACiAJcmMtPnByaXYgPSBpcjsKIAlyYy0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOwogCXJjLT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfQUxMOwotCXJjLT50aW1lb3V0ID0gTVNfVE9fTlMoMTAwMCk7CisJcmMtPnRpbWVvdXQgPSBVU19UT19OUygxMDAwKTsKIAlpZiAoIWlyLT5mbGFncy5ub190eCkgewogCQlyYy0+c190eF9tYXNrID0gbWNldXNiX3NldF90eF9tYXNrOwogCQlyYy0+c190eF9jYXJyaWVyID0gbWNldXNiX3NldF90eF9jYXJyaWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCmluZGV4IGRkNGNhZjguLjI3M2Q5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQljYXJyaWVyID0gKGNvdW50ICogMTAwMDAwMCkgLyBkdXJhdGlvbjsKKwljYXJyaWVyID0gTVNfVE9fTlMoY291bnQpIC8gZHVyYXRpb247CiAKIAlpZiAoKGNhcnJpZXIgPiBNQVhfQ0FSUklFUikgfHwgKGNhcnJpZXIgPCBNSU5fQ0FSUklFUikpCiAJCW52dF9kYmcoIldURj8gQ2FycmllciBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlISIpOwpAQCAtNjEyLDggKzYxMiw4IEBACiAJCXNhbXBsZSA9IG52dC0+YnVmW2ldOwogCiAJCXJhd2lyLnB1bHNlID0gKChzYW1wbGUgJiBCVUZfUFVMU0VfQklUKSAhPSAwKTsKLQkJcmF3aXIuZHVyYXRpb24gPSAoc2FtcGxlICYgQlVGX0xFTl9NQVNLKQotCQkJCQkqIFNBTVBMRV9QRVJJT0QgKiAxMDAwOworCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKChzYW1wbGUgJiBCVUZfTEVOX01BU0spCisJCQkJCSAgKiBTQU1QTEVfUEVSSU9EKTsKIAogCQlpZiAoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykgPT0gQlVGX0xFTl9NQVNLKSB7CiAJCQlpZiAobnZ0LT5yYXdpci5wdWxzZSA9PSByYXdpci5wdWxzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKaW5kZXggNzJiZThhMC4uNTEyYTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKQEAgLTQ1OCwyMSArNDU4LDI3IEBACiAJCWluZGV4ID0gaXJfbG9va3VwX2J5X3NjYW5jb2RlKHJjX21hcCwgc2NhbmNvZGUpOwogCX0KIAotCWlmIChpbmRleCA+PSByY19tYXAtPmxlbikgewotCQlpZiAoIShrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpKQotCQkJSVJfZHByaW50aygxLCAidW5rbm93biBrZXkgZm9yIHNjYW5jb2RlIDB4JTA0eFxuIiwKLQkJCQkgICBzY2FuY29kZSk7CisJaWYgKGluZGV4IDwgcmNfbWFwLT5sZW4pIHsKKwkJZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKKworCQlrZS0+aW5kZXggPSBpbmRleDsKKwkJa2UtPmtleWNvZGUgPSBlbnRyeS0+a2V5Y29kZTsKKwkJa2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOworCQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmZW50cnktPnNjYW5jb2RlLCBzaXplb2YoZW50cnktPnNjYW5jb2RlKSk7CisKKwl9IGVsc2UgaWYgKCEoa2UtPmZsYWdzICYgSU5QVVRfS0VZTUFQX0JZX0lOREVYKSkgeworCQkvKgorCQkgKiBXZSBkbyBub3QgcmVhbGx5IGtub3cgdGhlIHZhbGlkIHJhbmdlIG9mIHNjYW5jb2RlcworCQkgKiBzbyBsZXQncyByZXNwb25kIHdpdGggS0VZX1JFU0VSVkVEIHRvIGFueXRoaW5nIHdlCisJCSAqIGRvIG5vdCBoYXZlIG1hcHBpbmcgZm9yIFt5ZXRdLgorCQkgKi8KKwkJa2UtPmluZGV4ID0gaW5kZXg7CisJCWtlLT5rZXljb2RlID0gS0VZX1JFU0VSVkVEOworCX0gZWxzZSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVudHJ5ID0gJnJjX21hcC0+c2NhbltpbmRleF07Ci0KLQlrZS0+aW5kZXggPSBpbmRleDsKLQlrZS0+a2V5Y29kZSA9IGVudHJ5LT5rZXljb2RlOwotCWtlLT5sZW4gPSBzaXplb2YoZW50cnktPnNjYW5jb2RlKTsKLQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmZW50cnktPnNjYW5jb2RlLCBzaXplb2YoZW50cnktPnNjYW5jb2RlKSk7Ci0KIAlyZXR2YWwgPSAwOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jIGIvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYwppbmRleCA2ZTI5MTFjLi5lNDM1ZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJCXN6LT5zaWduYWxfc3RhcnQudHZfdXNlYyAtCiAJCQkJc3otPnNpZ25hbF9sYXN0LnR2X3VzZWMpOwogCQkJcmF3aXIuZHVyYXRpb24gLT0gc3otPnN1bTsKLQkJCXJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAkJCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKIAkJfQogCQlzel9wdXNoKHN6LCByYXdpcik7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwogCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwogCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAlyYXdpci5kdXJhdGlvbiAmPSBJUl9NQVhfRFVSQVRJT047CiAJc3pfcHVzaChzeiwgcmF3aXIpOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmF3aXIuZHVyYXRpb24gPSAoKGludCkgdmFsdWUpICogU1pfUkVTT0xVVElPTjsKIAlyYXdpci5kdXJhdGlvbiArPSBTWl9SRVNPTFVUSU9OIC8gMjsKIAlzei0+c3VtICs9IHJhd2lyLmR1cmF0aW9uOwotCXJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJcmF3aXIuZHVyYXRpb24gPSBVU19UT19OUyhyYXdpci5kdXJhdGlvbik7CiAJc3pfcHVzaChzeiwgcmF3aXIpOwogfQogCkBAIC0yNzMsNiArMjczLDcgQEAKIAkJCQlpZiAoc3otPnRpbWVvdXRfZW5hYmxlZCkKIAkJCQkJc3pfcHVzaChzeiwgcmF3aXIpOwogCQkJCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOworCQkJCWlyX3Jhd19ldmVudF9yZXNldChzei0+cmRldik7CiAJCQl9IGVsc2UgewogCQkJCXN6X3B1c2hfZnVsbF9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CiAJCQl9CkBAIC0yOTAsNiArMjkxLDcgQEAKIAkJfQogCX0KIAorCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOwogCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAKIAlyZXR1cm47CkBAIC00MzAsMTMgKzQzMiwxMyBAQAogCXN6LT5kZWNvZGVyX3N0YXRlID0gUHVsc2VTcGFjZTsKIAkvKiBGSVhNRTogZG9uJ3QgeWV0IGhhdmUgYSB3YXkgdG8gc2V0IHRoaXMgKi8KIAlzei0+dGltZW91dF9lbmFibGVkID0gdHJ1ZTsKLQlzei0+cmRldi0+dGltZW91dCA9ICgoKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMCkgJgorCXN6LT5yZGV2LT50aW1lb3V0ID0gKChVU19UT19OUyhTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTikgJgogCQkJCUlSX01BWF9EVVJBVElPTikgfCAweDAzMDAwMDAwKTsKIAkjaWYgMAogCS8qIG5vdCB5ZXQgc3VwcG9ydGVkLCBkZXBlbmRzIG9uIHBhdGNoZXMgZnJvbSBtYXhpbSAqLwogCS8qIHNlZSBhbHNvOiBMSVJDX0dFVF9SRUNfUkVTT0xVVElPTiBhbmQgTElSQ19TRVRfUkVDX1RJTUVPVVQgKi8KLQlzei0+bWluX3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7Ci0Jc3otPm1heF90aW1lb3V0ID0gU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwOworCXN6LT5taW5fdGltZW91dCA9IFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKTsKKwlzei0+bWF4X3RpbWVvdXQgPSBVU19UT19OUyhTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTik7CiAJI2VuZGlmCiAKIAlkb19nZXR0aW1lb2ZkYXkoJnN6LT5zaWduYWxfc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IDg2NTIxNmUuLjQ3MjM2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTU3OTMsNyArNTc5Myw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCi0JCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKKwkJCW1zbGVlcChhY3Rpb24tPmlkeCk7CiAJCQlicmVhazsKIAkJfQogCQlhY3Rpb24rKzsKQEAgLTU4MzAsNyArNTgzMCw3IEBACiAJCVtTRU5TT1JfR0MwMzA1XSA9CWdjMDMwNV9tYXRyaXgsCiAJCVtTRU5TT1JfSERDUzIwMjBiXSA9CU5VTEwsCiAJCVtTRU5TT1JfSFY3MTMxQl0gPQlOVUxMLAotCQlbU0VOU09SX0hWNzEzMVJdID0JTlVMTCwKKwkJW1NFTlNPUl9IVjcxMzFSXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfSUNNMTA1QV0gPQlwbzIwMzBfbWF0cml4LAogCQlbU0VOU09SX01DNTAxQ0JdID0JTlVMTCwKIAkJW1NFTlNPUl9NVDlWMTExXzFdID0JZ2MwMzA1X21hdHJpeCwKQEAgLTU5MzYsNiArNTkzNiw3IEBACiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CkBAIC02MTA4LDExICs2MTA5LDEzIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2EpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOSk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKKwkJaWYgKHNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNjcwNCwxMCArNjcwNywxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwMDNhKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzkpOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxUikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHg1MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02NzIwLDYgKzY3MjYsNyBAQAogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX0dDMDMwNToKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCS8qIGZhbGwgdGhydSAqLwpAQCAtNjc2MCw2ICs2NzY3LDEyIEBACiAJCQkJCQkvKiBtcy13aW4gKyAqLwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4NDAsIDB4MDExNyk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MjUsIDB4MDQsIDB4MDApOwkvKiBleHBvc3VyZSAqLworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDI2LCAweDkzLCAweDAwKTsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyNywgMHhlMCwgMHgwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9UQVM1MTMwQzoKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwpAQCAtNjgwOCw5ICs2ODIxLDE3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkvKiBjaGVjayB0aGUgSlBFRyBlbmQgb2YgZnJhbWUgKi8KKwlpZiAobGVuID49IDMKKwkgJiYgZGF0YVtsZW4gLSAzXSA9PSAweGZmICYmIGRhdGFbbGVuIC0gMl0gPT0gMHhkOSkgeworLypmaXhtZTogd2hhdCBkb2VzIHRoZSBsYXN0IGJ5dGUgbWVhbj8qLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKLQkJCQkJTlVMTCwgMCk7CisJCQkJCWRhdGEsIGxlbiAtIDEpOworCQlyZXR1cm47CisJfQorCisJLyogY2hlY2sgdGhlIEpQRUcgc3RhcnQgb2YgYSBmcmFtZSAqLworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCiAJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKaW5kZXggYTY1NzJlNS4uYTI3ZDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTI4Myw2ICsyODMsNyBAQAogCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzaXplX3QgYnVmZmVyX3NpemU7CiAJaW50IGk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CkBAIC0zODEsMTMgKzM4MiwyMSBAQAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKIAlyZXR2YWwgPSBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihkZXYpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIGFkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgYWRhcHRlciByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHZhbCA9IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihkZXYpOwotCWlmIChyZXR2YWwgPCAwKQotCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlZ2lzdGVyaW5nIGkyYyBJUiBkZXZpY2VzIGZhaWxlZFxuIik7CisJY2xpZW50ID0gaGRwdnJfcmVnaXN0ZXJfaXJfcnhfaTJjKGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgSVIgUlggZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gcmVnX2ZhaWw7CisJfQorCisJY2xpZW50ID0gaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgSVIgVFggZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gcmVnX2ZhaWw7CisJfQogI2VuZGlmCiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCkBAIC0zOTUsNiArNDA0LDEwIEBACiAJCSAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZpZGVvX2RldikpOwogCXJldHVybiAwOwogCityZWdfZmFpbDoKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwdGVyKTsKKyNlbmRpZgogZXJyb3I6CiAJaWYgKGRldikgewogCQkvKiBEZXN0cm95IHNpbmdsZSB0aHJlYWQgKi8KQEAgLTQyNCw2ICs0MzcsOSBAQAogCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOwogCWhkcHZyX2NhbmNlbF9xdWV1ZShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcHRlcik7CisjZW5kaWYKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CiAJYXRvbWljX2RlYygmZGV2X25yKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCmluZGV4IDg5YjcxZmEuLmU1M2ZhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYwpAQCAtMzEsMjYgKzMxLDM0IEBACiAjZGVmaW5lIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIJMHg3MQogCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaGRwdnJfaTJjX2JvYXJkX2luZm8gPSB7Ci0JSTJDX0JPQVJEX0lORk8oImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1RYX0kyQ19BRERSKSwKLQlJMkNfQk9BUkRfSU5GTygiaXJfcnhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIpLAotfTsKLQotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKIAlzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YSAqaW5pdF9kYXRhID0gJmRldi0+aXJfaTJjX2luaXRfZGF0YTsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaGRwdnJfaXJfdHhfaTJjX2JvYXJkX2luZm8gPSB7CisJCUkyQ19CT0FSRF9JTkZPKCJpcl90eF96OGYwODExX2hkcHZyIiwgWjhGMDgxMV9JUl9UWF9JMkNfQUREUiksCisJfTsKKworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3R4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyk7Cit9CisKK3N0cnVjdCBpMmNfY2xpZW50ICpoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmZGV2LT5pcl9pMmNfaW5pdF9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3J4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1JYX0kyQ19BRERSKSwKKwl9OwogCiAJLyogT3VyIGRlZmF1bHQgaW5mb3JtYXRpb24gZm9yIGlyLWtiZC1pMmMuYyB0byB1c2UgKi8KIAlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CiAJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKIAlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1JDNTsKLQlpbml0X2RhdGEtPm5hbWUgPSAiSEQgUFZSIjsKLQloZHB2cl9pMmNfYm9hcmRfaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CiAKLQljID0gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pMmNfYm9hcmRfaW5mbyk7Ci0KLQlyZXR1cm4gKGMgPT0gTlVMTCkgPyAtRU5PREVWIDogMDsKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyk7CiB9CiAKIHN0YXRpYyBpbnQgaGRwdnJfaTJjX3JlYWQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBpbnQgYnVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCmluZGV4IGVlNzRlM2IuLjA3MmYyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTMxMyw3ICszMTMsOCBAQAogLyogaTJjIGFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCiBpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKIAotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3J4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3R4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBidWZmZXIgbWFuYWdlbWVudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCBkMmIyMGFkLi5hMjIxYWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMTI4LDYgKzEyOCwxOSBAQAogCiBzdGF0aWMgaW50IGdldF9rZXlfaGF1cF94dnIoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzFdID0geyAwIH07CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXBwYXJlbnQgImFyZSB5b3UgcmVhZHk/IiBwb2xsIGNvbW1hbmQgb2JzZXJ2ZWQKKwkgKiB3YXRjaGluZyBXaW5kb3dzIGRyaXZlciB0cmFmZmljIGFuZCBpbXBsZW1lbnRlZCBpbiBsaXJjX3ppbG9nLiBXaXRoCisJICogdGhpcyBhZGRlZCwgd2UgZ2V0IGZhciBzYW5lciByZW1vdGUgYmVoYXZpb3Igd2l0aCB6OCBjaGlwcyBvbiB1c2IKKwkgKiBjb25uZWN0ZWQgZGV2aWNlcywgZXZlbiB3aXRoIHRoZSBkZWZhdWx0IHBvbGxpbmcgaW50ZXJ2YWwgb2YgMTAwbXMuCisJICovCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGlyLT5jLCBidWYsIDEpOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IC1FSU5WQUw7CisKIAlyZXR1cm4gZ2V0X2tleV9oYXVwX2NvbW1vbiAoaXIsIGlyX2tleSwgaXJfcmF3LCA2LCAzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggY2NjODg0OS4uNDUxZWNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC01OTcsNyArNTk3LDYgQEAKIAkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKIAkJaW5pdF9kYXRhLT50eXBlICAgICAgICAgICAgICAgICAgPSBSQ19UWVBFX1JDNTsKIAkJaW5pdF9kYXRhLT5uYW1lICAgICAgICAgICAgICAgICAgPSBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbjsKLQkJaW5pdF9kYXRhLT5wb2xsaW5nX2ludGVydmFsICAgICAgPSAyNjA7IC8qIG1zIEZyb20gbGlyY196aWxvZyAqLwogCQkvKiBJUiBSZWNlaXZlciAqLwogCQlpbmZvLmFkZHIgICAgICAgICAgPSAweDcxOwogCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IGYzNTQ1OWQuLjBkYjkwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCWNoaXBfaWQgPSBuYW1lWzVdOwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGlzIGNoaXAgaXMgcGFydCBvZiB0aGUgc2FhNzExeCBzZXJpZXMgKi8KLQlpZiAobWVtY21wKG5hbWUsICIxZjcxMSIsIDUpKSB7CisJaWYgKG1lbWNtcChuYW1lICsgMSwgImY3MTEiLCA0KSkgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoSUQgJXMpIGRvZXMgbm90IG1hdGNoIGEga25vd24gc2FhNzExeCBjaGlwLlxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBuYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKaW5kZXggYmFjN2Q2Mi4uMDM3MWJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZigqbW1jKSwgJnBkZXYtPmRldik7CisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBzZGhfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYwppbmRleCBiM2EwYWIwLi43NDIxOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC04MjcsOCArODI4LDggQEAKIAl9CiAKIAlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWMiKTsKLQlpZiAoIWhvc3QtPmNsaykgewotCQlyZXQgPSAtRU5PRU5UOworCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgbW1jIGNsb2NrXG4iKTsKIAkJZ290byBlcnJfZnJlZV9ob3N0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggNTYzMDIyOC4uMmQ2ZGUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAgLTQ2LDEwICs0Nyw2IEBACiAgKgkgICAgICBpcyBhc3NlcnRlZCAobGlrZXdpc2UgZm9yIFJYKQogICogQGZpZm9oYWxmc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gd2hlbiBNQ0lfVFhGSUZPSEFMRkVNUFRZCiAgKgkJICBpcyBhc3NlcnRlZCAobGlrZXdpc2UgZm9yIFJYKQotICogQGJyb2tlbl9ibG9ja2VuZDogdGhlIE1DSV9EQVRBQkxPQ0tFTkQgaXMgYnJva2VuIG9uIHRoZSBoYXJkd2FyZQotICoJCWFuZCB3aWxsIG5vdCB3b3JrIGF0IGFsbC4KLSAqIEBicm9rZW5fYmxvY2tlbmRfZG1hOiB0aGUgTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4gb24gdGhlIGhhcmR3YXJlIHdoZW4KLSAqCQl1c2luZyBETUEuCiAgKiBAc2RpbzogdmFyaWFudCBzdXBwb3J0cyBTRElPCiAgKiBAc3RfY2xrZGl2OiB0cnVlIGlmIHVzaW5nIGEgU1Qtc3BlY2lmaWMgY2xvY2sgZGl2aWRlciBhbGdvcml0aG0KICAqLwpAQCAtNTksOCArNTYsNiBAQAogCXVuc2lnbmVkIGludAkJZGF0YWxlbmd0aF9iaXRzOwogCXVuc2lnbmVkIGludAkJZmlmb3NpemU7CiAJdW5zaWduZWQgaW50CQlmaWZvaGFsZnNpemU7Ci0JYm9vbAkJCWJyb2tlbl9ibG9ja2VuZDsKLQlib29sCQkJYnJva2VuX2Jsb2NrZW5kX2RtYTsKIAlib29sCQkJc2RpbzsKIAlib29sCQkJc3RfY2xrZGl2OwogfTsKQEAgLTc2LDcgKzcxLDYgQEAKIAkuZmlmb2hhbGZzaXplCQk9IDggKiA0LAogCS5jbGtyZWdfZW5hYmxlCQk9IDEgPDwgMTMsIC8qIEhXRkNFTiAqLwogCS5kYXRhbGVuZ3RoX2JpdHMJPSAxNiwKLQkuYnJva2VuX2Jsb2NrZW5kX2RtYQk9IHRydWUsCiAJLnNkaW8JCQk9IHRydWUsCiB9OwogCkBAIC04Niw3ICs4MCw2IEBACiAJLmNsa3JlZwkJCT0gTUNJX0NMS19FTkFCTEUsCiAJLmNsa3JlZ19lbmFibGUJCT0gMSA8PCAxNCwgLyogSFdGQ0VOICovCiAJLmRhdGFsZW5ndGhfYml0cwk9IDI0LAotCS5icm9rZW5fYmxvY2tlbmQJPSB0cnVlLAogCS5zZGlvCQkJPSB0cnVlLAogCS5zdF9jbGtkaXYJCT0gdHJ1ZSwKIH07CkBAIC0yMTAsOCArMjAzLDYgQEAKIAlob3N0LT5kYXRhID0gZGF0YTsKIAlob3N0LT5zaXplID0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CiAJaG9zdC0+ZGF0YV94ZmVyZWQgPSAwOwotCWhvc3QtPmJsb2NrZW5kID0gZmFsc2U7Ci0JaG9zdC0+ZGF0YWVuZCA9IGZhbHNlOwogCiAJbW1jaV9pbml0X3NnKGhvc3QsIGRhdGEpOwogCkBAIC0yODgsMjEgKzI3OSwyNiBAQAogbW1jaV9kYXRhX2lycShzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCiAJICAgICAgdW5zaWduZWQgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgdmFyaWFudF9kYXRhICp2YXJpYW50ID0gaG9zdC0+dmFyaWFudDsKLQogCS8qIEZpcnN0IGNoZWNrIGZvciBlcnJvcnMgKi8KIAlpZiAoc3RhdHVzICYgKE1DSV9EQVRBQ1JDRkFJTHxNQ0lfREFUQVRJTUVPVVR8TUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpIHsKLQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNQ0kgRVJST1IgSVJRIChzdGF0dXMgJTA4eClcbiIsIHN0YXR1cyk7Ci0JCWlmIChzdGF0dXMgJiBNQ0lfREFUQUNSQ0ZBSUwpCi0JCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7Ci0JCWVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkKLQkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKLQkJZWxzZSBpZiAoc3RhdHVzICYgKE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKQotCQkJZGF0YS0+ZXJyb3IgPSAtRUlPOworCQl1MzIgcmVtYWluLCBzdWNjZXNzOwogCi0JCS8qIEZvcmNlLWNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiAqLwotCQlob3N0LT5ibG9ja2VuZCA9IHRydWU7Ci0JCWhvc3QtPmRhdGFlbmQgPSB0cnVlOworCQkvKiBDYWxjdWxhdGUgaG93IGZhciB3ZSBhcmUgaW50byB0aGUgdHJhbnNmZXIgKi8KKwkJcmVtYWluID0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ0lEQVRBQ05UKTsKKwkJc3VjY2VzcyA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzIC0gcmVtYWluOworCisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTUNJIEVSUk9SIElSUSAoc3RhdHVzICUwOHgpXG4iLCBzdGF0dXMpOworCQlpZiAoc3RhdHVzICYgTUNJX0RBVEFDUkNGQUlMKSB7CisJCQkvKiBMYXN0IGJsb2NrIHdhcyBub3Qgc3VjY2Vzc2Z1bCAqLworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MgLSAxLCBkYXRhLT5ibGtzeik7CisJCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7CisJCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX0RBVEFUSU1FT1VUKSB7CisJCQlob3N0LT5kYXRhX3hmZXJlZCA9IHJvdW5kX2Rvd24oc3VjY2VzcywgZGF0YS0+Ymxrc3opOworCQkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIChNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkgeworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MsIGRhdGEtPmJsa3N6KTsKKwkJCWRhdGEtPmVycm9yID0gLUVJTzsKKwkJfQogCiAJCS8qCiAJCSAqIFdlIGhpdCBhbiBlcnJvciBjb25kaXRpb24uICBFbnN1cmUgdGhhdCBhbnkgZGF0YQpAQCAtMzIxLDYxICszMTcsMTQgQEAKIAkJfQogCX0KIAotCS8qCi0JICogT24gQVJNIHZhcmlhbnRzIGluIFBJTyBtb2RlLCBNQ0lfREFUQUJMT0NLRU5ECi0JICogaXMgYWx3YXlzIHNlbnQgZmlyc3QsIGFuZCB3ZSBpbmNyZWFzZSB0aGUKLQkgKiB0cmFuc2ZlcmVkIG51bWJlciBvZiBieXRlcyBmb3IgdGhhdCBJUlEuIFRoZW4KLQkgKiBNQ0lfREFUQUVORCBmb2xsb3dzIGFuZCB3ZSBjb25jbHVkZSB0aGUgdHJhbnNhY3Rpb24uCi0JICoKLQkgKiBPbiB0aGUgVXg1MDAgc2luZ2xlLUlSUSB2YXJpYW50IE1DSV9EQVRBQkxPQ0tFTkQKLQkgKiBkb2Vzbid0IHNlZW0gdG8gaW1tZWRpYXRlbHkgY2xlYXIgZnJvbSB0aGUgc3RhdHVzLAotCSAqIHNvIHdlIGNhbid0IHVzZSBpdCBrZWVwIGNvdW50IHdoZW4gb25seSBvbmUgaXJxIGlzCi0JICogdXNlZCBiZWNhdXNlIHRoZSBpcnEgd2lsbCBoaXQgZm9yIG90aGVyIHJlYXNvbnMsIGFuZAotCSAqIHRoZW4gdGhlIGZsYWcgaXMgc3RpbGwgdXAuIFNvIHdlIHVzZSB0aGUgTUNJX0RBVEFFTkQKLQkgKiBJUlEgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIHRyYW5zZmVyIGJlY2F1c2UKLQkgKiBNQ0lfREFUQUJMT0NLRU5EIGlzIGJyb2tlbi4KLQkgKgotCSAqIEluIHRoZSBVMzAwLCB0aGUgSVJRcyBjYW4gYXJyaXZlIG91dC1vZi1vcmRlciwKLQkgKiBlLmcuIE1DSV9EQVRBQkxPQ0tFTkQgc29tZXRpbWVzIGFycml2ZXMgYWZ0ZXIgTUNJX0RBVEFFTkQsCi0JICogc28gZm9yIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIGZsYWdzICJibG9ja2VuZCIgYW5kCi0JICogImRhdGFlbmQiIHRvIG1ha2Ugc3VyZSBib3RoIElSUXMgaGF2ZSBhcnJpdmVkIGJlZm9yZQotCSAqIGNvbmNsdWRpbmcgdGhlIHRyYW5zYWN0aW9uLiAoVGhpcyBkb2VzIG5vdCBhcHBseQotCSAqIHRvIHRoZSBVeDUwMCB3aGljaCBkb2Vzbid0IGZpcmUgTUNJX0RBVEFCTE9DS0VORAotCSAqIGF0IGFsbC4pIEluIERNQSBtb2RlIGl0IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBwcm9ibGVtCi0JICogYXMgdGhlIFV4NTAwLgotCSAqLwotCWlmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKSB7Ci0JCS8qCi0JCSAqIEp1c3QgYmVpbmcgYSBsaXR0bGUgb3Zlci1jYXV0aW91cywgd2UgZG8gbm90Ci0JCSAqIHVzZSB0aGlzIHByb2dyZXNzaXZlIHVwZGF0ZSBpZiB0aGUgaGFyZHdhcmUgYmxvY2tlbmQKLQkJICogZmxhZyBpcyB1bnJlbGlhYmxlOiBzaW5jZSBpdCBjYW4gc3RheSBoaWdoIGJldHdlZW4KLQkJICogSVJRcyBpdCB3aWxsIGNvcnJ1cHQgdGhlIHRyYW5zZmVyIGNvdW50ZXIuCi0JCSAqLwotCQlpZiAoIXZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkKLQkJCWhvc3QtPmRhdGFfeGZlcmVkICs9IGRhdGEtPmJsa3N6OwotCQlob3N0LT5ibG9ja2VuZCA9IHRydWU7Ci0JfQorCWlmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKQorCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgInN0cmF5IE1DSV9EQVRBQkxPQ0tFTkQgaW50ZXJydXB0XG4iKTsKIAotCWlmIChzdGF0dXMgJiBNQ0lfREFUQUVORCkKLQkJaG9zdC0+ZGF0YWVuZCA9IHRydWU7Ci0KLQkvKgotCSAqIE9uIHZhcmlhbnRzIHdpdGggYnJva2VuIGJsb2NrZW5kIHdlIHNoYWxsIG9ubHkgd2FpdCBmb3IgZGF0YWVuZCwKLQkgKiBvbiBvdGhlcnMgd2UgbXVzdCBzeW5jIHdpdGggdGhlIGJsb2NrZW5kIHNpZ25hbCBzaW5jZSB0aGV5IGNhbgotCSAqIGFwcGVhciBvdXQtb2Ytb3JkZXIuCi0JICovCi0JaWYgKGhvc3QtPmRhdGFlbmQgJiYgKGhvc3QtPmJsb2NrZW5kIHx8IHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkpIHsKKwlpZiAoc3RhdHVzICYgTUNJX0RBVEFFTkQgfHwgZGF0YS0+ZXJyb3IpIHsKIAkJbW1jaV9zdG9wX2RhdGEoaG9zdCk7CiAKLQkJLyogUmVzZXQgdGhlc2UgZmxhZ3MgKi8KLQkJaG9zdC0+YmxvY2tlbmQgPSBmYWxzZTsKLQkJaG9zdC0+ZGF0YWVuZCA9IGZhbHNlOwotCi0JCS8qCi0JCSAqIFZhcmlhbnRzIHdpdGggYnJva2VuIGJsb2NrZW5kIGZsYWdzIG5lZWQgdG8gaGFuZGxlIHRoZQotCQkgKiBlbmQgb2YgdGhlIGVudGlyZSB0cmFuc2ZlciBoZXJlLgotCQkgKi8KLQkJaWYgKHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCAmJiAhZGF0YS0+ZXJyb3IpCisJCWlmICghZGF0YS0+ZXJyb3IpCisJCQkvKiBUaGUgZXJyb3IgY2xhdXNlIGlzIGhhbmRsZWQgYWJvdmUsIHN1Y2Nlc3MhICovCiAJCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAogCQlpZiAoIWRhdGEtPnN0b3ApIHsKQEAgLTM5NCwxNSArMzQzLDE1IEBACiAKIAlob3N0LT5jbWQgPSBOVUxMOwogCi0JY21kLT5yZXNwWzBdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTApOwotCWNtZC0+cmVzcFsxXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UxKTsKLQljbWQtPnJlc3BbMl0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMik7Ci0JY21kLT5yZXNwWzNdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTMpOwotCiAJaWYgKHN0YXR1cyAmIE1DSV9DTURUSU1FT1VUKSB7CiAJCWNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX0NNRENSQ0ZBSUwgJiYgY21kLT5mbGFncyAmIE1NQ19SU1BfQ1JDKSB7CiAJCWNtZC0+ZXJyb3IgPSAtRUlMU0VROworCX0gZWxzZSB7CisJCWNtZC0+cmVzcFswXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UwKTsKKwkJY21kLT5yZXNwWzFdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTEpOworCQljbWQtPnJlc3BbMl0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMik7CisJCWNtZC0+cmVzcFszXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UzKTsKIAl9CiAKIAlpZiAoIWNtZC0+ZGF0YSB8fCBjbWQtPmVycm9yKSB7CkBAIC03NzAsNyArNzE5LDYgQEAKIAlzdHJ1Y3QgdmFyaWFudF9kYXRhICp2YXJpYW50ID0gaWQtPmRhdGE7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKLQl1bnNpZ25lZCBpbnQgbWFzazsKIAlpbnQgcmV0OwogCiAJLyogbXVzdCBoYXZlIHBsYXRmb3JtIGRhdGEgKi8KQEAgLTk1MSwxMiArODk5LDcgQEAKIAkJCWdvdG8gaXJxMF9mcmVlOwogCX0KIAotCW1hc2sgPSBNQ0lfSVJRRU5BQkxFOwotCS8qIERvbid0IHVzZSB0aGUgZGF0YWJsb2NrZW5kIGZsYWcgaWYgaXQncyBicm9rZW4gKi8KLQlpZiAodmFyaWFudC0+YnJva2VuX2Jsb2NrZW5kKQotCQltYXNrICY9IH5NQ0lfREFUQUJMT0NLRU5EOwotCi0Jd3JpdGVsKG1hc2ssIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCXdyaXRlbChNQ0lfSVJRRU5BQkxFLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKIAogCWFtYmFfc2V0X2RydmRhdGEoZGV2LCBtbWMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCmluZGV4IGRmMDZmMDEuLmMxZGY3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCkBAIC0xMzcsNyArMTM3LDcgQEAKICNkZWZpbmUgTUNJX0lSUUVOQUJMRQlcCiAJKE1DSV9DTURDUkNGQUlMTUFTS3xNQ0lfREFUQUNSQ0ZBSUxNQVNLfE1DSV9DTURUSU1FT1VUTUFTS3wJXAogCU1DSV9EQVRBVElNRU9VVE1BU0t8TUNJX1RYVU5ERVJSVU5NQVNLfE1DSV9SWE9WRVJSVU5NQVNLfAlcCi0JTUNJX0NNRFJFU1BFTkRNQVNLfE1DSV9DTURTRU5UTUFTS3xNQ0lfREFUQUJMT0NLRU5ETUFTSykKKwlNQ0lfQ01EUkVTUEVORE1BU0t8TUNJX0NNRFNFTlRNQVNLKQogCiAvKiBUaGVzZSBpbnRlcnJ1cHRzIGFyZSBkaXJlY3RlZCB0byBJUlExIHdoZW4gdHdvIElSUSBsaW5lcyBhcmUgYXZhaWxhYmxlICovCiAjZGVmaW5lIE1DSV9JUlExTUFTSyBcCkBAIC0xNzcsOSArMTc3LDYgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIAl1bnNpZ25lZCBpbnQJCW9sZHN0YXQ7CiAKLQlib29sCQkJYmxvY2tlbmQ7Ci0JYm9vbAkJCWRhdGFlbmQ7Ci0KIAkvKiBwaW8gc3R1ZmYgKi8KIAlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyCXNnX21pdGVyOwogCXVuc2lnbmVkIGludAkJc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwppbmRleCA1ZGVjZmQwLi4xNTNhYjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCkBAIC0zODMsMTQgKzM4MywzMCBAQAogCWhvc3QtPmN1cnIudXNlcl9wYWdlcyA9IDA7CiAKIAlib3ggPSAmbmMtPmNtZFswXTsKLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+ZG1hLm51bV9lbnRzOyBpKyspIHsKKworCS8qIGxvY2F0aW9uIG9mIGNvbW1hbmQgYmxvY2sgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLworCUJVR19PTihob3N0LT5kbWEuY21kX2J1c2FkZHIgJiAweDA3KTsKKworCW5jLT5jbWRwdHIgPSAoaG9zdC0+ZG1hLmNtZF9idXNhZGRyID4+IDMpIHwgQ01EX1BUUl9MUDsKKwlob3N0LT5kbWEuaGRyLmNtZHB0ciA9IERNT1ZfQ01EX1BUUl9MSVNUIHwKKwkJCSAgICAgICBETU9WX0NNRF9BRERSKGhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkcik7CisJaG9zdC0+ZG1hLmhkci5jb21wbGV0ZV9mdW5jID0gbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYzsKKworCW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLAorCQkJaG9zdC0+ZG1hLm51bV9lbnRzLCBob3N0LT5kbWEuZGlyKTsKKwlpZiAobiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBtYXAgaW4gYWxsIHNnIGVsZW1lbnRzXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlob3N0LT5kbWEuc2cgPSBOVUxMOworCQlob3N0LT5kbWEubnVtX2VudHMgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3JfZWFjaF9zZyhob3N0LT5kbWEuc2csIHNnLCBuLCBpKSB7CisKIAkJYm94LT5jbWQgPSBDTURfTU9ERV9CT1g7CiAKLQkvKiBJbml0aWFsaXplIHNnIGRtYSBhZGRyZXNzICovCi0Jc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19kbWEobW1jX2Rldihob3N0LT5tbWMpLCBzZ19wYWdlKHNnKSkKLQkJCQkrIHNnLT5vZmZzZXQ7Ci0KLQlpZiAoaSA9PSAoaG9zdC0+ZG1hLm51bV9lbnRzIC0gMSkpCisJCWlmIChpID09IG4gLSAxKQogCQkJYm94LT5jbWQgfD0gQ01EX0xDOwogCQlyb3dzID0gKHNnX2RtYV9sZW4oc2cpICUgTUNJX0ZJRk9TSVpFKSA/CiAJCQkoc2dfZG1hX2xlbihzZykgLyBNQ0lfRklGT1NJWkUpICsgMSA6CkBAIC00MTgsMjcgKzQzNCw2IEBACiAJCQlib3gtPmNtZCB8PSBDTURfRFNUX0NSQ0koY3JjaSk7CiAJCX0KIAkJYm94Kys7Ci0JCXNnKys7Ci0JfQotCi0JLyogbG9jYXRpb24gb2YgY29tbWFuZCBibG9jayBtdXN0IGJlIDY0IGJpdCBhbGlnbmVkICovCi0JQlVHX09OKGhvc3QtPmRtYS5jbWRfYnVzYWRkciAmIDB4MDcpOwotCi0JbmMtPmNtZHB0ciA9IChob3N0LT5kbWEuY21kX2J1c2FkZHIgPj4gMykgfCBDTURfUFRSX0xQOwotCWhvc3QtPmRtYS5oZHIuY21kcHRyID0gRE1PVl9DTURfUFRSX0xJU1QgfAotCQkJICAgICAgIERNT1ZfQ01EX0FERFIoaG9zdC0+ZG1hLmNtZHB0cl9idXNhZGRyKTsKLQlob3N0LT5kbWEuaGRyLmNvbXBsZXRlX2Z1bmMgPSBtc21zZGNjX2RtYV9jb21wbGV0ZV9mdW5jOwotCi0JbiA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5kbWEuc2csCi0JCQlob3N0LT5kbWEubnVtX2VudHMsIGhvc3QtPmRtYS5kaXIpOwotLyogZHNiIGluc2lkZSBkbWFfbWFwX3NnIHdpbGwgd3JpdGUgbmMgb3V0IHRvIG1lbSBhcyB3ZWxsICovCi0KLQlpZiAobiAhPSBob3N0LT5kbWEubnVtX2VudHMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIG1hcCBpbiBhbGwgc2cgZWxlbWVudHNcbiIsCi0JCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7Ci0JCWhvc3QtPmRtYS5zZyA9IE5VTEw7Ci0JCWhvc3QtPmRtYS5udW1fZW50cyA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTMzMSw5ICsxMzI2LDYgQEAKIAlpZiAoaG9zdC0+dGltZXIuZnVuY3Rpb24pCiAJCXByX2luZm8oIiVzOiBQb2xsaW5nIHN0YXR1cyBtb2RlIGVuYWJsZWRcbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAotI2lmIEJVU0NMS19QV1JTQVZFCi0JbXNtc2RjY19kaXNhYmxlX2Nsb2Nrcyhob3N0LCAxKTsKLSNlbmRpZgogCXJldHVybiAwOwogIGNtZF9pcnFfZnJlZToKIAlmcmVlX2lycShjbWRfaXJxcmVzLT5zdGFydCwgaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwppbmRleCAxNzIwMzU4Li41MzA5YWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKQEAgLTI3NywxMCArMjc3LDQzIEBACiAJaG9zdC0+Y2xvY2sgPSBjbG9jazsKIH0KIAorLyoqCisgKiBzZGhjaV9zM2NfcGxhdGZvcm1fOGJpdF93aWR0aCAtIHN1cHBvcnQgOGJpdCBidXN3aWR0aAorICogQGhvc3Q6IFRoZSBTREhDSSBob3N0IGJlaW5nIHF1ZXJpZWQKKyAqIEB3aWR0aDogTU1DX0JVU19XSURUSF8gbWFjcm8gZm9yIHRoZSBidXMgd2lkdGggYmVpbmcgcmVxdWVzdGVkCisgKgorICogV2UgaGF2ZSA4LWJpdCB3aWR0aCBzdXBwb3J0IGJ1dCBpcyBub3QgYSB2MyBjb250cm9sbGVyLgorICogU28gd2UgYWRkIHBsYXRmb3JtXzhiaXRfd2lkdGgoKSBhbmQgc3VwcG9ydCA4Yml0IHdpZHRoLgorICovCitzdGF0aWMgaW50IHNkaGNpX3MzY19wbGF0Zm9ybV84Yml0X3dpZHRoKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgd2lkdGgpCit7CisJdTggY3RybDsKKworCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOworCisJc3dpdGNoICh3aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF84OgorCQljdHJsIHw9IFNESENJX0NUUkxfOEJJVEJVUzsKKwkJY3RybCAmPSB+U0RIQ0lfQ1RSTF80QklUQlVTOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfNDoKKwkJY3RybCB8PSBTREhDSV9DVFJMXzRCSVRCVVM7CisJCWN0cmwgJj0gflNESENJX0NUUkxfOEJJVEJVUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzZGhjaV9vcHMgc2RoY2lfczNjX29wcyA9IHsKIAkuZ2V0X21heF9jbG9jawkJPSBzZGhjaV9zM2NfZ2V0X21heF9jbGssCiAJLnNldF9jbG9jawkJPSBzZGhjaV9zM2Nfc2V0X2Nsb2NrLAogCS5nZXRfbWluX2Nsb2NrCQk9IHNkaGNpX3MzY19nZXRfbWluX2Nsb2NrLAorCS5wbGF0Zm9ybV84Yml0X3dpZHRoCT0gc2RoY2lfczNjX3BsYXRmb3JtXzhiaXRfd2lkdGgsCiB9OwogCiBzdGF0aWMgdm9pZCBzZGhjaV9zM2Nfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKQEAgLTQ3Myw2ICs1MDYsOSBAQAogCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5UKQogCQlob3N0LT5tbWMtPmNhcHMgPSBNTUNfQ0FQX05PTlJFTU9WQUJMRTsKIAorCWlmIChwZGF0YS0+aG9zdF9jYXBzKQorCQlob3N0LT5tbWMtPmNhcHMgfD0gcGRhdGEtPmhvc3RfY2FwczsKKwogCWhvc3QtPnF1aXJrcyB8PSAoU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfAogCQkJIFNESENJX1FVSVJLXzMyQklUX0RNQV9TSVpFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYwppbmRleCBmOGY2NWRmLi5mMDhmOTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGY0OWU0OWQuLjVlYmUyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC02NzIsMzMgKzY3Miw3IEBACiAJCXViaS0+bm9yX2ZsYXNoID0gMTsKIAl9CiAKLQkvKgotCSAqIFNldCBVQkkgbWluLiBJL08gc2l6ZSAoQHViaS0+bWluX2lvX3NpemUpLiBXZSB1c2UgQG10ZC0+d3JpdGVidWZzaXplCi0JICogZm9yIHRoZXNlIHB1cnBvc2VzLCBub3QgQG10ZC0+d3JpdGVzaXplLiBBdCB0aGUgbW9tZW50IHRoaXMgZG9lcyBub3QKLQkgKiBtYXR0ZXIgZm9yIE5BTkQsIGJlY2F1c2UgY3VycmVudGx5IEBtdGQtPndyaXRlYnVmc2l6ZSBpcyBlcXVpdmFsZW50IHRvCi0JICogQG10ZC0+d3JpdGVzaXplIGZvciBhbGwgTkFORHMuIEhvd2V2ZXIsIHNvbWUgQ0ZJIE5PUiBmbGFzaGVzIG1heQotCSAqIGhhdmUgQG10ZC0+d3JpdGVidWZzaXplIHdoaWNoIGlzIG11bHRpcGxlIG9mIEBtdGQtPndyaXRlc2l6ZS4KLQkgKgotCSAqIFRoZSByZWFzb24gd2UgdXNlIEBtdGQtPndyaXRlYnVmc2l6ZSBmb3IgQHViaS0+bWluX2lvX3NpemUgaXMgdGhhdAotCSAqIFVCSSBhbmQgVUJJRlMgcmVjb3ZlcnkgYWxnb3JpdGhtcyByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaWYgdGhlcmUgd2FzCi0JICogYW4gdW5jbGVhbiBwb3dlciBjdXQsIHRoZW4gd2UgY2FuIGZpbmQgb2Zmc2V0IG9mIHRoZSBsYXN0IGNvcnJ1cHRlZAotCSAqIG5vZGUsIGFsaWduIHRoZSBvZmZzZXQgdG8gQHViaS0+bWluX2lvX3NpemUsIHJlYWQgdGhlIHJlc3Qgb2YgdGhlCi0JICogZXJhc2VibG9jayBzdGFydGluZyBmcm9tIHRoaXMgb2Zmc2V0LCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSBhcmUKLQkgKiBvbmx5IDB4RkYgYnl0ZXMuIElmIHllcywgdGhlbiB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEKLQkgKiBjb3JydXB0aW9uIGNhdXNlZCBieSBhIHBvd2VyIGN1dCwgaWYgbm90LCB0aGVuIHRoaXMgaXMgcHJvYmFibHkgc29tZQotCSAqIHNldmVyZSBjb3JydXB0aW9uLgotCSAqCi0JICogVGh1cywgd2UgaGF2ZSB0byB1c2UgdGhlIG1heGltdW0gd3JpdGUgdW5pdCBzaXplIG9mIHRoZSBmbGFzaCwgd2hpY2gKLQkgKiBpcyBAbXRkLT53cml0ZWJ1ZnNpemUsIGJlY2F1c2UgQG10ZC0+d3JpdGVzaXplIGlzIHRoZSBtaW5pbXVtIHdyaXRlCi0JICogc2l6ZSwgbm90IHRoZSBtYXhpbXVtLgotCSAqLwotCWlmICh1YmktPm10ZC0+dHlwZSA9PSBNVERfTkFOREZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgPT0gdWJpLT5tdGQtPndyaXRlc2l6ZSk7Ci0JZWxzZSBpZiAodWJpLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgJSB1YmktPm10ZC0+d3JpdGVzaXplID09IDApOwotCi0JdWJpLT5taW5faW9fc2l6ZSA9IHViaS0+bXRkLT53cml0ZWJ1ZnNpemU7Ci0KKwl1YmktPm1pbl9pb19zaXplID0gdWJpLT5tdGQtPndyaXRlc2l6ZTsKIAl1YmktPmhkcnNfbWluX2lvX3NpemUgPSB1YmktPm10ZC0+d3JpdGVzaXplID4+IHViaS0+bXRkLT5zdWJwYWdlX3NmdDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggNjJkNmY4OC4uYWEwNzY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAKIG1vZHVsZV9pbml0KGtzODY5NV9pbml0KTsKIG1vZHVsZV9leGl0KGtzODY5NV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiU2ltdGVjIEVsZWN0cm9uaWNzIikKK01PRFVMRV9BVVRIT1IoIlNpbXRlYyBFbGVjdHJvbmljcyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyZWwgS1M4Njk1IChDZW50YXVyKSBFdGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06IiBNT0RVTEVOQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCBhNjk5YmJmLi4zODI0MzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC00OCw2ICs0OCw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEXzJfMCl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7IDAgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCBkZTQwZDNiLi4yOGEzMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0zMTIsMTEgKzMxMiw5IEBACiAJaWYgKGFkYXB0ZXItPmxpbmtfdXAgIT0gbGlua191cCkgewogCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gLTE7CiAJCWlmIChsaW5rX3VwKSB7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgdXBcbiIsIG5ldGRldi0+bmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgZG93blxuIiwgbmV0ZGV2LT5uYW1lKTsKIAkJfQpAQCAtMjYyOCw4ICsyNjI2LDYgQEAKIAogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnR4X2VxLm5hcGksIGJlX3BvbGxfdHhfbWNjLAogCQlCRV9OQVBJX1dFSUdIVCk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3VubWFwX3BjaV9iYXJzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IGRmOTllZGYuLjBiYTU5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTc1NTMsNiArNzU1MywxMCBAQAogCSAgICAhKGRhdGEgJiBFVEhfRkxBR19SWFZMQU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIFRTTyB3aXRoIFZMQU4gdGFnIHdvbid0IHdvcmsgd2l0aCBjdXJyZW50IGZpcm13YXJlICovCisJaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1RYVkxBTikpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCB8IEVUSF9GTEFHX1JYVkxBTiB8CiAJCQkJICBFVEhfRkxBR19UWFZMQU4pOwogCWlmIChyYykKQEAgLTc5NjIsMTEgKzc5NjYsOCBAQAogCiAJCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLwogCQllcnIgPSBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nICIKLQkJCQkJICAgICJmYWlsZWQgMHgleFxuIiwgZXJyKTsKLQkJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KLQkJfQorCQlpZiAoIWVycikKKwkJCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CiAKIAl9IGVsc2UgewogCQlicC0+cGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUENJWCk7CkBAIC04MjI5LDggKzgyMzAsMTAgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dF91bm1hcDoKLQlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1BDSUUpCisJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19BRVJfRU5BQkxFRCkgewogCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5CTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CisJfQogCiAJaWYgKGJwLT5yZWd2aWV3KSB7CiAJCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOwpAQCAtODQxOCw4ICs4NDIxLDEwIEBACiAKIAlrZnJlZShicC0+dGVtcF9zdGF0c19ibGspOwogCi0JaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lFKQorCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQpIHsKIAkJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJCWJwLT5mbGFncyAmPSB+Qk5YMl9GTEFHX0FFUl9FTkFCTEVEOworCX0KIAogCWZyZWVfbmV0ZGV2KGRldik7CiAKQEAgLTg1MzUsNyArODU0MCw3IEBACiAJfQogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZiAoIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJRSkpCisJaWYgKCEoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0FFUl9FTkFCTEVEKSkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCWVyciA9IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5oIGIvZHJpdmVycy9uZXQvYm54Mi5oCmluZGV4IDU0ODhhMmU4Li5mNDU5ZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC02NzQxLDYgKzY3NDEsNyBAQAogI2RlZmluZSBCTlgyX0ZMQUdfSlVNQk9fQlJPS0VOCQkweDAwMDAwODAwCiAjZGVmaW5lIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOCQkweDAwMDAxMDAwCiAjZGVmaW5lIEJOWDJfRkxBR19CUk9LRU5fU1RBVFMJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQk5YMl9GTEFHX0FFUl9FTkFCTEVECQkweDAwMDA0MDAwCiAKIAlzdHJ1Y3QgYm54Ml9uYXBpCWJueDJfbmFwaVtCTlgyX01BWF9NU0lYX1ZFQ107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IDhlNDE4MzcuLjY1M2M2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMjIsOCArMjIsOCBAQAogICogKHlvdSB3aWxsIG5lZWQgdG8gcmVib290IGFmdGVyd2FyZHMpICovCiAvKiAjZGVmaW5lIEJOWDJYX1NUT1BfT05fRVJST1IgKi8KIAotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4wMC00IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMS8wMS8xOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OICAgICAgIjEuNjIuMDAtNSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAgICAgIjIwMTEvMDEvMzAiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUiAgICAgICAgICAgIDB4MDQwMjAwCiAKICNkZWZpbmUgQk5YMlhfTVVMVElfUVVFVUUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwppbmRleCA3MTYwZWM1Li5kZDEyMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCkBAIC0zOTQ4LDQ4ICszOTQ4LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4XzgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkJICAgICAgIHN0cnVjdCBibngyeF9waHkgKnBoeSkKLXsKLQl1MTYgdmFsOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAotCQkJTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKLQotCWlmICh2YWwgPT0gMCkgewotCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBEaXNhYmxlIFBMTCBzZXF1ZW5jZXIgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBjbGVhciBiaXQgMTMpICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCi0JCQlNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOwotCXZhbCAmPSB+KDE8PDEzKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCi0JCSAgICAgICBNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsIHZhbCk7Ci0KLQkvKiBQTEwgY29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1RSwgMHgxMDc3KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1RCwgMHgwMDAwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1QywgMHgwMzBCKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1QiwgMHgxMjQwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1QSwgMHgyNDkwKTsKLQotCS8qIFR4IENvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwQTcsIDB4MEM3NCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwQTYsIDB4OTA0MSk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwQTUsIDB4NDY0MCk7Ci0KLQkvKiBSeCBDb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEZFLCAweDAxQzQpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEZELCAweDkyNDkpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEZDLCAweDIwMTUpOwotCi0JLyogRW5hYmxlIFBMTCBzZXF1ZW5jZXIgICh1c2UgcmVhZC1tb2RpZnktd3JpdGUgdG8gc2V0IGJpdCAxMykgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCAmdmFsKTsKLQl2YWwgfD0gKDE8PDEzKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCQkJQkNNODA3MyBQSFkgU0VDVElPTgkJCSAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MTQ4LDggKzQxMDYsNiBAQAogCiAJYm54MnhfODA3M19zZXRfcGF1c2VfY2wzNyhwYXJhbXMsIHBoeSwgdmFycyk7CiAKLQlibngyeF84MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKGJwLCBwaHkpOwotCiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCiAJCQlNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsICZ0bXAxKTsKIApAQCAtNjUxOSw2ICs2NDc1LDE4IEBACiAJCQkJCSBNRElPX1BNQV9ERVZBRCwKIAkJCQkJIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSywKIAkJCQkJIDB4ODApOworCisJCQkvKiBUZWxsIExFRDMgdG8gYmxpbmsgb24gc291cmNlICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKKwkJCQkJTURJT19QTUFfREVWQUQsCisJCQkJCU1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkJCQkmdmFsKTsKKwkJCXZhbCAmPSB+KDc8PDYpOworCQkJdmFsIHw9ICgxPDw2KTsgLyogQTgzQls4OjZdPSAxICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCisJCQkJCSBNRElPX1BNQV9ERVZBRCwKKwkJCQkJIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkJCQkgdmFsKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC03NzIwLDEwICs3Njg4LDEzIEBACiAJc3RydWN0IGJueDJ4X3BoeSBwaHlbUE9SVF9NQVhdOwogCXN0cnVjdCBibngyeF9waHkgKnBoeV9ibGtbUE9SVF9NQVhdOwogCXUxNiB2YWw7Ci0JczggcG9ydDsKKwlzOCBwb3J0ID0gMDsKIAlzOCBwb3J0X29mX3BhdGggPSAwOwotCi0JYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgMCk7CisJdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlOworCXN3YXBfdmFsID0gUkVHX1JEKGJwLCAgTklHX1JFR19QT1JUX1NXQVApOworCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsICBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKKwlwb3J0IF49IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKTsKKwlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwb3J0KTsKIAkvKiBQQVJUMSAtIFJlc2V0IGJvdGggcGh5cyAqLwogCWZvciAocG9ydCA9IFBPUlRfTUFYIC0gMTsgcG9ydCA+PSBQT1JUXzA7IHBvcnQtLSkgewogCQl1MzIgc2htZW1fYmFzZSwgc2htZW0yX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKaW5kZXggOGNkY2Y1YjMuLmY0MDc0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKQEAgLTIzMDEsMTUgKzIzMDEsMTAgQEAKIAkJLyogYWNjZXB0IG1hdGNoZWQgdWNhc3QgKi8KIAkJZHJvcF9hbGxfdWNhc3QgPSAwOwogCX0KLQlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpIHsKKwlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpCiAJCS8qIGFjY2VwdCBtYXRjaGVkIG1jYXN0ICovCiAJCWRyb3BfYWxsX21jYXN0ID0gMDsKLQkJaWYgKElTX01GX1NJKGJwKSkKLQkJCS8qIHNpbmNlIG1jYXN0IGFkZHJlc3NlcyB3b24ndCBhcnJpdmUgd2l0aCBvdmxhbiwKLQkJCSAqIGZ3IG5lZWRzIHRvIGFjY2VwdCBhbGwgb2YgdGhlbSBpbgotCQkJICogc3dpdGNoLWluZGVwZW5kZW50IG1vZGUgKi8KLQkJCWFjY3BfYWxsX21jYXN0ID0gMTsKLQl9CisKIAlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9BTExfVU5JQ0FTVCkgewogCQkvKiBhY2NlcHQgYWxsIG1jYXN0ICovCiAJCWRyb3BfYWxsX3VjYXN0ID0gMDsKQEAgLTUyOTYsMTAgKzUyOTEsNiBAQAogCQl9CiAJfQogCi0JYnAtPnBvcnQubmVlZF9od19sb2NrID0gYm54MnhfaHdfbG9ja19yZXF1aXJlZChicCwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtX2Jhc2UsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7Ci0KIAlibngyeF9zZXR1cF9mYW5fZmFpbHVyZV9kZXRlY3Rpb24oYnApOwogCiAJLyogY2xlYXIgUFhQMiBhdHRlbnRpb25zICovCkBAIC01NTAzLDkgKzU0OTQsNiBAQAogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgTUNQX0JMT0NLLCBpbml0X3N0YWdlKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBETUFFX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSBibngyeF9od19sb2NrX3JlcXVpcmVkKGJwLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW1fYmFzZSwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKIAlpZiAoYm54MnhfZmFuX2ZhaWx1cmVfZGV0X3JlcShicCwgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAogCQkJCSAgICAgIGJwLT5jb21tb24uc2htZW0yX2Jhc2UsIHBvcnQpKSB7CiAJCXUzMiByZWdfYWRkciA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKQEAgLTgzNzksNiArODM2NywxNyBAQAogCQkgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikpCiAJCWJwLT5tZGlvLnBydGFkID0KIAkJCVhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKTsKKworCS8qCisJICogQ2hlY2sgaWYgaHcgbG9jayBpcyByZXF1aXJlZCB0byBhY2Nlc3MgTURDL01ESU8gYnVzIHRvIHRoZSBQSFkocykKKwkgKiBJbiBNRiBtb2RlLCBpdCBpcyBzZXQgdG8gY292ZXIgc2VsZiB0ZXN0IGNhc2VzCisJICovCisJaWYgKElTX01GKGJwKSkKKwkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKKwllbHNlCisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IGJueDJ4X2h3X2xvY2tfcmVxdWlyZWQoYnAsCisJCQkJCQkJYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAorCQkJCQkJCWJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X21hY19od2luZm8oc3RydWN0IGJueDJ4ICpicCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCAxNzE3ODJlLi4xMDI0YWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC0yNDcwLDYgKzI0NzAsMTAgQEAKIAlpZiAoIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCiAJCWdvdG8gb3V0OwogCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsYWNwZHUpKSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCBmNGU2MzhjLi41YzZmYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0zMjYsNiArMzI2LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGJvbmRfZGV2KSkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBiMTAyNWI4Li4xNjNlMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTI3MzMsNiArMjczMywxMCBAQAogCWlmICghc2xhdmUgfHwgIXNsYXZlX2RvX2FycF92YWxpZGF0ZShib25kLCBzbGF2ZSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihkZXYpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IGQ1YTlkYjYuLjVkZWM0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC0yMyw3ICsyMyw3IEBACiAKIAkgIEFzIG9ubHkgdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBvZiBDQU4gZnJhbWVzIGlzIGltcGxlbWVudGVkLCB0aGlzCiAJICBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGUgKHNlcmlhbC9VU0IpIENBTiBoYXJkd2FyZSBmcm9tOgotCSAgd3d3LmNhbnVzYi5jb20gLyB3d3cuY2FuMjMyLmNvbSAvIHd3dy5taWN0cm9uaWMuY29tIC8gd3d3LmNhbmhhY2suZGUKKwkgIHd3dy5jYW51c2IuY29tIC8gd3d3LmNhbjIzMi5jb20gLyB3d3cubWljdHJvbmljcy5kZSAvIHd3dy5jYW5oYWNrLmRlCiAKIAkgIFVzZXJzcGFjZSB0b29scyB0byBhdHRhY2ggdGhlIFNMQ0FOIGxpbmUgZGlzY2lwbGluZSAoc2xjYW5fYXR0YWNoLAogCSAgc2xjYW5kKSBjYW4gYmUgZm91bmQgaW4gdGhlIGNhbi11dGlscyBhdCB0aGUgU29ja2V0Q0FOIFNWTiwgc2VlCkBAIC0xMTcsNiArMTE3LDggQEAKIAogc291cmNlICJkcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZyIKKwogY29uZmlnIENBTl9ERUJVR19ERVZJQ0VTCiAJYm9vbCAiQ0FOIGRldmljZXMgZGVidWdnaW5nIG1lc3NhZ2VzIgogCWRlcGVuZHMgb24gQ0FOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKaW5kZXggMDdjYTE1OS4uNTNjODJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIGNhbi1kZXYteQkJCTo9IGRldi5vCiAKIG9iai15CQkJCSs9IHVzYi8KK29iai15CQkJCSs9IHNvZnRpbmcvCiAKIG9iai0kKENPTkZJR19DQU5fU0pBMTAwMCkJKz0gc2phMTAwMC8KIG9iai0kKENPTkZJR19DQU5fTVNDQU4pCQkrPSBtc2Nhbi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKaW5kZXggN2VmODNkMC4uNTdkMmZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKiBhdDkxX2Nhbi5jIC0gQ0FOIG5ldHdvcmsgZHJpdmVyIGZvciBBVDkxIFNvQyBDQU4gY29udHJvbGxlcgogICoKICAqIChDKSAyMDA3IGJ5IEhhbnMgSi4gS29jaCA8aGprQGhhbnNqa29jaC5kZT4KLSAqIChDKSAyMDA4LCAyMDA5LCAyMDEwIGJ5IE1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKiAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBieSBNYXJjIEtsZWluZS1CdWRkZSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgogICoKICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIGRpc3RyaWJ1dGVkIGluIHRoZSAnQ09QWUlORycKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDAsMjIgKzQxLDIzIEBACiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKLSNkZWZpbmUgQVQ5MV9OQVBJX1dFSUdIVAkxMgorI2RlZmluZSBBVDkxX05BUElfV0VJR0hUCTExCiAKIC8qCiAgKiBSWC9UWCBNYWlsYm94IHNwbGl0CiAgKiBkb24ndCBkYXJlIHRvIHRvdWNoCiAgKi8KLSNkZWZpbmUgQVQ5MV9NQl9SWF9OVU0JCTEyCisjZGVmaW5lIEFUOTFfTUJfUlhfTlVNCQkxMQogI2RlZmluZSBBVDkxX01CX1RYX1NISUZUCTIKIAotI2RlZmluZSBBVDkxX01CX1JYX0ZJUlNUCTAKKyNkZWZpbmUgQVQ5MV9NQl9SWF9GSVJTVAkxCiAjZGVmaW5lIEFUOTFfTUJfUlhfTEFTVAkJKEFUOTFfTUJfUlhfRklSU1QgKyBBVDkxX01CX1JYX05VTSAtIDEpCiAKICNkZWZpbmUgQVQ5MV9NQl9SWF9NQVNLKGkpCSgoMSA8PCAoaSkpIC0gMSkKICNkZWZpbmUgQVQ5MV9NQl9SWF9TUExJVAk4CiAjZGVmaW5lIEFUOTFfTUJfUlhfTE9XX0xBU1QJKEFUOTFfTUJfUlhfU1BMSVQgLSAxKQotI2RlZmluZSBBVDkxX01CX1JYX0xPV19NQVNLCShBVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9TUExJVCkpCisjZGVmaW5lIEFUOTFfTUJfUlhfTE9XX01BU0sJKEFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX1NQTElUKSAmIFwKKwkJCQkgfkFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX0ZJUlNUKSkKIAogI2RlZmluZSBBVDkxX01CX1RYX05VTQkJKDEgPDwgQVQ5MV9NQl9UWF9TSElGVCkKICNkZWZpbmUgQVQ5MV9NQl9UWF9GSVJTVAkoQVQ5MV9NQl9SWF9MQVNUICsgMSkKQEAgLTE2OCw2ICsxNzAsOCBAQAogCiAJc3RydWN0IGNsawkJKmNsazsKIAlzdHJ1Y3QgYXQ5MV9jYW5fZGF0YQkqcGRhdGE7CisKKwljYW5pZF90CQkJbWIwX2lkOwogfTsKIAogc3RhdGljIHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGF0OTFfYml0dGltaW5nX2NvbnN0ID0gewpAQCAtMjIwLDYgKzIyNCwxOCBAQAogCXNldF9tYl9tb2RlX3ByaW8ocHJpdiwgbWIsIG1vZGUsIDApOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKGNhbmlkX3QgY2FuX2lkKQoreworCXUzMiByZWdfbWlkOworCisJaWYgKGNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJcmVnX21pZCA9IChjYW5faWQgJiBDQU5fRUZGX01BU0spIHwgQVQ5MV9NSURfTUlERTsKKwllbHNlCisJCXJlZ19taWQgPSAoY2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAxODsKKworCXJldHVybiByZWdfbWlkOworfQorCiAvKgogICogU3d0aWNoIHRyYW5zY2VpdmVyIG9uIG9yIG9mZgogICovCkBAIC0yMzMsMTIgKzI0OSwyMiBAQAogewogCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpOworCXUzMiByZWdfbWlkOwogCiAJLyoKLQkgKiBUaGUgZmlyc3QgMTIgbWFpbGJveGVzIGFyZSB1c2VkIGFzIGEgcmVjZXB0aW9uIEZJRk8uIFRoZQotCSAqIGxhc3QgbWFpbGJveCBpcyBjb25maWd1cmVkIHdpdGggb3ZlcndyaXRlIG9wdGlvbi4gVGhlCi0JICogb3ZlcndyaXRlIGZsYWcgaW5kaWNhdGVzIGEgRklGTyBvdmVyZmxvdy4KKwkgKiBEdWUgdG8gYSBjaGlwIGJ1ZyAoZXJyYXRhIDUwLjIuNi4zICYgNTAuMy41LjMpIHRoZSBmaXJzdAorCSAqIG1haWxib3ggaXMgZGlzYWJsZWQuIFRoZSBuZXh0IDExIG1haWxib3hlcyBhcmUgdXNlZCBhcyBhCisJICogcmVjZXB0aW9uIEZJRk8uIFRoZSBsYXN0IG1haWxib3ggaXMgY29uZmlndXJlZCB3aXRoCisJICogb3ZlcndyaXRlIG9wdGlvbi4gVGhlIG92ZXJ3cml0ZSBmbGFnIGluZGljYXRlcyBhIEZJRk8KKwkgKiBvdmVyZmxvdy4KIAkgKi8KKwlyZWdfbWlkID0gYXQ5MV9jYW5faWRfdG9fcmVnX21pZChwcml2LT5tYjBfaWQpOworCWZvciAoaSA9IDA7IGkgPCBBVDkxX01CX1JYX0ZJUlNUOyBpKyspIHsKKwkJc2V0X21iX21vZGUocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX0RJU0FCTEVEKTsKKwkJYXQ5MV93cml0ZShwcml2LCBBVDkxX01JRChpKSwgcmVnX21pZCk7CisJCWF0OTFfd3JpdGUocHJpdiwgQVQ5MV9NQ1IoaSksIDB4MCk7CS8qIGNsZWFyIGRsYyAqLworCX0KKwogCWZvciAoaSA9IEFUOTFfTUJfUlhfRklSU1Q7IGkgPCBBVDkxX01CX1JYX0xBU1Q7IGkrKykKIAkJc2V0X21iX21vZGUocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX1JYKTsKIAlzZXRfbWJfbW9kZShwcml2LCBBVDkxX01CX1JYX0xBU1QsIEFUOTFfTUJfTU9ERV9SWF9PVlJXUik7CkBAIC0yNTQsNyArMjgwLDggQEAKIAkJc2V0X21iX21vZGVfcHJpbyhwcml2LCBpLCBBVDkxX01CX01PREVfVFgsIDApOwogCiAJLyogUmVzZXQgdHggYW5kIHJ4IGhlbHBlciBwb2ludGVycyAqLwotCXByaXYtPnR4X25leHQgPSBwcml2LT50eF9lY2hvID0gcHJpdi0+cnhfbmV4dCA9IDA7CisJcHJpdi0+dHhfbmV4dCA9IHByaXYtPnR4X2VjaG8gPSAwOworCXByaXYtPnJ4X25leHQgPSBBVDkxX01CX1JYX0ZJUlNUOwogfQogCiBzdGF0aWMgaW50IGF0OTFfc2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzcyLDEyICszOTksNyBAQAogCQluZXRkZXZfZXJyKGRldiwgIkJVRyEgVFggYnVmZmVyIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCi0JaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpCi0JCXJlZ19taWQgPSAoY2YtPmNhbl9pZCAmIENBTl9FRkZfTUFTSykgfCBBVDkxX01JRF9NSURFOwotCWVsc2UKLQkJcmVnX21pZCA9IChjZi0+Y2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAxODsKLQorCXJlZ19taWQgPSBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKGNmLT5jYW5faWQpOwogCXJlZ19tY3IgPSAoKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpID8gQVQ5MV9NQ1JfTVJUUiA6IDApIHwKIAkJKGNmLT5jYW5fZGxjIDw8IDE2KSB8IEFUOTFfTUNSX01UQ1I7CiAKQEAgLTUzOSwyNyArNTYxLDMxIEBACiAgKgogICogVGhlb3J5IG9mIE9wZXJhdGlvbjoKICAqCi0gKiAxMiBvZiB0aGUgMTYgbWFpbGJveGVzIG9uIHRoZSBjaGlwIGFyZSByZXNlcnZlZCBmb3IgUlguIHdlIHNwbGl0Ci0gKiB0aGVtIGludG8gMiBncm91cHMuIFRoZSBsb3dlciBncm91cCBob2xkcyA4IGFuZCB1cHBlciA0IG1haWxib3hlcy4KKyAqIDExIG9mIHRoZSAxNiBtYWlsYm94ZXMgb24gdGhlIGNoaXAgYXJlIHJlc2VydmVkIGZvciBSWC4gd2Ugc3BsaXQKKyAqIHRoZW0gaW50byAyIGdyb3Vwcy4gVGhlIGxvd2VyIGdyb3VwIGhvbGRzIDcgYW5kIHVwcGVyIDQgbWFpbGJveGVzLgogICoKICAqIExpa2UgaXQgb3Igbm90LCBidXQgdGhlIGNoaXAgYWx3YXlzIHNhdmVzIGEgcmVjZWl2ZWQgQ0FOIG1lc3NhZ2UKICAqIGludG8gdGhlIGZpcnN0IGZyZWUgbWFpbGJveCBpdCBmaW5kcyAoc3RhcnRpbmcgd2l0aCB0aGUKICAqIGxvd2VzdCkuIFRoaXMgbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHQgdG8gcmVhZCB0aGUgbWVzc2FnZXMgaW4gdGhlCiAgKiByaWdodCBvcmRlciBmcm9tIHRoZSBjaGlwLiBUaGlzIGlzIGhvdyB3ZSB3b3JrIGFyb3VuZCB0aGF0IHByb2JsZW06CiAgKgotICogVGhlIGZpcnN0IG1lc3NhZ2UgZ29lcyBpbnRvIG1iIG5yLiAwIGFuZCBpc3N1ZXMgYW4gaW50ZXJydXB0LiBBbGwKKyAqIFRoZSBmaXJzdCBtZXNzYWdlIGdvZXMgaW50byBtYiBuci4gMSBhbmQgaXNzdWVzIGFuIGludGVycnVwdC4gQWxsCiAgKiByeCBpbnRzIGFyZSBkaXNhYmxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYW5kIGEgbmFwaSBwb2xsIGlzCiAgKiBzY2hlZHVsZWQuIFdlIHJlYWQgdGhlIG1haWxib3gsIGJ1dCBkbyBfbm90XyByZWVuYWJsZSB0aGUgbWIgKHRvCiAgKiByZWNlaXZlIGFub3RoZXIgbWVzc2FnZSkuCiAgKgogICogICAgbG93ZXIgbWJ4cyAgICAgIHVwcGVyCi0gKiAgIF9fX19fX15fX19fX18gICAgX19eX18KLSAqICAvICAgICAgICAgICAgIFwgIC8gICAgIFwKKyAqICAgICBfX19fXl9fX19fXyAgICBfX15fXworICogICAgLyAgICAgICAgICAgXCAgLyAgICAgXAogICogKy0rLSstKy0rLSstKy0rLSsrLSstKy0rLSsKLSAqIHx4fHh8eHx4fHh8eHx4fHh8fCB8IHwgfCB8CisgKiB8IHx4fHh8eHx4fHh8eHx4fHwgfCB8IHwgfAogICogKy0rLSstKy0rLSstKy0rLSsrLSstKy0rLSsKICAqICAwIDAgMCAwIDAgMCAgMCAwIDAgMCAxIDEgIFwgbWFpbAogICogIDAgMSAyIDMgNCA1ICA2IDcgOCA5IDAgMSAgLyBib3gKKyAqICBeCisgKiAgfAorICogICBcCisgKiAgICAgdW51c2VkLCBkdWUgdG8gY2hpcCBidWcKICAqCiAgKiBUaGUgdmFyaWFibGUgcHJpdi0+cnhfbmV4dCBwb2ludHMgdG8gdGhlIG5leHQgbWFpbGJveCB0byByZWFkIGEKICAqIG1lc3NhZ2UgZnJvbS4gQXMgbG9uZyB3ZSdyZSBpbiB0aGUgbG93ZXIgbWFpbGJveGVzIHdlIGp1c3QgcmVhZCB0aGUKQEAgLTU5MCwxMCArNjE2LDEwIEBACiAJCQkib3JkZXIgb2YgaW5jb21pbmcgZnJhbWVzIGNhbm5vdCBiZSBndWFyYW50ZWVkXG4iKTsKIAogIGFnYWluOgotCWZvciAobWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTlVNLCBwcml2LT5yeF9uZXh0KTsKLQkgICAgIG1iIDwgQVQ5MV9NQl9SWF9OVU0gJiYgcXVvdGEgPiAwOworCWZvciAobWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTEFTVCArIDEsIHByaXYtPnJ4X25leHQpOworCSAgICAgbWIgPCBBVDkxX01CX1JYX0xBU1QgKyAxICYmIHF1b3RhID4gMDsKIAkgICAgIHJlZ19zciA9IGF0OTFfcmVhZChwcml2LCBBVDkxX1NSKSwKLQkgICAgIG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX05VTSwgKytwcml2LT5yeF9uZXh0KSkgeworCSAgICAgbWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTEFTVCArIDEsICsrcHJpdi0+cnhfbmV4dCkpIHsKIAkJYXQ5MV9yZWFkX21zZyhkZXYsIG1iKTsKIAogCQkvKiByZWFjdGl2YXRlIG1haWxib3hlcyAqLwpAQCAtNjEwLDggKzYzNiw4IEBACiAKIAkvKiB1cHBlciBncm91cCBjb21wbGV0ZWQsIGxvb2sgYWdhaW4gaW4gbG93ZXIgKi8KIAlpZiAocHJpdi0+cnhfbmV4dCA+IEFUOTFfTUJfUlhfTE9XX0xBU1QgJiYKLQkgICAgcXVvdGEgPiAwICYmIG1iID49IEFUOTFfTUJfUlhfTlVNKSB7Ci0JCXByaXYtPnJ4X25leHQgPSAwOworCSAgICBxdW90YSA+IDAgJiYgbWIgPiBBVDkxX01CX1JYX0xBU1QpIHsKKwkJcHJpdi0+cnhfbmV4dCA9IEFUOTFfTUJfUlhfRklSU1Q7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC0xMDM3LDYgKzEwNjMsNjQgQEAKIAkubmRvX3N0YXJ0X3htaXQJPSBhdDkxX3N0YXJ0X3htaXQsCiB9OwogCitzdGF0aWMgc3NpemVfdCBhdDkxX3N5c2ZzX3Nob3dfbWIwX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKworCWlmIChwcml2LT5tYjBfaWQgJiBDQU5fRUZGX0ZMQUcpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgcHJpdi0+bWIwX2lkKTsKKwllbHNlCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTAzeFxuIiwgcHJpdi0+bWIwX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgYXQ5MV9zeXNmc19zZXRfbWIwX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBsb25nIGNhbl9pZDsKKwlzc2l6ZV90IHJldDsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZjYW5faWQpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gZXJyOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2FuX2lkICYgQ0FOX0VGRl9GTEFHKQorCQljYW5faWQgJj0gQ0FOX0VGRl9NQVNLIHwgQ0FOX0VGRl9GTEFHOworCWVsc2UKKwkJY2FuX2lkICY9IENBTl9TRkZfTUFTSzsKKworCXByaXYtPm1iMF9pZCA9IGNhbl9pZDsKKwlyZXQgPSBjb3VudDsKKworIG91dDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtYjBfaWQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCWF0OTFfc3lzZnNfc2hvd19tYjBfaWQsIGF0OTFfc3lzZnNfc2V0X21iMF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdDkxX3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX21iMF9pZC5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhdDkxX3N5c2ZzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYXQ5MV9zeXNmc19hdHRycywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF0OTFfY2FuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwODIsNiArMTE2Niw3IEBACiAJZGV2LT5uZXRkZXZfb3BzCT0gJmF0OTFfbmV0ZGV2X29wczsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOworCWRldi0+c3lzZnNfZ3JvdXBzWzBdID0gJmF0OTFfc3lzZnNfYXR0cl9ncm91cDsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXYtPmNhbi5jbG9jay5mcmVxID0gY2xrX2dldF9yYXRlKGNsayk7CkBAIC0xMDkzLDYgKzExNzgsNyBAQAogCXByaXYtPmRldiA9IGRldjsKIAlwcml2LT5jbGsgPSBjbGs7CiAJcHJpdi0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlwcml2LT5tYjBfaWQgPSAweDdmZjsKIAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIGF0OTFfcG9sbCwgQVQ5MV9OQVBJX1dFSUdIVCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCmluZGV4IGI5YTZkN2EuLjM2NmY1Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZXJtaW5hdGlvbiwgU19JV1VHTyB8IFNfSVJVR08sIGljYW4zX3N5c2ZzX3Nob3dfdGVybSwKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXJtaW5hdGlvbiwgU19JV1VTUiB8IFNfSVJVR08sIGljYW4zX3N5c2ZzX3Nob3dfdGVybSwKIAkJCQkJCSAgIGljYW4zX3N5c2ZzX3NldF90ZXJtKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmljYW4zX3N5c2ZzX2F0dHJzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE4MWIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACitjb25maWcgQ0FOX1NPRlRJTkcKKwl0cmlzdGF0ZSAiU29mdGluZyBHbWJoIENBTiBnZW5lcmljIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDQU5fREVWICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIENBTiBjYXJkcyBmcm9tIFNvZnRpbmcgR21iaCAmIHNvbWUgY2FyZHMKKwkgIGZyb20gVmVjdG9yIEdtYmguCisJICBTb2Z0aW5nIEdtYmggQ0FOIGNhcmRzIGNvbWUgd2l0aCAxIG9yIDIgcGh5c2ljYWwgYnVzc2VzLgorCSAgVGhvc2UgY2FyZHMgdHlwaWNhbGx5IHVzZSBEdWFsIFBvcnQgUkFNIHRvIGNvbW11bmljYXRlCisJICB3aXRoIHRoZSBob3N0IENQVS4gVGhlIGludGVyZmFjZSBpcyB0aGVuIGlkZW50aWNhbCBmb3IgUENJCisJICBhbmQgUENNQ0lBIGNhcmRzLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBvbiBhIHBsYXRmb3JtIGRldmljZSwKKwkgIHdoaWNoIGhhcyBiZWVuIGNyZWF0ZWQgYnkgc29mdGluZ19jcyBvciBzb2Z0aW5nX3BjaSBkcml2ZXIuCisJICBXYXJuaW5nOgorCSAgVGhlIEFQSSBvZiB0aGUgY2FyZCBkb2VzIG5vdCBhbGxvdyBmaW5lIGNvbnRyb2wgcGVyIGJ1cywgYnV0CisJICBjb250cm9scyB0aGUgMiBidXNzZXMgb24gdGhlIGNhcmQgdG9nZXRoZXIuCisJICBBcyBzdWNoLCBzb21lIGFjdGlvbnMgKHN0YXJ0L3N0b3AvYnVzb2ZmIHJlY292ZXJ5KSBvbiAxIGJ1cworCSAgbXVzdCBicmluZyBkb3duIHRoZSBvdGhlciBidXMgdG9vIHRlbXBvcmFyaWx5LgorCitjb25maWcgQ0FOX1NPRlRJTkdfQ1MKKwl0cmlzdGF0ZSAiU29mdGluZyBHbWJoIENBTiBwY21jaWEgY2FyZHMiCisJZGVwZW5kcyBvbiBQQ01DSUEKKwlzZWxlY3QgQ0FOX1NPRlRJTkcKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgZnJvbSBTb2Z0aW5nIEdtYmggJiBzb21lIGNhcmRzCisJICBmcm9tIFZlY3RvciBHbWJoLgorCSAgWW91IG5lZWQgZmlybXdhcmUgZm9yIHRoZXNlLCB3aGljaCB5b3UgY2FuIGdldCBhdAorCSAgaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL3NvY2tldGNhbi8KKwkgIFRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGlzIHdyaXR0ZW4gYWdhaW5zdAorCSAgZmlybXdhcmUgdmVyc2lvbiA0LjYgKHNvZnRpbmctZnctNC42LWJpbmFyaWVzLnRhci5neikKKwkgIEluIG9yZGVyIHRvIHVzZSB0aGUgY2FyZCBhcyBDQU4gZGV2aWNlLCB5b3UgbmVlZCB0aGUgU29mdGluZyBnZW5lcmljCisJICBzdXBwb3J0IHRvby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlNTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorCitzb2Z0aW5nLXkgOj0gc29mdGluZ19tYWluLm8gc29mdGluZ19mdy5vCitvYmotJChDT05GSUdfQ0FOX1NPRlRJTkcpICs9IHNvZnRpbmcubworb2JqLSQoQ09ORklHX0NBTl9TT0ZUSU5HX0NTKSArPSBzb2Z0aW5nX2NzLm8KKworY2NmbGFncy0kKENPTkZJR19DQU5fREVCVUdfREVWSUNFUykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzlmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBzb2Z0aW5nIGNvbW1vbiBpbnRlcmZhY2VzCisgKgorICogYnkgS3VydCBWYW4gRGlqY2ssIDIwMDgtMjAxMAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nX3BsYXRmb3JtLmgiCisKK3N0cnVjdCBzb2Z0aW5nOworCitzdHJ1Y3Qgc29mdGluZ19wcml2IHsKKwlzdHJ1Y3QgY2FuX3ByaXYgY2FuOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIhICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgeworCQlpbnQgcGVuZGluZzsKKwkJLyogdmFyaWFibGVzIHdpY2ggaG9sZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWludCBlY2hvX3B1dDsKKwkJaW50IGVjaG9fZ2V0OworCX0gdHg7CisJc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgYnRyX2NvbnN0OworCWludCBpbmRleDsKKwl1aW50OF90IG91dHB1dDsKKwl1aW50MTZfdCBjaGlwOworfTsKKyNkZWZpbmUgbmV0ZGV2MnNvZnRpbmcobmV0ZGV2KQkoKHN0cnVjdCBzb2Z0aW5nX3ByaXYgKiluZXRkZXZfcHJpdihuZXRkZXYpKQorCitzdHJ1Y3Qgc29mdGluZyB7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRbMl07CisJc3BpbmxvY2tfdCBzcGluOyAvKiBwcm90ZWN0IHRoaXMgc3RydWN0dXJlICYgRFBSQU0gYWNjZXNzICovCisJa3RpbWVfdCB0c19yZWY7CisJa3RpbWVfdCB0c19vdmVyZmxvdzsgLyogdGltZXN0YW1wIG92ZXJmbG93IHZhbHVlLCBpbiBrdGltZSAqLworCisJc3RydWN0IHsKKwkJLyogaW5kaWNhdGlvbiBvZiBmaXJtd2FyZSBzdGF0dXMgKi8KKwkJaW50IHVwOworCQkvKiBwcm90ZWN0aW9uIG9mIHRoZSAndXAnIHZhcmlhYmxlICovCisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gZnc7CisJc3RydWN0IHsKKwkJaW50IG5yOworCQlpbnQgcmVxdWVzdGVkOworCQlpbnQgc3ZjX2NvdW50OworCQl1bnNpZ25lZCBpbnQgZHByYW1fcG9zaXRpb247CisJfSBpcnE7CisJc3RydWN0IHsKKwkJaW50IHBlbmRpbmc7CisJCWludCBsYXN0X2J1czsKKwkJLyoKKwkJICoga2VlcCB0aGUgYnVzIHRoYXQgbGFzdCB0eCdkIGEgbWVzc2FnZSwKKwkJICogaW4gb3JkZXIgdG8gbGV0IGV2ZXJ5IG5ldGRldiBxdWV1ZSByZXN1bWUKKwkJICovCisJfSB0eDsKKwlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtOworCXVuc2lnbmVkIGxvbmcgZHByYW1fcGh5czsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3NpemU7CisJc3RydWN0IHsKKwkJdWludDE2X3QgZndfdmVyc2lvbiwgaHdfdmVyc2lvbiwgbGljZW5zZSwgc2VyaWFsOworCQl1aW50MTZfdCBjaGlwWzJdOworCQl1bnNpZ25lZCBpbnQgZnJlcTsgLyogcmVtb3RlIGNwdSdzIG9wZXJhdGluZyBmcmVxdWVuY3kgKi8KKwl9IGlkOworfTsKKworZXh0ZXJuIGludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitleHRlcm4ga3RpbWVfdCBzb2Z0aW5nX3JhdzJrdGltZShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgdTMyIHJhdyk7CisKK2V4dGVybiBpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCitleHRlcm4gaW50IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwKKwkJY29uc3QgY2hhciAqbXNnKTsKKworLyogTG9hZCBmaXJtd2FyZSBhZnRlciByZXNldCAqLworZXh0ZXJuIGludCBzb2Z0aW5nX2xvYWRfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCQlfX2lvbWVtIHVpbnQ4X3QgKnZpcnQsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgb2Zmc2V0KTsKKworLyogTG9hZCBmaW5hbCBhcHBsaWNhdGlvbiBmaXJtd2FyZSBhZnRlciBib290bG9hZGVyICovCitleHRlcm4gaW50IHNvZnRpbmdfbG9hZF9hcHBfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCisvKgorICogZW5hYmxlIG9yIGRpc2FibGUgaXJxCisgKiBvbmx5IGNhbGxlZCB3aXRoIGZ3LmxvY2sgbG9ja2VkCisgKi8KK2V4dGVybiBpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKTsKKworLyogc3RhcnQvc3RvcCAxIGJ1cyBvbiBjYXJkICovCitleHRlcm4gaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB1cCk7CisKKy8qIG5ldGlmX3J4KCkgKi8KK2V4dGVybiBpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLCBrdGltZV90IGt0aW1lKTsKKworLyogU09GVElORyBEUFJBTSBtYXBwaW5ncyAqLworI2RlZmluZSBEUFJBTV9SWAkJMHgwMDAwCisJI2RlZmluZSBEUFJBTV9SWF9TSVpFCTMyCisJI2RlZmluZSBEUFJBTV9SWF9DTlQJMTYKKyNkZWZpbmUgRFBSQU1fUlhfUkQJCTB4MDIwMQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX1dSCQkweDAyMDUJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SWF9MT1NUCQkweDAyMDcJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX0ZDVF9QQVJBTQkJMHgwMzAwCS8qIGludDE2X3QgWzIwXSAqLworI2RlZmluZSBEUFJBTV9GQ1RfUkVTVUxUCTB4MDMyOAkvKiBpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0ZDVF9IT1NUCQkweDAzMmIJLyogdWludDE2X3QgKi8KKworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFCTB4MDMzMQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFMgkweDAzMzUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURQkweDAzMzkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURTIJMHgwMzNkCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUCQkweDAzNDEJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fQ0xSX1JFQ1ZfRklGTwkweDAzNDUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVRfVElNRQkweDAzNGQJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fVElNRQkJMHgwMzUwCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lIERQUkFNX1dSX1NUQVJUCQkweDAzNTgJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9XUl9FTkQJCTB4MDM1OQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1JYX0ZJRk8JMHgwMzYxCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1RYX0ZJRk8JMHgwMzY0CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVBRF9GSUZPX0xFVkVMCTB4MDM2NQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1RYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisKKyNkZWZpbmUgRFBSQU1fVFgJCTB4MDQwMAkvKiB1aW50MTZfdCAqLworCSNkZWZpbmUgRFBSQU1fVFhfU0laRQkxNgorCSNkZWZpbmUgRFBSQU1fVFhfQ05UCTMyCisjZGVmaW5lIERQUkFNX1RYX1JECQkweDA2MDEJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9UWF9XUgkJMHgwNjA1CS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBEUFJBTV9DT01NQU5ECQkweDA3ZTAJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVDRUlQVAkJMHgwN2YwCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lSUV9UT0hPU1QJMHgwN2ZlCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fSVJRX1RPQ0FSRAkweDA3ZmYJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX1YyX1JFU0VUCQkweDBlMDAJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9WMl9JUlFfVE9IT1NUCTB4MGUwMgkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgVFhNQVgJKERQUkFNX1RYX0NOVCAtIDEpCisKKy8qIERQUkFNIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBSRVNfTk9ORQkwCisjZGVmaW5lIFJFU19PSwkJMQorI2RlZmluZSBSRVNfTk9LCQkyCisjZGVmaW5lIFJFU19VTktOT1dOCTMKKy8qIERQUkFNIGZsYWdzICovCisjZGVmaW5lIENNRF9UWAkJMHgwMQorI2RlZmluZSBDTURfQUNLCQkweDAyCisjZGVmaW5lIENNRF9YVEQJCTB4MDQKKyNkZWZpbmUgQ01EX1JUUgkJMHgwOAorI2RlZmluZSBDTURfRVJSCQkweDEwCisjZGVmaW5lIENNRF9CVVMyCTB4ODAKKworLyogcmV0dXJuZWQgZmlmbyBlbnRyeSBidXMgc3RhdGUgbWFza3MgKi8KKyNkZWZpbmUgU0ZfTUFTS19CVVNPRkYJCTB4ODAKKyNkZWZpbmUgU0ZfTUFTS19FUEFTU0lWRQkweDYwCisKKy8qIGJ1cyBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVfQlVTT0ZGCTIKKyNkZWZpbmUgU1RBVEVfRVBBU1NJVkUJMQorI2RlZmluZSBTVEFURV9FQUNUSVZFCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDBmZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19jcy5jCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCisjaW5jbHVkZSAic29mdGluZ19wbGF0Zm9ybS5oIgorCitzdGF0aWMgaW50IHNvZnRpbmdjc19pbmRleDsKK3N0YXRpYyBzcGlubG9ja190IHNvZnRpbmdjc19pbmRleF9sb2NrOworCitzdGF0aWMgaW50IHNvZnRpbmdjc19yZXNldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdik7CitzdGF0aWMgaW50IHNvZnRpbmdjc19lbmFibGVfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2KTsKKworLyoKKyAqIHBsYXRmb3JtX2RhdGEgZGVzY3JpcHRpb25zCisgKi8KKyNkZWZpbmUgTUhaICgxMDAwKjEwMDApCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSBzb2Z0aW5nY3NfcGxhdGZvcm1fZGF0YVtdID0geworeworCS5uYW1lID0gIkNBTmNhcmQiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDAxLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC1ORUMiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDAyLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC1TSkEiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDA0LAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyMCAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2Fuc2phLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJDQU5jYXJkLTIiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDA1LAorCS5nZW5lcmF0aW9uID0gMiwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyNCAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgxMDAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQyLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZDIuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jcmQyLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBOVUxMLAorfSwgeworCS5uYW1lID0gIlZlY3Rvci1DQU5jYXJkIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDA4MSwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIlZlY3Rvci1DQU5jYXJkLVNKQSIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwODQsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDIwICogTUhaLCAubWF4X2JycCA9IDMyLCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5zamEuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIlZlY3Rvci1DQU5jYXJkLTIiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDg1LAorCS5nZW5lcmF0aW9uID0gMiwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyNCAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgxMDAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQyLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZDIuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jcmQyLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBOVUxMLAorfSwgeworCS5uYW1lID0gIkVESUNjYXJkLU5FQyIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgxMDIsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJFRElDY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDEwNSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkwLCAwLAorfSwKK307CisKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImJjYXJkLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAibGRjYXJkLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiY2FuY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbnNqYS5iaW4iKTsKKworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiYmNhcmQyLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAibGRjYXJkMi5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbmNyZDIuYmluIik7CisKK3N0YXRpYyBfX2RldmluaXQgY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YQorKnNvZnRpbmdjc19maW5kX3BsYXRmb3JtX2RhdGEodW5zaWduZWQgaW50IG1hbmYsIHVuc2lnbmVkIGludCBwcm9kKQoreworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKmxwOworCisJZm9yIChscCA9IHNvZnRpbmdjc19wbGF0Zm9ybV9kYXRhOyBscC0+bWFuZjsgKytscCkgeworCQlpZiAoKGxwLT5tYW5mID09IG1hbmYpICYmIChscC0+cHJvZCA9PSBwcm9kKSkKKwkJCXJldHVybiBscDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBwbGF0Zm9ybWRhdGEgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBpbnQgc29mdGluZ2NzX3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2KQoreworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEgPSB0b19wY21jaWFfZGV2KHBkZXYtPmRldi5wYXJlbnQpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicGNtY2lhIGNvbmZpZyBbMl0gJTAyeFxuIiwgdiA/IDAgOiAweDIwKTsKKwlyZXR1cm4gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKHBjbWNpYSwgMiwgdiA/IDAgOiAweDIwKTsKK30KKworc3RhdGljIGludCBzb2Z0aW5nY3NfZW5hYmxlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhID0gdG9fcGNtY2lhX2RldihwZGV2LT5kZXYucGFyZW50KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInBjbWNpYSBjb25maWcgWzBdICUwMnhcbiIsIHYgPyAweDYwIDogMCk7CisJcmV0dXJuIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShwY21jaWEsIDAsIHYgPyAweDYwIDogMCk7Cit9CisKKy8qCisgKiBwY21jaWEgY2hlY2sKKyAqLworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ2NzX3Byb2JlX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhLAorCQl2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdCA9IHByaXZfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByZXM7CisJaW50IG1lbXNwZWVkID0gMDsKKworCVdBUk5fT04oIXBkYXQpOworCXByZXMgPSBwY21jaWEtPnJlc291cmNlW1BDTUNJQV9JT01FTV8wXTsKKwlpZiAocmVzb3VyY2Vfc2l6ZShwcmVzKSA8IDB4MTAwMCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlwcmVzLT5mbGFncyB8PSBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFOworCWlmIChwZGF0LT5nZW5lcmF0aW9uIDwgMikgeworCQlwcmVzLT5mbGFncyB8PSBXSU5fVVNFX1dBSVQgfCBXSU5fREFUQV9XSURUSF84OworCQltZW1zcGVlZCA9IDM7CisJfSBlbHNlIHsKKwkJcHJlcy0+ZmxhZ3MgfD0gV0lOX0RBVEFfV0lEVEhfMTY7CisJfQorCXJldHVybiBwY21jaWFfcmVxdWVzdF93aW5kb3cocGNtY2lhLCBwcmVzLCBtZW1zcGVlZCk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgdm9pZCBzb2Z0aW5nY3NfcmVtb3ZlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjbWNpYS0+cHJpdjsKKworCS8qIGZyZWUgYml0cyAqLworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCS8qIHJlbGVhc2UgcGNtY2lhIHN0dWZmICovCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBjbWNpYSk7Cit9CisKKy8qCisgKiBwbGF0Zm9ybV9kZXZpY2Ugd3JhcHBlcgorICogcGRldi0+cmVzb3VyY2UgaGFzIDIgZW50cmllczogaW8gJiBpcnEKKyAqLworc3RhdGljIHZvaWQgc29mdGluZ2NzX3BkZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWtmcmVlKHBkZXYpOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByZXM7CisJc3RydWN0IGRldiB7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKKwkJc3RydWN0IHJlc291cmNlIHJlc1syXTsKKwl9ICpkZXY7CisKKwkvKiBmaW5kIG1hdGNoaW5nIHBsYXRmb3JtX2RhdGEgKi8KKwlwZGF0ID0gc29mdGluZ2NzX2ZpbmRfcGxhdGZvcm1fZGF0YShwY21jaWEtPm1hbmZfaWQsIHBjbWNpYS0+Y2FyZF9pZCk7CisJaWYgKCFwZGF0KQorCQlyZXR1cm4gLUVOT1RUWTsKKworCS8qIHNldHVwIHBjbWNpYSBkZXZpY2UgKi8KKwlwY21jaWEtPmNvbmZpZ19mbGFncyB8PSBDT05GX0VOQUJMRV9JUlEgfCBDT05GX0FVVE9fU0VUX0lPTUVNIHwKKwkJQ09ORl9BVVRPX1NFVF9WUFAgfCBDT05GX0FVVE9fQ0hFQ0tfVkNDOworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhwY21jaWEsIHNvZnRpbmdjc19wcm9iZV9jb25maWcsICh2b2lkICopcGRhdCk7CisJaWYgKHJldCkKKwkJZ290byBwY21jaWFfZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX2VuYWJsZV9kZXZpY2UocGNtY2lhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwY21jaWFfZmFpbGVkOworCisJcHJlcyA9IHBjbWNpYS0+cmVzb3VyY2VbUENNQ0lBX0lPTUVNXzBdOworCWlmICghcHJlcykgeworCQlyZXQgPSAtRUJBREY7CisJCWdvdG8gcGNtY2lhX2JhZDsKKwl9CisKKwkvKiBjcmVhdGUgc29mdGluZyBwbGF0Zm9ybSBkZXZpY2UgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBtZW1fZmFpbGVkOworCX0KKwlkZXYtPnBkZXYucmVzb3VyY2UgPSBkZXYtPnJlczsKKwlkZXYtPnBkZXYubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZGV2LT5yZXMpOworCWRldi0+cGRldi5kZXYucmVsZWFzZSA9IHNvZnRpbmdjc19wZGV2X3JlbGVhc2U7CisKKwlwZGV2ID0gJmRldi0+cGRldjsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopcGRhdDsKKwlwZGV2LT5kZXYucGFyZW50ID0gJnBjbWNpYS0+ZGV2OworCXBjbWNpYS0+cHJpdiA9IHBkZXY7CisKKwkvKiBwbGF0Zm9ybSBkZXZpY2UgcmVzb3VyY2VzICovCisJcGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwlwZGV2LT5yZXNvdXJjZVswXS5zdGFydCA9IHByZXMtPnN0YXJ0OworCXBkZXYtPnJlc291cmNlWzBdLmVuZCA9IHByZXMtPmVuZDsKKworCXBkZXYtPnJlc291cmNlWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisJcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQgPSBwY21jaWEtPmlycTsKKwlwZGV2LT5yZXNvdXJjZVsxXS5lbmQgPSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKKworCS8qIHBsYXRmb3JtIGRldmljZSBzZXR1cCAqLworCXNwaW5fbG9jaygmc29mdGluZ2NzX2luZGV4X2xvY2spOworCXBkZXYtPmlkID0gc29mdGluZ2NzX2luZGV4Kys7CisJc3Bpbl91bmxvY2soJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlwZGV2LT5uYW1lID0gInNvZnRpbmciOworCWRldl9zZXRfbmFtZSgmcGRldi0+ZGV2LCAic29mdGluZ2NzLiVpIiwgcGRldi0+aWQpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwbGF0Zm9ybV9mYWlsZWQ7CisKKwlkZXZfaW5mbygmcGNtY2lhLT5kZXYsICJjcmVhdGVkICVzXG4iLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJcmV0dXJuIDA7CisKK3BsYXRmb3JtX2ZhaWxlZDoKKwlrZnJlZShkZXYpOworbWVtX2ZhaWxlZDoKK3BjbWNpYV9iYWQ6CitwY21jaWFfZmFpbGVkOgorCXBjbWNpYV9kaXNhYmxlX2RldmljZShwY21jaWEpOworCXBjbWNpYS0+cHJpdiA9IE5VTEw7CisJcmV0dXJuIHJldCA/OiAtRU5PREVWOworfQorCitzdGF0aWMgLypjb25zdCovIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHNvZnRpbmdjc19pZHNbXSA9IHsKKwkvKiBzb2Z0aW5nICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDEpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDAyKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwNCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDUpLAorCS8qIHZlY3RvciwgbWFudWZhY3R1cmVyPyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDgxKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDA4NCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwODUpLAorCS8qIEVESUMgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDEwMiksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAxMDUpLAorCVBDTUNJQV9ERVZJQ0VfTlVMTCwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBzb2Z0aW5nY3NfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHNvZnRpbmdjc19kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJzb2Z0aW5nY3MiLAorCS5pZF90YWJsZQk9IHNvZnRpbmdjc19pZHMsCisJLnByb2JlCQk9IHNvZnRpbmdjc19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNvZnRpbmdjc19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc29mdGluZ2NzX3N0YXJ0KHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlyZXR1cm4gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmc29mdGluZ2NzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2Z0aW5nY3Nfc3RvcCh2b2lkKQoreworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmc29mdGluZ2NzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNvZnRpbmdjc19zdGFydCk7Cittb2R1bGVfZXhpdChzb2Z0aW5nY3Nfc3RvcCk7CisKK01PRFVMRV9ERVNDUklQVElPTigic29mdGluZyBDQU5jYXJkIGRyaXZlciIKKwkJIiwgbGlua3MgUENNQ0lBIGNhcmQgdG8gc29mdGluZyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTIwNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19mdy5jCkBAIC0wLDAgKzEsNjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgInNvZnRpbmcuaCIKKworLyoKKyAqIGxvdyBsZXZlbCBEUFJBTSBjb21tYW5kLgorICogTWFrZSBzdXJlIHRoYXQgY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1RdIGlzIHByZXNldAorICovCitzdGF0aWMgaW50IF9zb2Z0aW5nX2ZjdF9jbWQoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludDE2X3QgY21kLCB1aW50MTZfdCB2ZWN0b3IsCisJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisKKwlpb3dyaXRlMTYoY21kLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNXSk7CisJaW93cml0ZTgodmVjdG9yID4+IDgsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVCArIDFdKTsKKwlpb3dyaXRlOCh2ZWN0b3IsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVF0pOworCS8qIGJlIHN1cmUgdG8gZmx1c2ggdGhpcyB0byB0aGUgY2FyZCAqLworCXdtYigpOworCXN0YW1wID0gamlmZmllcyArIDEgKiBIWjsKKwkvKiB3YWl0IGZvciBjYXJkICovCisJZG8geworCQkvKiBEUFJBTV9GQ1RfSE9TVCBpcyBfbm90XyBhbGlnbmVkICovCisJCXJldCA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUXSkgKworCQkJKGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUICsgMV0pIDw8IDgpOworCQkvKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgdmFyaWFibGVzICovCisJCXJtYigpOworCQlpZiAocmV0ID09IFJFU19PSykKKwkJCS8qIHJlYWQgcmV0dXJuLXZhbHVlIG5vdyAqLworCQkJcmV0dXJuIGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUkVTVUxUXSk7CisKKwkJaWYgKChyZXQgIT0gdmVjdG9yKSB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YW1wKSkKKwkJCWJyZWFrOworCQkvKiBwcm9jZXNzIGNvbnRleHQgPT4gcmVsYXggKi8KKwkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMDApOworCX0gd2hpbGUgKDEpOworCisJcmV0ID0gKHJldCA9PSBSRVNfTk9ORSkgPyAtRVRJTUVET1VUIDogLUVDQU5DRUxFRDsKKwlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlICVzIGZhaWxlZCAoJWkpXG4iLCBtc2csIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX2ZjdF9jbWQoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludDE2X3QgY21kLCBjb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldDsKKworCXJldCA9IF9zb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgY21kLCAwLCBtc2cpOworCWlmIChyZXQgPiAwKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiJXMgcmV0dXJuZWQgJXVcbiIsIG1zZywgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwKKwkJY29uc3QgY2hhciAqbXNnKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBzdGFtcDsKKworCWlvd3JpdGUxNihSRVNfTk9ORSwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFRdKTsKKwlpb3dyaXRlMTYoY21kLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORF0pOworCS8qIGJlIHN1cmUgdG8gZmx1c2ggdGhpcyB0byB0aGUgY2FyZCAqLworCXdtYigpOworCXN0YW1wID0gamlmZmllcyArIDMgKiBIWjsKKwkvKiB3YWl0IGZvciBjYXJkICovCisJZG8geworCQlyZXQgPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fUkVDRUlQVF0pOworCQkvKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgdmFyaWFibGVzICovCisJCXJtYigpOworCQlpZiAocmV0ID09IFJFU19PSykKKwkJCXJldHVybiAwOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFtcCkpCisJCQlicmVhazsKKwkJLyogcHJvY2VzcyBjb250ZXh0ID0+IHJlbGF4ICovCisJCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDAwKTsKKwl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCisJcmV0ID0gKHJldCA9PSBSRVNfTk9ORSkgPyAtRVRJTUVET1VUIDogLUVDQU5DRUxFRDsKKwlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImJvb3Rsb2FkZXIgJXMgZmFpbGVkICglaSlcbiIsIG1zZywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZ3X3BhcnNlKGNvbnN0IHVpbnQ4X3QgKipwbWVtLCB1aW50MTZfdCAqcHR5cGUsIHVpbnQzMl90ICpwYWRkciwKKwkJdWludDE2X3QgKnBsZW4sIGNvbnN0IHVpbnQ4X3QgKipwZGF0KQoreworCXVpbnQxNl90IGNoZWNrc3VtWzJdOworCWNvbnN0IHVpbnQ4X3QgKm1lbTsKKwljb25zdCB1aW50OF90ICplbmQ7CisKKwkvKgorCSAqIGZpcm13YXJlIHJlY29yZHMgYXJlIGEgYmluYXJ5LCB1bmFsaWduZWQgc3RyZWFtIGNvbXBvc2VkIG9mOgorCSAqIHVpbnQxNl90IHR5cGU7CisJICogdWludDMyX3QgYWRkcjsKKwkgKiB1aW50MTZfdCBsZW47CisJICogdWludDhfdCBkYXRbbGVuXTsKKwkgKiB1aW50MTZfdCBjaGVja3N1bTsKKwkgKiBhbGwgdmFsdWVzIGluIGxpdHRsZSBlbmRpYW4uCisJICogV2UgY291bGQgZGVmaW5lIGEgc3RydWN0IGZvciB0aGlzLCB3aXRoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpLAorCSAqIGJ1dCB3b3VsZCB0aGF0IHNvbHZlIHRoZSBhbGlnbm1lbnQgaW4gX2FsbF8gY2FzZXMgKGNmci4gdGhlCisJICogc3RydWN0IGl0c2VsZiBtYXkgYmUgYW4gb2RkIGFkZHJlc3MpPworCSAqCisJICogSSBjaG9zZSB0byB1c2UgbGVYWF90b19jcHVwKCkgc2luY2UgdGhpcyBzb2x2ZXMgYm90aAorCSAqIGVuZGlhbm5lc3MgJiBhbGlnbm1lbnQuCisJICovCisJbWVtID0gKnBtZW07CisJKnB0eXBlID0gbGUxNl90b19jcHVwKCh2b2lkICopJm1lbVswXSk7CisJKnBhZGRyID0gbGUzMl90b19jcHVwKCh2b2lkICopJm1lbVsyXSk7CisJKnBsZW4gPSBsZTE2X3RvX2NwdXAoKHZvaWQgKikmbWVtWzZdKTsKKwkqcGRhdCA9ICZtZW1bOF07CisJLyogdmVyaWZ5IGNoZWNrc3VtICovCisJZW5kID0gJm1lbVs4ICsgKnBsZW5dOworCWNoZWNrc3VtWzBdID0gbGUxNl90b19jcHVwKCh2b2lkICopZW5kKTsKKwlmb3IgKGNoZWNrc3VtWzFdID0gMDsgbWVtIDwgZW5kOyArK21lbSkKKwkJY2hlY2tzdW1bMV0gKz0gKm1lbTsKKwlpZiAoY2hlY2tzdW1bMF0gIT0gY2hlY2tzdW1bMV0pCisJCXJldHVybiAtRUlOVkFMOworCS8qIGluY3JlbWVudCAqLworCSpwbWVtICs9IDEwICsgKnBsZW47CisJcmV0dXJuIDA7Cit9CisKK2ludCBzb2Z0aW5nX2xvYWRfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCV9faW9tZW0gdWludDhfdCAqZHByYW0sIHVuc2lnbmVkIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJldDsKKwljb25zdCB1aW50OF90ICptZW0sICplbmQsICpkYXQ7CisJdWludDE2X3QgdHlwZSwgbGVuOworCXVpbnQzMl90IGFkZHI7CisJdWludDhfdCAqYnVmID0gTlVMTDsKKwlpbnQgYnVmbGVuID0gMDsKKwlpbnQ4X3QgdHlwZV9lbmQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZjYXJkLT5wZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRldl9kYmcoJmNhcmQtPnBkZXYtPmRldiwgIiVzLCBmaXJtd2FyZSglcykgZ290ICV1IGJ5dGVzIgorCQkiLCBvZmZzZXQgJWMweCUwNHhcbiIsCisJCWNhcmQtPnBkYXQtPm5hbWUsIGZpbGUsICh1bnNpZ25lZCBpbnQpZnctPnNpemUsCisJCShvZmZzZXQgPj0gMCkgPyAnKycgOiAnLScsICh1bnNpZ25lZCBpbnQpYWJzKG9mZnNldCkpOworCS8qIHBhcnNlIHRoZSBmaXJtd2FyZSAqLworCW1lbSA9IGZ3LT5kYXRhOworCWVuZCA9ICZtZW1bZnctPnNpemVdOworCS8qIGxvb2sgZm9yIGhlYWRlciByZWNvcmQgKi8KKwlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlpZiAodHlwZSAhPSAweGZmZmYpCisJCWdvdG8gZmFpbGVkOworCWlmIChzdHJuY21wKCJTdHJ1Y3R1cmVkIEJpbmFyeSBGb3JtYXQsIFNvZnRpbmcgR21iSCIgLCBkYXQsIGxlbikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIG9rLCB3ZSBoYWQgYSBoZWFkZXIgKi8KKwl3aGlsZSAobWVtIDwgZW5kKSB7CisJCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCWlmICh0eXBlID09IDMpIHsKKwkJCS8qIHN0YXJ0IGFkZHJlc3MsIG5vdCB1c2VkIGhlcmUgKi8KKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gMSkgeworCQkJLyogZW9mICovCisJCQl0eXBlX2VuZCA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh0eXBlICE9IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCWlmICgoYWRkciArIGxlbiArIG9mZnNldCkgPiBzaXplKQorCQkJZ290byBmYWlsZWQ7CisJCW1lbWNweV90b2lvKCZkcHJhbVthZGRyICsgb2Zmc2V0XSwgZGF0LCBsZW4pOworCQkvKiBiZSBzdXJlIHRvIGZsdXNoIGNhY2hlcyBmcm9tIElPIHNwYWNlICovCisJCW1iKCk7CisJCWlmIChsZW4gPiBidWZsZW4pIHsKKwkJCS8qIGFsaWduIGJ1ZmxlbiAqLworCQkJYnVmbGVuID0gKGxlbiArICgxMDI0LTEpKSAmIH4oMTAyNC0xKTsKKwkJCWJ1ZiA9IGtyZWFsbG9jKGJ1ZiwgYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghYnVmKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJfQorCQkvKiB2ZXJpZnkgcmVjb3JkIGRhdGEgKi8KKwkJbWVtY3B5X2Zyb21pbyhidWYsICZkcHJhbVthZGRyICsgb2Zmc2V0XSwgbGVuKTsKKwkJaWYgKG1lbWNtcChidWYsIGRhdCwgbGVuKSkgeworCQkJLyogaXMgbm90IG9rICovCisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIkRQUkFNIHJlYWRiYWNrIGZhaWxlZFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisJaWYgKCF0eXBlX2VuZCkKKwkJLyogbm8gZW5kIHJlY29yZCBzZWVuICovCisJCWdvdG8gZmFpbGVkOworCXJldCA9IDA7CitmYWlsZWQ6CisJa2ZyZWUoYnVmKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2luZm8oJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlICVzIGZhaWxlZFxuIiwgZmlsZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfbG9hZF9hcHBfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCB1aW50OF90ICptZW0sICplbmQsICpkYXQ7CisJaW50IHJldCwgajsKKwl1aW50MTZfdCB0eXBlLCBsZW47CisJdWludDMyX3QgYWRkciwgc3RhcnRfYWRkciA9IDA7CisJdW5zaWduZWQgaW50IHN1bSwgcnhfc3VtOworCWludDhfdCB0eXBlX2VuZCA9IDAsIHR5cGVfZW50cnlwb2ludCA9IDA7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmNhcmQtPnBkZXYtPmRldik7CisJaWYgKHJldCkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgInJlcXVlc3RfZmlybXdhcmUoJXMpIGdvdCAlaVxuIiwKKwkJCWZpbGUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRldl9kYmcoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlKCVzKSBnb3QgJWx1IGJ5dGVzXG4iLAorCQlmaWxlLCAodW5zaWduZWQgbG9uZylmdy0+c2l6ZSk7CisJLyogcGFyc2UgdGhlIGZpcm13YXJlICovCisJbWVtID0gZnctPmRhdGE7CisJZW5kID0gJm1lbVtmdy0+c2l6ZV07CisJLyogbG9vayBmb3IgaGVhZGVyIHJlY29yZCAqLworCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisJcmV0ID0gLUVJTlZBTDsKKwlpZiAodHlwZSAhPSAweGZmZmYpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBzdGFydHMgd2l0aCB0eXBlIDB4JXhcbiIsCisJCQl0eXBlKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCWlmIChzdHJuY21wKCJTdHJ1Y3R1cmVkIEJpbmFyeSBGb3JtYXQsIFNvZnRpbmcgR21iSCIsIGRhdCwgbGVuKSkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlIHN0cmluZyAnJS4qcycgZmF1bHRcbiIsCisJCQkJbGVuLCBkYXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJLyogb2ssIHdlIGhhZCBhIGhlYWRlciAqLworCXdoaWxlIChtZW0gPCBlbmQpIHsKKwkJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOworCisJCWlmICh0eXBlID09IDMpIHsKKwkJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KKwkJCXN0YXJ0X2FkZHIgPSBhZGRyOworCQkJdHlwZV9lbnRyeXBvaW50ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gMSkgeworCQkJLyogZW9mICovCisJCQl0eXBlX2VuZCA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh0eXBlICE9IDApIHsKKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCQkidW5rbm93biByZWNvcmQgdHlwZSAweCUwNHhcbiIsIHR5cGUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogcmVndWFsYXIgZGF0YSAqLworCQlmb3IgKHN1bSA9IDAsIGogPSAwOyBqIDwgbGVuOyArK2opCisJCQlzdW0gKz0gZGF0W2pdOworCQkvKiB3b3JrIGluIDE2Yml0ICh0YXJnZXQpICovCisJCXN1bSAmPSAweGZmZmY7CisKKwkJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW2NhcmQtPnBkYXQtPmFwcC5vZmZzXSwgZGF0LCBsZW4pOworCQlpb3dyaXRlMzIoY2FyZC0+cGRhdC0+YXBwLm9mZnMgKyBjYXJkLT5wZGF0LT5hcHAuYWRkciwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDJdKTsKKwkJaW93cml0ZTMyKGFkZHIsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgNl0pOworCQlpb3dyaXRlMTYobGVuLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDEwXSk7CisJCWlvd3JpdGU4KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19ib290bG9hZGVyX2NvbW1hbmQoY2FyZCwgMSwgImxvYWRpbmcgYXBwLiIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiB2ZXJpZnkgY2hlY2tzdW0gKi8KKwkJcnhfc3VtID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFQgKyAyXSk7CisJCWlmIChyeF9zdW0gIT0gc3VtKSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIlNSQU0gc2VlbXMgdG8gYmUgZGFtYWdlZCIKKwkJCQkiLCB3YW50ZWQgMHglMDR4LCBnb3QgMHglMDR4XG4iLCBzdW0sIHJ4X3N1bSk7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisJaWYgKCF0eXBlX2VuZCB8fCAhdHlwZV9lbnRyeXBvaW50KQorCQlnb3RvIGZhaWxlZDsKKwkvKiBzdGFydCBhcHBsaWNhdGlvbiBpbiBjYXJkICovCisJaW93cml0ZTMyKHN0YXJ0X2FkZHIsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgMl0pOworCWlvd3JpdGU4KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgNl0pOworCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDMsICJzdGFydCBhcHAuIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCXJldCA9IDA7CitmYWlsZWQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaWYgKHJldCA8IDApCisJCWRldl9pbmZvKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWRcbiIsIGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19yZXNldF9jaGlwKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCByZXQ7CisKKwlkbyB7CisJCS8qIHJlc2V0IGNoaXAgKi8KKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUX1JYX0ZJRk9dKTsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUX1JYX0ZJRk8rMV0pOworCQlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fUkVTRVRdKTsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUKzFdKTsKKworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMCwgInJlc2V0X2NhbiIpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkvKiBkb24ndCB3YWl0IGFueSBsb25nZXIgKi8KKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCWNhcmQtPnR4LnBlbmRpbmcgPSAwOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2NoaXBfcG93ZXJvbihzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0OworCS8qIHN5bmMgKi8KKwlyZXQgPSBfc29mdGluZ19mY3RfY21kKGNhcmQsIDk5LCAweDU1LCAic3luYy1hIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gX3NvZnRpbmdfZmN0X2NtZChjYXJkLCA5OSwgMHhhYSwgInN5bmMtYiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHNvZnRpbmdfcmVzZXRfY2hpcChjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZ2V0X3NlcmlhbCAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA0MywgImdldF9zZXJpYWxfbnVtYmVyIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCWNhcmQtPmlkLnNlcmlhbCA9IGlvcmVhZDMyKCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU1dKTsKKwkvKiBnZXRfdmVyc2lvbiAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMiwgImdldF92ZXJzaW9uIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCWNhcmQtPmlkLmZ3X3ZlcnNpb24gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCWNhcmQtPmlkLmh3X3ZlcnNpb24gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCWNhcmQtPmlkLmxpY2Vuc2UgPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCWNhcmQtPmlkLmNoaXBbMF0gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCWNhcmQtPmlkLmNoaXBbMV0gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX2luaXRpYWxpemVfdGltZXN0YW1wKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCXVpbnQ2NF90IG92ZjsKKworCWNhcmQtPnRzX3JlZiA9IGt0aW1lX2dldCgpOworCisJLyogMTZNSHogaXMgdGhlIHJlZmVyZW5jZSAqLworCW92ZiA9IDB4MTAwMDAwMDAwVUxMICogMTY7CisJZG9fZGl2KG92ZiwgY2FyZC0+cGRhdC0+ZnJlcSA/OiAxNik7CisKKwljYXJkLT50c19vdmVyZmxvdyA9IGt0aW1lX2FkZF91cyhrdGltZV9zZXQoMCwgMCksIG92Zik7Cit9CisKK2t0aW1lX3Qgc29mdGluZ19yYXcya3RpbWUoc3RydWN0IHNvZnRpbmcgKmNhcmQsIHUzMiByYXcpCit7CisJdWludDY0X3QgcmF3bDsKKwlrdGltZV90IG5vdywgcmVhbF9vZmZzZXQ7CisJa3RpbWVfdCB0YXJnZXQ7CisJa3RpbWVfdCB0bXA7CisKKwlub3cgPSBrdGltZV9nZXQoKTsKKwlyZWFsX29mZnNldCA9IGt0aW1lX3N1YihrdGltZV9nZXRfcmVhbCgpLCBub3cpOworCisJLyogZmluZCBuc2VjIGZyb20gY2FyZCAqLworCXJhd2wgPSByYXcgKiAxNjsKKwlkb19kaXYocmF3bCwgY2FyZC0+cGRhdC0+ZnJlcSA/OiAxNik7CisJdGFyZ2V0ID0ga3RpbWVfYWRkX3VzKGNhcmQtPnRzX3JlZiwgcmF3bCk7CisJLyogdGVzdCBmb3Igb3ZlcmZsb3dzICovCisJdG1wID0ga3RpbWVfYWRkKHRhcmdldCwgY2FyZC0+dHNfb3ZlcmZsb3cpOworCXdoaWxlICh1bmxpa2VseShrdGltZV90b19ucyh0bXApID4ga3RpbWVfdG9fbnMobm93KSkpIHsKKwkJY2FyZC0+dHNfcmVmID0ga3RpbWVfYWRkKGNhcmQtPnRzX3JlZiwgY2FyZC0+dHNfb3ZlcmZsb3cpOworCQl0YXJnZXQgPSB0bXA7CisJCXRtcCA9IGt0aW1lX2FkZCh0YXJnZXQsIGNhcmQtPnRzX292ZXJmbG93KTsKKwl9CisJcmV0dXJuIGt0aW1lX2FkZCh0YXJnZXQsIHJlYWxfb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXJldHVybiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HKQorCQk/IDEgOiAwOworfQorCitpbnQgc29mdGluZ19zdGFydHN0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHVwKQoreworCWludCByZXQ7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQ7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCBidXNfYml0bWFza19zdGFydDsKKwlpbnQgaiwgZXJyb3JfcmVwb3J0aW5nOworCXN0cnVjdCBjYW5fZnJhbWUgbXNnOworCWNvbnN0IHN0cnVjdCBjYW5fYml0dGltaW5nICpidDsKKworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWNhcmQgPSBwcml2LT5jYXJkOworCisJaWYgKCFjYXJkLT5mdy51cCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlidXNfYml0bWFza19zdGFydCA9IDA7CisJaWYgKGRldiAmJiB1cCkKKwkJLyogcHJlcGFyZSB0byBzdGFydCB0aGlzIGJ1cyBhcyB3ZWxsICovCisJCWJ1c19iaXRtYXNrX3N0YXJ0IHw9ICgxIDw8IHByaXYtPmluZGV4KTsKKwkvKiBicmluZyBuZXRkZXZzIGRvd24gKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0W2pdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCQlpZiAoZGV2ICE9IG5ldGRldikKKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQlpZiAoZGV2ICE9IG5ldGRldikKKwkJCQlidXNfYml0bWFza19zdGFydCB8PSAoMSA8PCBqKTsKKwkJCXByaXYtPnR4LnBlbmRpbmcgPSAwOworCQkJcHJpdi0+dHguZWNob19wdXQgPSAwOworCQkJcHJpdi0+dHguZWNob19nZXQgPSAwOworCQkJLyoKKwkJCSAqIHRoaXMgYnVzJyBtYXkganVzdCBoYXZlIGNhbGxlZCBvcGVuX2NhbmRldigpCisJCQkgKiB3aGljaCBpcyByYXRoZXIgc3R1cGlkIHRvIGNhbGwgY2xvc2VfY2FuZGV2KCkKKwkJCSAqIGFscmVhZHkKKwkJCSAqIGJ1dCB3ZSBtYXkgY29tZSBoZXJlIGZyb20gYnVzb2ZmIHJlY292ZXJ5IHRvbworCQkJICogaW4gd2hpY2ggY2FzZSB0aGUgZWNob19za2IgX25lZWRzXyBmbHVzaGluZyB0b28uCisJCQkgKiBqdXN0IGJlIHN1cmUgdG8gY2FsbCBvcGVuX2NhbmRldigpIGFnYWluCisJCQkgKi8KKwkJCWNsb3NlX2NhbmRldihuZXRkZXYpOworCQl9CisJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOworCX0KKwljYXJkLT50eC5wZW5kaW5nID0gMDsKKworCXNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAwKTsKKwlyZXQgPSBzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisJaWYgKCFidXNfYml0bWFza19zdGFydCkKKwkJLyogbm8gYnVzc2VzIHRvIGJlIGJyb3VnaHQgdXAgKi8KKwkJZ290byBjYXJkX2RvbmU7CisKKwlpZiAoKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMSkgJiYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMikKKwkJCSYmIChzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhjYXJkLT5uZXRbMF0pCisJCQkJIT0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoY2FyZC0+bmV0WzFdKSkpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJImVycl9yZXBvcnRpbmcgZmxhZyBkaWZmZXJzIGZvciBidXNzZXNcbiIpOworCQlnb3RvIGludmFsaWQ7CisJfQorCWVycm9yX3JlcG9ydGluZyA9IDA7CisJaWYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMSkgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbMF07CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQllcnJvcl9yZXBvcnRpbmcgKz0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcobmV0ZGV2KTsKKwkJLyogaW5pdCBjaGlwIDEgKi8KKwkJYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsKKwkJaW93cml0ZTE2KGJ0LT5icnAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNihidC0+c2p3LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzEgKyBidC0+cHJvcF9zZWcsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcyLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCQlpb3dyaXRlMTYoKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMpID8gMSA6IDAsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxLCAiaW5pdGlhbGl6ZV9jaGlwWzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBtb2RlICovCisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDMsICJzZXRfbW9kZVswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgZmlsdGVyICovCisJCS8qIDExYml0IGlkICYgbWFzayAqLworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMHgwN2ZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQkvKiAyOWJpdCBpZC5sbyAmIG1hc2subG8gJiBpZC5oaSAmIG1hc2suaGkgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KDB4ZmZmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCWlvd3JpdGUxNigweDFmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNywgInNldF9maWx0ZXJbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG91dHB1dCBjb250cm9sICovCisJCWlvd3JpdGUxNihwcml2LT5vdXRwdXQsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA1LCAic2V0X291dHB1dFswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoYnVzX2JpdG1hc2tfc3RhcnQgJiAyKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFsxXTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCWVycm9yX3JlcG9ydGluZyArPSBzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhuZXRkZXYpOworCQkvKiBpbml0IGNoaXAyICovCisJCWJ0ID0gJnByaXYtPmNhbi5iaXR0aW1pbmc7CisJCWlvd3JpdGUxNihidC0+YnJwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoYnQtPnNqdywgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKSA/IDEgOiAwLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMiwgImluaXRpYWxpemVfY2hpcFsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgbW9kZTIgKi8KKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNCwgInNldF9tb2RlWzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBmaWx0ZXIyICovCisJCS8qIDExYml0IGlkICYgbWFzayAqLworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMHgwN2ZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQkvKiAyOWJpdCBpZC5sbyAmIG1hc2subG8gJiBpZC5oaSAmIG1hc2suaGkgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KDB4ZmZmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCWlvd3JpdGUxNigweDFmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgOCwgInNldF9maWx0ZXJbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG91dHB1dCBjb250cm9sMiAqLworCQlpb3dyaXRlMTYocHJpdi0+b3V0cHV0LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNiwgInNldF9vdXRwdXRbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJLyogZW5hYmxlX2Vycm9yX2ZyYW1lICovCisJLyoKKwkgKiBFcnJvciByZXBvcnRpbmcgaXMgc3dpdGNoZWQgb2ZmIGF0IHRoZSBtb21lbnQgc2luY2UKKwkgKiB0aGUgcmVjZWl2aW5nIG9mIHRoZW0gaXMgbm90IHlldCAxMDAlIHZlcmlmaWVkCisJICogVGhpcyBzaG91bGQgYmUgZW5hYmxlZCBzb29uZXIgb3IgbGF0ZXIKKwkgKgorCWlmIChlcnJvcl9yZXBvcnRpbmcpIHsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDUxLCAiZW5hYmxlX2Vycm9yX2ZyYW1lIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJfQorCSovCisJLyogaW5pdGlhbGl6ZSBpbnRlcmZhY2UgKi8KKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTRdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDE2XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxOF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMjBdKTsKKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTcsICJpbml0aWFsaXplX2ludGVyZmFjZSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGVfZmlmbyAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAzNiwgImVuYWJsZV9maWZvIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGVuYWJsZSBmaWZvIHR4IGFjayAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMywgImZpZm9fdHhfYWNrWzBdIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGVuYWJsZSBmaWZvIHR4IGFjazIgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTQsICJmaWZvX3R4X2Fja1sxXSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBzdGFydF9jaGlwICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDExLCAic3RhcnRfY2hpcCIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSU5GT19CVVNTVEFURV0pOworCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9JTkZPX0JVU1NUQVRFMl0pOworCWlmIChjYXJkLT5wZGF0LT5nZW5lcmF0aW9uIDwgMikgeworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCQkvKiBmbHVzaCB0aGUgRFBSQU0gY2FjaGVzICovCisJCXdtYigpOworCX0KKworCXNvZnRpbmdfaW5pdGlhbGl6ZV90aW1lc3RhbXAoY2FyZCk7CisKKwkvKgorCSAqIGRvIHNvY2tldGNhbiBub3RpZmljYXRpb25zL3N0YXR1cyBjaGFuZ2VzCisJICogZnJvbSBoZXJlLCBubyBlcnJvcnMgc2hvdWxkIG9jY3VyLCBvciB0aGUgZmFpbGVkOiBwYXJ0CisJICogbXVzdCBiZSByZXZpZXdlZAorCSAqLworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJbXNnLmNhbl9pZCA9IENBTl9FUlJfRkxBRyB8IENBTl9FUlJfUkVTVEFSVEVEOworCW1zZy5jYW5fZGxjID0gQ0FOX0VSUl9ETEM7CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghKGJ1c19iaXRtYXNrX3N0YXJ0ICYgKDEgPDwgaikpKQorCQkJY29udGludWU7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCW9wZW5fY2FuZGV2KG5ldGRldik7CisJCWlmIChkZXYgIT0gbmV0ZGV2KSB7CisJCQkvKiBub3RpZnkgb3RoZXIgYnVzc2VzIG9uIHRoZSByZXN0YXJ0ICovCisJCQlzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lX3NldCgwLCAwKSk7CisJCQkrK3ByaXYtPmNhbi5jYW5fc3RhdHMucmVzdGFydHM7CisJCX0KKwkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCX0KKworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJcmV0ID0gc29mdGluZ19lbmFibGVfaXJxKGNhcmQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworY2FyZF9kb25lOgorCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIDA7CitpbnZhbGlkOgorCXJldCA9IC1FSU5WQUw7CitmYWlsZWQ6CisJc29mdGluZ19lbmFibGVfaXJxKGNhcmQsIDApOworCXNvZnRpbmdfcmVzZXRfY2hpcChjYXJkKTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCS8qIGJyaW5nIGFsbCBvdGhlciBpbnRlcmZhY2VzIGRvd24gKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0W2pdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlkZXZfY2xvc2UobmV0ZGV2KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfZGVmYXVsdF9vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisKKwlzd2l0Y2ggKHByaXYtPmNoaXApIHsKKwljYXNlIDEwMDA6CisJCXJldHVybiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA8IDIpID8gMHhmYiA6IDB4ZmE7CisJY2FzZSA1OgorCQlyZXR1cm4gMHg2MDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMHg0MDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTdlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwpAQCAtMCwwICsxLDg5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwCisgKgorICogLSBLdXJ0IFZhbiBEaWpjaywgRUlBIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSAic29mdGluZy5oIgorCisjZGVmaW5lIFRYX0VDSE9fU0tCX01BWCAoKChUWE1BWCsxKS8yKS0xKQorCisvKgorICogdGVzdCBpcyBhIHNwZWNpZmljIENBTiBuZXRkZXYKKyAqIGlzIG9ubGluZSAoaWUuIHVwICduIHJ1bm5pbmcsIG5vdCBzbGVlcGluZywgbm90IGJ1c29mZgorICovCitzdGF0aWMgaW5saW5lIGludCBjYW5pZl9pc19hY3RpdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2FuX3ByaXYgKmNhbiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChjYW4tPnN0YXRlIDw9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFKTsKK30KKworLyogcmVzZXQgRFBSQU0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSB7CisJCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJCWlvd3JpdGU4KGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSkgJiB+MSwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fVjJfUkVTRVRdKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmNhcmQtPnNwaW4pOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvZnRpbmdfY2xyX3Jlc2V0X2RwcmFtKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWlmIChjYXJkLT5wZGF0LT5nZW5lcmF0aW9uID49IDIpIHsKKwkJc3Bpbl9sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwkJaW93cml0ZTgoaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVjJfUkVTRVRdKSB8IDEsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSk7CisJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwl9Cit9CisKKy8qIHRyaWdnZXIgdGhlIHR4IHF1ZXVlLWluZyAqLworc3RhdGljIG5ldGRldl90eF90IHNvZnRpbmdfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisJaW50IHJldDsKKwl1aW50OF90ICpwdHI7CisJdWludDhfdCBmaWZvX3dyLCBmaWZvX3JkOworCXN0cnVjdCBjYW5fZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5fZnJhbWUgKilza2ItPmRhdGE7CisJdWludDhfdCBidWZbRFBSQU1fVFhfU0laRV07CisKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IoZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCisJc3Bpbl9sb2NrKCZjYXJkLT5zcGluKTsKKworCXJldCA9IE5FVERFVl9UWF9CVVNZOworCWlmICghY2FyZC0+ZncudXAgfHwKKwkJCShjYXJkLT50eC5wZW5kaW5nID49IFRYTUFYKSB8fAorCQkJKHByaXYtPnR4LnBlbmRpbmcgPj0gVFhfRUNIT19TS0JfTUFYKSkKKwkJZ290byB4bWl0X2RvbmU7CisJZmlmb193ciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1dSXSk7CisJZmlmb19yZCA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1JEXSk7CisJaWYgKGZpZm9fd3IgPT0gZmlmb19yZCkKKwkJLyogZmlmbyBmdWxsICovCisJCWdvdG8geG1pdF9kb25lOworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlwdHIgPSBidWY7CisJKnB0ciA9IENNRF9UWDsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykKKwkJKnB0ciB8PSBDTURfUlRSOworCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKQorCQkqcHRyIHw9IENNRF9YVEQ7CisJaWYgKHByaXYtPmluZGV4KQorCQkqcHRyIHw9IENNRF9CVVMyOworCSsrcHRyOworCSpwdHIrKyA9IGNmLT5jYW5fZGxjOworCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDApOworCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDgpOworCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKSB7CisJCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDE2KTsKKwkJKnB0cisrID0gKGNmLT5jYW5faWQgPj4gMjQpOworCX0gZWxzZSB7CisJCS8qIGluY3JlbWVudCAxLCBub3QgMiBhcyB5b3UgbWlnaHQgdGhpbmsgKi8KKwkJcHRyICs9IDE7CisJfQorCWlmICghKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQltZW1jcHkocHRyLCAmY2YtPmRhdGFbMF0sIGNmLT5jYW5fZGxjKTsKKwltZW1jcHlfdG9pbygmY2FyZC0+ZHByYW1bRFBSQU1fVFggKyBEUFJBTV9UWF9TSVpFICogZmlmb193cl0sCisJCQlidWYsIERQUkFNX1RYX1NJWkUpOworCWlmICgrK2ZpZm9fd3IgPj0gRFBSQU1fVFhfQ05UKQorCQlmaWZvX3dyID0gMDsKKwlpb3dyaXRlOChmaWZvX3dyLCAmY2FyZC0+ZHByYW1bRFBSQU1fVFhfV1JdKTsKKwljYXJkLT50eC5sYXN0X2J1cyA9IHByaXYtPmluZGV4OworCSsrY2FyZC0+dHgucGVuZGluZzsKKwkrK3ByaXYtPnR4LnBlbmRpbmc7CisJY2FuX3B1dF9lY2hvX3NrYihza2IsIGRldiwgcHJpdi0+dHguZWNob19wdXQpOworCSsrcHJpdi0+dHguZWNob19wdXQ7CisJaWYgKHByaXYtPnR4LmVjaG9fcHV0ID49IFRYX0VDSE9fU0tCX01BWCkKKwkJcHJpdi0+dHguZWNob19wdXQgPSAwOworCS8qIGNhbl9wdXRfZWNob19za2IoKSBzYXZlcyB0aGUgc2tiLCBzYWZlIHRvIHJldHVybiBUWF9PSyAqLworCXJldCA9IE5FVERFVl9UWF9PSzsKK3htaXRfZG9uZToKKwlzcGluX3VubG9jaygmY2FyZC0+c3Bpbik7CisJaWYgKGNhcmQtPnR4LnBlbmRpbmcgPj0gVFhNQVgpIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQkJaWYgKGNhcmQtPm5ldFtqXSkKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPm5ldFtqXSk7CisJCX0KKwl9CisJaWYgKHJldCAhPSBORVRERVZfVFhfT0spCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzaG9ydGN1dCBmb3Igc2tiIGRlbGl2ZXJ5CisgKi8KK2ludCBzb2Z0aW5nX25ldGRldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCBzdHJ1Y3QgY2FuX2ZyYW1lICptc2csCisJCWt0aW1lX3Qga3RpbWUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKKworCXNrYiA9IGFsbG9jX2Nhbl9za2IobmV0ZGV2LCAmY2YpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2YsIG1zZywgc2l6ZW9mKCptc2cpKTsKKwlza2ItPnRzdGFtcCA9IGt0aW1lOworCXJldHVybiBuZXRpZl9yeChza2IpOworfQorCisvKgorICogc29mdGluZ19oYW5kbGVfMQorICogcG9wIDEgZW50cnkgZnJvbSB0aGUgRFBSQU0gcXVldWUsIGFuZCBwcm9jZXNzCisgKi8KK3N0YXRpYyBpbnQgc29mdGluZ19oYW5kbGVfMShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJa3RpbWVfdCBrdGltZTsKKwlzdHJ1Y3QgY2FuX2ZyYW1lIG1zZzsKKwlpbnQgY250ID0gMCwgbG9zdF9tc2c7CisJdWludDhfdCBmaWZvX3JkLCBmaWZvX3dyLCBjbWQ7CisJdWludDhfdCAqcHRyOworCXVpbnQzMl90IHRtcF91MzI7CisJdWludDhfdCBidWZbRFBSQU1fUlhfU0laRV07CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCS8qIHRlc3QgZm9yIGxvc3QgbXNncyAqLworCWxvc3RfbXNnID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fUlhfTE9TVF0pOworCWlmIChsb3N0X21zZykgeworCQlpbnQgajsKKwkJLyogcmVzZXQgY29uZGl0aW9uICovCisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SWF9MT1NUXSk7CisJCS8qIHByZXBhcmUgbXNnICovCisJCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUcgfCBDQU5fRVJSX0NSVEw7CisJCW1zZy5jYW5fZGxjID0gQ0FOX0VSUl9ETEM7CisJCW1zZy5kYXRhWzFdID0gQ0FOX0VSUl9DUlRMX1JYX09WRVJGTE9XOworCQkvKgorCQkgKiBzZXJ2aWNlIHRvIGFsbCBidXNzZXMsIHdlIGRvbid0IGtub3cgd2hpY2ggaXQgd2FzIGFwcGxpY2FibGUKKwkJICogYnV0IG9ubHkgc2VydmljZSBidXNzZXMgdGhhdCBhcmUgb25saW5lCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJCWlmICghbmV0ZGV2KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFjYW5pZl9pc19hY3RpdmUobmV0ZGV2KSkKKwkJCQkvKiBhIGRlYWQgYnVzIGhhcyBubyBvdmVyZmxvd3MgKi8KKwkJCQljb250aW51ZTsKKwkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9yczsKKwkJCXNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWVfc2V0KDAsIDApKTsKKwkJfQorCQkvKiBwcmVwYXJlIGZvciBvdGhlciB1c2UgKi8KKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJKytjbnQ7CisJfQorCisJZmlmb19yZCA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1JEXSk7CisJZmlmb193ciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1dSXSk7CisKKwlpZiAoKytmaWZvX3JkID49IERQUkFNX1JYX0NOVCkKKwkJZmlmb19yZCA9IDA7CisJaWYgKGZpZm9fd3IgPT0gZmlmb19yZCkKKwkJcmV0dXJuIGNudDsKKworCW1lbWNweV9mcm9taW8oYnVmLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlggKyBEUFJBTV9SWF9TSVpFKmZpZm9fcmRdLAorCQkJRFBSQU1fUlhfU0laRSk7CisJbWIoKTsKKwkvKiB0cmlnZ2VyIGR1YWwgcG9ydCBSQU0gKi8KKwlpb3dyaXRlOChmaWZvX3JkLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlhfUkRdKTsKKworCXB0ciA9IGJ1ZjsKKwljbWQgPSAqcHRyKys7CisJaWYgKGNtZCA9PSAweGZmKQorCQkvKiBub3QgcXVpdGUgdXNlZnVsbCwgcHJvYmFibHkgdGhlIGNhcmQgaGFzIGdvdCBvdXQgKi8KKwkJcmV0dXJuIDA7CisJbmV0ZGV2ID0gY2FyZC0+bmV0WzBdOworCWlmIChjbWQgJiBDTURfQlVTMikKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WzFdOworCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGNtZCAmIENNRF9FUlIpIHsKKwkJdWludDhfdCBjYW5fc3RhdGUsIHN0YXRlOworCisJCXN0YXRlID0gKnB0cisrOworCisJCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUc7CisJCW1zZy5jYW5fZGxjID0gQ0FOX0VSUl9ETEM7CisKKwkJaWYgKHN0YXRlICYgU0ZfTUFTS19CVVNPRkYpIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKKwkJCXN0YXRlID0gU1RBVEVfQlVTT0ZGOworCQl9IGVsc2UgaWYgKHN0YXRlICYgU0ZfTUFTS19FUEFTU0lWRSkgeworCQkJY2FuX3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkU7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCW1zZy5kYXRhWzFdID0gQ0FOX0VSUl9DUlRMX1RYX1BBU1NJVkU7CisJCQlzdGF0ZSA9IFNUQVRFX0VQQVNTSVZFOworCQl9IGVsc2UgeworCQkJY2FuX3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOworCQkJc3RhdGUgPSBTVEFURV9FQUNUSVZFOworCQl9CisJCS8qIHVwZGF0ZSBEUFJBTSAqLworCQlpb3dyaXRlOChzdGF0ZSwgJmNhcmQtPmRwcmFtW3ByaXYtPmluZGV4ID8KKwkJCQlEUFJBTV9JTkZPX0JVU1NUQVRFMiA6IERQUkFNX0lORk9fQlVTU1RBVEVdKTsKKwkJLyogdGltZXN0YW1wICovCisJCXRtcF91MzIgPSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQlwdHIgKz0gNDsKKwkJa3RpbWUgPSBzb2Z0aW5nX3JhdzJrdGltZShjYXJkLCB0bXBfdTMyKTsKKworCQkrK25ldGRldi0+c3RhdHMucnhfZXJyb3JzOworCQkvKiB1cGRhdGUgaW50ZXJuYWwgc3RhdHVzICovCisJCWlmIChjYW5fc3RhdGUgIT0gcHJpdi0+Y2FuLnN0YXRlKSB7CisJCQlwcml2LT5jYW4uc3RhdGUgPSBjYW5fc3RhdGU7CisJCQlpZiAoY2FuX3N0YXRlID09IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFKQorCQkJCSsrcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl9wYXNzaXZlOworCQkJZWxzZSBpZiAoY2FuX3N0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKSB7CisJCQkJLyogdGhpcyBjYWxscyBjYW5fY2xvc2VfY2xlYW51cCgpICovCisJCQkJY2FuX2J1c19vZmYobmV0ZGV2KTsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQl9CisJCQkvKiB0cmlnZ2VyIHNvY2tldGNhbiAqLworCQkJc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZSk7CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChjbWQgJiBDTURfUlRSKQorCQkJbXNnLmNhbl9pZCB8PSBDQU5fUlRSX0ZMQUc7CisJCW1zZy5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoKnB0cisrKTsKKwkJaWYgKGNtZCAmIENNRF9YVEQpIHsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VGRl9GTEFHOworCQkJbXNnLmNhbl9pZCB8PSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQkJcHRyICs9IDQ7CisJCX0gZWxzZSB7CisJCQltc2cuY2FuX2lkIHw9IGxlMTZfdG9fY3B1cCgodm9pZCAqKXB0cik7CisJCQlwdHIgKz0gMjsKKwkJfQorCQkvKiB0aW1lc3RhbXAgKi8KKwkJdG1wX3UzMiA9IGxlMzJfdG9fY3B1cCgodm9pZCAqKXB0cik7CisJCXB0ciArPSA0OworCQlrdGltZSA9IHNvZnRpbmdfcmF3Mmt0aW1lKGNhcmQsIHRtcF91MzIpOworCQlpZiAoIShtc2cuY2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJCW1lbWNweSgmbXNnLmRhdGFbMF0sIHB0ciwgOCk7CisJCXB0ciArPSA4OworCQkvKiB1cGRhdGUgc29ja2V0ICovCisJCWlmIChjbWQgJiBDTURfQUNLKSB7CisJCQkvKiBhY2tub3dsZWRnZSwgd2FzIHR4IG1zZyAqLworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCXNrYiA9IHByaXYtPmNhbi5lY2hvX3NrYltwcml2LT50eC5lY2hvX2dldF07CisJCQlpZiAoc2tiKQorCQkJCXNrYi0+dHN0YW1wID0ga3RpbWU7CisJCQljYW5fZ2V0X2VjaG9fc2tiKG5ldGRldiwgcHJpdi0+dHguZWNob19nZXQpOworCQkJKytwcml2LT50eC5lY2hvX2dldDsKKwkJCWlmIChwcml2LT50eC5lY2hvX2dldCA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCQkJcHJpdi0+dHguZWNob19nZXQgPSAwOworCQkJaWYgKHByaXYtPnR4LnBlbmRpbmcpCisJCQkJLS1wcml2LT50eC5wZW5kaW5nOworCQkJaWYgKGNhcmQtPnR4LnBlbmRpbmcpCisJCQkJLS1jYXJkLT50eC5wZW5kaW5nOworCQkJKytuZXRkZXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCQlpZiAoIShtc2cuY2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJCQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG1zZy5jYW5fZGxjOworCQl9IGVsc2UgeworCQkJaW50IHJldDsKKworCQkJcmV0ID0gc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZSk7CisJCQlpZiAocmV0ID09IE5FVF9SWF9TVUNDRVNTKSB7CisJCQkJKytuZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJCQkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQkJCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbXNnLmNhbl9kbGM7CisJCQl9IGVsc2UgeworCQkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9kcm9wcGVkOworCQkJfQorCQl9CisJfQorCSsrY250OworCXJldHVybiBjbnQ7Cit9CisKKy8qCisgKiByZWFsIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzb2Z0aW5nX2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlpbnQgaiwgb2Zmc2V0LCB3b3JrX2RvbmU7CisKKwl3b3JrX2RvbmUgPSAwOworCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJd2hpbGUgKHNvZnRpbmdfaGFuZGxlXzEoY2FyZCkgPiAwKSB7CisJCSsrY2FyZC0+aXJxLnN2Y19jb3VudDsKKwkJKyt3b3JrX2RvbmU7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwkvKiByZXN1bWUgdHggcXVldWUncyAqLworCW9mZnNldCA9IGNhcmQtPnR4Lmxhc3RfYnVzOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoY2FyZC0+dHgucGVuZGluZyA+PSBUWE1BWCkKKwkJCWJyZWFrOworCQluZXRkZXYgPSBjYXJkLT5uZXRbKGogKyBvZmZzZXQgKyAxKSAlIGNhcmQtPnBkYXQtPm5idXNdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJaWYgKCFjYW5pZl9pc19hY3RpdmUobmV0ZGV2KSkKKwkJCS8qIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHdha2UgZGVhZCBidXNzZXMgKi8KKwkJCWNvbnRpbnVlOworCQlpZiAocHJpdi0+dHgucGVuZGluZyA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCQljb250aW51ZTsKKwkJKyt3b3JrX2RvbmU7CisJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwl9CisJcmV0dXJuIHdvcmtfZG9uZSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7Cit9CisKKy8qCisgKiBpbnRlcnJ1cHQgcm91dGluZXM6CisgKiBzY2hlZHVsZSB0aGUgJ3JlYWwgaW50ZXJydXB0IGhhbmRsZXInCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzb2Z0aW5nX2lycV92MihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSAoc3RydWN0IHNvZnRpbmcgKilkZXZfaWQ7CisJdWludDhfdCBpcjsKKworCWlyID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9WMl9JUlFfVE9IT1NUXSk7CisJcmV0dXJuICgxID09IGlyKSA/IElSUV9XQUtFX1RIUkVBRCA6IElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdjEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXVpbnQ4X3QgaXI7CisKKwlpciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX0lSUV9UT0hPU1RdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSVJRX1RPSE9TVF0pOworCXJldHVybiBpciA/IElSUV9XQUtFX1RIUkVBRCA6IElSUV9OT05FOworfQorCisvKgorICogbmV0ZGV2L2NhbmRldiBpbnRlci1vcGVyYWJpbGl0eQorICovCitzdGF0aWMgaW50IHNvZnRpbmdfbmV0ZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IHJldDsKKworCS8qIGNoZWNrIG9yIGRldGVybWluZSBhbmQgc2V0IGJpdHRpbWUgKi8KKwlyZXQgPSBvcGVuX2NhbmRldihuZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gc29mdGluZ19zdGFydHN0b3AobmRldiwgMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX25ldGRldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCByZXQ7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCisJLyogc29mdGluZyBjeWNsZSBkb2VzIGNsb3NlX2NhbmRldigpICovCisJcmV0ID0gc29mdGluZ19zdGFydHN0b3AobmRldiwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX2NhbmRldl9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSBjYW5fbW9kZSBtb2RlKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENBTl9NT0RFX1NUQVJUOgorCQkvKiBzb2Z0aW5nX3N0YXJ0c3RvcCBkb2VzIGNsb3NlX2NhbmRldigpICovCisJCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDEpOworCQlyZXR1cm4gcmV0OworCWNhc2UgQ0FOX01PREVfU1RPUDoKKwljYXNlIENBTl9NT0RFX1NMRUVQOgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU29mdGluZyBkZXZpY2UgbWFuYWdlbWVudCBoZWxwZXJzCisgKi8KK2ludCBzb2Z0aW5nX2VuYWJsZV9pcnEoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludCBlbmFibGUpCit7CisJaW50IHJldDsKKworCWlmICghY2FyZC0+aXJxLm5yKSB7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoY2FyZC0+aXJxLnJlcXVlc3RlZCAmJiAhZW5hYmxlKSB7CisJCWZyZWVfaXJxKGNhcmQtPmlycS5uciwgY2FyZCk7CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAwOworCX0gZWxzZSBpZiAoIWNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgZW5hYmxlKSB7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNhcmQtPmlycS5uciwKKwkJCQkoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSA/CisJCQkJCXNvZnRpbmdfaXJxX3YyIDogc29mdGluZ19pcnFfdjEsCisJCQkJc29mdGluZ19pcnFfdGhyZWFkLCBJUlFGX1NIQVJFRCwKKwkJCQlkZXZfbmFtZSgmY2FyZC0+cGRldi0+ZGV2KSwgY2FyZCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCQkicmVxdWVzdF90aHJlYWRlZF9pcnEoJXUpIGZhaWxlZFxuIiwKKwkJCQkJY2FyZC0+aXJxLm5yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJY2FyZC0+aXJxLnJlcXVlc3RlZCA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX2NhcmRfc2h1dGRvd24oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IGZ3X3VwID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spKQorCQkvKiByZXR1cm4gLUVSRVNUQVJUU1lTICovOworCWZ3X3VwID0gY2FyZC0+ZncudXA7CisJY2FyZC0+ZncudXAgPSAwOworCisJaWYgKGNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgY2FyZC0+aXJxLm5yKSB7CisJCWZyZWVfaXJxKGNhcmQtPmlycS5uciwgY2FyZCk7CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAwOworCX0KKwlpZiAoZndfdXApIHsKKwkJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCQljYXJkLT5wZGF0LT5lbmFibGVfaXJxKGNhcmQtPnBkZXYsIDApOworCQlzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShjYXJkKTsKKwkJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQkJY2FyZC0+cGRhdC0+cmVzZXQoY2FyZC0+cGRldiwgMSk7CisJfQorCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdfY2FyZF9ib290KHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCByZXQsIGo7CisJc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3RyZWFtW10gPSB7CisJCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIH07CisJdW5zaWduZWQgY2hhciBiYWNrW3NpemVvZihzdHJlYW0pXTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChjYXJkLT5mdy51cCkgeworCQltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJLyogcmVzZXQgYm9hcmQgKi8KKwlpZiAoY2FyZC0+cGRhdC0+ZW5hYmxlX2lycSkKKwkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAxKTsKKwkvKiBib290IGNhcmQgKi8KKwlzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShjYXJkKTsKKwlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCWZvciAoaiA9IDA7IChqICsgc2l6ZW9mKHN0cmVhbSkpIDwgY2FyZC0+ZHByYW1fc2l6ZTsKKwkJCWogKz0gc2l6ZW9mKHN0cmVhbSkpIHsKKworCQltZW1jcHlfdG9pbygmY2FyZC0+ZHByYW1bal0sIHN0cmVhbSwgc2l6ZW9mKHN0cmVhbSkpOworCQkvKiBmbHVzaCBJTyBjYWNoZSAqLworCQltYigpOworCQltZW1jcHlfZnJvbWlvKGJhY2ssICZjYXJkLT5kcHJhbVtqXSwgc2l6ZW9mKHN0cmVhbSkpOworCisJCWlmICghbWVtY21wKGJhY2ssIHN0cmVhbSwgc2l6ZW9mKHN0cmVhbSkpKQorCQkJY29udGludWU7CisJCS8qIG1lbW9yeSBpcyBub3QgZXF1YWwgKi8KKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJkcHJhbSBmYWlsZWQgYXQgMHglMDR4XG4iLCBqKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCXdtYigpOworCS8qIGxvYWQgYm9vdCBmaXJtd2FyZSAqLworCXJldCA9IHNvZnRpbmdfbG9hZF9mdyhjYXJkLT5wZGF0LT5ib290LmZ3LCBjYXJkLCBjYXJkLT5kcHJhbSwKKwkJCQljYXJkLT5kcHJhbV9zaXplLAorCQkJCWNhcmQtPnBkYXQtPmJvb3Qub2ZmcyAtIGNhcmQtPnBkYXQtPmJvb3QuYWRkcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGxvYWQgbG9hZGVyIGZpcm13YXJlICovCisJcmV0ID0gc29mdGluZ19sb2FkX2Z3KGNhcmQtPnBkYXQtPmxvYWQuZncsIGNhcmQsIGNhcmQtPmRwcmFtLAorCQkJCWNhcmQtPmRwcmFtX3NpemUsCisJCQkJY2FyZC0+cGRhdC0+bG9hZC5vZmZzIC0gY2FyZC0+cGRhdC0+bG9hZC5hZGRyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDApOworCXNvZnRpbmdfY2xyX3Jlc2V0X2RwcmFtKGNhcmQpOworCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDAsICJjYXJkIGJvb3QiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJcmV0ID0gc29mdGluZ19sb2FkX2FwcF9mdyhjYXJkLT5wZGF0LT5hcHAuZncsIGNhcmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHNvZnRpbmdfY2hpcF9wb3dlcm9uKGNhcmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWNhcmQtPmZ3LnVwID0gMTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiAwOworZmFpbGVkOgorCWNhcmQtPmZ3LnVwID0gMDsKKwlpZiAoY2FyZC0+cGRhdC0+ZW5hYmxlX2lycSkKKwkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAwKTsKKwlzb2Z0aW5nX3NldF9yZXNldF9kcHJhbShjYXJkKTsKKwlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG5ldGRldiBzeXNmcworICovCitzdGF0aWMgc3NpemVfdCBzaG93X2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBwcml2LT5pbmRleCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2hpcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHByaXYtPmNoaXApOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X291dHB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDJ4XG4iLCBwcml2LT5vdXRwdXQpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcHJpdi0+Y2FyZDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwl2YWwgJj0gMHhGRjsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FyZC0+ZncubG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwcml2LT5vdXRwdXQgPSB2YWw7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBERVZJQ0VfQVRUUihjaGFubmVsLCBTX0lSVUdPLCBzaG93X2NoYW5uZWwsIE5VTEwpOworc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKGNoaXAsIFNfSVJVR08sIHNob3dfY2hpcCwgTlVMTCk7CitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIob3V0cHV0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19vdXRwdXQsIHN0b3JlX291dHB1dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBuZXRkZXZfc3lzZnNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY2hhbm5lbC5hdHRyLAorCSZkZXZfYXR0cl9jaGlwLmF0dHIsCisJJmRldl9hdHRyX291dHB1dC5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmV0ZGV2X3N5c2ZzX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwKKwkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKiluZXRkZXZfc3lzZnNfYXR0cnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNvZnRpbmdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzb2Z0aW5nX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcCA9IHNvZnRpbmdfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0CT0gc29mdGluZ19uZXRkZXZfc3RhcnRfeG1pdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBzb2Z0aW5nX2J0cl9jb25zdCA9IHsKKwkudHNlZzFfbWluID0gMSwKKwkudHNlZzFfbWF4ID0gMTYsCisJLnRzZWcyX21pbiA9IDEsCisJLnRzZWcyX21heCA9IDgsCisJLnNqd19tYXggPSA0LCAvKiBvdmVycnVsZWQgKi8KKwkuYnJwX21pbiA9IDEsCisJLmJycF9tYXggPSAzMiwgLyogb3ZlcnJ1bGVkICovCisJLmJycF9pbmMgPSAxLAorfTsKKworCitzdGF0aWMgX19kZXZpbml0IHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0aW5nX25ldGRldl9jcmVhdGUoc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCXVpbnQxNl90IGNoaXBfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCisJbmV0ZGV2ID0gYWxsb2NfY2FuZGV2KHNpemVvZigqcHJpdiksIFRYX0VDSE9fU0tCX01BWCk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJhbGxvY19jYW5kZXYgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXByaXYtPm5ldGRldiA9IG5ldGRldjsKKwlwcml2LT5jYXJkID0gY2FyZDsKKwltZW1jcHkoJnByaXYtPmJ0cl9jb25zdCwgJnNvZnRpbmdfYnRyX2NvbnN0LCBzaXplb2YocHJpdi0+YnRyX2NvbnN0KSk7CisJcHJpdi0+YnRyX2NvbnN0LmJycF9tYXggPSBjYXJkLT5wZGF0LT5tYXhfYnJwOworCXByaXYtPmJ0cl9jb25zdC5zandfbWF4ID0gY2FyZC0+cGRhdC0+bWF4X3NqdzsKKwlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJnByaXYtPmJ0cl9jb25zdDsKKwlwcml2LT5jYW4uY2xvY2suZnJlcSA9IDgwMDAwMDA7CisJcHJpdi0+Y2hpcCA9IGNoaXBfaWQ7CisJcHJpdi0+b3V0cHV0ID0gc29mdGluZ19kZWZhdWx0X291dHB1dChuZXRkZXYpOworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmNhcmQtPnBkZXYtPmRldik7CisKKwluZXRkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZzb2Z0aW5nX25ldGRldl9vcHM7CisJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gc29mdGluZ19jYW5kZXZfc2V0X21vZGU7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CisKKwlyZXR1cm4gbmV0ZGV2OworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nX25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCByZXQ7CisKKwluZXRkZXYtPnN5c2ZzX2dyb3Vwc1swXSA9ICZuZXRkZXZfc3lzZnNfZ3JvdXA7CisJcmV0ID0gcmVnaXN0ZXJfY2FuZGV2KG5ldGRldik7CisJaWYgKHJldCkgeworCQlkZXZfYWxlcnQoJm5ldGRldi0+ZGV2LCAicmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwl1bnJlZ2lzdGVyX2NhbmRldihuZXRkZXYpOworCWZyZWVfY2FuZGV2KG5ldGRldik7Cit9CisKKy8qCisgKiBzeXNmcyBmb3IgUGxhdGZvcm0gZGV2aWNlCisgKi8KKyNkZWZpbmUgREVWX0FUVFJfUk8obmFtZSwgbWVtYmVyKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7IFwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgY2FyZC0+bWVtYmVyKTsgXAorfSBcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgMDQ0NCwgc2hvd18jI25hbWUsIE5VTEwpCisKKyNkZWZpbmUgREVWX0FUVFJfUk9fU1RSKG5hbWUsIG1lbWJlcikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNhcmQtPm1lbWJlcik7IFwKK30gXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIDA0NDQsIHNob3dfIyNuYW1lLCBOVUxMKQorCitERVZfQVRUUl9STyhzZXJpYWwsIGlkLnNlcmlhbCk7CitERVZfQVRUUl9ST19TVFIoZmlybXdhcmUsIHBkYXQtPmFwcC5mdyk7CitERVZfQVRUUl9STyhmaXJtd2FyZV92ZXJzaW9uLCBpZC5md192ZXJzaW9uKTsKK0RFVl9BVFRSX1JPX1NUUihoYXJkd2FyZSwgcGRhdC0+bmFtZSk7CitERVZfQVRUUl9STyhoYXJkd2FyZV92ZXJzaW9uLCBpZC5od192ZXJzaW9uKTsKK0RFVl9BVFRSX1JPKGxpY2Vuc2UsIGlkLmxpY2Vuc2UpOworREVWX0FUVFJfUk8oZnJlcXVlbmN5LCBpZC5mcmVxKTsKK0RFVl9BVFRSX1JPKHR4cGVuZGluZywgdHgucGVuZGluZyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzb2Z0aW5nX3BkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2VyaWFsLmF0dHIsCisJJmRldl9hdHRyX2Zpcm13YXJlLmF0dHIsCisJJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24uYXR0ciwKKwkmZGV2X2F0dHJfaGFyZHdhcmUuYXR0ciwKKwkmZGV2X2F0dHJfaGFyZHdhcmVfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl9saWNlbnNlLmF0dHIsCisJJmRldl9hdHRyX2ZyZXF1ZW5jeS5hdHRyLAorCSZkZXZfYXR0cl90eHBlbmRpbmcuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc29mdGluZ19wZGV2X2dyb3VwID0geworCS5uYW1lID0gTlVMTCwKKwkuYXR0cnMgPSBzb2Z0aW5nX3BkZXZfYXR0cnMsCit9OworCisvKgorICogcGxhdGZvcm0gZHJpdmVyCisgKi8KK3N0YXRpYyBfX2RldmV4aXQgaW50IHNvZnRpbmdfcGRldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBqOworCisJLyogZmlyc3QsIGRpc2FibGUgY2FyZCovCisJc29mdGluZ19jYXJkX3NodXRkb3duKGNhcmQpOworCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghY2FyZC0+bmV0W2pdKQorCQkJY29udGludWU7CisJCXNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoY2FyZC0+bmV0W2pdKTsKKwkJY2FyZC0+bmV0W2pdID0gTlVMTDsKKwl9CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CisKKwlpb3VubWFwKGNhcmQtPmRwcmFtKTsKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ19wZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2Z0aW5nICpjYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByZXM7CisJaW50IHJldDsKKwlpbnQgajsKKworCWlmICghcGRhdCkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocGRhdC0+bmJ1cyA+IEFSUkFZX1NJWkUoY2FyZC0+bmV0KSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXUgbmV0cz8/XG4iLCBwZGF0LT5uYnVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT01FTTsKKwljYXJkLT5wZGF0ID0gcGRhdDsKKwljYXJkLT5wZGV2ID0gcGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwltdXRleF9pbml0KCZjYXJkLT5mdy5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+c3Bpbik7CisKKwlyZXQgPSAtRUlOVkFMOworCXByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcHJlcykKKwkJZ290byBwbGF0Zm9ybV9yZXNvdXJjZV9mYWlsZWQ7OworCWNhcmQtPmRwcmFtX3BoeXMgPSBwcmVzLT5zdGFydDsKKwljYXJkLT5kcHJhbV9zaXplID0gcHJlcy0+ZW5kIC0gcHJlcy0+c3RhcnQgKyAxOworCWNhcmQtPmRwcmFtID0gaW9yZW1hcF9ub2NhY2hlKGNhcmQtPmRwcmFtX3BoeXMsIGNhcmQtPmRwcmFtX3NpemUpOworCWlmICghY2FyZC0+ZHByYW0pIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJkcHJhbSBpb3JlbWFwIGZhaWxlZFxuIik7CisJCWdvdG8gaW9yZW1hcF9mYWlsZWQ7CisJfQorCisJcHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHByZXMpCisJCWNhcmQtPmlycS5uciA9IHByZXMtPnN0YXJ0OworCisJLyogcmVzZXQgY2FyZCAqLworCXJldCA9IHNvZnRpbmdfY2FyZF9ib290KGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9hbGVydCgmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGJvb3RcbiIpOworCQlnb3RvIGJvb3RfZmFpbGVkOworCX0KKworCS8qIG9ubHkgbm93LCB0aGUgY2hpcCdzIGFyZSBrbm93biAqLworCWNhcmQtPmlkLmZyZXEgPSBjYXJkLT5wZGF0LT5mcmVxOworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJzeXNmcyBmYWlsZWRcbiIpOworCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKKwl9CisKKwlyZXQgPSAtRU5PTUVNOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQljYXJkLT5uZXRbal0gPSBuZXRkZXYgPQorCQkJc29mdGluZ19uZXRkZXZfY3JlYXRlKGNhcmQsIGNhcmQtPmlkLmNoaXBbal0pOworCQlpZiAoIW5ldGRldikgeworCQkJZGV2X2FsZXJ0KCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFrZSBjYW5bJWldIiwgaik7CisJCQlnb3RvIG5ldGRldl9mYWlsZWQ7CisJCX0KKwkJcHJpdiA9IG5ldGRldl9wcml2KGNhcmQtPm5ldFtqXSk7CisJCXByaXYtPmluZGV4ID0gajsKKwkJcmV0ID0gc29mdGluZ19uZXRkZXZfcmVnaXN0ZXIobmV0ZGV2KTsKKwkJaWYgKHJldCkgeworCQkJZnJlZV9jYW5kZXYobmV0ZGV2KTsKKwkJCWNhcmQtPm5ldFtqXSA9IE5VTEw7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWdpc3RlciBjYW5bJWldXG4iLCBqKTsKKwkJCWdvdG8gbmV0ZGV2X2ZhaWxlZDsKKwkJfQorCX0KKwlkZXZfaW5mbygmY2FyZC0+cGRldi0+ZGV2LCAiJXMgcmVhZHkuXG4iLCBjYXJkLT5wZGF0LT5uYW1lKTsKKwlyZXR1cm4gMDsKKworbmV0ZGV2X2ZhaWxlZDoKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKCFjYXJkLT5uZXRbal0pCisJCQljb250aW51ZTsKKwkJc29mdGluZ19uZXRkZXZfY2xlYW51cChjYXJkLT5uZXRbal0pOworCX0KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc29mdGluZ19wZGV2X2dyb3VwKTsKK3N5c2ZzX2ZhaWxlZDoKKwlzb2Z0aW5nX2NhcmRfc2h1dGRvd24oY2FyZCk7Citib290X2ZhaWxlZDoKKwlpb3VubWFwKGNhcmQtPmRwcmFtKTsKK2lvcmVtYXBfZmFpbGVkOgorcGxhdGZvcm1fcmVzb3VyY2VfZmFpbGVkOgorCWtmcmVlKGNhcmQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNvZnRpbmdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNvZnRpbmciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHNvZnRpbmdfcGRldl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc29mdGluZ19wZGV2X3JlbW92ZSksCit9OworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNvZnRpbmciKTsKKworc3RhdGljIGludCBfX2luaXQgc29mdGluZ19zdGFydCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNvZnRpbmdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNvZnRpbmdfc3RvcCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb2Z0aW5nX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNvZnRpbmdfc3RhcnQpOworbW9kdWxlX2V4aXQoc29mdGluZ19zdG9wKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0aW5nIERQUkFNIENBTiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkt1cnQgVmFuIERpamNrIDxrdXJ0LnZhbi5kaWpja0BlaWEuYmU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmggYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiZjY5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfcGxhdGZvcm0uaApAQCAtMCwwICsxLDQwIEBACisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2lmbmRlZiBfU09GVElOR19ERVZJQ0VfSF8KKyNkZWZpbmUgX1NPRlRJTkdfREVWSUNFX0hfCisKKy8qIHNvZnRpbmcgZmlybXdhcmUgZGlyZWN0b3J5IHByZWZpeCAqLworI2RlZmluZSBmd19kaXIgInNvZnRpbmctNC42LyIKKworc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IG1hbmY7CisJdW5zaWduZWQgaW50IHByb2Q7CisJLyoKKwkgKiBnZW5lcmF0aW9uCisJICogMXN0IHdpdGggTkVDIG9yIFNKQTEwMDAKKwkgKiA4Yml0LCBleGNsdXNpdmUgaW50ZXJydXB0LCAuLi4KKwkgKiAybmQgb25seSBTSkExMDAwCisJICogMTZiaXQsIHNoYXJlZCBpbnRlcnJ1cHQKKwkgKi8KKwlpbnQgZ2VuZXJhdGlvbjsKKwlpbnQgbmJ1czsgLyogIyBidXNzZXMgb24gZGV2aWNlICovCisJdW5zaWduZWQgaW50IGZyZXE7IC8qIG9wZXJhdGluZyBmcmVxdWVuY3kgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2JycDsKKwl1bnNpZ25lZCBpbnQgbWF4X3NqdzsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3NpemU7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIG9mZnM7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJY29uc3QgY2hhciAqZnc7CisJfSBib290LCBsb2FkLCBhcHA7CisJLyoKKwkgKiByZXNldCgpIGZ1bmN0aW9uCisJICogYnJpbmcgcGRldiBpbiBvciBvdXQgb2YgcmVzZXQsIGRlcGVuZGluZyBvbiB2YWx1ZQorCSAqLworCWludCAoKnJlc2V0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworCWludCAoKmVuYWJsZV9pcnEpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuYyBiL2RyaXZlcnMvbmV0L2NuaWMuYwppbmRleCAyNjNhMjk0Li43ZmYxNzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmMKKysrIGIvZHJpdmVycy9uZXQvY25pYy5jCkBAIC02OTksMTMgKzY5OSwxMyBAQAogc3RhdGljIHZvaWQgY25pY19zZXR1cF9wYWdlX3RibChzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGNuaWNfZG1hICpkbWEpCiB7CiAJaW50IGk7Ci0JdTMyICpwYWdlX3RhYmxlID0gZG1hLT5wZ3RibDsKKwlfX2xlMzIgKnBhZ2VfdGFibGUgPSAoX19sZTMyICopIGRtYS0+cGd0Ymw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5udW1fcGFnZXM7IGkrKykgewogCQkvKiBFYWNoIGVudHJ5IG5lZWRzIHRvIGJlIGluIGJpZyBlbmRpYW4gZm9ybWF0LiAqLwotCQkqcGFnZV90YWJsZSA9ICh1MzIpICgodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CiAJCXBhZ2VfdGFibGUrKzsKLQkJKnBhZ2VfdGFibGUgPSAodTMyKSBkbWEtPnBnX21hcF9hcnJbaV07CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoZG1hLT5wZ19tYXBfYXJyW2ldICYgMHhmZmZmZmZmZik7CiAJCXBhZ2VfdGFibGUrKzsKIAl9CiB9CkBAIC03MTMsMTMgKzcxMywxMyBAQAogc3RhdGljIHZvaWQgY25pY19zZXR1cF9wYWdlX3RibF9sZShzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGNuaWNfZG1hICpkbWEpCiB7CiAJaW50IGk7Ci0JdTMyICpwYWdlX3RhYmxlID0gZG1hLT5wZ3RibDsKKwlfX2xlMzIgKnBhZ2VfdGFibGUgPSAoX19sZTMyICopIGRtYS0+cGd0Ymw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5udW1fcGFnZXM7IGkrKykgewogCQkvKiBFYWNoIGVudHJ5IG5lZWRzIHRvIGJlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LiAqLwotCQkqcGFnZV90YWJsZSA9IGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmY7CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoZG1hLT5wZ19tYXBfYXJyW2ldICYgMHhmZmZmZmZmZik7CiAJCXBhZ2VfdGFibGUrKzsKLQkJKnBhZ2VfdGFibGUgPSAodTMyKSAoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMigodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOwogCQlwYWdlX3RhYmxlKys7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCmluZGV4IDA1OWMxZWUuLmVjMzVkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKQEAgLTI3MTAsNiArMjcxMCw4IEBACiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7CiAKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBGVUxMX0lOSVRfRE9ORSkpIHsKIAkJZXJyID0gY3hnYl91cChhZGFwdGVyKTsKIAkJaWYgKGVyciA8IDApCkBAIC0zNjYxLDcgKzM2NjMsNiBAQAogCQlwaS0+eGFjdF9hZGRyX2ZpbHQgPSAtMTsKIAkJcGktPnJ4X29mZmxvYWQgPSBSWF9DU087CiAJCXBpLT5wb3J0X2lkID0gaTsKLQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgVFNPX0ZMQUdTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggMWI0OGI2OC4uOGIwMDg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0xMDk0LDcgKzEwOTQsNyBAQAogCQkJCX0KIAkJCX0KIAkJCS8qIENoYW5nZSBidWZmZXIgb3duZXJzaGlwIGZvciB0aGlzIGxhc3QgZnJhbWUsIGJhY2sgdG8gdGhlIGFkYXB0ZXIgKi8KLQkJCWZvciAoOyBscC0+cnhfb2xkICE9IGVudHJ5OyBscC0+cnhfb2xkID0gKCsrbHAtPnJ4X29sZCkgJiBscC0+cnhSaW5nTWFzaykgeworCQkJZm9yICg7IGxwLT5yeF9vbGQgIT0gZW50cnk7IGxwLT5yeF9vbGQgPSAobHAtPnJ4X29sZCArIDEpICYgbHAtPnJ4UmluZ01hc2spIHsKIAkJCQl3cml0ZWwocmVhZGwoJmxwLT5yeF9yaW5nW2xwLT5yeF9vbGRdLmJhc2UpIHwgUl9PV04sICZscC0+cnhfcmluZ1tscC0+cnhfb2xkXS5iYXNlKTsKIAkJCX0KIAkJCXdyaXRlbChyZWFkbCgmbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UpIHwgUl9PV04sICZscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSk7CkBAIC0xMTAzLDcgKzExMDMsNyBAQAogCQkvKgogCQkgICAqKiBVcGRhdGUgZW50cnkgaW5mb3JtYXRpb24KIAkJICovCi0JCWxwLT5yeF9uZXcgPSAoKytscC0+cnhfbmV3KSAmIGxwLT5yeFJpbmdNYXNrOworCQlscC0+cnhfbmV3ID0gKGxwLT5yeF9uZXcgKyAxKSAmIGxwLT5yeFJpbmdNYXNrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAkJfQogCiAJCS8qIFVwZGF0ZSBhbGwgdGhlIHBvaW50ZXJzICovCi0JCWxwLT50eF9vbGQgPSAoKytscC0+dHhfb2xkKSAmIGxwLT50eFJpbmdNYXNrOworCQlscC0+dHhfb2xkID0gKGxwLT50eF9vbGQgKyAxKSAmIGxwLT50eFJpbmdNYXNrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IGUxYTgyMTYuLmMwNWRiNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTE3NTMsOCArMTc1Myw2IEBACiAKIAkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgcXVldWUuICovCiAJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7Ci0JCW5wLT5yeF9yaW5nW2ldLnN0YXR1cyA9IDA7Ci0JCW5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvID0gMDsKIAkJc2tiID0gbnAtPnJ4X3NrYnVmZltpXTsKIAkJaWYgKHNrYikgewogCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGRldiwKQEAgLTE3NjMsNiArMTc2MSw4IEBACiAJCQlkZXZfa2ZyZWVfc2tiIChza2IpOwogCQkJbnAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CiAJCX0KKwkJbnAtPnJ4X3JpbmdbaV0uc3RhdHVzID0gMDsKKwkJbnAtPnJ4X3JpbmdbaV0uZnJhZ2luZm8gPSAwOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKIAkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCmluZGV4IDExMmM1YWEuLjkwN2IwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKKysrIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAJaWYgKG5ldGlmX21zZ19odyhwcml2KSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIjogcmVhZGluZyBUU1YgYXQgYWRkcjoweCUwNHhcbiIsCiAJCQkgZW5kcHRyICsgMSk7Ci0JZW5jMjhqNjBfbWVtX3JlYWQocHJpdiwgZW5kcHRyICsgMSwgc2l6ZW9mKHRzdiksIHRzdik7CisJZW5jMjhqNjBfbWVtX3JlYWQocHJpdiwgZW5kcHRyICsgMSwgVFNWX1NJWkUsIHRzdik7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYzI4ajYwX2R1bXBfdHN2KHN0cnVjdCBlbmMyOGo2MF9uZXQgKnByaXYsIGNvbnN0IGNoYXIgKm1zZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggNGZmZGMxOC4uMjc2NWEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODYsNiArMTI4NiwyMSBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2NCkgfSwgLyogTVQyNjQ2OCBDb25uZWN0WCBFTiAxMEdpZ0UgUENJZSBnZW4yKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NDYpIH0sIC8qIE1UMjY0MzggQ29ubmVjdFggRU4gNDBHaWdFIFBDSWUgZ2VuMiA1R1QvcyAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2ZSkgfSwgLyogTVQyNjQ3OCBDb25uZWN0WDIgNDBHaWdFIFBDSWUgZ2VuMiAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwMikgfSwgLyogTVQyNTQwMCBGYW1pbHkgW0Nvbm5lY3RYLTIgVmlydHVhbCBGdW5jdGlvbl0gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDMpIH0sIC8qIE1UMjc1MDAgRmFtaWx5IFtDb25uZWN0WC0zXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNCkgfSwgLyogTVQyNzUwMCBGYW1pbHkgW0Nvbm5lY3RYLTMgVmlydHVhbCBGdW5jdGlvbl0gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDUpIH0sIC8qIE1UMjc1MTAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA2KSB9LCAvKiBNVDI3NTExIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNykgfSwgLyogTVQyNzUyMCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDgpIH0sIC8qIE1UMjc1MjEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA5KSB9LCAvKiBNVDI3NTMwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwYSkgfSwgLyogTVQyNzUzMSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGIpIH0sIC8qIE1UMjc1NDAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBjKSB9LCAvKiBNVDI3NTQxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwZCkgfSwgLyogTVQyNzU1MCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGUpIH0sIC8qIE1UMjc1NTEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBmKSB9LCAvKiBNVDI3NTYwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAxMCkgfSwgLyogTVQyNzU2MSBGYW1pbHkgKi8KIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggMjU0MTMyMS4uOWZiNTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTQ0ODksNiArNDQ4OSw5IEBACiB7CiAJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CiAJaW50IGZpcnN0X3J4X2NoYW5uZWwsIGZpcnN0X3R4X2NoYW5uZWw7CisJaW50IG51bV9yeF9yaW5ncywgbnVtX3R4X3JpbmdzOworCXN0cnVjdCByeF9yaW5nX2luZm8gKnJ4X3JpbmdzOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4X3JpbmdzOwogCWludCBpLCBwb3J0LCBlcnI7CiAKIAlwb3J0ID0gbnAtPnBvcnQ7CkBAIC00NDk4LDE4ICs0NTAxLDIxIEBACiAJCWZpcnN0X3R4X2NoYW5uZWwgKz0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV07CiAJfQogCi0JbnAtPm51bV9yeF9yaW5ncyA9IHBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W3BvcnRdOwotCW5wLT5udW1fdHhfcmluZ3MgPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwludW1fcnhfcmluZ3MgPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwludW1fdHhfcmluZ3MgPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKIAotCW5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobnAtPmRldiwgbnAtPm51bV9yeF9yaW5ncyk7Ci0JbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhucC0+ZGV2LCBucC0+bnVtX3R4X3JpbmdzKTsKLQotCW5wLT5yeF9yaW5ncyA9IGtjYWxsb2MobnAtPm51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCByeF9yaW5nX2luZm8pLAotCQkJICAgICAgIEdGUF9LRVJORUwpOworCXJ4X3JpbmdzID0ga2NhbGxvYyhudW1fcnhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgcnhfcmluZ19pbmZvKSwKKwkJCSAgIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFucC0+cnhfcmluZ3MpCisJaWYgKCFyeF9yaW5ncykKIAkJZ290byBvdXRfZXJyOwogCisJbnAtPm51bV9yeF9yaW5ncyA9IG51bV9yeF9yaW5nczsKKwlzbXBfd21iKCk7CisJbnAtPnJ4X3JpbmdzID0gcnhfcmluZ3M7CisKKwluZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5wLT5kZXYsIG51bV9yeF9yaW5ncyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV9yeF9yaW5nczsgaSsrKSB7CiAJCXN0cnVjdCByeF9yaW5nX2luZm8gKnJwID0gJm5wLT5yeF9yaW5nc1tpXTsKIApAQCAtNDUzOCwxMiArNDU0NCwxOCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlucC0+dHhfcmluZ3MgPSBrY2FsbG9jKG5wLT5udW1fdHhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgdHhfcmluZ19pbmZvKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwl0eF9yaW5ncyA9IGtjYWxsb2MobnVtX3R4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCisJCQkgICBHRlBfS0VSTkVMKTsKIAllcnIgPSAtRU5PTUVNOwotCWlmICghbnAtPnR4X3JpbmdzKQorCWlmICghdHhfcmluZ3MpCiAJCWdvdG8gb3V0X2VycjsKIAorCW5wLT5udW1fdHhfcmluZ3MgPSBudW1fdHhfcmluZ3M7CisJc21wX3dtYigpOworCW5wLT50eF9yaW5ncyA9IHR4X3JpbmdzOworCisJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhucC0+ZGV2LCBudW1fdHhfcmluZ3MpOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CiAKQEAgLTYyNDYsMTEgKzYyNTgsMTcgQEAKIHN0YXRpYyB2b2lkIG5pdV9nZXRfcnhfc3RhdHMoc3RydWN0IG5pdSAqbnApCiB7CiAJdW5zaWduZWQgbG9uZyBwa3RzLCBkcm9wcGVkLCBlcnJvcnMsIGJ5dGVzOworCXN0cnVjdCByeF9yaW5nX2luZm8gKnJ4X3JpbmdzOwogCWludCBpOwogCiAJcGt0cyA9IGRyb3BwZWQgPSBlcnJvcnMgPSBieXRlcyA9IDA7CisKKwlyeF9yaW5ncyA9IEFDQ0VTU19PTkNFKG5wLT5yeF9yaW5ncyk7CisJaWYgKCFyeF9yaW5ncykKKwkJZ290byBub19yaW5nczsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKLQkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnJ4X3JpbmdzW2ldOworCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCA9ICZyeF9yaW5nc1tpXTsKIAogCQluaXVfc3luY19yeF9kaXNjYXJkX3N0YXRzKG5wLCBycCwgMCk7CiAKQEAgLTYyNTksNiArNjI3Nyw4IEBACiAJCWRyb3BwZWQgKz0gcnAtPnJ4X2Ryb3BwZWQ7CiAJCWVycm9ycyArPSBycC0+cnhfZXJyb3JzOwogCX0KKworbm9fcmluZ3M6CiAJbnAtPmRldi0+c3RhdHMucnhfcGFja2V0cyA9IHBrdHM7CiAJbnAtPmRldi0+c3RhdHMucnhfYnl0ZXMgPSBieXRlczsKIAlucC0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkID0gZHJvcHBlZDsKQEAgLTYyNjgsMTYgKzYyODgsMjQgQEAKIHN0YXRpYyB2b2lkIG5pdV9nZXRfdHhfc3RhdHMoc3RydWN0IG5pdSAqbnApCiB7CiAJdW5zaWduZWQgbG9uZyBwa3RzLCBlcnJvcnMsIGJ5dGVzOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4X3JpbmdzOwogCWludCBpOwogCiAJcGt0cyA9IGVycm9ycyA9IGJ5dGVzID0gMDsKKworCXR4X3JpbmdzID0gQUNDRVNTX09OQ0UobnAtPnR4X3JpbmdzKTsKKwlpZiAoIXR4X3JpbmdzKQorCQlnb3RvIG5vX3JpbmdzOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewotCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CisJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJnR4X3JpbmdzW2ldOwogCiAJCXBrdHMgKz0gcnAtPnR4X3BhY2tldHM7CiAJCWJ5dGVzICs9IHJwLT50eF9ieXRlczsKIAkJZXJyb3JzICs9IHJwLT50eF9lcnJvcnM7CiAJfQorCitub19yaW5nczoKIAlucC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gcGt0czsKIAlucC0+ZGV2LT5zdGF0cy50eF9ieXRlcyA9IGJ5dGVzOwogCW5wLT5kZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGVycm9yczsKQEAgLTYyODcsOSArNjMxNSwxMCBAQAogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCW5pdV9nZXRfcnhfc3RhdHMobnApOwotCW5pdV9nZXRfdHhfc3RhdHMobnApOwotCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluaXVfZ2V0X3J4X3N0YXRzKG5wKTsKKwkJbml1X2dldF90eF9zdGF0cyhucCk7CisJfQogCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKaW5kZXggZDczNTUzMC4uMWJmMTIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCkBAIC0yMjQ3LDcgKzIyNDcsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKIAlwY2hfZ2JlX2hhbF9waHlfaHdfcmVzZXQoJmFkYXB0ZXItPmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggMWY0MmY2YS4uZDNjYjc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTE0ODgsMTIgKzE0ODgsMTAgQEAKICAgICAKIAkvKiAKIAkgKiBXYWl0IGEgZnVsbCBUeCB0aW1lICgxLjJtcykgKyBzb21lIGd1YXJkIHRpbWUsIE5TIHNheXMgMS42bXMgdG90YWwuCi0JICogRWFybHkgZGF0YXNoZWV0cyBzYWlkIHRvIHBvbGwgdGhlIHJlc2V0IGJpdCwgYnV0IG5vdyB0aGV5IHNheSB0aGF0Ci0JICogaXQgImlzIG5vdCBhIHJlbGlhYmxlIGluZGljYXRvciBhbmQgc3Vic2VxdWVudGx5IHNob3VsZCBiZSBpZ25vcmVkLiIKLQkgKiBXZSB3YWl0IGF0IGxlYXN0IDEwbXMuCisJICogV2Ugd2FpdCBhdCBsZWFzdCAybXMuCiAJICovCiAKLQltZGVsYXkoMTApOworCW1kZWxheSgyKTsKIAogCS8qCiAJICogUmVzZXQgUkJDUlswMV0gYmFjayB0byB6ZXJvIGFzIHBlciBtYWdpYyBpbmNhbnRhdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IGJkZTdkNjEuLjU5Y2NmMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtOTczLDcgKzk3Myw4IEBACiAJCWlmIChwbSkKIAkJCXBtX3JlcXVlc3RfcmVzdW1lKCZ0cC0+cGNpX2Rldi0+ZGV2KTsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQluZXRpZl9pbmZvKHRwLCBpZnVwLCBkZXYsICJsaW5rIHVwXG4iKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2luZm8odHAsIGlmdXAsIGRldiwgImxpbmsgdXBcbiIpOwogCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCW5ldGlmX2luZm8odHAsIGlmZG93biwgZGV2LCAibGluayBkb3duXG4iKTsKQEAgLTM3NTcsNyArMzc1OCw4IEBACiAJUlRMX1cxNihJbnRyTWl0aWdhdGUsIDB4NTE1MSk7CiAKIAkvKiBXb3JrIGFyb3VuZCBmb3IgUnhGSUZPIG92ZXJmbG93LiAqLwotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yMikgewogCQl0cC0+aW50cl9ldmVudCB8PSBSeEZJRk9PdmVyIHwgUENTVGltZW91dDsKIAkJdHAtPmludHJfZXZlbnQgJj0gflJ4T3ZlcmZsb3c7CiAJfQpAQCAtNDYzOSwxMiArNDY0MSwzMyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBXb3JrIGFyb3VuZCBmb3IgcnggZmlmbyBvdmVyZmxvdyAqLwotCQlpZiAodW5saWtlbHkoc3RhdHVzICYgUnhGSUZPT3ZlcikgJiYKLQkJKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzExKSkgewotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkJcnRsODE2OV90eF90aW1lb3V0KGRldik7Ci0JCQlicmVhazsKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpKSB7CisJCQlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgeworCQkJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMToKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMjoKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQkJcnRsODE2OV90eF90aW1lb3V0KGRldik7CisJCQkJZ290byBkb25lOworCQkJLyogVGVzdGVycyBuZWVkZWQuICovCisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTc6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTk6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjA6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjM6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjQ6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJCQkvKiBFeHBlcmltZW50YWwgc2NpZW5jZS4gUGt0Z2VuIHByb29mLiAqLworCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgorCQkJCWlmIChzdGF0dXMgPT0gUnhGSUZPT3ZlcikKKwkJCQkJZ290byBkb25lOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCWlmICh1bmxpa2VseShzdGF0dXMgJiBTWVNFcnIpKSB7CkBAIC00NjgwLDcgKzQ3MDMsNyBAQAogCQkJKHN0YXR1cyAmIFJ4RklGT092ZXIpID8gKHN0YXR1cyB8IFJ4T3ZlcmZsb3cpIDogc3RhdHVzKTsKIAkJc3RhdHVzID0gUlRMX1IxNihJbnRyU3RhdHVzKTsKIAl9Ci0KK2RvbmU6CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNzg0MWE4Zi4uOTNiMzJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTYwLDEyICs2MCw2IEBACiAjZGVmaW5lIEJBUl8wCTAKICNkZWZpbmUgQkFSXzIJMgogCi0jaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCi0jZGVmaW5lIFRHM19WTEFOX1RBR19VU0VEIDEKLSNlbHNlCi0jZGVmaW5lIFRHM19WTEFOX1RBR19VU0VEIDAKLSNlbmRpZgotCiAjaW5jbHVkZSAidGczLmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgpAQCAtMTM0LDkgKzEyOCw2IEBACiAJCQkJIFRHM19UWF9SSU5HX1NJWkUpCiAjZGVmaW5lIE5FWFRfVFgoTikJCSgoKE4pICsgMSkgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKQogCi0jZGVmaW5lIFRHM19SWF9ETUFfQUxJR04JCTE2Ci0jZGVmaW5lIFRHM19SWF9IRUFEUk9PTQkJCUFMSUdOKFZMQU5fSExFTiwgVEczX1JYX0RNQV9BTElHTikKLQogI2RlZmluZSBURzNfRE1BX0JZVEVfRU5BQgkJNjQKIAogI2RlZmluZSBURzNfUlhfU1REX0RNQV9TWgkJMTUzNgpAQCAtNDcyMiw4ICs0NzEzLDYgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAkJdTMyIG9wYXF1ZV9rZXksIGRlc2NfaWR4LCAqcG9zdF9wdHI7Ci0JCWJvb2wgaHdfdmxhbiBfX21heWJlX3VudXNlZCA9IGZhbHNlOwotCQl1MTYgdnRhZyBfX21heWJlX3VudXNlZCA9IDA7CiAKIAkJZGVzY19pZHggPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX0lOREVYX01BU0s7CiAJCW9wYXF1ZV9rZXkgPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX1JJTkdfTUFTSzsKQEAgLTQ3ODIsMTIgKzQ3NzEsMTIgQEAKIAkJCXRnM19yZWN5Y2xlX3J4KHRuYXBpLCB0cHIsIG9wYXF1ZV9rZXksCiAJCQkJICAgICAgIGRlc2NfaWR4LCAqcG9zdF9wdHIpOwogCi0JCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsgVkxBTl9ITEVOICsKKwkJCWNvcHlfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LCBsZW4gKwogCQkJCQkJICAgIFRHM19SQVdfSVBfQUxJR04pOwogCQkJaWYgKGNvcHlfc2tiID09IE5VTEwpCiAJCQkJZ290byBkcm9wX2l0X25vX3JlY3ljbGU7CiAKLQkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBURzNfUkFXX0lQX0FMSUdOICsgVkxBTl9ITEVOKTsKKwkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBURzNfUkFXX0lQX0FMSUdOKTsKIAkJCXNrYl9wdXQoY29weV9za2IsIGxlbik7CiAJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodHAtPnBkZXYsIGRtYV9hZGRyLCBsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgY29weV9za2ItPmRhdGEsIGxlbik7CkBAIC00ODE0LDMwICs0ODAzLDExIEBACiAJCX0KIAogCQlpZiAoZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4gJiYKLQkJICAgICEodHAtPnJ4X21vZGUgJiBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpKSB7Ci0JCQl2dGFnID0gZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLOwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JCQlpZiAodHAtPnZsZ3JwKQotCQkJCWh3X3ZsYW4gPSB0cnVlOwotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZSA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikKLQkJCQkJCSAgICBfX3NrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKKwkJICAgICEodHAtPnJ4X21vZGUgJiBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpKQorCQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsCisJCQkJCSAgICAgICBkZXNjLT5lcnJfdmxhbiAmIFJYRF9WTEFOX01BU0spOwogCi0JCQkJbWVtbW92ZSh2ZSwgc2tiLT5kYXRhICsgVkxBTl9ITEVOLAotCQkJCQlFVEhfQUxFTiAqIDIpOwotCQkJCXZlLT5oX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7Ci0JCQkJdmUtPmhfdmxhbl9UQ0kgPSBodG9ucyh2dGFnKTsKLQkJCX0KLQkJfQotCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkJaWYgKGh3X3ZsYW4pCi0JCQl2bGFuX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgdHAtPnZsZ3JwLCB2dGFnLCBza2IpOwotCQllbHNlCi0jZW5kaWYKLQkJCW5hcGlfZ3JvX3JlY2VpdmUoJnRuYXBpLT5uYXBpLCBza2IpOworCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKIAogCQlyZWNlaXZlZCsrOwogCQlidWRnZXQtLTsKQEAgLTU3NDAsMTEgKzU3MTAsOSBAQAogCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX1RDUFVEUF9DU1VNOwogCX0KIAotI2lmIFRHM19WTEFOX1RBR19VU0VECiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0jZW5kaWYKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAKQEAgLTU5ODYsMTEgKzU5NTQsMTAgQEAKIAkJCX0KIAkJfQogCX0KLSNpZiBURzNfVkxBTl9UQUdfVVNFRAorCiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0jZW5kaWYKIAogCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSAmJgogCSAgICAhbXNzICYmIHNrYi0+bGVuID4gVkxBTl9FVEhfRlJBTUVfTEVOKQpAQCAtOTUzMiwxNyArOTQ5OSwxMCBAQAogCXJ4X21vZGUgPSB0cC0+cnhfbW9kZSAmIH4oUlhfTU9ERV9QUk9NSVNDIHwKIAkJCQkgIFJYX01PREVfS0VFUF9WTEFOX1RBRyk7CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgJiYgIWRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQogCS8qIFdoZW4gQVNGIGlzIGluIHVzZSwgd2UgYWx3YXlzIGtlZXAgdGhlIFJYX01PREVfS0VFUF9WTEFOX1RBRwogCSAqIGZsYWcgY2xlYXIuCiAJICovCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQlpZiAoIXRwLT52bGdycCAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKLQkJcnhfbW9kZSB8PSBSWF9NT0RFX0tFRVBfVkxBTl9UQUc7Ci0jZWxzZQotCS8qIEJ5IGRlZmluaXRpb24sIFZMQU4gaXMgZGlzYWJsZWQgYWx3YXlzIGluIHRoaXMKLQkgKiBjYXNlLgotCSAqLwogCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKIAkJcnhfbW9kZSB8PSBSWF9NT0RFX0tFRVBfVkxBTl9UQUc7CiAjZW5kaWYKQEAgLTExMjMwLDMxICsxMTE5MCw2IEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLXN0YXRpYyB2b2lkIHRnM192bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJdHAtPnZsZ3JwID0gZ3JwOwotCQlyZXR1cm47Ci0JfQotCi0JdGczX25ldGlmX3N0b3AodHApOwotCi0JdGczX2Z1bGxfbG9jayh0cCwgMCk7Ci0KLQl0cC0+dmxncnAgPSBncnA7Ci0KLQkvKiBVcGRhdGUgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHIGJpdCBpbiBSWF9NT0RFIHJlZ2lzdGVyLiAqLwotCV9fdGczX3NldF9yeF9tb2RlKGRldik7Ci0KLQl0ZzNfbmV0aWZfc3RhcnQodHApOwotCi0JdGczX2Z1bGxfdW5sb2NrKHRwKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHRnM19nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzMDY2LDkgKzEzMDAxLDcgQEAKIAogc3RhdGljIHZvaWQgaW5saW5lIHZsYW5fZmVhdHVyZXNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gZmxhZ3M7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB1MzIgdGczX3J4X3JldF9yaW5nX3NpemUoc3RydWN0IHRnMyAqdHApCkBAIC0xMzg2MSwxMSArMTM3OTQsMTEgQEAKIAllbHNlCiAJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1BPTExfU0VSREVTOwogCi0JdHAtPnJ4X29mZnNldCA9IE5FVF9JUF9BTElHTiArIFRHM19SWF9IRUFEUk9PTTsKKwl0cC0+cnhfb2Zmc2V0ID0gTkVUX0lQX0FMSUdOOwogCXRwLT5yeF9jb3B5X3RocmVzaCA9IFRHM19SWF9DT1BZX1RIUkVTSE9MRDsKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEgJiYKIAkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpICE9IDApIHsKLQkJdHAtPnJ4X29mZnNldCAtPSBORVRfSVBfQUxJR047CisJCXRwLT5yeF9vZmZzZXQgPSAwOwogI2lmbmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQl0cC0+cnhfY29weV90aHJlc2ggPSB+KHUxNikwOwogI2VuZGlmCkBAIC0xNDYyOSw5ICsxNDU2Miw2IEBACiAJLm5kb19kb19pb2N0bAkJPSB0ZzNfaW9jdGwsCiAJLm5kb190eF90aW1lb3V0CQk9IHRnM190eF90aW1lb3V0LAogCS5uZG9fY2hhbmdlX210dQkJPSB0ZzNfY2hhbmdlX210dSwKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IHRnM192bGFuX3J4X3JlZ2lzdGVyLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHRnM19wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKQEAgLTE0NjQ4LDkgKzE0NTc4LDYgQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gdGczX3ZsYW5fcnhfcmVnaXN0ZXIsCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdGczX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtMTQ3MDAsOSArMTQ2MjcsNyBAQAogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotI2lmIFRHM19WTEFOX1RBR19VU0VECiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0jZW5kaWYKIAogCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0cC0+cGRldiA9IHBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IGQ2MmM4ZDkuLmY1MjgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0yODA4LDkgKzI4MDgsNiBAQAogCXUzMgkJCQlyeF9zdGRfbWF4X3Bvc3Q7CiAJdTMyCQkJCXJ4X29mZnNldDsKIAl1MzIJCQkJcnhfcGt0X21hcF9zejsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCXN0cnVjdCB2bGFuX2dyb3VwCQkqdmxncnA7Ci0jZW5kaWYKIAogCiAJLyogYmVnaW4gImV2ZXJ5dGhpbmcgZWxzZSIgY2FjaGVsaW5lKHMpIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCA1ZTk4NjQzLi43ZGM4NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC00MDYsNiArNDA2LDcgQEAKIAogCWlmIChmdy0+c2l6ZSA+IEtBV0VUSF9GSVJNV0FSRV9CVUZfU0laRSkgewogCQllcnIoIkZpcm13YXJlIHRvbyBiaWc6ICV6dSIsIGZ3LT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlkYXRhX2xlbiA9IGZ3LT5zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCmluZGV4IDAxYzA1ZjUuLjIyOGQ0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKQEAgLTM2OTAsNyArMzY5MCw3IEBACiAJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQogCQlnb3RvIGV4aXQ7CiAKLQlpZiAoKHJ0c190YWJsZSAhPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpIHx8CisJaWYgKChydHNfdGFibGUgIT0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSAmJgogCSAgICAocnRzX3RhYmxlICE9CiAJICAgICBWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUKSkKIAkJKmRhdGExID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYwppbmRleCAwMDY0YmU3Li4yMTA5MWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCkBAIC04MzgsOSArODM4LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcW1heDsgaSsrKSB7CiAJCWVyciA9IGF0aDVrX2h3X3N0b3BfdHhfZG1hKGFoLCBpKTsKIAkJLyogLUVJTlZBTCAtPiBxdWV1ZSBpbmFjdGl2ZSAqLwotCQlpZiAoZXJyICE9IC1FSU5WQUwpCisJCWlmIChlcnIgJiYgZXJyICE9IC1FSU5WQUwpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKaW5kZXggZTVmMmI5Ni4uYTcwMjgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwpAQCAtODYsNyArODYsNyBAQAogCWlmICghYWgtPmFoX2J3bW9kZSkgewogCQlkdXIgPSBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbihzYy0+aHcsCiAJCQkJCQlOVUxMLCBsZW4sIHJhdGUpOwotCQlyZXR1cm4gZHVyOworCQlyZXR1cm4gbGUxNl90b19jcHUoZHVyKTsKIAl9CiAKIAliaXRyYXRlID0gcmF0ZS0+Yml0cmF0ZTsKQEAgLTI2NSw4ICsyNjUsNiBAQAogCQkgKiB3aGF0IHJhdGUgd2Ugc2hvdWxkIGNob29zZSB0byBUWCBBQ0tzLiAqLwogCQl0eF90aW1lID0gYXRoNWtfaHdfZ2V0X2ZyYW1lX2R1cmF0aW9uKGFoLCAxMCwgcmF0ZSk7CiAKLQkJdHhfdGltZSA9IGxlMTZfdG9fY3B1KHR4X3RpbWUpOwotCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHhfdGltZSwgcmVnKTsKIAogCQlpZiAoIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYwppbmRleCBmOGE3NzcxLi5mNDRjODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCkBAIC00MjYsOSArNDI2LDggQEAKIAkJfQogCiAJCS8qIFdBUiBmb3IgQVNQTSBzeXN0ZW0gaGFuZyAqLwotCQlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI4NyhhaCkpIHsKKwkJaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85Mjg3KGFoKSkKIAkJCXZhbCB8PSAoQVJfV0FfQklUNiB8IEFSX1dBX0JJVDcpOwotCQl9CiAKIAkJaWYgKEFSX1NSRVZfOTI4NUVfMjAoYWgpKQogCQkJdmFsIHw9IEFSX1dBX0JJVDIzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCmluZGV4IDM4NDMzZjkuLjAzNTJmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKQEAgLTE0Miw5ICsxNDIsNiBAQAogewogCWF0aDlrX2h0Y19leGl0X2RlYnVnKHByaXYtPmFoKTsKIAlhdGg5a19od19kZWluaXQocHJpdi0+YWgpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+c3diYV90YXNrbGV0KTsKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfdGFza2xldCk7CiAJa2ZyZWUocHJpdi0+YWgpOwogCXByaXYtPmFoID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwppbmRleCBmNGQ1NzZiLi42YmI1OTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCkBAIC0xMDI1LDEyICsxMDI1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCBjbWRfcnNwOwogCi0JLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZhdGFsX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOwotCWF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3MocHJpdik7Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9JTlZBTElEKSB7CkBAIC0xMDQ0LDggKzEwMzgsMjMgQEAKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CisKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnN3YmFfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rhc2tsZXQpOworCiAJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9xdWV1ZSk7CiAKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCS8qIENhbmNlbCBhbGwgdGhlIHJ1bm5pbmcgdGltZXJzL3dvcmsgLi4gKi8KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5mYXRhbF93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wc193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKKwlhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHByaXYpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCiAJLyogUmVtb3ZlIG1vbml0b3IgaW50ZXJmYWNlIGhlcmUgKi8KIAlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCWlmIChhdGg5a19odGNfcmVtb3ZlX21vbml0b3JfaW50ZXJmYWNlKHByaXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAxYWZiOGJiLi45ZjAxZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMzY5LDYgKzM2OSw5IEBACiAJZWxzZQogCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDA7CiAKKwkvKiBQQVBSRCBuZWVkcyBzb21lIG1vcmUgd29yayB0byBiZSBlbmFibGVkICovCisJYWgtPmNvbmZpZy5wYXByZF9kaXNhYmxlID0gMTsKKwogCWFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAlhaC0+Y29uZmlnLnBjaWVTZXJEZXNXcml0ZSA9IHRydWU7CiAKQEAgLTE5MzMsNyArMTkzNiw4IEBACiAJCXBDYXAtPnJ4X3N0YXR1c19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM19yeHMpOwogCQlwQ2FwLT50eF9kZXNjX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4Yyk7CiAJCXBDYXAtPnR4c19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM190eHMpOwotCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9QQVBSRCkpCisJCWlmICghYWgtPmNvbmZpZy5wYXByZF9kaXNhYmxlICYmCisJCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1BBUFJEKSkKIAkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1BBUFJEOwogCX0gZWxzZSB7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCmluZGV4IDVhM2RmZWMuLmVhOWZkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCkBAIC0yMjUsNiArMjI1LDcgQEAKIAl1MzIgcGNpZV93YWVuOwogCXU4IGFuYWxvZ19zaGlmdHJlZzsKIAl1OCBodF9lbmFibGU7CisJdTggcGFwcmRfZGlzYWJsZTsKIAl1MzIgb2ZkbV90cmlnX2xvdzsKIAl1MzIgb2ZkbV90cmlnX2hpZ2g7CiAJdTMyIGNja190cmlnX2hpZ2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwppbmRleCA3NjdkOGI4Li4wODdhNmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTU5OCw4ICs1OTgsNiBAQAogZXJyX3F1ZXVlczoKIAlhdGg5a19od19kZWluaXQoYWgpOwogZXJyX2h3OgotCXRhc2tsZXRfa2lsbCgmc2MtPmludHJfdHEpOwotCXRhc2tsZXRfa2lsbCgmc2MtPmJjb25fdGFza2xldCk7CiAKIAlrZnJlZShhaCk7CiAJc2MtPnNjX2FoID0gTlVMTDsKQEAgLTgwNyw5ICs4MDUsNiBAQAogCiAJYXRoOWtfaHdfZGVpbml0KHNjLT5zY19haCk7CiAKLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwotCiAJa2ZyZWUoc2MtPnNjX2FoKTsKIAlzYy0+c2NfYWggPSBOVUxMOwogfQpAQCAtODI0LDYgKzgxOSw4IEBACiAJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKIAlhdGhfZGVpbml0X2xlZHMoc2MpOwogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgewogCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKIAkJaWYgKGFwaHkgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGY5MGE2Y2EuLjkwNDBjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMzI1LDYgKzMyNSw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgdGltZV9sZWZ0OwogCkBAIC0zNDIsOCArMzQ0LDEyIEBACiAJaW5pdF9jb21wbGV0aW9uKCZzYy0+cGFwcmRfY29tcGxldGUpOwogCXNjLT5wYXByZF9wZW5kaW5nID0gdHJ1ZTsKIAl0eGN0bC5wYXByZCA9IEJJVChjaGFpbik7Ci0JaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApCisKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULCAiUEFQUkQgVFggZmFpbGVkXG4iKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2MtPnBhcHJkX2NvbXBsZXRlLAogCQkJbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpOwpAQCAtNTkyLDE0ICs1OTgsMTIgQEAKIAl1MzIgc3RhdHVzID0gc2MtPmludHJzdGF0dXM7CiAJdTMyIHJ4bWFzazsKIAotCWF0aDlrX3BzX3dha2V1cChzYyk7Ci0KIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0ZBVEFMKSB7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCQlyZXR1cm47CiAJfQogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlzcGluX2xvY2soJnNjLT5zY19wY3VfbG9jayk7CiAKIAlpZiAoIWF0aDlrX2h3X2NoZWNrX2FsaXZlKGFoKSkKQEAgLTk1NSw4ICs5NTksNiBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7Ci0KLQlhdGg5a19zZXRwb3dlcihzYywgQVRIOUtfUE1fRlVMTF9TTEVFUCk7CiB9CiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCkBAIC05NjksNiArOTcxLDcgQEAKIAkvKiBTdG9wIEFOSSAqLwogCWRlbF90aW1lcl9zeW5jKCZjb21tb24tPmFuaS50aW1lcik7CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CkBAIC0xMDE1LDYgKzEwMTgsNyBAQAogCiAJLyogU3RhcnQgQU5JICovCiAJYXRoX3N0YXJ0X2FuaShjb21tb24pOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMzA5LDYgKzEzMTMsOSBAQAogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCisJLyogcHJldmVudCB0YXNrbGV0cyB0byBlbmFibGUgaW50ZXJydXB0cyBvbmNlIHdlIGRpc2FibGUgdGhlbSAqLworCWFoLT5pbWFzayAmPSB+QVRIOUtfSU5UX0dMT0JBTDsKKwogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKQEAgLTEzMjYsNiArMTMzMywxMiBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKKwkvKiB3ZSBjYW4gbm93IHN5bmMgaXJxIGFuZCBraWxsIGFueSBydW5uaW5nIHRhc2tsZXRzLCBzaW5jZSB3ZSBhbHJlYWR5CisJICogZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgbm90IGhvbGRpbmcgYSBzcGluIGxvY2sgKi8KKwlzeW5jaHJvbml6ZV9pcnEoc2MtPmlycSk7CisJdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7CisJdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKKwogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiAJc2MtPnBzX2lkbGUgPSB0cnVlOwpAQCAtMTcwMSw3ICsxNzE0LDkgQEAKIHNraXBfY2hhbl9jaGFuZ2U6CiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKIAkJc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gMiAqIGNvbmYtPnBvd2VyX2xldmVsOworCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCAzMzJkMWZlLi4zM2EzN2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTIxMTMsOSArMjExMyw3IEBACiAJaWYgKG5lZWRyZXNldCkgewogCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX1JFU0VULAogCQkJInR4IGh1bmcsIHJlc2V0dGluZyB0aGUgY2hpcFxuIik7Ci0JCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0KIAogCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggM2YxZTVmMS4uOTFhOWY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMjYyNCw2ICsyNjI0LDcgQEAKIAkuZndfbmFtZV9wcmUgPSBJV0w0OTY1X0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDQ5NjVfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDQ5NjVfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV80OTY1X0VFUFJPTV9WRVJTSU9OLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCmluZGV4IDE0Y2ViNGQuLjI3YjVhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKQEAgLTE1MiwxMSArMTUyLDE0IEBACiAKIAllZXByb21fc2t1ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9TS1VfQ0FQKTsKIAotCXByaXYtPmNmZy0+c2t1ID0gKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CisJaWYgKCFwcml2LT5jZmctPnNrdSkgeworCQkvKiBub3QgdXNpbmcgc2t1IG92ZXJ3cml0ZSAqLworCQlwcml2LT5jZmctPnNrdSA9CisJCQkoKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF9CQU5EX1NFTEVDVElPTikgPj4KIAkJCUVFUFJPTV9TS1VfQ0FQX0JBTkRfUE9TKTsKLQlpZiAoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQXzExTl9FTkFCTEUpCi0JCXByaXYtPmNmZy0+c2t1IHw9IElXTF9TS1VfTjsKLQorCQlpZiAoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQXzExTl9FTkFCTEUpCisJCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047CisJfQogCWlmICghcHJpdi0+Y2ZnLT5za3UpIHsKIAkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBkZXZpY2Ugc2t1XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCAwYjRlODU5Li4wMjliZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTI0NDYsNiArMjQ0Niw3IEBACiAJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjY3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgxMiwgMHgzMTAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBRY29tICovCiAJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MTk2KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMjkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCmluZGV4IGI4NDMzZjMuLjYyODc2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKQEAgLTcyNiw5ICs3MjYsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBlZnVzZV93cml0ZV9kYXRhX2Nhc2UxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgKmVmdXNlX2FkZHIsCi0JCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCBpbnQgKmJjb250aW51YWwsCi0JCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRhcmdldF9wa3QsCi0JCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKKwkJCXU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwgaW50ICpiY29udGludWFsLAorCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0ICp0YXJnZXRfcGt0LAorCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0bXBfcGt0OwpAQCAtNzQ0LDggKzc0NCw4IEBACiAJdG1wX3BrdC53b3JkX2VuID0gdG1wX2hlYWRlciAmIDB4MEY7CiAJdG1wX3dvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHModG1wX3BrdC53b3JkX2VuKTsKIAotCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0Lm9mZnNldCkgewotCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0LT5vZmZzZXQpIHsKKwkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOwogCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJfSBlbHNlIHsKIAkJZm9yICh0bXBpbmRleCA9IDA7IHRtcGluZGV4IDwgKHRtcF93b3JkX2NudHMgKiAyKTsgdG1waW5kZXgrKykgewpAQCAtNzU2LDIzICs3NTYsMjMgQEAKIAkJfQogCiAJCWlmIChiZGF0YWVtcHR5ID09IGZhbHNlKSB7Ci0JCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOwogCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQl9IGVsc2UgewogCQkJbWF0Y2hfd29yZF9lbiA9IDB4MEY7Ci0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDApKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgwKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDApKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgwKSk7CiAKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMSkpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDEpKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMSkpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgyKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMikpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgyKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMikpOwogCi0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDMpKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgzKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDMpKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgzKSk7CiAKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQkJCWJhZHdvcmRlbiA9IGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoCiAJCQkJCQkJICAgIGh3LCAqZWZ1c2VfYWRkciArIDEsCiAJCQkJCQkJICAgIHRtcF9wa3Qud29yZF9lbiwKLQkJCQkJCQkgICAgdGFyZ2V0X3BrdC5kYXRhKTsKKwkJCQkJCQkgICAgdGFyZ2V0X3BrdC0+ZGF0YSk7CiAKIAkJCQlpZiAoMHgwRiAhPSAoYmFkd29yZGVuICYgMHgwRikpIHsKIAkJCQkJdTggcmVvcmdfb2Zmc2V0ID0gb2Zmc2V0OwpAQCAtNzkxLDI2ICs3OTEsMjYgQEAKIAkJCQl9CiAKIAkJCQl0bXBfd29yZF9lbiA9IDB4MEY7Ci0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMCkpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMCkpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMCkpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgwKSk7CiAKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgxKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgxKSkgXgogCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgxKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDIpKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDIpKSBeCiAJCQkJCShtYXRjaF93b3JkX2VuICYgQklUKDIpKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMikpOwogCi0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMykpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMykpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMykpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgzKSk7CiAKIAkJCQlpZiAoKHRtcF93b3JkX2VuICYgMHgwRikgIT0gMHgwRikgewogCQkJCQkqZWZ1c2VfYWRkciA9IGVmdXNlX2dldF9jdXJyZW50X3NpemUoaHcpOwotCQkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKLQkJCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gdG1wX3dvcmRfZW47CisJCQkJCXRhcmdldF9wa3QtPm9mZnNldCA9IG9mZnNldDsKKwkJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHRtcF93b3JkX2VuOwogCQkJCX0gZWxzZQogCQkJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwogCQkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKQEAgLTgyMSw4ICs4MjEsOCBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgKz0gKDIgKiB0bXBfd29yZF9jbnRzKSArIDE7Ci0JCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gd29yZF9lbjsKKwkJCQl0YXJnZXRfcGt0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHdvcmRfZW47CiAJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQkJfQogCQl9CkBAIC05MzgsNyArOTM4LDcgQEAKIAkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UxKGh3LCAmZWZ1c2VfYWRkciwKIAkJCQkJCSAgICAgICBlZnVzZV9kYXRhLCBvZmZzZXQsCiAJCQkJCQkgICAgICAgJmJjb250aW51YWwsCi0JCQkJCQkgICAgICAgJndyaXRlX3N0YXRlLCB0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgJnRhcmdldF9wa3QsCiAJCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJmJyZXN1bHQsCiAJCQkJCQkgICAgICAgd29yZF9lbik7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCAwZmEzNmFhLi4xNzU4ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTYxOSw2ICs2MTksMTMgQEAKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOwogCQkJCQl1OCAqcGRhdGE7CiAJCQkJCXVza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgMTI4KTsKKwkJCQkJaWYgKCF1c2tiKSB7CisJCQkJCQlSVF9UUkFDRShydGxwcml2LAorCQkJCQkJCShDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAorCQkJCQkJCURCR19FTUVSRywKKwkJCQkJCQkoImNhbid0IGFsbG9jIHJ4IHNrYlxuIikpOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CiAJCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IodXNrYiksCiAJCQkJCQkJJnJ4X3N0YXR1cywKIAkJCQkJCQlzaXplb2Yocnhfc3RhdHVzKSk7CkBAIC02NDEsNyArNjQ4LDcgQEAKIAkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKIAkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKLQkJCQkJIERCR19ETUVTRywKKwkJCQkJIERCR19FTUVSRywKIAkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTEwNjYsOSArMTA3Myw5IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0KIAkJCSAgICBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCXUzMiBidWZmZXJhZGRyZXNzOwotCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKIAkJCWlmICghc2tiKQogCQkJCXJldHVybiAwOworCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKIAogCQkJLypza2ItPmRldiA9IGRldjsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCmluZGV4IDQ2NzE0OTEwLi43MTQ1ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCkBAIC0xMTAsOSArMTEwLDggQEAKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwogCiAJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOwotCWtmcmVlKGNtZCk7Ci0KIAl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGkgcmVzZXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CisJa2ZyZWUoY21kKTsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCA1NDZkZTU3Li5kYTFmMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTIwLDYgKzEyMCw5IEBACiAJdW5zaWduZWQgbG9uZyByeF9wZm5fYXJyYXlbTkVUX1JYX1JJTkdfU0laRV07CiAJc3RydWN0IG11bHRpY2FsbF9lbnRyeSByeF9tY2xbTkVUX1JYX1JJTkdfU0laRSsxXTsKIAlzdHJ1Y3QgbW11X3VwZGF0ZSByeF9tbXVbTkVUX1JYX1JJTkdfU0laRV07CisKKwkvKiBTdGF0aXN0aWNzICovCisJaW50IHJ4X2dzb19jaGVja3N1bV9maXh1cDsKIH07CiAKIHN0cnVjdCBuZXRmcm9udF9yeF9pbmZvIHsKQEAgLTc3MCwxMSArNzczLDI5IEBACiAJcmV0dXJuIGNvbnM7CiB9CiAKLXN0YXRpYyBpbnQgc2tiX2NoZWNrc3VtX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGNoZWNrc3VtX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJdW5zaWduZWQgY2hhciAqdGg7CiAJaW50IGVyciA9IC1FUFJPVE87CisJaW50IHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSA9IDA7CisKKwkvKgorCSAqIEEgR1NPIFNLQiBtdXN0IGJlIENIRUNLU1VNX1BBUlRJQUwuIEhvd2V2ZXIgc29tZSBidWdneQorCSAqIHBlZXJzIGNhbiBmYWlsIHRvIHNldCBORVRSWEZfY3N1bV9ibGFuayB3aGVuIHNlbmRpbmcgYSBHU08KKwkgKiBmcmFtZS4gSW4gdGhpcyBjYXNlIGZvcmNlIHRoZSBTS0IgdG8gQ0hFQ0tTVU1fUEFSVElBTCBhbmQKKwkgKiByZWNhbGN1bGF0ZSB0aGUgcGFydGlhbCBjaGVja3N1bS4KKwkgKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCAmJiBza2JfaXNfZ3NvKHNrYikpIHsKKwkJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJbnAtPnJ4X2dzb19jaGVja3N1bV9maXh1cCsrOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CisJCXJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSA9IDE7CisJfQorCisJLyogQSBub24tQ0hFQ0tTVU1fUEFSVElBTCBTS0IgZG9lcyBub3QgcmVxdWlyZSBzZXR1cC4gKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpCiAJCWdvdG8gb3V0OwpAQCAtNzg4LDkgKzgwOSwyMyBAQAogCXN3aXRjaCAoaXBoLT5wcm90b2NvbCkgewogCWNhc2UgSVBQUk9UT19UQ1A6CiAJCXNrYi0+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+b3BzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCA0MTU1ODA1Li4yYjc3MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTMxOSw2ICszMTksOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgZGlzY29ubmVjdGVkICovCisJaWYgKCFsY3UpCisJCXJldHVybjsKIAlkZXZpY2UtPmRpc2NpcGxpbmUtPmdldF91aWQoZGV2aWNlLCAmdWlkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2aWNlLT5hbGlhc19saXN0KTsKQEAgLTY4MCw2ICs2ODMsOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgcmVtb3ZlZCAqLworCWlmICghbGN1KQorCQlyZXR1cm4gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJX3JlbW92ZV9kZXZpY2VfZnJvbV9sY3UobGN1LCBkZXZpY2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjdS0+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+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwogCQkJCXJ0biA9IFNVQ0NFU1M7CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKaW5kZXggNTgxNWNiZS4uOWE3YWFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKQEAgLTY0Niw2ICs2NDYsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWxpc3Rfc3BsaWNlX2luaXQoJnNob3N0LT5laF9jbWRfcSwgJmVoX3dvcmtfcSk7CisJc2hvc3QtPmhvc3RfZWhfc2NoZWR1bGVkID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCVNBU19EUFJJTlRLKCJFbnRlciAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCBiMmE4MTcwLi45ZWFkMDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtMjE3Niw5ICsyMTc2LDkgQEAKIAkJLyogYWRqdXN0IGhiYV9xdWV1ZV9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKIAkJICogYW5kIHF1ZXVlX3NpemUKIAkJICovCi0JCWlvYy0+aGJhX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7Ci0JCWlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtPSBxdWV1ZV9kaWZmOwotCQlxdWV1ZV9zaXplIC09IHF1ZXVlX2RpZmY7CisJCWlvYy0+aGJhX3F1ZXVlX2RlcHRoIC09IChxdWV1ZV9kaWZmIC8gMik7CisJCWlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtPSAocXVldWVfZGlmZiAvIDIpOworCQlxdWV1ZV9zaXplID0gZmFjdHMtPk1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoOwogCX0KIAlpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggPSBxdWV1ZV9zaXplOwogCkBAIC0zOTQxLDYgKzM5NDEsOCBAQAogc3RhdGljIHZvaWQKIF9iYXNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCiB7CisJbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKGlvYywgcmVzZXRfcGhhc2UpOworCW1wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CiAJc3dpdGNoIChyZXNldF9waGFzZSkgewogCWNhc2UgTVBUMl9JT0NfUFJFX1JFU0VUOgogCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6ICIKQEAgLTM5NzEsOCArMzk3Myw2IEBACiAJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlicmVhazsKIAl9Ci0JbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKGlvYywgcmVzZXRfcGhhc2UpOwotCW1wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CiB9CiAKIC8qKgpAQCAtNDAyNiw2ICs0MDI2LDcgQEAKIHsKIAlpbnQgcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHBlX2NvbXBsZXRlID0gaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZTsKIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKQEAgLTQwNjgsNiArNDA2OSwxNCBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfQUZURVJfUkVTRVQpOworCisJLyogSWYgdGhpcyBoYXJkIHJlc2V0IGlzIGNhbGxlZCB3aGlsZSBwb3J0IGVuYWJsZSBpcyBhY3RpdmUsIHRoZW4KKwkgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gY2FsbCBtYWtlX2lvY19vcGVyYXRpb25hbAorCSAqLworCWlmIChwZV9jb21wbGV0ZSkgeworCQlyID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQogCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIHNsZWVwX2ZsYWcpOwogCWlmICghcikKIAkJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0RPTkVfUkVTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGVkYTM0N2MuLjVkZWQzZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTgxOSw3ICs4MTksNyBAQAogfQogCiAvKioKLSAqIG1wdHNjc2loX2dldF9zY3NpX2xvb2t1cCAtIHJldHVybnMgc2NtZCBlbnRyeQorICogX3Njc2loX3Njc2lfbG9va3VwX2dldCAtIHJldHVybnMgc2NtZCBlbnRyeQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAogICoKQEAgLTgzMiw2ICs4MzIsMjggQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLgorICogVGhlbiB3aWxsIGRlcmVmcmVuY2UgdGhlIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjc2lfY21uZCAqCitfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOworCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHNjbWQ7Cit9CisKKy8qKgogICogX3Njc2loX3Njc2lfbG9va3VwX2ZpbmRfYnlfc2NtZCAtIHNjbWQgbG9va3VwCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CkBAIC0yOTgxLDkgKzMwMDMsNiBAQAogCXUxNiBoYW5kbGU7CiAKIAlmb3IgKGkgPSAwIDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgewotCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCi0JCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCi0JCQljb250aW51ZTsKIAkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKIAkJaWYgKCFoYW5kbGUpCiAJCQljb250aW51ZTsKQEAgLTMyMTAsNyArMzIyOSw3IEBACiAJdTE2IGNvdW50ID0gMDsKIAogCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5zY3NpaW9fZGVwdGg7IHNtaWQrKykgewotCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldF9jbGVhcihpb2MsIHNtaWQpOwogCQlpZiAoIXNjbWQpCiAJCQljb250aW51ZTsKIAkJY291bnQrKzsKQEAgLTM4MDQsNyArMzgyMyw3IEBACiAJdTMyIHJlc3BvbnNlX2NvZGUgPSAwOwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7Ci0Jc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKKwlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldF9jbGVhcihpb2MsIHNtaWQpOwogCWlmIChzY21kID09IE5VTEwpCiAJCXJldHVybiAxOwogCkBAIC01MDA1LDYgKzUwMjQsMTIgQEAKIAkJICAgICBldmVudF9kYXRhKTsKICNlbmRpZgogCisJLyogSW4gTVBJIFJldmlzaW9uIEsgKDB4QyksIHRoZSBpbnRlcm5hbCBkZXZpY2UgcmVzZXQgY29tcGxldGUgd2FzCisJICogaW1wbGVtZW50ZWQsIHNvIGF2b2lkIHNldHRpbmcgdG1fYnVzeSBmbGFnIGZvciBvbGRlciBmaXJtd2FyZS4KKwkgKi8KKwlpZiAoKGlvYy0+ZmFjdHMuSGVhZGVyVmVyc2lvbiA+PiA4KSA8IDB4QykKKwkJcmV0dXJuOworCiAJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0KIAkgICAgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICYmCiAJICAgZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPQpAQCAtNTA5OSw2ICs1MTI0LDcgQEAKICAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJdTE2IHNtaWQsIGhhbmRsZTsKIAl1MzIgbHVuOwogCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CkBAIC01MTA5LDEyICs1MTM1LDE3IEBACiAJTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAjZW5kaWYKIAl1MTYgaW9jX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByOworCiAJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJicm9hZGNhc3QgcHJpbWF0aXZlOiAiCiAJICAgICJwaHkgbnVtYmVyKCVkKSwgd2lkdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGV2ZW50X2RhdGEtPlBoeU51bSwKIAkgICAgZXZlbnRfZGF0YS0+UG9ydFdpZHRoKSk7CiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMDsKIAl0ZXJtaW5hdGlvbl9jb3VudCA9IDA7CiAJcXVlcnlfY291bnQgPSAwOwogCW1waV9yZXBseSA9IGlvYy0+dG1fY21kcy5yZXBseTsKQEAgLTUxMjIsNyArNTE1Myw4IEBACiAJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwotCQlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJCXNkZXYgPSBzY21kLT5kZXZpY2U7CisJCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2Rldi0+aG9zdGRhdGE7CiAJCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0KQogCQkJY29udGludWU7CiAJCSAvKiBza2lwIGhpZGRlbiByYWlkIGNvbXBvbmVudHMgKi8KQEAgLTUxMzgsNiArNTE3MCw3IEBACiAJCWx1biA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW47CiAJCXF1ZXJ5X2NvdW50Kys7CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIDAsIDAsIGx1biwKIAkJICAgIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FVRVJZX1RBU0ssIHNtaWQsIDMwLCBOVUxMKTsKIAkJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwpAQCAtNTE0NywxNCArNTE4MCwyMCBAQAogCQkgICAgKG1waV9yZXBseS0+UmVzcG9uc2VDb2RlID09CiAJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX1NVQ0NFRURFRCB8fAogCQkgICAgIG1waV9yZXBseS0+UmVzcG9uc2VDb2RlID09Ci0JCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKQorCQkgICAgIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JT19RVUVVRURfT05fSU9DKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCQkJY29udGludWU7Ci0KLQkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwgMCwgbHVuLAotCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJSVF9UQVNLX1NFVCwgMCwgMzAsIE5VTEwpOworCQl9CisJCXIgPSBtcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwKKwkJICAgIHNkZXYtPmx1biwgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSywgc21pZCwgMzAsCisJCSAgICBzY21kKTsKKwkJaWYgKHIgPT0gRkFJTEVEKQorCQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LCAidGFzayBhYm9ydDogRkFJTEVEICIKKwkJCSAgICAic2NtZCglcClcbiIsIHNjbWQpOwogCQl0ZXJtaW5hdGlvbl9jb3VudCArPSBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJfQotCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJICAgICIlcyAtIGV4aXQsIHF1ZXJ5X2NvdW50ID0gJWQgdGVybWluYXRpb25fY291bnQgPSAlZFxuIiwKQEAgLTY2MjYsNiArNjY2NSw3IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHdxKTsKIAogCS8qIHJlbGVhc2UgYWxsIHRoZSB2b2x1bWVzICovCisJX3Njc2loX2lyX3NodXRkb3duKGlvYyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhaWRfZGV2aWNlLCBuZXh0LCAmaW9jLT5yYWlkX2RldmljZV9saXN0LAogCSAgICBsaXN0KSB7CiAJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjL2NoaXAuYyBiL2RyaXZlcnMvc2gvaW50Yy9jaGlwLmMKaW5kZXggZGU4ODVhMC4uZjMzZTJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjL2NoaXAuYworKysgYi9kcml2ZXJzL3NoL2ludGMvY2hpcC5jCkBAIC0xNzMsNyArMTczLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBWQUxJRCh4KSAoeCB8IDB4ODApCisjZGVmaW5lIFNFTlNFX1ZBTElEX0ZMQUcgMHg4MAorI2RlZmluZSBWQUxJRCh4KSAoeCB8IFNFTlNFX1ZBTElEX0ZMQUcpCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGludGNfaXJxX3NlbnNlX3RhYmxlW0lSUV9UWVBFX1NFTlNFX01BU0sgKyAxXSA9IHsKIAlbSVJRX1RZUEVfRURHRV9GQUxMSU5HXSA9IFZBTElEKDApLApAQCAtMjAxLDcgKzIwMiw4IEBACiAJaWhwID0gaW50Y19maW5kX2lycShkLT5zZW5zZSwgZC0+bnJfc2Vuc2UsIGlycSk7CiAJaWYgKGlocCkgewogCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGlocC0+aGFuZGxlKSwgMCk7Ci0JCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLCB2YWx1ZSk7CisJCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLAorCQkJCQkJICAgIHZhbHVlICYgflNFTlNFX1ZBTElEX0ZMQUcpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKaW5kZXggMGUyOThkYi4uMjliOGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCkBAIC0zNjAsOCArMzYwLDggQEAKICAgICAgICAgCXN0YXR1cyA9IDE7CiAgICAgICAgIAlnb3RvIGNvbXBsZXRlOwogICAgIAl9Ci0gICAgICAgIGxlbiA9IChmaXJtd2FyZS0+c2l6ZSA+IE1BWF9CREFERFJfRk9STUFUX0xFTkdUSCk/IE1BWF9CREFERFJfRk9STUFUX0xFTkdUSDogZmlybXdhcmUtPnNpemU7Ci0JbWVtY3B5KGNvbmZpZ19iZGFkZHIsIGZpcm13YXJlLT5kYXRhLGxlbik7CisJbGVuID0gbWluKGZpcm13YXJlLT5zaXplLCBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEggLSAxKTsKKwltZW1jcHkoY29uZmlnX2JkYWRkciwgZmlybXdhcmUtPmRhdGEsIGxlbik7CiAJY29uZmlnX2JkYWRkcltsZW5dID0gJ1wwJzsKIAl3cml0ZV9iZGFkZHIoaGRldixjb25maWdfYmRhZGRyLEJEQUREUl9UWVBFX1NUUklORyk7CiAgICAgICAgCUFfUkVMRUFTRV9GSVJNV0FSRShmaXJtd2FyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYwppbmRleCBiZGQ2MjlkLi5mMTIzNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsX21hYzgwMjExLmMKQEAgLTIwOSwxMSArMjA5LDggQEAKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBody0+cHJpdjsKIAlBU1NFUlQod2wpOwogCVdMX0xPQ0sod2wpOwotCXdsX2Rvd24od2wpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAJV0xfVU5MT0NLKHdsKTsKLQotCXJldHVybjsKIH0KIAogc3RhdGljIGludApAQCAtMjQ2LDcgKzI0MywxNCBAQAogc3RhdGljIHZvaWQKIHdsX29wc19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXJldHVybjsKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2w7CisKKwl3bCA9IEhXX1RPX1dMKGh3KTsKKworCS8qIHB1dCBkcml2ZXIgaW4gZG93biBzdGF0ZSAqLworCVdMX0xPQ0sod2wpOworCXdsX2Rvd24od2wpOworCVdMX1VOTE9DSyh3bCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTc3OSw3ICs3ODMsNyBAQAogCXdsX2ZvdW5kKys7CiAJcmV0dXJuIHdsOwogCi0gZmFpbDoKK2ZhaWw6CiAJd2xfZnJlZSh3bCk7CiBmYWlsMToKIAlyZXR1cm4gTlVMTDsKQEAgLTEwOTAsNyArMTA5NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBMSU5VWFNUQV9QUwogc3RhdGljIGludCB3bF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHdsX2luZm8gKndsOwpAQCAtMTEwNSwxMSArMTEwOCwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBvbmx5IG5lZWQgdG8gZmxhZyBodyBpcyBkb3duIGZvciBwcm9wZXIgcmVzdW1lICovCiAJV0xfTE9DSyh3bCk7Ci0Jd2xfZG93bih3bCk7CiAJd2wtPnB1Yi0+aHdfdXAgPSBmYWxzZTsKIAlXTF9VTkxPQ0sod2wpOwotCXBjaV9zYXZlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIH0KQEAgLTExMzMsNyArMTEzNyw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTE0NSwxMyArMTE0OSwxMiBAQAogCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKIAotCVdMX0xPQ0sod2wpOwotCWVyciA9IHdsX3VwKHdsKTsKLQlXTF9VTkxPQ0sod2wpOwotCisJLyoKKwkqICBkb25lLiBkcml2ZXIgd2lsbCBiZSBwdXQgaW4gdXAgc3RhdGUKKwkqICBpbiB3bF9vcHNfYWRkX2ludGVyZmFjZSgpIGNhbGwuCisJKi8KIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCiAKIHN0YXRpYyB2b2lkIHdsX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTExODQsMTQgKzExODcsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHdsX3BjaV9kcml2ZXIgPSB7Ci0gLm5hbWUgID0gImJyY204MDIxMSIsCi0gLnByb2JlID0gd2xfcGNpX3Byb2JlLAotI2lmZGVmIExJTlVYU1RBX1BTCi0gLnN1c3BlbmQgPSB3bF9zdXNwZW5kLAotIC5yZXN1bWUgID0gd2xfcmVzdW1lLAotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCi0gLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKLSAuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKKwkubmFtZSA9ICJicmNtODAyMTEiLAorCS5wcm9iZSA9IHdsX3BjaV9wcm9iZSwKKwkuc3VzcGVuZCA9IHdsX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdsX3Jlc3VtZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwppbmRleCAxZDVkMDFhLi5hMTMwMzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwpAQCAtNTEyNiw3ICs1MTI2LDYgQEAKIAlmaWZvID0gcHJpbzJmaWZvW3ByaW9dOwogCiAJQVNTRVJUKCh1aW50KSBza2JfaGVhZHJvb20oc2R1KSA+PSBUWE9GRik7Ci0JQVNTRVJUKCEoc2R1LT5jbG9uZWQpKTsKIAlBU1NFUlQoIShzZHUtPm5leHQpKTsKIAlBU1NFUlQoIShzZHUtPnByZXYpKTsKIAlBU1NFUlQoZmlmbyA8IE5GSUZPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKaW5kZXggNGQxODY4ZC4uMDcyOGMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKQEAgLTU3NSw3ICs1NzUsOCBAQAogCS8qIGdyYWIgb3VyIElSUSAqLwogCWlmIChpcnEpIHsKIAkJaXNyX2ZsYWdzID0gMDsKLQkJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY2lfYnVzdHlwZSkKKwkJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY2lfYnVzdHlwZQorCQkgICAgfHwgdGhpc2JvYXJkLT5idXN0eXBlID09IHBjbWNpYV9idXN0eXBlKQogCQkJaXNyX2ZsYWdzIHw9IElSUUZfU0hBUkVEOwogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBsYWJwY19pbnRlcnJ1cHQsIGlzcl9mbGFncywKIAkJCQlkcml2ZXJfbGFicGMuZHJpdmVyX25hbWUsIGRldikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IGIzZDA1ZmMuLjRmYjgwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzY4LDYgKzM2OCw3IEBACiAJCWJsa2Rldi0+Z2QtPmZpcnN0X21pbm9yID0gMDsKIAlibGtkZXYtPmdkLT5mb3BzID0gJmJsb2NrX29wczsKIAlibGtkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBibGtkZXY7CisJYmxrZGV2LT5nZC0+ZHJpdmVyZnNfZGV2ID0gJihibGtkZXYtPmRldmljZV9jdHgtPmRldmljZSk7CiAJc3ByaW50ZihibGtkZXYtPmdkLT5kaXNrX25hbWUsICJoZCVjIiwgJ2EnICsgZGV2bnVtKTsKIAogCWJsa3ZzY19kb19pbnF1aXJ5KGJsa2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKaW5kZXggZGY5Y2QxMy4uMGVkYmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAkvKiBBU1NFUlQoZGV2aWNlKTsgKi8KIAogCXBhY2tldCA9IGt6YWxsb2MoTkVUVlNDX1BBQ0tFVF9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLAotCQkJIEdGUF9LRVJORUwpOworCQkJIEdGUF9BVE9NSUMpOwogCWlmICghcGFja2V0KQogCQlyZXR1cm47CiAJYnVmZmVyID0gcGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKaW5kZXggMDE0N2I0MC4uNTQ3MDZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCkBAIC0zNTgsNyArMzU4LDYgQEAKIAogCS8qIFNldCBpbml0aWFsIHN0YXRlICovCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CiAKIAluZXRfZGV2aWNlX2N0eCA9IG5ldGRldl9wcml2KG5ldCk7CiAJbmV0X2RldmljZV9jdHgtPmRldmljZV9jdHggPSBkZXZpY2VfY3R4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKaW5kZXggZGViNjhjOC4uYjhiNTRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCkBAIC02OCw3ICs2OCw3IEBACiAJLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCiAJdW5zaWduZWQgaW50IHNjYWxlX3V2ID0gKHN0LT5pbnRfdnJlZl9tdiAqIDEwMDApID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKIH0KIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIGFkNzQ3Nl9zaG93X3NjYWxlLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKaW5kZXggNjg1OTA4OS4uNWQ4NWVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCkBAIC02OCw3ICs2OCw3IEBACiAJLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCiAJdW5zaWduZWQgaW50IHNjYWxlX3V2ID0gKHN0LT5pbnRfdnJlZl9tdiAqIDEwMDApID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKIH0KIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIGFkNzg4N19zaG93X3NjYWxlLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKaW5kZXggNjMwOWQ1Mi4uODljY2YzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogCiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3NjYWxlLCBTX0lSVUdPLCBhZDc5OXhfc2hvd19zY2FsZSwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jCmluZGV4IGUzMzg3Y2QuLjBmODdlY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCiAJdW5zaWduZWQgaW50IHNjYWxlX3V2ID0gKHN0LT52cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihvdXRfc2NhbGUsIFNfSVJVR08sIGFkNTQ0Nl9zaG93X3NjYWxlLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCmluZGV4IDNmZTVmNDEuLjBhYWQwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogLyogc2VuZCBib290IGRhdGEgdG8gdGhlIElSIFRYIGRldmljZSAqLwogc3RhdGljIGludCBzZW5kX2Jvb3RfZGF0YShzdHJ1Y3QgSVJfdHggKnR4KQogewotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKIAogCS8qIHNlbmQgdGhlIGJvb3QgYmxvY2sgKi8KQEAgLTUwMyw3ICs1MDMsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGtpY2sgaXQgb2ZmPyAqLworCS8qIEhpdCB0aGUgZ28gYnV0dG9uIHRvIGFjdGl2YXRlIHRoZSBuZXcgYm9vdCBkYXRhICovCiAJYnVmWzBdID0gMHgwMDsKIAlidWZbMV0gPSAweDIwOwogCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+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+VkJJbmZvICYgU2V0Q1JUMlRvTENEKSB8IFNldENSVDJUb0xDREEpKSB7IC8qMzAxYiovCisJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpIHsgLyozMDFiKi8KIAkJCWlmIChwVkJJbmZvLT5MQ0RSZXNJbmZvICE9IFBhbmVsMTAyNHg3NjgpCiAJCQkJVkNMS0luZGV4ID0gTENEWGxhdDJWQ0xLW0NSVDJJbmRleF07CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2hkbGMuYyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCmluZGV4IDQ3ZDMyMjguLjUyZmMwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25faGRsYy5jCisrKyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCkBAIC01ODEsOCArNTgxLDkgQEAKIAkJCSAgIF9fdTggX191c2VyICpidWYsIHNpemVfdCBucikKIHsKIAlzdHJ1Y3Qgbl9oZGxjICpuX2hkbGMgPSB0dHkybl9oZGxjKHR0eSk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgbl9oZGxjX2J1ZiAqcmJ1ZjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCWlmIChkZWJ1Z2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCQogCQlwcmludGsoIiVzKCVkKW5faGRsY190dHlfcmVhZCgpIGNhbGxlZFxuIixfX0ZJTEVfXyxfX0xJTkVfXyk7CkBAIC01OTgsNTcgKzU5OSw1NSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQl0dHlfbG9jaygpOworCWFkZF93YWl0X3F1ZXVlKCZ0dHktPnJlYWRfd2FpdCwgJndhaXQpOwogCiAJZm9yICg7OykgewogCQlpZiAodGVzdF9iaXQoVFRZX09USEVSX0NMT1NFRCwgJnR0eS0+ZmxhZ3MpKSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVJTzsKKwkJCXJldCA9IC1FSU87CisJCQlicmVhazsKIAkJfQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxlKSkKKwkJCWJyZWFrOwogCi0JCW5faGRsYyA9IHR0eTJuX2hkbGMgKHR0eSk7Ci0JCWlmICghbl9oZGxjIHx8IG5faGRsYy0+bWFnaWMgIT0gSERMQ19NQUdJQyB8fAotCQkJIHR0eSAhPSBuX2hkbGMtPnR0eSkgewotCQkJdHR5X3VubG9jaygpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlyYnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+cnhfYnVmX2xpc3QpOwotCQlpZiAocmJ1ZikKKwkJaWYgKHJidWYpIHsKKwkJCWlmIChyYnVmLT5jb3VudCA+IG5yKSB7CisJCQkJLyogdG9vIGxhcmdlIGZvciBjYWxsZXIncyBidWZmZXIgKi8KKwkJCQlyZXQgPSAtRU9WRVJGTE9XOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+YnVmLCByYnVmLT5jb3VudCkpCisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlyZXQgPSByYnVmLT5jb3VudDsKKwkJCX0KKworCQkJaWYgKG5faGRsYy0+cnhfZnJlZV9idWZfbGlzdC5jb3VudCA+CisJCQkgICAgREVGQVVMVF9SWF9CVUZfQ09VTlQpCisJCQkJa2ZyZWUocmJ1Zik7CisJCQllbHNlCisJCQkJbl9oZGxjX2J1Zl9wdXQoJm5faGRsYy0+cnhfZnJlZV9idWZfbGlzdCwgcmJ1Zik7CiAJCQlicmVhazsKKwkJfQogCQkJCiAJCS8qIG5vIGRhdGEgKi8KIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlicmVhazsKIAkJfQotCQkJCi0JCWludGVycnVwdGlibGVfc2xlZXBfb24gKCZ0dHktPnJlYWRfd2FpdCk7CisKKwkJc2NoZWR1bGUoKTsKKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUlOVFI7CisJCQlyZXQgPSAtRUlOVFI7CisJCQlicmVhazsKIAkJfQogCX0KLQkJCi0JaWYgKHJidWYtPmNvdW50ID4gbnIpCi0JCS8qIGZyYW1lIHRvbyBsYXJnZSBmb3IgY2FsbGVyJ3MgYnVmZmVyIChkaXNjYXJkIGZyYW1lKSAqLwotCQlyZXQgPSAtRU9WRVJGTE9XOwotCWVsc2UgewotCQkvKiBDb3B5IHRoZSBkYXRhIHRvIHRoZSBjYWxsZXIncyBidWZmZXIgKi8KLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmJ1ZiwgcmJ1Zi0+Y291bnQpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gcmJ1Zi0+Y291bnQ7Ci0JfQotCQotCS8qIHJldHVybiBIRExDIGJ1ZmZlciB0byBmcmVlIGxpc3QgdW5sZXNzIHRoZSBmcmVlIGxpc3QgKi8KLQkvKiBjb3VudCBoYXMgZXhjZWVkZWQgdGhlIGRlZmF1bHQgdmFsdWUsIGluIHdoaWNoIGNhc2UgdGhlICovCi0JLyogYnVmZmVyIGlzIGZyZWVkIGJhY2sgdG8gdGhlIE9TIHRvIGNvbnNlcnZlIG1lbW9yeSAqLwotCWlmIChuX2hkbGMtPnJ4X2ZyZWVfYnVmX2xpc3QuY291bnQgPiBERUZBVUxUX1JYX0JVRl9DT1VOVCkKLQkJa2ZyZWUocmJ1Zik7Ci0JZWxzZQkKLQkJbl9oZGxjX2J1Zl9wdXQoJm5faGRsYy0+cnhfZnJlZV9idWZfbGlzdCxyYnVmKTsKLQl0dHlfdW5sb2NrKCk7CisKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKIAlyZXR1cm4gcmV0OwogCQogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWFkKCkgKi8KQEAgLTY5MSwxNCArNjkwLDE1IEBACiAJCWNvdW50ID0gbWF4ZnJhbWU7CiAJfQogCQotCXR0eV9sb2NrKCk7Ci0KIAlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkKLQkvKiBBbGxvY2F0ZSB0cmFuc21pdCBidWZmZXIgKi8KLQkvKiBzbGVlcCB1bnRpbCB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmxlICovCQkKLQl3aGlsZSAoISh0YnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+dHhfZnJlZV9idWZfbGlzdCkpKSB7CisJCXRidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KTsKKwkJaWYgKHRidWYpCisJCQlicmVhazsKKwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCWVycm9yID0gLUVBR0FJTjsKIAkJCWJyZWFrOwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCX0KIAl9CiAKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAKIAlpZiAoIWVycm9yKSB7CQkKQEAgLTczMSw3ICs3MzEsNyBAQAogCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT50eF9idWZfbGlzdCx0YnVmKTsKIAkJbl9oZGxjX3NlbmRfZnJhbWVzKG5faGRsYyx0dHkpOwogCX0KLQl0dHlfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyb3I7CiAJCiB9CS8qIGVuZCBvZiBuX2hkbGNfdHR5X3dyaXRlKCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCmluZGV4IGIyNWU2ZTQuLjM5NzVkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwpAQCAtMjM2LDcgKzIzNiw4IEBACiAJCS5maWZvX3NpemUJPSAxMjgsCiAJCS50eF9sb2Fkc3oJPSAxMjgsCiAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9SX1RSSUdfMTAsCi0JCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPIHwgVUFSVF9DQVBfRUZSIHwgVUFSVF9DQVBfU0xFRVAsCisJCS8qIFVBUlRfQ0FQX0VGUiBicmVha3MgYmlsbGlvbm9uIENGIGJsdWV0b290aCBjYXJkLiAqLworCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX1NMRUVQLAogCX0sCiAJW1BPUlRfMTY2NTRdID0gewogCQkubmFtZQkJPSAiU1QxNjY1NCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IGIxNjgyZDcuLjJiODMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC0xNTE4LDYgKzE1MTgsNyBAQAogY29uZmlnIFNFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQKIAl0cmlzdGF0ZSAiR1JMSUIgQVBCVUFSVCBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IFNFUklBTF9DT1JFCiAJLS0taGVscC0tLQogCUFkZCBzdXBwb3J0IGZvciB0aGUgR1JMSUIgQVBCVUFSVCBzZXJpYWwgcG9ydC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jCmluZGV4IGEyZjJiMzIuLjYwMmQ5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKQEAgLTgyOSw3ICs4MjksNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfU0IxMjUwX0RVQVJUX0NPTlNPTEUKIC8qCiAgKiBTZXJpYWwgY29uc29sZSBzdHVmZi4gIFZlcnkgYmFzaWMsIHBvbGxpbmcgZHJpdmVyIGZvciBkb2luZyBzZXJpYWwKLSAqIGNvbnNvbGUgb3V0cHV0LiAgVGhlIGNvbnNvbGVfc2VtIGlzIGhlbGQgYnkgdGhlIGNhbGxlciwgc28gd2UKKyAqIGNvbnNvbGUgb3V0cHV0LiAgVGhlIGNvbnNvbGVfbG9jayBpcyBoZWxkIGJ5IHRoZSBjYWxsZXIsIHNvIHdlCiAgKiBzaG91bGRuJ3QgYmUgaW50ZXJydXB0ZWQgZm9yIG1vcmUgY29uc29sZSBhY3Rpdml0eS4KICAqLwogc3RhdGljIHZvaWQgc2JkX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgaW50IGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc3lzcnEuYyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKaW5kZXggYzU1NmVkOS4uOGUwZGQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3lzcnEuYworKysgYi9kcml2ZXJzL3R0eS9zeXNycS5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+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+ZDsKIAlpZiAodmMpIHsKIAkJdHR5ID0gdmMtPnBvcnQudHR5OwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAKIAkJCV9fZG9fU0FLKHR0eSk7CiAJCXJlc2V0X3ZjKHZjKTsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xNzM3LDEwICsxNzM3LDEwIEBACiB7CiAJaW50IHByZXY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJLyogR3JhcGhpY3MgbW9kZSAtIHVwIHRvIFggKi8KIAlpZiAoZGlzYWJsZV92dF9zd2l0Y2gpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAJcHJldiA9IGZnX2NvbnNvbGU7CkBAIC0xNzQ4LDcgKzE3NDgsNyBAQAogCWlmIChhbGxvYyAmJiB2Y19hbGxvY2F0ZSh2dCkpIHsKIAkJLyogd2UgY2FuJ3QgaGF2ZSBhIGZyZWUgVkMgZm9yIG5vdy4gVG9vIGJhZCwKIAkJICogd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHRoZSBzY3JlZW4gZm9yIG5vdy4gKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKQEAgLTE3NTgsMTAgKzE3NTgsMTAgQEAKIAkJICogTGV0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGtub3cgc28gaXQgY2FuIGRlY2lkZQogCQkgKiB3aGF0IHRvIGRvLgogCQkgKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJdHR5X2xvY2soKTsKIAlpZiAodnRfd2FpdGFjdGl2ZSh2dCArIDEpKSB7CiAJCXByX2RlYnVnKCJTdXNwZW5kOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOwpAQCAtMTc4MSw4ICsxNzgxLDggQEAKICAqLwogdm9pZCBwbV9zZXRfdnRfc3dpdGNoKGludCBkb19zd2l0Y2gpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWRpc2FibGVfdnRfc3dpdGNoID0gIWRvX3N3aXRjaDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0wocG1fc2V0X3Z0X3N3aXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKaW5kZXggNmVlNDQ1MS4uNDcwODVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJCWdvdG8gb3V0bnA7CiAJfQogCi0JaWYgKCFmaWxlLT5mX2ZsYWdzICYmIE9fTk9OQkxPQ0spCisJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQogCQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRlc2MtPndhaXQsICF0ZXN0X2JpdChXRE1fSU5fVVNFLAogCQkJCQkJCQkmZGVzYy0+ZmxhZ3MpKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggOWRhMjUwNS4uZGY1MDJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTkyLDEyICsxOTIsMTIgQEAKIAllcF9kZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAJZXBfZGV2LT5kZXYucmVsZWFzZSA9IGVwX2RldmljZV9yZWxlYXNlOwogCWRldl9zZXRfbmFtZSgmZXBfZGV2LT5kZXYsICJlcF8lMDJ4IiwgZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7Ci0JZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZlcF9kZXYtPmRldik7CiAKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJmVwX2Rldi0+ZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZlcF9kZXYtPmRldik7CiAJZW5kcG9pbnQtPmVwX2RldiA9IGVwX2RldjsKIAlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IGI1NWQ0NjAuLmY3MWU4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC00MDUsNyArNDA1LDEyIEBACiAJCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXN5bmNocm9uaXplX2lycShwY2lfZGV2LT5pcnEpOworCS8qIElmIE1TSS1YIGlzIGVuYWJsZWQsIHRoZSBkcml2ZXIgd2lsbCBoYXZlIHN5bmNocm9uaXplZCBhbGwgdmVjdG9ycworCSAqIGluIHBjaV9zdXNwZW5kKCkuIElmIE1TSSBvciBsZWdhY3kgUENJIGlzIGVuYWJsZWQsIHRoYXQgd2lsbCBiZQorCSAqIHN5bmNocm9uaXplZCBoZXJlLgorCSAqLworCWlmICghaGNkLT5tc2l4X2VuYWJsZWQpCisJCXN5bmNocm9uaXplX2lycShwY2lfZGV2LT5pcnEpOwogCiAJLyogRG93bnN0cmVhbSBwb3J0cyBmcm9tIHRoaXMgcm9vdCBodWIgc2hvdWxkIGFscmVhZHkgYmUgcXVpZXNjZWQsIHNvCiAJICogdGhlcmUgd2lsbCBiZSBubyBETUEgYWN0aXZpdHkuICBOb3cgd2UgY2FuIHNodXQgZG93biB0aGUgdXBzdHJlYW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGI5OGVmYWUuLjQzMTBjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNjc2LDYgKzY3Niw4IEBACiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmV0OwogCWludCBwb3J0MTsKIAlpbnQgc3RhdHVzOwogCWJvb2wgbmVlZF9kZWJvdW5jZV9kZWxheSA9IGZhbHNlOwpAQCAtNzE0LDYgKzcxNiwyNSBAQAogCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSgKIAkJCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKIAkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIGlmICh0eXBlID09IEhVQl9SRVNFVF9SRVNVTUUpIHsKKwkJCS8qIFRoZSBpbnRlcm5hbCBob3N0IGNvbnRyb2xsZXIgc3RhdGUgZm9yIHRoZSBodWIgZGV2aWNlCisJCQkgKiBtYXkgYmUgZ29uZSBhZnRlciBhIGhvc3QgcG93ZXIgbG9zcyBvbiBzeXN0ZW0gcmVzdW1lLgorCQkJICogVXBkYXRlIHRoZSBkZXZpY2UncyBpbmZvIHNvIHRoZSBIVyBrbm93cyBpdCdzIGEgaHViLgorCQkJICovCisJCQloY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJCQlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKSB7CisJCQkJcmV0ID0gaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKGhjZCwgaGRldiwKKwkJCQkJCSZodWItPnR0LCBHRlBfTk9JTyk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZGV2X2VycihodWItPmludGZkZXYsICJIb3N0IG5vdCAiCisJCQkJCQkJImFjY2VwdGluZyBodWIgaW5mbyAiCisJCQkJCQkJInVwZGF0ZS5cbiIpOworCQkJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgIkxTL0ZTIGRldmljZXMgIgorCQkJCQkJCSJhbmQgaHVicyBtYXkgbm90IHdvcmsgIgorCQkJCQkJCSJ1bmRlciB0aGlzIGh1YlxuLiIpOworCQkJCX0KKwkJCX0KKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQl9IGVsc2UgewogCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggMWRjOTczOS4uMDZiYjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTUwOSw3ICs1MDksNyBAQAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIGNvbmZpZyBVU0JfR0FER0VUX0VHMjBUCi0JYm9vbGVhbiAiSW50ZWwgRUcyMFQoVG9wY2xpZmYpIFVTQiBEZXZpY2UgY29udHJvbGxlciIKKwlib29sZWFuICJJbnRlbCBFRzIwVCBQQ0gvT0tJIFNFTUlDT05EVUNUT1IgTUw3MjEzIElPSCBVREMiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKIAloZWxwCkBAIC01MjUsNiArNTI1LDExIEBACiAJICBUaGlzIGRyaXZlciBkb3NlIG5vdCBzdXBwb3J0IGludGVycnVwdCB0cmFuc2ZlciBvciBpc29jaHJvbm91cwogCSAgdHJhbnNmZXIgbW9kZXMuCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIE9LSSBTRU1JQ09ORFVDVE9SJ3MgTUw3MjEzIHdoaWNoIGlzCisJICBmb3IgSVZJKEluLVZlaGljbGUgSW5mb3RhaW5tZW50KSB1c2UuCisJICBNTDcyMTMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCisJICBNTDcyMTMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisKIGNvbmZpZyBVU0JfRUcyMFQKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gVVNCX0dBREdFVF9FRzIwVApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwppbmRleCAzMTY1NmEyLi5hMWM2N2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwpAQCAtNzYsMTAgKzc2LDIxIEBACiAKIC8qIGNvbnRyb2wgZW5kcG9pbnQgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKLWN0cmxfZW5kcHRfZGVzYyA9IHsKK2N0cmxfZW5kcHRfb3V0X2Rlc2MgPSB7CiAJLmJMZW5ndGggICAgICAgICA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCiAKKwkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgICAgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAorCS53TWF4UGFja2V0U2l6ZSAgPSBjcHVfdG9fbGUxNihDVFJMX1BBWUxPQURfTUFYKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2N0cmxfZW5kcHRfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCAgICAgICAgID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzICAgID0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKIAkud01heFBhY2tldFNpemUgID0gY3B1X3RvX2xlMTYoQ1RSTF9QQVlMT0FEX01BWCksCiB9OwpAQCAtMjY1LDEwICsyNzYsMTAgQEAKIAlod19iYW5rLnNpemUgLz0gc2l6ZW9mKHUzMik7CiAKIAlyZWcgPSBod19hcmVhZChBQlNfRENDUEFSQU1TLCBEQ0NQQVJBTVNfREVOKSA+PiBmZnNfbnIoRENDUEFSQU1TX0RFTik7Ci0JaWYgKHJlZyA9PSAwIHx8IHJlZyA+IEVORFBUX01BWCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaHdfZXBfbWF4ID0gcmVnICogMjsgICAvKiBjYWNoZSBodyBFTkRQVF9NQVggKi8KIAotCWh3X2VwX21heCA9IHJlZzsgICAvKiBjYWNoZSBodyBFTkRQVF9NQVggKi8KKwlpZiAoaHdfZXBfbWF4ID09IDAgfHwgaHdfZXBfbWF4ID4gRU5EUFRfTUFYKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIHNldHVwIGxvY2sgbW9kZSA/ICovCiAKQEAgLTExOTcsMTYgKzEyMDgsMTcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4OyBpKyspIHsKLQkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbaV07CisJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heC8yOyBpKyspIHsKKwkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcFJ4ID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKKwkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcFR4ID0gJnVkYy0+Y2kxM3h4eF9lcFtpICsgaHdfZXBfbWF4LzJdOwogCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAogCQkJICAgICAgICJFUD0lMDJpOiBSWD0lMDhYIFRYPSUwOFhcbiIsCi0JCQkgICAgICAgaSwgKHUzMiltRXAtPnFoW1JYXS5kbWEsICh1MzIpbUVwLT5xaFtUWF0uZG1hKTsKKwkJCSAgICAgICBpLCAodTMyKW1FcFJ4LT5xaC5kbWEsICh1MzIpbUVwVHgtPnFoLmRtYSk7CiAJCWZvciAoaiA9IDA7IGogPCAoc2l6ZW9mKHN0cnVjdCBjaTEzeHh4X3FoKS9zaXplb2YodTMyKSk7IGorKykgewogCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKIAkJCQkgICAgICAgIiAlMDRYOiAgICAlMDhYICAgICUwOFhcbiIsIGosCi0JCQkJICAgICAgICooKHUzMiAqKW1FcC0+cWhbUlhdLnB0ciArIGopLAotCQkJCSAgICAgICAqKCh1MzIgKiltRXAtPnFoW1RYXS5wdHIgKyBqKSk7CisJCQkJICAgICAgICooKHUzMiAqKW1FcFJ4LT5xaC5wdHIgKyBqKSwKKwkJCQkgICAgICAgKigodTMyICopbUVwVHgtPnFoLnB0ciArIGopKTsKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTI5Myw3ICsxMzA1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgICAqcHRyID0gTlVMTDsKIAlzdHJ1Y3QgY2kxM3h4eF9yZXEgKnJlcSA9IE5VTEw7Ci0JdW5zaWduZWQgaSwgaiwgaywgbiA9IDAsIHFTaXplID0gc2l6ZW9mKHN0cnVjdCBjaTEzeHh4X3RkKS9zaXplb2YodTMyKTsKKwl1bnNpZ25lZCBpLCBqLCBuID0gMCwgcVNpemUgPSBzaXplb2Yoc3RydWN0IGNpMTN4eHhfdGQpL3NpemVvZih1MzIpOwogCiAJZGJnX3RyYWNlKCJbJXNdICVwXG4iLCBfX2Z1bmNfXywgYnVmKTsKIAlpZiAoYXR0ciA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMKSB7CkBAIC0xMzAzLDIyICsxMzE1LDIwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4OyBpKyspCi0JCWZvciAoayA9IFJYOyBrIDw9IFRYOyBrKyspCi0JCQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnVkYy0+Y2kxM3h4eF9lcFtpXS5xaFtrXS5xdWV1ZSkKLQkJCXsKLQkJCQlyZXEgPSBsaXN0X2VudHJ5KHB0ciwKLQkJCQkJCSBzdHJ1Y3QgY2kxM3h4eF9yZXEsIHF1ZXVlKTsKKwkJbGlzdF9mb3JfZWFjaChwdHIsICZ1ZGMtPmNpMTN4eHhfZXBbaV0ucWgucXVldWUpCisJCXsKKwkJCXJlcSA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgY2kxM3h4eF9yZXEsIHF1ZXVlKTsKIAorCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKKwkJCQkJIkVQPSUwMmk6IFREPSUwOFggJXNcbiIsCisJCQkJCWkgJSBod19lcF9tYXgvMiwgKHUzMilyZXEtPmRtYSwKKwkJCQkJKChpIDwgaHdfZXBfbWF4LzIpID8gIlJYIiA6ICJUWCIpKTsKKworCQkJZm9yIChqID0gMDsgaiA8IHFTaXplOyBqKyspCiAJCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKLQkJCQkJICAgICAgICJFUD0lMDJpOiBURD0lMDhYICVzXG4iLAotCQkJCQkgICAgICAgaSwgKHUzMilyZXEtPmRtYSwKLQkJCQkJICAgICAgICgoayA9PSBSWCkgPyAiUlgiIDogIlRYIikpOwotCi0JCQkJZm9yIChqID0gMDsgaiA8IHFTaXplOyBqKyspCi0JCQkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCi0JCQkJCQkgICAgICAgIiAlMDRYOiAgICAlMDhYXG4iLCBqLAotCQkJCQkJICAgICAgICooKHUzMiAqKXJlcS0+cHRyICsgaikpOwotCQkJfQorCQkJCQkJIiAlMDRYOiAgICAlMDhYXG4iLCBqLAorCQkJCQkJKigodTMyICopcmVxLT5wdHIgKyBqKSk7CisJCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIG47CkBAIC0xNDY3LDEyICsxNDc3LDEyIEBACiAJICogIEF0IHRoaXMgcG9pbnQgaXQncyBndWFyYW50ZWVkIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gcWhlYWQKIAkgKiAgKGVuZHB0IGlzIG5vdCBwcmltZWQpIHNvIGl0J3Mgbm8gbmVlZCB0byB1c2UgdHJpcHdpcmUKIAkgKi8KLQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPnRkLm5leHQgICA9IG1SZXEtPmRtYTsgICAgLyogVEVSTUlOQVRFID0gMCAqLwotCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQudG9rZW4gJj0gflREX1NUQVRVUzsgICAvKiBjbGVhciBzdGF0dXMgKi8KKwltRXAtPnFoLnB0ci0+dGQubmV4dCAgID0gbVJlcS0+ZG1hOyAgICAvKiBURVJNSU5BVEUgPSAwICovCisJbUVwLT5xaC5wdHItPnRkLnRva2VuICY9IH5URF9TVEFUVVM7ICAgLyogY2xlYXIgc3RhdHVzICovCiAJaWYgKG1SZXEtPnJlcS56ZXJvID09IDApCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwIHw9ICBRSF9aTFQ7CisJCW1FcC0+cWgucHRyLT5jYXAgfD0gIFFIX1pMVDsKIAllbHNlCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwICY9IH5RSF9aTFQ7CisJCW1FcC0+cWgucHRyLT5jYXAgJj0gflFIX1pMVDsKIAogCXdtYigpOyAgIC8qIHN5bmNocm9uaXplIGJlZm9yZSBlcCBwcmltZSAqLwogCkBAIC0xNTQyLDExICsxNTUyLDExIEBACiAKIAlod19lcF9mbHVzaChtRXAtPm51bSwgbUVwLT5kaXIpOwogCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAKIAkJLyogcG9wIG9sZGVzdCByZXF1ZXN0ICovCiAJCXN0cnVjdCBjaTEzeHh4X3JlcSAqbVJlcSA9IFwKLQkJCWxpc3RfZW50cnkobUVwLT5xaFttRXAtPmRpcl0ucXVldWUubmV4dCwKKwkJCWxpc3RfZW50cnkobUVwLT5xaC5xdWV1ZS5uZXh0LAogCQkJCSAgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCQlsaXN0X2RlbF9pbml0KCZtUmVxLT5xdWV1ZSk7CiAJCW1SZXEtPnJlcS5zdGF0dXMgPSAtRVNIVVRET1dOOwpAQCAtMTU3MSw4ICsxNTgxLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2VwICplcDsKIAlzdHJ1Y3QgY2kxM3h4eCAgICAqdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IGNpMTN4eHgsIGdhZGdldCk7Ci0Jc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9IGNvbnRhaW5lcl9vZihnYWRnZXQtPmVwMCwKLQkJCQkJICAgICAgc3RydWN0IGNpMTN4eHhfZXAsIGVwKTsKIAogCXRyYWNlKCIlcCIsIGdhZGdldCk7CiAKQEAgLTE1ODMsNyArMTU5MSw4IEBACiAJZ2FkZ2V0X2Zvcl9lYWNoX2VwKGVwLCBnYWRnZXQpIHsKIAkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOwogCX0KLQl1c2JfZXBfZmlmb19mbHVzaChnYWRnZXQtPmVwMCk7CisJdXNiX2VwX2ZpZm9fZmx1c2goJnVkYy0+ZXAwb3V0LmVwKTsKKwl1c2JfZXBfZmlmb19mbHVzaCgmdWRjLT5lcDBpbi5lcCk7CiAKIAl1ZGMtPmRyaXZlci0+ZGlzY29ubmVjdChnYWRnZXQpOwogCkBAIC0xNTkxLDExICsxNjAwLDEyIEBACiAJZ2FkZ2V0X2Zvcl9lYWNoX2VwKGVwLCBnYWRnZXQpIHsKIAkJdXNiX2VwX2Rpc2FibGUoZXApOwogCX0KLQl1c2JfZXBfZGlzYWJsZShnYWRnZXQtPmVwMCk7CisJdXNiX2VwX2Rpc2FibGUoJnVkYy0+ZXAwb3V0LmVwKTsKKwl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBpbi5lcCk7CiAKLQlpZiAobUVwLT5zdGF0dXMgIT0gTlVMTCkgewotCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0+ZXAwLCBtRXAtPnN0YXR1cyk7Ci0JCW1FcC0+c3RhdHVzID0gTlVMTDsKKwlpZiAodWRjLT5zdGF0dXMgIT0gTlVMTCkgeworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KCZ1ZGMtPmVwMGluLmVwLCB1ZGMtPnN0YXR1cyk7CisJCXVkYy0+c3RhdHVzID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE2MTQsNyArMTYyNCw2IEBACiBfX3JlbGVhc2VzKHVkYy0+bG9jaykKIF9fYWNxdWlyZXModWRjLT5sb2NrKQogewotCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwWzBdOwogCWludCByZXR2YWw7CiAKIAl0cmFjZSgiJXAiLCB1ZGMpOwpAQCAtMTYzNSwxMSArMTY0NCwxNSBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZG9uZTsKIAotCXJldHZhbCA9IHVzYl9lcF9lbmFibGUoJm1FcC0+ZXAsICZjdHJsX2VuZHB0X2Rlc2MpOworCXJldHZhbCA9IHVzYl9lcF9lbmFibGUoJnVkYy0+ZXAwb3V0LmVwLCAmY3RybF9lbmRwdF9vdXRfZGVzYyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmdWRjLT5lcDBpbi5lcCwgJmN0cmxfZW5kcHRfaW5fZGVzYyk7CiAJaWYgKCFyZXR2YWwpIHsKLQkJbUVwLT5zdGF0dXMgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCgmbUVwLT5lcCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChtRXAtPnN0YXR1cyA9PSBOVUxMKSB7Ci0JCQl1c2JfZXBfZGlzYWJsZSgmbUVwLT5lcCk7CisJCXVkYy0+c3RhdHVzID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoJnVkYy0+ZXAwaW4uZXAsIEdGUF9BVE9NSUMpOworCQlpZiAodWRjLT5zdGF0dXMgPT0gTlVMTCkgeworCQkJdXNiX2VwX2Rpc2FibGUoJnVkYy0+ZXAwb3V0LmVwKTsKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCX0KIAl9CkBAIC0xNjcyLDE2ICsxNjg1LDE3IEBACiAKIC8qKgogICogaXNyX2dldF9zdGF0dXNfcmVzcG9uc2U6IGdldF9zdGF0dXMgcmVxdWVzdCByZXNwb25zZQotICogQGVwOiAgICBlbmRwb2ludAorICogQHVkYzogdWRjIHN0cnVjdAogICogQHNldHVwOiBzZXR1cCByZXF1ZXN0IHBhY2tldAogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaXNyX2dldF9zdGF0dXNfcmVzcG9uc2Uoc3RydWN0IGNpMTN4eHhfZXAgKm1FcCwKK3N0YXRpYyBpbnQgaXNyX2dldF9zdGF0dXNfcmVzcG9uc2Uoc3RydWN0IGNpMTN4eHggKnVkYywKIAkJCQkgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpzZXR1cCkKIF9fcmVsZWFzZXMobUVwLT5sb2NrKQogX19hY3F1aXJlcyhtRXAtPmxvY2spCiB7CisJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmVwMGluOwogCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gTlVMTDsKIAlnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDOwogCWludCBkaXIsIG51bSwgcmV0dmFsOwpAQCAtMTczNiwyNyArMTc1MCwyMyBAQAogCiAvKioKICAqIGlzcl9zZXR1cF9zdGF0dXNfcGhhc2U6IHF1ZXVlcyB0aGUgc3RhdHVzIHBoYXNlIG9mIGEgc2V0dXAgdHJhbnNhdGlvbgotICogQG1FcDogZW5kcG9pbnQKKyAqIEB1ZGM6IHVkYyBzdHJ1Y3QKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2Uoc3RydWN0IGNpMTN4eHhfZXAgKm1FcCkKK3N0YXRpYyBpbnQgaXNyX3NldHVwX3N0YXR1c19waGFzZShzdHJ1Y3QgY2kxM3h4eCAqdWRjKQogX19yZWxlYXNlcyhtRXAtPmxvY2spCiBfX2FjcXVpcmVzKG1FcC0+bG9jaykKIHsKIAlpbnQgcmV0dmFsOworCXN0cnVjdCBjaTEzeHh4X2VwICptRXA7CiAKLQl0cmFjZSgiJXAiLCBtRXApOworCXRyYWNlKCIlcCIsIHVkYyk7CiAKLQkvKiBtRXAgaXMgYWx3YXlzIHZhbGlkICYgY29uZmlndXJlZCAqLwotCi0JaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQotCQltRXAtPmRpciA9IChtRXAtPmRpciA9PSBUWCkgPyBSWCA6IFRYOwotCi0JbUVwLT5zdGF0dXMtPm5vX2ludGVycnVwdCA9IDE7CisJbUVwID0gKHVkYy0+ZXAwX2RpciA9PSBUWCkgPyAmdWRjLT5lcDBvdXQgOiAmdWRjLT5lcDBpbjsKIAogCXNwaW5fdW5sb2NrKG1FcC0+bG9jayk7Ci0JcmV0dmFsID0gdXNiX2VwX3F1ZXVlKCZtRXAtPmVwLCBtRXAtPnN0YXR1cywgR0ZQX0FUT01JQyk7CisJcmV0dmFsID0gdXNiX2VwX3F1ZXVlKCZtRXAtPmVwLCB1ZGMtPnN0YXR1cywgR0ZQX0FUT01JQyk7CiAJc3Bpbl9sb2NrKG1FcC0+bG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTc3OCwxMSArMTc4OCwxMSBAQAogCiAJdHJhY2UoIiVwIiwgbUVwKTsKIAotCWlmIChsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKGxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHBvcCBvbGRlc3QgcmVxdWVzdCAqLwotCW1SZXEgPSBsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCisJbVJlcSA9IGxpc3RfZW50cnkobUVwLT5xaC5xdWV1ZS5uZXh0LAogCQkJICBzdHJ1Y3QgY2kxM3h4eF9yZXEsIHF1ZXVlKTsKIAlsaXN0X2RlbF9pbml0KCZtUmVxLT5xdWV1ZSk7CiAKQEAgLTE3OTQsMTAgKzE4MDQsMTAgQEAKIAogCWRiZ19kb25lKF91c2JfYWRkcihtRXApLCBtUmVxLT5wdHItPnRva2VuLCByZXR2YWwpOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCXN0cnVjdCBjaTEzeHh4X3JlcSogbVJlcUVucTsKIAotCQltUmVxRW5xID0gbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCQltUmVxRW5xID0gbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkJICBzdHJ1Y3QgY2kxM3h4eF9yZXEsIHF1ZXVlKTsKIAkJX2hhcmR3YXJlX2VucXVldWUobUVwLCBtUmVxRW5xKTsKIAl9CkBAIC0xODM2LDE2ICsxODQ2LDE0IEBACiAJCWludCB0eXBlLCBudW0sIGVyciA9IC1FSU5WQUw7CiAJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOwogCi0KIAkJaWYgKG1FcC0+ZGVzYyA9PSBOVUxMKQogCQkJY29udGludWU7ICAgLyogbm90IGNvbmZpZ3VyZWQgKi8KIAotCQlpZiAoKG1FcC0+ZGlyID09IFJYICYmIGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlKGkpKSB8fAotCQkgICAgKG1FcC0+ZGlyID09IFRYICYmIGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlKGkgKyAxNikpKSB7CisJCWlmIChod190ZXN0X2FuZF9jbGVhcl9jb21wbGV0ZShpKSkgewogCQkJZXJyID0gaXNyX3RyX2NvbXBsZXRlX2xvdyhtRXApOwogCQkJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CiAJCQkJaWYgKGVyciA+IDApICAgLyogbmVlZHMgc3RhdHVzIHBoYXNlICovCi0JCQkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UobUVwKTsKKwkJCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJCWlmIChlcnIgPCAwKSB7CiAJCQkJCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwKIAkJCQkJCSAgIkVSUk9SIiwgZXJyKTsKQEAgLTE4NjYsMTUgKzE4NzQsMjIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogRmx1c2ggZGF0YSBhbmQgaGFuZHNoYWtlIHRyYW5zYWN0aW9ucyBvZiBwcmV2aW91cworCQkgKiBzZXR1cCBwYWNrZXQuCisJCSAqLworCQlfZXBfbnVrZSgmdWRjLT5lcDBvdXQpOworCQlfZXBfbnVrZSgmdWRjLT5lcDBpbik7CisKIAkJLyogcmVhZF9zZXR1cF9wYWNrZXQgKi8KIAkJZG8gewogCQkJaHdfdGVzdF9hbmRfc2V0X3NldHVwX2d1YXJkKCk7Ci0JCQltZW1jcHkoJnJlcSwgJm1FcC0+cWhbUlhdLnB0ci0+c2V0dXAsIHNpemVvZihyZXEpKTsKKwkJCW1lbWNweSgmcmVxLCAmbUVwLT5xaC5wdHItPnNldHVwLCBzaXplb2YocmVxKSk7CiAJCX0gd2hpbGUgKCFod190ZXN0X2FuZF9jbGVhcl9zZXR1cF9ndWFyZCgpKTsKIAogCQl0eXBlID0gcmVxLmJSZXF1ZXN0VHlwZTsKIAotCQltRXAtPmRpciA9ICh0eXBlICYgVVNCX0RJUl9JTikgPyBUWCA6IFJYOworCQl1ZGMtPmVwMF9kaXIgPSAodHlwZSAmIFVTQl9ESVJfSU4pID8gVFggOiBSWDsKIAogCQlkYmdfc2V0dXAoX3VzYl9hZGRyKG1FcCksICZyZXEpOwogCkBAIC0xODk1LDcgKzE5MTAsNyBAQAogCQkJCWlmIChlcnIpCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOgogCQkJaWYgKHR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1JFQ0lQX0RFVklDRSkgICAmJgpAQCAtMTkwNSw3ICsxOTIwLDcgQEAKIAkJCWlmIChsZTE2X3RvX2NwdShyZXEud0xlbmd0aCkgIT0gMiB8fAogCQkJICAgIGxlMTZfdG9fY3B1KHJlcS53VmFsdWUpICAhPSAwKQogCQkJCWJyZWFrOwotCQkJZXJyID0gaXNyX2dldF9zdGF0dXNfcmVzcG9uc2UobUVwLCAmcmVxKTsKKwkJCWVyciA9IGlzcl9nZXRfc3RhdHVzX3Jlc3BvbnNlKHVkYywgJnJlcSk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgogCQkJaWYgKHR5cGUgIT0gKFVTQl9ESVJfT1VUfFVTQl9SRUNJUF9ERVZJQ0UpKQpAQCAtMTkxNiw3ICsxOTMxLDcgQEAKIAkJCWVyciA9IGh3X3VzYl9zZXRfYWRkcmVzcygodTgpbGUxNl90b19jcHUocmVxLndWYWx1ZSkpOwogCQkJaWYgKGVycikKIAkJCQlicmVhazsKLQkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UobUVwKTsKKwkJCWVyciA9IGlzcl9zZXR1cF9zdGF0dXNfcGhhc2UodWRjKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0VORFBPSU5UKSAmJgpAQCAtMTkzMiwxMiArMTk0NywxMiBAQAogCQkJc3Bpbl9sb2NrKHVkYy0+bG9jayk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwotCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiBkZWxlZ2F0ZToKIAkJCWlmIChyZXEud0xlbmd0aCA9PSAwKSAgIC8qIG5vIGRhdGEgcGhhc2UgKi8KLQkJCQltRXAtPmRpciA9IFRYOworCQkJCXVkYy0+ZXAwX2RpciA9IFRYOwogCiAJCQlzcGluX3VubG9jayh1ZGMtPmxvY2spOwogCQkJZXJyID0gdWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwgJnJlcSk7CkBAIC0xOTY4LDcgKzE5ODMsNyBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKIHsKIAlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gY29udGFpbmVyX29mKGVwLCBzdHJ1Y3QgY2kxM3h4eF9lcCwgZXApOwotCWludCBkaXJlY3Rpb24sIHJldHZhbCA9IDA7CisJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXRyYWNlKCIlcCwgJXAiLCBlcCwgZGVzYyk7CkBAIC0xOTgyLDcgKzE5OTcsNyBAQAogCiAJbUVwLT5kZXNjID0gZGVzYzsKIAotCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKQorCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXdhcm4oImVuYWJsaW5nIGEgbm9uLWVtcHR5IGVuZHBvaW50ISIpOwogCiAJbUVwLT5kaXIgID0gdXNiX2VuZHBvaW50X2Rpcl9pbihkZXNjKSA/IFRYIDogUlg7CkBAIC0xOTkxLDI5ICsyMDA2LDIyIEBACiAKIAltRXAtPmVwLm1heHBhY2tldCA9IF9fY29uc3RhbnRfbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOwogCi0JZGlyZWN0aW9uID0gbUVwLT5kaXI7Ci0JZG8gewotCQlkYmdfZXZlbnQoX3VzYl9hZGRyKG1FcCksICJFTkFCTEUiLCAwKTsKKwlkYmdfZXZlbnQoX3VzYl9hZGRyKG1FcCksICJFTkFCTEUiLCAwKTsKIAotCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCA9IDA7CisJbUVwLT5xaC5wdHItPmNhcCA9IDA7CiAKLQkJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQotCQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgfD0gIFFIX0lPUzsKLQkJZWxzZSBpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCAmPSB+UUhfTVVMVDsKLQkJZWxzZQotCQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgJj0gflFIX1pMVDsKKwlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCisJCW1FcC0+cWgucHRyLT5jYXAgfD0gIFFIX0lPUzsKKwllbHNlIGlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfTVVMVDsKKwllbHNlCisJCW1FcC0+cWgucHRyLT5jYXAgJj0gflFIX1pMVDsKIAotCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCB8PQotCQkJKG1FcC0+ZXAubWF4cGFja2V0IDw8IGZmc19ucihRSF9NQVhfUEtUKSkgJiBRSF9NQVhfUEtUOwotCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPnRkLm5leHQgfD0gVERfVEVSTUlOQVRFOyAgIC8qIG5lZWRlZD8gKi8KKwltRXAtPnFoLnB0ci0+Y2FwIHw9CisJCShtRXAtPmVwLm1heHBhY2tldCA8PCBmZnNfbnIoUUhfTUFYX1BLVCkpICYgUUhfTUFYX1BLVDsKKwltRXAtPnFoLnB0ci0+dGQubmV4dCB8PSBURF9URVJNSU5BVEU7ICAgLyogbmVlZGVkPyAqLwogCi0JCXJldHZhbCB8PSBod19lcF9lbmFibGUobUVwLT5udW0sIG1FcC0+ZGlyLCBtRXAtPnR5cGUpOwotCi0JCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKLQkJCW1FcC0+ZGlyID0gKG1FcC0+ZGlyID09IFRYKSA/IFJYIDogVFg7Ci0KLQl9IHdoaWxlIChtRXAtPmRpciAhPSBkaXJlY3Rpb24pOworCXJldHZhbCB8PSBod19lcF9lbmFibGUobUVwLT5udW0sIG1FcC0+ZGlyLCBtRXAtPnR5cGUpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShtRXAtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjE0Niw3ICsyMTU0LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZShtRXAtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCAmJgotCSAgICAhbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKSB7CisJICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkgewogCQlfZXBfbnVrZShtRXApOwogCQlyZXR2YWwgPSAtRU9WRVJGTE9XOwogCQl3YXJuKCJlbmRwb2ludCBjdHJsICVYIG51a2VkIiwgX3VzYl9hZGRyKG1FcCkpOwpAQCAtMjE3MCw5ICsyMTc4LDkgQEAKIAkvKiBwdXNoIHJlcXVlc3QgKi8KIAltUmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOwogCW1SZXEtPnJlcS5hY3R1YWwgPSAwOwotCWxpc3RfYWRkX3RhaWwoJm1SZXEtPnF1ZXVlLCAmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpOworCWxpc3RfYWRkX3RhaWwoJm1SZXEtPnF1ZXVlLCAmbUVwLT5xaC5xdWV1ZSk7CiAKLQlpZiAobGlzdF9pc19zaW5ndWxhcigmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKQorCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtRXAtPnFoLnF1ZXVlKSkKIAkJcmV0dmFsID0gX2hhcmR3YXJlX2VucXVldWUobUVwLCBtUmVxKTsKIAogCWlmIChyZXR2YWwgPT0gLUVBTFJFQURZKSB7CkBAIC0yMTk5LDcgKzIyMDcsNyBAQAogCXRyYWNlKCIlcCwgJXAiLCBlcCwgcmVxKTsKIAogCWlmIChlcCA9PSBOVUxMIHx8IHJlcSA9PSBOVUxMIHx8IG1FcC0+ZGVzYyA9PSBOVUxMIHx8Ci0JICAgIGxpc3RfZW1wdHkoJm1SZXEtPnF1ZXVlKSAgfHwgbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKQorCSAgICBsaXN0X2VtcHR5KCZtUmVxLT5xdWV1ZSkgIHx8IGxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwpAQCAtMjI0NCw3ICsyMjUyLDcgQEAKICNpZm5kZWYgU1RBTExfSU4KIAkvKiBnX2ZpbGVfc3RvcmFnZSBNUyBjb21wbGlhbnQgYnV0IGdfemVybyBmYWlscyBjaGFwdGVyIDkgY29tcGxpYW5jZSAqLwogCWlmICh2YWx1ZSAmJiBtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSyAmJiBtRXAtPmRpciA9PSBUWCAmJgotCSAgICAhbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKSB7CisJICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKG1FcC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CkBAIC0yMzU1LDcgKzIzNjMsNyBAQAogCQlpZiAoaXNfYWN0aXZlKSB7CiAJCQlwbV9ydW50aW1lX2dldF9zeW5jKCZfZ2FkZ2V0LT5kZXYpOwogCQkJaHdfZGV2aWNlX3Jlc2V0KHVkYyk7Ci0JCQlod19kZXZpY2Vfc3RhdGUodWRjLT5jaTEzeHh4X2VwWzBdLnFoW1JYXS5kbWEpOworCQkJaHdfZGV2aWNlX3N0YXRlKHVkYy0+ZXAwb3V0LnFoLmRtYSk7CiAJCX0gZWxzZSB7CiAJCQlod19kZXZpY2Vfc3RhdGUoMCk7CiAJCQlpZiAodWRjLT51ZGNfZHJpdmVyLT5ub3RpZnlfZXZlbnQpCkBAIC0yMzkwLDcgKzIzOTgsOCBAQAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlzdHJ1Y3QgY2kxM3h4eCAqdWRjID0gX3VkYzsKLQl1bnNpZ25lZCBsb25nIGksIGssIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGo7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKIAl0cmFjZSgiJXAiLCBkcml2ZXIpOwpAQCAtMjQyNyw0NSArMjQzNiw0NiBAQAogCiAJaW5mbygiaHdfZXBfbWF4ID0gJWQiLCBod19lcF9tYXgpOwogCi0JdWRjLT5kcml2ZXIgPSBkcml2ZXI7CiAJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CiAKIAlyZXR2YWwgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykgewotCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4LzI7IGkrKykgeworCQlmb3IgKGogPSBSWDsgaiA8PSBUWDsgaisrKSB7CisJCQlpbnQgayA9IGkgKyBqICogaHdfZXBfbWF4LzI7CisJCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtrXTsKIAotCQlzY25wcmludGYobUVwLT5uYW1lLCBzaXplb2YobUVwLT5uYW1lKSwgImVwJWkiLCAoaW50KWkpOworCQkJc2NucHJpbnRmKG1FcC0+bmFtZSwgc2l6ZW9mKG1FcC0+bmFtZSksICJlcCVpJXMiLCBpLAorCQkJCQkoaiA9PSBUWCkgID8gImluIiA6ICJvdXQiKTsKIAotCQltRXAtPmxvY2sgICAgICAgICA9IHVkYy0+bG9jazsKLQkJbUVwLT5kZXZpY2UgICAgICAgPSAmdWRjLT5nYWRnZXQuZGV2OwotCQltRXAtPnRkX3Bvb2wgICAgICA9IHVkYy0+dGRfcG9vbDsKKwkJCW1FcC0+bG9jayAgICAgICAgID0gdWRjLT5sb2NrOworCQkJbUVwLT5kZXZpY2UgICAgICAgPSAmdWRjLT5nYWRnZXQuZGV2OworCQkJbUVwLT50ZF9wb29sICAgICAgPSB1ZGMtPnRkX3Bvb2w7CiAKLQkJbUVwLT5lcC5uYW1lICAgICAgPSBtRXAtPm5hbWU7Ci0JCW1FcC0+ZXAub3BzICAgICAgID0gJnVzYl9lcF9vcHM7Ci0JCW1FcC0+ZXAubWF4cGFja2V0ID0gQ1RSTF9QQVlMT0FEX01BWDsKKwkJCW1FcC0+ZXAubmFtZSAgICAgID0gbUVwLT5uYW1lOworCQkJbUVwLT5lcC5vcHMgICAgICAgPSAmdXNiX2VwX29wczsKKwkJCW1FcC0+ZXAubWF4cGFja2V0ID0gQ1RSTF9QQVlMT0FEX01BWDsKIAotCQkvKiB0aGlzIGFsbG9jYXRpb24gY2Fubm90IGJlIHJhbmRvbSAqLwotCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKSB7Ci0JCQlJTklUX0xJU1RfSEVBRCgmbUVwLT5xaFtrXS5xdWV1ZSk7CisJCQlJTklUX0xJU1RfSEVBRCgmbUVwLT5xaC5xdWV1ZSk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwotCQkJbUVwLT5xaFtrXS5wdHIgPSBkbWFfcG9vbF9hbGxvYyh1ZGMtPnFoX3Bvb2wsCi0JCQkJCQkJR0ZQX0tFUk5FTCwKLQkJCQkJCQkmbUVwLT5xaFtrXS5kbWEpOworCQkJbUVwLT5xaC5wdHIgPSBkbWFfcG9vbF9hbGxvYyh1ZGMtPnFoX3Bvb2wsIEdGUF9LRVJORUwsCisJCQkJCSZtRXAtPnFoLmRtYSk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKLQkJCWlmIChtRXAtPnFoW2tdLnB0ciA9PSBOVUxMKQorCQkJaWYgKG1FcC0+cWgucHRyID09IE5VTEwpCiAJCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCWVsc2UKLQkJCQltZW1zZXQobUVwLT5xaFtrXS5wdHIsIDAsCi0JCQkJICAgICAgIHNpemVvZigqbUVwLT5xaFtrXS5wdHIpKTsKLQkJfQotCQlpZiAoaSA9PSAwKQotCQkJdWRjLT5nYWRnZXQuZXAwID0gJm1FcC0+ZXA7Ci0JCWVsc2UKKwkJCQltZW1zZXQobUVwLT5xaC5wdHIsIDAsIHNpemVvZigqbUVwLT5xaC5wdHIpKTsKKworCQkJLyogc2tpcCBlcDAgb3V0IGFuZCBpbiBlbmRwb2ludHMgKi8KKwkJCWlmIChpID09IDApCisJCQkJY29udGludWU7CisKIAkJCWxpc3RfYWRkX3RhaWwoJm1FcC0+ZXAuZXBfbGlzdCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOworCQl9CiAJfQogCWlmIChyZXR2YWwpCiAJCWdvdG8gZG9uZTsKIAorCXVkYy0+Z2FkZ2V0LmVwMCA9ICZ1ZGMtPmVwMGluLmVwOwogCS8qIGJpbmQgZ2FkZ2V0ICovCiAJZHJpdmVyLT5kcml2ZXIuYnVzICAgICA9IE5VTEw7CiAJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKQEAgLTI0NzksNiArMjQ4OSw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZ1ZGMtPmdhZGdldC5kZXYpOwogCWlmICh1ZGMtPnVkY19kcml2ZXItPmZsYWdzICYgQ0kxM1hYWF9QVUxMVVBfT05fVkJVUykgewogCQlpZiAodWRjLT52YnVzX2FjdGl2ZSkgewpAQCAtMjQ5MCwxNCArMjUwMSwxMiBAQAogCQl9CiAJfQogCi0JcmV0dmFsID0gaHdfZGV2aWNlX3N0YXRlKHVkYy0+Y2kxM3h4eF9lcFswXS5xaFtSWF0uZG1hKTsKKwlyZXR2YWwgPSBod19kZXZpY2Vfc3RhdGUodWRjLT5lcDBvdXQucWguZG1hKTsKIAlpZiAocmV0dmFsKQogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZ1ZGMtPmdhZGdldC5kZXYpOwogCiAgZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwotCWlmIChyZXR2YWwpCi0JCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CkBAIC0yNTEwLDcgKzI1MTksNyBAQAogaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGNpMTN4eHggKnVkYyA9IF91ZGM7Ci0JdW5zaWduZWQgbG9uZyBpLCBrLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGksIGZsYWdzOwogCiAJdHJhY2UoIiVwIiwgZHJpdmVyKTsKIApAQCAtMjU0NiwxNyArMjU1NSwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykgewogCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKIAotCQlpZiAoaSA9PSAwKQotCQkJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKLQkJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJm1FcC0+ZXAuZXBfbGlzdCkpCisJCWlmICghbGlzdF9lbXB0eSgmbUVwLT5lcC5lcF9saXN0KSkKIAkJCWxpc3RfZGVsX2luaXQoJm1FcC0+ZXAuZXBfbGlzdCk7CiAKLQkJZm9yIChrID0gUlg7IGsgPD0gVFg7IGsrKykKLQkJCWlmIChtRXAtPnFoW2tdLnB0ciAhPSBOVUxMKQotCQkJCWRtYV9wb29sX2ZyZWUodWRjLT5xaF9wb29sLAotCQkJCQkgICAgICBtRXAtPnFoW2tdLnB0ciwgbUVwLT5xaFtrXS5kbWEpOworCQlpZiAobUVwLT5xaC5wdHIgIT0gTlVMTCkKKwkJCWRtYV9wb29sX2ZyZWUodWRjLT5xaF9wb29sLCBtRXAtPnFoLnB0ciwgbUVwLT5xaC5kbWEpOwogCX0KIAorCXVkYy0+Z2FkZ2V0LmVwMCA9IE5VTEw7CiAJdWRjLT5kcml2ZXIgPSBOVUxMOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmgKaW5kZXggZjYxZmVkMC4uYTI0OTJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIERFRklORQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBDSTEzWFhYX1BBR0VfU0laRSAgNDA5NnVsIC8qIHBhZ2Ugc2l6ZSBmb3IgVEQncyAqLwotI2RlZmluZSBFTkRQVF9NQVggICAgICAgICAgKDE2KQorI2RlZmluZSBFTkRQVF9NQVggICAgICAgICAgKDMyKQogI2RlZmluZSBDVFJMX1BBWUxPQURfTUFYICAgKDY0KQogI2RlZmluZSBSWCAgICAgICAgKDApICAvKiBzaW1pbGFyIHRvIFVTQl9ESVJfT1VUIGJ1dCBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCAqLwogI2RlZmluZSBUWCAgICAgICAgKDEpICAvKiBzaW1pbGFyIHRvIFVTQl9ESVJfSU4gIGJ1dCBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCAqLwpAQCAtODgsOCArODgsNyBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICAgcXVldWU7CiAJCXN0cnVjdCBjaTEzeHh4X3FoICpwdHI7CiAJCWRtYV9hZGRyX3QgICAgICAgICBkbWE7Ci0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWhbMl07Ci0Jc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAqc3RhdHVzOworCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFoOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZGdlOwogCiAJLyogZ2xvYmFsIHJlc291cmNlcyAqLwpAQCAtMTE5LDkgKzExOCwxMyBAQAogCiAJc3RydWN0IGRtYV9wb29sICAgICAgICAgICAqcWhfcG9vbDsgICAvKiBETUEgcG9vbCBmb3IgcXVldWUgaGVhZHMgKi8KIAlzdHJ1Y3QgZG1hX3Bvb2wgICAgICAgICAgICp0ZF9wb29sOyAgIC8qIERNQSBwb29sIGZvciB0cmFuc2ZlciBkZXNjcyAqLworCXN0cnVjdCB1c2JfcmVxdWVzdCAgICAgICAgKnN0YXR1czsgICAgLyogZXAwIHN0YXR1cyByZXF1ZXN0ICovCiAKIAlzdHJ1Y3QgdXNiX2dhZGdldCAgICAgICAgICBnYWRnZXQ7ICAgICAvKiBVU0Igc2xhdmUgZGV2aWNlICovCiAJc3RydWN0IGNpMTN4eHhfZXAgICAgICAgICAgY2kxM3h4eF9lcFtFTkRQVF9NQVhdOyAvKiBleHRlbmRlZCBlbmRwdHMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICBlcDBfZGlyOyAgICAvKiBlcDAgZGlyZWN0aW9uICovCisjZGVmaW5lIGVwMG91dCBjaTEzeHh4X2VwWzBdCisjZGVmaW5lIGVwMGluICBjaTEzeHh4X2VwWzE2XQogCiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICAqZHJpdmVyOyAgICAgLyogM3JkIHBhcnR5IGdhZGdldCBkcml2ZXIgKi8KIAlzdHJ1Y3QgY2kxM3h4eF91ZGNfZHJpdmVyICp1ZGNfZHJpdmVyOyAvKiBkZXZpY2UgY29udHJvbGxlciBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCBmNmZmODQ1Li4xYmE0YmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC05MjgsOCArOTI4LDkgQEAKIAkJICovCiAJCXN3aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spIHsKIAkJY2FzZSBVU0JfUkVDSVBfSU5URVJGQUNFOgotCQkJaWYgKGNkZXYtPmNvbmZpZykKLQkJCQlmID0gY2Rldi0+Y29uZmlnLT5pbnRlcmZhY2VbaW50Zl07CisJCQlpZiAoIWNkZXYtPmNvbmZpZyB8fCB3X2luZGV4ID49IE1BWF9DT05GSUdfSU5URVJGQUNFUykKKwkJCQlicmVhazsKKwkJCWYgPSBjZGV2LT5jb25maWctPmludGVyZmFjZVtpbnRmXTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVVNCX1JFQ0lQX0VORFBPSU5UOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKaW5kZXggMGM4ZGQ4MS4uYjEyMGRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCkBAIC0xOTgsMTAgKzE5OCwxMCBAQAogI2RlZmluZSBQQ0hfVURDX0JSTEVOCQkweDBGCS8qIEJ1cnN0IGxlbmd0aCAqLwogI2RlZmluZSBQQ0hfVURDX1RITEVOCQkweDFGCS8qIFRocmVzaG9sZCBsZW5ndGggKi8KIC8qIFZhbHVlIG9mIEVQIEJ1ZmZlciBTaXplICovCi0jZGVmaW5lIFVEQ19FUDBJTl9CVUZGX1NJWkUJNjQKLSNkZWZpbmUgVURDX0VQSU5fQlVGRl9TSVpFCTUxMgotI2RlZmluZSBVRENfRVAwT1VUX0JVRkZfU0laRQk2NAotI2RlZmluZSBVRENfRVBPVVRfQlVGRl9TSVpFCTUxMgorI2RlZmluZSBVRENfRVAwSU5fQlVGRl9TSVpFCTE2CisjZGVmaW5lIFVEQ19FUElOX0JVRkZfU0laRQkyNTYKKyNkZWZpbmUgVURDX0VQME9VVF9CVUZGX1NJWkUJMTYKKyNkZWZpbmUgVURDX0VQT1VUX0JVRkZfU0laRQkyNTYKIC8qIFZhbHVlIG9mIEVQIG1heGltdW0gcGFja2V0IHNpemUgKi8KICNkZWZpbmUgVURDX0VQMElOX01BWF9QS1RfU0laRQk2NAogI2RlZmluZSBVRENfRVAwT1VUX01BWF9QS1RfU0laRQk2NApAQCAtMzUxLDcgKzM1MSw3IEBACiAJc3RydWN0IHBjaV9wb29sCQkqZGF0YV9yZXF1ZXN0czsKIAlzdHJ1Y3QgcGNpX3Bvb2wJCSpzdHBfcmVxdWVzdHM7CiAJZG1hX2FkZHJfdAkJCWRtYV9hZGRyOwotCXVuc2lnbmVkIGxvbmcJCQllcDBvdXRfYnVmWzY0XTsKKwl2b2lkCQkJCSplcDBvdXRfYnVmOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJCXNldHVwX2RhdGE7CiAJdW5zaWduZWQgbG9uZwkJCXBoeXNfYWRkcjsKIAl2b2lkIF9faW9tZW0JCQkqYmFzZV9hZGRyOwpAQCAtMzYxLDYgKzM2MSw4IEBACiAKICNkZWZpbmUgUENIX1VEQ19QQ0lfQkFSCQkJMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VHMjBUX1VEQwkweDg4MDgKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ST0hNCQkweDEwREIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NTDcyMTNfSU9IX1VEQwkweDgwMUQKIAogc3RhdGljIGNvbnN0IGNoYXIJZXAwX3N0cmluZ1tdID0gImVwMGluIjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRjX3N0YWxsX3NwaW5sb2NrKTsJLyogc3RhbGwgc3BpbiBsb2NrICovCkBAIC0xMjE5LDExICsxMjIxLDExIEBACiAJZGV2ID0gZXAtPmRldjsKIAlpZiAocmVxLT5kbWFfbWFwcGVkKSB7CiAJCWlmIChlcC0+aW4pCi0JCQlwY2lfdW5tYXBfc2luZ2xlKGRldi0+cGRldiwgcmVxLT5yZXEuZG1hLAotCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCByZXEtPnJlcS5kbWEsCisJCQkJCSByZXEtPnJlcS5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOwogCQllbHNlCi0JCQlwY2lfdW5tYXBfc2luZ2xlKGRldi0+cGRldiwgcmVxLT5yZXEuZG1hLAotCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIHJlcS0+cmVxLmRtYSwKKwkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKIAkJcmVxLT5kbWFfbWFwcGVkID0gMDsKIAkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKIAl9CkBAIC0xNDE0LDcgKzE0MTYsNiBAQAogCiAJcGNoX3VkY19jbGVhcl9kbWEoZXAtPmRldiwgRE1BX0RJUl9SWCk7CiAJdGRfZGF0YSA9IHJlcS0+dGRfZGF0YTsKLQllcC0+dGRfZGF0YSA9IHJlcS0+dGRfZGF0YTsKIAkvKiBTZXQgdGhlIHN0YXR1cyBiaXRzIGZvciBhbGwgZGVzY3JpcHRvcnMgKi8KIAl3aGlsZSAoMSkgewogCQl0ZF9kYXRhLT5zdGF0dXMgPSAodGRfZGF0YS0+c3RhdHVzICYgflBDSF9VRENfQlVGRl9TVFMpIHwKQEAgLTE2MTMsMTUgKzE2MTQsMTkgQEAKIAlpZiAodXNicmVxLT5sZW5ndGggJiYKIAkgICAgKCh1c2JyZXEtPmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB8fCAhdXNicmVxLT5kbWEpKSB7CiAJCWlmIChlcC0+aW4pCi0JCQl1c2JyZXEtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwgdXNicmVxLT5idWYsCi0JCQkJCXVzYnJlcS0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXVzYnJlcS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkJICAgICB1c2JyZXEtPmJ1ZiwKKwkJCQkJCSAgICAgdXNicmVxLT5sZW5ndGgsCisJCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCQllbHNlCi0JCQl1c2JyZXEtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwgdXNicmVxLT5idWYsCi0JCQkJCXVzYnJlcS0+bGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJdXNicmVxLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsCisJCQkJCQkgICAgIHVzYnJlcS0+YnVmLAorCQkJCQkJICAgICB1c2JyZXEtPmxlbmd0aCwKKwkJCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIAkJcmVxLT5kbWFfbWFwcGVkID0gMTsKIAl9CiAJaWYgKHVzYnJlcS0+bGVuZ3RoID4gMCkgewotCQlyZXR2YWwgPSBwcmVwYXJlX2RtYShlcCwgcmVxLCBnZnApOworCQlyZXR2YWwgPSBwcmVwYXJlX2RtYShlcCwgcmVxLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gcHJvYmVfZW5kOwogCX0KQEAgLTE2NDYsNyArMTY1MSw2IEBACiAJCQlwY2hfdWRjX3dhaXRfZXBfc3RhbGwoZXApOwogCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOwogCQkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LCAoMSA8PCBlcC0+bnVtKSk7Ci0JCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1RYKTsKIAkJfQogCX0KIAkvKiBOb3cgYWRkIHRoaXMgcmVxdWVzdCB0byB0aGUgZXAncyBwZW5kaW5nIHJlcXVlc3RzICovCkBAIC0xOTI2LDYgKzE5MzAsNyBAQAogCSAgICBQQ0hfVURDX0JTX0RNQV9ET05FKQogCQlyZXR1cm47CiAJcGNoX3VkY19jbGVhcl9kbWEoZXAtPmRldiwgRE1BX0RJUl9SWCk7CisJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIDApOwogCWlmICgocmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyAmIFBDSF9VRENfUlhUWF9TVFMpICE9CiAJICAgIFBDSF9VRENfUlRTX1NVQ0MpIHsKIAkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJJbnZhbGlkIFJYVFggc3RhdHVzICgweCUwOHgpICIKQEAgLTE5NjMsNyArMTk2OCw3IEBACiAJdTMyCWVwc3RzOwogCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKIAotCWVwID0gJmRldi0+ZXBbMiplcF9udW1dOworCWVwID0gJmRldi0+ZXBbVURDX0VQSU5fSURYKGVwX251bSldOwogCWVwc3RzID0gZXAtPmVwc3RzOwogCWVwLT5lcHN0cyA9IDA7CiAKQEAgLTIwMDgsNyArMjAxMyw3IEBACiAJc3RydWN0IHBjaF91ZGNfZXAJCSplcDsKIAlzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0CQkqcmVxID0gTlVMTDsKIAotCWVwID0gJmRldi0+ZXBbMiplcF9udW0gKyAxXTsKKwllcCA9ICZkZXYtPmVwW1VEQ19FUE9VVF9JRFgoZXBfbnVtKV07CiAJZXBzdHMgPSBlcC0+ZXBzdHM7CiAJZXAtPmVwc3RzID0gMDsKIApAQCAtMjAyNSwxMCArMjAzMCwxMSBAQAogCX0KIAlpZiAoZXBzdHMgJiBVRENfRVBTVFNfSEUpCiAJCXJldHVybjsKLQlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUlNTKQorCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SU1MpIHsKIAkJcGNoX3VkY19lcF9zZXRfc3RhbGwoZXApOwogCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsCiAJCQkJCSAgICAgUENIX1VEQ19FUElOVChlcC0+aW4sIGVwLT5udW0pKTsKKwl9CiAJaWYgKGVwc3RzICYgVURDX0VQU1RTX1JDUykgewogCQlpZiAoIWRldi0+cHJvdF9zdGFsbCkgewogCQkJcGNoX3VkY19lcF9jbGVhcl9zdGFsbChlcCk7CkBAIC0yMDYwLDggKzIwNjYsMTAgQEAKIHsKIAl1MzIJZXBzdHM7CiAJc3RydWN0IHBjaF91ZGNfZXAJKmVwOworCXN0cnVjdCBwY2hfdWRjX2VwCSplcF9vdXQ7CiAKIAllcCA9ICZkZXYtPmVwW1VEQ19FUDBJTl9JRFhdOworCWVwX291dCA9ICZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXTsKIAllcHN0cyA9IGVwLT5lcHN0czsKIAllcC0+ZXBzdHMgPSAwOwogCkBAIC0yMDczLDggKzIwODEsMTYgQEAKIAkJcmV0dXJuOwogCWlmIChlcHN0cyAmIFVEQ19FUFNUU19IRSkKIAkJcmV0dXJuOwotCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJiAoIWRldi0+c3RhbGwpKQorCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJiAoIWRldi0+c3RhbGwpKSB7CiAJCXBjaF91ZGNfY29tcGxldGVfdHJhbnNmZXIoZXApOworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfUlgpOworCQllcF9vdXQtPnRkX2RhdGEtPnN0YXR1cyA9IChlcF9vdXQtPnRkX2RhdGEtPnN0YXR1cyAmCisJCQkJCX5QQ0hfVURDX0JVRkZfU1RTKSB8CisJCQkJCVBDSF9VRENfQlNfSFNUX1JEWTsKKwkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXBfb3V0KTsKKwkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCXBjaF91ZGNfZXBfc2V0X3JyZHkoZXBfb3V0KTsKKwl9CiAJLyogT24gSU4gaW50ZXJydXB0LCBwcm92aWRlIGRhdGEgaWYgd2UgaGF2ZSBhbnkgKi8KIAlpZiAoKGVwc3RzICYgVURDX0VQU1RTX0lOKSAmJiAhKGVwc3RzICYgVURDX0VQU1RTX1REQykgJiYKIAkgICAgICEoZXBzdHMgJiBVRENfRVBTVFNfVFhFTVBUWSkpCkBAIC0yMTAyLDExICsyMTE4LDkgQEAKIAkJZGV2LT5zdGFsbCA9IDA7CiAJCWRldi0+ZXBbVURDX0VQMElOX0lEWF0uaGFsdGVkID0gMDsKIAkJZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0uaGFsdGVkID0gMDsKLQkJLyogSW4gZGF0YSBub3QgcmVhZHkgKi8KLQkJcGNoX3VkY19lcF9zZXRfbmFrKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSkpOwogCQlkZXYtPnNldHVwX2RhdGEgPSBlcC0+dGRfc3RwLT5yZXF1ZXN0OwogCQlwY2hfdWRjX2luaXRfc2V0dXBfYnVmZihlcC0+dGRfc3RwKTsKLQkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1RYKTsKKwkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKIAkJcGNoX3VkY19lcF9maWZvX2ZsdXNoKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSksCiAJCQkJICAgICAgZGV2LT5lcFtVRENfRVAwSU5fSURYXS5pbik7CiAJCWlmICgoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKQpAQCAtMjEyMiwxNCArMjEzNiwyMyBAQAogCQlzZXR1cF9zdXBwb3J0ZWQgPSBkZXYtPmRyaXZlci0+c2V0dXAoJmRldi0+Z2FkZ2V0LAogCQkJCQkJICAgICAmZGV2LT5zZXR1cF9kYXRhKTsKIAkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCisJCWlmIChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgeworCQkJZXAtPnRkX2RhdGEtPnN0YXR1cyA9IChlcC0+dGRfZGF0YS0+c3RhdHVzICYKKwkJCQkJCX5QQ0hfVURDX0JVRkZfU1RTKSB8CisJCQkJCQlQQ0hfVURDX0JTX0hTVF9SRFk7CisJCQlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgZXAtPnRkX2RhdGFfcGh5cyk7CisJCX0KIAkJLyogZXAwIGluIHJldHVybnMgZGF0YSBvbiBJTiBwaGFzZSAqLwogCQlpZiAoc2V0dXBfc3VwcG9ydGVkID49IDAgJiYgc2V0dXBfc3VwcG9ydGVkIDwKIAkJCQkJICAgIFVEQ19FUDBJTl9NQVhfUEtUX1NJWkUpIHsKIAkJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSkpOwogCQkJLyogR2FkZ2V0IHdvdWxkIGhhdmUgcXVldWVkIGEgcmVxdWVzdCB3aGVuCiAJCQkgKiB3ZSBjYWxsZWQgdGhlIHNldHVwICovCi0JCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKLQkJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKKwkJCWlmICghKGRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSkgeworCQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQkJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKKwkJCX0KIAkJfSBlbHNlIGlmIChzZXR1cF9zdXBwb3J0ZWQgPCAwKSB7CiAJCQkvKiBpZiB1bnN1cHBvcnRlZCByZXF1ZXN0LCB0aGVuIHN0YWxsICovCiAJCQlwY2hfdWRjX2VwX3NldF9zdGFsbCgmKGRldi0+ZXBbVURDX0VQMElOX0lEWF0pKTsKQEAgLTIxNDIsMjIgKzIxNjUsMTMgQEAKIAkJfQogCX0gZWxzZSBpZiAoKCgoc3RhdCAmIFVEQ19FUFNUU19PVVRfTUFTSykgPj4gVURDX0VQU1RTX09VVF9TSElGVCkgPT0KIAkJICAgICBVRENfRVBTVFNfT1VUX0RBVEEpICYmICFkZXYtPnN0YWxsKSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7Ci0JCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzOiBObyByZXF1ZXN0XG4iLCBfX2Z1bmNfXyk7Ci0JCQllcC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwLT50ZF9kYXRhLT5zdGF0dXMgJgotCQkJCQkgICAgICAgflBDSF9VRENfQlVGRl9TVFMpIHwKLQkJCQkJICAgICAgIFBDSF9VRENfQlNfSFNUX1JEWTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOwotCQl9IGVsc2UgewotCQkJLyogY29udHJvbCB3cml0ZSAqLwotCQkJLyogbmV4dCBmdW5jdGlvbiB3aWxsIHBpY2t1byBhbiBjbGVhciB0aGUgc3RhdHVzICovCisJCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCAwKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCQllcC0+ZXBzdHMgPSBzdGF0OwotCi0JCQlwY2hfdWRjX3N2Y19kYXRhX291dChkZXYsIDApOwotCQkJLyogcmUtcHJvZ3JhbSBkZXNjLiBwb2ludGVyIGZvciBwb3NzaWJsZSBaTFBzICovCi0JCQlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgZXAtPnRkX2RhdGFfcGh5cyk7Ci0JCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJCXBjaF91ZGNfc3ZjX2RhdGFfb3V0KGRldiwgUENIX1VEQ19FUDApOwogCQl9CisJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOwogCX0KIAlwY2hfdWRjX2VwX3NldF9ycmR5KGVwKTsKIH0KQEAgLTIxNzQsNyArMjE4OCw3IEBACiAJc3RydWN0IHBjaF91ZGNfZXAJKmVwOwogCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QgKnJlcTsKIAotCWVwID0gJmRldi0+ZXBbMiplcF9udW1dOworCWVwID0gJmRldi0+ZXBbVURDX0VQSU5fSURYKGVwX251bSldOwogCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgewogCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0LCBxdWV1ZSk7CiAJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKQEAgLTIxOTYsMTMgKzIyMTAsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUENIX1VEQ19VU0VEX0VQX05VTTsgaSsrKSB7CiAJCS8qIElOICovCiAJCWlmIChlcF9pbnRyICYgKDB4MSA8PCBpKSkgewotCQkJZXAgPSAmZGV2LT5lcFsyKmldOworCQkJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoaSldOwogCQkJZXAtPmVwc3RzID0gcGNoX3VkY19yZWFkX2VwX3N0YXR1cyhlcCk7CiAJCQlwY2hfdWRjX2NsZWFyX2VwX3N0YXR1cyhlcCwgZXAtPmVwc3RzKTsKIAkJfQogCQkvKiBPVVQgKi8KIAkJaWYgKGVwX2ludHIgJiAoMHgxMDAwMCA8PCBpKSkgewotCQkJZXAgPSAmZGV2LT5lcFsyKmkrMV07CisJCQllcCA9ICZkZXYtPmVwW1VEQ19FUE9VVF9JRFgoaSldOwogCQkJZXAtPmVwc3RzID0gcGNoX3VkY19yZWFkX2VwX3N0YXR1cyhlcCk7CiAJCQlwY2hfdWRjX2NsZWFyX2VwX3N0YXR1cyhlcCwgZXAtPmVwc3RzKTsKIAkJfQpAQCAtMjU2Myw5ICsyNTc3LDYgQEAKIAlkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmVwLm1heHBhY2tldCA9IFVEQ19FUDBJTl9NQVhfUEtUX1NJWkU7CiAJZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0uZXAubWF4cGFja2V0ID0gVURDX0VQME9VVF9NQVhfUEtUX1NJWkU7CiAKLQlkZXYtPmRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCBkZXYtPmVwMG91dF9idWYsIDI1NiwKLQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KIAkvKiByZW1vdmUgZXAwIGluIGFuZCBvdXQgZnJvbSB0aGUgbGlzdC4gIFRoZXkgaGF2ZSBvd24gcG9pbnRlciAqLwogCWxpc3RfZGVsX2luaXQoJmRldi0+ZXBbVURDX0VQMElOX0lEWF0uZXAuZXBfbGlzdCk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0uZXAuZXBfbGlzdCk7CkBAIC0yNjM3LDYgKzI2NDgsMTMgQEAKIAlkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLnRkX3N0cF9waHlzID0gMDsKIAlkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLnRkX2RhdGEgPSBOVUxMOwogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfZGF0YV9waHlzID0gMDsKKworCWRldi0+ZXAwb3V0X2J1ZiA9IGt6YWxsb2MoVURDX0VQME9VVF9CVUZGX1NJWkUgKiA0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+ZXAwb3V0X2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2LT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgZGV2LT5lcDBvdXRfYnVmLAorCQkJCSAgICAgICBVRENfRVAwT1VUX0JVRkZfU0laRSAqIDQsCisJCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3MDAsNyArMjcxOCw4IEBACiAKIAlwY2hfdWRjX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYsIFVEQ19ERVZJTlRfTVNLKTsKIAotCS8qIEFzc3VlcyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVldHMgd2l0aCB0aGlzIGRyaXZlciAqLworCS8qIEFzc3VyZXMgdGhhdCB0aGVyZSBhcmUgbm8gcGVuZGluZyByZXF1ZXN0cyB3aXRoIHRoaXMgZHJpdmVyICovCisJZHJpdmVyLT5kaXNjb25uZWN0KCZkZXYtPmdhZGdldCk7CiAJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKIAlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAlkZXYtPmRyaXZlciA9IE5VTEw7CkBAIC0yNzUwLDYgKzI3NjksMTEgQEAKIAkJcGNpX3Bvb2xfZGVzdHJveShkZXYtPnN0cF9yZXF1ZXN0cyk7CiAJfQogCisJaWYgKGRldi0+ZG1hX2FkZHIpCisJCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCBkZXYtPmRtYV9hZGRyLAorCQkJCSBVRENfRVAwT1VUX0JVRkZfU0laRSAqIDQsIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoZGV2LT5lcDBvdXRfYnVmKTsKKwogCXBjaF91ZGNfZXhpdChkZXYpOwogCiAJaWYgKGRldi0+aXJxX3JlZ2lzdGVyZWQpCkBAIC0yNzkyLDExICsyODE2LDcgQEAKIAlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCXJldCA9IHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaV9yZXN0b3JlX3N0YXRlIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKQEAgLTI5MTQsNiArMjkzNCwxMSBAQAogCQkuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlLAogCQkuY2xhc3NfbWFzayA9IDB4ZmZmZmZmZmYsCiAJfSwKKwl7CisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ST0hNLCBQQ0lfREVWSUNFX0lEX01MNzIxM19JT0hfVURDKSwKKwkJLmNsYXNzID0gKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSwKKwkJLmNsYXNzX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCiAJeyAwIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCAyZmM4NjM2Li4xMmZmNmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTEzMSwzMSArMTMxLDMxIEBACiAgKiBwYXJhbWV0ZXJzIGFyZSBpbiBVVEYtOCAoc3VwZXJzZXQgb2YgQVNDSUkncyA3IGJpdCBjaGFyYWN0ZXJzKS4KICAqLwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgaWRWZW5kb3I7CitzdGF0aWMgdXNob3J0IGlkVmVuZG9yOwogbW9kdWxlX3BhcmFtKGlkVmVuZG9yLCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpZFZlbmRvciwgIlVTQiBWZW5kb3IgSUQiKTsKIAotc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGlkUHJvZHVjdDsKK3N0YXRpYyB1c2hvcnQgaWRQcm9kdWN0OwogbW9kdWxlX3BhcmFtKGlkUHJvZHVjdCwgdXNob3J0LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaWRQcm9kdWN0LCAiVVNCIFByb2R1Y3QgSUQiKTsKIAotc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGJjZERldmljZTsKK3N0YXRpYyB1c2hvcnQgYmNkRGV2aWNlOwogbW9kdWxlX3BhcmFtKGJjZERldmljZSwgdXNob3J0LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmNkRGV2aWNlLCAiVVNCIERldmljZSB2ZXJzaW9uIChCQ0QpIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlNYW51ZmFjdHVyZXI7CitzdGF0aWMgY2hhciAqaU1hbnVmYWN0dXJlcjsKIG1vZHVsZV9wYXJhbShpTWFudWZhY3R1cmVyLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlNYW51ZmFjdHVyZXIsICJVU0IgTWFudWZhY3R1cmVyIHN0cmluZyIpOwogCi1zdGF0aWMgY2hhciAqX19pbml0ZGF0YSBpUHJvZHVjdDsKK3N0YXRpYyBjaGFyICppUHJvZHVjdDsKIG1vZHVsZV9wYXJhbShpUHJvZHVjdCwgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpUHJvZHVjdCwgIlVTQiBQcm9kdWN0IHN0cmluZyIpOwogCi1zdGF0aWMgY2hhciAqX19pbml0ZGF0YSBpU2VyaWFsTnVtOworc3RhdGljIGNoYXIgKmlTZXJpYWxOdW07CiBtb2R1bGVfcGFyYW0oaVNlcmlhbE51bSwgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpU2VyaWFsTnVtLCAiMSIpOwogCi1zdGF0aWMgY2hhciAqX19pbml0ZGF0YSBpUE5Qc3RyaW5nOworc3RhdGljIGNoYXIgKmlQTlBzdHJpbmc7CiBtb2R1bGVfcGFyYW0oaVBOUHN0cmluZywgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpUE5Qc3RyaW5nLCAiTUZHOmxpbnV4O01ETDpnX3ByaW50ZXI7Q0xTOlBSSU5URVI7U046MTsiKTsKIApAQCAtMTU5NiwxMyArMTU5NiwxMiBAQAogCWludCBzdGF0dXM7CiAKIAltdXRleF9sb2NrKCZ1c2JfcHJpbnRlcl9nYWRnZXQubG9ja19wcmludGVyX2lvKTsKLQljbGFzc19kZXN0cm95KHVzYl9nYWRnZXRfY2xhc3MpOwotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihnX3ByaW50ZXJfZGV2bm8sIDIpOwotCiAJc3RhdHVzID0gdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmcHJpbnRlcl9kcml2ZXIpOwogCWlmIChzdGF0dXMpCiAJCUVSUk9SKGRldiwgInVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgJXhcbiIsIHN0YXR1cyk7CiAKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZ19wcmludGVyX2Rldm5vLCAyKTsKKwljbGFzc19kZXN0cm95KHVzYl9nYWRnZXRfY2xhc3MpOwogCW11dGV4X3VubG9jaygmdXNiX3ByaW50ZXJfZ2FkZ2V0LmxvY2tfcHJpbnRlcl9pbyk7CiB9CiBtb2R1bGVfZXhpdChjbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA4NmU0Mjg5Li41Yzc2MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycTsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCB0ZW1wOwogCiAJcHJfZGVidWcoImluaXRpYWxpemluZyBGU0wtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKIApAQCAtMTI2LDE4ICsxMjUsNiBAQAogCQlnb3RvIGVycjM7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiBpdCBpcyBNUEM1MTIxIFNvQywgb3RoZXJ3aXNlIHNldCBwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzCi0JICogZmxhZyBmb3IgODN4eCBvciA4NTM2IHN5c3RlbSBpbnRlcmZhY2UgcmVnaXN0ZXJzLgotCSAqLwotCWlmIChwZGF0YS0+YmlnX2VuZGlhbl9tbWlvKQotCQl0ZW1wID0gaW5fYmUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0JZWxzZQotCQl0ZW1wID0gaW5fbGUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0KLQlpZiAoKHRlbXAgJiBJRF9NU0spICE9ICh+KCh0ZW1wICYgTklEX01TSykgPj4gOCkgJiBJRF9NU0spKQotCQlwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzID0gMTsKLQogCS8qIEVuYWJsZSBVU0IgY29udHJvbGxlciwgODN4eCBvciA4NTM2ICovCiAJaWYgKHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MpCiAJCXNldGJpdHMzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9DVFJMLCAweDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCmluZGV4IDJjODM1MzcuLjNmYWJlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKQEAgLTE5LDkgKzE5LDYgQEAKICNkZWZpbmUgX0VIQ0lfRlNMX0gKIAogLyogb2Zmc2V0cyBmb3IgdGhlIG5vbi1laGNpIHJlZ2lzdGVycyBpbiB0aGUgRlNMIFNPQyBVU0IgY29udHJvbGxlciAqLwotI2RlZmluZSBGU0xfU09DX1VTQl9JRAkJMHgwCi0jZGVmaW5lIElEX01TSwkJCTB4M2YKLSNkZWZpbmUgTklEX01TSwkJCTB4M2YwMAogI2RlZmluZSBGU0xfU09DX1VTQl9VTFBJVlAJMHgxNzAKICNkZWZpbmUgRlNMX1NPQ19VU0JfUE9SVFNDMQkweDE4NAogI2RlZmluZSBQT1JUX1BUU19NU0sJCSgzPDwzMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA2ZmVlM2NkLi43NGRjZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC01NzIsNiArNTcyLDggQEAKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX2lhYV93YXRjaGRvZzsKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwogCisJaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNTc5LDExICs1ODEsMjAgQEAKIAllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9pdGRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9zaXRkX2xpc3QpOworCisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOKGhjY19wYXJhbXMpKSB7CisJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCisJCXN3aXRjaCAoRUhDSV9UVU5FX0ZMUykgeworCQljYXNlIDA6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAxMDI0OyBicmVhazsKKwkJY2FzZSAxOiBlaGNpLT5wZXJpb2RpY19zaXplID0gNTEyOyBicmVhazsKKwkJY2FzZSAyOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMjU2OyBicmVhazsKKwkJZGVmYXVsdDoJQlVHKCk7CisJCX0KKwl9CiAJaWYgKChyZXR2YWwgPSBlaGNpX21lbV9pbml0KGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBjb250cm9sbGVycyBtYXkgY2FjaGUgc29tZSBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uICovCi0JaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOwogCWlmIChIQ0NfSVNPQ19DQUNIRShoY2NfcGFyYW1zKSkJCS8vIGZ1bGwgZnJhbWUgY2FjaGUKIAkJZWhjaS0+aV90aHJlc2ggPSAyICsgODsKIAllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZApAQCAtNjM3LDEyICs2NDgsNiBAQAogCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLwogCQl0ZW1wICY9IH4oMyA8PCAyKTsKIAkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKLQkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7Ci0JCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOwotCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOwotCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOwotCQlkZWZhdWx0OglCVUcoKTsKLQkJfQogCX0KIAlpZiAoSENDX0xQTShoY2NfcGFyYW1zKSkgewogCQkvKiBzdXBwb3J0IGxpbmsgcG93ZXIgbWFuYWdlbWVudCBFSENJIDEuMSBhZGRlbmR1bSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCmluZGV4IGZhNTliMjYuLmM4ZTM2MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKQEAgLTIxLDEwICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKwogI2RlZmluZSBVTFBJX1ZJRVdQT1JUX09GRlNFVAkweDE3MAogCiBzdHJ1Y3QgZWhjaV9teGNfcHJpdiB7CkBAIC0xMTQsNiArMTE3LDcgQEAKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBpcnEsIHJldDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJc3RydWN0IGVoY2lfbXhjX3ByaXYgKnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7CkBAIC0xNzcsOCArMTgxLDggQEAKIAkJY2xrX2VuYWJsZShwcml2LT5haGJjbGspOwogCX0KIAotCS8qICJkciIgZGV2aWNlIGhhcyBpdHMgb3duIGNsb2NrICovCi0JaWYgKHBkZXYtPmlkID09IDApIHsKKwkvKiAiZHIiIGRldmljZSBoYXMgaXRzIG93biBjbG9jayBvbiBpLk1YNTEgKi8KKwlpZiAoY3B1X2lzX214NTEoKSAmJiAocGRldi0+aWQgPT0gMCkpIHsKIAkJcHJpdi0+cGh5MWNsayA9IGNsa19nZXQoZGV2LCAidXNiX3BoeTEiKTsKIAkJaWYgKElTX0VSUihwcml2LT5waHkxY2xrKSkgewogCQkJcmV0ID0gUFRSX0VSUihwcml2LT5waHkxY2xrKTsKQEAgLTI0MCw2ICsyNDQsMjMgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9hZGQ7CiAKKwlpZiAocGRhdGEtPm90ZykgeworCQkvKgorCQkgKiBlZmlrYW14IGFuZCBlZmlrYXNiIGhhdmUgc29tZSBoYXJkd2FyZSBidWcgd2hpY2ggaXMKKwkJICogcHJldmVudGluZyB1c2IgdG8gd29yayB1bmxlc3MgQ0hSR1ZCVVMgaXMgc2V0LgorCQkgKiBJdCdzIGluIHZpb2xhdGlvbiBvZiBVU0Igc3BlY3MKKwkJICovCisJCWlmIChtYWNoaW5lX2lzX214NTFfZWZpa2FteCgpIHx8IG1hY2hpbmVfaXNfbXg1MV9lZmlrYXNiKCkpIHsKKwkJCWZsYWdzID0gb3RnX2lvX3JlYWQocGRhdGEtPm90ZywgVUxQSV9PVEdfQ1RSTCk7CisJCQlmbGFncyB8PSBVTFBJX09UR19DVFJMX0NIUkdWQlVTOworCQkJcmV0ID0gb3RnX2lvX3dyaXRlKHBkYXRhLT5vdGcsIGZsYWdzLCBVTFBJX09UR19DVFJMKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBzZXQgQ0hSVkJVU1xuIik7CisJCQkJZ290byBlcnJfYWRkOworCQkJfQorCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGVycl9hZGQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggNzYxNzljMy4uYmVkMDdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpAQCAtNDQsMjggKzQ0LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWhjaV9xdWlya19hbWRfU0I4MDAoc3RydWN0IGVoY2lfaGNkICplaGNpKQorc3RhdGljIGludCBlaGNpX3F1aXJrX2FtZF9odWRzb24oc3RydWN0IGVoY2lfaGNkICplaGNpKQogewogCXN0cnVjdCBwY2lfZGV2ICphbWRfc21idXNfZGV2OwogCXU4IHJldiA9IDA7CiAKIAlhbWRfc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVEksIDB4NDM4NSwgTlVMTCk7Ci0JaWYgKCFhbWRfc21idXNfZGV2KQotCQlyZXR1cm4gMDsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7Ci0JaWYgKHJldiA8IDB4NDApIHsKLQkJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7Ci0JCWFtZF9zbWJ1c19kZXYgPSBOVUxMOwotCQlyZXR1cm4gMDsKKwlpZiAoYW1kX3NtYnVzX2RldikgeworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCQlpZiAocmV2IDwgMHg0MCkgeworCQkJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CisJCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJYW1kX3NtYnVzX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELCAweDc4MGIsIE5VTEwpOworCQlpZiAoIWFtZF9zbWJ1c19kZXYpCisJCQlyZXR1cm4gMDsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKKwkJaWYgKHJldiA8IDB4MTEgfHwgcmV2ID4gMHgxOCkgeworCQkJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CisJCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCiAJaWYgKCFhbWRfbmJfZGV2KQogCQlhbWRfbmJfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTUxMCwgTlVMTCk7Ci0JaWYgKCFhbWRfbmJfZGV2KQotCQllaGNpX2VycihlaGNpLCAiUVVJUks6IHVuYWJsZSB0byBnZXQgQU1EIE5CIGRldmljZVxuIik7CiAKLQllaGNpX2luZm8oZWhjaSwgIlFVSVJLOiBFbmFibGUgQU1EIFNCODAwIEwxIGZpeFxuIik7CisJZWhjaV9pbmZvKGVoY2ksICJRVUlSSzogRW5hYmxlIGV4Y2VwdGlvbiBmb3IgQU1EIEh1ZHNvbiBBU1BNXG4iKTsKIAogCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOwogCWFtZF9zbWJ1c19kZXYgPSBOVUxMOwpAQCAtMTMxLDcgKzEzOCw3IEBACiAJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwogCi0JaWYgKGVoY2lfcXVpcmtfYW1kX1NCODAwKGVoY2kpKQorCWlmIChlaGNpX3F1aXJrX2FtZF9odWRzb24oZWhjaSkpCiAJCWVoY2ktPmFtZF9sMV9maXggPSAxOwogCiAJcmV0dmFsID0gZWhjaV9oYWx0KGVoY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9mc2wtbXBoLWRyLW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYwppbmRleCA1NzRiOTllLi43OWE2NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYwpAQCAtMjYyLDE5ICsyNjIsMjQgQEAKIAl9CiB9CiAKLXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIGZzbF91c2IyX21wYzUxMjFfcGQgPSB7CitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjNTEyMV9wZCA9IHsKIAkuYmlnX2VuZGlhbl9kZXNjID0gMSwKIAkuYmlnX2VuZGlhbl9tbWlvID0gMSwKIAkuZXMgPSAxLAorCS5oYXZlX3N5c2lmX3JlZ3MgPSAwLAogCS5sZV9zZXR1cF9idWYgPSAxLAogCS5pbml0ID0gZnNsX3VzYjJfbXBjNTEyMV9pbml0LAogCS5leGl0ID0gZnNsX3VzYjJfbXBjNTEyMV9leGl0LAogfTsKICNlbmRpZiAvKiBDT05GSUdfUFBDX01QQzUxMnggKi8KIAorc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIGZzbF91c2IyX21wYzh4eHhfcGQgPSB7CisJLmhhdmVfc3lzaWZfcmVncyA9IDEsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfdXNiMl9tcGhfZHJfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLW1waCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1tcGgiLCAuZGF0YSA9ICZmc2xfdXNiMl9tcGM4eHh4X3BkLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiLCAuZGF0YSA9ICZmc2xfdXNiMl9tcGM4eHh4X3BkLCB9LAogI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtdXNiMi1kciIsIC5kYXRhID0gJmZzbF91c2IyX21wYzUxMjFfcGQsIH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGRmNTU4ZjYuLjNlODIxMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMzA4LDExICszMDgsOCBAQAogLyogUmluZyB0aGUgaG9zdCBjb250cm9sbGVyIGRvb3JiZWxsIGFmdGVyIHBsYWNpbmcgYSBjb21tYW5kIG9uIHRoZSByaW5nICovCiB2b2lkIHhoY2lfcmluZ19jbWRfZGIoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewotCXUzMiB0ZW1wOwotCiAJeGhjaV9kYmcoeGhjaSwgIi8vIERpbmcgZG9uZyFcbiIpOwotCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKSAmIERCX01BU0s7Ci0JeGhjaV93cml0ZWwoeGhjaSwgdGVtcCB8IERCX1RBUkdFVF9IT1NULCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSk7CisJeGhjaV93cml0ZWwoeGhjaSwgREJfVkFMVUVfSE9TVCwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pOwogCS8qIEZsdXNoIFBDSSBwb3N0ZWQgd3JpdGVzICovCiAJeGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSk7CiB9CkBAIC0zMjIsMjYgKzMxOSwyNCBAQAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXVuc2lnbmVkIGludCBzdHJlYW1faWQpCiB7Ci0Jc3RydWN0IHhoY2lfdmlydF9lcCAqZXA7Ci0JdW5zaWduZWQgaW50IGVwX3N0YXRlOwotCXUzMiBmaWVsZDsKIAlfX3UzMiBfX2lvbWVtICpkYl9hZGRyID0gJnhoY2ktPmRiYS0+ZG9vcmJlbGxbc2xvdF9pZF07CisJc3RydWN0IHhoY2lfdmlydF9lcCAqZXAgPSAmeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKKwl1bnNpZ25lZCBpbnQgZXBfc3RhdGUgPSBlcC0+ZXBfc3RhdGU7CiAKLQllcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOwotCWVwX3N0YXRlID0gZXAtPmVwX3N0YXRlOwogCS8qIERvbid0IHJpbmcgdGhlIGRvb3JiZWxsIGZvciB0aGlzIGVuZHBvaW50IGlmIHRoZXJlIGFyZSBwZW5kaW5nCi0JICogY2FuY2VsbGF0aW9ucyBiZWNhdXNlIHRoZSB3ZSBkb24ndCB3YW50IHRvIGludGVycnVwdCBwcm9jZXNzaW5nLgorCSAqIGNhbmNlbGxhdGlvbnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGludGVycnVwdCBwcm9jZXNzaW5nLgogCSAqIFdlIGRvbid0IHdhbnQgdG8gcmVzdGFydCBhbnkgc3RyZWFtIHJpbmdzIGlmIHRoZXJlJ3MgYSBzZXQgZGVxdWV1ZQogCSAqIHBvaW50ZXIgY29tbWFuZCBwZW5kaW5nIGJlY2F1c2UgdGhlIGRldmljZSBjYW4gY2hvb3NlIHRvIHN0YXJ0IGFueQogCSAqIHN0cmVhbSBvbmNlIHRoZSBlbmRwb2ludCBpcyBvbiB0aGUgSFcgc2NoZWR1bGUuCiAJICogRklYTUUgLSBjaGVjayBhbGwgdGhlIHN0cmVhbSByaW5ncyBmb3IgcGVuZGluZyBjYW5jZWxsYXRpb25zLgogCSAqLwotCWlmICghKGVwX3N0YXRlICYgRVBfSEFMVF9QRU5ESU5HKSAmJiAhKGVwX3N0YXRlICYgU0VUX0RFUV9QRU5ESU5HKQotCQkJJiYgIShlcF9zdGF0ZSAmIEVQX0hBTFRFRCkpIHsKLQkJZmllbGQgPSB4aGNpX3JlYWRsKHhoY2ksIGRiX2FkZHIpICYgREJfTUFTSzsKLQkJZmllbGQgfD0gRVBJX1RPX0RCKGVwX2luZGV4KSB8IFNUUkVBTV9JRF9UT19EQihzdHJlYW1faWQpOwotCQl4aGNpX3dyaXRlbCh4aGNpLCBmaWVsZCwgZGJfYWRkcik7Ci0JfQorCWlmICgoZXBfc3RhdGUgJiBFUF9IQUxUX1BFTkRJTkcpIHx8IChlcF9zdGF0ZSAmIFNFVF9ERVFfUEVORElORykgfHwKKwkgICAgKGVwX3N0YXRlICYgRVBfSEFMVEVEKSkKKwkJcmV0dXJuOworCXhoY2lfd3JpdGVsKHhoY2ksIERCX1ZBTFVFKGVwX2luZGV4LCBzdHJlYW1faWQpLCBkYl9hZGRyKTsKKwkvKiBUaGUgQ1BVIGhhcyBiZXR0ZXIgdGhpbmdzIHRvIGRvIGF0IHRoaXMgcG9pbnQgdGhhbiB3YWl0IGZvciBhCisJICogd3JpdGUtcG9zdGluZyBmbHVzaC4gIEl0J2xsIGdldCB0aGVyZSBzb29uIGVub3VnaC4KKwkgKi8KIH0KIAogLyogUmluZyB0aGUgZG9vcmJlbGwgZm9yIGFueSByaW5ncyB3aXRoIHBlbmRpbmcgVVJCcyAqLwpAQCAtMTE4OCw3ICsxMTgzLDcgQEAKIAogCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArIE5VTV9QT1JUX1JFR1MgKiAocG9ydF9pZCAtIDEpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOwotCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKSkgeworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkgewogCQl4aGNpX2RiZyh4aGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAl9CkBAIC0xNzEwLDggKzE3MDUsNyBAQAogCQkvKiBPdGhlcnMgYWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCiAJCWJyZWFrOwogCX0KLQlkZXZfZGJnKCZ0ZC0+dXJiLT5kZXYtPmRldiwKLQkJCSJlcCAlI3ggLSBhc2tlZCBmb3IgJWQgYnl0ZXMsICIKKwl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gYXNrZWQgZm9yICVkIGJ5dGVzLCAiCiAJCQkiJWQgYnl0ZXMgdW50cmFuc2ZlcnJlZFxuIiwKIAkJCXRkLT51cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjM4OSw3ICsyMzgzLDggQEAKIAl9CiAJeGhjaV9kYmcoeGhjaSwgIlxuIik7CiAJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgImVwICUjeCAtIHVyYiBsZW4gPSAlZCwgc2dsaXN0IHVzZWQsIG51bV90cmJzID0gJWRcbiIsCisJCXhoY2lfZGJnKHhoY2ksICJlcCAlI3ggLSB1cmIgbGVuID0gJWQsIHNnbGlzdCB1c2VkLCAiCisJCQkJIm51bV90cmJzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCQludW1fdHJicyk7CkBAIC0yNDE0LDE0ICsyNDA5LDE3IEBACiAKIHN0YXRpYyB2b2lkIGdpdmViYWNrX2ZpcnN0X3RyYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIHVuc2lnbmVkIGludCBzdHJlYW1faWQsIGludCBzdGFydF9jeWNsZSwKLQkJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnN0YXJ0X3RyYiwgc3RydWN0IHhoY2lfdGQgKnRkKQorCQlzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiAqc3RhcnRfdHJiKQogewogCS8qCiAJICogUGFzcyBhbGwgdGhlIFRSQnMgdG8gdGhlIGhhcmR3YXJlIGF0IG9uY2UgYW5kIG1ha2Ugc3VyZSB0aGlzIHdyaXRlCiAJICogaXNuJ3QgcmVvcmRlcmVkLgogCSAqLwogCXdtYigpOwotCXN0YXJ0X3RyYi0+ZmllbGRbM10gfD0gc3RhcnRfY3ljbGU7CisJaWYgKHN0YXJ0X2N5Y2xlKQorCQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOworCWVsc2UKKwkJc3RhcnRfdHJiLT5maWVsZFszXSAmPSB+MHgxOwogCXhoY2lfcmluZ19lcF9kb29yYmVsbCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgc3RyZWFtX2lkKTsKIH0KIApAQCAtMjQ0OSw3ICsyNDQ3LDcgQEAKIAkgKiB0byBzZXQgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgKG9uY2UgdGhlIEFQSSBpcyBhZGRlZCkuCiAJICovCiAJaWYgKHhoY2lfaW50ZXJ2YWwgIT0gZXBfaW50ZXJ2YWwpIHsKLQkJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiRHJpdmVyIHVzZXMgZGlmZmVyZW50IGludGVydmFsIgogCQkJCQkiICglZCBtaWNyb2ZyYW1lJXMpIHRoYW4geEhDSSAiCiAJCQkJCSIoJWQgbWljcm9mcmFtZSVzKVxuIiwKQEAgLTI1NTEsOSArMjU0OSwxMSBAQAogCQl1MzIgcmVtYWluZGVyID0gMDsKIAogCQkvKiBEb24ndCBjaGFuZ2UgdGhlIGN5Y2xlIGJpdCBvZiB0aGUgZmlyc3QgVFJCIHVudGlsIGxhdGVyICovCi0JCWlmIChmaXJzdF90cmIpCisJCWlmIChmaXJzdF90cmIpIHsKIAkJCWZpcnN0X3RyYiA9IGZhbHNlOwotCQllbHNlCisJCQlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJCQlmaWVsZCB8PSAweDE7CisJCX0gZWxzZQogCQkJZmllbGQgfD0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAKIAkJLyogQ2hhaW4gYWxsIHRoZSBUUkJzIHRvZ2V0aGVyOyBjbGVhciB0aGUgY2hhaW4gYml0IGluIHRoZSBsYXN0CkBAIC0yNjI1LDcgKzI2MjUsNyBAQAogCiAJY2hlY2tfdHJiX21hdGgodXJiLCBudW1fdHJicywgcnVubmluZ190b3RhbCk7CiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjcxLDcgKzI2NzEsOCBAQAogCS8qIEZJWE1FOiB0aGlzIGRvZXNuJ3QgZGVhbCB3aXRoIFVSQl9aRVJPX1BBQ0tFVCAtIG5lZWQgb25lIG1vcmUgKi8KIAogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIGFkZHIgPSAlI2xseCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwgIgorCQkJCSJhZGRyID0gJSNsbHgsIG51bV90cmJzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yNzExLDkgKzI3MTIsMTEgQEAKIAkJZmllbGQgPSAwOwogCiAJCS8qIERvbid0IGNoYW5nZSB0aGUgY3ljbGUgYml0IG9mIHRoZSBmaXJzdCBUUkIgdW50aWwgbGF0ZXIgKi8KLQkJaWYgKGZpcnN0X3RyYikKKwkJaWYgKGZpcnN0X3RyYikgewogCQkJZmlyc3RfdHJiID0gZmFsc2U7Ci0JCWVsc2UKKwkJCWlmIChzdGFydF9jeWNsZSA9PSAwKQorCQkJCWZpZWxkIHw9IDB4MTsKKwkJfSBlbHNlCiAJCQlmaWVsZCB8PSBlcF9yaW5nLT5jeWNsZV9zdGF0ZTsKIAogCQkvKiBDaGFpbiBhbGwgdGhlIFRSQnMgdG9nZXRoZXI7IGNsZWFyIHRoZSBjaGFpbiBiaXQgaW4gdGhlIGxhc3QKQEAgLTI3NTcsNyArMjc2MCw3IEBACiAKIAljaGVja190cmJfbWF0aCh1cmIsIG51bV90cmJzLCBydW5uaW5nX3RvdGFsKTsKIAlnaXZlYmFja19maXJzdF90cmIoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkLAotCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYiwgdGQpOworCQkJc3RhcnRfY3ljbGUsIHN0YXJ0X3RyYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MTgsMTMgKzI4MjEsMTcgQEAKIAkvKiBRdWV1ZSBzZXR1cCBUUkIgLSBzZWUgc2VjdGlvbiA2LjQuMS4yLjEgKi8KIAkvKiBGSVhNRSBiZXR0ZXIgd2F5IHRvIHRyYW5zbGF0ZSBzZXR1cF9wYWNrZXQgaW50byB0d28gdTMyIGZpZWxkcz8gKi8KIAlzZXR1cCA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCWZpZWxkID0gMDsKKwlmaWVsZCB8PSBUUkJfSURUIHwgVFJCX1RZUEUoVFJCX1NFVFVQKTsKKwlpZiAoc3RhcnRfY3ljbGUgPT0gMCkKKwkJZmllbGQgfD0gMHgxOwogCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgdHJ1ZSwKIAkJCS8qIEZJWE1FIGVuZGlhbm5lc3MgaXMgcHJvYmFibHkgZ29pbmcgdG8gYml0ZSBteSBhc3MgaGVyZS4gKi8KIAkJCXNldHVwLT5iUmVxdWVzdFR5cGUgfCBzZXR1cC0+YlJlcXVlc3QgPDwgOCB8IHNldHVwLT53VmFsdWUgPDwgMTYsCiAJCQlzZXR1cC0+d0luZGV4IHwgc2V0dXAtPndMZW5ndGggPDwgMTYsCiAJCQlUUkJfTEVOKDgpIHwgVFJCX0lOVFJfVEFSR0VUKDApLAogCQkJLyogSW1tZWRpYXRlIGRhdGEgaW4gcG9pbnRlciAqLwotCQkJVFJCX0lEVCB8IFRSQl9UWVBFKFRSQl9TRVRVUCkpOworCQkJZmllbGQpOwogCiAJLyogSWYgdGhlcmUncyBkYXRhLCBxdWV1ZSBkYXRhIFRSQnMgKi8KIAlmaWVsZCA9IDA7CkBAIC0yODU5LDcgKzI4NjYsNyBAQAogCQkJZmllbGQgfCBUUkJfSU9DIHwgVFJCX1RZUEUoVFJCX1NUQVRVUykgfCBlcF9yaW5nLT5jeWNsZV9zdGF0ZSk7CiAKIAlnaXZlYmFja19maXJzdF90cmIoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIDAsCi0JCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiLCB0ZCk7CisJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkwMCw2ICsyOTA3LDcgQEAKIAlpbnQgcnVubmluZ190b3RhbCwgdHJiX2J1ZmZfbGVuLCB0ZF9sZW4sIHRkX3JlbWFpbl9sZW4sIHJldDsKIAl1NjQgc3RhcnRfYWRkciwgYWRkcjsKIAlpbnQgaSwgajsKKwlib29sIG1vcmVfdHJic19jb21pbmc7CiAKIAllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCkBAIC0yOTEwLDcgKzI5MTgsNyBAQAogCX0KIAogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIgorCQl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gdXJiIGxlbiA9ICUjeCAoJWQpLCIKIAkJCQkiIGFkZHIgPSAlI2xseCwgbnVtX3RkcyA9ICVkXG4iLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yOTUwLDcgKzI5NTgsMTAgQEAKIAkJCQlmaWVsZCB8PSBUUkJfVFlQRShUUkJfSVNPQyk7CiAJCQkJLyogQXNzdW1lIFVSQl9JU09fQVNBUCBpcyBzZXQgKi8KIAkJCQlmaWVsZCB8PSBUUkJfU0lBOwotCQkJCWlmIChpID4gMCkKKwkJCQlpZiAoaSA9PSAwKSB7CisJCQkJCWlmIChzdGFydF9jeWNsZSA9PSAwKQorCQkJCQkJZmllbGQgfD0gMHgxOworCQkJCX0gZWxzZQogCQkJCQlmaWVsZCB8PSBlcF9yaW5nLT5jeWNsZV9zdGF0ZTsKIAkJCQlmaXJzdF90cmIgPSBmYWxzZTsKIAkJCX0gZWxzZSB7CkBAIC0yOTY1LDkgKzI5NzYsMTEgQEAKIAkJCSAqLwogCQkJaWYgKGogPCB0cmJzX3Blcl90ZCAtIDEpIHsKIAkJCQlmaWVsZCB8PSBUUkJfQ0hBSU47CisJCQkJbW9yZV90cmJzX2NvbWluZyA9IHRydWU7CiAJCQl9IGVsc2UgewogCQkJCXRkLT5sYXN0X3RyYiA9IGVwX3JpbmctPmVucXVldWU7CiAJCQkJZmllbGQgfD0gVFJCX0lPQzsKKwkJCQltb3JlX3RyYnNfY29taW5nID0gZmFsc2U7CiAJCQl9CiAKIAkJCS8qIENhbGN1bGF0ZSBUUkIgbGVuZ3RoICovCkBAIC0yOTgwLDcgKzI5OTMsNyBAQAogCQkJbGVuZ3RoX2ZpZWxkID0gVFJCX0xFTih0cmJfYnVmZl9sZW4pIHwKIAkJCQlyZW1haW5kZXIgfAogCQkJCVRSQl9JTlRSX1RBUkdFVCgwKTsKLQkJCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgZmFsc2UsCisJCQlxdWV1ZV90cmIoeGhjaSwgZXBfcmluZywgZmFsc2UsIG1vcmVfdHJic19jb21pbmcsCiAJCQkJbG93ZXJfMzJfYml0cyhhZGRyKSwKIAkJCQl1cHBlcl8zMl9iaXRzKGFkZHIpLAogCQkJCWxlbmd0aF9maWVsZCwKQEAgLTMwMDMsMTAgKzMwMTYsOCBAQAogCQl9CiAJfQogCi0Jd21iKCk7Ci0Jc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKLQotCXhoY2lfcmluZ19lcF9kb29yYmVsbCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQpOworCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCisJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA2NCw3ICszMDc1LDcgQEAKIAkgKiB0byBzZXQgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgKG9uY2UgdGhlIEFQSSBpcyBhZGRlZCkuCiAJICovCiAJaWYgKHhoY2lfaW50ZXJ2YWwgIT0gZXBfaW50ZXJ2YWwpIHsKLQkJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiRHJpdmVyIHVzZXMgZGlmZmVyZW50IGludGVydmFsIgogCQkJCQkiICglZCBtaWNyb2ZyYW1lJXMpIHRoYW4geEhDSSAiCiAJCQkJCSIoJWQgbWljcm9mcmFtZSVzKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKaW5kZXggNDVlNGEzMS4uMzRjZjRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKQEAgLTIyNiw3ICsyMjYsOCBAQAogc3RhdGljIGludCB4aGNpX3NldHVwX21zaXgoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewogCWludCBpLCByZXQgPSAwOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAogCS8qCiAJICogY2FsY3VsYXRlIG51bWJlciBvZiBtc2kteCB2ZWN0b3JzIHN1cHBvcnRlZC4KQEAgLTI2NSw2ICsyNjYsNyBAQAogCQkJZ290byBkaXNhYmxlX21zaXg7CiAJfQogCisJaGNkLT5tc2l4X2VuYWJsZWQgPSAxOwogCXJldHVybiByZXQ7CiAKIGRpc2FibGVfbXNpeDoKQEAgLTI4MCw3ICsyODIsOCBAQAogLyogRnJlZSBhbnkgSVJRcyBhbmQgZGlzYWJsZSBNU0ktWCAqLwogc3RhdGljIHZvaWQgeGhjaV9jbGVhbnVwX21zaXgoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAogCXhoY2lfZnJlZV9pcnEoeGhjaSk7CiAKQEAgLTI5Miw2ICsyOTUsNyBAQAogCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CiAJfQogCisJaGNkLT5tc2l4X2VuYWJsZWQgPSAwOwogCXJldHVybjsKIH0KIApAQCAtNTA4LDkgKzUxMiwxMCBAQAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKIAl4aGNpX3Jlc2V0KHhoY2kpOwotCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKKwl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKKwogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJLyogVGVsbCB0aGUgZXZlbnQgcmluZyBwb2xsIGZ1bmN0aW9uIG5vdCB0byByZXNjaGVkdWxlICovCiAJeGhjaS0+em9tYmllID0gMTsKQEAgLTU0NCw5ICs1NDksMTAgQEAKIAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CisKIAl4aGNpX2RiZyh4aGNpLCAieGhjaV9zaHV0ZG93biBjb21wbGV0ZWQgLSBzdGF0dXMgPSAleFxuIiwKIAkJICAgIHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cykpOwogfQpAQCAtNjQ3LDYgKzY1Myw3IEBACiAJaW50CQkJcmMgPSAwOwogCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CiAJdTMyCQkJY29tbWFuZDsKKwlpbnQJCQlpOwogCiAJc3Bpbl9sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKQEAgLTY3NywxMCArNjg0LDE1IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkvKiBzdGVwIDU6IHJlbW92ZSBjb3JlIHdlbGwgcG93ZXIgKi8KLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJLyogc3RlcCA1OiByZW1vdmUgY29yZSB3ZWxsIHBvd2VyICovCisJLyogc3luY2hyb25pemUgaXJxIHdoZW4gdXNpbmcgTVNJLVggKi8KKwlpZiAoeGhjaS0+bXNpeF9lbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCB4aGNpLT5tc2l4X2NvdW50OyBpKyspCisJCQlzeW5jaHJvbml6ZV9pcnEoeGhjaS0+bXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJfQorCiAJcmV0dXJuIHJjOwogfQogCkBAIC02OTQsNyArNzA2LDYgQEAKIHsKIAl1MzIJCQljb21tYW5kLCB0ZW1wID0gMDsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOwotCXN0cnVjdCBwY2lfZGV2CQkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCWludAlvbGRfc3RhdGUsIHJldHZhbDsKIAogCW9sZF9zdGF0ZSA9IGhjZC0+c3RhdGU7CkBAIC03MjksOSArNzQwLDggQEAKIAkJeGhjaV9kYmcoeGhjaSwgIlN0b3AgSENEXG4iKTsKIAkJeGhjaV9oYWx0KHhoY2kpOwogCQl4aGNpX3Jlc2V0KHhoY2kpOwotCQlpZiAoaGliZXJuYXRlZCkKLQkJCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOworCQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJCS8qIFRlbGwgdGhlIGV2ZW50IHJpbmcgcG9sbCBmdW5jdGlvbiBub3QgdG8gcmVzY2hlZHVsZSAqLwpAQCAtNzY1LDMwICs3NzUsNiBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7Ci0JLyogUmUtc2V0dXAgTVNJLVggKi8KLQlpZiAoaGNkLT5pcnEpCi0JCWZyZWVfaXJxKGhjZC0+aXJxLCBoY2QpOwotCWhjZC0+aXJxID0gLTE7Ci0KLQlyZXR2YWwgPSB4aGNpX3NldHVwX21zaXgoeGhjaSk7Ci0JaWYgKHJldHZhbCkKLQkJLyogZmFsbCBiYWNrIHRvIG1zaSovCi0JCXJldHZhbCA9IHhoY2lfc2V0dXBfbXNpKHhoY2kpOwotCi0JaWYgKHJldHZhbCkgewotCQkvKiBmYWxsIGJhY2sgdG8gbGVnYWN5IGludGVycnVwdCovCi0JCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgJnVzYl9oY2RfaXJxLCBJUlFGX1NIQVJFRCwKLQkJCQkJaGNkLT5pcnFfZGVzY3IsIGhjZCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXhoY2lfZXJyKHhoY2ksICJyZXF1ZXN0IGludGVycnVwdCAlZCBmYWlsZWRcbiIsCi0JCQkJCXBkZXYtPmlycSk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JCWhjZC0+aXJxID0gcGRldi0+aXJxOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCS8qIHN0ZXAgNDogc2V0IFJ1bi9TdG9wIGJpdCAqLwogCWNvbW1hbmQgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5jb21tYW5kKTsKIAljb21tYW5kIHw9IENNRF9SVU47CkBAIC0yNDQ1LDggKzI0MzEsMTIgQEAKIAkJeGhjaV9lcnIoeGhjaSwgIkVycm9yIHdoaWxlIGFzc2lnbmluZyBkZXZpY2Ugc2xvdCBJRFxuIik7CiAJCXJldHVybiAwOwogCX0KLQkvKiB4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKCkgZG9lcyBub3QgdG91Y2ggcmluZ3M7IG5vIG5lZWQgdG8gbG9jayAqLwotCWlmICgheGhjaV9hbGxvY192aXJ0X2RldmljZSh4aGNpLCB4aGNpLT5zbG90X2lkLCB1ZGV2LCBHRlBfS0VSTkVMKSkgeworCS8qIHhoY2lfYWxsb2NfdmlydF9kZXZpY2UoKSBkb2VzIG5vdCB0b3VjaCByaW5nczsgbm8gbmVlZCB0byBsb2NrLgorCSAqIFVzZSBHRlBfTk9JTywgc2luY2UgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20KKwkgKiB4aGNpX2Rpc2NvdmVyX29yX3Jlc2V0X2RldmljZSgpLCB3aGljaCBtYXkgYmUgY2FsbGVkIGFzIHBhcnQgb2YKKwkgKiBtYXNzIHN0b3JhZ2UgZHJpdmVyIGVycm9yIGhhbmRsaW5nLgorCSAqLworCWlmICgheGhjaV9hbGxvY192aXJ0X2RldmljZSh4aGNpLCB4aGNpLT5zbG90X2lkLCB1ZGV2LCBHRlBfTk9JTykpIHsKIAkJLyogRGlzYWJsZSBzbG90LCBpZiB3ZSBjYW4gZG8gaXQgd2l0aG91dCBtZW0gYWxsb2MgKi8KIAkJeGhjaV93YXJuKHhoY2ksICJDb3VsZCBub3QgYWxsb2NhdGUgeEhDSSBVU0IgZGV2aWNlIGRhdGEgc3RydWN0dXJlc1xuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCmluZGV4IDE3MGMzNjcuLjdmMjM2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC00MzYsMjIgKzQzNiwxOCBAQAogLyoqCiAgKiBzdHJ1Y3QgZG9vcmJlbGxfYXJyYXkKICAqCisgKiBCaXRzICAwIC0gIDc6IEVuZHBvaW50IHRhcmdldAorICogQml0cyAgOCAtIDE1OiBSc3ZkWgorICogQml0cyAxNiAtIDMxOiBTdHJlYW0gSUQKKyAqCiAgKiBTZWN0aW9uIDUuNgogICovCiBzdHJ1Y3QgeGhjaV9kb29yYmVsbF9hcnJheSB7CiAJdTMyCWRvb3JiZWxsWzI1Nl07CiB9OwogCi0jZGVmaW5lCURCX1RBUkdFVF9NQVNLCQkweEZGRkZGRjAwCi0jZGVmaW5lCURCX1NUUkVBTV9JRF9NQVNLCTB4MDAwMEZGRkYKLSNkZWZpbmUJREJfVEFSR0VUX0hPU1QJCTB4MAotI2RlZmluZQlEQl9TVFJFQU1fSURfSE9TVAkweDAKLSNkZWZpbmUJREJfTUFTSwkJCSgweGZmIDw8IDgpCi0KLS8qIEVuZHBvaW50IFRhcmdldCAtIGJpdHMgMDo3ICovCi0jZGVmaW5lIEVQSV9UT19EQihwKQkJKCgocCkgKyAxKSAmIDB4ZmYpCi0jZGVmaW5lIFNUUkVBTV9JRF9UT19EQihwKQkoKChwKSAmIDB4ZmZmZikgPDwgMTYpCi0KKyNkZWZpbmUgREJfVkFMVUUoZXAsIHN0cmVhbSkJKCgoKGVwKSArIDEpICYgMHhmZikgfCAoKHN0cmVhbSkgPDwgMTYpKQorI2RlZmluZSBEQl9WQUxVRV9IT1NUCQkweDAwMDAwMDAwCiAKIC8qKgogICogc3RydWN0IHhoY2lfcHJvdG9jb2xfY2FwcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKaW5kZXggMTczMmQ5Yi4uMTYxNmFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNoYW5nZV9jb2xvcihzdHJ1Y3QgdXNiX2xlZCAqbGVkKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCiAJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCmluZGV4IDRmZjIxNTguLmY3YTIwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpAQCAtNzc2LDcgKzc3Niw2IEBACiAJeyBVU0JfREVWSUNFKDB4MDU1NywgMHgyMDAxKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MjksIDB4MTI4NCkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxMjkzLCAweDAwMDIpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTI5MywgMHgwMDAyKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAwMikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCmluZGV4IGU3MDAxNGEuLjhhY2YxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpAQCAtMTMyLDYgKzEzMiw4IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBub3ApOwogCisJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZub3AtPm90Zy5ub3RpZmllcik7CisKIAlyZXR1cm4gMDsKIGV4aXQ6CiAJa2ZyZWUobm9wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy91bHBpLmMgYi9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCmluZGV4IDA1OWQ5YWMuLjc3MGQ3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL3VscGkuYwpAQCAtNDUsNyArNDUsNyBAQAogLyogVUxQSSBoYXJkY29kZWQgSURzLCB1c2VkIGZvciBwcm9iaW5nICovCiBzdGF0aWMgc3RydWN0IHVscGlfaW5mbyB1bHBpX2lkc1tdID0gewogCVVMUElfSU5GTyhVTFBJX0lEKDB4MDRjYywgMHgxNTA0KSwgIk5YUCBJU1AxNTA0IiksCi0JVUxQSV9JTkZPKFVMUElfSUQoMHgwNDI0LCAweDAwMDYpLCAiU01TQyBVU0IzMzE5IiksCisJVUxQSV9JTkZPKFVMUElfSUQoMHgwNDI0LCAweDAwMDYpLCAiU01TQyBVU0IzMzF4IiksCiB9OwogCiBzdGF0aWMgaW50IHVscGlfc2V0X290Z19mbGFncyhzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCmluZGV4IDYzZjdjYzQuLjdiODgxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCkBAIC00ODYsMTIgKzQ4NiwyMiBAQAogCWlmIChhY3R1YWxfbGVuZ3RoID49IDQpIHsKIAkJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXU4IHByZXZfbGluZV9zdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlwcml2LT5saW5lX3N0YXR1cyA9ICh+KGRhdGFbMl0pKSAmIENIMzQxX0JJVFNfTU9ERU1fU1RBVDsKIAkJaWYgKChkYXRhWzFdICYgQ0gzNDFfTVVMVF9TVEFUKSkKIAkJCXByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2UgPSAxOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKChwcml2LT5saW5lX3N0YXR1cyBeIHByZXZfbGluZV9zdGF0dXMpICYgQ0gzNDFfQklUX0RDRCkgeworCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQkJaWYgKHR0eSkKKwkJCQl1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIHR0eSwKKwkJCQkJICAgIHByaXYtPmxpbmVfc3RhdHVzICYgQ0gzNDFfQklUX0RDRCk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDhkNzczMWQuLjczNWVhMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIHN0YXRpYyB2b2lkIGNwMjEweF9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50KTsKIHN0YXRpYyBpbnQgY3AyMTB4X3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKik7CiBzdGF0aWMgdm9pZCBjcDIxMHhfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwLCBpbnQgb24pOwotc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCk7CiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKQEAgLTg3LDcgKzg2LDYgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxMTUpIH0sIC8qIEFyeWdvbiBORkMvTWlmYXJlIFJlYWRlciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODEzRCkgfSwgLyogQnVybnNpZGUgVGVsZWNvbSBEZXNrbW9iaWxlICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTNGKSB9LCAvKiBUYW1zIE1hc3RlciBFYXN5IENvbnRyb2wgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNDkpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gQ29tcHV0ZXJpemVkIEJhdHRlcnkgQW5hbHl6ZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNEEpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gUklHYmxhc3RlciBQJlAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNEIpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gUklHdGFsayAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE1NikgfSwgLyogQiZHIEgzMDAwIGxpbmsgY2FibGUgKi8KQEAgLTExMCw3ICsxMDgsOSBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODM0MSkgfSwgLyogU2llbWVucyBNQzM1UFUgR1BSUyBNb2RlbSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODM4MikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzQTgpIH0sIC8qIEFtYmVyIFdpcmVsZXNzIEFNQjI1NjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzRDgpIH0sIC8qIERla1RlYyBEVEEgUGx1cyBWSEYvVUhGIEJvb3N0ZXIvQXR0ZW51YXRvciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQxMSkgfSwgLyogS3lvY2VyYSBHUFMgTW9kdWxlICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDE4KSB9LCAvKiBJUlogQXV0b21hdGlvbiBUZWxlcG9ydCBTRy0xMCBHU00vR1BSUyBNb2RlbSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQ2RSkgfSwgLyogQkVJIFVTQiBTZW5zb3IgSW50ZXJmYWNlIChWQ1ApICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDc3KSB9LCAvKiBCYWxsdWZmIFJGSUQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KQEAgLTE2NSw4ICsxNjUsNyBAQAogCS50aW9jbWdldCAJCT0gY3AyMTB4X3Rpb2NtZ2V0LAogCS50aW9jbXNldAkJPSBjcDIxMHhfdGlvY21zZXQsCiAJLmF0dGFjaAkJCT0gY3AyMTB4X3N0YXJ0dXAsCi0JLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMsCi0JLmNhcnJpZXJfcmFpc2VkCQk9IGNwMjEweF9jYXJyaWVyX3JhaXNlZAorCS5kdHJfcnRzCQk9IGNwMjEweF9kdHJfcnRzCiB9OwogCiAvKiBDb25maWcgcmVxdWVzdCB0eXBlcyAqLwpAQCAtNzY1LDE1ICs3NjQsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgY3AyMTB4X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnApCi17Ci0JdW5zaWduZWQgaW50IGNvbnRyb2w7Ci0JY3AyMTB4X2dldF9jb25maWcocCwgQ1AyMTBYX0dFVF9NRE1TVFMsICZjb250cm9sLCAxKTsKLQlpZiAoY29udHJvbCAmIENPTlRST0xfRENEKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IGI5MjA3MGMuLjY2NmU1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTQ1NSw3ICs0NTUsNiBAQAogc3RhdGljIGludCBkaWdpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgZGlnaV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGRpZ2lfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwogc3RhdGljIGludCBkaWdpX3N0YXJ0dXBfZGV2aWNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBkaWdpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CkBAIC01MTEsNyArNTEwLDYgQEAKIAkub3BlbiA9CQkJCWRpZ2lfb3BlbiwKIAkuY2xvc2UgPQkJCWRpZ2lfY2xvc2UsCiAJLmR0cl9ydHMgPQkJCWRpZ2lfZHRyX3J0cywKLQkuY2Fycmllcl9yYWlzZWQgPQkJZGlnaV9jYXJyaWVyX3JhaXNlZCwKIAkud3JpdGUgPQkJCWRpZ2lfd3JpdGUsCiAJLndyaXRlX3Jvb20gPQkJCWRpZ2lfd3JpdGVfcm9vbSwKIAkud3JpdGVfYnVsa19jYWxsYmFjayA9IAkJZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrLApAQCAtMTMzOSwxNCArMTMzNyw2IEBACiAJZGlnaV9zZXRfbW9kZW1fc2lnbmFscyhwb3J0LCBvbiAqIChUSU9DTV9EVFJ8VElPQ01fUlRTKSwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgZGlnaV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaWYgKHByaXYtPmRwX21vZGVtX3NpZ25hbHMgJiBUSU9DTV9DRCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggYTI2NjhkMC4uNDc4N2MwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTY3Niw3ICs2NzYsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUENESl9EQUMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BU0tfUkRSNDAwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoSUNPTV9JRDFfVklELCBJQ09NX0lEMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9PUENfVV9VQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMkMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyVlRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDR19IRkRVQUxfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RIT1JMQUJTX1BJRCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCBiZjA4NjcyLi5lZDE2MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC01NjksMTEgKzU2OSwyMyBAQAogI2RlZmluZSBPQ1RfVVMxMDFfUElECQkweDA0MjEJLyogT0NUIFVTMTAxIFVTQiB0byBSUy0yMzIgKi8KIAogLyoKLSAqIEljb20gSUQtMSBkaWdpdGFsIHRyYW5zY2VpdmVyCisgKiBEZWZpbml0aW9ucyBmb3IgSWNvbSBJbmMuIGRldmljZXMKICAqLwotCi0jZGVmaW5lIElDT01fSUQxX1ZJRCAgICAgICAgICAgIDB4MEMyNgotI2RlZmluZSBJQ09NX0lEMV9QSUQgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgSUNPTV9WSUQJCTB4MEMyNiAvKiBJY29tIHZlbmRvciBJRCAqLworLyogTm90ZTogSUQtMSBpcyBhIGNvbW11bmljYXRpb25zIHRyYW5jZWl2ZXIgZm9yIEhBTS1yYWRpbyBvcGVyYXRvcnMgKi8KKyNkZWZpbmUgSUNPTV9JRF8xX1BJRAkJMHgwMDA0IC8qIElELTEgVVNCIHRvIFJTLTIzMiAqLworLyogTm90ZTogT1BDIGlzIGFuIE9wdGlvbmFsIGNhYmxlIHRvIGNvbm5lY3QgYW4gSWNvbSBUcmFuY2VpdmVyICovCisjZGVmaW5lIElDT01fT1BDX1VfVUNfUElECTB4MDAxOCAvKiBPUEMtNDc4VUMsIE9QQy0xMTIyVSBjbG9uaW5nIGNhYmxlICovCisvKiBOb3RlOiBJRC1SUCogZGV2aWNlcyBhcmUgSWNvbSBSZXBlYXRlciBEZXZpY2VzIGZvciBIQU0tcmFkaW8gKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDJDMV9QSUQJMHgwMDA5IC8qIElELVJQMkMgQXNzZXQgMSB0byBSUy0yMzIgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDJDMl9QSUQJMHgwMDBBIC8qIElELVJQMkMgQXNzZXQgMiB0byBSUy0yMzIgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDJEX1BJRAkweDAwMEIgLyogSUQtUlAyRCBjb25maWd1cmF0aW9uIHBvcnQqLworI2RlZmluZSBJQ09NX0lEX1JQMlZUX1BJRAkweDAwMEMgLyogSUQtUlAyViBUcmFuc21pdCBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQMlZSX1BJRAkweDAwMEQgLyogSUQtUlAyViBSZWNlaXZlIGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlA0S1ZUX1BJRAkweDAwMTAgLyogSUQtUlA0MDAwViBUcmFuc21pdCBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQNEtWUl9QSUQJMHgwMDExIC8qIElELVJQNDAwMFYgUmVjZWl2ZSBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQMktWVF9QSUQJMHgwMDEyIC8qIElELVJQMjAwMFYgVHJhbnNtaXQgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDJLVlJfUElECTB4MDAxMyAvKiBJRC1SUDIwMDBWIFJlY2VpdmUgY29uZmlnIHBvcnQgKi8KIAogLyoKICAqIEdOIE90b21ldHJpY3MgKGh0dHA6Ly93d3cub3RvbWV0cmljcy5jb20pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCBlNjgzM2UyLi5lNGRiNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTQ3OSw2ICs0NzksMjYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKTsKIAorLyoqCisgKgl1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlIC0gaGFuZGxlIGEgY2hhbmdlIG9mIGNhcnJpZXIgZGV0ZWN0IHN0YXRlCisgKglAcG9ydDogdXNiX3NlcmlhbF9wb3J0IHN0cnVjdHVyZSBmb3IgdGhlIG9wZW4gcG9ydAorICoJQHR0eTogdHR5X3N0cnVjdCBzdHJ1Y3R1cmUgZm9yIHRoZSBwb3J0CisgKglAc3RhdHVzOiBuZXcgY2FycmllciBkZXRlY3Qgc3RhdHVzLCBub256ZXJvIGlmIGFjdGl2ZQorICovCit2b2lkIHVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqdXNiX3BvcnQsCisJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmdXNiX3BvcnQtPnBvcnQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgc3RhdHVzICVkIiwgX19mdW5jX18sIHVzYl9wb3J0LT5udW1iZXIsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJZWxzZSBpZiAodHR5ICYmICFDX0NMT0NBTCh0dHkpKQorCQl0dHlfaGFuZ3VwKHR0eSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKTsKKwogaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCmluZGV4IDZhYjJhM2YuLjE3OGIyMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKQEAgLTE5OSw2ICsxOTksNyBAQAogCQkubmFtZQkJPSAiZXBpYyIsCiAJfSwKIAkuZGVzY3JpcHRpb24JCT0gIkVQaUMgZGV2aWNlIiwKKwkudXNiX2RyaXZlcgkJPSAmaW9fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBFcGljX3BvcnRfaWRfdGFibGUsCiAJLm51bV9wb3J0cwkJPSAxLAogCS5vcGVuCQkJPSBlZGdlX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCmluZGV4IDEyZWQ1OTQuLjk5Yjk3YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCkBAIC0xMjc1LDYgKzEyNzUsNyBAQAogCQkgICAubmFtZSA9ICJpdXVfcGhvZW5peCIsCiAJCSAgIH0sCiAJLmlkX3RhYmxlID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPSAmaXV1X2RyaXZlciwKIAkubnVtX3BvcnRzID0gMSwKIAkuYnVsa19pbl9zaXplID0gNTEyLAogCS5idWxrX291dF9zaXplID0gNTEyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKaW5kZXggMmQ4YmFmNi4uY2UxMzRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCkBAIC01NDYsNiArNTQ2LDcgQEAKIAkJLm5hbWUJCT0gImtleXNwYW5fbm9fZmlybSIsCiAJfSwKIAkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gLSAod2l0aG91dCBmaXJtd2FyZSkiLAorCS51c2JfZHJpdmVyCQk9ICZrZXlzcGFuX2RyaXZlciwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl9wcmVfaWRzLAogCS5udW1fcG9ydHMJCT0gMSwKIAkuYXR0YWNoCQkJPSBrZXlzcGFuX2Zha2Vfc3RhcnR1cCwKQEAgLTU1Nyw2ICs1NTgsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl8xIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAxIHBvcnQgYWRhcHRlciIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuXzFwb3J0X2lkcywKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4JCQk9IGtleXNwYW5fb3BlbiwKQEAgLTU3OSw2ICs1ODEsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl8yIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAyIHBvcnQgYWRhcHRlciIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuXzJwb3J0X2lkcywKIAkubnVtX3BvcnRzCQk9IDIsCiAJLm9wZW4JCQk9IGtleXNwYW5fb3BlbiwKQEAgLTYwMSw2ICs2MDQsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl80IiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiA0IHBvcnQgYWRhcHRlciIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuXzRwb3J0X2lkcywKIAkubnVtX3BvcnRzCQk9IDQsCiAJLm9wZW4JCQk9IGtleXNwYW5fb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggYTEwZGQ1Ni4uNTU0YTg2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTY3OSwyMiArNjc5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQga2V5c3Bhbl9wZGFfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXVuc2lnbmVkIGNoYXIgbW9kZW1iaXRzOwotCi0JLyogSWYgd2UgY2FuIHJlYWQgdGhlIG1vZGVtIHN0YXR1cyBhbmQgdGhlIERDRCBpcyBsb3cgdGhlbgotCSAgIGNhcnJpZXIgaXMgbm90IHJhaXNlZCB5ZXQgKi8KLQlpZiAoa2V5c3Bhbl9wZGFfZ2V0X21vZGVtX2luZm8oc2VyaWFsLCAmbW9kZW1iaXRzKSA+PSAwKSB7Ci0JCWlmICghKG1vZGVtYml0cyAmICgxPj42KSkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JLyogQ2FycmllciByYWlzZWQsIG9yIHdlIGZhaWxlZCAoZWcgZGlzY29ubmVjdGVkKSBzbwotCSAgIHByb2dyZXNzIGFjY29yZGluZ2x5ICovCi0JcmV0dXJuIDE7Ci19Ci0KIAogc3RhdGljIGludCBrZXlzcGFuX3BkYV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCkBAIC04ODEsNyArODY1LDYgQEAKIAkuaWRfdGFibGUgPQkJaWRfdGFibGVfc3RkLAogCS5udW1fcG9ydHMgPQkJMSwKIAkuZHRyX3J0cyA9CQlrZXlzcGFuX3BkYV9kdHJfcnRzLAotCS5jYXJyaWVyX3JhaXNlZAk9CWtleXNwYW5fcGRhX2NhcnJpZXJfcmFpc2VkLAogCS5vcGVuID0JCQlrZXlzcGFuX3BkYV9vcGVuLAogCS5jbG9zZSA9CQlrZXlzcGFuX3BkYV9jbG9zZSwKIAkud3JpdGUgPQkJa2V5c3Bhbl9wZGFfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwppbmRleCBjZjE3MTgzLi42NTM0NjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAkJLm5hbWUgPQkJIm1vdG8tbW9kZW0iLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZtb3RvX2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNzQ4Nzc4Mi4uNWY0NjgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMzgyLDcgKzM4MiwxNiBAQAogI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCiAjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKIAotI2RlZmluZSBDSU5URVJJT05fVkVORE9SX0lECQkJMHgwNjgxCisvKiBDaW50ZXJpb24gKGZvcm1lcmx5IFNpZW1lbnMpIHByb2R1Y3RzICovCisjZGVmaW5lIFNJRU1FTlNfVkVORE9SX0lECQkJCTB4MDY4MQorI2RlZmluZSBDSU5URVJJT05fVkVORE9SX0lECQkJCTB4MWUyZAorI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETQkJMHgwMDQ3CisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNTkVUCTB4MDA0MAorI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9IQzI4X01ETQkJMHgwMDRDCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNTkVUCTB4MDA0QSAvKiBzYW1lIGZvciBIQzI4SiAqLworI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9FVTNfRQkJCTB4MDA1MQorI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9FVTNfUAkJCTB4MDA1MgorI2RlZmluZSBDSU5URVJJT05fUFJPRFVDVF9QSDgJCQkweDAwNTMKIAogLyogT2xpdmV0dGkgcHJvZHVjdHMgKi8KICNkZWZpbmUgT0xJVkVUVElfVkVORE9SX0lECQkJMHgwYjNjCkBAIC05NDQsNyArOTUzLDE3IEBACiAJeyBVU0JfREVWSUNFKFBJUkVMTElfVkVORE9SX0lELCBQSVJFTExJX1BST0RVQ1RfMTAwRikgfSwKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDExKX0sCiAJeyBVU0JfREVWSUNFKFBJUkVMTElfVkVORE9SX0lELCBQSVJFTExJX1BST0RVQ1RfMTAxMil9LAotCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCAweDAwNDcpIH0sCisJLyogQ2ludGVyaW9uICovCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0VVM19FKSB9LAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9FVTNfUCkgfSwKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfUEg4KSB9LAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI4X01ETSkgfSwgCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNTkVUKSB9LAorCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE0pIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETU5FVCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNKSB9LCAvKiBIQzI4IGVudW1lcmF0ZXMgd2l0aCBTaWVtZW5zIG9yIENpbnRlcmlvbiBWSUQgZGVwZW5kaW5nIG9uIEZXIHJldmlzaW9uICovCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI4X01ETU5FVCkgfSwKKwogCXsgVVNCX0RFVklDRShPTElWRVRUSV9WRU5ET1JfSUQsIE9MSVZFVFRJX1BST0RVQ1RfT0xJQ0FSRDEwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ0VMT1RfVkVORE9SX0lELCBDRUxPVF9QUk9EVUNUX0NUNjgwTSkgfSwgLyogQ1QtNjUwIENETUEgNDUwIDF4RVZETyBtb2RlbSAqLwogCXsgVVNCX0RFVklDRShPTkRBX1ZFTkRPUl9JRCwgT05EQV9NVDgyNVVQKSB9LCAvKiBPTkRBIE1UODI1VVAgbW9kZW0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCmluZGV4IDViZTg2NmIuLjczNjEzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwpAQCAtMTU3LDYgKzE1Nyw3IEBACiAJCS5uYW1lID0JCSJvdGk2ODU4IiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmb3RpNjg1OF9kcml2ZXIsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5vcGVuID0JCQlvdGk2ODU4X29wZW4sCiAJLmNsb3NlID0JCW90aTY4NThfY2xvc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggOGFlNGM2Yy4uMDhjOTE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtNTAsNiArNTAsNyBAQAogCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9NTVgpIH0sCiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX0dQUlMpIH0sCiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX0hDUjMzMSkgfSwKKwl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfTU9UT1JPTEEpIH0sCiAJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShJT0RBVEFfVkVORE9SX0lELCBJT0RBVEFfUFJPRFVDVF9JRF9SU0FRNSkgfSwKIAl7IFVTQl9ERVZJQ0UoQVRFTl9WRU5ET1JfSUQsIEFURU5fUFJPRFVDVF9JRCkgfSwKQEAgLTY3Nyw5ICs2NzgsMTEgQEAKIHsKIAogCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggc3RhdHVzX2lkeCA9IFVBUlRfU1RBVEU7CiAJdTggbGVuZ3RoID0gVUFSVF9TVEFURSArIDE7CisJdTggcHJldl9saW5lX3N0YXR1czsKIAl1MTYgaWR2LCBpZHA7CiAKIAlpZHYgPSBsZTE2X3RvX2NwdShwb3J0LT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CkBAIC03MDEsMTEgKzcwNCwyMCBAQAogCiAJLyogU2F2ZSBvZmYgdGhlIHVhcnQgc3RhdHVzIGZvciBvdGhlcnMgdG8gbG9vayBhdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJldl9saW5lX3N0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOwogCXByaXYtPmxpbmVfc3RhdHVzID0gZGF0YVtzdGF0dXNfaWR4XTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPmxpbmVfc3RhdHVzICYgVUFSVF9CUkVBS19FUlJPUikKIAkJdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsocG9ydCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwlpZiAoIXR0eSkKKwkJcmV0dXJuOworCWlmICgocHJpdi0+bGluZV9zdGF0dXMgXiBwcmV2X2xpbmVfc3RhdHVzKSAmIFVBUlRfRENEKQorCQl1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIHR0eSwKKwkJCQlwcml2LT5saW5lX3N0YXR1cyAmIFVBUlRfRENEKTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogc3RhdGljIHZvaWQgcGwyMzAzX3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAppbmRleCA0M2ViOWJkLi4xYjAyNWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX01NWAkJMHgwNjEyCiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX0dQUlMJCTB4MDYwOQogI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9IQ1IzMzEJMHgzMzFhCisjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX01PVE9ST0xBCTB4MDMwNwogCiAjZGVmaW5lIEFURU5fVkVORE9SX0lECQkweDA1NTcKICNkZWZpbmUgQVRFTl9WRU5ET1JfSUQyCQkweDA1NDcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMKaW5kZXggMjE0YTNlNS4uMzBiNzNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfVjEJCTB4MzcxMgogI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMgkJMHgzNzE0CiAjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X0FMTFRFTAkJMHgzNzE1CisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9VTUwyOTBfVlpXCQkweDM3MTgKIAogLyogQ01PVEVDSCBkZXZpY2VzICovCiAjZGVmaW5lIENNT1RFQ0hfVkVORE9SX0lECQkJMHgxNmQ4CkBAIC02Niw2ICs2Nyw3IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhMR19WRU5ET1JfSUQsIExHX1BST0RVQ1RfVlg0NDAwXzYwMDAsIDB4ZmYsIDB4ZmYsIDB4MDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU5ZT19WRU5ET1JfSUQsIFNBTllPX1BST0RVQ1RfS0FUQU5BX0xYLCAweGZmLCAweGZmLCAweDAwKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfUFJPRFVDVF9VNTIwLCAweGZmLCAweDAwLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVRTVEFSQ09NX1ZFTkRPUl9JRCwgUEFOVEVDSF9QUk9EVUNUX1VNTDI5MF9WWlcsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CkBAIC04NCw2ICs4Niw3IEBACiAJCS5uYW1lID0JCSJxY2F1eCIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJnFjYXV4X2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llbWVuc19tcGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jCmluZGV4IGNiODE5NWMuLjc0Y2Q0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jCkBAIC00Miw2ICs0Miw3IEBACiAJCS5uYW1lID0JCSJzaWVtZW5zX21waSIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJnNpZW1lbnNfdXNiX21waV9kcml2ZXIsCiAJLm51bV9wb3J0cyA9CQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggNzY1YWE5OC4uY2JmYjcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogLyogaG93IGNvbWUgPz8/ICovCiAjZGVmaW5lIFVBUlRfU1RBVEUJCQkweDA4Ci0jZGVmaW5lIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0sJMHg3NAorI2RlZmluZSBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLCTB4NzUKICNkZWZpbmUgVUFSVF9EQ0QJCQkweDAxCiAjZGVmaW5lIFVBUlRfRFNSCQkJMHgwMgogI2RlZmluZSBVQVJUX0JSRUFLX0VSUk9SCQkweDA0CkBAIC01MjUsNiArNTI1LDEwIEBACiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCisJCWlmIChzdGF0dXMgJiBVQVJUX0RDRCkKKwkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCSAgIHByaXYtPmxpbmVfc3RhdHVzICYgTVNSX1NUQVRVU19MSU5FX0RDRCk7CiAJfQogCiAJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSwgdHR5X2ZsYWcsCkBAIC02NDUsNiArNjQ5LDcgQEAKIAkJLm5hbWUgPQkJIlNQQ1A4eDUiLAogCX0sCiAJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyCQk9ICZzcGNwOHg1X2RyaXZlciwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4gCQkJPSBzcGNwOHg1X29wZW4sCiAJLmR0cl9ydHMJCT0gc3BjcDh4NV9kdHJfcnRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNjk1NGRlNS4uNTQ2YTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xMzQ0LDExICsxMzQ0LDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJZml4dXBfZ2VuZXJpYyhkcml2ZXIpOwotCWlmIChkcml2ZXItPnVzYl9kcml2ZXIpCi0JCWRyaXZlci0+dXNiX2RyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxOwogCiAJaWYgKCFkcml2ZXItPmRlc2NyaXB0aW9uKQogCQlkcml2ZXItPmRlc2NyaXB0aW9uID0gZHJpdmVyLT5kcml2ZXIubmFtZTsKKwlpZiAoIWRyaXZlci0+dXNiX2RyaXZlcikgeworCQlXQVJOKDEsICJTZXJpYWwgZHJpdmVyICVzIGhhcyBubyB1c2JfZHJpdmVyXG4iLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHJpdmVyLT51c2JfZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDE7CiAKIAkvKiBBZGQgdGhpcyBkZXZpY2UgdG8gb3VyIGxpc3Qgb2YgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCmluZGV4IGYyZWQ2YTMuLjk1YTgyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAkJLm5hbWUgPQkJImRlYnVnIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmZGVidWdfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIAkuYnVsa19vdXRfc2l6ZSA9CVVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkUsCiAJLmJyZWFrX2N0bCA9CQl1c2JfZGVidWdfYnJlYWtfY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKaW5kZXggYzg1NGZkZS4uMmM4NTUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCkBAIC0zMSw0ICszMSw5IEBACiAJCSJDeXByZXNzIElTRC0zMDBMUCIsCiAJCVVTQl9TQ19DWVBfQVRBQ0IsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsIDApLAogCitVTlVTVUFMX0RFViggMHgxNGNkLCAweDYxMTYsIDB4MDAwMCwgMHg5OTk5LAorCQkiU3VwZXIgVG9wIiwKKwkJIlVTQiAyLjAgIFNBVEEgQlJJREdFIiwKKwkJVVNCX1NDX0NZUF9BVEFDQiwgVVNCX1BSX0RFVklDRSwgTlVMTCwgMCksCisKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGZjYzFlMzIuLjI0YmQ1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTA0NCw2ICsxMDQ0LDE1IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0JVTEszMiksCiAKKy8qIFJlcG9ydGVkIGJ5IDx0dGtzcGFtQGZyZWUuZnI+CisgKiBUaGUgZGV2aWNlIHJlcG9ydHMgYSB2ZW5kb3Itc3BlY2lmaWMgZGV2aWNlIGNsYXNzLCByZXF1aXJpbmcgYW4KKyAqIGV4cGxpY2l0IHZlbmRvci9wcm9kdWN0IG1hdGNoLgorICovCitVTlVTVUFMX0RFViggIDB4MDg1MSwgMHgxNTQyLCAweDAwMDIsIDB4MDAwMiwKKwkJIk1hZ2ljUGl4ZWwiLAorCQkiRldfT21lZ2EyIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwgMCksCisKIC8qIEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KICAqIFBhbkRpZ2l0YWwgRGlnaXRhbCBQaWN0dXJlIEZyYW1lLiBEb2VzIG5vdCBsaWtlIEFMTE9XX01FRElVTV9SRU1PVkFMCiAgKiBvbiBMVU4gNC4KQEAgLTE4NzIsNiArMTg4MSwxNSBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19SRUFEX0RJU0NfSU5GTyApLAogCisvKiBQYXRjaCBieSBSaWNoYXJkIFNjaPx0eiA8ci5zY2h0ekB0LW9ubGluZS5kZT4KKyAqIFRoaXMgZXh0ZXJuYWwgaGFyZCBkcml2ZSBlbmNsb3N1cmUgdXNlcyBhIEpNaWNyb24gY2hpcCB3aGljaAorICogbmVlZHMgdGhlIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIGZsYWcgdG8gd29yayBwcm9wZXJseS4gKi8KK1VOVVNVQUxfREVWKCAgMHgxZTY4LCAweDAwMWIsIDB4MDAwMCwgMHgwMDAwLAorCQkiVHJla1N0b3IgR21iSCAmIENvLiBLRyIsCisJCSJEYXRhU3RhdGlvbiBtYXhpIGcudSIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwgVVNfRkxfU0FORV9TRU5TRSApLAorCiBVTlVTVUFMX0RFViggMHgyMTE2LCAweDAzMjAsIDB4MDAwMSwgMHgwMDAxLAogCQkiU1QiLAogCQkiMkEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggOWIzY2ExMC4uZjYxNmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlzaXplX3QgaGRyX3NpemU7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/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+cmVzdW1lKGRldik7CkBAIC05OTIsNyArOTkyLDcgQEAKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwogb3V0OgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKaW5kZXggMjg5ZWRkNS4uNGU2NjM0OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwpAQCAtMTY3NCwxNyArMTY3NCwxNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB2aWFmYl9zdXNwZW5kKHZvaWQgKnVudXNlZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQodmlhZmJpbmZvLCAxKTsKIAl2aWFmYl9zeW5jKHZpYWZiaW5mbyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWFmYl9yZXN1bWUodm9pZCAqdW51c2VkKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAodmlhcGFyaW5mby0+c2hhcmVkLT52ZGV2LT5lbmdpbmVfbW1pbykKIAkJdmlhZmJfcmVzZXRfZW5naW5lKHZpYXBhcmluZm8pOwogCXZpYWZiX3NldF9wYXIodmlhZmJpbmZvKTsKQEAgLTE2OTIsNyArMTY5Miw3IEBACiAJCXZpYWZiX3NldF9wYXIodmlhZmJpbmZvMSk7CiAJZmJfc2V0X3N1c3BlbmQodmlhZmJpbmZvLCAwKTsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMKaW5kZXggODVkNzZlYy4uYTI5NjVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92dDg2MjNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N2Z2EuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjaWZkZWYgQ09ORklHX01UUlIKQEAgLTgxOSwxMiArODE5LDEyIEBACiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICJzdXNwZW5kXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmICgoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB8fCAocGFyLT5yZWZfY291bnQgPT0gMCkpIHsKIAkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgzNSw3ICs4MzUsNyBAQAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgc3RhdGUpKTsKIAogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg1MCw3ICs4NTAsNyBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAicmVzdW1lXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKQpAQCAtODY5LDcgKzg2OSw3IEBACiAKIGZhaWw6CiAJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCmluZGV4IDNlNjkzNGQuLmEyMDIxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYworKysgYi9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKQEAgLTQ5MSwxMiArNDkxLDEyIEBACiAJaWYgKGNvbnNvbGVfc2V0X29uX2NtZGxpbmUpCiAJCXJldHVybjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmb3JfZWFjaF9jb25zb2xlKGMpIHsKIAkJaWYgKCFzdHJjbXAoYy0+bmFtZSwgInR0eSIpICYmIGMtPmluZGV4ID09IDApCiAJCQlicmVhazsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJaWYgKGMpIHsKIAkJdW5yZWdpc3Rlcl9jb25zb2xlKGMpOwogCQljLT5mbGFncyB8PSBDT05fQ09OU0RFVjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggMTViNWNhMi4uOWM5NDkzNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTM3LDYgKzM3LDkgQEAKIAljaGFyICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCisJaWYgKCFJU19QT1NJWEFDTChpbm9kZSkpCisJCXJldHVybiBOVUxMOworCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUpOwogCWlmIChhY2wgIT0gQUNMX05PVF9DQUNIRUQpCiAJCXJldHVybiBhY2w7CkBAIC04NCw2ICs4Nyw5IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByZXQgPSAwOwogCisJaWYgKCFJU19QT1NJWEFDTChkZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlhY2wgPSBidHJmc19nZXRfYWNsKGRlbnRyeS0+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+dHJlZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcHJldjsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IHJiX25vZGUgKnJldDsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKmVudHJ5OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9wcmludC10cmVlLmMgYi9mcy9idHJmcy9wcmludC10cmVlLmMKaW5kZXggMGQxMjZiZS4uZmIyNjA1ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcHJpbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL3ByaW50LXRyZWUuYwpAQCAtMjYwLDYgKzI2MCw3IEBACiAjZWxzZQogCQkJQlVHKCk7CiAjZW5kaWYKKwkJCWJyZWFrOwogCQljYXNlIEJUUkZTX0JMT0NLX0dST1VQX0lURU1fS0VZOgogCQkJYmkgPSBidHJmc19pdGVtX3B0cihsLCBpLAogCQkJCQkgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2l0ZW0pOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IDA0NWM5YzIuLjFmNTU1NmFjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0yMDI4LDYgKzIwMjgsNyBAQAogCiAJd2hpbGUgKDEpIHsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQl0cmFucy0+YmxvY2tfcnN2ID0gcmMtPmJsb2NrX3JzdjsKIAogCQlyZXQgPSBidHJmc19ibG9ja19yc3ZfY2hlY2sodHJhbnMsIHJvb3QsIHJjLT5ibG9ja19yc3YsCkBAIC0yMTQ3LDYgKzIxNDgsMTIgQEAKIAl9CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlpZiAoIWVycikKKwkJCWJ0cmZzX2Jsb2NrX3Jzdl9yZWxlYXNlKHJjLT5leHRlbnRfcm9vdCwKKwkJCQkJCXJjLT5ibG9ja19yc3YsIG51bV9ieXRlcyk7CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwl9CiAKIAlpZiAoIWVycikgewogCQlpZiAobnVtX2J5dGVzICE9IHJjLT5tZXJnaW5nX3Jzdl9zaXplKSB7CkBAIC0zMjIyLDYgKzMyMjksNyBAQAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldCA9IFBUUl9FUlIodHJhbnMpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM2MjgsNiArMzYzNiw3IEBACiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM2NTcsNiArMzY2Niw3IEBACiAKIAl3aGlsZSAoMSkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMCk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCQlpZiAodXBkYXRlX2JhY2tyZWZfY2FjaGUodHJhbnMsICZyYy0+YmFja3JlZl9jYWNoZSkpIHsKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKQEAgLTM4MDQsNyArMzgxNCwxMCBAQAogCiAJLyogZ2V0IHJpZCBvZiBwaW5uZWQgZXh0ZW50cyAqLwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOwotCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJZWxzZQorCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7CiBvdXRfZnJlZToKIAlidHJmc19mcmVlX2Jsb2NrX3JzdihyYy0+ZXh0ZW50X3Jvb3QsIHJjLT5ibG9ja19yc3YpOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTQwMjIsNiArNDAzNSw3IEBACiAJaW50IHJldDsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAltZW1zZXQoJnJvb3QtPnJvb3RfaXRlbS5kcm9wX3Byb2dyZXNzLCAwLAogCQlzaXplb2Yocm9vdC0+cm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MpKTsKQEAgLTQxMjUsNiArNDEzOSwxMSBAQAogCXNldF9yZWxvY19jb250cm9sKHJjKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOworCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CiAKIAlyYy0+bWVyZ2VfcmVsb2NfdHJlZSA9IDE7CiAKQEAgLTQxNTQsOSArNDE3MywxMyBAQAogCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7Ci0JYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwotb3V0OgorCWlmIChJU19FUlIodHJhbnMpKQorCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwllbHNlCisJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKK291dF9mcmVlOgogCWtmcmVlKHJjKTsKK291dDoKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlbG9jX3Jvb3RzKSkgewogCQlyZWxvY19yb290ID0gbGlzdF9lbnRyeShyZWxvY19yb290cy5uZXh0LAogCQkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCwgcm9vdF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IGIyMTMwYzQuLmEwMDQwMDggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJCXN0cnVjdCBidHJmc19mc19kZXZpY2VzICoqZnNfZGV2aWNlcykKIHsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107Ci0JY2hhciAqb3B0cywgKnA7CisJY2hhciAqb3B0cywgKm9yaWcsICpwOwogCWludCBlcnJvciA9IDA7CiAJaW50IGludGFyZzsKIApAQCAtMzk3LDYgKzM5Nyw3IEBACiAJb3B0cyA9IGtzdHJkdXAob3B0aW9ucywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvcHRzKQogCQlyZXR1cm4gLUVOT01FTTsKKwlvcmlnID0gb3B0czsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0cywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC00MzIsNyArNDMzLDcgQEAKIAl9CiAKICBvdXRfZnJlZV9vcHRzOgotCWtmcmVlKG9wdHMpOworCWtmcmVlKG9yaWcpOwogIG91dDoKIAkvKgogCSAqIElmIG5vIHN1YnZvbHVtZSBuYW1lIGlzIHNwZWNpZmllZCB3ZSB1c2UgdGhlIGRlZmF1bHQgb25lLiAgQWxsb2NhdGUKQEAgLTYyMyw2ICs2MjQsOCBAQAogCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDAsIDApOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc2MSw2ICs3NjQsOCBAQAogCQl9CiAKIAkJYnRyZnNfY2xvc2VfZGV2aWNlcyhmc19kZXZpY2VzKTsKKwkJa2ZyZWUoZnNfaW5mbyk7CisJCWtmcmVlKHRyZWVfcm9vdCk7CiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBiYWU1YzdiLi4zZDczYzhkIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTExNjEsNiArMTE2MSwxMSBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZhYy0+d29yaywgZG9fYXN5bmNfY29tbWl0KTsKIAlhYy0+cm9vdCA9IHJvb3Q7CiAJYWMtPm5ld3RyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKGFjLT5uZXd0cmFucykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIoYWMtPm5ld3RyYW5zKTsKKwkJa2ZyZWUoYWMpOworCQlyZXR1cm4gZXJyOworCX0KIAogCS8qIHRha2UgdHJhbnNhY3Rpb24gcmVmZXJlbmNlICovCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggMDU0NzQ0YS4uYTRiYmI4NSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0zMzgsNiArMzM4LDEyIEBACiAJCX0KIAkJZHN0X2NvcHkgPSBrbWFsbG9jKGl0ZW1fc2l6ZSwgR0ZQX05PRlMpOwogCQlzcmNfY29weSA9IGttYWxsb2MoaXRlbV9zaXplLCBHRlBfTk9GUyk7CisJCWlmICghZHN0X2NvcHkgfHwgIXNyY19jb3B5KSB7CisJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CisJCQlrZnJlZShkc3RfY29weSk7CisJCQlrZnJlZShzcmNfY29weSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCXJlYWRfZXh0ZW50X2J1ZmZlcihlYiwgc3JjX2NvcHksIHNyY19wdHIsIGl0ZW1fc2l6ZSk7CiAKQEAgLTY2NSw2ICs2NzEsOSBAQAogCWJ0cmZzX2Rpcl9pdGVtX2tleV90b19jcHUobGVhZiwgZGksICZsb2NhdGlvbik7CiAJbmFtZV9sZW4gPSBidHJmc19kaXJfbmFtZV9sZW4obGVhZiwgZGkpOwogCW5hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfTk9GUyk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJlYWRfZXh0ZW50X2J1ZmZlcihsZWFmLCBuYW1lLCAodW5zaWduZWQgbG9uZykoZGkgKyAxKSwgbmFtZV9sZW4pOwogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIApAQCAtNzQ0LDYgKzc1Myw5IEBACiAJaW50IG1hdGNoID0gMDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIGxvZywga2V5LCBwYXRoLCAwLCAwKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0OwpAQCAtOTY3LDYgKzk3OSw4IEBACiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKQEAgLTExNzgsNiArMTE5Miw5IEBACiAKIAluYW1lX2xlbiA9IGJ0cmZzX2Rpcl9uYW1lX2xlbihlYiwgZGkpOwogCW5hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfTk9GUyk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWxvZ190eXBlID0gYnRyZnNfZGlyX3R5cGUoZWIsIGRpKTsKIAlyZWFkX2V4dGVudF9idWZmZXIoZWIsIG5hbWUsICh1bnNpZ25lZCBsb25nKShkaSArIDEpLAogCQkgICBuYW1lX2xlbik7CkBAIC0xNjkyLDYgKzE3MDksOCBAQAogCQlyb290X293bmVyID0gYnRyZnNfaGVhZGVyX293bmVyKHBhcmVudCk7CiAKIAkJbmV4dCA9IGJ0cmZzX2ZpbmRfY3JlYXRlX3RyZWVfYmxvY2socm9vdCwgYnl0ZW5yLCBibG9ja3NpemUpOworCQlpZiAoIW5leHQpCisJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlpZiAoKmxldmVsID09IDEpIHsKIAkJCXdjLT5wcm9jZXNzX2Z1bmMocm9vdCwgbmV4dCwgd2MsIHB0cl9nZW4pOwpAQCAtMjAzMiw2ICsyMDUxLDcgQEAKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCBsb2dfcm9vdF90cmVlLAogCQkJCWxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOworCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAJYXRvbWljX3NldCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdLCAxKTsKQEAgLTIwOTYsNyArMjExNiw3IEBACiAJc21wX21iKCk7CiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleDFdKSkKIAkJd2FrZV91cCgmcm9vdC0+bG9nX2NvbW1pdF93YWl0W2luZGV4MV0pOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfbG9nX3RyZWUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yMTk0LDYgKzIyMTQsOSBAQAogCiAJbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOworCiAJZGkgPSBidHJmc19sb29rdXBfZGlyX2l0ZW0odHJhbnMsIGxvZywgcGF0aCwgZGlyLT5pX2lubywKIAkJCQkgICBuYW1lLCBuYW1lX2xlbiwgLTEpOwogCWlmIChJU19FUlIoZGkpKSB7CkBAIC0yNTk0LDYgKzI2MTcsOSBAQAogCiAJaW5zX2RhdGEgPSBrbWFsbG9jKG5yICogc2l6ZW9mKHN0cnVjdCBidHJmc19rZXkpICsKIAkJCSAgIG5yICogc2l6ZW9mKHUzMiksIEdGUF9OT0ZTKTsKKwlpZiAoIWluc19kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWluc19zaXplcyA9ICh1MzIgKilpbnNfZGF0YTsKIAlpbnNfa2V5cyA9IChzdHJ1Y3QgYnRyZnNfa2V5ICopKGluc19kYXRhICsgbnIgKiBzaXplb2YodTMyKSk7CiAKQEAgLTI3MjUsNyArMjc1MSwxMyBAQAogCWxvZyA9IHJvb3QtPmxvZ19yb290OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOwogCWRzdF9wYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghZHN0X3BhdGgpIHsKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAltaW5fa2V5Lm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOwogCW1pbl9rZXkudHlwZSA9IEJUUkZTX0lOT0RFX0lURU1fS0VZOwpAQCAtMzA4MCw2ICszMTEyLDcgQEAKIAlCVUdfT04oIXBhdGgpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihmc19pbmZvLT50cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCXdjLnRyYW5zID0gdHJhbnM7CiAJd2MucGluID0gMTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBkMTU4NTMwLi4yNjM2YTA1IDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0xMjEzLDYgKzEyMTMsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAlrZXkub2JqZWN0aWQgPSBCVFJGU19ERVZfSVRFTVNfT0JKRUNUSUQ7CiAJa2V5LnR5cGUgPSBCVFJGU19ERVZfSVRFTV9LRVk7CiAJa2V5Lm9mZnNldCA9IGRldmljZS0+ZGV2aWQ7CkBAIC0xNjA2LDYgKzE2MTAsMTIgQEAKIAl9CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWtmcmVlKGRldmljZSk7CisJCXJldCA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIGVycm9yOworCX0KKwogCWxvY2tfY2h1bmtzKHJvb3QpOwogCiAJZGV2aWNlLT53cml0ZWFibGUgPSAxOwpAQCAtMTg3Myw3ICsxODgzLDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJbG9ja19jaHVua3Mocm9vdCk7CiAKQEAgLTIwNDcsNyArMjA1Nyw3IEBACiAJCUJVR19PTihyZXQpOwogCiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oZGV2X3Jvb3QsIDApOwotCQlCVUdfT04oIXRyYW5zKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJCXJldCA9IGJ0cmZzX2dyb3dfZGV2aWNlKHRyYW5zLCBkZXZpY2UsIG9sZF9zaXplKTsKIAkJQlVHX09OKHJldCk7CkBAIC0yMjEzLDYgKzIyMjMsMTEgQEAKIAogCS8qIFNocmlua2luZyBzdWNjZWVkZWQsIGVsc2Ugd2Ugd291bGQgYmUgYXQgImRvbmUiLiAqLwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gZG9uZTsKKwl9CisKIAlsb2NrX2NodW5rcyhyb290KTsKIAogCWRldmljZS0+ZGlza190b3RhbF9ieXRlcyA9IG5ld19zaXplOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jYXBzLmMgYi9mcy9jZXBoL2NhcHMuYwppbmRleCA2MGQyN2JjLi42YjYxZGVkIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NhcHMuYworKysgYi9mcy9jZXBoL2NhcHMuYwpAQCAtMTU2MCw5ICsxNTYwLDEwIEBACiAJCS8qIE5PVEU6IG5vIHNpZGUtZWZmZWN0cyBhbGxvd2VkLCB1bnRpbCB3ZSB0YWtlIHNfbXV0ZXggKi8KIAogCQlyZXZva2luZyA9IGNhcC0+aW1wbGVtZW50ZWQgJiB+Y2FwLT5pc3N1ZWQ7Ci0JCWlmIChyZXZva2luZykKLQkJCWRvdXQoIiBtZHMlZCByZXZva2luZyAlc1xuIiwgY2FwLT5tZHMsCi0JCQkgICAgIGNlcGhfY2FwX3N0cmluZyhyZXZva2luZykpOworCQlkb3V0KCIgbWRzJWQgY2FwICVwIGlzc3VlZCAlcyBpbXBsZW1lbnRlZCAlcyByZXZva2luZyAlc1xuIiwKKwkJICAgICBjYXAtPm1kcywgY2FwLCBjZXBoX2NhcF9zdHJpbmcoY2FwLT5pc3N1ZWQpLAorCQkgICAgIGNlcGhfY2FwX3N0cmluZyhjYXAtPmltcGxlbWVudGVkKSwKKwkJICAgICBjZXBoX2NhcF9zdHJpbmcocmV2b2tpbmcpKTsKIAogCQlpZiAoY2FwID09IGNpLT5pX2F1dGhfY2FwICYmCiAJCSAgICAoY2FwLT5pc3N1ZWQgJiBDRVBIX0NBUF9GSUxFX1dSKSkgewpAQCAtMTY1OCw2ICsxNjU5LDggQEAKIAogCQlpZiAoY2FwID09IGNpLT5pX2F1dGhfY2FwICYmIGNpLT5pX2RpcnR5X2NhcHMpCiAJCQlmbHVzaGluZyA9IF9fbWFya19jYXBzX2ZsdXNoaW5nKGlub2RlLCBzZXNzaW9uKTsKKwkJZWxzZQorCQkJZmx1c2hpbmcgPSAwOwogCiAJCW1kcyA9IGNhcC0+bWRzOyAgLyogcmVtZW1iZXIgbWRzLCBzbyB3ZSBkb24ndCByZXBlYXQgKi8KIAkJc2VudCsrOwpAQCAtMTk0MCw2ICsxOTQzLDM1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywKKwkJCQkgICAgIHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBjZXBoX2NhcCAqY2FwOworCWludCBkZWxheWVkID0gMDsKKworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJY2FwID0gY2ktPmlfYXV0aF9jYXA7CisJZG91dCgia2lja19mbHVzaGluZ19pbm9kZV9jYXBzICVwIGZsdXNoaW5nICVzIGZsdXNoX3NlcSAlbGxkXG4iLCBpbm9kZSwKKwkgICAgIGNlcGhfY2FwX3N0cmluZyhjaS0+aV9mbHVzaGluZ19jYXBzKSwgY2ktPmlfY2FwX2ZsdXNoX3NlcSk7CisJX19jZXBoX2ZsdXNoX3NuYXBzKGNpLCAmc2Vzc2lvbiwgMSk7CisJaWYgKGNpLT5pX2ZsdXNoaW5nX2NhcHMpIHsKKwkJZGVsYXllZCA9IF9fc2VuZF9jYXAobWRzYywgY2FwLCBDRVBIX0NBUF9PUF9GTFVTSCwKKwkJCQkgICAgIF9fY2VwaF9jYXBzX3VzZWQoY2kpLAorCQkJCSAgICAgX19jZXBoX2NhcHNfd2FudGVkKGNpKSwKKwkJCQkgICAgIGNhcC0+aXNzdWVkIHwgY2FwLT5pbXBsZW1lbnRlZCwKKwkJCQkgICAgIGNpLT5pX2ZsdXNoaW5nX2NhcHMsIE5VTEwpOworCQlpZiAoZGVsYXllZCkgeworCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJCV9fY2FwX2RlbGF5X3JlcXVldWUobWRzYywgY2kpOworCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCX0KK30KKwogCiAvKgogICogVGFrZSByZWZlcmVuY2VzIHRvIGNhcGFiaWxpdGllcyB3ZSBob2xkLCBzbyB0aGF0IHdlIGRvbid0IHJlbGVhc2UKQEAgLTI2ODcsNyArMjcxOSw3IEBACiAJY2VwaF9hZGRfY2FwKGlub2RlLCBzZXNzaW9uLCBjYXBfaWQsIC0xLAogCQkgICAgIGlzc3VlZCwgd2FudGVkLCBzZXEsIG1zZXEsIHJlYWxtaW5vLCBDRVBIX0NBUF9GTEFHX0FVVEgsCiAJCSAgICAgTlVMTCAvKiBubyBjYXBzIGNvbnRleHQgKi8pOwotCXRyeV9mbHVzaF9jYXBzKGlub2RlLCBzZXNzaW9uLCBOVUxMKTsKKwlraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMobWRzYywgc2Vzc2lvbiwgaW5vZGUpOwogCXVwX3JlYWQoJm1kc2MtPnNuYXBfcndzZW0pOwogCiAJLyogbWFrZSBzdXJlIHdlIHJlLXJlcXVlc3QgbWF4X3NpemUsIGlmIG5lY2Vzc2FyeSAqLwpAQCAtMjc4NSw4ICsyODE3LDcgQEAKIAljYXNlIENFUEhfQ0FQX09QX0lNUE9SVDoKIAkJaGFuZGxlX2NhcF9pbXBvcnQobWRzYywgaW5vZGUsIGgsIHNlc3Npb24sCiAJCQkJICBzbmFwdHJhY2UsIHNuYXB0cmFjZV9sZW4pOwotCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksIENIRUNLX0NBUFNfTk9ERUxBWSwKLQkJCQlzZXNzaW9uKTsKKwkJY2VwaF9jaGVja19jYXBzKGNlcGhfaW5vZGUoaW5vZGUpLCAwLCBzZXNzaW9uKTsKIAkJZ290byBkb25lX3VubG9ja2VkOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IGU4MzVlZmYuLjU2MjU0NjMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTcxMCwxMCArNzEwLDYgQEAKIAkJCWNpLT5pX2NlcGhfZmxhZ3MgfD0gQ0VQSF9JX0NPTVBMRVRFOwogCQkJY2ktPmlfbWF4X29mZnNldCA9IDI7CiAJCX0KLQotCQkvKiBpdCBtYXkgYmUgYmV0dGVyIHRvIHNldCBzdF9zaXplIGluIGdldGF0dHIgaW5zdGVhZD8gKi8KLQkJaWYgKGNlcGhfdGVzdF9tb3VudF9vcHQoY2VwaF9zYl90b19jbGllbnQoaW5vZGUtPmlfc2IpLCBSQllURVMpKQotCQkJaW5vZGUtPmlfc2l6ZSA9IGNpLT5pX3JieXRlczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJmaWxsX2lub2RlICVsbHguJWxseCBCQUQgbW9kZSAwJW9cbiIsCkBAIC0xODE5LDcgKzE4MTUsMTEgQEAKIAkJZWxzZQogCQkJc3RhdC0+ZGV2ID0gMDsKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCXN0YXQtPnNpemUgPSBjaS0+aV9yYnl0ZXM7CisJCQlpZiAoY2VwaF90ZXN0X21vdW50X29wdChjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiksCisJCQkJCQlSQllURVMpKQorCQkJCXN0YXQtPnNpemUgPSBjaS0+aV9yYnl0ZXM7CisJCQllbHNlCisJCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX2ZpbGVzICsgY2ktPmlfc3ViZGlyczsKIAkJCXN0YXQtPmJsb2NrcyA9IDA7CiAJCQlzdGF0LT5ibGtzaXplID0gNjU1MzY7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggMWUzMGQxOS4uYTFlZThmYSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTY5Myw5ICs2OTMsMTEgQEAKIAkJCQlkb3V0KCJjaG9vc2VfbWRzICVwICVsbHguJWxseCAiCiAJCQkJICAgICAiZnJhZyAldSBtZHMlZCAoJWQvJWQpXG4iLAogCQkJCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLAotCQkJCSAgICAgZnJhZy5mcmFnLCBmcmFnLm1kcywKKwkJCQkgICAgIGZyYWcuZnJhZywgbWRzLAogCQkJCSAgICAgKGludClyLCBmcmFnLm5kaXN0KTsKLQkJCQlyZXR1cm4gbWRzOworCQkJCWlmIChjZXBoX21kc21hcF9nZXRfc3RhdGUobWRzYy0+bWRzbWFwLCBtZHMpID49CisJCQkJICAgIENFUEhfTURTX1NUQVRFX0FDVElWRSkKKwkJCQkJcmV0dXJuIG1kczsKIAkJCX0KIAogCQkJLyogc2luY2UgdGhpcyBmaWxlL2RpciB3YXNuJ3Qga25vd24gdG8gYmUKQEAgLTcwOCw3ICs3MTAsOSBAQAogCQkJCWRvdXQoImNob29zZV9tZHMgJXAgJWxseC4lbGx4ICIKIAkJCQkgICAgICJmcmFnICV1IG1kcyVkIChhdXRoKVxuIiwKIAkJCQkgICAgIGlub2RlLCBjZXBoX3Zpbm9wKGlub2RlKSwgZnJhZy5mcmFnLCBtZHMpOwotCQkJCXJldHVybiBtZHM7CisJCQkJaWYgKGNlcGhfbWRzbWFwX2dldF9zdGF0ZShtZHNjLT5tZHNtYXAsIG1kcykgPj0KKwkJCQkgICAgQ0VQSF9NRFNfU1RBVEVfQUNUSVZFKQorCQkJCQlyZXR1cm4gbWRzOwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5jIGIvZnMvY2VwaC9zdXBlci5jCmluZGV4IGJmNmYwZjMuLjljNTA4NTQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuYworKysgYi9mcy9jZXBoL3N1cGVyLmMKQEAgLTI5MCw2ICsyOTAsOCBAQAogCiAgICAgICAgIGZzb3B0LT5yc2l6ZSA9IENFUEhfTU9VTlRfUlNJWkVfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPnNuYXBkaXJfbmFtZSA9IGtzdHJkdXAoQ0VQSF9TTkFQRElSTkFNRV9ERUZBVUxULCBHRlBfS0VSTkVMKTsKKwlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWluID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NSU5fREVGQVVMVDsKKwlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWF4ID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NQVhfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPmNhcF9yZWxlYXNlX3NhZmV0eSA9IENFUEhfQ0FQX1JFTEVBU0VfU0FGRVRZX0RFRkFVTFQ7CiAgICAgICAgIGZzb3B0LT5tYXhfcmVhZGRpciA9IENFUEhfTUFYX1JFQURESVJfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPm1heF9yZWFkZGlyX2J5dGVzID0gQ0VQSF9NQVhfUkVBRERJUl9CWVRFU19ERUZBVUxUOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC94YXR0ci5jIGIvZnMvY2VwaC94YXR0ci5jCmluZGV4IDZlMTJhNmIuLjhjOWViYTYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgveGF0dHIuYworKysgYi9mcy9jZXBoL3hhdHRyLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCXN0cnVjdCByYl9ub2RlICoqcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciAqeGF0dHIgPSBOVUxMOworCWludCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKIAlpbnQgYzsKIAogCXAgPSAmY2ktPmlfeGF0dHJzLmluZGV4LnJiX25vZGU7CkBAIC0yMjYsNiArMjI3LDggQEAKIAkJcGFyZW50ID0gKnA7CiAJCXhhdHRyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciwgbm9kZSk7CiAJCWMgPSBzdHJuY21wKG5hbWUsIHhhdHRyLT5uYW1lLCB4YXR0ci0+bmFtZV9sZW4pOworCQlpZiAoYyA9PSAwICYmIG5hbWVfbGVuID4geGF0dHItPm5hbWVfbGVuKQorCQkJYyA9IDE7CiAJCWlmIChjIDwgMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoYyA+IDApCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggZWU0NTY0OC4uN2NiMGY3ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgTkxTCiAJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fTUQ0CiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvTWFrZWZpbGUgYi9mcy9jaWZzL01ha2VmaWxlCmluZGV4IDQzYjE5ZGQuLmQ4NzU1ODQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvTWFrZWZpbGUKKysrIGIvZnMvY2lmcy9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIAogY2lmcy15IDo9IGNpZnNmcy5vIGNpZnNzbWIubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBpbm9kZS5vIFwKIAkgIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmRlcy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gXAotCSAgbWQ0Lm8gbWQ1Lm8gY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAorCSAgY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAogCSAgcmVhZGRpci5vIGlvY3RsLm8gc2Vzcy5vIGV4cG9ydC5vCiAKIGNpZnMtJChDT05GSUdfQ0lGU19BQ0wpICs9IGNpZnNhY2wubwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCA0NmFmOTlhLi5mZTE2ODM1IDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtNDUyLDYgKzQ1MiwxMSBAQAogCQlpZiBvcGxvY2sgKGNhY2hpbmcgdG9rZW4pIGlzIGdyYW50ZWQgYW5kIGhlbGQuIE5vdGUgdGhhdAogCQlkaXJlY3QgYWxsb3dzIHdyaXRlIG9wZXJhdGlvbnMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplCiAJCXRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4KKyAgc3RyaWN0Y2FjaGUgICBVc2UgZm9yIHN3aXRjaGluZyBvbiBzdHJpY3QgY2FjaGUgbW9kZS4gSW4gdGhpcyBtb2RlIHRoZQorCQljbGllbnQgcmVhZCBmcm9tIHRoZSBjYWNoZSBhbGwgdGhlIHRpbWUgaXQgaGFzIE9wbG9jayBMZXZlbCBJSSwKKwkJb3RoZXJ3aXNlIC0gcmVhZCBmcm9tIHRoZSBzZXJ2ZXIuIEFsbCB3cml0dGVuIGRhdGEgYXJlIHN0b3JlZAorCQlpbiB0aGUgY2FjaGUsIGJ1dCBpZiB0aGUgY2xpZW50IGRvZXNuJ3QgaGF2ZSBFeGNsdXNpdmUgT3Bsb2NrLAorCQlpdCB3cml0ZXMgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4KICAgYWNsICAgCUFsbG93IHNldGZhY2wgYW5kIGdldGZhY2wgdG8gbWFuYWdlIHBvc2l4IEFDTHMgaWYgc2VydmVyCiAJCXN1cHBvcnRzIHRoZW0uICAoZGVmYXVsdCkKICAgbm9hY2wgCURvIG5vdCBhbGxvdyBzZXRmYWNsIGFuZCBnZXRmYWNsIGNhbGxzIG9uIHRoaXMgbW91bnQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCmluZGV4IDdlZDM2NTMuLjBhMjY1YWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKKysrIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwpAQCAtMjgyLDggKzI4Miw2IEBACiAJY0ZZSSgxLCAiaW4gJXMiLCBfX2Z1bmNfXyk7CiAJQlVHX09OKElTX1JPT1QobW50cHQpKTsKIAotCXhpZCA9IEdldFhpZCgpOwotCiAJLyoKIAkgKiBUaGUgTVNERlMgc3BlYyBzdGF0ZXMgdGhhdCBwYXRocyBpbiBERlMgcmVmZXJyYWwgcmVxdWVzdHMgYW5kCiAJICogcmVzcG9uc2VzIG11c3QgYmUgcHJlZml4ZWQgYnkgYSBzaW5nbGUgJ1wnIGNoYXJhY3RlciBpbnN0ZWFkIG9mCkBAIC0yOTMsMjAgKzI5MSwyMSBAQAogCW1udCA9IEVSUl9QVFIoLUVOT01FTSk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShtbnRwdCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKQotCQlnb3RvIGZyZWVfeGlkOworCQlnb3RvIGNkZGFfZXhpdDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKG1udHB0LT5kX2lub2RlLT5pX3NiKTsKIAl0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7Ci0JbW50ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoSVNfRVJSKHRsaW5rKSkgewogCQltbnQgPSBFUlJfQ0FTVCh0bGluayk7CiAJCWdvdG8gZnJlZV9mdWxsX3BhdGg7CiAJfQogCXNlcyA9IHRsaW5rX3Rjb24odGxpbmspLT5zZXM7CiAKKwl4aWQgPSBHZXRYaWQoKTsKIAlyYyA9IGdldF9kZnNfcGF0aCh4aWQsIHNlcywgZnVsbF9wYXRoICsgMSwgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkmbnVtX3JlZmVycmFscywgJnJlZmVycmFscywKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJRnJlZVhpZCh4aWQpOwogCiAJY2lmc19wdXRfdGxpbmsodGxpbmspOwogCkBAIC0zMzksOCArMzM4LDcgQEAKIAlmcmVlX2Rmc19pbmZvX2FycmF5KHJlZmVycmFscywgbnVtX3JlZmVycmFscyk7CiBmcmVlX2Z1bGxfcGF0aDoKIAlrZnJlZShmdWxsX3BhdGgpOwotZnJlZV94aWQ6Ci0JRnJlZVhpZCh4aWQpOworY2RkYV9leGl0OgogCWNGWUkoMSwgImxlYXZpbmcgJXMiICwgX19mdW5jX18pOwogCXJldHVybiBtbnQ7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuYyBiL2ZzL2NpZnMvY2lmc2FjbC5jCmluZGV4IDFlNzYzNmIuLmJlZWViZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2FjbC5jCisrKyBiL2ZzL2NpZnMvY2lmc2FjbC5jCkBAIC0zNzIsNiArMzcyLDEwIEBACiAKIAkJcHBhY2UgPSBrbWFsbG9jKG51bV9hY2VzICogc2l6ZW9mKHN0cnVjdCBjaWZzX2FjZSAqKSwKIAkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcGFjZSkgeworCQkJY0VSUk9SKDEsICJEQUNMIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIik7CisJCQlyZXR1cm47CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FjZXM7ICsraSkgewogCQkJcHBhY2VbaV0gPSAoc3RydWN0IGNpZnNfYWNlICopIChhY2xfYmFzZSArIGFjbF9zaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCA2NmYzZDUwLi5hNTE1ODVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgIm50bG1zc3AuaCIKQEAgLTM3LDExICszNiw2IEBACiAvKiBOb3RlIHRoYXQgdGhlIHNtYiBoZWFkZXIgc2lnbmF0dXJlIGZpZWxkIG9uIGlucHV0IGNvbnRhaW5zIHRoZQogCXNlcXVlbmNlIG51bWJlciBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KIAotZXh0ZXJuIHZvaWQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKTsKLWV4dGVybiB2b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1leHRlcm4gdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgICAgICB1bnNpZ25lZCBjaGFyICpwMjQpOwotCiBzdGF0aWMgaW50IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqY2lmc19wZHUsCiAJCQkJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjaGFyICpzaWduYXR1cmUpCiB7CkBAIC0yMzQsNiArMjI4LDcgQEAKIC8qIGZpcnN0IGNhbGN1bGF0ZSAyNCBieXRlcyBudGxtIHJlc3BvbnNlIGFuZCB0aGVuIDE2IGJ5dGUgc2Vzc2lvbiBrZXkgKi8KIGludCBzZXR1cF9udGxtX3Jlc3BvbnNlKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKQogeworCWludCByYyA9IDA7CiAJdW5zaWduZWQgaW50IHRlbXBfbGVuID0gQ0lGU19TRVNTX0tFWV9TSVpFICsgQ0lGU19BVVRIX1JFU1BfU0laRTsKIAljaGFyIHRlbXBfa2V5W0NJRlNfU0VTU19LRVlfU0laRV07CiAKQEAgLTI0NywxMyArMjQyLDI2IEBACiAJfQogCXNlcy0+YXV0aF9rZXkubGVuID0gdGVtcF9sZW47CiAKLQlTTUJOVGVuY3J5cHQoc2VzLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCXJjID0gU01CTlRlbmNyeXB0KHNlcy0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwKIAkJCXNlcy0+YXV0aF9rZXkucmVzcG9uc2UgKyBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVExNIHJlc3BvbnNlLCBlcnJvcjogJWQiLAorCQkJX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCUVfbWQ0aGFzaChzZXMtPnBhc3N3b3JkLCB0ZW1wX2tleSk7Ci0JbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCXJjID0gRV9tZDRoYXNoKHNlcy0+cGFzc3dvcmQsIHRlbXBfa2V5KTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCXJldHVybiAwOworCXJjID0gbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlRMTSBzZXNzaW9uIGtleSwgZXJyb3I6ICVkIiwKKwkJCV9fZnVuY19fLCByYyk7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKQEAgLTY0OSw5ICs2NTcsMTAgQEAKIAlnZXRfcmFuZG9tX2J5dGVzKHNlY19rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CiAKIAl0Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmICghdGZtX2FyYzQgfHwgSVNfRVJSKHRmbV9hcmM0KSkgeworCWlmIChJU19FUlIodGZtX2FyYzQpKSB7CisJCXJjID0gUFRSX0VSUih0Zm1fYXJjNCk7CiAJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHRmbV9hcmM0KTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCWRlc2MudGZtID0gdGZtX2FyYzQ7CkBAIC03MDAsMTQgKzcwOSwxMyBAQAogCXVuc2lnbmVkIGludCBzaXplOwogCiAJc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goImhtYWMobWQ1KSIsIDAsIDApOwotCWlmICghc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgfHwKLQkJCUlTX0VSUihzZXJ2ZXItPnNlY21lY2guaG1hY21kNSkpIHsKKwlpZiAoSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gaG1hY21kNVxuIik7CiAJCXJldHVybiBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KTsKIAl9CiAKIAlzZXJ2ZXItPnNlY21lY2gubWQ1ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDUiLCAwLCAwKTsKLQlpZiAoIXNlcnZlci0+c2VjbWVjaC5tZDUgfHwgSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpKSB7CisJaWYgKElTX0VSUihzZXJ2ZXItPnNlY21lY2gubWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gbWQ1XG4iKTsKIAkJcmMgPSBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpOwogCQlnb3RvIGNyeXB0b19hbGxvY2F0ZV9tZDVfZmFpbDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaCBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMmVjMC4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogICBmcy9jaWZzL2NpZnNlbmNyeXB0LmgKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDUKLSAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKLSAqCi0gKiAgIEV4dGVybnMgZm9yIG1pc2MuIHNtYWxsIGVuY3J5cHRpb24gcm91dGluZXMKLSAqICAgc28gd2UgZG8gbm90IGhhdmUgdG8gcHV0IHRoZW0gaW4gY2lmc3Byb3RvLmgKLSAqCi0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCi0gKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qIG1kNC5jICovCi1leHRlcm4gdm9pZCBtZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pOwotLyogc21iZGVzLmMgKi8KLWV4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgdW5zaWduZWQgY2hhciAqcDI0KTsKLQotCi0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IGE4MzIzZjEuLmYyOTcwMTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjAwLDEwICs2MDAsMTcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzc2l6ZV90IHdyaXR0ZW47CisJaW50IHJjOwogCiAJd3JpdHRlbiA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwotCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCi0JCWZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKworCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZUFsbCkKKwkJcmV0dXJuIHdyaXR0ZW47CisKKwlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwlpZiAocmMpCisJCWNGWUkoMSwgImNpZnNfZmlsZV9haW9fd3JpdGU6ICVkIHJjIG9uICVwIGlub2RlIiwgcmMsIGlub2RlKTsKKwogCXJldHVybiB3cml0dGVuOwogfQogCkBAIC03MzcsNyArNzQ0LDcgQEAKIAkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZCA9IGNpZnNfc3RyaWN0X3JlYWR2LAotCS5haW9fd3JpdGUgPSBjaWZzX2ZpbGVfYWlvX3dyaXRlLAorCS5haW9fd3JpdGUgPSBjaWZzX3N0cmljdF93cml0ZXYsCiAJLm9wZW4gPSBjaWZzX29wZW4sCiAJLnJlbGVhc2UgPSBjaWZzX2Nsb3NlLAogCS5sb2NrID0gY2lmc19sb2NrLApAQCAtNzkzLDcgKzgwMCw3IEBACiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKIAkuYWlvX3JlYWQgPSBjaWZzX3N0cmljdF9yZWFkdiwKLQkuYWlvX3dyaXRlID0gY2lmc19maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlID0gY2lmc19zdHJpY3Rfd3JpdGV2LAogCS5vcGVuID0gY2lmc19vcGVuLAogCS5yZWxlYXNlID0gY2lmc19jbG9zZSwKIAkuZnN5bmMgPSBjaWZzX3N0cmljdF9mc3luYywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGYyMzIwNmQuLjRhMzMzMDIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtODUsNyArODUsOSBAQAogZXh0ZXJuIHNzaXplX3QgY2lmc19zdHJpY3RfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKndyaXRlX2RhdGEsCi0JCQkgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CisJCQkgICAgICAgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CitleHRlcm4gc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gaW50IGNpZnNfbG9jayhzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CiBleHRlcm4gaW50IGNpZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKIGV4dGVybiBpbnQgY2lmc19zdHJpY3RfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKQEAgLTEyNSw1ICsxMjcsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjkiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjcwIgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDViZmI3NTMuLmVkZDViMjkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTE2Niw2ICsxNjYsOSBAQAogCXN0cnVjdCBzb2NrZXQgKnNzb2NrZXQ7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZHN0YWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcmNhZGRyOyAvKiBsb2NhbGx5IGJpbmQgdG8gdGhpcyBJUCAqLworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisjZW5kaWYKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNwb25zZV9xOwogCXdhaXRfcXVldWVfaGVhZF90IHJlcXVlc3RfcTsgLyogaWYgbW9yZSB0aGFuIG1heG1weCB0byBzcnZyIG11c3QgYmxvY2sqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19taWRfcTsKQEAgLTIxNyw2ICsyMjAsMzYgQEAKIH07CiAKIC8qCisgKiBNYWNyb3MgdG8gYWxsb3cgdGhlIFRDUF9TZXJ2ZXJfSW5mby0+bmV0IGZpZWxkIGFuZCByZWxhdGVkIGNvZGUgdG8gZHJvcCBvdXQKKyAqIHdoZW4gQ09ORklHX05FVF9OUyBpc24ndCBzZXQuCisgKi8KKworI2lmZGVmIENPTkZJR19ORVRfTlMKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjaWZzX25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYpCit7CisJcmV0dXJuIHNydi0+bmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19zZXRfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydiwgc3RydWN0IG5ldCAqbmV0KQoreworCXNydi0+bmV0ID0gbmV0OworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmNpZnNfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydikKK3sKKwlyZXR1cm4gJmluaXRfbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19zZXRfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydiwgc3RydWN0IG5ldCAqbmV0KQoreworfQorCisjZW5kaWYKKworLyoKICAqIFNlc3Npb24gc3RydWN0dXJlLiAgT25lIG9mIHRoZXNlIGZvciBlYWNoIHVpZCBzZXNzaW9uIHdpdGggYSBwYXJ0aWN1bGFyIGhvc3QKICAqLwogc3RydWN0IGNpZnNTZXNJbmZvIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IDk4Mjg5NWYuLjgwOTZmMjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIGJvb2wgaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbWJfaGRyICpzbWIsCiAJCQkJICBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICopOwogZXh0ZXJuIGJvb2wgaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBfX3U2NCBlb2YpOworZXh0ZXJuIHZvaWQgY2lmc191cGRhdGVfZW9mKHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSwgbG9mZl90IG9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbik7CiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF93cml0YWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmZpbmRfcmVhZGFibGVfZmlsZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBib29sKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemUoc3RydWN0IHNtYl9oZHIgKnB0cik7CkBAIC0zNzMsNyArMzc1LDcgQEAKIGV4dGVybiBpbnQgY2lmc192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBzbWJfaGRyICosCiAJCQkJIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwKIAkJCQlfX3UzMiBleHBlY3RlZF9zZXF1ZW5jZV9udW1iZXIpOwotZXh0ZXJuIHZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CiBleHRlcm4gaW50IHNldHVwX250bG1fcmVzcG9uc2Uoc3RydWN0IGNpZnNTZXNJbmZvICopOwogZXh0ZXJuIGludCBzZXR1cF9udGxtdjJfcnNwKHN0cnVjdCBjaWZzU2VzSW5mbyAqLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICopOwogZXh0ZXJuIGludCBjaWZzX2NyeXB0b19zaGFzaF9hbGxvY2F0ZShzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICopOwpAQCAtNDIzLDQgKzQyNSwxMSBAQAogZXh0ZXJuIGludCBDSUZTQ2hlY2tNRlN5bWxpbmsoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpwYXRoLAogCQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBpbnQgeGlkKTsKK2V4dGVybiBpbnQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpOworZXh0ZXJuIHZvaWQgU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorCQkJdW5zaWduZWQgY2hhciAqcDI0KTsKK2V4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKK2V4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCisJCQl1bnNpZ25lZCBjaGFyICpwMjQpOwogI2VuZGlmCQkJLyogX0NJRlNQUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDMxMDZmNWUuLjkwNGFhNDcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xMzYsOSArMTM2LDYgQEAKIAkJfQogCX0KIAotCWlmIChzZXMtPnN0YXR1cyA9PSBDaWZzRXhpdGluZykKLQkJcmV0dXJuIC1FSU87Ci0KIAkvKgogCSAqIEdpdmUgZGVtdWx0aXBsZXggdGhyZWFkIHVwIHRvIDEwIHNlY29uZHMgdG8gcmVjb25uZWN0LCBzaG91bGQgYmUKIAkgKiBncmVhdGVyIHRoYW4gY2lmcyBzb2NrZXQgdGltZW91dCB3aGljaCBpcyA3IHNlY29uZHMKQEAgLTE1Niw3ICsxNTMsNyBAQAogCQkgKiByZXRyeWluZyB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIgY29tZXMKIAkJICogYmFjayBvbi1saW5lCiAJCSAqLwotCQlpZiAoIXRjb24tPnJldHJ5IHx8IHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCWlmICghdGNvbi0+cmV0cnkpIHsKIAkJCWNGWUkoMSwgImdhdmUgdXAgd2FpdGluZyBvbiByZWNvbm5lY3QgaW4gc21iX2luaXQiKTsKIAkJCXJldHVybiAtRUhPU1RET1dOOwogCQl9CkBAIC00OTE0LDcgKzQ5MTEsNiBAQAogCQkgICBfX3UxNiBmaWQsIF9fdTMyIHBpZF9vZl9vcGVuZXIsIGJvb2wgU2V0QWxsb2NhdGlvbikKIHsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSAqcFNNQiAgPSBOVUxMOwotCWNoYXIgKmRhdGFfb2Zmc2V0OwogCXN0cnVjdCBmaWxlX2VuZF9vZl9maWxlX2luZm8gKnBhcm1fZGF0YTsKIAlpbnQgcmMgPSAwOwogCV9fdTE2IHBhcmFtcywgcGFyYW1fb2Zmc2V0LCBvZmZzZXQsIGJ5dGVfY291bnQsIGNvdW50OwpAQCAtNDkzOCw4ICs0OTM0LDYgQEAKIAlwYXJhbV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSwgRmlkKSAtIDQ7CiAJb2Zmc2V0ID0gcGFyYW1fb2Zmc2V0ICsgcGFyYW1zOwogCi0JZGF0YV9vZmZzZXQgPSAoY2hhciAqKSAoJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQ7Ci0KIAljb3VudCA9IHNpemVvZihzdHJ1Y3QgZmlsZV9lbmRfb2ZfZmlsZV9pbmZvKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCS8qIEJCIGZpbmQgZXhhY3QgbWF4IFNNQiBQRFUgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAxOGQzYzc3Li4yNTdiNmQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNTUsOSArNTUsNiBAQAogLyogU01CIGVjaG8gInRpbWVvdXQiIC0tIEZJWE1FOiB0dW5hYmxlPyAqLwogI2RlZmluZSBTTUJfRUNIT19JTlRFUlZBTCAoNjAgKiBIWikKIAotZXh0ZXJuIHZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsCi0JCQkgdW5zaWduZWQgY2hhciAqcDI0KTsKLQogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7CiAKIHN0cnVjdCBzbWJfdm9sIHsKQEAgLTg3LDYgKzg0LDcgQEAKIAlib29sIG5vX3hhdHRyOjE7ICAgLyogc2V0IGlmIHhhdHRyIChFQSkgc3VwcG9ydCBzaG91bGQgYmUgZGlzYWJsZWQqLwogCWJvb2wgc2VydmVyX2lubzoxOyAvKiB1c2UgaW5vZGUgbnVtYmVycyBmcm9tIHNlcnZlciBpZSBVbmlxdWVJZCAqLwogCWJvb2wgZGlyZWN0X2lvOjE7CisJYm9vbCBzdHJpY3RfaW86MTsgLyogc3RyaWN0IGNhY2hlIGJlaGF2aW9yICovCiAJYm9vbCByZW1hcDoxOyAgICAgIC8qIHNldCB0byByZW1hcCBzZXZlbiByZXNlcnZlZCBjaGFycyBpbiBmaWxlbmFtZXMgKi8KIAlib29sIHBvc2l4X3BhdGhzOjE7IC8qIHVuc2V0IHRvIG5vdCBhc2sgZm9yIHBvc2l4IHBhdGhuYW1lcy4gKi8KIAlib29sIG5vX2xpbnV4X2V4dDoxOwpAQCAtMzM5LDggKzMzNywxMiBAQAogCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvLCBlY2hvLndvcmspOwogCi0JLyogbm8gbmVlZCB0byBwaW5nIGlmIHdlIGdvdCBhIHJlc3BvbnNlIHJlY2VudGx5ICovCi0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKKwkvKgorCSAqIFdlIGNhbm5vdCBzZW5kIGFuIGVjaG8gdW50aWwgdGhlIE5FR09USUFURV9QUk9UT0NPTCByZXF1ZXN0IGlzIGRvbmUuCisJICogQWxzbywgbm8gbmVlZCB0byBwaW5nIGlmIHdlIGdvdCBhIHJlc3BvbnNlIHJlY2VudGx5CisJICovCisJaWYgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kIHx8CisJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKIAkJZ290byByZXF1ZXVlX2VjaG87CiAKIAlyYyA9IENJRlNTTUJFY2hvKHNlcnZlcik7CkBAIC01ODAsMTIgKzU4MiwxMiBAQAogCQllbHNlIGlmIChyZWNvbm5lY3QgPT0gMSkKIAkJCWNvbnRpbnVlOwogCi0JCWxlbmd0aCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLworCQl0b3RhbF9yZWFkICs9IDQ7IC8qIGFjY291bnQgZm9yIHJmYzEwMDIgaGRyICovCiAKLQotCQlkdW1wX3NtYihzbWJfYnVmZmVyLCBsZW5ndGgpOwotCQlpZiAoY2hlY2tTTUIoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKzQpKSB7Ci0JCQljaWZzX2R1bXBfbWVtKCJCYWQgU01COiAiLCBzbWJfYnVmZmVyLCA0OCk7CisJCWR1bXBfc21iKHNtYl9idWZmZXIsIHRvdGFsX3JlYWQpOworCQlpZiAoY2hlY2tTTUIoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKSkgeworCQkJY2lmc19kdW1wX21lbSgiQmFkIFNNQjogIiwgc21iX2J1ZmZlciwKKwkJCQkJdG90YWxfcmVhZCA8IDQ4ID8gdG90YWxfcmVhZCA6IDQ4KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTYzNSwxMSArNjM3LDExIEBACiAJCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9IGlzTGFyZ2VCdWY7CiBtdWx0aV90Ml9mbmQ6CiAJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVNQT05TRV9SRUNFSVZFRDsKLQkJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKLQkJCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKICNlbmRpZgorCQkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOworCQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW1pZF9lbnRyeSA9IE5VTEw7CkBAIC0xMzQ0LDYgKzEzNDYsOCBAQAogCQkJdm9sLT5kaXJlY3RfaW8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJmb3JjZWRpcmVjdGlvIiwgMTMpID09IDApIHsKIAkJCXZvbC0+ZGlyZWN0X2lvID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic3RyaWN0Y2FjaGUiLCAxMSkgPT0gMCkgeworCQkJdm9sLT5zdHJpY3RfaW8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub2FjIiwgNCkgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogTW91bnQgb3B0aW9uIG5vYWMgbm90ICIKIAkJCQkic3VwcG9ydGVkLiBJbnN0ZWFkIHNldCAiCkBAIC0xNTY4LDYgKzE1NzIsOSBAQAogCiAJc3Bpbl9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZXJ2ZXIsICZjaWZzX3RjcF9zZXNfbGlzdCwgdGNwX3Nlc19saXN0KSB7CisJCWlmICghbmV0X2VxKGNpZnNfbmV0X25zKHNlcnZlciksIGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucykpCisJCQljb250aW51ZTsKKwogCQlpZiAoIW1hdGNoX2FkZHJlc3Moc2VydmVyLCBhZGRyLAogCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmdm9sLT5zcmNhZGRyKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTU5OCw2ICsxNjA1LDggQEAKIAkJcmV0dXJuOwogCX0KIAorCXB1dF9uZXQoY2lmc19uZXRfbnMoc2VydmVyKSk7CisKIAlsaXN0X2RlbF9pbml0KCZzZXJ2ZXItPnRjcF9zZXNfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIApAQCAtMTY3Miw2ICsxNjgxLDcgQEAKIAkJZ290byBvdXRfZXJyOwogCX0KIAorCWNpZnNfc2V0X25ldF9ucyh0Y3Bfc2VzLCBnZXRfbmV0KGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucykpOwogCXRjcF9zZXMtPmhvc3RuYW1lID0gZXh0cmFjdF9ob3N0bmFtZSh2b2x1bWVfaW5mby0+VU5DKTsKIAlpZiAoSVNfRVJSKHRjcF9zZXMtPmhvc3RuYW1lKSkgewogCQlyYyA9IFBUUl9FUlIodGNwX3Nlcy0+aG9zdG5hbWUpOwpAQCAtMTc1Miw2ICsxNzYyLDggQEAKIG91dF9lcnJfY3J5cHRvX3JlbGVhc2U6CiAJY2lmc19jcnlwdG9fc2hhc2hfcmVsZWFzZSh0Y3Bfc2VzKTsKIAorCXB1dF9uZXQoY2lmc19uZXRfbnModGNwX3NlcykpOworCiBvdXRfZXJyOgogCWlmICh0Y3Bfc2VzKSB7CiAJCWlmICghSVNfRVJSKHRjcF9zZXMtPmhvc3RuYW1lKSkKQEAgLTIyNjMsOCArMjI3NSw4IEBACiAJfQogCiAJaWYgKHNvY2tldCA9PSBOVUxMKSB7Ci0JCXJjID0gc29ja19jcmVhdGVfa2VybihzZmFtaWx5LCBTT0NLX1NUUkVBTSwKLQkJCQkgICAgICBJUFBST1RPX1RDUCwgJnNvY2tldCk7CisJCXJjID0gX19zb2NrX2NyZWF0ZShjaWZzX25ldF9ucyhzZXJ2ZXIpLCBzZmFtaWx5LCBTT0NLX1NUUkVBTSwKKwkJCQkgICBJUFBST1RPX1RDUCwgJnNvY2tldCwgMSk7CiAJCWlmIChyYyA8IDApIHsKIAkJCWNFUlJPUigxLCAiRXJyb3IgJWQgY3JlYXRpbmcgc29ja2V0IiwgcmMpOwogCQkJc2VydmVyLT5zc29ja2V0ID0gTlVMTDsKQEAgLTI1NzYsNiArMjU4OCw4IEBACiAJaWYgKHB2b2x1bWVfaW5mby0+bXVsdGl1c2VyKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSAoQ0lGU19NT1VOVF9NVUxUSVVTRVIgfAogCQkJCQkgICAgQ0lGU19NT1VOVF9OT19QRVJNKTsKKwlpZiAocHZvbHVtZV9pbmZvLT5zdHJpY3RfaW8pCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfU1RSSUNUX0lPOwogCWlmIChwdm9sdW1lX2luZm8tPmRpcmVjdF9pbykgewogCQljRllJKDEsICJtb3VudGluZyBzaGFyZSB1c2luZyBkaXJlY3QgaS9vIik7CiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfRElSRUNUX0lPOwpAQCAtMjk3Nyw3ICsyOTkxLDggQEAKIAkJCQkJIGJjY19wdHIpOwogCQllbHNlCiAjZW5kaWYgLyogQ0lGU19XRUFLX1BXX0hBU0ggKi8KLQkJU01CTlRlbmNyeXB0KHRjb24tPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksIGJjY19wdHIpOworCQlyYyA9IFNNQk5UZW5jcnlwdCh0Y29uLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCQkJCQliY2NfcHRyKTsKIAogCQliY2NfcHRyICs9IENJRlNfQVVUSF9SRVNQX1NJWkU7CiAJCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGQ3ZDY1YTcuLmU5NjRiMWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zNDYsNyArMzQ2LDYgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSA9IE5VTEw7Ci0Jc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKIAlib29sIHBvc2l4X29wZW5fb2sgPSBmYWxzZTsKIAlfX3UxNiBuZXRmaWQ7CkBAIC0zNjEsOCArMzYwLDYgQEAKIAl9CiAJdGNvbiA9IHRsaW5rX3Rjb24odGxpbmspOwogCi0JcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTg0OCw3ICs4NDUsNyBAQAogfQogCiAvKiB1cGRhdGUgdGhlIGZpbGUgc2l6ZSAoaWYgbmVlZGVkKSBhZnRlciBhIHdyaXRlICovCi1zdGF0aWMgdm9pZAordm9pZAogY2lmc191cGRhdGVfZW9mKHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSwgbG9mZl90IG9mZnNldCwKIAkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzX3dyaXR0ZW4pCiB7CkBAIC0xMTQ2LDcgKzExNDMsNiBAQAogCWNoYXIgKndyaXRlX2RhdGE7CiAJaW50IHJjID0gLUVGQVVMVDsKIAlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKIApAQCAtMTE1NCw3ICsxMTUwLDYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0JY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCiAJb2Zmc2V0ICs9IChsb2ZmX3QpZnJvbTsKIAl3cml0ZV9kYXRhID0ga21hcChwYWdlKTsKQEAgLTE2MTksMTMgKzE2MTQsMjE1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50CitjaWZzX3dyaXRlX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShfX0dGUF9ISUdITUVNKTsKKwkJaWYgKCFwYWdlc1tpXSkgeworCQkJLyoKKwkJCSAqIHNhdmUgbnVtYmVyIG9mIHBhZ2VzIHdlIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQgYW5kCisJCQkgKiByZXR1cm4gd2l0aCBFTk9NRU0gZXJyb3IKKwkJCSAqLworCQkJbnVtX3BhZ2VzID0gaTsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7CisKK2Vycm9yOgorCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZQorc2l6ZV90IGdldF9udW1wYWdlcyhjb25zdCBzaXplX3Qgd3NpemUsIGNvbnN0IHNpemVfdCBsZW4sIHNpemVfdCAqY3VyX2xlbikKK3sKKwlzaXplX3QgbnVtX3BhZ2VzOworCXNpemVfdCBjbGVuOworCisJY2xlbiA9IG1pbl90KGNvbnN0IHNpemVfdCwgbGVuLCB3c2l6ZSk7CisJbnVtX3BhZ2VzID0gY2xlbiAvIFBBR0VfQ0FDSEVfU0laRTsKKwlpZiAoY2xlbiAlIFBBR0VfQ0FDSEVfU0laRSkKKwkJbnVtX3BhZ2VzKys7CisKKwlpZiAoY3VyX2xlbikKKwkJKmN1cl9sZW4gPSBjbGVuOworCisJcmV0dXJuIG51bV9wYWdlczsKK30KKworc3RhdGljIHNzaXplX3QKK2NpZnNfaW92ZWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IHdyaXR0ZW47CisJdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsIG5wYWdlcywgaTsKKwlzaXplX3QgY29waWVkLCBsZW4sIGN1cl9sZW47CisJc3NpemVfdCB0b3RhbF93cml0dGVuID0gMDsKKwlzdHJ1Y3Qga3ZlYyAqdG9fc2VuZDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBpb3ZfaXRlciBpdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOworCWludCB4aWQsIHJjOworCisJbGVuID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCXJjID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgcG9mZnNldCwgJmxlbiwgMCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwludW1fcGFnZXMgPSBnZXRfbnVtcGFnZXMoY2lmc19zYi0+d3NpemUsIGxlbiwgJmN1cl9sZW4pOworCisJcGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZXMgKikqbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRvX3NlbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZlYykqKG51bV9wYWdlcyArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRvX3NlbmQpIHsKKwkJa2ZyZWUocGFnZXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYyA9IGNpZnNfd3JpdGVfYWxsb2NhdGVfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CisJaWYgKHJjKSB7CisJCWtmcmVlKHBhZ2VzKTsKKwkJa2ZyZWUodG9fc2VuZCk7CisJCXJldHVybiByYzsKKwl9CisKKwl4aWQgPSBHZXRYaWQoKTsKKwlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcFRjb24gPSB0bGlua190Y29uKG9wZW5fZmlsZS0+dGxpbmspOworCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlvdl9pdGVyX2luaXQoJml0LCBpb3YsIG5yX3NlZ3MsIGxlbiwgMCk7CisJbnBhZ2VzID0gbnVtX3BhZ2VzOworCisJZG8geworCQlzaXplX3Qgc2F2ZV9sZW4gPSBjdXJfbGVuOworCQlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJCWNvcGllZCA9IG1pbl90KGNvbnN0IHNpemVfdCwgY3VyX2xlbiwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJCWNvcGllZCA9IGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyKHBhZ2VzW2ldLCAmaXQsIDAsCisJCQkJCQkJIGNvcGllZCk7CisJCQljdXJfbGVuIC09IGNvcGllZDsKKwkJCWlvdl9pdGVyX2FkdmFuY2UoJml0LCBjb3BpZWQpOworCQkJdG9fc2VuZFtpKzFdLmlvdl9iYXNlID0ga21hcChwYWdlc1tpXSk7CisJCQl0b19zZW5kW2krMV0uaW92X2xlbiA9IGNvcGllZDsKKwkJfQorCisJCWN1cl9sZW4gPSBzYXZlX2xlbiAtIGN1cl9sZW47CisKKwkJZG8geworCQkJaWYgKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgeworCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShvcGVuX2ZpbGUsIGZhbHNlKTsKKwkJCQlpZiAocmMgIT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlyYyA9IENJRlNTTUJXcml0ZTIoeGlkLCBwVGNvbiwgb3Blbl9maWxlLT5uZXRmaWQsCisJCQkJCSAgIGN1cl9sZW4sICpwb2Zmc2V0LCAmd3JpdHRlbiwKKwkJCQkJICAgdG9fc2VuZCwgbnBhZ2VzLCAwKTsKKwkJfSB3aGlsZSAocmMgPT0gLUVBR0FJTik7CisKKwkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKQorCQkJa3VubWFwKHBhZ2VzW2ldKTsKKworCQlpZiAod3JpdHRlbikgeworCQkJbGVuIC09IHdyaXR0ZW47CisJCQl0b3RhbF93cml0dGVuICs9IHdyaXR0ZW47CisJCQljaWZzX3VwZGF0ZV9lb2YoQ0lGU19JKGlub2RlKSwgKnBvZmZzZXQsIHdyaXR0ZW4pOworCQkJKnBvZmZzZXQgKz0gd3JpdHRlbjsKKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCWlmICghdG90YWxfd3JpdHRlbikKKwkJCQl0b3RhbF93cml0dGVuID0gcmM7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGdldCBsZW5ndGggYW5kIG51bWJlciBvZiBrdmVjcyBvZiB0aGUgbmV4dCB3cml0ZSAqLworCQlucGFnZXMgPSBnZXRfbnVtcGFnZXMoY2lmc19zYi0+d3NpemUsIGxlbiwgJmN1cl9sZW4pOworCX0gd2hpbGUgKGxlbiA+IDApOworCisJaWYgKHRvdGFsX3dyaXR0ZW4gPiAwKSB7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmICgqcG9mZnNldCA+IGlub2RlLT5pX3NpemUpCisJCQlpX3NpemVfd3JpdGUoaW5vZGUsICpwb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCX0KKworCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbihwVGNvbiwgdG90YWxfd3JpdHRlbik7CisJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHRvX3NlbmQpOworCWtmcmVlKHBhZ2VzKTsKKwlGcmVlWGlkKHhpZCk7CisJcmV0dXJuIHRvdGFsX3dyaXR0ZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3NpemVfdCB3cml0dGVuOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkvKgorCSAqIEJCIC0gb3B0aW1pemUgdGhlIHdheSB3aGVuIHNpZ25pbmcgaXMgZGlzYWJsZWQuIFdlIGNhbiBkcm9wIHRoaXMKKwkgKiBleHRyYSBtZW1vcnktdG8tbWVtb3J5IGNvcHlpbmcgYW5kIHVzZSBpb3ZlYyBidWZmZXJzIGZvciBjb25zdHJ1Y3RpbmcKKwkgKiB3cml0ZSByZXF1ZXN0LgorCSAqLworCisJd3JpdHRlbiA9IGNpZnNfaW92ZWNfd3JpdGUoaW9jYi0+a2lfZmlscCwgaW92LCBucl9zZWdzLCAmcG9zKTsKKwlpZiAod3JpdHRlbiA+IDApIHsKKwkJQ0lGU19JKGlub2RlKS0+aW52YWxpZF9tYXBwaW5nID0gdHJ1ZTsKKwkJaW9jYi0+a2lfcG9zID0gcG9zOworCX0KKworCXJldHVybiB3cml0dGVuOworfQorCitzc2l6ZV90IGNpZnNfc3RyaWN0X3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCisJCXJldHVybiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKworCS8qCisJICogSW4gc3RyaWN0IGNhY2hlIG1vZGUgd2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSB0byB0aGUgc2VydmVyIGV4YWN0bHkKKwkgKiBmcm9tIHRoZSBwb3MgdG8gcG9zK2xlbi0xIHJhdGhlciB0aGFuIGZsdXNoIGFsbCBhZmZlY3RlZCBwYWdlcworCSAqIGJlY2F1c2UgaXQgbWF5IGNhdXNlIGEgZXJyb3Igd2l0aCBtYW5kYXRvcnkgbG9ja3Mgb24gdGhlc2UgcGFnZXMgYnV0CisJICogbm90IG9uIHRoZSByZWdpb24gZnJvbSBwb3MgdG8gcHBvcytsZW4tMS4KKwkgKi8KKworCXJldHVybiBjaWZzX3VzZXJfd3JpdGV2KGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKK30KKwogc3RhdGljIHNzaXplX3QKIGNpZnNfaW92ZWNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcG9mZnNldCkKIHsKIAlpbnQgcmM7CiAJaW50IHhpZDsKLQl1bnNpZ25lZCBpbnQgdG90YWxfcmVhZCwgYnl0ZXNfcmVhZCA9IDA7CisJc3NpemVfdCB0b3RhbF9yZWFkOworCXVuc2lnbmVkIGludCBieXRlc19yZWFkID0gMDsKIAlzaXplX3QgbGVuLCBjdXJfbGVuOwogCWludCBpb3Zfb2Zmc2V0ID0gMDsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9saW5rLmMgYi9mcy9jaWZzL2xpbmsuYwppbmRleCAzMDY3NjlkLi5lODgwNGQzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2xpbmsuYworKysgYi9mcy9jaWZzL2xpbmsuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCi0jaW5jbHVkZSAibWQ1LmgiCiAKICNkZWZpbmUgQ0lGU19NRl9TWU1MSU5LX0xFTl9PRkZTRVQgKDQrMSkKICNkZWZpbmUgQ0lGU19NRl9TWU1MSU5LX01ENV9PRkZTRVQgKENJRlNfTUZfU1lNTElOS19MRU5fT0ZGU0VUKyg0KzEpKQpAQCAtNDcsNiArNDYsNDUgQEAKIAltZDVfaGFzaFsxMl0sIG1kNV9oYXNoWzEzXSwgbWQ1X2hhc2hbMTRdLCBtZDVfaGFzaFsxNV0KIAogc3RhdGljIGludAorc3ltbGlua19oYXNoKHVuc2lnbmVkIGludCBsaW5rX2xlbiwgY29uc3QgY2hhciAqbGlua19zdHIsIHU4ICptZDVfaGFzaCkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqbWQ1OworCXN0cnVjdCBzZGVzYyAqc2Rlc2NtZDU7CisKKwltZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goIm1kNSIsIDAsIDApOworCWlmIChJU19FUlIobWQ1KSkgeworCQlyYyA9IFBUUl9FUlIobWQ1KTsKKwkJY0VSUk9SKDEsICIlczogQ3J5cHRvIG1kNSBhbGxvY2F0aW9uIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCXNpemUgPSBzaXplb2Yoc3RydWN0IHNoYXNoX2Rlc2MpICsgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKG1kNSk7CisJc2Rlc2NtZDUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc2Rlc2NtZDUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQljRVJST1IoMSwgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gc3ltbGlua19oYXNoX2VycjsKKwl9CisJc2Rlc2NtZDUtPnNoYXNoLnRmbSA9IG1kNTsKKwlzZGVzY21kNS0+c2hhc2guZmxhZ3MgPSAweDA7CisKKwlyYyA9IGNyeXB0b19zaGFzaF9pbml0KCZzZGVzY21kNS0+c2hhc2gpOworCWlmIChyYykgeworCQljRVJST1IoMSwgIiVzOiBDb3VsZCBub3QgaW5pdCBtZDUgc2hhc2hcbiIsIF9fZnVuY19fKTsKKwkJZ290byBzeW1saW5rX2hhc2hfZXJyOworCX0KKwljcnlwdG9fc2hhc2hfdXBkYXRlKCZzZGVzY21kNS0+c2hhc2gsIGxpbmtfc3RyLCBsaW5rX2xlbik7CisJcmMgPSBjcnlwdG9fc2hhc2hfZmluYWwoJnNkZXNjbWQ1LT5zaGFzaCwgbWQ1X2hhc2gpOworCitzeW1saW5rX2hhc2hfZXJyOgorCWNyeXB0b19mcmVlX3NoYXNoKG1kNSk7CisJa2ZyZWUoc2Rlc2NtZDUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CiBDSUZTUGFyc2VNRlN5bWxpbmsoY29uc3QgdTggKmJ1ZiwKIAkJICAgdW5zaWduZWQgaW50IGJ1Zl9sZW4sCiAJCSAgIHVuc2lnbmVkIGludCAqX2xpbmtfbGVuLApAQCAtNTYsNyArOTQsNiBAQAogCXVuc2lnbmVkIGludCBsaW5rX2xlbjsKIAljb25zdCBjaGFyICptZDVfc3RyMTsKIAljb25zdCBjaGFyICpsaW5rX3N0cjsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBtZDVfY3R4OwogCXU4IG1kNV9oYXNoWzE2XTsKIAljaGFyIG1kNV9zdHIyWzM0XTsKIApAQCAtNzAsOSArMTA3LDExIEBACiAJaWYgKHJjICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2lmc19NRDVfaW5pdCgmbWQ1X2N0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZtZDVfY3R4LCAoY29uc3QgdTggKilsaW5rX3N0ciwgbGlua19sZW4pOwotCWNpZnNfTUQ1X2ZpbmFsKG1kNV9oYXNoLCAmbWQ1X2N0eCk7CisJcmMgPSBzeW1saW5rX2hhc2gobGlua19sZW4sIGxpbmtfc3RyLCBtZDVfaGFzaCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBNRDUgaGFzaCBmYWlsdXJlOiAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNucHJpbnRmKG1kNV9zdHIyLCBzaXplb2YobWQ1X3N0cjIpLAogCQkgQ0lGU19NRl9TWU1MSU5LX01ENV9GT1JNQVQsCkBAIC05NCw5ICsxMzMsOSBAQAogc3RhdGljIGludAogQ0lGU0Zvcm1hdE1GU3ltbGluayh1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmX2xlbiwgY29uc3QgY2hhciAqbGlua19zdHIpCiB7CisJaW50IHJjOwogCXVuc2lnbmVkIGludCBsaW5rX2xlbjsKIAl1bnNpZ25lZCBpbnQgb2ZzOwotCXN0cnVjdCBNRDVDb250ZXh0IG1kNV9jdHg7CiAJdTggbWQ1X2hhc2hbMTZdOwogCiAJaWYgKGJ1Zl9sZW4gIT0gQ0lGU19NRl9TWU1MSU5LX0ZJTEVfU0laRSkKQEAgLTEwNyw5ICsxNDYsMTEgQEAKIAlpZiAobGlua19sZW4gPiBDSUZTX01GX1NZTUxJTktfTElOS19NQVhMRU4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JY2lmc19NRDVfaW5pdCgmbWQ1X2N0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZtZDVfY3R4LCAoY29uc3QgdTggKilsaW5rX3N0ciwgbGlua19sZW4pOwotCWNpZnNfTUQ1X2ZpbmFsKG1kNV9oYXNoLCAmbWQ1X2N0eCk7CisJcmMgPSBzeW1saW5rX2hhc2gobGlua19sZW4sIGxpbmtfc3RyLCBtZDVfaGFzaCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBNRDUgaGFzaCBmYWlsdXJlOiAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwKIAkJIENJRlNfTUZfU1lNTElOS19MRU5fRk9STUFUIENJRlNfTUZfU1lNTElOS19NRDVfRk9STUFULApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9tZDQuYyBiL2ZzL2NpZnMvbWQ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjVjMjYuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9tZDQuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICAgVW5peCBTTUIvTmV0YmlvcyBpbXBsZW1lbnRhdGlvbi4KLSAgIFZlcnNpb24gMS45LgotICAgYSBpbXBsZW1lbnRhdGlvbiBvZiBNRDQgZGVzaWduZWQgZm9yIHVzZSBpbiB0aGUgU01CIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sCi0gICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAxOTk3LTE5OTguCi0gICBNb2RpZmllZCBieSBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkgMjAwMi0yMDAzCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKLQotLyogTk9URTogVGhpcyBjb2RlIG1ha2VzIG5vIGF0dGVtcHQgdG8gYmUgZmFzdCEgKi8KLQotc3RhdGljIF9fdTMyCi1GKF9fdTMyIFgsIF9fdTMyIFksIF9fdTMyIFopCi17Ci0JcmV0dXJuIChYICYgWSkgfCAoKH5YKSAmIFopOwotfQotCi1zdGF0aWMgX191MzIKLUcoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gKFggJiBZKSB8IChYICYgWikgfCAoWSAmIFopOwotfQotCi1zdGF0aWMgX191MzIKLUgoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gWCBeIFkgXiBaOwotfQotCi1zdGF0aWMgX191MzIKLWxzaGlmdChfX3UzMiB4LCBpbnQgcykKLXsKLQl4ICY9IDB4RkZGRkZGRkY7Ci0JcmV0dXJuICgoeCA8PCBzKSAmIDB4RkZGRkZGRkYpIHwgKHggPj4gKDMyIC0gcykpOwotfQotCi0jZGVmaW5lIFJPVU5EMShhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgRigqYiwqYywqZCkgKyBYW2tdLCBzKQotI2RlZmluZSBST1VORDIoYSxiLGMsZCxrLHMpICgqYSkgPSBsc2hpZnQoKCphKSArIEcoKmIsKmMsKmQpICsgWFtrXSArIChfX3UzMikweDVBODI3OTk5LHMpCi0jZGVmaW5lIFJPVU5EMyhhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgSCgqYiwqYywqZCkgKyBYW2tdICsgKF9fdTMyKTB4NkVEOUVCQTEscykKLQotLyogdGhpcyBhcHBsaWVzIG1kNCB0byA2NCBieXRlIGNodW5rcyAqLwotc3RhdGljIHZvaWQKLW1kZm91cjY0KF9fdTMyICpNLCBfX3UzMiAqQSwgX191MzIgKkIsIF9fdTMyICpDLCBfX3UzMiAqRCkKLXsKLQlpbnQgajsKLQlfX3UzMiBBQSwgQkIsIENDLCBERDsKLQlfX3UzMiBYWzE2XTsKLQotCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCVhbal0gPSBNW2pdOwotCi0JQUEgPSAqQTsKLQlCQiA9ICpCOwotCUNDID0gKkM7Ci0JREQgPSAqRDsKLQotCVJPVU5EMShBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgMSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDIsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgMywgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCA0LCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgNSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDYsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgNywgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCA4LCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgOSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDEwLCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDExLCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDEyLCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgMTMsIDcpOwotCVJPVU5EMShDLCBELCBBLCBCLCAxNCwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCAxNSwgMTkpOwotCi0JUk9VTkQyKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA0LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgOCwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDEyLCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDEsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA1LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgOSwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDEzLCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDIsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA2LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgMTAsIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxNCwgMTMpOwotCVJPVU5EMihBLCBCLCBDLCBELCAzLCAzKTsKLQlST1VORDIoRCwgQSwgQiwgQywgNywgNSk7Ci0JUk9VTkQyKEMsIEQsIEEsIEIsIDExLCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTUsIDEzKTsKLQotCVJPVU5EMyhBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgOCwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDQsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTIsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMiwgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDEwLCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNiwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxNCwgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAxLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgOSwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDUsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTMsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMywgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDExLCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNywgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxNSwgMTUpOwotCi0JKkEgKz0gQUE7Ci0JKkIgKz0gQkI7Ci0JKkMgKz0gQ0M7Ci0JKkQgKz0gREQ7Ci0KLQkqQSAmPSAweEZGRkZGRkZGOwotCSpCICY9IDB4RkZGRkZGRkY7Ci0JKkMgJj0gMHhGRkZGRkZGRjsKLQkqRCAmPSAweEZGRkZGRkZGOwotCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCVhbal0gPSAwOwotfQotCi1zdGF0aWMgdm9pZAotY29weTY0KF9fdTMyICpNLCB1bnNpZ25lZCBjaGFyICppbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlNW2ldID0gKGluW2kgKiA0ICsgM10gPDwgMjQpIHwgKGluW2kgKiA0ICsgMl0gPDwgMTYpIHwKLQkJICAgIChpbltpICogNCArIDFdIDw8IDgpIHwgKGluW2kgKiA0ICsgMF0gPDwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5NCh1bnNpZ25lZCBjaGFyICpvdXQsIF9fdTMyIHgpCi17Ci0Jb3V0WzBdID0geCAmIDB4RkY7Ci0Jb3V0WzFdID0gKHggPj4gOCkgJiAweEZGOwotCW91dFsyXSA9ICh4ID4+IDE2KSAmIDB4RkY7Ci0Jb3V0WzNdID0gKHggPj4gMjQpICYgMHhGRjsKLX0KLQotLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KLXZvaWQKLW1kZm91cih1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwotCV9fdTMyIE1bMTZdOwotCV9fdTMyIGIgPSBuICogODsKLQlpbnQgaTsKLQlfX3UzMiBBID0gMHg2NzQ1MjMwMTsKLQlfX3UzMiBCID0gMHhlZmNkYWI4OTsKLQlfX3UzMiBDID0gMHg5OGJhZGNmZTsKLQlfX3UzMiBEID0gMHgxMDMyNTQ3NjsKLQotCXdoaWxlIChuID4gNjQpIHsKLQkJY29weTY0KE0sIGluKTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCQlpbiArPSA2NDsKLQkJbiAtPSA2NDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0JCWJ1ZltpXSA9IDA7Ci0JbWVtY3B5KGJ1ZiwgaW4sIG4pOwotCWJ1ZltuXSA9IDB4ODA7Ci0KLQlpZiAobiA8PSA1NSkgewotCQljb3B5NChidWYgKyA1NiwgYik7Ci0JCWNvcHk2NChNLCBidWYpOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JfSBlbHNlIHsKLQkJY29weTQoYnVmICsgMTIwLCBiKTsKLQkJY29weTY0KE0sIGJ1Zik7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQkJY29weTY0KE0sIGJ1ZiArIDY0KTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJYnVmW2ldID0gMDsKLQljb3B5NjQoTSwgYnVmKTsKLQotCWNvcHk0KG91dCwgQSk7Ci0JY29weTQob3V0ICsgNCwgQik7Ci0JY29weTQob3V0ICsgOCwgQyk7Ci0JY29weTQob3V0ICsgMTIsIEQpOwotCi0JQSA9IEIgPSBDID0gRCA9IDA7Ci19CmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNS5jIGIvZnMvY2lmcy9tZDUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNjZhNS4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL21kNS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgTUQ1IG1lc3NhZ2UtZGlnZXN0IGFsZ29yaXRobS4KLSAqIFRoZSBhbGdvcml0aG0gaXMgZHVlIHRvIFJvbiBSaXZlc3QuICBUaGlzIGNvZGUgd2FzCi0gKiB3cml0dGVuIGJ5IENvbGluIFBsdW1iIGluIDE5OTMsIG5vIGNvcHlyaWdodCBpcyBjbGFpbWVkLgotICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluOyBkbyB3aXRoIGl0IHdoYXQgeW91IHdpc2guCi0gKgotICogRXF1aXZhbGVudCBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCi0gKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIGFnYWluc3QgdGhhdCwgYW5kIGlzIGVxdWl2YWxlbnQsCi0gKiBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHR3byBwYWdlcyBvZiBsZWdhbGVzZQotICogd2l0aCBldmVyeSBjb3B5LgotICoKLSAqIFRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgY2h1bmsgb2YgYnl0ZXMsIGRlY2xhcmUgYW4KLSAqIE1ENUNvbnRleHQgc3RydWN0dXJlLCBwYXNzIGl0IHRvIGNpZnNfTUQ1X2luaXQsIGNhbGwgY2lmc19NRDVfdXBkYXRlIGFzCi0gKiBuZWVkZWQgb24gYnVmZmVycyBmdWxsIG9mIGJ5dGVzLCBhbmQgdGhlbiBjYWxsIGNpZnNfTUQ1X2ZpbmFsLCB3aGljaAotICogd2lsbCBmaWxsIGEgc3VwcGxpZWQgMTYtYnl0ZSBhcnJheSB3aXRoIHRoZSBkaWdlc3QuCi0gKi8KLQotLyogVGhpcyBjb2RlIHNsaWdodGx5IG1vZGlmaWVkIHRvIGZpdCBpbnRvIFNhbWJhIGJ5Ci0gICBhYmFydGxldEBzYW1iYS5vcmcgSnVuIDIwMDEKLSAgIGFuZCB0byBmaXQgdGhlIGNpZnMgdmZzIGJ5Ci0gICBTdGV2ZSBGcmVuY2ggc2ZyZW5jaEB1cy5pYm0uY29tICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlICJtZDUuaCIKLQotc3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTZdKTsKLQotLyoKLSAqIE5vdGU6IHRoaXMgY29kZSBpcyBoYXJtbGVzcyBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLgotICovCi1zdGF0aWMgdm9pZAotYnl0ZVJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25ncykKLXsKLQlfX3UzMiB0OwotCWRvIHsKLQkJdCA9IChfX3UzMikgKCh1bnNpZ25lZCkgYnVmWzNdIDw8IDggfCBidWZbMl0pIDw8IDE2IHwKLQkJICAgICgodW5zaWduZWQpIGJ1ZlsxXSA8PCA4IHwgYnVmWzBdKTsKLQkJKihfX3UzMiAqKSBidWYgPSB0OwotCQlidWYgKz0gNDsKLQl9IHdoaWxlICgtLWxvbmdzKTsKLX0KLQotLyoKLSAqIFN0YXJ0IE1ENSBhY2N1bXVsYXRpb24uICBTZXQgYml0IGNvdW50IHRvIDAgYW5kIGJ1ZmZlciB0byBteXN0ZXJpb3VzCi0gKiBpbml0aWFsaXphdGlvbiBjb25zdGFudHMuCi0gKi8KLXZvaWQKLWNpZnNfTUQ1X2luaXQoc3RydWN0IE1ENUNvbnRleHQgKmN0eCkKLXsKLQljdHgtPmJ1ZlswXSA9IDB4Njc0NTIzMDE7Ci0JY3R4LT5idWZbMV0gPSAweGVmY2RhYjg5OwotCWN0eC0+YnVmWzJdID0gMHg5OGJhZGNmZTsKLQljdHgtPmJ1ZlszXSA9IDB4MTAzMjU0NzY7Ci0KLQljdHgtPmJpdHNbMF0gPSAwOwotCWN0eC0+Yml0c1sxXSA9IDA7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgY29udGV4dCB0byByZWZsZWN0IHRoZSBjb25jYXRlbmF0aW9uIG9mIGFub3RoZXIgYnVmZmVyIGZ1bGwKLSAqIG9mIGJ5dGVzLgotICovCi12b2lkCi1jaWZzX01ENV91cGRhdGUoc3RydWN0IE1ENUNvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0JcmVnaXN0ZXIgX191MzIgdDsKLQotCS8qIFVwZGF0ZSBiaXRjb3VudCAqLwotCi0JdCA9IGN0eC0+Yml0c1swXTsKLQlpZiAoKGN0eC0+Yml0c1swXSA9IHQgKyAoKF9fdTMyKSBsZW4gPDwgMykpIDwgdCkKLQkJY3R4LT5iaXRzWzFdKys7CS8qIENhcnJ5IGZyb20gbG93IHRvIGhpZ2ggKi8KLQljdHgtPmJpdHNbMV0gKz0gbGVuID4+IDI5OwotCi0JdCA9ICh0ID4+IDMpICYgMHgzZjsJLyogQnl0ZXMgYWxyZWFkeSBpbiBzaHNJbmZvLT5kYXRhICovCi0KLQkvKiBIYW5kbGUgYW55IGxlYWRpbmcgb2RkLXNpemVkIGNodW5rcyAqLwotCi0JaWYgKHQpIHsKLQkJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aW4gKyB0OwotCi0JCXQgPSA2NCAtIHQ7Ci0JCWlmIChsZW4gPCB0KSB7Ci0JCQltZW1tb3ZlKHAsIGJ1ZiwgbGVuKTsKLQkJCXJldHVybjsKLQkJfQotCQltZW1tb3ZlKHAsIGJ1ZiwgdCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JCWJ1ZiArPSB0OwotCQlsZW4gLT0gdDsKLQl9Ci0JLyogUHJvY2VzcyBkYXRhIGluIDY0LWJ5dGUgY2h1bmtzICovCi0KLQl3aGlsZSAobGVuID49IDY0KSB7Ci0JCW1lbW1vdmUoY3R4LT5pbiwgYnVmLCA2NCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JCWJ1ZiArPSA2NDsKLQkJbGVuIC09IDY0OwotCX0KLQotCS8qIEhhbmRsZSBhbnkgcmVtYWluaW5nIGJ5dGVzIG9mIGRhdGEuICovCi0KLQltZW1tb3ZlKGN0eC0+aW4sIGJ1ZiwgbGVuKTsKLX0KLQotLyoKLSAqIEZpbmFsIHdyYXB1cCAtIHBhZCB0byA2NC1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIGJpdCBwYXR0ZXJuCi0gKiAxIDAqICg2NC1iaXQgY291bnQgb2YgYml0cyBwcm9jZXNzZWQsIE1TQi1maXJzdCkKLSAqLwotdm9pZAotY2lmc19NRDVfZmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQotewotCXVuc2lnbmVkIGludCBjb3VudDsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDY0ICovCi0JY291bnQgPSAoY3R4LT5iaXRzWzBdID4+IDMpICYgMHgzRjsKLQotCS8qIFNldCB0aGUgZmlyc3QgY2hhciBvZiBwYWRkaW5nIHRvIDB4ODAuICBUaGlzIGlzIHNhZmUgc2luY2UgdGhlcmUgaXMKLQkgICBhbHdheXMgYXQgbGVhc3Qgb25lIGJ5dGUgZnJlZSAqLwotCXAgPSBjdHgtPmluICsgY291bnQ7Ci0JKnArKyA9IDB4ODA7Ci0KLQkvKiBCeXRlcyBvZiBwYWRkaW5nIG5lZWRlZCB0byBtYWtlIDY0IGJ5dGVzICovCi0JY291bnQgPSA2NCAtIDEgLSBjb3VudDsKLQotCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0ICovCi0JaWYgKGNvdW50IDwgOCkgewotCQkvKiBUd28gbG90cyBvZiBwYWRkaW5nOiAgUGFkIHRoZSBmaXJzdCBibG9jayB0byA2NCBieXRlcyAqLwotCQltZW1zZXQocCwgMCwgY291bnQpOwotCQlieXRlUmV2ZXJzZShjdHgtPmluLCAxNik7Ci0JCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCi0JCS8qIE5vdyBmaWxsIHRoZSBuZXh0IGJsb2NrIHdpdGggNTYgYnl0ZXMgKi8KLQkJbWVtc2V0KGN0eC0+aW4sIDAsIDU2KTsKLQl9IGVsc2UgewotCQkvKiBQYWQgYmxvY2sgdG8gNTYgYnl0ZXMgKi8KLQkJbWVtc2V0KHAsIDAsIGNvdW50IC0gOCk7Ci0JfQotCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE0KTsKLQotCS8qIEFwcGVuZCBsZW5ndGggaW4gYml0cyBhbmQgdHJhbnNmb3JtICovCi0JKChfX3UzMiAqKSBjdHgtPmluKVsxNF0gPSBjdHgtPmJpdHNbMF07Ci0JKChfX3UzMiAqKSBjdHgtPmluKVsxNV0gPSBjdHgtPmJpdHNbMV07Ci0KLQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQlieXRlUmV2ZXJzZSgodW5zaWduZWQgY2hhciAqKSBjdHgtPmJ1ZiwgNCk7Ci0JbWVtbW92ZShkaWdlc3QsIGN0eC0+YnVmLCAxNik7Ci0JbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsJLyogSW4gY2FzZSBpdCdzIHNlbnNpdGl2ZSAqLwotfQotCi0vKiBUaGUgZm91ciBjb3JlIGZ1bmN0aW9ucyAtIEYxIGlzIG9wdGltaXplZCBzb21ld2hhdCAqLwotCi0vKiAjZGVmaW5lIEYxKHgsIHksIHopICh4ICYgeSB8IH54ICYgeikgKi8KLSNkZWZpbmUgRjEoeCwgeSwgeikgKHogXiAoeCAmICh5IF4geikpKQotI2RlZmluZSBGMih4LCB5LCB6KSBGMSh6LCB4LCB5KQotI2RlZmluZSBGMyh4LCB5LCB6KSAoeCBeIHkgXiB6KQotI2RlZmluZSBGNCh4LCB5LCB6KSAoeSBeICh4IHwgfnopKQotCi0vKiBUaGlzIGlzIHRoZSBjZW50cmFsIHN0ZXAgaW4gdGhlIE1ENSBhbGdvcml0aG0uICovCi0jZGVmaW5lIE1ENVNURVAoZiwgdywgeCwgeSwgeiwgZGF0YSwgcykgXAotCSh3ICs9IGYoeCwgeSwgeikgKyBkYXRhLCAgdyA9IHc8PHMgfCB3Pj4oMzItcyksICB3ICs9IHgpCi0KLS8qCi0gKiBUaGUgY29yZSBvZiB0aGUgTUQ1IGFsZ29yaXRobSwgdGhpcyBhbHRlcnMgYW4gZXhpc3RpbmcgTUQ1IGhhc2ggdG8KLSAqIHJlZmxlY3QgdGhlIGFkZGl0aW9uIG9mIDE2IGxvbmd3b3JkcyBvZiBuZXcgZGF0YS4gIGNpZnNfTUQ1X3VwZGF0ZSBibG9ja3MKLSAqIHRoZSBkYXRhIGFuZCBjb252ZXJ0cyBieXRlcyBpbnRvIGxvbmd3b3JkcyBmb3IgdGhpcyByb3V0aW5lLgotICovCi1zdGF0aWMgdm9pZAotTUQ1VHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTZdKQotewotCXJlZ2lzdGVyIF9fdTMyIGEsIGIsIGMsIGQ7Ci0KLQlhID0gYnVmWzBdOwotCWIgPSBidWZbMV07Ci0JYyA9IGJ1ZlsyXTsKLQlkID0gYnVmWzNdOwotCi0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMF0gKyAweGQ3NmFhNDc4LCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxXSArIDB4ZThjN2I3NTYsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MjQyMDcwZGIsIDE3KTsKLQlNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblszXSArIDB4YzFiZGNlZWUsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls0XSArIDB4ZjU3YzBmYWYsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzVdICsgMHg0Nzg3YzYyYSwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzZdICsgMHhhODMwNDYxMywgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzddICsgMHhmZDQ2OTUwMSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzhdICsgMHg2OTgwOThkOCwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bOV0gKyAweDhiNDRmN2FmLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTBdICsgMHhmZmZmNWJiMSwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzExXSArIDB4ODk1Y2Q3YmUsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDZiOTAxMTIyLCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10gKyAweGZkOTg3MTkzLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhNjc5NDM4ZSwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzE1XSArIDB4NDliNDA4MjEsIDIyKTsKLQotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhmNjFlMjU2MiwgNSk7Ci0JTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bNl0gKyAweGMwNDBiMzQwLCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDI2NWU1YTUxLCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMF0gKyAweGU5YjZjN2FhLCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bNV0gKyAweGQ2MmYxMDVkLCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxMF0gKyAweDAyNDQxNDUzLCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweGQ4YTFlNjgxLCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bNF0gKyAweGU3ZDNmYmM4LCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bOV0gKyAweDIxZTFjZGU2LCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxNF0gKyAweGMzMzcwN2Q2LCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZjRkNTBkODcsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls4XSArIDB4NDU1YTE0ZWQsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweGE5ZTNlOTA1LCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsyXSArIDB4ZmNlZmEzZjgsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzddICsgMHg2NzZmMDJkOSwgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzEyXSArIDB4OGQyYTRjOGEsIDIwKTsKLQotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzVdICsgMHhmZmZhMzk0MiwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bOF0gKyAweDg3NzFmNjgxLCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdICsgMHg2ZDlkNjEyMiwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzE0XSArIDB4ZmRlNTM4MGMsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4YTRiZWVhNDQsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzRdICsgMHg0YmRlY2ZhOSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzddICsgMHhmNmJiNGI2MCwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzEwXSArIDB4YmViZmJjNzAsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweDI4OWI3ZWM2LCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblswXSArIDB4ZWFhMTI3ZmEsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZDRlZjMwODUsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpbls2XSArIDB4MDQ4ODFkMDUsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4ZDlkNGQwMzksIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzEyXSArIDB4ZTZkYjk5ZTUsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweDFmYTI3Y2Y4LCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMl0gKyAweGM0YWM1NjY1LCAyMyk7Ci0KLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZjQyOTIyNDQsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzddICsgMHg0MzJhZmY5NywgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzE0XSArIDB4YWI5NDIzYTcsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpbls1XSArIDB4ZmM5M2EwMzksIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDY1NWI1OWMzLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblszXSArIDB4OGYwY2NjOTIsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZWZmNDdkLCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMV0gKyAweDg1ODQ1ZGQxLCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDZmYTg3ZTRmLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxNV0gKyAweGZlMmNlNmUwLCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGEzMDE0MzE0LCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMTNdICsgMHg0ZTA4MTFhMSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNzUzN2U4MiwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTFdICsgMHhiZDNhZjIzNSwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyYWQ3ZDJiYiwgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzldICsgMHhlYjg2ZDM5MSwgMjEpOwotCi0JYnVmWzBdICs9IGE7Ci0JYnVmWzFdICs9IGI7Ci0JYnVmWzJdICs9IGM7Ci0JYnVmWzNdICs9IGQ7Ci19Ci0KLSNpZiAwICAgLyogY3VycmVudGx5IHVudXNlZCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdGhlIHJmYyAyMTA0IHZlcnNpb24gb2YgaG1hY19tZDUgaW5pdGlhbGlzYXRpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1obWFjX21kNV9pbml0X3JmYzIxMDQodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJICAgICAgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQkvKiBpZiBrZXkgaXMgbG9uZ2VyIHRoYW4gNjQgYnl0ZXMgcmVzZXQgaXQgdG8ga2V5PU1ENShrZXkpICovCi0JaWYgKGtleV9sZW4gPiA2NCkgewotCQl1bnNpZ25lZCBjaGFyIHRrWzE2XTsKLQkJc3RydWN0IE1ENUNvbnRleHQgdGN0eDsKLQotCQljaWZzX01ENV9pbml0KCZ0Y3R4KTsKLQkJY2lmc19NRDVfdXBkYXRlKCZ0Y3R4LCBrZXksIGtleV9sZW4pOwotCQljaWZzX01ENV9maW5hbCh0aywgJnRjdHgpOwotCi0JCWtleSA9IHRrOwotCQlrZXlfbGVuID0gMTY7Ci0JfQotCi0JLyogc3RhcnQgb3V0IGJ5IHN0b3Jpbmcga2V5IGluIHBhZHMgKi8KLQltZW1zZXQoY3R4LT5rX2lwYWQsIDAsIHNpemVvZihjdHgtPmtfaXBhZCkpOwotCW1lbXNldChjdHgtPmtfb3BhZCwgMCwgc2l6ZW9mKGN0eC0+a19vcGFkKSk7Ci0JbWVtY3B5KGN0eC0+a19pcGFkLCBrZXksIGtleV9sZW4pOwotCW1lbWNweShjdHgtPmtfb3BhZCwga2V5LCBrZXlfbGVuKTsKLQotCS8qIFhPUiBrZXkgd2l0aCBpcGFkIGFuZCBvcGFkIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWN0eC0+a19pcGFkW2ldIF49IDB4MzY7Ci0JCWN0eC0+a19vcGFkW2ldIF49IDB4NWM7Ci0JfQotCi0JY2lmc19NRDVfaW5pdCgmY3R4LT5jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4LT5jdHgsIGN0eC0+a19pcGFkLCA2NCk7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdGhlIG1pY3Jvc29mdCB2ZXJzaW9uIG9mIGhtYWNfbWQ1IGluaXRpYWxpc2F0aW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV9pbml0X2xpbUtfdG9fNjQoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCSBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQlpbnQgaTsKLQotCS8qIGlmIGtleSBpcyBsb25nZXIgdGhhbiA2NCBieXRlcyB0cnVuY2F0ZSBpdCAqLwotCWlmIChrZXlfbGVuID4gNjQpCi0JCWtleV9sZW4gPSA2NDsKLQotCS8qIHN0YXJ0IG91dCBieSBzdG9yaW5nIGtleSBpbiBwYWRzICovCi0JbWVtc2V0KGN0eC0+a19pcGFkLCAwLCBzaXplb2YoY3R4LT5rX2lwYWQpKTsKLQltZW1zZXQoY3R4LT5rX29wYWQsIDAsIHNpemVvZihjdHgtPmtfb3BhZCkpOwotCW1lbWNweShjdHgtPmtfaXBhZCwga2V5LCBrZXlfbGVuKTsKLQltZW1jcHkoY3R4LT5rX29wYWQsIGtleSwga2V5X2xlbik7Ci0KLQkvKiBYT1Iga2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQljdHgtPmtfaXBhZFtpXSBePSAweDM2OwotCQljdHgtPmtfb3BhZFtpXSBePSAweDVjOwotCX0KLQotCWNpZnNfTUQ1X2luaXQoJmN0eC0+Y3R4KTsKLQljaWZzX01ENV91cGRhdGUoJmN0eC0+Y3R4LCBjdHgtPmtfaXBhZCwgNjQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB1cGRhdGUgaG1hY19tZDUgImlubmVyIiBidWZmZXIKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotaG1hY19tZDVfdXBkYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCB0ZXh0X2xlbiwKLQkJc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHgtPmN0eCwgdGV4dCwgdGV4dF9sZW4pOwkvKiB0aGVuIHRleHQgb2YgZGF0YWdyYW0gKi8KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gZmluaXNoIG9mZiBobWFjX21kNSAiaW5uZXIiIGJ1ZmZlciBhbmQgZ2VuZXJhdGUgb3V0ZXIgb25lLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV9maW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCXN0cnVjdCBNRDVDb250ZXh0IGN0eF9vOwotCi0JY2lmc19NRDVfZmluYWwoZGlnZXN0LCAmY3R4LT5jdHgpOwotCi0JY2lmc19NRDVfaW5pdCgmY3R4X28pOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4X28sIGN0eC0+a19vcGFkLCA2NCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHhfbywgZGlnZXN0LCAxNik7Ci0JY2lmc19NRDVfZmluYWwoZGlnZXN0LCAmY3R4X28pOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBzaW5nbGUgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFuIEhNQUMgTUQ1IGRpZ2VzdCBmcm9tIGRhdGEuCi0gdXNlIHRoZSBtaWNyb3NvZnQgaG1hY21kNSBpbml0IG1ldGhvZCBiZWNhdXNlIHRoZSBrZXkgaXMgMTYgYnl0ZXMuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgMCAvKiBjdXJyZW50bHkgdW51c2VkICovCi1zdGF0aWMgdm9pZAotaG1hY19tZDUodW5zaWduZWQgY2hhciBrZXlbMTZdLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCkKLXsKLQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgY3R4OwotCWhtYWNfbWQ1X2luaXRfbGltS190b182NChrZXksIDE2LCAmY3R4KTsKLQlpZiAoZGF0YV9sZW4gIT0gMCkKLQkJaG1hY19tZDVfdXBkYXRlKGRhdGEsIGRhdGFfbGVuLCAmY3R4KTsKLQotCWhtYWNfbWQ1X2ZpbmFsKGRpZ2VzdCwgJmN0eCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWQ1LmggYi9mcy9jaWZzL21kNS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmJhOGNiLi4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvbWQ1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaWZuZGVmIE1ENV9ICi0jZGVmaW5lIE1ENV9ICi0jaWZuZGVmIEhFQURFUl9NRDVfSAotLyogVHJ5IHRvIGF2b2lkIGNsYXNoZXMgd2l0aCBPcGVuU1NMICovCi0jZGVmaW5lIEhFQURFUl9NRDVfSAotI2VuZGlmCi0KLXN0cnVjdCBNRDVDb250ZXh0IHsKLQlfX3UzMiBidWZbNF07Ci0JX191MzIgYml0c1syXTsKLQl1bnNpZ25lZCBjaGFyIGluWzY0XTsKLX07Ci0jZW5kaWYJCQkJLyogIU1ENV9IICovCi0KLSNpZm5kZWYgX0hNQUNfTUQ1X0gKLXN0cnVjdCBITUFDTUQ1Q29udGV4dCB7Ci0Jc3RydWN0IE1ENUNvbnRleHQgY3R4OwotCXVuc2lnbmVkIGNoYXIga19pcGFkWzY1XTsKLQl1bnNpZ25lZCBjaGFyIGtfb3BhZFs2NV07Ci19OwotI2VuZGlmCQkJCS8qIF9ITUFDX01ENV9IICovCi0KLXZvaWQgY2lmc19NRDVfaW5pdChzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Ci12b2lkIGNpZnNfTUQ1X3VwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLAotCQkJdW5zaWduZWQgbGVuKTsKLXZvaWQgY2lmc19NRDVfZmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY29tZSBmcm9tIGxpYi9obWFjbWQ1LmMgICovCi0KLS8qIHZvaWQgaG1hY19tZDVfaW5pdF9yZmMyMTA0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ki8KLXZvaWQgaG1hY19tZDVfaW5pdF9saW1LX3RvXzY0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci12b2lkIGhtYWNfbWQ1X3VwZGF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgdGV4dF9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci12b2lkIGhtYWNfbWQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpOwotLyogdm9pZCBobWFjX21kNSh1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCXVuc2lnbmVkIGNoYXIgKmRpZ2VzdCk7Ki8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggYTA5ZTA3Ny4uMmE5MzBhNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTIzNiwxMCArMjM2LDcgQEAKIHsKIAlfX3UxNiBtaWQgPSAwOwogCV9fdTE2IGxhc3RfbWlkOwotCWludCAgIGNvbGxpc2lvbjsKLQotCWlmIChzZXJ2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIG1pZDsKKwlib29sIGNvbGxpc2lvbjsKIAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCWxhc3RfbWlkID0gc2VydmVyLT5DdXJyZW50TWlkOyAvKiB3ZSBkbyBub3Qgd2FudCB0byBsb29wIGZvcmV2ZXIgKi8KQEAgLTI1MiwyNCArMjQ5LDM4IEBACiAJKGFuZCBpdCB3b3VsZCBhbHNvIGhhdmUgdG8gaGF2ZSBiZWVuIGEgcmVxdWVzdCB0aGF0CiAJIGRpZCBub3QgdGltZSBvdXQpICovCiAJd2hpbGUgKHNlcnZlci0+Q3VycmVudE1pZCAhPSBsYXN0X21pZCkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkX2VudHJ5OworCQl1bnNpZ25lZCBpbnQgbnVtX21pZHM7CiAKLQkJY29sbGlzaW9uID0gMDsKKwkJY29sbGlzaW9uID0gZmFsc2U7CiAJCWlmIChzZXJ2ZXItPkN1cnJlbnRNaWQgPT0gMCkKIAkJCXNlcnZlci0+Q3VycmVudE1pZCsrOwogCi0JCWxpc3RfZm9yX2VhY2godG1wLCAmc2VydmVyLT5wZW5kaW5nX21pZF9xKSB7Ci0JCQltaWRfZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IG1pZF9xX2VudHJ5LCBxaGVhZCk7Ci0KLQkJCWlmICgobWlkX2VudHJ5LT5taWQgPT0gc2VydmVyLT5DdXJyZW50TWlkKSAmJgotCQkJICAgIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHsKKwkJbnVtX21pZHMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1pZF9lbnRyeSwgJnNlcnZlci0+cGVuZGluZ19taWRfcSwgcWhlYWQpIHsKKwkJCSsrbnVtX21pZHM7CisJCQlpZiAobWlkX2VudHJ5LT5taWQgPT0gc2VydmVyLT5DdXJyZW50TWlkICYmCisJCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKIAkJCQkvKiBUaGlzIG1pZCBpcyBpbiB1c2UsIHRyeSBhIGRpZmZlcmVudCBvbmUgKi8KLQkJCQljb2xsaXNpb24gPSAxOworCQkJCWNvbGxpc2lvbiA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYgKGNvbGxpc2lvbiA9PSAwKSB7CisKKwkJLyoKKwkJICogaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMzJrIG1pZHMgaW4gdGhlIGxpc3QsIHRoZW4gc29tZXRoaW5nCisJCSAqIGlzIHZlcnkgd3JvbmcuIFBvc3NpYmx5IGEgbG9jYWwgdXNlciBpcyB0cnlpbmcgdG8gRG9TIHRoZQorCQkgKiBib3ggYnkgaXNzdWluZyBsb25nLXJ1bm5pbmcgY2FsbHMgYW5kIFNJR0tJTEwnaW5nIHRoZW0uIElmCisJCSAqIHdlIGdldCB0byAyXjE2IG1pZHMgdGhlbiB3ZSdyZSBpbiBiaWcgdHJvdWJsZSBhcyB0aGlzCisJCSAqIGZ1bmN0aW9uIGNvdWxkIGxvb3AgZm9yZXZlci4KKwkJICoKKwkJICogR28gYWhlYWQgYW5kIGFzc2lnbiBvdXQgdGhlIG1pZCBpbiB0aGlzIHNpdHVhdGlvbiwgYnV0IGZvcmNlCisJCSAqIGFuIGV2ZW50dWFsIHJlY29ubmVjdCB0byBjbGVhbiBvdXQgdGhlIHBlbmRpbmdfbWlkX3EuCisJCSAqLworCQlpZiAobnVtX21pZHMgPiAzMjc2OCkKKwkJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWRSZWNvbm5lY3Q7CisKKwkJaWYgKCFjb2xsaXNpb24pIHsKIAkJCW1pZCA9IHNlcnZlci0+Q3VycmVudE1pZDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zODEsMjkgKzM5MiwzMSBAQAogfQogCiBzdGF0aWMgaW50Ci1jaGVja1NNQmhkcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBfX3UxNiBtaWQpCitjaGVja19zbWJfaGRyKHN0cnVjdCBzbWJfaGRyICpzbWIsIF9fdTE2IG1pZCkKIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIHJlYWxseSBpcyBhbiBTTUIsIHRoYXQgaXQgaXMgYSByZXNwb25zZSwKLQkgICBhbmQgdGhhdCB0aGUgbWVzc2FnZSBpZHMgbWF0Y2ggKi8KLQlpZiAoKCooX19sZTMyICopIHNtYi0+UHJvdG9jb2wgPT0gY3B1X3RvX2xlMzIoMHg0MjRkNTNmZikpICYmCi0JCShtaWQgPT0gc21iLT5NaWQpKSB7Ci0JCWlmIChzbWItPkZsYWdzICYgU01CRkxHX1JFU1BPTlNFKQotCQkJcmV0dXJuIDA7Ci0JCWVsc2UgewotCQkvKiBvbmx5IG9uZSB2YWxpZCBjYXNlIHdoZXJlIHNlcnZlciBzZW5kcyB1cyByZXF1ZXN0ICovCi0JCQlpZiAoc21iLT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKQotCQkJCXJldHVybiAwOwotCQkJZWxzZQotCQkJCWNFUlJPUigxLCAiUmVjZWl2ZWQgUmVxdWVzdCBub3QgcmVzcG9uc2UiKTsKLQkJfQotCX0gZWxzZSB7IC8qIGJhZCBzaWduYXR1cmUgb3IgbWlkICovCi0JCWlmICgqKF9fbGUzMiAqKSBzbWItPlByb3RvY29sICE9IGNwdV90b19sZTMyKDB4NDI0ZDUzZmYpKQotCQkJY0VSUk9SKDEsICJCYWQgcHJvdG9jb2wgc3RyaW5nIHNpZ25hdHVyZSBoZWFkZXIgJXgiLAotCQkJCSoodW5zaWduZWQgaW50ICopIHNtYi0+UHJvdG9jb2wpOwotCQlpZiAobWlkICE9IHNtYi0+TWlkKQotCQkJY0VSUk9SKDEsICJNaWRzIGRvIG5vdCBtYXRjaCIpOworCS8qIGRvZXMgaXQgaGF2ZSB0aGUgcmlnaHQgU01CICJzaWduYXR1cmUiID8gKi8KKwlpZiAoKihfX2xlMzIgKikgc21iLT5Qcm90b2NvbCAhPSBjcHVfdG9fbGUzMigweDQyNGQ1M2ZmKSkgeworCQljRVJST1IoMSwgIkJhZCBwcm90b2NvbCBzdHJpbmcgc2lnbmF0dXJlIGhlYWRlciAweCV4IiwKKwkJCSoodW5zaWduZWQgaW50ICopc21iLT5Qcm90b2NvbCk7CisJCXJldHVybiAxOwogCX0KLQljRVJST1IoMSwgImJhZCBzbWIgZGV0ZWN0ZWQuIFRoZSBNaWQ9JWQiLCBzbWItPk1pZCk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBtZXNzYWdlIGlkcyBtYXRjaCAqLworCWlmIChtaWQgIT0gc21iLT5NaWQpIHsKKwkJY0VSUk9SKDEsICJNaWRzIGRvIG5vdCBtYXRjaC4gcmVjZWl2ZWQ9JXUgZXhwZWN0ZWQ9JXUiLAorCQkJc21iLT5NaWQsIG1pZCk7CisJCXJldHVybiAxOworCX0KKworCS8qIGlmIGl0J3MgYSByZXNwb25zZSB0aGVuIGFjY2VwdCAqLworCWlmIChzbWItPkZsYWdzICYgU01CRkxHX1JFU1BPTlNFKQorCQlyZXR1cm4gMDsKKworCS8qIG9ubHkgb25lIHZhbGlkIGNhc2Ugd2hlcmUgc2VydmVyIHNlbmRzIHVzIHJlcXVlc3QgKi8KKwlpZiAoc21iLT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKQorCQlyZXR1cm4gMDsKKworCWNFUlJPUigxLCAiU2VydmVyIHNlbnQgcmVxdWVzdCwgbm90IHJlc3BvbnNlLiBtaWQ9JXUiLCBzbWItPk1pZCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ0OCw3ICs0NjEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoY2hlY2tTTUJoZHIoc21iLCBtaWQpKQorCWlmIChjaGVja19zbWJfaGRyKHNtYiwgbWlkKSkKIAkJcmV0dXJuIDE7CiAJY2xjX2xlbiA9IHNtYkNhbGNTaXplX0xFKHNtYik7CiAKQEAgLTQ2NSwyNSArNDc4LDI2IEBACiAJCQlpZiAoKCg0ICsgbGVuKSAmIDB4RkZGRikgPT0gKGNsY19sZW4gJiAweEZGRkYpKQogCQkJCXJldHVybiAwOyAvKiBiY2Mgd3JhcHBlZCAqLwogCQl9Ci0JCWNGWUkoMSwgIkNhbGN1bGF0ZWQgc2l6ZSAlZCB2cyBsZW5ndGggJWQgbWlzbWF0Y2ggZm9yIG1pZCAlZCIsCisJCWNGWUkoMSwgIkNhbGN1bGF0ZWQgc2l6ZSAldSB2cyBsZW5ndGggJXUgbWlzbWF0Y2ggZm9yIG1pZD0ldSIsCiAJCQkJY2xjX2xlbiwgNCArIGxlbiwgc21iLT5NaWQpOwotCQkvKiBXaW5kb3dzIFhQIGNhbiByZXR1cm4gYSBmZXcgYnl0ZXMgdG9vIG11Y2gsIHByZXN1bWFibHkKLQkJYW4gaWxsZWdhbCBwYWQsIGF0IHRoZSBlbmQgb2YgYnl0ZSByYW5nZSBsb2NrIHJlc3BvbnNlcwotCQlzbyB3ZSBhbGxvdyBmb3IgdGhhdCB0aHJlZSBieXRlIHBhZCwgYXMgbG9uZyBhcyBhY3R1YWwKLQkJcmVjZWl2ZWQgbGVuZ3RoIGlzIGFzIGxvbmcgb3IgbG9uZ2VyIHRoYW4gY2FsY3VsYXRlZCBsZW5ndGggKi8KLQkJLyogV2UgaGF2ZSBub3cgaGFkIHRvIGV4dGVuZCB0aGlzIG1vcmUsIHNpbmNlIHRoZXJlIGlzIGEKLQkJY2FzZSBpbiB3aGljaCBpdCBuZWVkcyB0byBiZSBiaWdnZXIgc3RpbGwgdG8gaGFuZGxlIGEKLQkJbWFsZm9ybWVkIHJlc3BvbnNlIHRvIHRyYW5zYWN0MiBmaW5kZmlyc3QgZnJvbSBXaW5YUCB3aGVuCi0JCWFjY2VzcyBkZW5pZWQgaXMgcmV0dXJuZWQgYW5kIHRodXMgYmNjIGFuZCB3Y3QgYXJlIHplcm8KLQkJYnV0IHNlcnZlciBzYXlzIGxlbmd0aCBpcyAweDIxIGJ5dGVzIHRvbyBsb25nIGFzIGlmIHRoZSBzZXJ2ZXIKLQkJZm9yZ2V0IHRvIHJlc2V0IHRoZSBzbWIgcmZjMTAwMSBsZW5ndGggd2hlbiBpdCByZXNldCB0aGUKLQkJd2N0IGFuZCBiY2MgdG8gbWluaW11bSBzaXplIGFuZCBkcm9wIHRoZSB0MiBwYXJtcyBhbmQgZGF0YSAqLwotCQlpZiAoKDQrbGVuID4gY2xjX2xlbikgJiYgKGxlbiA8PSBjbGNfbGVuICsgNTEyKSkKLQkJCXJldHVybiAwOwotCQllbHNlIHsKLQkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICVkIGJpZ2dlciB0aGFuIFNNQiBmb3IgTWlkPSVkIiwKKworCQlpZiAoNCArIGxlbiA8IGNsY19sZW4pIHsKKwkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICV1IHNtYWxsZXIgdGhhbiBTTUIgZm9yIG1pZD0ldSIsCiAJCQkJCWxlbiwgc21iLT5NaWQpOwogCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAobGVuID4gY2xjX2xlbiArIDUxMikgeworCQkJLyoKKwkJCSAqIFNvbWUgc2VydmVycyAoV2luZG93cyBYUCBpbiBwYXJ0aWN1bGFyKSBzZW5kIG1vcmUKKwkJCSAqIGRhdGEgdGhhbiB0aGUgbGVuZ3RocyBpbiB0aGUgU01CIHBhY2tldCB3b3VsZAorCQkJICogaW5kaWNhdGUgb24gY2VydGFpbiBjYWxscyAoYnl0ZSByYW5nZSBsb2NrcyBhbmQKKwkJCSAqIHRyYW5zMiBmaW5kIGZpcnN0IGNhbGxzIGluIHBhcnRpY3VsYXIpLiBXaGlsZSB0aGUKKwkJCSAqIGNsaWVudCBjYW4gaGFuZGxlIHN1Y2ggYSBmcmFtZSBieSBpZ25vcmluZyB0aGUKKwkJCSAqIHRyYWlsaW5nIGRhdGEsIHdlIGNob29zZSBsaW1pdCB0aGUgYW1vdW50IG9mIGV4dHJhCisJCQkgKiBkYXRhIHRvIDUxMiBieXRlcy4KKwkJCSAqLworCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJXUgbW9yZSB0aGFuIDUxMiBieXRlcyBsYXJnZXIgIgorCQkJCSAgInRoYW4gU01CIGZvciBtaWQ9JXUiLCBsZW4sIHNtYi0+TWlkKTsKKwkJCXJldHVybiAxOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA3ZjI1Y2MzLi5mOGU0Y2QyIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNzY0LDcgKzc2NCw2IEBACiB7CiAJaW50IHJjID0gMDsKIAlpbnQgeGlkLCBpOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc0ZpbGUgPSBOVUxMOwogCWNoYXIgKmN1cnJlbnRfZW50cnk7CkBAIC03NzUsOCArNzc0LDYgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7Ci0KIAkvKgogCSAqIEVuc3VyZSBGaW5kRmlyc3QgZG9lc24ndCBmYWlsIGJlZm9yZSBkb2luZyBmaWxsZGlyKCkgZm9yICcuJyBhbmQKIAkgKiAnLi4nLiBPdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBub3RpZnkgVkZTIGluIGNhc2Ugb2YgZmFpbHVyZS4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZGVzLmMgYi9mcy9jaWZzL3NtYmRlcy5jCmluZGV4IGI2YjZkY2IuLjA0NzIxNDggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZGVzLmMKKysrIGIvZnMvY2lmcy9zbWJkZXMuYwpAQCAtNDUsNyArNDUsNiBAQAogICAgdXAgd2l0aCBhIGRpZmZlcmVudCBhbnN3ZXIgdG8gdGhlIG9uZSBhYm92ZSkKICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImNpZnNlbmNyeXB0LmgiCiAjZGVmaW5lIHVjaGFyIHVuc2lnbmVkIGNoYXIKIAogc3RhdGljIHVjaGFyIHBlcm0xWzU2XSA9IHsgNTcsIDQ5LCA0MSwgMzMsIDI1LCAxNywgOSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZW5jcnlwdC5jIGIvZnMvY2lmcy9zbWJlbmNyeXB0LmMKaW5kZXggMTkyZWE1MS4uYjUwNDFjOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWJlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9zbWJlbmNyeXB0LmMKQEAgLTMyLDkgKzMyLDggQEAKICNpbmNsdWRlICJjaWZzX3VuaWNvZGUuaCIKICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKLSNpbmNsdWRlICJtZDUuaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCi0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKKyNpbmNsdWRlICJjaWZzcHJvdG8uaCIKIAogI2lmbmRlZiBmYWxzZQogI2RlZmluZSBmYWxzZSAwCkBAIC00OCwxNCArNDcsNTggQEAKICNkZWZpbmUgU1NWQUxYKGJ1Zixwb3MsdmFsKSAoQ1ZBTChidWYscG9zKT0odmFsKSYweEZGLENWQUwoYnVmLHBvcysxKT0odmFsKT4+OCkKICNkZWZpbmUgU1NWQUwoYnVmLHBvcyx2YWwpIFNTVkFMWCgoYnVmKSwocG9zKSwoKF9fdTE2KSh2YWwpKSkKIAotLypUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGNvbWUgZnJvbSAgbGlic21iL3NtYmVuY3J5cHQuYyAgKi8KKy8qIHByb2R1Y2UgYSBtZDQgbWVzc2FnZSBkaWdlc3QgZnJvbSBkYXRhIG9mIGxlbmd0aCBuIGJ5dGVzICovCitpbnQKK21kZm91cih1bnNpZ25lZCBjaGFyICptZDRfaGFzaCwgdW5zaWduZWQgY2hhciAqbGlua19zdHIsIGludCBsaW5rX2xlbikKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqbWQ0OworCXN0cnVjdCBzZGVzYyAqc2Rlc2NtZDQ7CiAKLXZvaWQgU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCQl1bnNpZ25lZCBjaGFyICpwMjQpOwotdm9pZCBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpOwotc3RhdGljIHZvaWQgU01CT1dGZW5jcnlwdCh1bnNpZ25lZCBjaGFyIHBhc3N3ZFsxNl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCQkgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pOwotdm9pZCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwgdW5zaWduZWQgY2hhciAqcDI0KTsKKwltZDQgPSBjcnlwdG9fYWxsb2Nfc2hhc2goIm1kNCIsIDAsIDApOworCWlmIChJU19FUlIobWQ0KSkgeworCQlyYyA9IFBUUl9FUlIobWQ0KTsKKwkJY0VSUk9SKDEsICIlczogQ3J5cHRvIG1kNCBhbGxvY2F0aW9uIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCXNpemUgPSBzaXplb2Yoc3RydWN0IHNoYXNoX2Rlc2MpICsgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKG1kNCk7CisJc2Rlc2NtZDQgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc2Rlc2NtZDQpIHsKKwkJcmMgPSAtRU5PTUVNOworCQljRVJST1IoMSwgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gbWRmb3VyX2VycjsKKwl9CisJc2Rlc2NtZDQtPnNoYXNoLnRmbSA9IG1kNDsKKwlzZGVzY21kNC0+c2hhc2guZmxhZ3MgPSAweDA7CisKKwlyYyA9IGNyeXB0b19zaGFzaF9pbml0KCZzZGVzY21kNC0+c2hhc2gpOworCWlmIChyYykgeworCQljRVJST1IoMSwgIiVzOiBDb3VsZCBub3QgaW5pdCBtZDQgc2hhc2hcbiIsIF9fZnVuY19fKTsKKwkJZ290byBtZGZvdXJfZXJyOworCX0KKwljcnlwdG9fc2hhc2hfdXBkYXRlKCZzZGVzY21kNC0+c2hhc2gsIGxpbmtfc3RyLCBsaW5rX2xlbik7CisJcmMgPSBjcnlwdG9fc2hhc2hfZmluYWwoJnNkZXNjbWQ0LT5zaGFzaCwgbWQ0X2hhc2gpOworCittZGZvdXJfZXJyOgorCWNyeXB0b19mcmVlX3NoYXNoKG1kNCk7CisJa2ZyZWUoc2Rlc2NtZDQpOworCisJcmV0dXJuIHJjOworfQorCisvKiBEb2VzIHRoZSBkZXMgZW5jcnlwdGlvbiBmcm9tIHRoZSBOVCBvciBMTSBNRDQgaGFzaC4gKi8KK3N0YXRpYyB2b2lkCitTTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCisJICAgICAgdW5zaWduZWQgY2hhciBwMjRbMjRdKQoreworCXVuc2lnbmVkIGNoYXIgcDIxWzIxXTsKKworCW1lbXNldChwMjEsICdcMCcsIDIxKTsKKworCW1lbWNweShwMjEsIHBhc3N3ZCwgMTYpOworCUVfUDI0KHAyMSwgYzgsIHAyNCk7Cit9CiAKIC8qCiAgICBUaGlzIGltcGxlbWVudHMgdGhlIFgvT3BlbiBTTUIgcGFzc3dvcmQgZW5jcnlwdGlvbgpAQCAtMTE4LDkgKzE2MSwxMCBAQAogICogQ3JlYXRlcyB0aGUgTUQ0IEhhc2ggb2YgdGhlIHVzZXJzIHBhc3N3b3JkIGluIE5UIFVOSUNPREUuCiAgKi8KIAotdm9pZAoraW50CiBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpCiB7CisJaW50IHJjOwogCWludCBsZW47CiAJX191MTYgd3B3ZFsxMjldOwogCkBAIC0xMzksOCArMTgzLDEwIEBACiAJLyogQ2FsY3VsYXRlIGxlbmd0aCBpbiBieXRlcyAqLwogCWxlbiA9IF9teV93Y3NsZW4od3B3ZCkgKiBzaXplb2YoX191MTYpOwogCi0JbWRmb3VyKHAxNiwgKHVuc2lnbmVkIGNoYXIgKikgd3B3ZCwgbGVuKTsKKwlyYyA9IG1kZm91cihwMTYsICh1bnNpZ25lZCBjaGFyICopIHdwd2QsIGxlbik7CiAJbWVtc2V0KHdwd2QsIDAsIDEyOSAqIDIpOworCisJcmV0dXJuIHJjOwogfQogCiAjaWYgMCAvKiBjdXJyZW50bHkgdW51c2VkICovCkBAIC0yMTIsMTkgKzI1OCw2IEBACiB9CiAjZW5kaWYKIAotLyogRG9lcyB0aGUgZGVzIGVuY3J5cHRpb24gZnJvbSB0aGUgTlQgb3IgTE0gTUQ0IGhhc2guICovCi1zdGF0aWMgdm9pZAotU01CT1dGZW5jcnlwdCh1bnNpZ25lZCBjaGFyIHBhc3N3ZFsxNl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCSAgICAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSkKLXsKLQl1bnNpZ25lZCBjaGFyIHAyMVsyMV07Ci0KLQltZW1zZXQocDIxLCAnXDAnLCAyMSk7Ci0KLQltZW1jcHkocDIxLCBwYXNzd2QsIDE2KTsKLQlFX1AyNChwMjEsIGM4LCBwMjQpOwotfQotCiAvKiBEb2VzIHRoZSBkZXMgZW5jcnlwdGlvbiBmcm9tIHRoZSBGSVJTVCA4IEJZVEVTIG9mIHRoZSBOVCBvciBMTSBNRDQgaGFzaC4gKi8KICNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KIHN0YXRpYyB2b2lkCkBAIC0yNDIsMTYgKzI3NSwyMSBAQAogI2VuZGlmCiAKIC8qIERvZXMgdGhlIE5UIE1ENCBoYXNoIHRoZW4gZGVzIGVuY3J5cHRpb24uICovCi0KLXZvaWQKK2ludAogU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCkKIHsKKwlpbnQgcmM7CiAJdW5zaWduZWQgY2hhciBwMjFbMjFdOwogCiAJbWVtc2V0KHAyMSwgJ1wwJywgMjEpOwogCi0JRV9tZDRoYXNoKHBhc3N3ZCwgcDIxKTsKKwlyYyA9IEVfbWQ0aGFzaChwYXNzd2QsIHAyMSk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzIENhbid0IGdlbmVyYXRlIE5UIGhhc2gsIGVycm9yOiAlZCIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CiAJU01CT1dGZW5jcnlwdChwMjEsIGM4LCBwMjQpOworCXJldHVybiByYzsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCBjMWNjY2ExLi5mYmM1YWFjIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTIzNiw5ICsyMzYsOSBAQAogCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNOZWVkUmVjb25uZWN0OwogCX0KIAotCWlmIChyYyA8IDApIHsKKwlpZiAocmMgPCAwICYmIHJjICE9IC1FSU5UUikKIAkJY0VSUk9SKDEsICJFcnJvciAlZCBzZW5kaW5nIGRhdGEgb24gc29ja2V0IHRvIHNlcnZlciIsIHJjKTsKLQl9IGVsc2UKKwllbHNlCiAJCXJjID0gMDsKIAogCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQpAQCAtMzU5LDYgKzM1OSwxMCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJLyogZW5hYmxlIHNpZ25pbmcgaWYgc2VydmVyIHJlcXVpcmVzIGl0ICovCisJaWYgKHNlcnZlci0+c2VjTW9kZSAmIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCisJCWluX2J1Zi0+RmxhZ3MyIHw9IFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFOworCiAJbXV0ZXhfbG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOwogCW1pZCA9IEFsbG9jTWlkUUVudHJ5KGluX2J1Ziwgc2VydmVyKTsKIAlpZiAobWlkID09IE5VTEwpIHsKQEAgLTU3MCwxNyArNTc0LDMzIEBACiAjZW5kaWYKIAogCW11dGV4X3VubG9jaygmc2VzLT5zZXJ2ZXItPnNydl9tdXRleCk7Ci0JY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCi0JaWYgKHJjIDwgMCkKKwlpZiAocmMgPCAwKSB7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAkJZ290byBvdXQ7CisJfQogCi0JaWYgKGxvbmdfb3AgPT0gQ0lGU19BU1lOQ19PUCkKKwlpZiAobG9uZ19vcCA9PSBDSUZTX0FTWU5DX09QKSB7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAkJZ290byBvdXQ7CisJfQogCiAJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7Ci0JaWYgKHJjICE9IDApCi0JCWdvdG8gb3V0OworCWlmIChyYyAhPSAwKSB7CisJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJbWlkUS0+Y2FsbGJhY2sgPSBEZWxldGVNaWRRRW50cnk7CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOworCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsKKwkJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOworCQkJcmV0dXJuIHJjOworCQl9CisJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJfQorCisJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCiAJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOwogCWlmIChyYyAhPSAwKSB7CkBAIC03MjQsOCArNzQ0LDE5IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7Ci0JaWYgKHJjICE9IDApCi0JCWdvdG8gb3V0OworCWlmIChyYyAhPSAwKSB7CisJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJLyogbm8gbG9uZ2VyIGNvbnNpZGVyZWQgdG8gYmUgImluLWZsaWdodCIgKi8KKwkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCX0KIAogCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKIAlpZiAocmMgIT0gMCkgewpAQCAtOTIyLDEwICs5NTMsMjEgQEAKIAkJCX0KIAkJfQogCi0JCWlmICh3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSkgPT0gMCkgewotCQkJLyogV2UgZ290IHRoZSByZXNwb25zZSAtIHJlc3RhcnQgc3lzdGVtIGNhbGwuICovCi0JCQlyc3RhcnQgPSAxOworCQlyYyA9IHdhaXRfZm9yX3Jlc3BvbnNlKHNlcy0+c2VydmVyLCBtaWRRKTsKKwkJaWYgKHJjKSB7CisJCQlzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKKwkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJCS8qIG5vIGxvbmdlciBjb25zaWRlcmVkIHRvIGJlICJpbi1mbGlnaHQiICovCisJCQkJbWlkUS0+Y2FsbGJhY2sgPSBEZWxldGVNaWRRRW50cnk7CisJCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQl9CisKKwkJLyogV2UgZ290IHRoZSByZXNwb25zZSAtIHJlc3RhcnQgc3lzdGVtIGNhbGwuICovCisJCXJzdGFydCA9IDE7CiAJfQogCiAJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOwpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA5ZjQ5M2VlLi4yYTZiZDlhNCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTE3Niw2ICsxNzYsNyBAQAogCiAvKioKICAqIGRlbnRyeV9yY3V3YWxrX2JhcnJpZXIgLSBpbnZhbGlkYXRlIGluLXByb2dyZXNzIHJjdS13YWxrIGxvb2t1cHMKKyAqIEBkZW50cnk6IHRoZSB0YXJnZXQgZGVudHJ5CiAgKiBBZnRlciB0aGlzIGNhbGwsIGluLXByb2dyZXNzIHJjdS13YWxrIHBhdGggbG9va3VwIHdpbGwgZmFpbC4gVGhpcwogICogc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB1bmhhc2hpbmcsIGFuZCBhZnRlciBjaGFuZ2luZyBkX2lub2RlIChpZgogICogdGhlIGRlbnRyeSBoYXMgbm90IGFscmVhZHkgYmVlbiB1bmhhc2hlZCkuCkBAIC0yODEsNiArMjgyLDcgQEAKIC8qKgogICogZF9raWxsIC0ga2lsbCBkZW50cnkgYW5kIHJldHVybiBwYXJlbnQKICAqIEBkZW50cnk6IGRlbnRyeSB0byBraWxsCisgKiBAcGFyZW50OiBwYXJlbnQgZGVudHJ5CiAgKgogICogVGhlIGRlbnRyeSBtdXN0IGFscmVhZHkgYmUgdW5oYXNoZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgTFJVLgogICoKQEAgLTE5NzMsNyArMTk3NSw3IEBACiAvKioKICAqIGRfdmFsaWRhdGUgLSB2ZXJpZnkgZGVudHJ5IHByb3ZpZGVkIGZyb20gaW5zZWN1cmUgc291cmNlIChkZXByZWNhdGVkKQogICogQGRlbnRyeTogVGhlIGRlbnRyeSBhbGxlZ2VkIHRvIGJlIHZhbGlkIGNoaWxkIG9mIEBkcGFyZW50Ci0gKiBAcGFyZW50OiBUaGUgcGFyZW50IGRlbnRyeSAoa25vd24gdG8gYmUgdmFsaWQpCisgKiBAZHBhcmVudDogVGhlIHBhcmVudCBkZW50cnkgKGtub3duIHRvIGJlIHZhbGlkKQogICoKICAqIEFuIGluc2VjdXJlIHNvdXJjZSBoYXMgc2VudCB1cyBhIGRlbnRyeSwgaGVyZSB3ZSB2ZXJpZnkgaXQgYW5kIGRnZXQoKSBpdC4KICAqIFRoaXMgaXMgdXNlZCBieSBuY3BmcyBpbiBpdHMgcmVhZGRpciBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggY2M4YTliNy4uMjY3ZDBhZCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTExMTQsNiArMTExNCwxNyBAQAogCXJldHVybiBlcF9zY2FuX3JlYWR5X2xpc3QoZXAsIGVwX3NlbmRfZXZlbnRzX3Byb2MsICZlc2VkKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGltZXNwZWMgZXBfc2V0X21zdGltZW91dChsb25nIG1zKQoreworCXN0cnVjdCB0aW1lc3BlYyBub3csIHRzID0geworCQkudHZfc2VjID0gbXMgLyBNU0VDX1BFUl9TRUMsCisJCS50dl9uc2VjID0gTlNFQ19QRVJfTVNFQyAqIChtcyAlIE1TRUNfUEVSX1NFQyksCisJfTsKKworCWt0aW1lX2dldF90cygmbm93KTsKKwlyZXR1cm4gdGltZXNwZWNfYWRkX3NhZmUobm93LCB0cyk7Cit9CisKIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAogCQkgICBpbnQgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpCiB7CkBAIC0xMTIxLDEyICsxMTMyLDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIHNsYWNrOwogCXdhaXRfcXVldWVfdCB3YWl0OwotCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZTsKIAlrdGltZV90IGV4cGlyZXMsICp0byA9IE5VTEw7CiAKIAlpZiAodGltZW91dCA+IDApIHsKLQkJa3RpbWVfZ2V0X3RzKCZlbmRfdGltZSk7Ci0JCXRpbWVzcGVjX2FkZF9ucygmZW5kX3RpbWUsICh1NjQpdGltZW91dCAqIE5TRUNfUEVSX01TRUMpOworCQlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWUgPSBlcF9zZXRfbXN0aW1lb3V0KHRpbWVvdXQpOworCiAJCXNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KCZlbmRfdGltZSk7CiAJCXRvID0gJmV4cGlyZXM7CiAJCSp0byA9IHRpbWVzcGVjX3RvX2t0aW1lKGVuZF90aW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjNjJlZmNiLi41MmE0NDdkIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlmaWxlID0gZG9fZmlscF9vcGVuKEFUX0ZEQ1dELCB0bXAsCi0JCQkJT19MQVJHRUZJTEUgfCBPX1JET05MWSB8IEZNT0RFX0VYRUMsIDAsCisJCQkJT19MQVJHRUZJTEUgfCBPX1JET05MWSB8IF9fRk1PREVfRVhFQywgMCwKIAkJCQlNQVlfUkVBRCB8IE1BWV9FWEVDIHwgTUFZX09QRU4pOwogCXB1dG5hbWUodG1wKTsKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CkBAIC03MjMsNyArNzIzLDcgQEAKIAlpbnQgZXJyOwogCiAJZmlsZSA9IGRvX2ZpbHBfb3BlbihBVF9GRENXRCwgbmFtZSwKLQkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgRk1PREVfRVhFQywgMCwKKwkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgX19GTU9ERV9FWEVDLCAwLAogCQkJCU1BWV9FWEVDIHwgTUFZX09QRU4pOwogCWlmIChJU19FUlIoZmlsZSkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvaW5vZGUuYyBiL2ZzL2V4b2ZzL2lub2RlLmMKaW5kZXggNDI2ODU0Mi4uYTc1NTUyMyAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvaW5vZGUuYworKysgYi9mcy9leG9mcy9pbm9kZS5jCkBAIC0xMDMwLDcgKzEwMzAsNiBAQAogCQltZW1jcHkob2ktPmlfZGF0YSwgZmNiLmlfZGF0YSwgc2l6ZW9mKGZjYi5pX2RhdGEpKTsKIAl9CiAKLQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gc2ItPnNfYmRpOwogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmV4b2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIAkJaW5vZGUtPmlfZm9wID0gJmV4b2ZzX2ZpbGVfb3BlcmF0aW9uczsKQEAgLTExMzEsNyArMTEzMCw2IEBACiAKIAlzYmkgPSBzYi0+c19mc19pbmZvOwogCi0JaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9IHNiLT5zX2JkaTsKIAlzYi0+c19kaXJ0ID0gMTsKIAlpbm9kZV9pbml0X293bmVyKGlub2RlLCBkaXIsIG1vZGUpOwogCWlub2RlLT5pX2lubyA9IHNiaS0+c19uZXh0aWQrKzsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGVjYzhiMzkuLmNiMTAyNjEgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtODE1LDcgKzgxNSw3IEBACiAJCV9fT19TWU5DCXwgT19EU1lOQwl8IEZBU1lOQwl8CiAJCU9fRElSRUNUCXwgT19MQVJHRUZJTEUJfCBPX0RJUkVDVE9SWQl8CiAJCU9fTk9GT0xMT1cJfCBPX05PQVRJTUUJfCBPX0NMT0VYRUMJfAotCQlGTU9ERV9FWEVDCisJCV9fRk1PREVfRVhFQwogCQkpKTsKIAogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLApkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGMzZTg5YWQuLmViMzZiNmIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJCWdvdG8gZmFpbDsKIAogCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZmlsZXMpOworCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCWlmIChzZWN1cml0eV9maWxlX2FsbG9jKGYpKQogCQlnb3RvIGZhaWxfc2VjOwogCiAJSU5JVF9MSVNUX0hFQUQoJmYtPmZfdS5mdV9saXN0KTsKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwotCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+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+Pj0gSEZTUExVU19TRUNUT1JfU0hJRlQ7CiAJCXBhcnRfc3RhcnQgKz0gd2QuYWJsa19zdGFydCArIHdkLmVtYmVkX3N0YXJ0ICogd2QuYWJsa19zaXplOwogCQlwYXJ0X3NpemUgPSB3ZC5lbWJlZF9jb3VudCAqIHdkLmFibGtfc2l6ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQkgKiAoc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgY2Ryb20vbG9vcCB0aG91Z2gpCiAJCSAqLwogCQlpZiAoaGZzX3BhcnRfZmluZChzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOwogCQlnb3RvIHJlcmVhZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IGE1OTYzNWUuLjFlZWJlYjcgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtMjczLDYgKzI3MywxMyBAQAogCQlsZW4gPSBpc2l6ZTsKIAl9CiAKKwkvKgorCSAqIFNvbWUgZmlsZXN5c3RlbXMgY2FuJ3QgZGVhbCB3aXRoIGJlaW5nIGFza2VkIHRvIG1hcCBsZXNzIHRoYW4KKwkgKiBibG9ja3NpemUsIHNvIG1ha2Ugc3VyZSBvdXIgbGVuIGlzIGF0IGxlYXN0IGJsb2NrIGxlbmd0aC4KKwkgKi8KKwlpZiAobG9naWNhbF90b19ibGsoaW5vZGUsIGxlbikgPT0gMCkKKwkJbGVuID0gYmxrX3RvX2xvZ2ljYWwoaW5vZGUsIDEpOworCiAJc3RhcnRfYmxrID0gbG9naWNhbF90b19ibGsoaW5vZGUsIHN0YXJ0KTsKIAlsYXN0X2JsayA9IGxvZ2ljYWxfdG9fYmxrKGlub2RlLCBzdGFydCArIGxlbiAtIDEpOwogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ob3N0LmMgYi9mcy9sb2NrZC9ob3N0LmMKaW5kZXggNWYxYmNiMi4uYjdjOTliZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvaG9zdC5jCisrKyBiL2ZzL2xvY2tkL2hvc3QuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCQkJCXN0cnVjdCBuc21faGFuZGxlICpuc20sCiAJCQkJCWNvbnN0IHN0cnVjdCBubG1fcmVib290ICppbmZvKQogewotCXN0cnVjdCBubG1faG9zdCAqaG9zdCA9IE5VTEw7CisJc3RydWN0IG5sbV9ob3N0ICpob3N0OwogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwogCkBAIC01MzIsMTIgKzUzMiwxMyBAQAogCQkJaG9zdC0+aF9zdGF0ZSsrOwogCiAJCQlubG1fZ2V0X2hvc3QoaG9zdCk7Ci0JCQlnb3RvIG91dDsKKwkJCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCQkJcmV0dXJuIGhvc3Q7CiAJCX0KIAl9Ci1vdXQ6CisKIAltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKLQlyZXR1cm4gaG9zdDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suYyBiL2ZzL25mcy9jYWxsYmFjay5jCmluZGV4IDE5OTAxNjUuLmUzZDI5NDIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5jCisrKyBiL2ZzL25mcy9jYWxsYmFjay5jCkBAIC0xMzUsMzMgKzEzNSw2IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKIC8qCi0gKiAgKiBDQl9TRVFVRU5DRSBvcGVyYXRpb25zIHdpbGwgZmFpbCB1bnRpbCB0aGUgY2FsbGJhY2sgc2Vzc2lvbmlkIGlzIHNldC4KLSAqICAgKi8KLWludCBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKLXsKLQlzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBjbHAtPmNsX3JwY2NsaWVudC0+Y2xfeHBydC0+YmNfc2VydjsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKmJjX3NpZDsKLQotCWlmICghc2Vydi0+c3ZfYmNfeHBydCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBvbiBzdWNjZXNzIGZyZWVkIGluIHhwcnRfZnJlZSAqLwotCWJjX3NpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnM0X3Nlc3Npb25pZCksIEdGUF9LRVJORUwpOwotCWlmICghYmNfc2lkKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoYmNfc2lkLT5kYXRhLCAmY2xwLT5jbF9zZXNzaW9uLT5zZXNzX2lkLmRhdGEsCi0JCU5GUzRfTUFYX1NFU1NJT05JRF9MRU4pOwotCXNwaW5fbG9ja19iaCgmc2Vydi0+c3ZfY2JfbG9jayk7Ci0Jc2Vydi0+c3ZfYmNfeHBydC0+eHB0X2JjX3NpZCA9IGJjX3NpZDsKLQlzcGluX3VubG9ja19iaCgmc2Vydi0+c3ZfY2JfbG9jayk7Ci0JZHByaW50aygiJXMgc2V0IHhwdF9iY19zaWQ9JXU6JXU6JXU6JXUgZm9yIHN2X2JjX3hwcnQgJXBcbiIsIF9fZnVuY19fLAotCQkoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMF0sICgodTMyICopYmNfc2lkLT5kYXRhKVsxXSwKLQkJKCh1MzIgKiliY19zaWQtPmRhdGEpWzJdLCAoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbM10sCi0JCXNlcnYtPnN2X2JjX3hwcnQpOwotCXJldHVybiAwOwotfQotCi0vKgogICogVGhlIGNhbGxiYWNrIHNlcnZpY2UgZm9yIE5GU3Y0LjEgY2FsbGJhY2tzCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTI2NiwxMCArMjM5LDYgQEAKIAkJc3RydWN0IG5mc19jYWxsYmFja19kYXRhICpjYl9pbmZvKQogewogfQotaW50IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewotCXJldHVybiAwOwotfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAvKgpAQCAtMzU5LDc4ICszMjgsNTggQEAKIAltdXRleF91bmxvY2soJm5mc19jYWxsYmFja19tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAotCQkJCQlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQorLyogQm9vbGVhbiBjaGVjayBvZiBSUENfQVVUSF9HU1MgcHJpbmNpcGFsICovCitpbnQKK2NoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKIAlzdHJ1Y3QgcnBjX2NsbnQgKnIgPSBjbHAtPmNsX3JwY2NsaWVudDsKIAljaGFyICpwID0gc3ZjX2dzc19wcmluY2lwYWwocnFzdHApOwogCisJaWYgKHJxc3RwLT5ycV9hdXRob3AtPmZsYXZvdXIgIT0gUlBDX0FVVEhfR1NTKQorCQlyZXR1cm4gMTsKKwogCS8qIE5vIFJQQ19BVVRIX0dTUyBvbiBORlN2NC4xIGJhY2sgY2hhbm5lbCB5ZXQgKi8KIAlpZiAoY2xwLT5jbF9taW5vcnZlcnNpb24gIT0gMCkKLQkJcmV0dXJuIFNWQ19EUk9QOworCQlyZXR1cm4gMDsKIAkvKgogCSAqIEl0IG1pZ2h0IGp1c3QgYmUgYSBub3JtYWwgdXNlciBwcmluY2lwYWwsIGluIHdoaWNoIGNhc2UKIAkgKiB1c2Vyc3BhY2Ugd29uJ3QgYm90aGVyIHRvIHRlbGwgdXMgdGhlIG5hbWUgYXQgYWxsLgogCSAqLwogCWlmIChwID09IE5VTEwpCi0JCXJldHVybiBTVkNfREVOSUVEOworCQlyZXR1cm4gMDsKIAogCS8qIEV4cGVjdCBhIEdTU19DX05UX0hPU1RCQVNFRF9OQU1FIGxpa2UgIm5mc0BzZXJ2ZXJob3N0bmFtZSIgKi8KIAogCWlmIChtZW1jbXAocCwgIm5mc0AiLCA0KSAhPSAwKQotCQlyZXR1cm4gU1ZDX0RFTklFRDsKKwkJcmV0dXJuIDA7CiAJcCArPSA0OwogCWlmIChzdHJjbXAocCwgci0+Y2xfc2VydmVyKSAhPSAwKQotCQlyZXR1cm4gU1ZDX0RFTklFRDsKLQlyZXR1cm4gU1ZDX09LOworCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAotLyogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBoZWxwZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzX2NiX2ZpbmRfY2xpZW50KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCi17Ci0Jc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzZXNzaW9uaWQgPSBiY194cHJ0X3NpZChycXN0cCk7Ci0JaW50IGlzX2NiX2NvbXBvdW5kID0gcnFzdHAtPnJxX3Byb2MgPT0gQ0JfQ09NUE9VTkQgPyAxIDogMDsKLQotCWRwcmludGsoIi0tPiAlcyBycV9wcm9jICVkXG4iLCBfX2Z1bmNfXywgcnFzdHAtPnJxX3Byb2MpOwotCWlmIChzdmNfaXNfYmFja2NoYW5uZWwocnFzdHApKQotCQkvKiBTZXNzaW9uaWQgKHVzdWFsbHkpIHNldCBhZnRlciBDQl9OVUxMIHBpbmcgKi8KLQkJcmV0dXJuIG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKHN2Y19hZGRyKHJxc3RwKSwgc2Vzc2lvbmlkLAotCQkJCQkJICBpc19jYl9jb21wb3VuZCk7Ci0JZWxzZQotCQkvKiBObyBjYWxsYmFjayBpZGVudGlmaWVyIGluIHBnX2F1dGhlbnRpY2F0ZSAqLwotCQlyZXR1cm4gbmZzNF9maW5kX2NsaWVudF9ub19pZGVudChzdmNfYWRkcihycXN0cCkpOwotfQotCi0vKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGZvciBuZnN2NCBjYWxsYmFjayB0aHJlYWRzLiAqLworLyoKKyAqIHBnX2F1dGhlbnRpY2F0ZSBtZXRob2QgZm9yIG5mc3Y0IGNhbGxiYWNrIHRocmVhZHMuCisgKgorICogVGhlIGF1dGhmbGF2b3IgaGFzIGJlZW4gbmVnb3RpYXRlZCwgc28gYW4gaW5jb3JyZWN0IGZsYXZvciBpcyBhIHNlcnZlcgorICogYnVnLiBEcm9wIHBhY2tldHMgd2l0aCBpbmNvcnJlY3QgYXV0aGZsYXZvci4KKyAqCisgKiBBbGwgb3RoZXIgY2hlY2tpbmcgZG9uZSBhZnRlciBORlMgZGVjb2Rpbmcgd2hlcmUgdGhlIG5mc19jbGllbnQgY2FuIGJlCisgKiBmb3VuZCBpbiBuZnM0X2NhbGxiYWNrX2NvbXBvdW5kCisgKi8KIHN0YXRpYyBpbnQgbmZzX2NhbGxiYWNrX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7Ci0JUlBDX0lGREVCVUcoY2hhciBidWZbUlBDX01BWF9BRERSQlVGTEVOXSk7Ci0JaW50IHJldCA9IFNWQ19PSzsKLQotCS8qIERvbid0IHRhbGsgdG8gc3RyYW5nZXJzICovCi0JY2xwID0gbmZzX2NiX2ZpbmRfY2xpZW50KHJxc3RwKTsKLQlpZiAoY2xwID09IE5VTEwpCi0JCXJldHVybiBTVkNfRFJPUDsKLQotCWRwcmludGsoIiVzOiAlcyBORlN2NCBjYWxsYmFjayFcbiIsIF9fZnVuY19fLAotCQkJc3ZjX3ByaW50X2FkZHIocnFzdHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKLQogCXN3aXRjaCAocnFzdHAtPnJxX2F1dGhvcC0+Zmxhdm91cikgewotCQljYXNlIFJQQ19BVVRIX05VTEw6Ci0JCQlpZiAocnFzdHAtPnJxX3Byb2MgIT0gQ0JfTlVMTCkKLQkJCQlyZXQgPSBTVkNfREVOSUVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlBDX0FVVEhfVU5JWDoKLQkJCWJyZWFrOwotCQljYXNlIFJQQ19BVVRIX0dTUzoKLQkJCXJldCA9IGNoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoY2xwLCBycXN0cCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IFNWQ19ERU5JRUQ7CisJY2FzZSBSUENfQVVUSF9OVUxMOgorCQlpZiAocnFzdHAtPnJxX3Byb2MgIT0gQ0JfTlVMTCkKKwkJCXJldHVybiBTVkNfRFJPUDsKKwkJYnJlYWs7CisJY2FzZSBSUENfQVVUSF9HU1M6CisJCS8qIE5vIFJQQ19BVVRIX0dTUyBzdXBwb3J0IHlldCBpbiBORlN2NC4xICovCisJCSBpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKKwkJCXJldHVybiBTVkNfRFJPUDsKIAl9Ci0JbmZzX3B1dF9jbGllbnQoY2xwKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBTVkNfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suaCBiL2ZzL25mcy9jYWxsYmFjay5oCmluZGV4IGQzYjQ0ZjkuLjQ2ZDkzY2UgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5oCisrKyBiL2ZzL25mcy9jYWxsYmFjay5oCkBAIC03LDYgKzcsNyBAQAogICovCiAjaWZuZGVmIF9fTElOVVhfRlNfTkZTX0NBTExCQUNLX0gKICNkZWZpbmUgX19MSU5VWF9GU19ORlNfQ0FMTEJBQ0tfSAorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KIAogI2RlZmluZSBORlM0X0NBTExCQUNLIDB4NDAwMDAwMDAKICNkZWZpbmUgTkZTNF9DQUxMQkFDS19YRFJTSVpFIDIwNDgKQEAgLTM3LDcgKzM4LDYgQEAKIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlIHsKIAlfX2JlMzIJCQlkcmNfc3RhdHVzOwogCXN0cnVjdCBuZnNfY2xpZW50CSpjbHA7Ci0Jc3RydWN0IG5mczRfc2Vzc2lvbmlkCSpzdmNfc2lkOyAvKiB2NC4xIGNhbGxiYWNrIHNlcnZpY2Ugc2Vzc2lvbmlkICovCiB9OwogCiBzdHJ1Y3QgY2JfY29tcG91bmRfaGRyX2FyZyB7CkBAIC0xNjgsNyArMTY4LDcgQEAKIGV4dGVybiB2b2lkIG5mczRfY2hlY2tfZHJhaW5fYmNfY29tcGxldGUoc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzKTsKIGV4dGVybiB2b2lkIG5mczRfY2JfdGFrZV9zbG90KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApOwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwotCitleHRlcm4gaW50IGNoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHN2Y19ycXN0ICopOwogZXh0ZXJuIF9fYmUzMiBuZnM0X2NhbGxiYWNrX2dldGF0dHIoc3RydWN0IGNiX2dldGF0dHJhcmdzICphcmdzLAogCQkJCSAgICBzdHJ1Y3QgY2JfZ2V0YXR0cnJlcyAqcmVzLAogCQkJCSAgICBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSAqY3BzKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja19wcm9jLmMgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCmluZGV4IDRiYjkxY2IuLjg5NTg3NTcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwpAQCAtMzczLDE3ICszNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwogCWludCBpOwotCV9fYmUzMiBzdGF0dXM7CisJX19iZTMyIHN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEU0VTU0lPTik7CiAKIAljcHMtPmNscCA9IE5VTEw7CiAKLQlzdGF0dXMgPSBodG9ubChORlM0RVJSX0JBRFNFU1NJT04pOwotCS8qIEluY29taW5nIHNlc3Npb24gbXVzdCBtYXRjaCB0aGUgY2FsbGJhY2sgc2Vzc2lvbiAqLwotCWlmIChtZW1jbXAoJmFyZ3MtPmNzYV9zZXNzaW9uaWQsIGNwcy0+c3ZjX3NpZCwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikpCi0JCWdvdG8gb3V0OwotCi0JY2xwID0gbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoYXJncy0+Y3NhX2FkZHIsCi0JCQkJCSAmYXJncy0+Y3NhX3Nlc3Npb25pZCwgMSk7CisJY2xwID0gbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoYXJncy0+Y3NhX2FkZHIsICZhcmdzLT5jc2Ffc2Vzc2lvbmlkKTsKIAlpZiAoY2xwID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCkBAIC00MTQsOSArNDA4LDkgQEAKIAlyZXMtPmNzcl9oaWdoZXN0c2xvdGlkID0gTkZTNDFfQkNfTUFYX0NBTExCQUNLUyAtIDE7CiAJcmVzLT5jc3JfdGFyZ2V0X2hpZ2hlc3RzbG90aWQgPSBORlM0MV9CQ19NQVhfQ0FMTEJBQ0tTIC0gMTsKIAluZnM0X2NiX3Rha2Vfc2xvdChjbHApOwotCWNwcy0+Y2xwID0gY2xwOyAvKiBwdXQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZCAqLwogCiBvdXQ6CisJY3BzLT5jbHAgPSBjbHA7IC8qIHB1dCBpbiBuZnM0X2NhbGxiYWNrX2NvbXBvdW5kICovCiAJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmNzYV9ucmNsaXN0czsgaSsrKQogCQlrZnJlZShhcmdzLT5jc2FfcmNsaXN0c1tpXS5yY2xfcmVmY2FsbHMpOwogCWtmcmVlKGFyZ3MtPmNzYV9yY2xpc3RzKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja194ZHIuYyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwppbmRleCAyMzExMmMyLi4xNGUwZjkzIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCkBAIC03OTQsMTAgKzc5NCw5IEBACiAKIAlpZiAoaGRyX2FyZy5taW5vcnZlcnNpb24gPT0gMCkgewogCQljcHMuY2xwID0gbmZzNF9maW5kX2NsaWVudF9pZGVudChoZHJfYXJnLmNiX2lkZW50KTsKLQkJaWYgKCFjcHMuY2xwKQorCQlpZiAoIWNwcy5jbHAgfHwgIWNoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoY3BzLmNscCwgcnFzdHApKQogCQkJcmV0dXJuIHJwY19kcm9wX3JlcGx5OwotCX0gZWxzZQotCQljcHMuc3ZjX3NpZCA9IGJjX3hwcnRfc2lkKHJxc3RwKTsKKwl9CiAKIAloZHJfcmVzLnRhZ2xlbiA9IGhkcl9hcmcudGFnbGVuOwogCWhkcl9yZXMudGFnID0gaGRyX2FyZy50YWc7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggMTkyZjJmOC4uYmQzY2EzMiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTIwNiwxNiArMTIwNiwxMSBAQAogICogRm9yIENCX0NPTVBPVU5EIGNhbGxzLCBmaW5kIGEgY2xpZW50IGJ5IElQIGFkZHJlc3MsIHByb3RvY29sIHZlcnNpb24sCiAgKiBtaW5vcnZlcnNpb24sIGFuZCBzZXNzaW9uSUQKICAqCi0gKiBDUkVBVEVfU0VTU0lPTiB0cmlnZ2VycyBhIENCX05VTEwgcGluZyBmcm9tIHNlcnZlcnMuIFRoZSBjYWxsYmFjayBzZXJ2aWNlCi0gKiBzZXNzaW9uaWQgY2FuIG9ubHkgYmUgc2V0IGFmdGVyIHRoZSBDUkVBVEVfU0VTU0lPTiByZXR1cm4sIHNvIGEgQ0JfTlVMTAotICogY2FuIGFycml2ZSBiZWZvcmUgdGhlIGNhbGxiYWNrIHNlc3Npb25pZCBpcyBzZXQuIEZvciBDQl9OVUxMIGNhbGxzLAotICogZmluZCBhIGNsaWVudCBieSBJUCBhZGRyZXNzIHByb3RvY29sIHZlcnNpb24sIGFuZCBtaW5vcnZlcnNpb24uCi0gKgogICogUmV0dXJucyBOVUxMIGlmIG5vIHN1Y2ggY2xpZW50CiAgKi8KIHN0cnVjdCBuZnNfY2xpZW50ICoKIG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkLCBpbnQgaXNfY2JfY29tcG91bmQpCisJCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCkKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwogCkBAIC0xMjI3LDkgKzEyMjIsOSBAQAogCQlpZiAoIW5mczRfaGFzX3Nlc3Npb24oY2xwKSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIE1hdGNoIHNlc3Npb25pZCB1bmxlc3MgY2JfbnVsbCBjYWxsKi8KLQkJaWYgKGlzX2NiX2NvbXBvdW5kICYmIChtZW1jbXAoY2xwLT5jbF9zZXNzaW9uLT5zZXNzX2lkLmRhdGEsCi0JCSAgICBzaWQtPmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pICE9IDApKQorCQkvKiBNYXRjaCBzZXNzaW9uaWQqLworCQlpZiAobWVtY21wKGNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAorCQkgICAgc2lkLT5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSAhPSAwKQogCQkJY29udGludWU7CiAKIAkJYXRvbWljX2luYygmY2xwLT5jbF9jb3VudCk7CkBAIC0xMjQ0LDcgKzEyMzksNyBAQAogCiBzdHJ1Y3QgbmZzX2NsaWVudCAqCiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCwgaW50IGlzX2NiX2NvbXBvdW5kKQorCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGVsZWdhdGlvbi5jIGIvZnMvbmZzL2RlbGVnYXRpb24uYwppbmRleCAzNjRlNDMyLi5iYmJjNmJmIDEwMDY0NAotLS0gYS9mcy9uZnMvZGVsZWdhdGlvbi5jCisrKyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKQEAgLTIzLDggKzIzLDYgQEAKIAogc3RhdGljIHZvaWQgbmZzX2RvX2ZyZWVfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24pCiB7Ci0JaWYgKGRlbGVnYXRpb24tPmNyZWQpCi0JCXB1dF9ycGNjcmVkKGRlbGVnYXRpb24tPmNyZWQpOwogCWtmcmVlKGRlbGVnYXRpb24pOwogfQogCkBAIC0zNyw2ICszNSwxMCBAQAogCiBzdGF0aWMgdm9pZCBuZnNfZnJlZV9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKIHsKKwlpZiAoZGVsZWdhdGlvbi0+Y3JlZCkgeworCQlwdXRfcnBjY3JlZChkZWxlZ2F0aW9uLT5jcmVkKTsKKwkJZGVsZWdhdGlvbi0+Y3JlZCA9IE5VTEw7CisJfQogCWNhbGxfcmN1KCZkZWxlZ2F0aW9uLT5yY3UsIG5mc19mcmVlX2RlbGVnYXRpb25fY2FsbGJhY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggZTZhY2UwZC4uOTk0M2E3NSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtNDA3LDE1ICs0MDcsMTggQEAKIAkJcG9zICs9IHZlYy0+aW92X2xlbjsKIAl9CiAKKwkvKgorCSAqIElmIG5vIGJ5dGVzIHdlcmUgc3RhcnRlZCwgcmV0dXJuIHRoZSBlcnJvciwgYW5kIGxldCB0aGUKKwkgKiBnZW5lcmljIGxheWVyIGhhbmRsZSB0aGUgY29tcGxldGlvbi4KKwkgKi8KKwlpZiAocmVxdWVzdGVkX2J5dGVzID09IDApIHsKKwkJbmZzX2RpcmVjdF9yZXFfcmVsZWFzZShkcmVxKTsKKwkJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiAtRUlPOworCX0KKwogCWlmIChwdXRfZHJlcShkcmVxKSkKIAkJbmZzX2RpcmVjdF9jb21wbGV0ZShkcmVxKTsKLQotCWlmIChyZXF1ZXN0ZWRfYnl0ZXMgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKLQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgbmZzX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCkBAIC04NDEsMTUgKzg0NCwxOCBAQAogCQlwb3MgKz0gdmVjLT5pb3ZfbGVuOwogCX0KIAorCS8qCisJICogSWYgbm8gYnl0ZXMgd2VyZSBzdGFydGVkLCByZXR1cm4gdGhlIGVycm9yLCBhbmQgbGV0IHRoZQorCSAqIGdlbmVyaWMgbGF5ZXIgaGFuZGxlIHRoZSBjb21wbGV0aW9uLgorCSAqLworCWlmIChyZXF1ZXN0ZWRfYnl0ZXMgPT0gMCkgeworCQluZnNfZGlyZWN0X3JlcV9yZWxlYXNlKGRyZXEpOworCQlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IC1FSU87CisJfQorCiAJaWYgKHB1dF9kcmVxKGRyZXEpKQogCQluZnNfZGlyZWN0X3dyaXRlX2NvbXBsZXRlKGRyZXEsIGRyZXEtPmlub2RlKTsKLQotCWlmIChyZXF1ZXN0ZWRfYnl0ZXMgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKLQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgbmZzX2RpcmVjdF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LApkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCBkODUxMjQyLi4xY2M2MDBlIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtODgxLDkgKzg4MSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG5mc193Y2NfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZzX3djY191cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CiAKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpCkBAIC04OTEsMjUgKzg5MiwzMiBAQAogCQluZnNpLT5jaGFuZ2VfYXR0ciA9IGZhdHRyLT5jaGFuZ2VfYXR0cjsKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOwogCX0KIAkvKiBJZiB3ZSBoYXZlIGF0b21pYyBXQ0MgZGF0YSwgd2UgbWF5IHVwZGF0ZSBzb21lIGF0dHJpYnV0ZXMgKi8KIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRUNUSU1FKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NUSU1FKQotCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPnByZV9jdGltZSkpCi0JCQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKKwkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5wcmVfY3RpbWUpKSB7CisJCW1lbWNweSgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CisJfQogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVNVElNRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkKIAkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5wcmVfbXRpbWUpKSB7Ci0JCQltZW1jcHkoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lLCBzaXplb2YoaW5vZGUtPmlfbXRpbWUpKTsKLQkJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQltZW1jcHkoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lLCBzaXplb2YoaW5vZGUtPmlfbXRpbWUpKTsKKwkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOwogCX0KIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU0laRSkKIAkJCSYmIGlfc2l6ZV9yZWFkKGlub2RlKSA9PSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnByZV9zaXplKQotCQkJJiYgbmZzaS0+bnBhZ2VzID09IDApCi0JCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSkpOworCQkJJiYgbmZzaS0+bnBhZ2VzID09IDApIHsKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKKwkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTEyMjMsNyArMTIzMSw3IEBACiAJCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKTsKIAogCS8qIERvIGF0b21pYyB3ZWFrIGNhY2hlIGNvbnNpc3RlbmN5IHVwZGF0ZXMgKi8KLQluZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOworCWludmFsaWQgfD0gbmZzX3djY191cGRhdGVfaW5vZGUoaW5vZGUsIGZhdHRyKTsKIAogCS8qIE1vcmUgY2FjaGUgY29uc2lzdGVuY3kgY2hlY2tzICovCiAJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCA0NjQ0ZjA0Li5jZjlmZGJkIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtMTMzLDggKzEzMyw3IEBACiBleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKm5mczRfZmluZF9jbGllbnRfbm9faWRlbnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICopOwogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2ZpbmRfY2xpZW50X2lkZW50KGludCk7CiBleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKgotbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqLAotCQkJICAgaW50KTsKK25mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKik7CiBleHRlcm4gc3RydWN0IG5mc19zZXJ2ZXIgKm5mc19jcmVhdGVfc2VydmVyKAogCQkJCQljb25zdCBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICosCiAJCQkJCXN0cnVjdCBuZnNfZmggKik7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM2FjbC5jIGIvZnMvbmZzL25mczNhY2wuYwppbmRleCA5Zjg4YzVmLi4yNzQzNDI3IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM2FjbC5jCisrKyBiL2ZzL25mcy9uZnMzYWNsLmMKQEAgLTMxMSw4ICszMTEsOCBAQAogCWlmICghbmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX0FDTFMpKQogCQlnb3RvIG91dDsKIAotCS8qIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUsIGJlY2F1c2UgWERSIG1hcnNoYWxsaW5nIGNhbiBvbmx5Ci0JICAgcmV0dXJuIC1FTk9NRU0uICovCisJLyogV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSBiZWNhdXNlIFhEUiBtYXJzaGFsbGluZyBkb2VzIG5vdAorCSAqIHJldHVybiBhbnkgcmVzdWx0cywgaXQgQlVHcy4gKi8KIAlzdGF0dXMgPSAtRU5PU1BDOwogCWlmIChhY2wgIT0gTlVMTCAmJiBhY2wtPmFfY291bnQgPiBORlNfQUNMX01BWF9FTlRSSUVTKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzeGRyLmMgYi9mcy9uZnMvbmZzM3hkci5jCmluZGV4IDAxYzVlOGIuLjE4M2M2YjEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzeGRyLmMKKysrIGIvZnMvbmZzL25mczN4ZHIuYwpAQCAtMTMyOCwxMCArMTMyOCwxMyBAQAogCiAJZW5jb2RlX25mc19maDMoeGRyLCBORlNfRkgoYXJncy0+aW5vZGUpKTsKIAllbmNvZGVfdWludDMyKHhkciwgYXJncy0+bWFzayk7Ci0JaWYgKGFyZ3MtPm5wYWdlcyAhPSAwKQotCQl4ZHJfd3JpdGVfcGFnZXMoeGRyLCBhcmdzLT5wYWdlcywgMCwgYXJncy0+bGVuKTsKIAogCWJhc2UgPSByZXEtPnJxX3NsZW47CisJaWYgKGFyZ3MtPm5wYWdlcyAhPSAwKQorCQl4ZHJfd3JpdGVfcGFnZXMoeGRyLCBhcmdzLT5wYWdlcywgMCwgYXJncy0+bGVuKTsKKwllbHNlCisJCXhkcl9yZXNlcnZlX3NwYWNlKHhkciwgTkZTX0FDTF9JTkxJTkVfQlVGU0laRSk7CisKIAllcnJvciA9IG5mc2FjbF9lbmNvZGUoeGRyLT5idWYsIGJhc2UsIGFyZ3MtPmlub2RlLAogCQkJICAgIChhcmdzLT5tYXNrICYgTkZTX0FDTCkgPwogCQkJICAgIGFyZ3MtPmFjbF9hY2Nlc3MgOiBOVUxMLCAxLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMKaW5kZXggNTFmZTY0YWMuLmY1YzliMTIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAogCS8qIGlwdjYgbGVuZ3RoIHBsdXMgcG9ydCBpcyBsZWdhbCAqLwogCWlmIChybGVuID4gSU5FVDZfQUREUlNUUkxFTiArIDgpIHsKLQkJZHByaW50aygiJXMgSW52YWxpZCBhZGRyZXNzLCBsZW5ndGggJWRcbiIsIF9fZnVuY19fLAorCQlkcHJpbnRrKCIlczogSW52YWxpZCBhZGRyZXNzLCBsZW5ndGggJWRcbiIsIF9fZnVuY19fLAogCQkJcmxlbik7CiAJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC0yMjUsNiArMjI1LDExIEBACiAJLyogcmVwbGFjZSB0aGUgcG9ydCBkb3RzIHdpdGggZGFzaGVzIGZvciB0aGUgaW40X3B0b24oKSBkZWxpbWl0ZXIqLwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJY2hhciAqcmVzID0gc3RycmNocihidWYsICcuJyk7CisJCWlmICghcmVzKSB7CisJCQlkcHJpbnRrKCIlczogRmFpbGVkIGZpbmRpbmcgZXhwZWN0ZWQgZG90cyBpbiBwb3J0XG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KIAkJKnJlcyA9ICctJzsKIAl9CiAKQEAgLTI0MCw3ICsyNDUsNyBAQAogCXBvcnQgPSBodG9ucygodG1wWzBdIDw8IDgpIHwgKHRtcFsxXSkpOwogCiAJZHMgPSBuZnM0X3BuZnNfZHNfYWRkKGlub2RlLCBpcF9hZGRyLCBwb3J0KTsKLQlkcHJpbnRrKCIlcyBEZWNvZGVkIGFkZHJlc3MgYW5kIHBvcnQgJXNcbiIsIF9fZnVuY19fLCBidWYpOworCWRwcmludGsoIiVzOiBEZWNvZGVkIGFkZHJlc3MgYW5kIHBvcnQgJXNcbiIsIF9fZnVuY19fLCBidWYpOwogb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKIG91dF9lcnI6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDlkOTkyYjAuLjc4OTM2YTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KIAogI2luY2x1ZGUgIm5mczRfZnMuaCIKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCkBAIC00NTcyLDI3ICs0NTczLDE2IEBACiAJKnAgPSBodG9ubCgodTMyKWNscC0+Y2xfYm9vdF90aW1lLnR2X25zZWMpOwogCWFyZ3MudmVyaWZpZXIgPSAmdmVyaWZpZXI7CiAKLQl3aGlsZSAoMSkgewotCQlhcmdzLmlkX2xlbiA9IHNjbnByaW50ZihhcmdzLmlkLCBzaXplb2YoYXJncy5pZCksCi0JCQkJCSIlcy8lcyAldSIsCi0JCQkJCWNscC0+Y2xfaXBhZGRyLAotCQkJCQlycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LAotCQkJCQkJCSBSUENfRElTUExBWV9BRERSKSwKLQkJCQkJY2xwLT5jbF9pZF91bmlxdWlmaWVyKTsKKwlhcmdzLmlkX2xlbiA9IHNjbnByaW50ZihhcmdzLmlkLCBzaXplb2YoYXJncy5pZCksCisJCQkJIiVzLyVzLiVzLyV1IiwKKwkJCQljbHAtPmNsX2lwYWRkciwKKwkJCQlpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsCisJCQkJaW5pdF91dHNuYW1lKCktPmRvbWFpbm5hbWUsCisJCQkJY2xwLT5jbF9ycGNjbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcik7CiAKLQkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7Ci0KLQkJaWYgKHN0YXR1cyAhPSAtTkZTNEVSUl9DTElEX0lOVVNFKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHNpZ25hbGxlZCgpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCsrY2xwLT5jbF9pZF91bmlxdWlmaWVyID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlzdGF0dXMgPSBuZnM0X2NoZWNrX2NsX2V4Y2hhbmdlX2ZsYWdzKGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MpOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBuZnM0X2NoZWNrX2NsX2V4Y2hhbmdlX2ZsYWdzKGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MpOwogCWRwcmludGsoIjwtLSAlcyBzdGF0dXM9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jCmluZGV4IDIzMzZkNTMuLmU2NzQyYjUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYworKysgYi9mcy9uZnMvbmZzNHN0YXRlLmMKQEAgLTIzMiwxMiArMjMyLDYgQEAKIAlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChjbHApOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTZXNzaW9uaWQgbm90IHNldC4gTm8gY2FsbGJhY2sgc2VydmljZVxuIik7Ci0JCW5mc19jYWxsYmFja19kb3duKDEpOwotCQlzdGF0dXMgPSAwOwotCX0KIAluZnM0MV9zZXR1cF9zdGF0ZV9yZW5ld2FsKGNscCk7CiAJbmZzX21hcmtfY2xpZW50X3JlYWR5KGNscCwgTkZTX0NTX1JFQURZKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDJhYjhlNWMuLjRlMmMxNjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNjA4NiwxMSArNjA4NiwxMSBAQAogCV9fYmUzMiAqcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJaWYgKHVubGlrZWx5KCFwKSkKIAkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JaWYgKCFudG9obCgqcCsrKSkgeworCWlmICgqcCA9PSB4ZHJfemVybykgewogCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAkJaWYgKHVubGlrZWx5KCFwKSkKIAkJCWdvdG8gb3V0X292ZXJmbG93OwotCQlpZiAoIW50b2hsKCpwKyspKQorCQlpZiAoKnAgPT0geGRyX3plcm8pCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJZW50cnktPmVvZiA9IDE7CiAJCXJldHVybiAtRUJBRENPT0tJRTsKQEAgLTYxMDEsNyArNjEwMSw3IEBACiAJCWdvdG8gb3V0X292ZXJmbG93OwogCWVudHJ5LT5wcmV2X2Nvb2tpZSA9IGVudHJ5LT5jb29raWU7CiAJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmVudHJ5LT5jb29raWUpOwotCWVudHJ5LT5sZW4gPSBudG9obCgqcCsrKTsKKwllbnRyeS0+bGVuID0gYmUzMl90b19jcHVwKHApOwogCiAJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgZW50cnktPmxlbik7CiAJaWYgKHVubGlrZWx5KCFwKSkKQEAgLTYxMzIsOSArNjEzMiw2IEBACiAJaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9UWVBFKQogCQllbnRyeS0+ZF90eXBlID0gbmZzX3Vtb2RlX3RvX2R0eXBlKGVudHJ5LT5mYXR0ci0+bW9kZSk7CiAKLQlpZiAodmVyaWZ5X2F0dHJfbGVuKHhkciwgcCwgbGVuKSA8IDApCi0JCWdvdG8gb3V0X292ZXJmbG93OwotCiAJcmV0dXJuIDA7CiAKIG91dF9vdmVyZmxvdzoKZGlmZiAtLWdpdCBhL2ZzL25mcy9wbmZzLmMgYi9mcy9uZnMvcG5mcy5jCmluZGV4IGJjNDA4OTcuLjFiMWJjMWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wbmZzLmMKKysrIGIvZnMvbmZzL3BuZnMuYwpAQCAtOTUxLDcgKzk1MSw3IEBACiB7CiAJc3RydWN0IHBuZnNfZGV2aWNlaWRfY2FjaGUgKmxvY2FsID0gY2xwLT5jbF9kZXZpZF9jYWNoZTsKIAotCWRwcmludGsoIi0tPiAlcyBjbF9kZXZpZF9jYWNoZSAlcFxuIiwgX19mdW5jX18sIGNscC0+Y2xfZGV2aWRfY2FjaGUpOworCWRwcmludGsoIi0tPiAlcyAoeyVkfSlcbiIsIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmbG9jYWwtPmRjX3JlZikpOwogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZsb2NhbC0+ZGNfcmVmLCAmY2xwLT5jbF9sb2NrKSkgewogCQlpbnQgaTsKIAkJLyogVmVyaWZ5IGNhY2hlIGlzIGVtcHR5ICovCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDEwZDY0OGVhLi5jODI3OGY0IDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtOTMyLDcgKzkzMiw3IEBACiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgewogCQlkYXRhID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSwgcGFnZXMpOwogCQlsaXN0X2RlbCgmZGF0YS0+cGFnZXMpOwotCQluZnNfd3JpdGVkYXRhX3JlbGVhc2UoZGF0YSk7CisJCW5mc193cml0ZWRhdGFfZnJlZShkYXRhKTsKIAl9CiAJbmZzX3JlZGlydHlfcmVxdWVzdChyZXEpOwogCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYyBiL2ZzL25mc19jb21tb24vbmZzYWNsLmMKaW5kZXggZmMxYzUyNS4uODRjMjdkNiAxMDA2NDQKLS0tIGEvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYworKysgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCkBAIC00Miw2ICs0MiwxMSBAQAogCWdpZF90IGdpZDsKIH07CiAKK3N0cnVjdCBuZnNhY2xfc2ltcGxlX2FjbCB7CisJc3RydWN0IHBvc2l4X2FjbCBhY2w7CisJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSBhY2VbNF07Cit9OworCiBzdGF0aWMgaW50CiB4ZHJfbmZzYWNlX2VuY29kZShzdHJ1Y3QgeGRyX2FycmF5Ml9kZXNjICpkZXNjLCB2b2lkICplbGVtKQogewpAQCAtNzIsOSArNzcsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50Ci1uZnNhY2xfZW5jb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGVuY29kZV9lbnRyaWVzLCBpbnQgdHlwZWZsYWcpCisvKioKKyAqIG5mc2FjbF9lbmNvZGUgLSBFbmNvZGUgYW4gTkZTdjMgQUNMCisgKgorICogQGJ1ZjogZGVzdGluYXRpb24geGRyX2J1ZiB0byBjb250YWluIFhEUiBlbmNvZGVkIEFDTAorICogQGJhc2U6IGJ5dGUgb2Zmc2V0IGluIHhkcl9idWYgd2hlcmUgWERSJ2QgQUNMIGJlZ2lucworICogQGlub2RlOiBpbm9kZSBvZiBmaWxlIHdob3NlIEFDTCB0aGlzIGlzCisgKiBAYWNsOiBwb3NpeF9hY2wgdG8gZW5jb2RlCisgKiBAZW5jb2RlX2VudHJpZXM6IHdoZXRoZXIgdG8gZW5jb2RlIEFDRXMgYXMgd2VsbAorICogQHR5cGVmbGFnOiBBQ0wgdHlwZTogTkZTX0FDTF9ERUZBVUxUIG9yIHplcm8KKyAqCisgKiBSZXR1cm5zIHNpemUgb2YgZW5jb2RlZCBBQ0wgaW4gYnl0ZXMgb3IgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4KKyAqLworaW50IG5mc2FjbF9lbmNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgZW5jb2RlX2VudHJpZXMsIGludCB0eXBlZmxhZykKIHsKIAlpbnQgZW50cmllcyA9IChhY2wgJiYgYWNsLT5hX2NvdW50KSA/IG1heF90KGludCwgYWNsLT5hX2NvdW50LCA0KSA6IDA7CiAJc3RydWN0IG5mc2FjbF9lbmNvZGVfZGVzYyBuZnNhY2xfZGVzYyA9IHsKQEAgLTg4LDE3ICsxMDQsMjIgQEAKIAkJLnVpZCA9IGlub2RlLT5pX3VpZCwKIAkJLmdpZCA9IGlub2RlLT5pX2dpZCwKIAl9OworCXN0cnVjdCBuZnNhY2xfc2ltcGxlX2FjbCBhY2xidWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcG9zaXhfYWNsICphY2wyID0gTlVMTDsKIAogCWlmIChlbnRyaWVzID4gTkZTX0FDTF9NQVhfRU5UUklFUyB8fAogCSAgICB4ZHJfZW5jb2RlX3dvcmQoYnVmLCBiYXNlLCBlbnRyaWVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGVuY29kZV9lbnRyaWVzICYmIGFjbCAmJiBhY2wtPmFfY291bnQgPT0gMykgewotCQkvKiBGYWtlIHVwIGFuIEFDTF9NQVNLIGVudHJ5LiAqLwotCQlhY2wyID0gcG9zaXhfYWNsX2FsbG9jKDQsIEdGUF9LRVJORUwpOwotCQlpZiAoIWFjbDIpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJc3RydWN0IHBvc2l4X2FjbCAqYWNsMiA9ICZhY2xidWYuYWNsOworCisJCS8qIEF2b2lkIHRoZSB1c2Ugb2YgcG9zaXhfYWNsX2FsbG9jKCkuICBuZnNhY2xfZW5jb2RlKCkgaXMKKwkJICogaW52b2tlZCBpbiBjb250ZXh0cyB3aGVyZSBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaXMKKwkJICogZmF0YWwuICBGb3J0dW5hdGVseSB0aGlzIGZha2UgQUNMIGlzIHNtYWxsIGVub3VnaCB0bworCQkgKiBjb25zdHJ1Y3Qgb24gdGhlIHN0YWNrLiAqLworCQltZW1zZXQoYWNsMiwgMCwgc2l6ZW9mKGFjbDIpKTsKKwkJcG9zaXhfYWNsX2luaXQoYWNsMiwgNCk7CisKIAkJLyogSW5zZXJ0IGVudHJpZXMgaW4gY2Fub25pY2FsIG9yZGVyOiBvdGhlciBvcmRlcnMgc2VlbQogCQkgdG8gY29uZnVzZSBTb2xhcmlzIFZ4RlMuICovCiAJCWFjbDItPmFfZW50cmllc1swXSA9IGFjbC0+YV9lbnRyaWVzWzBdOyAgLyogQUNMX1VTRVJfT0JKICovCkBAIC0xMDksOCArMTMwLDYgQEAKIAkJbmZzYWNsX2Rlc2MuYWNsID0gYWNsMjsKIAl9CiAJZXJyID0geGRyX2VuY29kZV9hcnJheTIoYnVmLCBiYXNlICsgNCwgJm5mc2FjbF9kZXNjLmRlc2MpOwotCWlmIChhY2wyKQotCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wyKTsKIAlpZiAoIWVycikKIAkJZXJyID0gOCArIG5mc2FjbF9kZXNjLmRlc2MuZWxlbV9zaXplICoKIAkJCSAgbmZzYWNsX2Rlc2MuZGVzYy5hcnJheV9sZW47CkBAIC0yMjQsOSArMjQzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludAotbmZzYWNsX2RlY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICphY2xjbnQsCi0JICAgICAgc3RydWN0IHBvc2l4X2FjbCAqKnBhY2wpCisvKioKKyAqIG5mc2FjbF9kZWNvZGUgLSBEZWNvZGUgYW4gTkZTdjMgQUNMCisgKgorICogQGJ1ZjogeGRyX2J1ZiBjb250YWluaW5nIFhEUidkIEFDTCBkYXRhIHRvIGRlY29kZQorICogQGJhc2U6IGJ5dGUgb2Zmc2V0IGluIHhkcl9idWYgd2hlcmUgWERSJ2QgQUNMIGJlZ2lucworICogQGFjbGNudDogY291bnQgb2YgQUNFcyBpbiBkZWNvZGVkIHBvc2l4X2FjbAorICogQHBhY2w6IGJ1ZmZlciBpbiB3aGljaCB0byBwbGFjZSBkZWNvZGVkIHBvc2l4X2FjbAorICoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgZGVjb2RlZCBBQ0wgaW4gYnl0ZXMsIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCisgKi8KK2ludCBuZnNhY2xfZGVjb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKmFjbGNudCwKKwkJICBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCkKIHsKIAlzdHJ1Y3QgbmZzYWNsX2RlY29kZV9kZXNjIG5mc2FjbF9kZXNjID0gewogCQkuZGVzYyA9IHsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zdXBlci5jIGIvZnMvbmlsZnMyL3N1cGVyLmMKaW5kZXggMDk5NGY2YTcuLjU4ZmQ3MDcgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC03MDQsNyArNzA0LDggQEAKIAlzYnBbMF0tPnNfc3RhdGUgPQogCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShzYnBbMF0tPnNfc3RhdGUpICYgfk5JTEZTX1ZBTElEX0ZTKTsKIAkvKiBzeW5jaHJvbml6ZSBzYnBbMV0gd2l0aCBzYnBbMF0gKi8KLQltZW1jcHkoc2JwWzFdLCBzYnBbMF0sIG5pbGZzLT5uc19zYnNpemUpOworCWlmIChzYnBbMV0pCisJCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7CiAJcmV0dXJuIG5pbGZzX2NvbW1pdF9zdXBlcihzYmksIE5JTEZTX1NCX0NPTU1JVF9BTEwpOwogfQogCmRpZmYgLS1naXQgYS9mcy9udGZzL21mdC5jIGIvZnMvbnRmcy9tZnQuYwppbmRleCBiNTcyYjY3Li4zMjZlNzQ3IDEwMDY0NAotLS0gYS9mcy9udGZzL21mdC5jCisrKyBiL2ZzL250ZnMvbWZ0LmMKQEAgLTEsNyArMSw3IEBACiAvKioKICAqIG1mdC5jIC0gTlRGUyBrZXJuZWwgbWZ0IHJlY29yZCBvcGVyYXRpb25zLiBQYXJ0IG9mIHRoZSBMaW51eC1OVEZTIHByb2plY3QuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMSBBbnRvbiBBbHRhcGFybWFrb3YgYW5kIFR1eGVyYSBJbmMuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjU3Niw2ICsyNTc2LDggQEAKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJaWYgKGJhc2VfbmkpIHsKKwkJTUZUX1JFQ09SRCAqbV90bXA7CisKIAkJLyoKIAkJICogU2V0dXAgdGhlIGJhc2UgbWZ0IHJlY29yZCBpbiB0aGUgZXh0ZW50IG1mdCByZWNvcmQuICBUaGlzCiAJCSAqIGNvbXBsZXRlcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIGV4dGVudCBtZnQgcmVjb3JkCkBAIC0yNTg4LDExICsyNTkwLDExIEBACiAJCSAqIGF0dGFjaCBpdCB0byB0aGUgYmFzZSBpbm9kZSBAYmFzZV9uaSBhbmQgbWFwLCBwaW4sIGFuZCBsb2NrCiAJCSAqIGl0cywgaS5lLiB0aGUgYWxsb2NhdGVkLCBtZnQgcmVjb3JkLgogCQkgKi8KLQkJbSA9IG1hcF9leHRlbnRfbWZ0X3JlY29yZChiYXNlX25pLCBiaXQsICZuaSk7Ci0JCWlmIChJU19FUlIobSkpIHsKKwkJbV90bXAgPSBtYXBfZXh0ZW50X21mdF9yZWNvcmQoYmFzZV9uaSwgYml0LCAmbmkpOworCQlpZiAoSVNfRVJSKG1fdG1wKSkgewogCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIG1hcCBhbGxvY2F0ZWQgZXh0ZW50ICIKIAkJCQkJIm1mdCByZWNvcmQgMHglbGx4LiIsIChsb25nIGxvbmcpYml0KTsKLQkJCWVyciA9IFBUUl9FUlIobSk7CisJCQllcnIgPSBQVFJfRVJSKG1fdG1wKTsKIAkJCS8qIFNldCB0aGUgbWZ0IHJlY29yZCBpdHNlbGYgbm90IGluIHVzZS4gKi8KIAkJCW0tPmZsYWdzICY9IGNwdV90b19sZTE2KAogCQkJCQl+bGUxNl90b19jcHUoTUZUX1JFQ09SRF9JTl9VU0UpKTsKQEAgLTI2MDMsNiArMjYwNSw3IEBACiAJCQludGZzX3VubWFwX3BhZ2UocGFnZSk7CiAJCQlnb3RvIHVuZG9fbWZ0Ym1wX2FsbG9jOwogCQl9CisJCUJVR19PTihtICE9IG1fdG1wKTsKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSBhbGxvY2F0ZWQgbWZ0IHJlY29yZCBpcyB3cml0dGVuIG91dCB0byBkaXNrLgogCQkgKiBObyBuZWVkIHRvIHNldCB0aGUgaW5vZGUgZGlydHkgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIGdvaW5nCmRpZmYgLS1naXQgYS9mcy9wb3NpeF9hY2wuYyBiL2ZzL3Bvc2l4X2FjbC5jCmluZGV4IDM5ZGY5NWEuLmIxY2Y2YmYgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCitFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9pbml0KTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2Nsb25lKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX3ZhbGlkKTsKQEAgLTMyLDYgKzMzLDE2IEBACiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9wZXJtaXNzaW9uKTsKIAogLyoKKyAqIEluaXQgYSBmcmVzaCBwb3NpeF9hY2wKKyAqLwordm9pZAorcG9zaXhfYWNsX2luaXQoc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgY291bnQpCit7CisJYXRvbWljX3NldCgmYWNsLT5hX3JlZmNvdW50LCAxKTsKKwlhY2wtPmFfY291bnQgPSBjb3VudDsKK30KKworLyoKICAqIEFsbG9jYXRlIGEgbmV3IEFDTCB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMuCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKgpAQCAtNDAsMTAgKzUxLDggQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsKSArCiAJICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5KTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBrbWFsbG9jKHNpemUsIGZsYWdzKTsKLQlpZiAoYWNsKSB7Ci0JCWF0b21pY19zZXQoJmFjbC0+YV9yZWZjb3VudCwgMSk7Ci0JCWFjbC0+YV9jb3VudCA9IGNvdW50OwotCX0KKwlpZiAoYWNsKQorCQlwb3NpeF9hY2xfaW5pdChhY2wsIGNvdW50KTsKIAlyZXR1cm4gYWNsOwogfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2NvbnNvbGVzLmMgYi9mcy9wcm9jL2NvbnNvbGVzLmMKaW5kZXggZWFmYzIyYS4uYjcwMWVhYSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9jb25zb2xlcy5jCisrKyBiL2ZzL3Byb2MvY29uc29sZXMuYwpAQCAtNjcsNyArNjcsNyBAQAogCXN0cnVjdCBjb25zb2xlICpjb247CiAJbG9mZl90IG9mZiA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZShjb24pCiAJCWlmIChvZmYrKyA9PSAqcG9zKQogCQkJYnJlYWs7CkBAIC04NCw3ICs4NCw3IEBACiAKIHN0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY29uc29sZXNfb3AgPSB7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9ibG9jay5jIGIvZnMvc3F1YXNoZnMvYmxvY2suYwppbmRleCAyZmIyODgyLi44YWI0OGJjIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9ibG9jay5jCisrKyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKQEAgLTYzLDYgKzYzLDE0IEBACiAJCSpsZW5ndGggPSAodW5zaWduZWQgY2hhcikgYmgtPmJfZGF0YVsqb2Zmc2V0XSB8CiAJCQkodW5zaWduZWQgY2hhcikgYmgtPmJfZGF0YVsqb2Zmc2V0ICsgMV0gPDwgODsKIAkJKm9mZnNldCArPSAyOworCisJCWlmICgqb2Zmc2V0ID09IG1zYmxrLT5kZXZibGtzaXplKSB7CisJCQlwdXRfYmgoYmgpOworCQkJYmggPSBzYl9icmVhZChzYiwgKysoKmN1cl9pbmRleCkpOworCQkJaWYgKGJoID09IE5VTEwpCisJCQkJcmV0dXJuIE5VTEw7CisJCQkqb2Zmc2V0ID0gMDsKKwkJfQogCX0KIAogCXJldHVybiBiaDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYyBiL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYwppbmRleCA4NTY3NTZjLi5jNGViNDAwIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMKKysrIGIvZnMvc3F1YXNoZnMveHpfd3JhcHBlci5jCkBAIC05NSwxMiArOTUsNiBAQAogCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQogCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAotCQkJaWYgKGF2YWlsID09IDApIHsKLQkJCQlvZmZzZXQgPSAwOwotCQkJCXB1dF9iaChiaFtrKytdKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJc3RyZWFtLT5idWYuaW4gPSBiaFtrXS0+Yl9kYXRhICsgb2Zmc2V0OwogCQkJc3RyZWFtLT5idWYuaW5fc2l6ZSA9IGF2YWlsOwogCQkJc3RyZWFtLT5idWYuaW5fcG9zID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKaW5kZXggODE4YTVlMC4uNDY2MWFlMiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKKysrIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKQEAgLTgyLDEyICs4Miw2IEBACiAJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaFtrXSkpCiAJCQkJZ290byByZWxlYXNlX211dGV4OwogCi0JCQlpZiAoYXZhaWwgPT0gMCkgewotCQkJCW9mZnNldCA9IDA7Ci0JCQkJcHV0X2JoKGJoW2srK10pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAJCQlzdHJlYW0tPm5leHRfaW4gPSBiaFtrXS0+Yl9kYXRhICsgb2Zmc2V0OwogCQkJc3RyZWFtLT5hdmFpbF9pbiA9IGF2YWlsOwogCQkJb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGIwNmVkZTEuLmY1ZTJhMTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtOTg1LDEwICs5ODUsMjIgQEAKIAogCQkvKgogCQkgKiBFeHRlbnQgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGFwcHJvcHJpYXRlIGJsb2NrCi0JCSAqIHNpemUsIGlmIHNldCBhdCBhbGwuCisJCSAqIHNpemUsIGlmIHNldCBhdCBhbGwuIEl0IG11c3QgYWxzbyBiZSBzbWFsbGVyIHRoYW4gdGhlCisJCSAqIG1heGltdW0gZXh0ZW50IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlc3lzdGVtLgorCQkgKgorCQkgKiBBbHNvLCBmb3Igbm9uLXJlYWx0aW1lIGZpbGVzLCBsaW1pdCB0aGUgZXh0ZW50IHNpemUgaGludCB0bworCQkgKiBoYWxmIHRoZSBzaXplIG9mIHRoZSBBR3MgaW4gdGhlIGZpbGVzeXN0ZW0gc28gYWxpZ25tZW50CisJCSAqIGRvZXNuJ3QgcmVzdWx0IGluIGV4dGVudHMgbGFyZ2VyIHRoYW4gYW4gQUcuCiAJCSAqLwogCQlpZiAoZmEtPmZzeF9leHRzaXplICE9IDApIHsKLQkJCXhmc19leHRsZW5fdAlzaXplOworCQkJeGZzX2V4dGxlbl90ICAgIHNpemU7CisJCQl4ZnNfZnNibG9ja190ICAgZXh0c2l6ZV9mc2I7CisKKwkJCWV4dHNpemVfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBmYS0+ZnN4X2V4dHNpemUpOworCQkJaWYgKGV4dHNpemVfZnNiID4gTUFYRVhUTEVOKSB7CisJCQkJY29kZSA9IFhGU19FUlJPUihFSU5WQUwpOworCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfQogCiAJCQlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSB8fAogCQkJICAgICgobWFzayAmIEZTWF9YRkxBR1MpICYmCkBAIC05OTcsNiArMTAwOSwxMCBAQAogCQkJCSAgICAgICBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKIAkJCX0gZWxzZSB7CiAJCQkJc2l6ZSA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZTsKKwkJCQlpZiAoZXh0c2l6ZV9mc2IgPiBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAvIDIpIHsKKwkJCQkJY29kZSA9IFhGU19FUlJPUihFSU5WQUwpOworCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCQl9CiAJCQl9CiAKIAkJCWlmIChmYS0+ZnN4X2V4dHNpemUgJSBzaXplKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKaW5kZXggZjhlODU0Yi4uMjA2YTI4MSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwpAQCAtMTg2MywxMiArMTg2MywxNCBAQAogCXhmc19kcXVvdF90CSpkcXBvdXQ7CiAJeGZzX2RxdW90X3QJKmRxcDsKIAlpbnQJCXJlc3RhcnRzOworCWludAkJc3RhcnRhZ2FpbjsKIAogCXJlc3RhcnRzID0gMDsKIAlkcXBvdXQgPSBOVUxMOwogCiAJLyogbG9ja29yZGVyOiBoYXNoY2hhaW5sb2NrLCBmcmVlbGlzdGxvY2ssIG1wbGlzdGxvY2ssIGRxbG9jaywgZHFmbG9jayAqLwotc3RhcnRhZ2FpbjoKK2FnYWluOgorCXN0YXJ0YWdhaW4gPSAwOwogCW11dGV4X2xvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcXAsICZ4ZnNfR3FtLT5xbV9kcWZybGlzdCwgcV9mcmVlbGlzdCkgewpAQCAtMTg4NSwxMyArMTg4NywxMCBAQAogCQkJQVNTRVJUKCEgKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfSU5BQ1RJVkUpKTsKIAogCQkJdHJhY2VfeGZzX2RxcmVjbGFpbV93YW50KGRxcCk7Ci0KLQkJCXhmc19kcXVubG9jayhkcXApOwotCQkJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKLQkJCWlmICgrK3Jlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKLQkJCQlyZXR1cm4gTlVMTDsKIAkJCVhRTV9TVEFUU19JTkMoeHFtc3RhdHMueHNfcW1fZHF3YW50cyk7Ci0JCQlnb3RvIHN0YXJ0YWdhaW47CisJCQlyZXN0YXJ0cysrOworCQkJc3RhcnRhZ2FpbiA9IDE7CisJCQlnb3RvIGRxdW5sb2NrOwogCQl9CiAKIAkJLyoKQEAgLTE5MDYsMjMgKzE5MDUsMjAgQEAKIAkJCUFTU0VSVChsaXN0X2VtcHR5KCZkcXAtPnFfbXBsaXN0KSk7CiAJCQlsaXN0X2RlbF9pbml0KCZkcXAtPnFfZnJlZWxpc3QpOwogCQkJeGZzX0dxbS0+cW1fZHFmcmxpc3RfY250LS07Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJCWRxcG91dCA9IGRxcDsKIAkJCVhRTV9TVEFUU19JTkMoeHFtc3RhdHMueHNfcW1fZHFpbmFjdF9yZWNsYWltcyk7Ci0JCQlicmVhazsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQlBU1NFUlQoZHFwLT5xX2hhc2gpOwogCQlBU1NFUlQoIWxpc3RfZW1wdHkoJmRxcC0+cV9tcGxpc3QpKTsKIAogCQkvKgotCQkgKiBUcnkgdG8gZ3JhYiB0aGUgZmx1c2ggbG9jay4gSWYgdGhpcyBkcXVvdCBpcyBpbiB0aGUgcHJvY2VzcyBvZgotCQkgKiBnZXR0aW5nIGZsdXNoZWQgdG8gZGlzaywgd2UgZG9uJ3Qgd2FudCB0byByZWNsYWltIGl0LgorCQkgKiBUcnkgdG8gZ3JhYiB0aGUgZmx1c2ggbG9jay4gSWYgdGhpcyBkcXVvdCBpcyBpbiB0aGUgcHJvY2VzcworCQkgKiBvZiBnZXR0aW5nIGZsdXNoZWQgdG8gZGlzaywgd2UgZG9uJ3Qgd2FudCB0byByZWNsYWltIGl0LgogCQkgKi8KLQkJaWYgKCF4ZnNfZHFmbG9ja19ub3dhaXQoZHFwKSkgewotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoIXhmc19kcWZsb2NrX25vd2FpdChkcXApKQorCQkJZ290byBkcXVubG9jazsKIAogCQkvKgogCQkgKiBXZSBoYXZlIHRoZSBmbHVzaCBsb2NrIHNvIHdlIGtub3cgdGhhdCB0aGlzIGlzIG5vdCBpbiB0aGUKQEAgLTE5NDQsOCArMTk0MCw3IEBACiAJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCiAJCQkieGZzX3FtX2RxcmVjbGFpbTogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKIAkJCX0KLQkJCXhmc19kcXVubG9jayhkcXApOyAvKiBkcWZsdXNoIHVubG9ja3MgZHFmbG9jayAqLwotCQkJY29udGludWU7CisJCQlnb3RvIGRxdW5sb2NrOwogCQl9CiAKIAkJLyoKQEAgLTE5NjcsMTMgKzE5NjIsOCBAQAogCQkgKi8KIAkJaWYgKCFtdXRleF90cnlsb2NrKCZtcC0+bV9xdW90YWluZm8tPnFpX2RxbGlzdF9sb2NrKSkgewogCQkJcmVzdGFydHMrKzsKLQkJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwotCQkJeGZzX2RxZnVubG9jayhkcXApOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwotCQkJaWYgKHJlc3RhcnRzKysgPj0gWEZTX1FNX1JFQ0xBSU1fTUFYX1JFU1RBUlRTKQotCQkJCXJldHVybiBOVUxMOwotCQkJZ290byBzdGFydGFnYWluOworCQkJc3RhcnRhZ2FpbiA9IDE7CisJCQlnb3RvIHFodW5sb2NrOwogCQl9CiAKIAkJQVNTRVJUKGRxcC0+cV9ucmVmcyA9PSAwKTsKQEAgLTE5ODYsMTQgKzE5NzYsMjAgQEAKIAkJeGZzX0dxbS0+cW1fZHFmcmxpc3RfY250LS07CiAJCWRxcG91dCA9IGRxcDsKIAkJbXV0ZXhfdW5sb2NrKCZtcC0+bV9xdW90YWluZm8tPnFpX2RxbGlzdF9sb2NrKTsKK3FodW5sb2NrOgogCQltdXRleF91bmxvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKTsKIGRxZnVubG9jazoKIAkJeGZzX2RxZnVubG9jayhkcXApOworZHF1bmxvY2s6CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlpZiAoZHFwb3V0KQogCQkJYnJlYWs7CiAJCWlmIChyZXN0YXJ0cyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCi0JCQlyZXR1cm4gTlVMTDsKKwkJCWJyZWFrOworCQlpZiAoc3RhcnRhZ2FpbikgeworCQkJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKIAlyZXR1cm4gZHFwb3V0OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5oIGIvZnMveGZzL3hmc19hbGxvYy5oCmluZGV4IDBhYjU2YjMuLmQwYjNiYzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuaAorKysgYi9mcy94ZnMveGZzX2FsbG9jLmgKQEAgLTc1LDYgKzc1LDIyIEBACiAjZGVmaW5lIFhGU19BTExPQ19TRVRfQVNJREUobXApICAoNCArICgobXApLT5tX3NiLnNiX2FnY291bnQgKiA0KSkKIAogLyoKKyAqIFdoZW4gZGVjaWRpbmcgaG93IG11Y2ggc3BhY2UgdG8gYWxsb2NhdGUgb3V0IG9mIGFuIEFHLCB3ZSBsaW1pdCB0aGUKKyAqIGFsbG9jYXRpb24gbWF4aW11bSBzaXplIHRvIHRoZSBzaXplIHRoZSBBRy4gSG93ZXZlciwgd2UgY2Fubm90IHVzZSBhbGwgdGhlCisgKiBibG9ja3MgaW4gdGhlIEFHIC0gc29tZSBhcmUgcGVybWFuZW50bHkgdXNlZCBieSBtZXRhZGF0YS4gVGhlc2UKKyAqIGJsb2NrcyBhcmUgZ2VuZXJhbGx5OgorICoJLSB0aGUgQUcgc3VwZXJibG9jaywgQUdGLCBBR0kgYW5kIEFHRkwKKyAqCS0gdGhlIEFHRiAoYm5vIGFuZCBjbnQpIGFuZCBBR0kgYnRyZWUgcm9vdCBibG9ja3MKKyAqCS0gNCBibG9ja3Mgb24gdGhlIEFHRkwgYWNjb3JkaW5nIHRvIFhGU19BTExPQ19TRVRfQVNJREUoKSBsaW1pdHMKKyAqCisgKiBUaGUgQUcgaGVhZGVycyBhcmUgc2VjdG9yIHNpemVkLCBzbyB0aGUgYW1vdW50IG9mIHNwYWNlIHRoZXkgdGFrZSB1cCBpcworICogZGVwZW5kZW50IG9uIGZpbGVzeXN0ZW0gZ2VvbWV0cnkuIFRoZSBvdGhlcnMgYXJlIGFsbCBzaW5nbGUgYmxvY2tzLgorICovCisjZGVmaW5lIFhGU19BTExPQ19BR19NQVhfVVNBQkxFKG1wKQlcCisJKChtcCktPm1fc2Iuc2JfYWdibG9ja3MgLSBYRlNfQkJfVE9fRlNCKG1wLCBYRlNfRlNTX1RPX0JCKG1wLCA0KSkgLSA3KQorCisKKy8qCiAgKiBBcmd1bWVudCBzdHJ1Y3R1cmUgZm9yIHhmc19hbGxvYyByb3V0aW5lcy4KICAqIFRoaXMgaXMgdHVybmVkIGludG8gYSBzdHJ1Y3R1cmUgdG8gYXZvaWQgaGF2aW5nIDIwIGFyZ3VtZW50cyBwYXNzZWQKICAqIGRvd24gc2V2ZXJhbCBsZXZlbHMgb2YgdGhlIHN0YWNrLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA0MTExY2QzLi5kYzNhZmQ3NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmMKKysrIGIvZnMveGZzL3hmc19ibWFwLmMKQEAgLTEwMzgsMTcgKzEwMzgsMzQgQEAKIAkJICogRmlsbGluZyBpbiB0aGUgbWlkZGxlIHBhcnQgb2YgYSBwcmV2aW91cyBkZWxheWVkIGFsbG9jYXRpb24uCiAJCSAqIENvbnRpZ3VpdHkgaXMgaW1wb3NzaWJsZSBoZXJlLgogCQkgKiBUaGlzIGNhc2UgaXMgYXZvaWRlZCBhbG1vc3QgYWxsIHRoZSB0aW1lLgorCQkgKgorCQkgKiBXZSBzdGFydCB3aXRoIGEgZGVsYXllZCBhbGxvY2F0aW9uOgorCQkgKgorCQkgKiArZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCsKKwkJICogIFBSRVYgQCBpZHgKKwkJICoKKwkgICAgICAgICAqIGFuZCB3ZSBhcmUgYWxsb2NhdGluZzoKKwkJICogICAgICAgICAgICAgICAgICAgICArcnJycnJycnJycnJycnJycnIrCisJCSAqCQkJICAgICAgbmV3CisJCSAqCisJCSAqIGFuZCB3ZSBzZXQgaXQgdXAgZm9yIGluc2VydGlvbiBhczoKKwkJICogK2RkZGRkZGRkZGRkZGRkZGRkZGQrcnJycnJycnJycnJycnJycnIrZGRkZGRkZGRkZGRkZGRkZGQrCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldworCQkgKiAgUFJFViBAIGlkeCAgICAgICAgICBMRUZUICAgICAgICAgICAgICBSSUdIVAorCQkgKiAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZCBhdCBpZHggKyAxCiAJCSAqLwogCQl0ZW1wID0gbmV3LT5icl9zdGFydG9mZiAtIFBSRVYuYnJfc3RhcnRvZmY7Ci0JCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgMCwgX1RISVNfSVBfKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwotCQlyWzBdID0gKm5ldzsKLQkJclsxXS5icl9zdGF0ZSA9IFBSRVYuYnJfc3RhdGU7Ci0JCXJbMV0uYnJfc3RhcnRibG9jayA9IDA7Ci0JCXJbMV0uYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOwogCQl0ZW1wMiA9IFBSRVYuYnJfc3RhcnRvZmYgKyBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXdfZW5kb2ZmOwotCQlyWzFdLmJyX2Jsb2NrY291bnQgPSB0ZW1wMjsKLQkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHggKyAxLCAyLCAmclswXSwgc3RhdGUpOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHgsIDAsIF9USElTX0lQXyk7CisJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLCB0ZW1wKTsJLyogdHJ1bmNhdGUgUFJFViAqLworCQlMRUZUID0gKm5ldzsKKwkJUklHSFQuYnJfc3RhdGUgPSBQUkVWLmJyX3N0YXRlOworCQlSSUdIVC5icl9zdGFydGJsb2NrID0gbnVsbHN0YXJ0YmxvY2soCisJCQkJKGludCl4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIHRlbXAyKSk7CisJCVJJR0hULmJyX3N0YXJ0b2ZmID0gbmV3X2VuZG9mZjsKKwkJUklHSFQuYnJfYmxvY2tjb3VudCA9IHRlbXAyOworCQkvKiBpbnNlcnQgTEVGVCAoclswXSkgYW5kIFJJR0hUIChyWzFdKSBhdCB0aGUgc2FtZSB0aW1lICovCisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4ICsgMSwgMiwgJkxFRlQsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4ICsgMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cysrOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0yNDMwLDcgKzI0NDcsNyBAQAogCQlzdGFydGFnID0gYWcgPSAwOwogCiAJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwotCXdoaWxlICgqYmxlbiA8IGFwLT5hbGVuKSB7CisJd2hpbGUgKCpibGVuIDwgYXJncy0+bWF4bGVuKSB7CiAJCWlmICghcGFnLT5wYWdmX2luaXQpIHsKIAkJCWVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgYXJncy0+dHAsIGFnLAogCQkJCQkJICAgIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spOwpAQCAtMjQ1Miw3ICsyNDY5LDcgQEAKIAkJCW5vdGluaXQgPSAxOwogCiAJCWlmICh4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShhcC0+aXApKSB7Ci0JCQlpZiAoKmJsZW4gPj0gYXAtPmFsZW4pCisJCQlpZiAoKmJsZW4gPj0gYXJncy0+bWF4bGVuKQogCQkJCWJyZWFrOwogCiAJCQlpZiAoYXAtPnVzZXJkYXRhKSB7CkBAIC0yNDk4LDE0ICsyNTE1LDE0IEBACiAJICogSWYgdGhlIGJlc3Qgc2VlbiBsZW5ndGggaXMgbGVzcyB0aGFuIHRoZSByZXF1ZXN0CiAJICogbGVuZ3RoLCB1c2UgdGhlIGJlc3QgYXMgdGhlIG1pbmltdW0uCiAJICovCi0JZWxzZSBpZiAoKmJsZW4gPCBhcC0+YWxlbikKKwllbHNlIGlmICgqYmxlbiA8IGFyZ3MtPm1heGxlbikKIAkJYXJncy0+bWlubGVuID0gKmJsZW47CiAJLyoKLQkgKiBPdGhlcndpc2Ugd2UndmUgc2VlbiBhbiBleHRlbnQgYXMgYmlnIGFzIGFsZW4sCisJICogT3RoZXJ3aXNlIHdlJ3ZlIHNlZW4gYW4gZXh0ZW50IGFzIGJpZyBhcyBtYXhsZW4sCiAJICogdXNlIHRoYXQgYXMgdGhlIG1pbmltdW0uCiAJICovCiAJZWxzZQotCQlhcmdzLT5taW5sZW4gPSBhcC0+YWxlbjsKKwkJYXJncy0+bWlubGVuID0gYXJncy0+bWF4bGVuOwogCiAJLyoKIAkgKiBzZXQgdGhlIGZhaWx1cmUgZmFsbGJhY2sgY2FzZSB0byBsb29rIGluIHRoZSBzZWxlY3RlZApAQCAtMjU3Myw3ICsyNTkwLDkgQEAKIAlhcmdzLnRwID0gYXAtPnRwOwogCWFyZ3MubXAgPSBtcDsKIAlhcmdzLmZzYm5vID0gYXAtPnJ2YWw7Ci0JYXJncy5tYXhsZW4gPSBNSU4oYXAtPmFsZW4sIG1wLT5tX3NiLnNiX2FnYmxvY2tzKTsKKworCS8qIFRyaW0gdGhlIGFsbG9jYXRpb24gYmFjayB0byB0aGUgbWF4aW11bSBhbiBBRyBjYW4gZml0LiAqLworCWFyZ3MubWF4bGVuID0gTUlOKGFwLT5hbGVuLCBYRlNfQUxMT0NfQUdfTUFYX1VTQUJMRShtcCkpOwogCWFyZ3MuZmlyc3RibG9jayA9IGFwLT5maXJzdGJsb2NrOwogCWJsZW4gPSAwOwogCWlmIChudWxsZmIpIHsKQEAgLTI2MjEsNyArMjY0MCw3IEBACiAJCQkvKgogCQkJICogQWRqdXN0IGZvciBhbGlnbm1lbnQKIAkJCSAqLwotCQkJaWYgKGJsZW4gPiBhcmdzLmFsaWdubWVudCAmJiBibGVuIDw9IGFwLT5hbGVuKQorCQkJaWYgKGJsZW4gPiBhcmdzLmFsaWdubWVudCAmJiBibGVuIDw9IGFyZ3MubWF4bGVuKQogCQkJCWFyZ3MubWlubGVuID0gYmxlbiAtIGFyZ3MuYWxpZ25tZW50OwogCQkJYXJncy5taW5hbGlnbnNsb3AgPSAwOwogCQl9IGVsc2UgewpAQCAtMjY0MCw3ICsyNjU5LDcgQEAKIAkJCSAqIG9mIG1pbmxlbithbGlnbm1lbnQrc2xvcCBkb2Vzbid0IGdvIHVwCiAJCQkgKiBiZXR3ZWVuIHRoZSBjYWxscy4KIAkJCSAqLwotCQkJaWYgKGJsZW4gPiBtcC0+bV9kYWxpZ24gJiYgYmxlbiA8PSBhcC0+YWxlbikKKwkJCWlmIChibGVuID4gbXAtPm1fZGFsaWduICYmIGJsZW4gPD0gYXJncy5tYXhsZW4pCiAJCQkJbmV4dG1pbmxlbiA9IGJsZW4gLSBtcC0+bV9kYWxpZ247CiAJCQllbHNlCiAJCQkJbmV4dG1pbmxlbiA9IGFyZ3MubWlubGVuOwpAQCAtNDQ4NSw2ICs0NTA0LDE2IEBACiAJCQkJLyogRmlndXJlIG91dCB0aGUgZXh0ZW50IHNpemUsIGFkanVzdCBhbGVuICovCiAJCQkJZXh0c3ogPSB4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApOwogCQkJCWlmIChleHRzeikgeworCQkJCQkvKgorCQkJCQkgKiBtYWtlIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIGEgc2luZ2xlCisJCQkJCSAqIGV4dGVudCBsZW5ndGggd2hlbiB3ZSBhbGlnbiB0aGUKKwkJCQkJICogZXh0ZW50IGJ5IHJlZHVjaW5nIGxlbmd0aCB3ZSBhcmUKKwkJCQkJICogZ29pbmcgdG8gYWxsb2NhdGUgYnkgdGhlIG1heGltdW0KKwkJCQkJICogYW1vdW50IGV4dGVudCBzaXplIGFsaWdtZW50IG1heQorCQkJCQkgKiByZXF1aXJlLgorCQkJCQkgKi8KKwkJCQkJYWxlbiA9IFhGU19GSUxCTEtTX01JTihsZW4sCisJCQkJCQkgICBNQVhFWFRMRU4gLSAoMiAqIGV4dHN6IC0gMSkpOwogCQkJCQllcnJvciA9IHhmc19ibWFwX2V4dHNpemVfYWxpZ24obXAsCiAJCQkJCQkJJmdvdCwgJnByZXYsIGV4dHN6LAogCQkJCQkJCXJ0LCBlb2YsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKaW5kZXggOThjNmY3My4uNmY4YzIxYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwpAQCAtNDI3LDEzICs0MjcsMTUgQEAKIAogCQlpZiAocmVtb3ZlKSB7CiAJCQkvKgotCQkJICogV2UgaGF2ZSB0byByZW1vdmUgdGhlIGxvZyBpdGVtIGZyb20gdGhlIHRyYW5zYWN0aW9uCi0JCQkgKiBhcyB3ZSBhcmUgYWJvdXQgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZQotCQkJICogYnVmZmVyLiAgSWYgd2UgZG9uJ3QsIHRoZSB1bmxvY2sgdGhhdCBvY2N1cnMgbGF0ZXIKLQkJCSAqIGluIHhmc190cmFuc191bmNvbW1pdCgpIHdpbGwgcnkgdG8gcmVmZXJlbmNlIHRoZQorCQkJICogSWYgd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29udGV4dCwgd2UgaGF2ZSB0bworCQkJICogcmVtb3ZlIHRoZSBsb2cgaXRlbSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBhcyB3ZSBhcmUKKwkJCSAqIGFib3V0IHRvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLiAgSWYgd2UKKwkJCSAqIGRvbid0LCB0aGUgdW5sb2NrIHRoYXQgb2NjdXJzIGxhdGVyIGluCisJCQkgKiB4ZnNfdHJhbnNfdW5jb21taXQoKSB3aWxsIHRyeSB0byByZWZlcmVuY2UgdGhlCiAJCQkgKiBidWZmZXIgd2hpY2ggd2Ugbm8gbG9uZ2VyIGhhdmUgYSBob2xkIG9uLgogCQkJICovCi0JCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKKwkJCWlmIChsaXAtPmxpX2Rlc2MpCisJCQkJeGZzX3RyYW5zX2RlbF9pdGVtKGxpcCk7CiAKIAkJCS8qCiAJCQkgKiBTaW5jZSB0aGUgdHJhbnNhY3Rpb24gbm8gbG9uZ2VyIHJlZmVycyB0byB0aGUgYnVmZmVyLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKaW5kZXggNzVmMmVmNi4uZDIyZTYyNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCkBAIC0xMzgsNyArMTM4LDggQEAKIAogCWlmIChyZW1vdmUpIHsKIAkJQVNTRVJUKCEobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpKTsKLQkJeGZzX3RyYW5zX2RlbF9pdGVtKGxpcCk7CisJCWlmIChsaXAtPmxpX2Rlc2MpCisJCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKIAkJeGZzX2VmaV9pdGVtX2ZyZWUoZWZpcCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggNTU1ODJiZC4uOGEwZjA0NCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMzM3LDcgKzMzNywxMiBAQAogCQlpbnQgc2hpZnQgPSAwOwogCQlpbnQ2NF90IGZyZWVzcDsKIAotCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5pX3NpemUpOworCQkvKgorCQkgKiByb3VuZGRvd25fcG93X29mX3R3bygpIHJldHVybnMgYW4gdW5kZWZpbmVkIHJlc3VsdAorCQkgKiBpZiB3ZSBwYXNzIGluIGFsbG9jX2Jsb2NrcyA9IDAuIEhlbmNlIHRoZSAiKyAxIiB0bworCQkgKiBlbnN1cmUgd2UgYWx3YXlzIHBhc3MgaW4gYSBub24temVybyB2YWx1ZS4KKwkJICovCisJCWFsbG9jX2Jsb2NrcyA9IFhGU19CX1RPX0ZTQihtcCwgaXAtPmlfc2l6ZSkgKyAxOwogCQlhbGxvY19ibG9ja3MgPSBYRlNfRklMRU9GRl9NSU4oTUFYRVhUTEVOLAogCQkJCQlyb3VuZGRvd25fcG93X29mX3R3byhhbGxvY19ibG9ja3MpKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggOTE2ZWI3ZC4uM2JkMzI5MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogeGxvZ190aWRfdCB4ZnNfbG9nX2dldF90cmFuc19pZGVudChzdHJ1Y3QgeGZzX3RyYW5zICp0cCk7CiAKLWludAl4ZnNfbG9nX2NvbW1pdF9jaWwoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfdHJhbnMgKnRwLAordm9pZAl4ZnNfbG9nX2NvbW1pdF9jaWwoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfdHJhbnMgKnRwLAogCQkJCXN0cnVjdCB4ZnNfbG9nX3ZlYyAqbG9nX3ZlY3RvciwKIAkJCQl4ZnNfbHNuX3QgKmNvbW1pdF9sc24sIGludCBmbGFncyk7CiBib29sCXhmc19sb2dfaXRlbV9pbl9jdXJyZW50X2Noa3B0KHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19jaWwuYyBiL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCmluZGV4IDlkYzgxMjUuLjljYTU5YmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCkBAIC01NDMsNyArNTQzLDcgQEAKIAogCWVycm9yID0geGxvZ193cml0ZShsb2csICZsdmhkciwgdGljLCAmY3R4LT5zdGFydF9sc24sIE5VTEwsIDApOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfYWJvcnQ7CisJCWdvdG8gb3V0X2Fib3J0X2ZyZWVfdGlja2V0OwogCiAJLyoKIAkgKiBub3cgdGhhdCB3ZSd2ZSB3cml0dGVuIHRoZSBjaGVja3BvaW50IGludG8gdGhlIGxvZywgc3RyaWN0bHkKQEAgLTU2OSw4ICs1NjksOSBAQAogCX0KIAlzcGluX3VubG9jaygmY2lsLT54Y19jaWxfbG9jayk7CiAKKwkvKiB4ZnNfbG9nX2RvbmUgYWx3YXlzIGZyZWVzIHRoZSB0aWNrZXQgb24gZXJyb3IuICovCiAJY29tbWl0X2xzbiA9IHhmc19sb2dfZG9uZShsb2ctPmxfbXAsIHRpYywgJmNvbW1pdF9pY2xvZywgMCk7Ci0JaWYgKGVycm9yIHx8IGNvbW1pdF9sc24gPT0gLTEpCisJaWYgKGNvbW1pdF9sc24gPT0gLTEpCiAJCWdvdG8gb3V0X2Fib3J0OwogCiAJLyogYXR0YWNoIGFsbCB0aGUgdHJhbnNhY3Rpb25zIHcvIGJ1c3kgZXh0ZW50cyB0byBpY2xvZyAqLwpAQCAtNjAwLDYgKzYwMSw4IEBACiAJa21lbV9mcmVlKG5ld19jdHgpOwogCXJldHVybiAwOwogCitvdXRfYWJvcnRfZnJlZV90aWNrZXQ6CisJeGZzX2xvZ190aWNrZXRfcHV0KHRpYyk7CiBvdXRfYWJvcnQ6CiAJeGxvZ19jaWxfY29tbWl0dGVkKGN0eCwgWEZTX0xJX0FCT1JURUQpOwogCXJldHVybiBYRlNfRVJST1IoRUlPKTsKQEAgLTYyMiw3ICs2MjUsNyBAQAogICogYmFja2dyb3VuZCBjb21taXQsIHJldHVybnMgd2l0aG91dCBpdCBoZWxkIG9uY2UgYmFja2dyb3VuZCBjb21taXRzIGFyZQogICogYWxsb3dlZCBhZ2Fpbi4KICAqLwotaW50Cit2b2lkCiB4ZnNfbG9nX2NvbW1pdF9jaWwoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHhmc190cmFucwkqdHAsCkBAIC02MzcsMTEgKzY0MCw2IEBACiAJaWYgKGZsYWdzICYgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUykKIAkJbG9nX2ZsYWdzID0gWEZTX0xPR19SRUxfUEVSTV9SRVNFUlY7CiAKLQlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkgewotCQl4bG9nX2NpbF9mcmVlX2xvZ3ZlYyhsb2dfdmVjdG9yKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCX0KLQogCS8qCiAJICogZG8gYWxsIHRoZSBoYXJkIHdvcmsgb2YgZm9ybWF0dGluZyBpdGVtcyAoaW5jbHVkaW5nIG1lbW9yeQogCSAqIGFsbG9jYXRpb24pIG91dHNpZGUgdGhlIENJTCBjb250ZXh0IGxvY2suIFRoaXMgcHJldmVudHMgc3RhbGxpbmcgQ0lMCkBAIC03MDEsNyArNjk5LDYgQEAKIAkgKi8KIAlpZiAocHVzaCkKIAkJeGxvZ19jaWxfcHVzaChsb2csIDApOwotCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IDMzZGJjNGUuLjc2OTIyNzkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTE0NDYsNiArMTQ0NiwxNCBAQAogICogQnVsayBvcGVyYXRpb24gdmVyc2lvbiBvZiB4ZnNfdHJhbnNfY29tbWl0dGVkIHRoYXQgdGFrZXMgYSBsb2cgdmVjdG9yIG9mCiAgKiBpdGVtcyB0byBpbnNlcnQgaW50byB0aGUgQUlMLiBUaGlzIHVzZXMgYnVsayBBSUwgaW5zZXJ0aW9uIHRlY2huaXF1ZXMgdG8KICAqIG1pbmltaXNlIGxvY2sgdHJhZmZpYy4KKyAqCisgKiBJZiB3ZSBhcmUgY2FsbGVkIHdpdGggdGhlIGFib3J0ZWQgZmxhZyBzZXQsIGl0IGlzIGJlY2F1c2UgYSBsb2cgd3JpdGUgZHVyaW5nCisgKiBhIENJTCBjaGVja3BvaW50IGNvbW1pdCBoYXMgZmFpbGVkLiBJbiB0aGlzIGNhc2UsIGFsbCB0aGUgaXRlbXMgaW4gdGhlCisgKiBjaGVja3BvaW50IGhhdmUgYWxyZWFkeSBnb25lIHRocm91Z2ggSU9QX0NPTU1JVEVEIGFuZCBJT1BfVU5MT0NLLCB3aGljaAorICogbWVhbnMgdGhhdCBjaGVja3BvaW50IGNvbW1pdCBhYm9ydCBoYW5kbGluZyBpcyB0cmVhdGVkIGV4YWN0bHkgdGhlIHNhbWUKKyAqIGFzIGFuIGljbG9nIHdyaXRlIGVycm9yIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3Qgc3RhcnRlZCBhbnkgSU8geWV0LiBIZW5jZSBpbgorICogdGhpcyBjYXNlIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIElPUF9DT01NSVRURUQgcHJvY2Vzc2luZywgZm9sbG93ZWQgYnkgYW4KKyAqIElPUF9VTlBJTihhYm9ydGVkKSBjYWxsLgogICovCiB2b2lkCiB4ZnNfdHJhbnNfY29tbWl0dGVkX2J1bGsoCkBAIC0xNDcyLDYgKzE0ODAsMTYgQEAKIAkJaWYgKFhGU19MU05fQ01QKGl0ZW1fbHNuLCAoeGZzX2xzbl90KS0xKSA9PSAwKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogaWYgd2UgYXJlIGFib3J0aW5nIHRoZSBvcGVyYXRpb24sIG5vIHBvaW50IGluIGluc2VydGluZyB0aGUKKwkJICogb2JqZWN0IGludG8gdGhlIEFJTCBhcyB3ZSBhcmUgaW4gYSBzaHV0ZG93biBzaXR1YXRpb24uCisJCSAqLworCQlpZiAoYWJvcnRlZCkgeworCQkJQVNTRVJUKFhGU19GT1JDRURfU0hVVERPV04oYWlscC0+eGFfbW91bnQpKTsKKwkJCUlPUF9VTlBJTihsaXAsIDEpOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAoaXRlbV9sc24gIT0gY29tbWl0X2xzbikgewogCiAJCQkvKgpAQCAtMTUwMywyMCArMTUyMSwyNCBAQAogfQogCiAvKgotICogQ2FsbGVkIGZyb20gdGhlIHRyYW5zX2NvbW1pdCBjb2RlIHdoZW4gd2Ugbm90aWNlIHRoYXQKLSAqIHRoZSBmaWxlc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBmb3JjZWQgc2h1dGRvd24uCisgKiBDYWxsZWQgZnJvbSB0aGUgdHJhbnNfY29tbWl0IGNvZGUgd2hlbiB3ZSBub3RpY2UgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBpbgorICogdGhlIG1pZGRsZSBvZiBhIGZvcmNlZCBzaHV0ZG93bi4KKyAqCisgKiBXaGVuIHdlIGFyZSBjYWxsZWQgaGVyZSwgd2UgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhbGwgdGhlIGl0ZW1zIGluIHRoZQorICogdHJhbnNhY3Rpb24uIEhvd2V2ZXIsIG5laXRoZXIgSU9QX0NPTU1JVFRJTkcgb3IgSU9QX1VOTE9DSyBoYXMgYmVlbiBjYWxsZWQKKyAqIHNvIHdlIGNhbiBzaW1wbHkgd2FsayB0aGUgaXRlbXMgaW4gdGhlIHRyYW5zYWN0aW9uLCB1bnBpbiB0aGVtIHdpdGggYW4gYWJvcnQKKyAqIGZsYWcgYW5kIHRoZW4gZnJlZSB0aGUgaXRlbXMuIE5vdGUgdGhhdCB1bnBpbm5pbmcgdGhlIGl0ZW1zIGNhbiByZXN1bHQgaW4KKyAqIHRoZW0gYmVpbmcgZnJlZWQgaW1tZWRpYXRlbHksIHNvIHdlIG5lZWQgdG8gdXNlIGEgc2FmZSBsaXN0IHRyYXZlcnNhbCBtZXRob2QKKyAqIGhlcmUuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfdHJhbnNfdW5jb21taXQoCiAJc3RydWN0IHhmc190cmFucwkqdHAsCiAJdWludAkJCWZsYWdzKQogewotCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHAsICpuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsaWRwLCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgewotCQkvKgotCQkgKiBVbnBpbiBhbGwgYnV0IHRob3NlIHRoYXQgYXJlbid0IGRpcnR5LgotCQkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGlkcCwgbiwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKIAkJaWYgKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpCiAJCQlJT1BfVU5QSU4obGlkcC0+bGlkX2l0ZW0sIDEpOwogCX0KQEAgLTE3MzMsNyArMTc1NSw2IEBACiAJaW50CQkJZmxhZ3MpCiB7CiAJc3RydWN0IHhmc19sb2dfdmVjCSpsb2dfdmVjdG9yOwotCWludAkJCWVycm9yOwogCiAJLyoKIAkgKiBHZXQgZWFjaCBsb2cgaXRlbSB0byBhbGxvY2F0ZSBhIHZlY3RvciBzdHJ1Y3R1cmUgZm9yCkBAIC0xNzQ0LDkgKzE3NjUsNyBAQAogCWlmICghbG9nX3ZlY3RvcikKIAkJcmV0dXJuIEVOT01FTTsKIAotCWVycm9yID0geGZzX2xvZ19jb21taXRfY2lsKG1wLCB0cCwgbG9nX3ZlY3RvciwgY29tbWl0X2xzbiwgZmxhZ3MpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCXhmc19sb2dfY29tbWl0X2NpbChtcCwgdHAsIGxvZ192ZWN0b3IsIGNvbW1pdF9sc24sIGZsYWdzKTsKIAogCWN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoJnRwLT50X3BmbGFncywgUEZfRlNUUkFOUyk7CiAJeGZzX3RyYW5zX2ZyZWUodHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDY4NjQ5MzMuLmZlNzdlMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTEyNCw3ICsxMjQsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwotI2RlZmluZSBGVFJBQ0VfRVZFTlRTKCkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9mdHJhY2VfZXZlbnRzKSA9IC47CVwKKyNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCS4gPSBBTElHTig4KTsJCQkJCVwKKwkJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCiAJCQkqKF9mdHJhY2VfZXZlbnRzKQkJCQlcCiAJCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfZnRyYWNlX2V2ZW50cykgPSAuOwogI2Vsc2UKQEAgLTE0MCw3ICsxNDEsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCi0jZGVmaW5lIFRSQUNFX1NZU0NBTExTKCkgVk1MSU5VWF9TWU1CT0woX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YSkgPSAuOwlcCisjZGVmaW5lIFRSQUNFX1NZU0NBTExTKCkgLiA9IEFMSUdOKDgpOwkJCQkJXAorCQkJIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAogCQkJICooX19zeXNjYWxsc19tZXRhZGF0YSkJCQkJXAogCQkJIFZNTElOVVhfU1lNQk9MKF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YSkgPSAuOwogI2Vsc2UKQEAgLTE2NSwxMCArMTY3LDggQEAKIAlDUFVfS0VFUChleGl0LmRhdGEpCQkJCQkJXAogCU1FTV9LRUVQKGluaXQuZGF0YSkJCQkJCQlcCiAJTUVNX0tFRVAoZXhpdC5kYXRhKQkJCQkJCVwKLQkuID0gQUxJR04oMzIpOwkJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCVNUUlVDVF9BTElHTigpOwkJCQkJCQlcCiAJKihfX3RyYWNlcG9pbnRzKQkJCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX190cmFjZXBvaW50cykgPSAuOwkJCVwKIAkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAogCS4gPSBBTElHTig4KTsJCQkJCQkJXAogCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzYsMTMgKzE3Niw3IEBACiAJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZSkgPSAuOwkJCQlcCiAJTElLRUxZX1BST0ZJTEUoKQkJICAgICAgIAkJCQlcCiAJQlJBTkNIX1BST0ZJTEUoKQkJCQkJCVwKLQlUUkFDRV9QUklOVEtTKCkJCQkJCQkJXAotCQkJCQkJCQkJXAotCVNUUlVDVF9BTElHTigpOwkJCQkJCQlcCi0JRlRSQUNFX0VWRU5UUygpCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAotCVRSQUNFX1NZU0NBTExTKCkKKwlUUkFDRV9QUklOVEtTKCkKIAogLyoKICAqIERhdGEgc2VjdGlvbiBoZWxwZXJzCkBAIC0yMjAsNiArMjE0LDEwIEBACiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfcm9kYXRhKSA9IC47CQkJXAogCQkqKC5yb2RhdGEpICooLnJvZGF0YS4qKQkJCQkJXAogCQkqKF9fdmVybWFnaWMpCQkvKiBLZXJuZWwgdmVyc2lvbiBtYWdpYyAqLwlcCisJCS4gPSBBTElHTig4KTsJCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzKSA9IC47CQlcCisJCSooX190cmFjZXBvaW50c19wdHJzKQkvKiBUcmFjZXBvaW50czogcG9pbnRlciBhcnJheSAqL1wKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHNfcHRycykgPSAuOwkJXAogCQkqKF9fbWFya2Vyc19zdHJpbmdzKQkvKiBNYXJrZXJzOiBzdHJpbmdzICovCQlcCiAJCSooX190cmFjZXBvaW50c19zdHJpbmdzKS8qIFRyYWNlcG9pbnRzOiBzdHJpbmdzICovCVwKIAl9CQkJCQkJCQlcCkBAIC0zNjQsNiArMzYyLDEzIEBACiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19wYXJhbSkgPSAuOwkJCVwKIAkJKihfX3BhcmFtKQkJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fcGFyYW0pID0gLjsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCS8qIEJ1aWx0LWluIG1vZHVsZSB2ZXJzaW9ucy4gKi8JCQkJCVwKKwlfX21vZHZlciA6IEFUKEFERFIoX19tb2R2ZXIpIC0gTE9BRF9PRkZTRVQpIHsJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19tb2R2ZXIpID0gLjsJCQlcCisJCSooX19tb2R2ZXIpCQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19tb2R2ZXIpID0gLjsJCQlcCiAJCS4gPSBBTElHTigoYWxpZ24pKTsJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19lbmRfcm9kYXRhKSA9IC47CQkJXAogCX0JCQkJCQkJCVwKQEAgLTQ3NSw2ICs0ODAsOCBAQAogCUtFUk5FTF9DVE9SUygpCQkJCQkJCVwKIAkqKC5pbml0LnJvZGF0YSkJCQkJCQkJXAogCU1DT1VOVF9SRUMoKQkJCQkJCQlcCisJRlRSQUNFX0VWRU5UUygpCQkJCQkJCVwKKwlUUkFDRV9TWVNDQUxMUygpCQkJCQkJXAogCURFVl9ESVNDQVJEKGluaXQucm9kYXRhKQkJCQkJXAogCUNQVV9ESVNDQVJEKGluaXQucm9kYXRhKQkJCQkJXAogCU1FTV9ESVNDQVJEKGluaXQucm9kYXRhKQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGE0Njk0YzYuLmZlMjlhYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTEzNjcsNyArMTM2Nyw3IEBACiBleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHUzMiBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAogCQkJCSAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua3RpbWUpOwotZXh0ZXJuIHZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGJvb2wgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBkcm1fdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX29mZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCBhY2Q3ZmFkLi44MDFiZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTI3NSw2ICsyNzUsNyBAQAogCiAvKioKICAqIGRybV9jcnRjX2Z1bmNzIC0gY29udHJvbCBDUlRDcyBmb3IgYSBnaXZlbiBkZXZpY2UKKyAqIEByZXNldDogcmVzZXQgQ1JUQyBhZnRlciBzdGF0ZSBoYXMgYmVlbiBpbnZhbGlkYXRlIChlLmcuIHJlc3VtZSkKICAqIEBkcG1zOiBjb250cm9sIGRpc3BsYXkgcG93ZXIgbGV2ZWxzCiAgKiBAc2F2ZTogc2F2ZSBDUlRDIHN0YXRlCiAgKiBAcmVzb3JlOiByZXN0b3JlIENSVEMgc3RhdGUKQEAgLTMwMiw2ICszMDMsOCBAQAogCXZvaWQgKCpzYXZlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOyAvKiBzdXNwZW5kPyAqLwogCS8qIFJlc3RvcmUgQ1JUQyBzdGF0ZSAqLwogCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOyAvKiByZXN1bWU/ICovCisJLyogUmVzZXQgQ1JUQyBzdGF0ZSAqLworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogCS8qIGN1cnNvciBjb250cm9scyAqLwogCWludCAoKmN1cnNvcl9zZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCkBAIC0zNzksNiArMzgyLDcgQEAKICAqIEBkcG1zOiBzZXQgcG93ZXIgc3RhdGUgKHNlZSBkcm1fY3J0Y19mdW5jcyBhYm92ZSkKICAqIEBzYXZlOiBzYXZlIGNvbm5lY3RvciBzdGF0ZQogICogQHJlc3RvcmU6IHJlc3RvcmUgY29ubmVjdG9yIHN0YXRlCisgKiBAcmVzZXQ6IHJlc2V0IGNvbm5lY3RvciBhZnRlciBzdGF0ZSBoYXMgYmVlbiBpbnZhbGlkYXRlIChlLmcuIHJlc3VtZSkKICAqIEBtb2RlX3ZhbGlkOiBpcyB0aGlzIG1vZGUgdmFsaWQgb24gdGhlIGdpdmVuIGNvbm5lY3Rvcj8KICAqIEBtb2RlX2ZpeHVwOiB0cnkgdG8gZml4dXAgcHJvcG9zZWQgbW9kZSBmb3IgdGhpcyBjb25uZWN0b3IKICAqIEBtb2RlX3NldDogc2V0IHRoaXMgbW9kZQpAQCAtMzk2LDYgKzQwMCw3IEBACiAJdm9pZCAoKmRwbXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBtb2RlKTsKIAl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgYW55dGhpbmcgaXMgYXR0YWNoZWQgdG8gdGhlIGNvbm5lY3Rvci4KIAkgKiBAZm9yY2UgaXMgc2V0IHRvIGZhbHNlIHdoaWxzdCBwb2xsaW5nLCB0cnVlIHdoZW4gY2hlY2tpbmcgdGhlCkBAIC00MTMsNiArNDE4LDcgQEAKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7CisJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogfTsKIApAQCAtNjU2LDYgKzY2Miw3IEBACiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9zZXRfbmFtZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gYm9vbCBkcm1fbW9kZV9lcXVhbChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggZmUyOWFlMy4uNWZmMTE5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtMjgsNyArMjgsNiBAQAogCXsweDEwMDIsIDB4NDE1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM1MH0sIFwKIAl7MHgxMDAyLCAweDQyMzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDQyNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKLQl7MHgxMDAyLCAweDQyNDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKIAl7MHgxMDAyLCAweDQzMzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMxMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg0MzM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NDQzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCBlOTVhODZiLi5lNWM2MDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC05MDcsNiArOTA3LDcgQEAKICNkZWZpbmUgUkFERU9OX0lORk9fVElMSU5HX0NPTkZJRwkweDA2CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfSFlQRVJaCQkweDA3CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfQ01BU0sJCTB4MDggLyogZ2V0IGFjY2VzcyB0byBDTUFTSyBvbiByMzAwICovCisjZGVmaW5lIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUQkweDA5IC8qIGNsb2NrIGNyeXN0YWwgZnJlcXVlbmN5ICovCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogCXVpbnQzMl90CQlyZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAyMjk2ZDhiLi5iMGFkYTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMSw1ICsxLDYgQEAKIGhlYWRlci15ICs9IGJ5dGVvcmRlci8KIGhlYWRlci15ICs9IGNhbi8KK2hlYWRlci15ICs9IGNhaWYvCiBoZWFkZXIteSArPSBkdmIvCiBoZWFkZXIteSArPSBoZGxjLwogaGVhZGVyLXkgKz0gaXNkbi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2NhaWYvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2YyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NhaWYvS2J1aWxkCkBAIC0wLDAgKzEsMiBAQAoraGVhZGVyLXkgKz0gY2FpZl9zb2NrZXQuaAoraGVhZGVyLXkgKz0gaWZfY2FpZi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IDk3NzRmZTYuLjc0NTNjZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCkBAIC0xMzksOSArMTM5LDkgQEAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2NvbnNvbGUoc3RydWN0IGNvbnNvbGUgKik7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfY29uc29sZShzdHJ1Y3QgY29uc29sZSAqKTsKIGV4dGVybiBzdHJ1Y3QgY29uc29sZSAqY29uc29sZV9kcml2ZXJzOwotZXh0ZXJuIHZvaWQgYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKTsKLWV4dGVybiBpbnQgdHJ5X2FjcXVpcmVfY29uc29sZV9zZW0odm9pZCk7Ci1leHRlcm4gdm9pZCByZWxlYXNlX2NvbnNvbGVfc2VtKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uc29sZV9sb2NrKHZvaWQpOworZXh0ZXJuIGludCBjb25zb2xlX3RyeWxvY2sodm9pZCk7CitleHRlcm4gdm9pZCBjb25zb2xlX3VubG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIGNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUodm9pZCk7CiBleHRlcm4gdm9pZCBjb25zb2xlX3VuYmxhbmsodm9pZCk7CiBleHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKmNvbnNvbGVfZGV2aWNlKGludCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAzMmIzOGNkLi5iZDMyMTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0yNTU1LDkgKzI1NTUsMTIgQEAKIAkJICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwogaW50IF9faW5pdCBnZXRfZmlsZXN5c3RlbV9saXN0KGNoYXIgKmJ1Zik7CiAKKyNkZWZpbmUgX19GTU9ERV9FWEVDCQkoKF9fZm9yY2UgaW50KSBGTU9ERV9FWEVDKQorI2RlZmluZSBfX0ZNT0RFX05PTk9USUZZCSgoX19mb3JjZSBpbnQpIEZNT0RFX05PTk9USUZZKQorCiAjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwNFwwMDJcMDA2XDAwNiJbKHgpJk9fQUNDTU9ERV0pCiAjZGVmaW5lIE9QRU5fRk1PREUoZmxhZykgKChfX2ZvcmNlIGZtb2RlX3QpKCgoZmxhZyArIDEpICYgT19BQ0NNT0RFKSB8IFwKLQkJCQkJICAgIChmbGFnICYgRk1PREVfTk9OT1RJRlkpKSkKKwkJCQkJICAgIChmbGFnICYgX19GTU9ERV9OT05PVElGWSkpKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCBhM2IxNDhhLi4wYjg0YzYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTI0OSw3ICsyNDksNyBAQAogCQkJCQkgKCgxIDw8IFpPTkVTX1NISUZUKSAtIDEpOwogCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkpCi0JCU1BWUJFX0JVSUxEX0JVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKKwkJQlVJTERfQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOwogCWVsc2UgewogI2lmZGVmIENPTkZJR19ERUJVR19WTQogCQlCVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvYnUyMTAxMy5oCmluZGV4IGU0NzBkMzguLjA1ZTAzMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQvYnUyMTAxMy5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQvYnUyMTAxMy5oCkBAIC0xMiw4ICsxMiw2IEBACiAgKiBAY3NfZW46CXBvaW50ZXIgdG8gdGhlIGNzIGVuYWJsZSBmdW5jdGlvbgogICogQGNzX2RpczoJcG9pbnRlciB0byB0aGUgY3MgZGlzYWJsZSBmdW5jdGlvbgogICogQGlycV9yZWFkX3ZhbDogICAgcG9pbnRlciB0byByZWFkIHRoZSBwZW4gaXJxIHZhbHVlIGZ1bmN0aW9uCi0gKiBAeF9tYXhfcmVzOiB4bWF4IHJlc29sdXRpb24KLSAqIEB5X21heF9yZXM6IHltYXggcmVzb2x1dGlvbgogICogQHRvdWNoX3hfbWF4OiB0b3VjaCB4IG1heAogICogQHRvdWNoX3lfbWF4OiB0b3VjaCB5IG1heAogICogQGNzX3BpbjogY2hpcCBzZWxlY3QgcGluCkBAIC0yOSw4ICsyNyw2IEBACiAJaW50ICgqY3NfZW4pKGludCByZXNldF9waW4pOwogCWludCAoKmNzX2RpcykoaW50IHJlc2V0X3Bpbik7CiAJaW50ICgqaXJxX3JlYWRfdmFsKSh2b2lkKTsKLQlpbnQgeF9tYXhfcmVzOwotCWludCB5X21heF9yZXM7CiAJaW50IHRvdWNoX3hfbWF4OwogCWludCB0b3VjaF95X21heDsKIAl1bnNpZ25lZCBpbnQgY3NfcGluOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggYWJkZTI1Mi4uODBmY2I1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC03NCw3ICs3NCw4IEBACiAKICNkZWZpbmUgSVJRRl9NT0RJRllfTUFTSwlcCiAJKElSUV9UWVBFX1NFTlNFX01BU0sgfCBJUlFfTk9QUk9CRSB8IElSUV9OT1JFUVVFU1QgfCBcCi0JIElSUV9OT0FVVE9FTiB8IElSUV9NT1ZFX1BDTlRYVCB8IElSUV9MRVZFTCkKKwkgSVJRX05PQVVUT0VOIHwgSVJRX01PVkVfUENOVFhUIHwgSVJRX0xFVkVMIHwgSVJRX05PX0JBTEFOQ0lORyB8IFwKKwkgSVJRX1BFUl9DUFUpCiAKICNpZmRlZiBDT05GSUdfSVJRX1BFUl9DUFUKICMgZGVmaW5lIENIRUNLX0lSUV9QRVJfQ1BVKHZhcikgKCh2YXIpICYgSVJRX1BFUl9DUFUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBkMDdkODA1Li4yZmU2ZTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTU3NSwxMiArNTc1LDYgQEAKIAljaGFyIF9mWzIwLTIqc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQpXTsJLyogUGFkZGluZzogbGliYzUgdXNlcyB0aGlzLi4gKi8KIH07CiAKLS8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgY29uZGl0aW9uIGlzIHRydWUgKi8KLSNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKUJVSUxEX0JVR19PTl9aRVJPKGNvbmRpdGlvbikpCi0KLS8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgY29uZGl0aW9uIGlzIGNvbnN0YW50IGFuZCB0cnVlICovCi0jZGVmaW5lIE1BWUJFX0JVSUxEX0JVR19PTihjb25kKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIgKiAhIShjb25kKV0pKQotCiAvKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBpcyBub3QgYSBwb3dlciBvZiAyICovCiAjZGVmaW5lIEJVSUxEX0JVR19PTl9OT1RfUE9XRVJfT0ZfMihuKQkJCVwKIAlCVUlMRF9CVUdfT04oKG4pID09IDAgfHwgKCgobikgJiAoKG4pIC0gMSkpICE9IDApKQpAQCAtNTkyLDYgKzU4NiwzMiBAQAogI2RlZmluZSBCVUlMRF9CVUdfT05fWkVSTyhlKSAoc2l6ZW9mKHN0cnVjdCB7IGludDotISEoZSk7IH0pKQogI2RlZmluZSBCVUlMRF9CVUdfT05fTlVMTChlKSAoKHZvaWQgKilzaXplb2Yoc3RydWN0IHsgaW50Oi0hIShlKTsgfSkpCiAKKy8qKgorICogQlVJTERfQlVHX09OIC0gYnJlYWsgY29tcGlsZSBpZiBhIGNvbmRpdGlvbiBpcyB0cnVlLgorICogQGNvbmRpdGlvbjogdGhlIGNvbmRpdGlvbiB3aGljaCB0aGUgY29tcGlsZXIgc2hvdWxkIGtub3cgaXMgZmFsc2UuCisgKgorICogSWYgeW91IGhhdmUgc29tZSBjb2RlIHdoaWNoIHJlbGllcyBvbiBjZXJ0YWluIGNvbnN0YW50cyBiZWluZyBlcXVhbCwgb3IKKyAqIG90aGVyIGNvbXBpbGUtdGltZS1ldmFsdWF0ZWQgY29uZGl0aW9uLCB5b3Ugc2hvdWxkIHVzZSBCVUlMRF9CVUdfT04gdG8KKyAqIGRldGVjdCBpZiBzb21lb25lIGNoYW5nZXMgaXQuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgZ2NjJ3MgcmVsdWN0YW5jZSB0byBjcmVhdGUgYSBuZWdhdGl2ZSBhcnJheSwgYnV0CisgKiBnY2MgKGFzIG9mIDQuNCkgb25seSBlbWl0cyB0aGF0IGVycm9yIGZvciBvYnZpb3VzIGNhc2VzIChlZy4gbm90IGFyZ3VtZW50cworICogdG8gaW5saW5lIGZ1bmN0aW9ucykuICBTbyBhcyBhIGZhbGxiYWNrIHdlIHVzZSB0aGUgb3B0aW1pemVyOyBpZiBpdCBjYW4ndAorICogcHJvdmUgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgaXQgd2lsbCBjYXVzZSBhIGxpbmsgZXJyb3Igb24gdGhlIHVuZGVmaW5lZAorICogIl9fYnVpbGRfYnVnX29uX2ZhaWxlZCIuICBUaGlzIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGhhcmRlciB0byB0cmFjayBkb3duCisgKiB0aG91Z2gsIGhlbmNlIHRoZSB0d28gZGlmZmVyZW50IG1ldGhvZHMuCisgKi8KKyNpZm5kZWYgX19PUFRJTUlaRV9fCisjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpCisjZWxzZQorZXh0ZXJuIGludCBfX2J1aWxkX2J1Z19vbl9mYWlsZWQ7CisjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCSgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpOwlcCisJCWlmIChjb25kaXRpb24pIF9fYnVpbGRfYnVnX29uX2ZhaWxlZCA9IDE7CVwKKwl9IHdoaWxlKDApCisjZW5kaWYKKwogLyogVHJhcCBwYXN0ZXJzIG9mIF9fRlVOQ1RJT05fXyBhdCBjb21waWxlLXRpbWUgKi8KICNkZWZpbmUgX19GVU5DVElPTl9fIChfX2Z1bmNfXykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaCBiL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKaW5kZXggMDhkN2RjNC4uMzlmODQ1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCkBAIC03Niw3ICs3Niw3IEBACiAJCQkJCQkJCQlcCiAJCV9uID0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19lbmQpCQkJXAogCQkJLSAobG9uZykgJigocHRyKS0+bmFtZSMjX2JlZ2luKTsJCVwKLQkJTUFZQkVfQlVJTERfQlVHX09OKF9uIDwgMCk7CQkJCVwKKwkJQlVJTERfQlVHX09OKF9uIDwgMCk7CQkJCQlcCiAJCQkJCQkJCQlcCiAJCWttZW1jaGVja19tYXJrX2luaXRpYWxpemVkKCYoKHB0ciktPm5hbWUjI19iZWdpbiksIF9uKTsJXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaAppbmRleCBiZjE3MzUwLi4zOGQzOTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmgKQEAgLTk0LDEyICs5NCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBzaF9tbWNpZl9yZWFkbCh2b2lkIF9faW9tZW0gKmFkZHIsIGludCByZWcpCiB7Ci0JcmV0dXJuIHJlYWRsKGFkZHIgKyByZWcpOworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNoX21tY2lmX3dyaXRlbCh2b2lkIF9faW9tZW0gKmFkZHIsIGludCByZWcsIHUzMiB2YWwpCiB7Ci0Jd3JpdGVsKHZhbCwgYWRkciArIHJlZyk7CisJX19yYXdfd3JpdGVsKHZhbCwgYWRkciArIHJlZyk7CiB9CiAKICNkZWZpbmUgU0hfTU1DSUZfQkJTIDUxMiAvKiBib290IGJsb2NrIHNpemUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDhiMTdmZDguLjliZGYyN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtNTgsNiArNTgsMTIgQEAKIAl2b2lkICgqZnJlZSkoc3RydWN0IG1vZHVsZSAqKTsKIH07CiAKK3N0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgeworCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIG1hdHRyOworCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOworCWNvbnN0IGNoYXIgKnZlcnNpb247Cit9OworCiBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QKIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtMTYxLDcgKzE2NywyOCBAQAogICBVc2luZyB0aGlzIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGNoZWNrc3VtIG9mIHRoZSAuYyBmaWxlcyBhbmQgdGhlCiAgIGxvY2FsIGhlYWRlcnMgaW4gInNyY3ZlcnNpb24iLgogKi8KKworI2lmIGRlZmluZWQoTU9EVUxFKSB8fCAhZGVmaW5lZChDT05GSUdfU1lTRlMpCiAjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GTyh2ZXJzaW9uLCBfdmVyc2lvbikKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKQkJCQkJXAorCWV4dGVybiBzc2l6ZV90IF9fbW9kdmVyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLAlcCisJCQkJCSAgICAgc3RydWN0IG1vZHVsZSAqLCBjaGFyICopOwlcCisJc3RhdGljIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19tb2R2ZXJfdmVyc2lvbl9hdHRyCVwKKwlfX3VzZWQJCQkJCQkJCVwKKyAgICBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCJfX21vZHZlciIpLGFsaWduZWQoc2l6ZW9mKHZvaWQgKikpKSkgXAorCT0gewkJCQkJCQkJXAorCQkubWF0dHIJPSB7CQkJCQkJXAorCQkJLmF0dHIJPSB7CQkJCQlcCisJCQkJLm5hbWUJPSAidmVyc2lvbiIsCQkJXAorCQkJCS5tb2RlCT0gU19JUlVHTywJCQlcCisJCQl9LAkJCQkJCVwKKwkJCS5zaG93CT0gX19tb2R2ZXJfdmVyc2lvbl9zaG93LAkJXAorCQl9LAkJCQkJCQlcCisJCS5tb2R1bGVfbmFtZQk9IEtCVUlMRF9NT0ROQU1FLAkJCVwKKwkJLnZlcnNpb24JPSBfdmVyc2lvbiwJCQkJXAorCX0KKyNlbmRpZgogCiAvKiBPcHRpb25hbCBmaXJtd2FyZSBmaWxlIChvciBmaWxlcykgbmVlZGVkIGJ5IHRoZSBtb2R1bGUKICAqIGZvcm1hdCBpcyBzaW1wbHkgZmlybXdhcmUgZmlsZSBuYW1lLiAgTXVsdGlwbGUgZmlybXdhcmUKQEAgLTM1MCw3ICszNzcsNyBAQAogCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLwogCWNoYXIgKmFyZ3M7CiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0Jc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnRzOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnRzX3B0cnM7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZXBvaW50czsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTApAQCAtMzYyLDcgKzM4OSw3IEBACiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9icHJpbnRrX2ZtdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCi0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp0cmFjZV9ldmVudHM7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICoqdHJhY2VfZXZlbnRzOwogCXVuc2lnbmVkIGludCBudW1fdHJhY2VfZXZlbnRzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggMTEyYWRmOC4uMDdiNDE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtMTYsMTUgKzE2LDE3IEBACiAvKiBDaG9zZW4gc28gdGhhdCBzdHJ1Y3RzIHdpdGggYW4gdW5zaWduZWQgbG9uZyBsaW5lIHVwLiAqLwogI2RlZmluZSBNQVhfUEFSQU1fUFJFRklYX0xFTiAoNjQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpCiAKLSNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19fbW9kdWxlX2NhdChhLGIpIF9fbW9kXyAjIyBhICMjIGIKICNkZWZpbmUgX19tb2R1bGVfY2F0KGEsYikgX19fbW9kdWxlX2NhdChhLGIpCisjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQkJCQkJICBcCiBzdGF0aWMgY29uc3QgY2hhciBfX21vZHVsZV9jYXQobmFtZSxfX0xJTkVfXylbXQkJCQkgIFwKICAgX191c2VkIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5tb2RpbmZvIiksIHVudXNlZCwgYWxpZ25lZCgxKSkpCSAgXAogICA9IF9fc3RyaW5naWZ5KHRhZykgIj0iIGluZm8KICNlbHNlICAvKiAhTU9EVUxFICovCi0jZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQorLyogVGhpcyBzdHJ1Y3QgaXMgaGVyZSBmb3Igc3ludGFjdGljIGNvaGVyZW5jeSwgaXQgaXMgbm90IHVzZWQgKi8KKyNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCQkJCQkgIFwKKyAgc3RydWN0IF9fbW9kdWxlX2NhdChuYW1lLF9fTElORV9fKSB7fQogI2VuZGlmCiAjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkJCQkJCSAgXAogICBfX01PRFVMRV9JTkZPKHBhcm10eXBlLCBuYW1lIyN0eXBlLCAjbmFtZSAiOiIgX3R5cGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaAppbmRleCAwZmE3YTNhLi5iMjFkNTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogZXh0ZXJuIGludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIGludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcF9tcl9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggNjA5MWFiNy4uOWQyZGViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogZXh0ZXJuIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwogZXh0ZXJuIGludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcDZfbXJfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlwNl9tcl9jbGVhbnVwKHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCmluZGV4IGYzMjFiNTcuLmZhYmNiMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNhY2wuaApAQCAtNTEsMTAgKzUxLDEwIEBACiAJcmV0dXJuIHc7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQKK2V4dGVybiBpbnQKIG5mc2FjbF9lbmNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgZW5jb2RlX2VudHJpZXMsIGludCB0eXBlZmxhZyk7Ci1leHRlcm4gdW5zaWduZWQgaW50CitleHRlcm4gaW50CiBuZnNhY2xfZGVjb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKmFjbGNudCwKIAkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCmluZGV4IGQ2ODI4M2EuLjU0MjExYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaApAQCAtNzEsNiArNzEsNyBAQAogCiAvKiBwb3NpeF9hY2wuYyAqLwogCitleHRlcm4gdm9pZCBwb3NpeF9hY2xfaW5pdChzdHJ1Y3QgcG9zaXhfYWNsICosIGludCk7CiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2FsbG9jKGludCwgZ2ZwX3QpOwogZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKnBvc2l4X2FjbF9jbG9uZShjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICosIGdmcF90KTsKIGV4dGVybiBpbnQgcG9zaXhfYWNsX3ZhbGlkKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKaW5kZXggZmNiOTg4NC4uYTU5MzBjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaApAQCAtMTgyLDYgKzE4MiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luIC0gY2hlY2sgaWYgdGhlIGNvdW50ZXIgYWxsb3dzIGNoYXJnaW5nCisgKiBAY250OiB0aGUgcmVzb3VyY2UgY291bnRlciB0byBjaGVjaworICogQGJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNoZWNrIHRoZSByZW1haW5pbmcgc3BhY2UgYWdhaW5zdAorICoKKyAqIFJldHVybnMgYSBib29sZWFuIHZhbHVlIG9uIHdoZXRoZXIgdGhlIGNvdW50ZXIgY2FuIGJlIGNoYXJnZWQKKyAqIEBieXRlcyBvciB3aGV0aGVyIHRoaXMgd291bGQgZXhjZWVkIHRoZSBsaW1pdC4KKyAqLworc3RhdGljIGlubGluZSBib29sIHJlc19jb3VudGVyX2NoZWNrX21hcmdpbihzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNudCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJYm9vbCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbnQtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbnQtPmxpbWl0IC0gY250LT51c2FnZSA+PSBieXRlczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbnQtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfY2hlY2tfdW5kZXJfc29mdF9saW1pdChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNudCkKIHsKIAlib29sIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IDNjOTk1YjQuLmEwYjYzOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtMjM1LDggKzIzNSw2IEBACiAJCQkJc3RydWN0IHJ0Y190YXNrICp0YXNrLCBpbnQgZnJlcSk7CiBleHRlcm4gaW50IHJ0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCk7CiBleHRlcm4gaW50IHJ0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHVuc2lnbmVkIGludCBlbmFibGVkKTsKLWV4dGVybiBpbnQgcnRjX2Rldl91cGRhdGVfaXJxX2VuYWJsZV9lbXVsKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCi0JCQkJCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCk7CiAKIHZvaWQgcnRjX2FpZV91cGRhdGVfaXJxKHZvaWQgKnByaXZhdGUpOwogdm9pZCBydGNfdWllX3VwZGF0ZV9pcnEodm9pZCAqcHJpdmF0ZSk7CkBAIC0yNDYsOCArMjQ0LDYgQEAKIGludCBydGNfdW5yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKIGludCBydGNfY29udHJvbChydGNfdGFza190ICp0LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLXZvaWQgcnRjX3RpbWVyX2VucXVldWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpOwotdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKIHZvaWQgcnRjX3RpbWVyX2luaXQoc3RydWN0IHJ0Y190aW1lciAqdGltZXIsIHZvaWQgKCpmKSh2b2lkKiBwKSwgdm9pZCogZGF0YSk7CiBpbnQgcnRjX3RpbWVyX3N0YXJ0KHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIqIHRpbWVyLAogCQkJa3RpbWVfdCBleHBpcmVzLCBrdGltZV90IHBlcmlvZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKaW5kZXggYzUwYjQ1OC4uMDgyODg0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaApAQCAtNDcsMTQgKzQ3LDYgQEAKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJcmV0dXJuIChzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKikKLQkJCXJxc3RwLT5ycV9zZXJ2ZXItPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KICNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLwogc3RhdGljIGlubGluZSBpbnQgeHBydF9zZXR1cF9iYWNrY2hhbm5lbChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbWluX3JlcXMpCkBAIC02NywxMSArNTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHhwcnRfZnJlZV9iY19yZXF1ZXN0KHN0cnVjdCBycGNfcnFzdCAqcmVxKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKaW5kZXggMDU5ODc3Yi4uN2FkOTc1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCkBAIC03Nyw3ICs3Nyw2IEBACiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXhwdF91c2VyczsJLyogY2FsbGJhY2tzIG9uIGZyZWUgKi8KLQl2b2lkCQkJKnhwdF9iY19zaWQ7CS8qIGJhY2sgY2hhbm5lbCBzZXNzaW9uIElEICovCiAKIAlzdHJ1Y3QgbmV0CQkqeHB0X25ldDsKIAlzdHJ1Y3QgcnBjX3hwcnQJCSp4cHRfYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDE4Y2QwNjguLjk4NjY0ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTEyNSwzOSArMTI1LDM3IEBACiBleHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBleGl0X3N5c2NhbGxfcHJpbnRfZnVuY3M7CiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAotCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKIAkgIGV2ZW50X2VudGVyXyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19lbnRlciIjc25hbWUsCQlcCiAJCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzX3N5c2NhbGxfZW50ZXIsCVwKIAkJLmV2ZW50LmZ1bmNzICAgICAgICAgICAgPSAmZW50ZXJfc3lzY2FsbF9wcmludF9mdW5jcywJXAogCQkuZGF0YQkJCT0gKHZvaWQgKikmX19zeXNjYWxsX21ldGFfIyNzbmFtZSxcCiAJfTsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCisJICpfX2V2ZW50X2VudGVyXyMjc25hbWUgPSAmZXZlbnRfZW50ZXJfIyNzbmFtZTsJCQlcCiAJX19UUkFDRV9FVkVOVF9GTEFHUyhlbnRlcl8jI3NuYW1lLCBUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZKQogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCiAJICBldmVudF9leGl0XyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9leGl0LAlcCiAJCS5ldmVudC5mdW5jcwkJPSAmZXhpdF9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAl9OwkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkqX19ldmVudF9leGl0XyMjc25hbWUgPSAmZXZlbnRfZXhpdF8jI3NuYW1lOwkJCVwKIAlfX1RSQUNFX0VWRU5UX0ZMQUdTKGV4aXRfIyNzbmFtZSwgVFJBQ0VfRVZFTlRfRkxfQ0FQX0FOWSkKIAogI2RlZmluZSBTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCBuYikJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXMiI3NuYW1lLAkJCVwKIAkJLm5iX2FyZ3MgCT0gbmIsCQkJCVwKQEAgLTE2NiwxNCArMTY0LDE1IEBACiAJCS5lbnRlcl9ldmVudAk9ICZldmVudF9lbnRlcl8jI3NuYW1lLAkJXAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0XyMjc25hbWUsCQlcCiAJCS5lbnRlcl9maWVsZHMJPSBMSVNUX0hFQURfSU5JVChfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKLQl9OworCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAqX19wX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gJl9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKQkJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lID0gewkJCQlcCiAJCS5uYW1lIAkJPSAic3lzXyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSAwLAkJCQlcCkBAIC0xODEsNiArMTgwLDkgQEAKIAkJLmV4aXRfZXZlbnQJPSAmZXZlbnRfZXhpdF9fIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKIAl9OwkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgKl9fcF9zeXNjYWxsX21ldGFfIyNzbmFtZSA9ICZfX3N5c2NhbGxfbWV0YV9fIyNzbmFtZTsJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXNfIyNzbmFtZSh2b2lkKQogI2Vsc2UKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKG5hbWUpCSAgIGFzbWxpbmthZ2UgbG9uZyBzeXNfIyNuYW1lKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggMzg3ZmE3ZC4uN2ZhZjkzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorLyogRW5hYmxlL2Rpc2FibGUgU1lTUlEgc3VwcG9ydCBieSBkZWZhdWx0ICgwPT1ubywgMT09eWVzKS4gKi8KKyNkZWZpbmUgU1lTUlFfREVGQVVMVF9FTkFCTEUJMQorCiAvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgYml0bWFzayBmb3IgZW5hYmxpbmcgc3lzcnEgZnVuY3Rpb25zICovCiAvKiAweDAwMDEgaXMgcmVzZXJ2ZWQgZm9yIGVuYWJsZSBldmVyeXRoaW5nICovCiAjZGVmaW5lIFNZU1JRX0VOQUJMRV9MT0cJMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGM2ODE0NjEuLjk3Yzg0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMywxMiArMzMsNyBAQAogCXZvaWQgKCpyZWdmdW5jKSh2b2lkKTsKIAl2b2lkICgqdW5yZWdmdW5jKSh2b2lkKTsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jIF9fcmN1ICpmdW5jczsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsJCS8qCi0JCQkJCSAqIEFsaWduZWQgb24gMzIgYnl0ZXMgYmVjYXVzZSBpdCBpcwotCQkJCQkgKiBnbG9iYWxseSB2aXNpYmxlIGFuZCBnY2MgaGFwcGlseQotCQkJCQkgKiBhbGlnbiB0aGVzZSBvbiB0aGUgc3RydWN0dXJlIHNpemUuCi0JCQkJCSAqIEtlZXAgaW4gc3luYyB3aXRoIHZtbGludXgubGRzLmguCi0JCQkJCSAqLworfTsKIAogLyoKICAqIENvbm5lY3QgYSBwcm9iZSB0byBhIHRyYWNlcG9pbnQuCkBAIC02MSwxNSArNTYsMTUgQEAKIAogc3RydWN0IHRyYWNlcG9pbnRfaXRlciB7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50OworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnQ7CiB9OwogCiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RhcnQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfbmV4dChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKIGV4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9zdG9wKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwotZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogCiAvKgogICogdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgdHJhY2Vwb2ludApAQCAtODQsMTEgKzc5LDEzIEBACiAjZGVmaW5lIFBBUkFNUyhhcmdzLi4uKSBhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLWV4dGVybiB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKK2V4dGVybgordm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogeyB9CiAjZW5kaWYgLyogQ09ORklHX1RSQUNFUE9JTlRTICovCiAKQEAgLTE3NCwxMiArMTcxLDIwIEBACiAJewkJCQkJCQkJXAogCX0KIAorLyoKKyAqIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgZ2NjIGFuZCB0aGUgbGlua2VyIHdvbid0IHVwLWFsaWduIHRoZSB0cmFjZXBvaW50CisgKiBzdHJ1Y3R1cmVzLCBzbyB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbgorICogb24gdGhlIHRyYWNlcG9pbnRzLgorICovCiAjZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQlcCiAJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKSA9ICNuYW1lOwlcCiAJc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpLCBhbGlnbmVkKDMyKSkpID0JXAotCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH0KKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIikpKSA9CQkJXAorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH07CQlcCisJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCVwKKwkJJl9fdHJhY2Vwb2ludF8jI25hbWU7CiAKICNkZWZpbmUgREVGSU5FX1RSQUNFKG5hbWUpCQkJCQkJXAogCURFRklORV9UUkFDRV9GTihuYW1lLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKaW5kZXggZGQ2ZWU0OS4uYTg1NGZlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKQEAgLTExMiw2ICsxMTIsNyBAQAogCS8qIEZsYWdzIHRoYXQgZ2V0IHNldCBvbmx5IGR1cmluZyBIQ0QgcmVnaXN0cmF0aW9uIG9yIHJlbW92YWwuICovCiAJdW5zaWduZWQJCXJoX3JlZ2lzdGVyZWQ6MTsvKiBpcyByb290IGh1YiByZWdpc3RlcmVkPyAqLwogCXVuc2lnbmVkCQlyaF9wb2xsYWJsZToxOwkvKiBtYXkgd2UgcG9sbCB0aGUgcm9vdCBodWI/ICovCisJdW5zaWduZWQJCW1zaXhfZW5hYmxlZDoxOwkvKiBkcml2ZXIgaGFzIE1TSS1YIGVuYWJsZWQ/ICovCiAKIAkvKiBUaGUgbmV4dCBmbGFnIGlzIGEgc3RvcGdhcCwgdG8gYmUgcmVtb3ZlZCB3aGVuIGFsbCB0aGUgSENEcwogCSAqIHN1cHBvcnQgdGhlIG5ldyByb290LWh1YiBwb2xsaW5nIG1lY2hhbmlzbS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggMTZkNjgyZi4uYzkwNDkxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTM0Nyw2ICszNDcsOSBAQAogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2hhbmRsZV9zeXNycV9jaGFyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCXVuc2lnbmVkIGludCBjaCk7CiBleHRlcm4gaW50IHVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICp1c2JfcG9ydCwKKwkJCQkJIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKIAogCiBleHRlcm4gaW50IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKaW5kZXggMDA5M2RkNy4uODAwNjE3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKQEAgLTEwOSw3ICsxMDksMTAgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmJpdCkKIHsKIAkvKiBEaWQgeW91IGZvcmdldCB0byBmaXggYXNzdW1wdGlvbnMgb24gbWF4IGZlYXR1cmVzPyAqLwotCU1BWUJFX0JVSUxEX0JVR19PTihmYml0ID49IDMyKTsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZmJpdCkpCisJCUJVSUxEX0JVR19PTihmYml0ID49IDMyKTsKKwllbHNlCisJCUJVR19PTihmYml0ID49IDMyKTsKIAogCWlmIChmYml0IDwgVklSVElPX1RSQU5TUE9SVF9GX1NUQVJUKQogCQl2aXJ0aW9fY2hlY2tfZHJpdmVyX29mZmVyZWRfZmVhdHVyZSh2ZGV2LCBmYml0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggYTI5ZmViMC4uZDJjZjg4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTE4NCw2ICsxODQsNyBAQAogCV9fdTMyCQkgbGlua19tb2RlOwogCV9fdTggICAgICAgICAgICAgYXV0aF90eXBlOwogCV9fdTggICAgICAgICAgICAgc2VjX2xldmVsOworCV9fdTgJCSBwZW5kaW5nX3NlY19sZXZlbDsKIAlfX3U4ICAgICAgICAgICAgIHBvd2VyX3NhdmU7CiAJX191MTYgICAgICAgICAgICBkaXNjX3RpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZwkgcGVuZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKaW5kZXggOGE2NGI4MS4uYjRjN2MxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKQEAgLTE5NSw3ICsxOTUsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VubG1zZ19jYW5jZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyKQogewotCW5sbXNnX2NhbmNlbChza2IsIGhkciAtIEdFTkxfSERSTEVOIC0gTkxNU0dfSERSTEVOKTsKKwlpZiAoaGRyKQorCQlubG1zZ19jYW5jZWwoc2tiLCBoZHIgLSBHRU5MX0hEUkxFTiAtIE5MTVNHX0hEUkxFTik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKaW5kZXggOTZiYTVmNy4uMzQ5Y2VmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCkBAIC03Nyw5ICs3Nyw2IEBACiAJaWYgKGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaWYgKCEoZS0+Y3RtYXNrICYgKDEgPDwgZXZlbnQpKSkKLQkJcmV0dXJuOwotCiAJc2V0X2JpdChldmVudCwgJmUtPmNhY2hlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZTllZWU5OS4uMTYwYTQwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC00NDUsNyArNDQ1LDYgQEAKIHsKIAlfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYik7CiAJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KQEAgLTQ2MCw4ICs0NTksMTAgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KTsKIAotCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQorCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gcWRpc2NfcGt0X2xlbihza2IpOworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKKwl9CiAKIAlyZXR1cm4gc2tiOwogfQpAQCAtNDc0LDEwICs0NzUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQogewotCXN0cnVjdCBza19idWZmICpza2IgPSBfX3FkaXNjX2RlcXVldWVfaGVhZChzY2gsIGxpc3QpOworCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpOwogCiAJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKIAkJdW5zaWduZWQgaW50IGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBsZW47CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gbGVuOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBkODg0ZDI2Li5iYzFjZjdkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtNzUzLDYgKzc1Myw4IEBACiAJCQkJCWludCBsZXZlbCwKIAkJCQkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCiAJCQkJCWludCBfX3VzZXIgKm9wdGlvbik7CisJaW50CQkJKCpjb21wYXRfaW9jdGwpKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogI2VuZGlmCiAJaW50CQkJKCpzZW5kbXNnKShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDY0OGQyMzMuLmI3NmQ0MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtOSw2ICs5LDcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IGUxNjYxMGMuLjNlNjgzNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaApAQCAtNDQ2LDE0ICs0NDYsMTYgQEAKICAqCS5yZWcJCQk9IGZ0cmFjZV9ldmVudF9yZWcsCiAgKiB9OwogICoKLSAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCi0gKiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCi0gKiBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfPGNhbGw+ID0geworICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF88Y2FsbD4gPSB7CiAgKgkubmFtZQkJCT0gIjxjYWxsPiIsCiAgKgkuY2xhc3MJCQk9IGV2ZW50X2NsYXNzXzx0ZW1wbGF0ZT4sCiAgKgkuZXZlbnQJCQk9ICZmdHJhY2VfZXZlbnRfdHlwZV88Y2FsbD4sCiAgKgkucHJpbnRfZm10CQk9IHByaW50X2ZtdF88Y2FsbD4sCiAgKiB9OworICogLy8gaXRzIG9ubHkgc2FmZSB0byB1c2UgcG9pbnRlcnMgd2hlbiBkb2luZyBsaW5rZXIgdHJpY2tzIHRvCisgKiAvLyBjcmVhdGUgYW4gYXJyYXkuCisgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAorICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpICpfX2V2ZW50XzxjYWxsPiA9ICZldmVudF88Y2FsbD47CiAgKgogICovCiAKQEAgLTU3OSwyOCArNTgxLDI4IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKLV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQgZXZlbnRfIyNjYWxsID0gewkJCVwKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc18jI3RlbXBsYXRlLAkJXAogCS5ldmVudC5mdW5jcwkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfZnVuY3NfIyN0ZW1wbGF0ZSwJXAogCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjdGVtcGxhdGUsCQkJXAotfTsKK307CQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsCiAKICN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncywgcHJpbnQpCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgY29uc3QgY2hhciBwcmludF9mbXRfIyNjYWxsW10gPSBwcmludDsJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKLV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQgZXZlbnRfIyNjYWxsID0gewkJCVwKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc18jI3RlbXBsYXRlLAkJXAogCS5ldmVudC5mdW5jcwkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfZnVuY3NfIyNjYWxsLAlcCiAJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfIyNjYWxsLAkJCVwKLX0KK307CQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsCiAKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3JlZC5jIGIva2VybmVsL2NyZWQuYwppbmRleCA2YTFhYTAwLi4zYTlkNmRkIDEwMDY0NAotLS0gYS9rZXJuZWwvY3JlZC5jCisrKyBiL2tlcm5lbC9jcmVkLmMKQEAgLTI1MiwxMyArMjUyLDEzIEBACiAjZW5kaWYKIAogCWF0b21pY19zZXQoJm5ldy0+dXNhZ2UsIDEpOworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCW5ldy0+bWFnaWMgPSBDUkVEX01BR0lDOworI2VuZGlmCiAKIAlpZiAoc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuayhuZXcsIEdGUF9LRVJORUwpIDwgMCkKIAkJZ290byBlcnJvcjsKIAotI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUwotCW5ldy0+bWFnaWMgPSBDUkVEX01BR0lDOwotI2VuZGlmCiAJcmV0dXJuIG5ldzsKIAogZXJyb3I6CkBAIC02NTcsNiArNjU3LDggQEAKIAl2YWxpZGF0ZV9jcmVkcyhvbGQpOwogCiAJKm5ldyA9ICpvbGQ7CisJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisJc2V0X2NyZWRfc3Vic2NyaWJlcnMobmV3LCAwKTsKIAlnZXRfdWlkKG5ldy0+dXNlcik7CiAJZ2V0X2dyb3VwX2luZm8obmV3LT5ncm91cF9pbmZvKTsKIApAQCAtNjc0LDggKzY3Niw2IEBACiAJaWYgKHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMobmV3LCBvbGQsIEdGUF9LRVJORUwpIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCWF0b21pY19zZXQoJm5ldy0+dXNhZ2UsIDEpOwotCXNldF9jcmVkX3N1YnNjcmliZXJzKG5ldywgMCk7CiAJcHV0X2NyZWQob2xkKTsKIAl2YWxpZGF0ZV9jcmVkcyhuZXcpOwogCXJldHVybiBuZXc7CkBAIC03NDgsNyArNzQ4LDExIEBACiAJaWYgKGNyZWQtPm1hZ2ljICE9IENSRURfTUFHSUMpCiAJCXJldHVybiB0cnVlOwogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYCi0JaWYgKHNlbGludXhfaXNfZW5hYmxlZCgpKSB7CisJLyoKKwkgKiBjcmVkLT5zZWN1cml0eSA9PSBOVUxMIGlmIHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsoKSBvcgorCSAqIHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMoKSByZXR1cm5lZCBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2VsaW51eF9pc19lbmFibGVkKCkgJiYgY3JlZC0+c2VjdXJpdHkpIHsKIAkJaWYgKCh1bnNpZ25lZCBsb25nKSBjcmVkLT5zZWN1cml0eSA8IFBBR0VfU0laRSkKIAkJCXJldHVybiB0cnVlOwogCQlpZiAoKCoodTMyICopY3JlZC0+c2VjdXJpdHkgJiAweGZmZmZmZjAwKSA9PQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9taWdyYXRpb24uYyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKaW5kZXggMWQyNTQxOS4uNDQxZmQ2MiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9taWdyYXRpb24uYworKysgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCkBAIC01Niw2ICs1Niw3IEBACiB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJYm9vbCBtYXNrZWQ7CiAKIAlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpKQogCQlyZXR1cm47CkBAIC02Myw4ICs2NCwxNSBAQAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKQogCQlyZXR1cm47CiAKLQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOworCS8qCisJICogQmUgY2FyZWZ1bCB2cy4gYWxyZWFkeSBtYXNrZWQgaW50ZXJydXB0cy4gSWYgdGhpcyBpcyBhCisJICogdGhyZWFkZWQgaW50ZXJydXB0IHdpdGggT05FU0hPVCBzZXQsIHdlIGNhbiBlbmQgdXAgd2l0aCBhbgorCSAqIGludGVycnVwdCBzdG9ybS4KKwkgKi8KKwltYXNrZWQgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTUFTS0VEOworCWlmICghbWFza2VkKQorCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOwogCW1vdmVfbWFza2VkX2lycShpcnEpOwotCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKKwlpZiAoIW1hc2tlZCkKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzaygmZGVzYy0+aXJxX2RhdGEpOwogfQotCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMzRlMDBiNy4uZWZhMjkwZSAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjQ2MCw5ICsyNDYwLDkgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0JbW9kLT50cmFjZXBvaW50cyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX190cmFjZXBvaW50cyIsCi0JCQkJCXNpemVvZigqbW9kLT50cmFjZXBvaW50cyksCi0JCQkJCSZtb2QtPm51bV90cmFjZXBvaW50cyk7CisJbW9kLT50cmFjZXBvaW50c19wdHJzID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX3RyYWNlcG9pbnRzX3B0cnMiLAorCQkJCQkgICAgIHNpemVvZigqbW9kLT50cmFjZXBvaW50c19wdHJzKSwKKwkJCQkJICAgICAmbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAJbW9kLT5qdW1wX2VudHJpZXMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fanVtcF90YWJsZSIsCkBAIC0zMzkzLDcgKzMzOTMsNyBAQAogCQkgICBzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvICp2ZXIsCiAJCSAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwLAogCQkgICBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3MsCi0JCSAgIHN0cnVjdCB0cmFjZXBvaW50ICp0cCkKKwkJICAgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHApCiB7CiB9CiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9sYXlvdXQpOwpAQCAtMzQwNyw4ICszNDA3LDggQEAKIAltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKIAkJaWYgKCFtb2QtPnRhaW50cykKLQkJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHMsCi0JCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKwkJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCQltb2QtPnRyYWNlcG9pbnRzX3B0cnMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogfQogCkBAIC0zNDMyLDggKzM0MzIsOCBAQAogCQkJZWxzZSBpZiAoaXRlcl9tb2QgPiBpdGVyLT5tb2R1bGUpCiAJCQkJaXRlci0+dHJhY2Vwb2ludCA9IE5VTEw7CiAJCQlmb3VuZCA9IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2UoJml0ZXItPnRyYWNlcG9pbnQsCi0JCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzLAotCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50cworCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50c19wdHJzLAorCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50c19wdHJzCiAJCQkJCSsgaXRlcl9tb2QtPm51bV90cmFjZXBvaW50cyk7CiAJCQlpZiAoZm91bmQpIHsKIAkJCQlpdGVyLT5tb2R1bGUgPSBpdGVyX21vZDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCAwODEwN2QxLi4wZGExNDExIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC03MTksOSArNzE5LDcgQEAKIAkJCXBhcmFtc1tpXS5vcHMtPmZyZWUocGFyYW1zW2ldLmFyZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAotCQkJCQkgIHVuc2lnbmVkIGludCBuYW1lX3NraXApCitzdGF0aWMgc3RydWN0IG1vZHVsZV9rb2JqZWN0ICogX19pbml0IGxvY2F0ZV9tb2R1bGVfa29iamVjdChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CiAJc3RydWN0IGtvYmplY3QgKmtvYmo7CkBAIC03MjksMTAgKzcyNyw3IEBACiAKIAlrb2JqID0ga3NldF9maW5kX29iaihtb2R1bGVfa3NldCwgbmFtZSk7CiAJaWYgKGtvYmopIHsKLQkJLyogV2UgYWxyZWFkeSBoYXZlIG9uZS4gIFJlbW92ZSBwYXJhbXMgc28gd2UgY2FuIGFkZCBtb3JlLiAqLwogCQltayA9IHRvX21vZHVsZV9rb2JqZWN0KGtvYmopOwotCQkvKiBXZSBuZWVkIHRvIHJlbW92ZSBpdCBiZWZvcmUgYWRkaW5nIHBhcmFtZXRlcnMuICovCi0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWstPmtvYmosICZtay0+bXAtPmdycCk7CiAJfSBlbHNlIHsKIAkJbWsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9kdWxlX2tvYmplY3QpLCBHRlBfS0VSTkVMKTsKIAkJQlVHX09OKCFtayk7CkBAIC03NDMsMTUgKzczOCwzNiBAQAogCQkJCQkgICAiJXMiLCBuYW1lKTsKIAkJaWYgKGVycikgewogCQkJa29iamVjdF9wdXQoJm1rLT5rb2JqKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiTW9kdWxlICclcycgZmFpbGVkIGFkZCB0byBzeXNmcywgIgotCQkJICAgICAgICJlcnJvciBudW1iZXIgJWRcbiIsIG5hbWUsIGVycik7Ci0JCQlwcmludGsoS0VSTl9FUlIJIlRoZSBzeXN0ZW0gd2lsbCBiZSB1bnN0YWJsZSBub3cuXG4iKTsKLQkJCXJldHVybjsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJNb2R1bGUgJyVzJyBmYWlsZWQgYWRkIHRvIHN5c2ZzLCBlcnJvciBudW1iZXIgJWRcbiIsCisJCQkJbmFtZSwgZXJyKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJUaGUgc3lzdGVtIHdpbGwgYmUgdW5zdGFibGUgbm93LlxuIik7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQkvKiBTbyB0aGF0IGV4aXQgcGF0aCBpcyBldmVuLiAqLworCisJCS8qIFNvIHRoYXQgd2UgaG9sZCByZWZlcmVuY2UgaW4gYm90aCBjYXNlcy4gKi8KIAkJa29iamVjdF9nZXQoJm1rLT5rb2JqKTsKIAl9CiAKKwlyZXR1cm4gbWs7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAorCQkJCQkgIHVuc2lnbmVkIGludCBuYW1lX3NraXApCit7CisJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKKwlpbnQgZXJyOworCisJbWsgPSBsb2NhdGVfbW9kdWxlX2tvYmplY3QobmFtZSk7CisJaWYgKCFtaykKKwkJcmV0dXJuOworCisJLyogV2UgbmVlZCB0byByZW1vdmUgb2xkIHBhcmFtZXRlcnMgYmVmb3JlIGFkZGluZyBtb3JlLiAqLworCWlmIChtay0+bXApCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWstPmtvYmosICZtay0+bXAtPmdycCk7CisKIAkvKiBUaGVzZSBzaG91bGQgbm90IGZhaWwgYXQgYm9vdC4gKi8KIAllcnIgPSBhZGRfc3lzZnNfcGFyYW0obWssIGtwYXJhbSwga3BhcmFtLT5uYW1lICsgbmFtZV9za2lwKTsKIAlCVUdfT04oZXJyKTsKQEAgLTc5Niw2ICs4MTIsMzIgQEAKIAl9CiB9CiAKK3NzaXplX3QgX19tb2R2ZXJfdmVyc2lvbl9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwKKwkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKnZhdHRyID0KKwkJY29udGFpbmVyX29mKG1hdHRyLCBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlLCBtYXR0cik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdmF0dHItPnZlcnNpb24pOworfQorCitleHRlcm4gc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX3N0YXJ0X19fbW9kdmVyW10sIF9fc3RvcF9fX21vZHZlcltdOworCitzdGF0aWMgdm9pZCBfX2luaXQgdmVyc2lvbl9zeXNmc19idWlsdGluKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSAqdmF0dHI7CisJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKKwlpbnQgZXJyOworCisJZm9yICh2YXR0ciA9IF9fc3RhcnRfX19tb2R2ZXI7IHZhdHRyIDwgX19zdG9wX19fbW9kdmVyOyB2YXR0cisrKSB7CisJCW1rID0gbG9jYXRlX21vZHVsZV9rb2JqZWN0KHZhdHRyLT5tb2R1bGVfbmFtZSk7CisJCWlmIChtaykgeworCQkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJm1rLT5rb2JqLCAmdmF0dHItPm1hdHRyLmF0dHIpOworCQkJa29iamVjdF91ZXZlbnQoJm1rLT5rb2JqLCBLT0JKX0FERCk7CisJCQlrb2JqZWN0X3B1dCgmbWstPmtvYmopOworCQl9CisJfQorfQogCiAvKiBtb2R1bGUtcmVsYXRlZCBzeXNmcyBzdHVmZiAqLwogCkBAIC04NzUsNiArOTE3LDcgQEAKIAl9CiAJbW9kdWxlX3N5c2ZzX2luaXRpYWxpemVkID0gMTsKIAorCXZlcnNpb25fc3lzZnNfYnVpbHRpbigpOwogCXBhcmFtX3N5c2ZzX2J1aWx0aW4oKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggODQ1MjJjNy4uOTk5ODM1YiAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xOTAxLDExICsxOTAxLDEyIEBACiAJCXJldHVybjsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCWlmIChjdHgtPmlzX2FjdGl2ZSkKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotCi0JZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IHBlcmZfZXZlbnRfY291bnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtMTk5OSw4ICsyMDAwLDcgQEAKIAkgKiBhY2Nlc3NlZCBmcm9tIE5NSS4gVXNlIGEgdGVtcG9yYXJ5IG1hbnVhbCBwZXIgY3B1IGFsbG9jYXRpb24KIAkgKiB1bnRpbCB0aGF0IGdldHMgc29ydGVkIG91dC4KIAkgKi8KLQlzaXplID0gc2l6ZW9mKCplbnRyaWVzKSArIHNpemVvZihzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKikgKgotCQludW1fcG9zc2libGVfY3B1cygpOworCXNpemUgPSBvZmZzZXRvZihzdHJ1Y3QgY2FsbGNoYWluX2NwdXNfZW50cmllcywgY3B1X2VudHJpZXNbbnJfY3B1X2lkc10pOwogCiAJZW50cmllcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyaWVzKQpAQCAtMjIwMSwxMyArMjIwMSw2IEBACiAJaWYgKCF0YXNrKQogCQlyZXR1cm4gRVJSX1BUUigtRVNSQ0gpOwogCi0JLyoKLQkgKiBDYW4ndCBhdHRhY2ggZXZlbnRzIHRvIGEgZHlpbmcgdGFzay4KLQkgKi8KLQllcnIgPSAtRVNSQ0g7Ci0JaWYgKHRhc2stPmZsYWdzICYgUEZfRVhJVElORykKLQkJZ290byBlcnJvdXQ7Ci0KIAkvKiBSZXVzZSBwdHJhY2UgcGVybWlzc2lvbiBjaGVja3MgZm9yIG5vdy4gKi8KIAllcnIgPSAtRUFDQ0VTOwogCWlmICghcHRyYWNlX21heV9hY2Nlc3ModGFzaywgUFRSQUNFX01PREVfUkVBRCkpCkBAIC0yMjY4LDE0ICsyMjYxLDI3IEBACiAKIAkJZ2V0X2N0eChjdHgpOwogCi0JCWlmIChjbXB4Y2hnKCZ0YXNrLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0sIE5VTEwsIGN0eCkpIHsKLQkJCS8qCi0JCQkgKiBXZSByYWNlZCB3aXRoIHNvbWUgb3RoZXIgdGFzazsgdXNlCi0JCQkgKiB0aGUgY29udGV4dCB0aGV5IHNldC4KLQkJCSAqLworCQllcnIgPSAwOworCQltdXRleF9sb2NrKCZ0YXNrLT5wZXJmX2V2ZW50X211dGV4KTsKKwkJLyoKKwkJICogSWYgaXQgaGFzIGFscmVhZHkgcGFzc2VkIHBlcmZfZXZlbnRfZXhpdF90YXNrKCkuCisJCSAqIHdlIG11c3Qgc2VlIFBGX0VYSVRJTkcsIGl0IHRha2VzIHRoaXMgbXV0ZXggdG9vLgorCQkgKi8KKwkJaWYgKHRhc2stPmZsYWdzICYgUEZfRVhJVElORykKKwkJCWVyciA9IC1FU1JDSDsKKwkJZWxzZSBpZiAodGFzay0+cGVyZl9ldmVudF9jdHhwW2N0eG5dKQorCQkJZXJyID0gLUVBR0FJTjsKKwkJZWxzZQorCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHRhc2stPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSwgY3R4KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0YXNrLT5wZXJmX2V2ZW50X211dGV4KTsKKworCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCQkJa2ZyZWUoY3R4KTsKLQkJCWdvdG8gcmV0cnk7CisKKwkJCWlmIChlcnIgPT0gLUVBR0FJTikKKwkJCQlnb3RvIHJldHJ5OworCQkJZ290byBlcnJvdXQ7CiAJCX0KIAl9CiAKQEAgLTUzNzQsNiArNTM4MCw4IEBACiAJZ290byBvdXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgY3B1Y3R4X211dGV4OworCiBpbnQgcGVyZl9wbXVfcmVnaXN0ZXIoc3RydWN0IHBtdSAqcG11LCBjaGFyICpuYW1lLCBpbnQgdHlwZSkKIHsKIAlpbnQgY3B1LCByZXQ7CkBAIC01NDIyLDYgKzU0MzAsNyBAQAogCiAJCWNwdWN0eCA9IHBlcl9jcHVfcHRyKHBtdS0+cG11X2NwdV9jb250ZXh0LCBjcHUpOwogCQlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KCZjcHVjdHgtPmN0eCk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZjcHVjdHgtPmN0eC5tdXRleCwgJmNwdWN0eF9tdXRleCk7CiAJCWNwdWN0eC0+Y3R4LnR5cGUgPSBjcHVfY29udGV4dDsKIAkJY3B1Y3R4LT5jdHgucG11ID0gcG11OwogCQljcHVjdHgtPmppZmZpZXNfaW50ZXJ2YWwgPSAxOwpAQCAtNjEyNyw3ICs2MTM2LDcgQEAKIAkgKiBzY2hlZHVsZWQsIHNvIHdlIGFyZSBub3cgc2FmZSBmcm9tIHJlc2NoZWR1bGluZyBjaGFuZ2luZwogCSAqIG91ciBjb250ZXh0LgogCSAqLwotCWNoaWxkX2N0eCA9IGNoaWxkLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl07CisJY2hpbGRfY3R4ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dKTsKIAl0YXNrX2N0eF9zY2hlZF9vdXQoY2hpbGRfY3R4LCBFVkVOVF9BTEwpOwogCiAJLyoKQEAgLTY0NDAsMTEgKzY0NDksNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQljaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dID0gTlVMTDsKLQotCW11dGV4X2luaXQoJmNoaWxkLT5wZXJmX2V2ZW50X211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPnBlcmZfZXZlbnRfbGlzdCk7Ci0KIAlpZiAobGlrZWx5KCFwYXJlbnQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSkpCiAJCXJldHVybiAwOwogCkBAIC02NTMzLDYgKzY1MzcsMTAgQEAKIHsKIAlpbnQgY3R4biwgcmV0OwogCisJbWVtc2V0KGNoaWxkLT5wZXJmX2V2ZW50X2N0eHAsIDAsIHNpemVvZihjaGlsZC0+cGVyZl9ldmVudF9jdHhwKSk7CisJbXV0ZXhfaW5pdCgmY2hpbGQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+cGVyZl9ldmVudF9saXN0KTsKKwogCWZvcl9lYWNoX3Rhc2tfY29udGV4dF9ucihjdHhuKSB7CiAJCXJldCA9IHBlcmZfZXZlbnRfaW5pdF9jb250ZXh0KGNoaWxkLCBjdHhuKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCA1M2Q5YTllLi4yZGRiZGM3IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC05Nyw3ICs5Nyw3IEBACiAvKgogICogbG9nYnVmX2xvY2sgcHJvdGVjdHMgbG9nX2J1ZiwgbG9nX3N0YXJ0LCBsb2dfZW5kLCBjb25fc3RhcnQgYW5kIGxvZ2dlZF9jaGFycwogICogSXQgaXMgYWxzbyB1c2VkIGluIGludGVyZXN0aW5nIHdheXMgdG8gcHJvdmlkZSBpbnRlcmxvY2tpbmcgaW4KLSAqIHJlbGVhc2VfY29uc29sZV9zZW0oKS4KKyAqIGNvbnNvbGVfdW5sb2NrKCk7LgogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvZ2J1Zl9sb2NrKTsKIApAQCAtNTAxLDcgKzUwMSw3IEBACiAvKgogICogQ2FsbCB0aGUgY29uc29sZSBkcml2ZXJzLCBhc2tpbmcgdGhlbSB0byB3cml0ZSBvdXQKICAqIGxvZ19idWZbc3RhcnRdIHRvIGxvZ19idWZbZW5kIC0gMV0uCi0gKiBUaGUgY29uc29sZV9zZW0gbXVzdCBiZSBoZWxkLgorICogVGhlIGNvbnNvbGVfbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIGNhbGxfY29uc29sZV9kcml2ZXJzKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCiB7CkBAIC02MDQsMTEgKzYwNCwxMSBAQAogICoKICAqIFRoaXMgaXMgcHJpbnRrKCkuICBJdCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuICBXZSB3YW50IGl0IHRvIHdvcmsuCiAgKgotICogV2UgdHJ5IHRvIGdyYWIgdGhlIGNvbnNvbGVfc2VtLiAgSWYgd2Ugc3VjY2VlZCwgaXQncyBlYXN5IC0gd2UgbG9nIHRoZSBvdXRwdXQgYW5kCisgKiBXZSB0cnkgdG8gZ3JhYiB0aGUgY29uc29sZV9sb2NrLiAgSWYgd2Ugc3VjY2VlZCwgaXQncyBlYXN5IC0gd2UgbG9nIHRoZSBvdXRwdXQgYW5kCiAgKiBjYWxsIHRoZSBjb25zb2xlIGRyaXZlcnMuICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgc2VtYXBob3JlIHdlIHBsYWNlIHRoZSBvdXRwdXQKICAqIGludG8gdGhlIGxvZyBidWZmZXIgYW5kIHJldHVybi4gIFRoZSBjdXJyZW50IGhvbGRlciBvZiB0aGUgY29uc29sZV9zZW0gd2lsbAotICogbm90aWNlIHRoZSBuZXcgb3V0cHV0IGluIHJlbGVhc2VfY29uc29sZV9zZW0oKSBhbmQgd2lsbCBzZW5kIGl0IHRvIHRoZQotICogY29uc29sZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VtYXBob3JlLgorICogbm90aWNlIHRoZSBuZXcgb3V0cHV0IGluIGNvbnNvbGVfdW5sb2NrKCk7IGFuZCB3aWxsIHNlbmQgaXQgdG8gdGhlCisgKiBjb25zb2xlcyBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrLgogICoKICAqIE9uZSBlZmZlY3Qgb2YgdGhpcyBkZWZlcnJlZCBwcmludGluZyBpcyB0aGF0IGNvZGUgd2hpY2ggY2FsbHMgcHJpbnRrKCkgYW5kCiAgKiB0aGVuIGNoYW5nZXMgY29uc29sZV9sb2dsZXZlbCBtYXkgYnJlYWsuIFRoaXMgaXMgYmVjYXVzZSBjb25zb2xlX2xvZ2xldmVsCkBAIC02NTksMTkgKzY1OSwxOSBAQAogLyoKICAqIFRyeSB0byBnZXQgY29uc29sZSBvd25lcnNoaXAgdG8gYWN0dWFsbHkgc2hvdyB0aGUga2VybmVsCiAgKiBtZXNzYWdlcyBmcm9tIGEgJ3ByaW50aycuIFJldHVybiB0cnVlIChhbmQgd2l0aCB0aGUKLSAqIGNvbnNvbGVfc2VtYXBob3JlIGhlbGQsIGFuZCAnY29uc29sZV9sb2NrZWQnIHNldCkgaWYgaXQKKyAqIGNvbnNvbGVfbG9jayBoZWxkLCBhbmQgJ2NvbnNvbGVfbG9ja2VkJyBzZXQpIGlmIGl0CiAgKiBpcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UuCiAgKgogICogVGhpcyBnZXRzIGNhbGxlZCB3aXRoIHRoZSAnbG9nYnVmX2xvY2snIHNwaW5sb2NrIGhlbGQgYW5kCiAgKiBpbnRlcnJ1cHRzIGRpc2FibGVkLiBJdCBzaG91bGQgcmV0dXJuIHdpdGggJ2xvY2tidWZfbG9jaycKICAqIHJlbGVhc2VkIGJ1dCBpbnRlcnJ1cHRzIHN0aWxsIGRpc2FibGVkLgogICovCi1zdGF0aWMgaW50IGFjcXVpcmVfY29uc29sZV9zZW1hcGhvcmVfZm9yX3ByaW50ayh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGludCBjb25zb2xlX3RyeWxvY2tfZm9yX3ByaW50ayh1bnNpZ25lZCBpbnQgY3B1KQogCV9fcmVsZWFzZXMoJmxvZ2J1Zl9sb2NrKQogewogCWludCByZXR2YWwgPSAwOwogCi0JaWYgKCF0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKSB7CisJaWYgKGNvbnNvbGVfdHJ5bG9jaygpKSB7CiAJCXJldHZhbCA9IDE7CiAKIAkJLyoKQEAgLTgyNywxMiArODI3LDEyIEBACiAJICogYWN0dWFsIG1hZ2ljIChwcmludCBvdXQgYnVmZmVycywgd2FrZSB1cCBrbG9nZCwKIAkgKiBldGMpLiAKIAkgKgotCSAqIFRoZSBhY3F1aXJlX2NvbnNvbGVfc2VtYXBob3JlX2Zvcl9wcmludGsoKSBmdW5jdGlvbgorCSAqIFRoZSBjb25zb2xlX3RyeWxvY2tfZm9yX3ByaW50aygpIGZ1bmN0aW9uCiAJICogd2lsbCByZWxlYXNlICdsb2didWZfbG9jaycgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0CiAJICogYWN0dWFsbHkgZ2V0cyB0aGUgc2VtYXBob3JlIG9yIG5vdC4KIAkgKi8KLQlpZiAoYWNxdWlyZV9jb25zb2xlX3NlbWFwaG9yZV9mb3JfcHJpbnRrKHRoaXNfY3B1KSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWlmIChjb25zb2xlX3RyeWxvY2tfZm9yX3ByaW50ayh0aGlzX2NwdSkpCisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlsb2NrZGVwX29uKCk7CiBvdXRfcmVzdG9yZV9pcnFzOgpAQCAtOTkzLDcgKzk5Myw3IEBACiAJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCkKIAkJcmV0dXJuOwogCXByaW50aygiU3VzcGVuZGluZyBjb25zb2xlKHMpICh1c2Ugbm9fY29uc29sZV9zdXNwZW5kIHRvIGRlYnVnKVxuIik7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbnNvbGVfc3VzcGVuZGVkID0gMTsKIAl1cCgmY29uc29sZV9zZW0pOwogfQpAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAkJcmV0dXJuOwogCWRvd24oJmNvbnNvbGVfc2VtKTsKIAljb25zb2xlX3N1c3BlbmRlZCA9IDA7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtMTAyNywyMSArMTAyNywyMSBAQAogCWNhc2UgQ1BVX0RZSU5HOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIC8qKgotICogYWNxdWlyZV9jb25zb2xlX3NlbSAtIGxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtIGZvciBleGNsdXNpdmUgdXNlLgorICogY29uc29sZV9sb2NrIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCiAgKgotICogQWNxdWlyZXMgYSBzZW1hcGhvcmUgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCisgKiBBY3F1aXJlcyBhIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCiAgKiBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHN5c3RlbSBhbmQgdGhlIGNvbnNvbGVfZHJpdmVycyBsaXN0LgogICoKICAqIENhbiBzbGVlcCwgcmV0dXJucyBub3RoaW5nLgogICovCi12b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCkKK3ZvaWQgY29uc29sZV9sb2NrKHZvaWQpCiB7CiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlkb3duKCZjb25zb2xlX3NlbSk7CkBAIC0xMDUwLDIxICsxMDUwLDI5IEBACiAJY29uc29sZV9sb2NrZWQgPSAxOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMTsKIH0KLUVYUE9SVF9TWU1CT0woYWNxdWlyZV9jb25zb2xlX3NlbSk7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfbG9jayk7CiAKLWludCB0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKQorLyoqCisgKiBjb25zb2xlX3RyeWxvY2sgLSB0cnkgdG8gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCisgKgorICogVHJpZWQgdG8gYWNxdWlyZSBhIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCisgKiBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHN5c3RlbSBhbmQgdGhlIGNvbnNvbGVfZHJpdmVycyBsaXN0LgorICoKKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBhbmQgMCBvbiBmYWlsdXJlIHRvIGFjcXVpcmUgdGhlIGxvY2suCisgKi8KK2ludCBjb25zb2xlX3RyeWxvY2sodm9pZCkKIHsKIAlpZiAoZG93bl90cnlsb2NrKCZjb25zb2xlX3NlbSkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CiAJaWYgKGNvbnNvbGVfc3VzcGVuZGVkKSB7CiAJCXVwKCZjb25zb2xlX3NlbSk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CiAJfQogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDA7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV90cnlsb2NrKTsKIAogaW50IGlzX2NvbnNvbGVfbG9ja2VkKHZvaWQpCiB7CkBAIC0xMDk1LDIwICsxMTAzLDIwIEBACiB9CiAKIC8qKgotICogcmVsZWFzZV9jb25zb2xlX3NlbSAtIHVubG9jayB0aGUgY29uc29sZSBzeXN0ZW0KKyAqIGNvbnNvbGVfdW5sb2NrIC0gdW5sb2NrIHRoZSBjb25zb2xlIHN5c3RlbQogICoKLSAqIFJlbGVhc2VzIHRoZSBzZW1hcGhvcmUgd2hpY2ggdGhlIGNhbGxlciBob2xkcyBvbiB0aGUgY29uc29sZSBzeXN0ZW0KKyAqIFJlbGVhc2VzIHRoZSBjb25zb2xlX2xvY2sgd2hpY2ggdGhlIGNhbGxlciBob2xkcyBvbiB0aGUgY29uc29sZSBzeXN0ZW0KICAqIGFuZCB0aGUgY29uc29sZSBkcml2ZXIgbGlzdC4KICAqCi0gKiBXaGlsZSB0aGUgc2VtYXBob3JlIHdhcyBoZWxkLCBjb25zb2xlIG91dHB1dCBtYXkgaGF2ZSBiZWVuIGJ1ZmZlcmVkCi0gKiBieSBwcmludGsoKS4gIElmIHRoaXMgaXMgdGhlIGNhc2UsIHJlbGVhc2VfY29uc29sZV9zZW0oKSBlbWl0cwotICogdGhlIG91dHB1dCBwcmlvciB0byByZWxlYXNpbmcgdGhlIHNlbWFwaG9yZS4KKyAqIFdoaWxlIHRoZSBjb25zb2xlX2xvY2sgd2FzIGhlbGQsIGNvbnNvbGUgb3V0cHV0IG1heSBoYXZlIGJlZW4gYnVmZmVyZWQKKyAqIGJ5IHByaW50aygpLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgY29uc29sZV91bmxvY2soKTsgZW1pdHMKKyAqIHRoZSBvdXRwdXQgcHJpb3IgdG8gcmVsZWFzaW5nIHRoZSBsb2NrLgogICoKICAqIElmIHRoZXJlIGlzIG91dHB1dCB3YWl0aW5nIGZvciBrbG9nZCwgd2Ugd2FrZSBpdCB1cC4KICAqCi0gKiByZWxlYXNlX2NvbnNvbGVfc2VtKCkgbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LgorICogY29uc29sZV91bmxvY2soKTsgbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LgogICovCi12b2lkIHJlbGVhc2VfY29uc29sZV9zZW0odm9pZCkKK3ZvaWQgY29uc29sZV91bmxvY2sodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIF9jb25fc3RhcnQsIF9sb2dfZW5kOwpAQCAtMTE0MSw3ICsxMTQ5LDcgQEAKIAlpZiAod2FrZV9rbG9nZCkKIAkJd2FrZV91cF9rbG9nZCgpOwogfQotRVhQT1JUX1NZTUJPTChyZWxlYXNlX2NvbnNvbGVfc2VtKTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV91bmxvY2spOwogCiAvKioKICAqIGNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUgLSB5aWVsZCB0aGUgQ1BVIGlmIHJlcXVpcmVkCkBAIC0xMTUwLDcgKzExNTgsNyBAQAogICogaWYgdGhpcyBDUFUgc2hvdWxkIHlpZWxkIHRoZSBDUFUgdG8gYW5vdGhlciB0YXNrLCBkbwogICogc28gaGVyZS4KICAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYWNxdWlyZV9jb25zb2xlX3NlbSgpLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGNvbnNvbGVfbG9jaygpOy4KICAqLwogdm9pZCBfX3NjaGVkIGNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUodm9pZCkKIHsKQEAgLTExNzEsMTQgKzExNzksMTQgQEAKIAkJaWYgKGRvd25fdHJ5bG9jaygmY29uc29sZV9zZW0pICE9IDApCiAJCQlyZXR1cm47CiAJfSBlbHNlCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAwOwogCWZvcl9lYWNoX2NvbnNvbGUoYykKIAkJaWYgKChjLT5mbGFncyAmIENPTl9FTkFCTEVEKSAmJiBjLT51bmJsYW5rKQogCQkJYy0+dW5ibGFuaygpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogCiAvKgpAQCAtMTE4OSw3ICsxMTk3LDcgQEAKIAlzdHJ1Y3QgY29uc29sZSAqYzsKIAlzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyID0gTlVMTDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmb3JfZWFjaF9jb25zb2xlKGMpIHsKIAkJaWYgKCFjLT5kZXZpY2UpCiAJCQljb250aW51ZTsKQEAgLTExOTcsNyArMTIwNSw3IEBACiAJCWlmIChkcml2ZXIpCiAJCQlicmVhazsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGRyaXZlcjsKIH0KIApAQCAtMTIwOCwxNyArMTIxNiwxNyBAQAogICovCiB2b2lkIGNvbnNvbGVfc3RvcChzdHJ1Y3QgY29uc29sZSAqY29uc29sZSkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9FTkFCTEVEOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChjb25zb2xlX3N0b3ApOwogCiB2b2lkIGNvbnNvbGVfc3RhcnQoc3RydWN0IGNvbnNvbGUgKmNvbnNvbGUpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbnNvbGUtPmZsYWdzIHw9IENPTl9FTkFCTEVEOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChjb25zb2xlX3N0YXJ0KTsKIApAQCAtMTM0MCw3ICsxMzQ4LDcgQEAKIAkgKglQdXQgdGhpcyBjb25zb2xlIGluIHRoZSBsaXN0IC0ga2VlcCB0aGUKIAkgKglwcmVmZXJyZWQgZHJpdmVyIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LgogCSAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAoKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fQ09OU0RFVikgfHwgY29uc29sZV9kcml2ZXJzID09IE5VTEwpIHsKIAkJbmV3Y29uLT5uZXh0ID0gY29uc29sZV9kcml2ZXJzOwogCQljb25zb2xlX2RyaXZlcnMgPSBuZXdjb247CkBAIC0xMzUyLDE0ICsxMzYwLDE0IEBACiAJfQogCWlmIChuZXdjb24tPmZsYWdzICYgQ09OX1BSSU5UQlVGRkVSKSB7CiAJCS8qCi0JCSAqIHJlbGVhc2VfY29uc29sZV9zZW0oKSB3aWxsIHByaW50IG91dCB0aGUgYnVmZmVyZWQgbWVzc2FnZXMKKwkJICogY29uc29sZV91bmxvY2soKTsgd2lsbCBwcmludCBvdXQgdGhlIGJ1ZmZlcmVkIG1lc3NhZ2VzCiAJCSAqIGZvciB1cy4KIAkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCQljb25fc3RhcnQgPSBsb2dfc3RhcnQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWNvbnNvbGVfc3lzZnNfbm90aWZ5KCk7CiAKIAkvKgpAQCAtMTM5Niw3ICsxNDA0LDcgQEAKIAkJcmV0dXJuIGJyYWlsbGVfdW5yZWdpc3Rlcl9jb25zb2xlKGNvbnNvbGUpOwogI2VuZGlmCiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKGNvbnNvbGVfZHJpdmVycyA9PSBjb25zb2xlKSB7CiAJCWNvbnNvbGVfZHJpdmVycz1jb25zb2xlLT5uZXh0OwogCQlyZXMgPSAwOwpAQCAtMTQxOCw3ICsxNDI2LDcgQEAKIAlpZiAoY29uc29sZV9kcml2ZXJzICE9IE5VTEwgJiYgY29uc29sZS0+ZmxhZ3MgJiBDT05fQ09OU0RFVikKIAkJY29uc29sZV9kcml2ZXJzLT5mbGFncyB8PSBDT05fQ09OU0RFVjsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWNvbnNvbGVfc3lzZnNfbm90aWZ5KCk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDc3ZTkxNjYuLjBjMjZlMmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNjk5LDcgKzY5OSw4IEBACiAJY2ZzX3JxLT5ucl9ydW5uaW5nLS07CiB9CiAKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgJiYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisjIGlmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jZnNfcnFfbG9hZF9jb250cmlidXRpb24oc3RydWN0IGNmc19ycSAqY2ZzX3JxLAogCQkJCQkgICAgaW50IGdsb2JhbF91cGRhdGUpCiB7CkBAIC03MjEsMTAgKzcyMiwxMCBAQAogCXU2NCBub3csIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQ7CiAKLQlpZiAoIWNmc19ycSkKKwlpZiAoY2ZzX3JxLT50ZyA9PSAmcm9vdF90YXNrX2dyb3VwKQogCQlyZXR1cm47CiAKLQlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9jazsKKwlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9ja190YXNrOwogCWRlbHRhID0gbm93IC0gY2ZzX3JxLT5sb2FkX3N0YW1wOwogCiAJLyogdHJ1bmNhdGUgbG9hZCBoaXN0b3J5IGF0IDQgaWRsZSBwZXJpb2RzICovCkBAIC03NjIsNiArNzYzLDUxIEBACiAJCWxpc3RfZGVsX2xlYWZfY2ZzX3JxKGNmc19ycSk7CiB9CiAKK3N0YXRpYyBsb25nIGNhbGNfY2ZzX3NoYXJlcyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZywKKwkJCQlsb25nIHdlaWdodF9kZWx0YSkKK3sKKwlsb25nIGxvYWRfd2VpZ2h0LCBsb2FkLCBzaGFyZXM7CisKKwlsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodCArIHdlaWdodF9kZWx0YTsKKworCWxvYWRfd2VpZ2h0ID0gYXRvbWljX3JlYWQoJnRnLT5sb2FkX3dlaWdodCk7CisJbG9hZF93ZWlnaHQgLT0gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbjsKKwlsb2FkX3dlaWdodCArPSBsb2FkOworCisJc2hhcmVzID0gKHRnLT5zaGFyZXMgKiBsb2FkKTsKKwlpZiAobG9hZF93ZWlnaHQpCisJCXNoYXJlcyAvPSBsb2FkX3dlaWdodDsKKworCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQorCQlzaGFyZXMgPSBNSU5fU0hBUkVTOworCWlmIChzaGFyZXMgPiB0Zy0+c2hhcmVzKQorCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOworCisJcmV0dXJuIHNoYXJlczsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2VudGl0eV9zaGFyZXNfdGljayhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCit7CisJaWYgKGNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgPiBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdykgeworCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKKwkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKKwl9Cit9CisjIGVsc2UgLyogQ09ORklHX1NNUCAqLworc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19sb2FkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGdsb2JhbF91cGRhdGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjYWxjX2Nmc19zaGFyZXMoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3QgdGFza19ncm91cCAqdGcsCisJCQkJbG9uZyB3ZWlnaHRfZGVsdGEpCit7CisJcmV0dXJuIHRnLT5zaGFyZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKK30KKyMgZW5kaWYgLyogQ09ORklHX1NNUCAqLwogc3RhdGljIHZvaWQgcmV3ZWlnaHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsCiAJCQkgICAgdW5zaWduZWQgbG9uZyB3ZWlnaHQpCiB7CkBAIC03ODIsNDEgKzgyOCwyMCBAQAogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZTsKLQlsb25nIGxvYWRfd2VpZ2h0LCBsb2FkLCBzaGFyZXM7Ci0KLQlpZiAoIWNmc19ycSkKLQkJcmV0dXJuOworCWxvbmcgc2hhcmVzOwogCiAJdGcgPSBjZnNfcnEtPnRnOwogCXNlID0gdGctPnNlW2NwdV9vZihycV9vZihjZnNfcnEpKV07CiAJaWYgKCFzZSkKIAkJcmV0dXJuOwotCi0JbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQgKyB3ZWlnaHRfZGVsdGE7Ci0KLQlsb2FkX3dlaWdodCA9IGF0b21pY19yZWFkKCZ0Zy0+bG9hZF93ZWlnaHQpOwotCWxvYWRfd2VpZ2h0IC09IGNmc19ycS0+bG9hZF9jb250cmlidXRpb247Ci0JbG9hZF93ZWlnaHQgKz0gbG9hZDsKLQotCXNoYXJlcyA9ICh0Zy0+c2hhcmVzICogbG9hZCk7Ci0JaWYgKGxvYWRfd2VpZ2h0KQotCQlzaGFyZXMgLz0gbG9hZF93ZWlnaHQ7Ci0KLQlpZiAoc2hhcmVzIDwgTUlOX1NIQVJFUykKLQkJc2hhcmVzID0gTUlOX1NIQVJFUzsKLQlpZiAoc2hhcmVzID4gdGctPnNoYXJlcykKLQkJc2hhcmVzID0gdGctPnNoYXJlczsKKyNpZm5kZWYgQ09ORklHX1NNUAorCWlmIChsaWtlbHkoc2UtPmxvYWQud2VpZ2h0ID09IHRnLT5zaGFyZXMpKQorCQlyZXR1cm47CisjZW5kaWYKKwlzaGFyZXMgPSBjYWxjX2Nmc19zaGFyZXMoY2ZzX3JxLCB0Zywgd2VpZ2h0X2RlbHRhKTsKIAogCXJld2VpZ2h0X2VudGl0eShjZnNfcnFfb2Yoc2UpLCBzZSwgc2hhcmVzKTsKIH0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2VudGl0eV9zaGFyZXNfdGljayhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCi17Ci0JaWYgKGNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgPiBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdykgewotCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKLQkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKLQl9Ci19CiAjZWxzZSAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19sb2FkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGdsb2JhbF91cGRhdGUpCiB7CkBAIC0xNDA0LDcgKzE0MjksNyBAQAogCiBzdGF0aWMgaW50IHdha2VfYWZmaW5lKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzeW5jKQogewotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkLCBsb2FkOworCXM2NCB0aGlzX2xvYWQsIGxvYWQ7CiAJaW50IGlkeCwgdGhpc19jcHUsIHByZXZfY3B1OwogCXVuc2lnbmVkIGxvbmcgdGxfcGVyX3Rhc2s7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwpAQCAtMTQ0Myw4ICsxNDY4LDggQEAKIAkgKiBPdGhlcndpc2UgY2hlY2sgaWYgZWl0aGVyIGNwdXMgYXJlIG5lYXIgZW5vdWdoIGluIGxvYWQgdG8gYWxsb3cgdGhpcwogCSAqIHRhc2sgdG8gYmUgd29rZW4gb24gdGhpc19jcHUuCiAJICovCi0JaWYgKHRoaXNfbG9hZCkgewotCQl1bnNpZ25lZCBsb25nIHRoaXNfZWZmX2xvYWQsIHByZXZfZWZmX2xvYWQ7CisJaWYgKHRoaXNfbG9hZCA+IDApIHsKKwkJczY0IHRoaXNfZWZmX2xvYWQsIHByZXZfZWZmX2xvYWQ7CiAKIAkJdGhpc19lZmZfbG9hZCA9IDEwMDsKIAkJdGhpc19lZmZfbG9hZCAqPSBwb3dlcl9vZihwcmV2X2NwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGM5MTRlYzcuLmFkNjI2NzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC02MjUsNyArNjI1LDcgQEAKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gcnRfcnFfb2Zfc2UocnRfc2UpOwogCXU2NCBkZWx0YV9leGVjOwogCi0JaWYgKCF0YXNrX2hhc19ydF9wb2xpY3koY3VycikpCisJaWYgKGN1cnItPnNjaGVkX2NsYXNzICE9ICZydF9zY2hlZF9jbGFzcykKIAkJcmV0dXJuOwogCiAJZGVsdGFfZXhlYyA9IHJxLT5jbG9ja190YXNrIC0gY3Vyci0+c2UuZXhlY19zdGFydDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAzMWI3MWEyLi4xOGRhNzAyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xMzg1LDcgKzEzODUsOCBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCksICp0Y3JlZDsKIAogCXRjcmVkID0gX190YXNrX2NyZWQodGFzayk7Ci0JaWYgKChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKKwlpZiAoY3VycmVudCAhPSB0YXNrICYmCisJICAgIChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKIAkgICAgIGNyZWQtPnVpZCAhPSB0Y3JlZC0+c3VpZCB8fAogCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT51aWQgIHx8CiAJICAgICBjcmVkLT5naWQgIT0gdGNyZWQtPmVnaWQgfHwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBiYzg2YmIzLi4wZjFiZDgzIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xNzAsNyArMTcwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi1zdGF0aWMgaW50IF9fc3lzcnFfZW5hYmxlZDsgLyogTm90ZTogc3lzcnEgY29kZSBpc2VzIGl0J3Mgb3duIHByaXZhdGUgY29weSAqLworLyogTm90ZTogc3lzcnEgY29kZSB1c2VzIGl0J3Mgb3duIHByaXZhdGUgY29weSAqLworc3RhdGljIGludCBfX3N5c3JxX2VuYWJsZWQgPSBTWVNSUV9ERUZBVUxUX0VOQUJMRTsKIAogc3RhdGljIGludCBzeXNycV9zeXNjdGxfaGFuZGxlcihjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IDNlMjE2ZTAuLmM1NWVhMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTY0Miw4ICs2NDIsNyBAQAogCX0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoKQEAgLTc5NSw4ICs3OTQsMTAgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAodGlja19ub2h6X2VuYWJsZWQpCisJaWYgKHRpY2tfbm9oel9lbmFibGVkKSB7CiAJCXRzLT5ub2h6X21vZGUgPSBOT0haX01PREVfSElHSFJFUzsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gTk9IeiBtb2RlIG9uIENQVSAjJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQogI2VuZGlmCiB9CiAjZW5kaWYgLyogSElHSF9SRVNfVElNRVJTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDQzY2E5OTMuLmQ1M2NlNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC05NjksMTAgKzk2OSwxNCBAQAogaW50IGRlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIHsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlsb2NrX21hcF9hY3F1aXJlKCZ0aW1lci0+bG9ja2RlcF9tYXApOwogCWxvY2tfbWFwX3JlbGVhc2UoJnRpbWVyLT5sb2NrZGVwX21hcCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJX2xvY2FsX2JoX2VuYWJsZSgpOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAjZW5kaWYKIAkvKgogCSAqIGRvbid0IHVzZSBpdCBpbiBoYXJkaXJxIGNvbnRleHQsIGJlY2F1c2UgaXQKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAzNWZkZTA5Li41ZjQ5OWUwNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIHN0YXRpYyB2b2lkIHRyYWNlX21vZHVsZV9hZGRfZXZlbnRzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyAqZmlsZV9vcHMgPSBOVUxMOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgKnN0YXJ0LCAqZW5kOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKmNhbGwsICoqc3RhcnQsICoqZW5kOwogCiAJc3RhcnQgPSBtb2QtPnRyYWNlX2V2ZW50czsKIAllbmQgPSBtb2QtPnRyYWNlX2V2ZW50cyArIG1vZC0+bnVtX3RyYWNlX2V2ZW50czsKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCXJldHVybjsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIHN0YXJ0LCBlbmQpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBtb2QsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIG1vZCwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5pZCwgJmZpbGVfb3BzLT5lbmFibGUsCiAJCQkJICAgICAgICZmaWxlX29wcy0+ZmlsdGVyLCAmZmlsZV9vcHMtPmZvcm1hdCk7CiAJfQpAQCAtMTM2Nyw4ICsxMzY3LDggQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0YXJ0X2Z0cmFjZV9ldmVudHNbXTsKLWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKl9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKIAogc3RhdGljIGNoYXIgYm9vdHVwX2V2ZW50X2J1ZltDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKIApAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfaW5pdCh2b2lkKQogewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKipjYWxsOwogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCXN0cnVjdCBkZW50cnkgKmVudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOwpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAkJcHJfd2FybmluZygidHJhY2luZzogRmFpbGVkIHRvIGFsbG9jYXRlIGNvbW1vbiBmaWVsZHMiKTsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIF9fc3RhcnRfZnRyYWNlX2V2ZW50cywgX19zdG9wX2Z0cmFjZV9ldmVudHMpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIE5VTEwsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9lbmFibGVfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggNGI3NGQ3MS4uYmJlZWMzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTYxLDEzICsxNjEsMTMgQEAKIAkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLmZpZWxkcyksXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmV2ZW50LnR5cGUJCT0gZXR5cGUsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLAkJXAogCS5wcmludF9mbXQJCT0gcHJpbnQsCQkJCVwKIH07CQkJCQkJCQkJXAorc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsOwogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCBiNzA2NTI5Li41YzlmZTA4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtNTUsMjAgKzU1LDIxIEBACiAJLnJhd19pbml0CT0gaW5pdF9zeXNjYWxsX3RyYWNlLAogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKl9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOwogCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKK3N0YXRpYyBfX2luaXQgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKgorZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyBzeXNjYWxsKQogewotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdGFydDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RvcDsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN0YXJ0OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3RvcDsKIAljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwogCiAKLQlzdGFydCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7Ci0Jc3RvcCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKKwlzdGFydCA9IF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7CisJc3RvcCA9IF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKIAlrYWxsc3ltc19sb29rdXAoc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIAogCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7CkBAIC03OCw4ICs3OSw4IEBACiAJCSAqIHdpdGggIlN5UyIgaW5zdGVhZCBvZiAic3lzIiwgbGVhZGluZyB0byBhbiB1bndhbnRlZAogCQkgKiBtaXNtYXRjaC4KIAkJICovCi0JCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lICsgMywgc3RyICsgMykpCi0JCQlyZXR1cm4gc3RhcnQ7CisJCWlmICgoKnN0YXJ0KS0+bmFtZSAmJiAhc3RyY21wKCgqc3RhcnQpLT5uYW1lICsgMywgc3RyICsgMykpCisJCQlyZXR1cm4gKnN0YXJ0OwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IGU5NWVlN2YuLjY4MTg3YWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCi1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdGFydF9fX3RyYWNlcG9pbnRzW107Ci1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdG9wX19fdHJhY2Vwb2ludHNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzW107CitleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCBfX3N0b3BfX190cmFjZXBvaW50c19wdHJzW107CiAKIC8qIFNldCB0byAxIHRvIGVuYWJsZSB0cmFjZXBvaW50IGRlYnVnIG91dHB1dCAqLwogc3RhdGljIGNvbnN0IGludCB0cmFjZXBvaW50X2RlYnVnOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAKICAqCiAgKiBVcGRhdGVzIHRoZSBwcm9iZSBjYWxsYmFjayBjb3JyZXNwb25kaW5nIHRvIGEgcmFuZ2Ugb2YgdHJhY2Vwb2ludHMuCiAgKi8KLXZvaWQKLXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJCQkJICAgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogewotCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKml0ZXI7CiAJc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKm1hcmtfZW50cnk7CiAKIAlpZiAoIWJlZ2luKQpAQCAtMzA5LDEyICszMDksMTIgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKIAlmb3IgKGl0ZXIgPSBiZWdpbjsgaXRlciA8IGVuZDsgaXRlcisrKSB7Ci0JCW1hcmtfZW50cnkgPSBnZXRfdHJhY2Vwb2ludChpdGVyLT5uYW1lKTsKKwkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KCgqaXRlciktPm5hbWUpOwogCQlpZiAobWFya19lbnRyeSkgewotCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksIGl0ZXIsCisJCQlzZXRfdHJhY2Vwb2ludCgmbWFya19lbnRyeSwgKml0ZXIsCiAJCQkJCSEhbWFya19lbnRyeS0+cmVmY291bnQpOwogCQl9IGVsc2UgewotCQkJZGlzYWJsZV90cmFjZXBvaW50KGl0ZXIpOworCQkJZGlzYWJsZV90cmFjZXBvaW50KCppdGVyKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKQEAgLTMyNiw4ICszMjYsOCBAQAogc3RhdGljIHZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVzKHZvaWQpCiB7CiAJLyogQ29yZSBrZXJuZWwgdHJhY2Vwb2ludHMgKi8KLQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHMsCi0JCV9fc3RvcF9fX3RyYWNlcG9pbnRzKTsKKwl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycywKKwkJX19zdG9wX19fdHJhY2Vwb2ludHNfcHRycyk7CiAJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KIAltb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKCk7CiB9CkBAIC01MTQsOCArNTE0LDggQEAKICAqIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCB0cmFjZXBvaW50IGluIHRoZSByYW5nZSBpZiB0aGUgaW5wdXQgdHJhY2Vwb2ludCBpcwogICogTlVMTC4KICAqLwotaW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKip0cmFjZXBvaW50LAotCXN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK2ludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpCiB7CiAJaWYgKCEqdHJhY2Vwb2ludCAmJiBiZWdpbiAhPSBlbmQpIHsKIAkJKnRyYWNlcG9pbnQgPSBiZWdpbjsKQEAgLTUzNCw3ICs1MzQsOCBAQAogCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCiAJaWYgKCFpdGVyLT5tb2R1bGUpIHsKIAkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCV9fc3RhcnRfX190cmFjZXBvaW50cywgX19zdG9wX19fdHJhY2Vwb2ludHMpOworCQkJCV9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzLAorCQkJCV9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpOwogCQlpZiAoZm91bmQpCiAJCQlnb3RvIGVuZDsKIAl9CkBAIC01ODUsOCArNTg2LDggQEAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKIAljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKLQkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50cywKLQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCW1vZC0+dHJhY2Vwb2ludHNfcHRycyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCBkN2ViZGY0Li4xOGJiMTU3IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAotaW50IHdhdGNoZG9nX2VuYWJsZWQ7CitpbnQgd2F0Y2hkb2dfZW5hYmxlZCA9IDE7CiBpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgd2F0Y2hkb2dfdG91Y2hfdHMpOwpAQCAtNDMsOSArNDMsNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICosIHdhdGNoZG9nX2V2KTsKICNlbmRpZgogCi1zdGF0aWMgaW50IG5vX3dhdGNoZG9nOwotCi0KIC8qIGJvb3QgY29tbWFuZHMgKi8KIC8qCiAgKiBTaG91bGQgd2UgcGFuaWMgd2hlbiBhIHNvZnQtbG9ja3VwIG9yIGhhcmQtbG9ja3VwIG9jY3VyczoKQEAgLTU4LDcgKzU1LDcgQEAKIAlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkKIAkJaGFyZGxvY2t1cF9wYW5pYyA9IDE7CiAJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiMCIsIDEpKQotCQlub193YXRjaGRvZyA9IDE7CisJCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm1pX3dhdGNoZG9nPSIsIGhhcmRsb2NrdXBfcGFuaWNfc2V0dXApOwpAQCAtNzcsNyArNzQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBub3dhdGNoZG9nX3NldHVwKGNoYXIgKnN0cikKIHsKLQlub193YXRjaGRvZyA9IDE7CisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3dhdGNoZG9nIiwgbm93YXRjaGRvZ19zZXR1cCk7CkBAIC04NSw3ICs4Miw3IEBACiAvKiBkZXByZWNhdGVkICovCiBzdGF0aWMgaW50IF9faW5pdCBub3NvZnRsb2NrdXBfc2V0dXAoY2hhciAqc3RyKQogewotCW5vX3dhdGNoZG9nID0gMTsKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7CkBAIC0zNjYsOCArMzYzLDE0IEBACiAJCWdvdG8gb3V0X3NhdmU7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJOTUkgd2F0Y2hkb2cgZGlzYWJsZWQgZm9yIGNwdSVpOiB1bmFibGUgdG8gY3JlYXRlIHBlcmYgZXZlbnQ6ICVsZFxuIiwKLQkgICAgICAgY3B1LCBQVFJfRVJSKGV2ZW50KSk7CisKKwkvKiB2YXJ5IHRoZSBLRVJOIGxldmVsIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJubyAqLworCWlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRU9QTk9UU1VQUCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IG5vdCBzdXBwb3J0ZWQgKG5vIExBUElDPylcbiIsIGNwdSk7CisJZWxzZSBpZiAoUFRSX0VSUihldmVudCkgPT0gLUVOT0VOVCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IGhhcmR3YXJlIGV2ZW50cyBub3QgZW5hYmxlZFxuIiwgY3B1KTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IHVuYWJsZSB0byBjcmVhdGUgcGVyZiBldmVudDogJWxkXG4iLCBjcHUsIFBUUl9FUlIoZXZlbnQpKTsKIAlyZXR1cm4gUFRSX0VSUihldmVudCk7CiAKIAkvKiBzdWNjZXNzIHBhdGggKi8KQEAgLTQzMiw5ICs0MzUsNiBAQAogCQl3YWtlX3VwX3Byb2Nlc3MocCk7CiAJfQogCi0JLyogaWYgYW55IGNwdSBzdWNjZWVkcywgd2F0Y2hkb2cgaXMgY29uc2lkZXJlZCBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCi0Jd2F0Y2hkb2dfZW5hYmxlZCA9IDE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYyLDEyICs0NjIsMTYgQEAKIHN0YXRpYyB2b2lkIHdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cyh2b2lkKQogewogCWludCBjcHU7Ci0JaW50IHJlc3VsdCA9IDA7CisKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlyZXN1bHQgKz0gd2F0Y2hkb2dfZW5hYmxlKGNwdSk7CisJCWlmICghd2F0Y2hkb2dfZW5hYmxlKGNwdSkpCisJCQkvKiBpZiBhbnkgY3B1IHN1Y2NlZWRzLCB3YXRjaGRvZyBpcyBjb25zaWRlcmVkCisJCQkgICBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCisJCQl3YXRjaGRvZ19lbmFibGVkID0gMTsKIAotCWlmIChyZXN1bHQpCisJaWYgKCF3YXRjaGRvZ19lbmFibGVkKQogCQlwcmludGsoS0VSTl9FUlIgIndhdGNoZG9nOiBmYWlsZWQgdG8gYmUgZW5hYmxlZCBvbiBzb21lIGNwdXNcbiIpOwogCiB9CkBAIC00NzYsOSArNDgwLDYgQEAKIHsKIAlpbnQgY3B1OwogCi0JaWYgKG5vX3dhdGNoZG9nKQotCQlyZXR1cm47Ci0KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJd2F0Y2hkb2dfZGlzYWJsZShjcHUpOwogCkBAIC00OTgsMTAgKzQ5OSwxMiBAQAogewogCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CiAKLQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKLQkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7Ci0JZWxzZQotCQl3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKCk7CisJaWYgKHdyaXRlKSB7CisJCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7CisJCWVsc2UKKwkJCXdhdGNoZG9nX2Rpc2FibGVfYWxsX2NwdXMoKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzMCw3ICs1MzMsOCBAQAogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJZXJyID0gd2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSk7CisJCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQkJZXJyID0gd2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSk7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgpAQCAtNTU1LDkgKzU1OSw2IEBACiAJdm9pZCAqY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVycjsKIAotCWlmIChub193YXRjaGRvZykKLQkJcmV0dXJuOwotCiAJZXJyID0gY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfVVBfUFJFUEFSRSwgY3B1KTsKIAlXQVJOX09OKG5vdGlmaWVyX3RvX2Vycm5vKGVycikpOwogCmRpZmYgLS1naXQgYS9saWIvcmFkaXgtdHJlZS5jIGIvbGliL3JhZGl4LXRyZWUuYwppbmRleCA1MDg2YmI5Li43ZWEyZTAzIDEwMDY0NAotLS0gYS9saWIvcmFkaXgtdHJlZS5jCisrKyBiL2xpYi9yYWRpeC10cmVlLmMKQEAgLTczNiwxMCArNzM2LDExIEBACiAJCX0KIAl9CiAJLyoKLQkgKiBUaGUgaWZ0YWcgbXVzdCBoYXZlIGJlZW4gc2V0IHNvbWV3aGVyZSBiZWNhdXNlIG90aGVyd2lzZQotCSAqIHdlIHdvdWxkIHJldHVybiBpbW1lZGlhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uCisJICogV2UgbmVlZCBub3QgdG8gdGFnIHRoZSByb290IHRhZyBpZiB0aGVyZSBpcyBubyB0YWcgd2hpY2ggaXMgc2V0IHdpdGgKKwkgKiBzZXR0YWcgd2l0aGluIHRoZSByYW5nZSBmcm9tICpmaXJzdF9pbmRleHAgdG8gbGFzdF9pbmRleC4KIAkgKi8KLQlyb290X3RhZ19zZXQocm9vdCwgc2V0dGFnKTsKKwlpZiAodGFnZ2VkID4gMCkKKwkJcm9vdF90YWdfc2V0KHJvb3QsIHNldHRhZyk7CiAJKmZpcnN0X2luZGV4cCA9IGluZGV4OwogCiAJcmV0dXJuIHRhZ2dlZDsKZGlmZiAtLWdpdCBhL2xpYi9yYnRyZWUuYyBiL2xpYi9yYnRyZWUuYwppbmRleCA0NjkzZjc5Li5hMTZiZTE5IDEwMDY0NAotLS0gYS9saWIvcmJ0cmVlLmMKKysrIGIvbGliL3JidHJlZS5jCkBAIC0zMTUsNiArMzE1LDcgQEAKIAogCXJiX2F1Z21lbnRfcGF0aChub2RlLCBmdW5jLCBkYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0wocmJfYXVnbWVudF9pbnNlcnQpOwogCiAvKgogICogYmVmb3JlIHJlbW92aW5nIHRoZSBub2RlLCBmaW5kIHRoZSBkZWVwZXN0IG5vZGUgb24gdGhlIHJlYmFsYW5jZSBwYXRoCkBAIC0zNDAsNiArMzQxLDcgQEAKIAogCXJldHVybiBkZWVwZXN0OwogfQorRVhQT1JUX1NZTUJPTChyYl9hdWdtZW50X2VyYXNlX2JlZ2luKTsKIAogLyoKICAqIGFmdGVyIHJlbW92YWwsIHVwZGF0ZSB0aGUgdHJlZSB0byBhY2NvdW50IGZvciB0aGUgcmVtb3ZlZCBlbnRyeQpAQCAtMzUwLDYgKzM1Miw3IEBACiAJaWYgKG5vZGUpCiAJCXJiX2F1Z21lbnRfcGF0aChub2RlLCBmdW5jLCBkYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0wocmJfYXVnbWVudF9lcmFzZV9lbmQpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBub2RlIChpbiBzb3J0IG9yZGVyKSBvZiB0aGUgdHJlZS4KZGlmZiAtLWdpdCBhL2xpYi90ZXh0c2VhcmNoLmMgYi9saWIvdGV4dHNlYXJjaC5jCmluZGV4IGQ2MDgzMzEuLmUwY2MwMTQgMTAwNjQ0Ci0tLSBhL2xpYi90ZXh0c2VhcmNoLmMKKysrIGIvbGliL3RleHRzZWFyY2guYwpAQCAtMTMsNyArMTMsNyBAQAogICoKICAqIElOVFJPRFVDVElPTgogICoKLSAqICAgVGhlIHRleHRzZWFyY2ggaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZXMgdGV4dCBzZWFyY2hpbmcgZmFjaXRpbGllcyBmb3IKKyAqICAgVGhlIHRleHRzZWFyY2ggaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZXMgdGV4dCBzZWFyY2hpbmcgZmFjaWxpdGllcyBmb3IKICAqICAgYm90aCBsaW5lYXIgYW5kIG5vbi1saW5lYXIgZGF0YS4gSW5kaXZpZHVhbCBzZWFyY2ggYWxnb3JpdGhtcyBhcmUKICAqICAgaW1wbGVtZW50ZWQgaW4gbW9kdWxlcyBhbmQgY2hvc2VuIGJ5IHRoZSB1c2VyLgogICoKQEAgLTQzLDcgKzQzLDcgQEAKICAqICAgICAgIHRvIHRoZSBhbGdvcml0aG0gdG8gc3RvcmUgcGVyc2lzdGVudCB2YXJpYWJsZXMuCiAgKiAgICg0KSBDb3JlIGV2ZW50dWFsbHkgcmVzZXRzIHRoZSBzZWFyY2ggb2Zmc2V0IGFuZCBmb3J3YXJkcyB0aGUgZmluZCgpCiAgKiAgICAgICByZXF1ZXN0IHRvIHRoZSBhbGdvcml0aG0uCi0gKiAgICg1KSBBbGdvcml0aG0gY2FsbHMgZ2V0X25leHRfYmxvY2soKSBwcm92aWRlZCBieSB0aGUgdXNlciBjb250aW5vdXNseQorICogICAoNSkgQWxnb3JpdGhtIGNhbGxzIGdldF9uZXh0X2Jsb2NrKCkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY29udGludW91c2x5CiAgKiAgICAgICB0byBmZXRjaCB0aGUgZGF0YSB0byBiZSBzZWFyY2hlZCBpbiBibG9jayBieSBibG9jay4KICAqICAgKDYpIEFsZ29yaXRobSBpbnZva2VzIGZpbmlzaCgpIGFmdGVyIHRoZSBsYXN0IGNhbGwgdG8gZ2V0X25leHRfYmxvY2sKICAqICAgICAgIHRvIGNsZWFuIHVwIGFueSBsZWZ0b3ZlcnMgZnJvbSBnZXRfbmV4dF9ibG9jay4gKE9wdGlvbmFsKQpAQCAtNTgsMTUgKzU4LDE1IEBACiAgKiAgIHRoZSBwYXR0ZXJuIHRvIGxvb2sgZm9yIGFuZCBmbGFncy4gQXMgYSBmbGFnLCB5b3UgY2FuIHNldCBUU19JR05PUkVDQVNFCiAgKiAgIHRvIHBlcmZvcm0gY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZy4gQnV0IGl0IG1pZ2h0IHNsb3cgZG93bgogICogICBwZXJmb3JtYW5jZSBvZiBhbGdvcml0aG0sIHNvIHlvdSBzaG91bGQgdXNlIGl0IGF0IG93biB5b3VyIHJpc2suCi0gKiAgIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIG1heSB0aGVuIGJlIHVzZWQgZm9yIGFuIGFyYml0YXJ5CisgKiAgIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIG1heSB0aGVuIGJlIHVzZWQgZm9yIGFuIGFyYml0cmFyeQogICogICBhbW91bnQgb2YgdGltZXMgYW5kIGV2ZW4gaW4gcGFyYWxsZWwgYXMgbG9uZyBhcyBhIHNlcGFyYXRlIHN0cnVjdAogICogICB0c19zdGF0ZSB2YXJpYWJsZSBpcyBwcm92aWRlZCB0byBldmVyeSBpbnN0YW5jZS4KICAqCiAgKiAgIFRoZSBhY3R1YWwgc2VhcmNoIGlzIHBlcmZvcm1lZCBieSBlaXRoZXIgY2FsbGluZyB0ZXh0c2VhcmNoX2ZpbmRfLQogICogICBjb250aW51b3VzKCkgZm9yIGxpbmVhciBkYXRhIG9yIGJ5IHByb3ZpZGluZyBhbiBvd24gZ2V0X25leHRfYmxvY2soKQogICogICBpbXBsZW1lbnRhdGlvbiBhbmQgY2FsbGluZyB0ZXh0c2VhcmNoX2ZpbmQoKS4gQm90aCBmdW5jdGlvbnMgcmV0dXJuCi0gKiAgIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgcGF0ZXJuIG9yIFVJTlRfTUFYIGlmCi0gKiAgIG5vIG1hdGNoIHdhcyBmb3VuZC4gU3Vic2VxdWVudCBvY2N1cmVuY2VzIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nCisgKiAgIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgcGF0dGVybiBvciBVSU5UX01BWCBpZgorICogICBubyBtYXRjaCB3YXMgZm91bmQuIFN1YnNlcXVlbnQgb2NjdXJyZW5jZXMgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKICAqICAgdGV4dHNlYXJjaF9uZXh0KCkgcmVnYXJkbGVzcyBvZiB0aGUgbGluZWFyaXR5IG9mIHRoZSBkYXRhLgogICoKICAqICAgT25jZSB5b3UncmUgZG9uZSB1c2luZyBhIGNvbmZpZ3VyYXRpb24gaXQgbXVzdCBiZSBnaXZlbiBiYWNrIHZpYQpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggM2FkNDgzYi4uZTljMGM2MSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0xNzksNyArMTc5LDcgQEAKIGNvbmZpZyBDT01QQUNUSU9OCiAJYm9vbCAiQWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uIgogCXNlbGVjdCBNSUdSQVRJT04KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBIVUdFVExCX1BBR0UgJiYgTU1VCisJZGVwZW5kcyBvbiBNTVUKIAloZWxwCiAJICBBbGxvd3MgdGhlIGNvbXBhY3Rpb24gb2YgbWVtb3J5IGZvciB0aGUgYWxsb2NhdGlvbiBvZiBodWdlIHBhZ2VzLgogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCBlMTg3NDU0Li5iNmMxY2UzIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCisrKyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTExNjIsNyArMTE2MiwxMiBAQAogCQkvKiBhZnRlciBjbGVhcmluZyBQYWdlVGFpbCB0aGUgZ3VwIHJlZmNvdW50IGNhbiBiZSByZWxlYXNlZCAqLwogCQlzbXBfbWIoKTsKIAotCQlwYWdlX3RhaWwtPmZsYWdzICY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CisJCS8qCisJCSAqIHJldGFpbiBod3BvaXNvbiBmbGFnIG9mIHRoZSBwb2lzb25lZCB0YWlsIHBhZ2U6CisJCSAqICAgZml4IGZvciB0aGUgdW5zdWl0YWJsZSBwcm9jZXNzIGtpbGxlZCBvbiBHdWVzdCBNYWNoaW5lKEtWTSkKKwkJICogICBieSB0aGUgbWVtb3J5LWZhaWx1cmUuCisJCSAqLworCQlwYWdlX3RhaWwtPmZsYWdzICY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgfCBfX1BHX0hXUE9JU09OOwogCQlwYWdlX3RhaWwtPmZsYWdzIHw9IChwYWdlLT5mbGFncyAmCiAJCQkJICAgICAoKDFMIDw8IFBHX3JlZmVyZW5jZWQpIHwKIAkJCQkgICAgICAoMUwgPDwgUEdfc3dhcGJhY2tlZCkgfApkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWstdGVzdC5jIGIvbW0va21lbWxlYWstdGVzdC5jCmluZGV4IDE3N2E1MTYuLmZmMGQ5NzcgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLXRlc3QuYworKysgYi9tbS9rbWVtbGVhay10ZXN0LmMKQEAgLTc1LDEzICs3NSwxMSBAQAogCSAqIGFmdGVyIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQllbGVtID0ga21hbGxvYyhzaXplb2YoKmVsZW0pLCBHRlBfS0VSTkVMKTsKLQkJcHJfaW5mbygia21lbWxlYWs6IGttYWxsb2Moc2l6ZW9mKCplbGVtKSkgPSAlcFxuIiwgZWxlbSk7CisJCWVsZW0gPSBremFsbG9jKHNpemVvZigqZWxlbSksIEdGUF9LRVJORUwpOworCQlwcl9pbmZvKCJrbWVtbGVhazoga3phbGxvYyhzaXplb2YoKmVsZW0pKSA9ICVwXG4iLCBlbGVtKTsKIAkJaWYgKCFlbGVtKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbXNldChlbGVtLCAwLCBzaXplb2YoKmVsZW0pKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmVsZW0tPmxpc3QpOwotCiAJCWxpc3RfYWRkX3RhaWwoJmVsZW0tPmxpc3QsICZ0ZXN0X2xpc3QpOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggYmQ5YmMyMS4uODQyMjVmMyAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysgYi9tbS9rbWVtbGVhay5jCkBAIC0xMTMsNyArMTEzLDkgQEAKICNkZWZpbmUgQllURVNfUEVSX1BPSU5URVIJc2l6ZW9mKHZvaWQgKikKIAogLyogR0ZQIGJpdG1hc2sgZm9yIGttZW1sZWFrIGludGVybmFsIGFsbG9jYXRpb25zICovCi0jZGVmaW5lIEdGUF9LTUVNTEVBS19NQVNLCShHRlBfS0VSTkVMIHwgR0ZQX0FUT01JQykKKyNkZWZpbmUgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKQkoKChnZnApICYgKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDKSkgfCBcCisJCQkJIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DIHwgXAorCQkJCSBfX0dGUF9OT1dBUk4pCiAKIC8qIHNjYW5uaW5nIGFyZWEgaW5zaWRlIGEgbWVtb3J5IGJsb2NrICovCiBzdHJ1Y3Qga21lbWxlYWtfc2Nhbl9hcmVhIHsKQEAgLTUxMSw5ICs1MTMsMTAgQEAKIAlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiAJc3RydWN0IHByaW9fdHJlZV9ub2RlICpub2RlOwogCi0Jb2JqZWN0ID0ga21lbV9jYWNoZV9hbGxvYyhvYmplY3RfY2FjaGUsIGdmcCAmIEdGUF9LTUVNTEVBS19NQVNLKTsKKwlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKSk7CiAJaWYgKCFvYmplY3QpIHsKLQkJa21lbWxlYWtfc3RvcCgiQ2Fubm90IGFsbG9jYXRlIGEga21lbWxlYWtfb2JqZWN0IHN0cnVjdHVyZVxuIik7CisJCXByX3dhcm5pbmcoIkNhbm5vdCBhbGxvY2F0ZSBhIGttZW1sZWFrX29iamVjdCBzdHJ1Y3R1cmVcbiIpOworCQlrbWVtbGVha19kaXNhYmxlKCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzM0LDkgKzczNyw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlhcmVhID0ga21lbV9jYWNoZV9hbGxvYyhzY2FuX2FyZWFfY2FjaGUsIGdmcCAmIEdGUF9LTUVNTEVBS19NQVNLKTsKKwlhcmVhID0ga21lbV9jYWNoZV9hbGxvYyhzY2FuX2FyZWFfY2FjaGUsIGdmcF9rbWVtbGVha19tYXNrKGdmcCkpOwogCWlmICghYXJlYSkgewotCQlrbWVtbGVha193YXJuKCJDYW5ub3QgYWxsb2NhdGUgYSBzY2FuIGFyZWFcbiIpOworCQlwcl93YXJuaW5nKCJDYW5ub3QgYWxsb2NhdGUgYSBzY2FuIGFyZWFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBkYjc2ZWY3Li5kYTUzYTI1IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC02MTIsOCArNjEyLDEwIEBACiAJLyogcGFnZWluIG9mIGEgYmlnIHBhZ2UgaXMgYW4gZXZlbnQuIFNvLCBpZ25vcmUgcGFnZSBzaXplICovCiAJaWYgKG5yX3BhZ2VzID4gMCkKIAkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5UXSk7Ci0JZWxzZQorCWVsc2UgewogCQlfX3RoaXNfY3B1X2luYyhtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5UXSk7CisJCW5yX3BhZ2VzID0gLW5yX3BhZ2VzOyAvKiBmb3IgZXZlbnQgKi8KKwl9CiAKIAlfX3RoaXNfY3B1X2FkZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfRVZFTlRTXSwgbnJfcGFnZXMpOwogCkBAIC0xMTExLDYgKzExMTMsMjMgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qKgorICogbWVtX2Nncm91cF9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgbWVtb3J5IGNncm91cCBhbGxvd3MgY2hhcmdpbmcKKyAqIEBtZW06IG1lbW9yeSBjZ3JvdXAgdG8gY2hlY2sKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0aGUgY2FsbGVyIGludGVuZHMgdG8gY2hhcmdlCisgKgorICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgb24gd2hldGhlciBAbWVtIGNhbiBiZSBjaGFyZ2VkIEBieXRlcyBvcgorICogd2hldGhlciB0aGlzIHdvdWxkIGV4Y2VlZCB0aGUgbGltaXQuCisgKi8KK3N0YXRpYyBib29sIG1lbV9jZ3JvdXBfY2hlY2tfbWFyZ2luKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJaWYgKCFyZXNfY291bnRlcl9jaGVja19tYXJnaW4oJm1lbS0+cmVzLCBieXRlcykpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFyZXNfY291bnRlcl9jaGVja19tYXJnaW4oJm1lbS0+bWVtc3csIGJ5dGVzKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gbWVtY2ctPmNzcy5jZ3JvdXA7CkBAIC0xODMyLDI3ICsxODUxLDM5IEBACiAJCWlmIChsaWtlbHkoIXJldCkpCiAJCQlyZXR1cm4gQ0hBUkdFX09LOwogCisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgY3NpemUpOwogCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywgbWVtc3cpOwogCQlmbGFncyB8PSBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOwogCX0gZWxzZQogCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywgcmVzKTsKLQotCWlmIChjc2l6ZSA+IFBBR0VfU0laRSkgLyogY2hhbmdlIGNzaXplIGFuZCByZXRyeSAqLworCS8qCisJICogY3NpemUgY2FuIGJlIGVpdGhlciBhIGh1Z2UgcGFnZSAoSFBBR0VfU0laRSksIGEgYmF0Y2ggb2YKKwkgKiByZWd1bGFyIHBhZ2VzIChDSEFSR0VfU0laRSksIG9yIGEgc2luZ2xlIHJlZ3VsYXIgcGFnZQorCSAqIChQQUdFX1NJWkUpLgorCSAqCisJICogTmV2ZXIgcmVjbGFpbSBvbiBiZWhhbGYgb2Ygb3B0aW9uYWwgYmF0Y2hpbmcsIHJldHJ5IHdpdGggYQorCSAqIHNpbmdsZSBwYWdlIGluc3RlYWQuCisJICovCisJaWYgKGNzaXplID09IENIQVJHRV9TSVpFKQogCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKIAkJcmV0dXJuIENIQVJHRV9XT1VMREJMT0NLOwogCiAJcmV0ID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1fb3Zlcl9saW1pdCwgTlVMTCwKLQkJCQkJZ2ZwX21hc2ssIGZsYWdzKTsKKwkJCQkJICAgICAgZ2ZwX21hc2ssIGZsYWdzKTsKKwlpZiAobWVtX2Nncm91cF9jaGVja19tYXJnaW4obWVtX292ZXJfbGltaXQsIGNzaXplKSkKKwkJcmV0dXJuIENIQVJHRV9SRVRSWTsKIAkvKgotCSAqIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoKSBtaWdodCBub3QgZ2l2ZSB1cyBhIGZ1bGwKLQkgKiBwaWN0dXJlIG9mIHJlY2xhaW0uIFNvbWUgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgbWlnaHQgYmUKLQkgKiBtb3ZlZCB0byBzd2FwIGNhY2hlIG9yIGp1c3QgdW5tYXBwZWQgZnJvbSB0aGUgY2dyb3VwLgotCSAqIENoZWNrIHRoZSBsaW1pdCBhZ2FpbiB0byBzZWUgaWYgdGhlIHJlY2xhaW0gcmVkdWNlZCB0aGUKLQkgKiBjdXJyZW50IHVzYWdlIG9mIHRoZSBjZ3JvdXAgYmVmb3JlIGdpdmluZyB1cAorCSAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltCisJICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2UKKwkgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay4KKwkgKgorCSAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyCisJICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2sKKwkgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAJICovCi0JaWYgKHJldCB8fCBtZW1fY2dyb3VwX2NoZWNrX3VuZGVyX2xpbWl0KG1lbV9vdmVyX2xpbWl0KSkKKwlpZiAoY3NpemUgPT0gUEFHRV9TSVpFICYmIHJldCkKIAkJcmV0dXJuIENIQVJHRV9SRVRSWTsKIAogCS8qCkBAIC0yMTQ0LDYgKzIxNzUsOCBAQAogCXN0cnVjdCBwYWdlX2Nncm91cCAqdGFpbF9wYyA9IGxvb2t1cF9wYWdlX2Nncm91cCh0YWlsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKKwkJcmV0dXJuOwogCS8qCiAJICogV2UgaGF2ZSBubyByYWNlcyB3aXRoIGNoYXJnZS91bmNoYXJnZSBidXQgd2lsbCBoYXZlIHJhY2VzIHdpdGgKIAkgKiBwYWdlIHN0YXRlIGFjY291bnRpbmcuCkBAIC0yMjMzLDcgKzIyNjYsMTIgQEAKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisJLyoKKwkgKiBUaGUgcGFnZSBpcyBpc29sYXRlZCBmcm9tIExSVS4gU28sIGNvbGxhcHNlIGZ1bmN0aW9uCisJICogd2lsbCBub3QgaGFuZGxlIHRoaXMgcGFnZS4gQnV0IHBhZ2Ugc3BsaXR0aW5nIGNhbiBoYXBwZW4uCisJICogRG8gdGhpcyBjaGVjayB1bmRlciBjb21wb3VuZF9wYWdlX2xvY2soKS4gVGhlIGNhbGxlciBzaG91bGQKKwkgKiBob2xkIGl0LgorCSAqLwogCWlmICgoY2hhcmdlX3NpemUgPiBQQUdFX1NJWkUpICYmICFQYWdlVHJhbnNIdWdlKHBjLT5wYWdlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMjI2NSw3ICsyMzAzLDcgQEAKIAlzdHJ1Y3QgY2dyb3VwICpjZyA9IGNoaWxkLT5jc3MuY2dyb3VwOwogCXN0cnVjdCBjZ3JvdXAgKnBjZyA9IGNnLT5wYXJlbnQ7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudDsKLQlpbnQgY2hhcmdlID0gUEFHRV9TSVpFOworCWludCBwYWdlX3NpemUgPSBQQUdFX1NJWkU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCkBAIC0yMjc4LDIzICsyMzE2LDI2IEBACiAJCWdvdG8gb3V0OwogCWlmIChpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQogCQlnb3RvIHB1dDsKLQkvKiBUaGUgcGFnZSBpcyBpc29sYXRlZCBmcm9tIExSVSBhbmQgd2UgaGF2ZSBubyByYWNlIHdpdGggc3BsaXR0aW5nICovCi0JY2hhcmdlID0gUEFHRV9TSVpFIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpOworCisJaWYgKFBhZ2VUcmFuc0h1Z2UocGFnZSkpCisJCXBhZ2Vfc2l6ZSA9IEhQQUdFX1NJWkU7CiAKIAlwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY29udChwY2cpOwotCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKE5VTEwsIGdmcF9tYXNrLCAmcGFyZW50LCBmYWxzZSwgY2hhcmdlKTsKKwlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBnZnBfbWFzaywKKwkJCQkmcGFyZW50LCBmYWxzZSwgcGFnZV9zaXplKTsKIAlpZiAocmV0IHx8ICFwYXJlbnQpCiAJCWdvdG8gcHV0X2JhY2s7CiAKLQlpZiAoY2hhcmdlID4gUEFHRV9TSVpFKQorCWlmIChwYWdlX3NpemUgPiBQQUdFX1NJWkUpCiAJCWZsYWdzID0gY29tcG91bmRfbG9ja19pcnFzYXZlKHBhZ2UpOwogCi0JcmV0ID0gbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGMsIGNoaWxkLCBwYXJlbnQsIHRydWUsIGNoYXJnZSk7CisJcmV0ID0gbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGMsIGNoaWxkLCBwYXJlbnQsIHRydWUsIHBhZ2Vfc2l6ZSk7CiAJaWYgKHJldCkKLQkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHBhcmVudCwgY2hhcmdlKTsKLXB1dF9iYWNrOgotCWlmIChjaGFyZ2UgPiBQQUdFX1NJWkUpCisJCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShwYXJlbnQsIHBhZ2Vfc2l6ZSk7CisKKwlpZiAocGFnZV9zaXplID4gUEFHRV9TSVpFKQogCQljb21wb3VuZF91bmxvY2tfaXJxcmVzdG9yZShwYWdlLCBmbGFncyk7CitwdXRfYmFjazoKIAlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogcHV0OgogCXB1dF9wYWdlKHBhZ2UpOwpAQCAtMjMxMiwxMyArMjM1MywxOSBAQAogCQkJCWdmcF90IGdmcF9tYXNrLCBlbnVtIGNoYXJnZV90eXBlIGN0eXBlKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7Ci0JaW50IHJldDsKIAlpbnQgcGFnZV9zaXplID0gUEFHRV9TSVpFOworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisJYm9vbCBvb20gPSB0cnVlOworCWludCByZXQ7CiAKIAlpZiAoUGFnZVRyYW5zSHVnZShwYWdlKSkgewogCQlwYWdlX3NpemUgPDw9IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwogCQlWTV9CVUdfT04oIVBhZ2VUcmFuc0h1Z2UocGFnZSkpOworCQkvKgorCQkgKiBOZXZlciBPT00ta2lsbCBhIHByb2Nlc3MgZm9yIGEgaHVnZSBwYWdlLiAgVGhlCisJCSAqIGZhdWx0IGhhbmRsZXIgd2lsbCBmYWxsIGJhY2sgdG8gcmVndWxhciBwYWdlcy4KKwkJICovCisJCW9vbSA9IGZhbHNlOwogCX0KIAogCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwpAQCAtMjMyNyw3ICsyMzc0LDcgQEAKIAkJcmV0dXJuIDA7CiAJcHJlZmV0Y2h3KHBjKTsKIAotCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgJm1lbSwgdHJ1ZSwgcGFnZV9zaXplKTsKKwlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgZ2ZwX21hc2ssICZtZW0sIG9vbSwgcGFnZV9zaXplKTsKIAlpZiAocmV0IHx8ICFtZW0pCiAJCXJldHVybiByZXQ7CiAKQEAgLTUwMTMsOSArNTA2MCw5IEBACiBzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfc3dhcF9hY2NvdW50KGNoYXIgKnMpCiB7CiAJLyogY29uc2lkZXIgZW5hYmxlZCBpZiBubyBwYXJhbWV0ZXIgb3IgMSBpcyBnaXZlbiAqLwotCWlmICghcyB8fCAhc3RyY21wKHMsICIxIikpCisJaWYgKCEoKnMpIHx8ICFzdHJjbXAocywgIj0xIikpCiAJCXJlYWxseV9kb19zd2FwX2FjY291bnQgPSAxOwotCWVsc2UgaWYgKCFzdHJjbXAocywgIjAiKSkKKwllbHNlIGlmICghc3RyY21wKHMsICI9MCIpKQogCQlyZWFsbHlfZG9fc3dhcF9hY2NvdW50ID0gMDsKIAlyZXR1cm4gMTsKIH0KQEAgLTUwMjMsNyArNTA3MCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfc3dhcF9hY2NvdW50KGNoYXIgKnMpCiB7Ci0JZW5hYmxlX3N3YXBfYWNjb3VudCgiMCIpOworCXByaW50a19vbmNlKCJub3N3YXBhY2NvdW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuNDAuIFVzZSBzd2FwYWNjb3VudD0wIGluc3RlYWRcbiIpOworCWVuYWJsZV9zd2FwX2FjY291bnQoIj0wIik7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3N3YXBhY2NvdW50IiwgZGlzYWJsZV9zd2FwX2FjY291bnQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNTQ4ZmJkNy4uMDIwN2MyZiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0yMzMsOCArMjMzLDggQEAKIAl9CiAKIAkvKgotCSAqIE9ubHkgYWxsIHNocmlua19zbGFiIGhlcmUgKHdoaWNoIHdvdWxkIGFsc28KLQkgKiBzaHJpbmsgb3RoZXIgY2FjaGVzKSBpZiBhY2Nlc3MgaXMgbm90IHBvdGVudGlhbGx5IGZhdGFsLgorCSAqIE9ubHkgY2FsbCBzaHJpbmtfc2xhYiBoZXJlICh3aGljaCB3b3VsZCBhbHNvIHNocmluayBvdGhlciBjYWNoZXMpIGlmCisJICogYWNjZXNzIGlzIG5vdCBwb3RlbnRpYWxseSBmYXRhbC4KIAkgKi8KIAlpZiAoYWNjZXNzKSB7CiAJCWludCBucjsKQEAgLTM4Niw4ICszODYsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCXN0cnVjdCBhbm9uX3ZtYSAqYXY7CiAKLQlpZiAoIVBhZ2VIdWdlKHBhZ2UpICYmIHVubGlrZWx5KHNwbGl0X2h1Z2VfcGFnZShwYWdlKSkpCi0JCXJldHVybjsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWF2ID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwogCWlmIChhdiA9PSBOVUxMKQkvKiBOb3QgYWN0dWFsbHkgbWFwcGVkIGFueW1vcmUgKi8KQEAgLTg1Niw2ICs4NTQsNyBAQAogCWludCByZXQ7CiAJaW50IGtpbGwgPSAxOwogCXN0cnVjdCBwYWdlICpocGFnZSA9IGNvbXBvdW5kX2hlYWQocCk7CisJc3RydWN0IHBhZ2UgKnBwYWdlOwogCiAJaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlU2xhYihwKSkKIAkJcmV0dXJuIFNXQVBfU1VDQ0VTUzsKQEAgLTg5Nyw2ICs4OTYsNDQgQEAKIAl9CiAKIAkvKgorCSAqIHBwYWdlOiBwb2lzb25lZCBwYWdlCisJICogICBpZiBwIGlzIHJlZ3VsYXIgcGFnZSg0ayBwYWdlKQorCSAqICAgICAgICBwcGFnZSA9PSByZWFsIHBvaXNvbmVkIHBhZ2U7CisJICogICBlbHNlIHAgaXMgaHVnZXRsYiBvciBUSFAsIHBwYWdlID09IGhlYWQgcGFnZS4KKwkgKi8KKwlwcGFnZSA9IGhwYWdlOworCisJaWYgKFBhZ2VUcmFuc0h1Z2UoaHBhZ2UpKSB7CisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IHRoaXMgaXNuJ3QgYSBodWdldGxiZnMgaGVhZCBwYWdlLCB0aGUgY2hlY2sgZm9yCisJCSAqIFBhZ2VBbm9uIGlzIGp1c3QgZm9yIGF2b2lkIHRyaXBwaW5nIGEgc3BsaXRfaHVnZV9wYWdlCisJCSAqIGludGVybmFsIGRlYnVnIGNoZWNrLCBhcyBzcGxpdF9odWdlX3BhZ2UgcmVmdXNlcyB0byBkZWFsIHdpdGgKKwkJICogYW55dGhpbmcgdGhhdCBpc24ndCBhbiBhbm9uIHBhZ2UuIFBhZ2VBbm9uIGNhbid0IGdvIGF3YXkgZnJvCisJCSAqIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCBhIHJlZmNvdW50IG9uIHRoZSBocGFnZSwgd2l0aG91dCBhCisJCSAqIHJlZmNvdW50IG9uIHRoZSBocGFnZS4gc3BsaXRfaHVnZV9wYWdlIGNhbid0IGJlIHNhZmVseSBjYWxsZWQKKwkJICogaW4gdGhlIGZpcnN0IHBsYWNlLCBoYXZpbmcgYSByZWZjb3VudCBvbiB0aGUgdGFpbCBpc24ndAorCQkgKiBlbm91Z2ggKiB0byBiZSBzYWZlLgorCQkgKi8KKwkJaWYgKCFQYWdlSHVnZShocGFnZSkgJiYgUGFnZUFub24oaHBhZ2UpKSB7CisJCQlpZiAodW5saWtlbHkoc3BsaXRfaHVnZV9wYWdlKGhwYWdlKSkpIHsKKwkJCQkvKgorCQkJCSAqIEZJWE1FOiBpZiBzcGxpdHRpbmcgVEhQIGlzIGZhaWxlZCwgaXQgaXMKKwkJCQkgKiBiZXR0ZXIgdG8gc3RvcCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbiByYXRoZXIKKwkJCQkgKiB0aGFuIGNhdXNpbmcgcGFuaWMgYnkgdW5tYXBwaW5nLiBTeXN0ZW0gbWlnaHQKKwkJCQkgKiBzdXJ2aXZlIGlmIHRoZSBwYWdlIGlzIGZyZWVkIGxhdGVyLgorCQkJCSAqLworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJIk1DRSAlI2x4OiBmYWlsZWQgdG8gc3BsaXQgVEhQXG4iLCBwZm4pOworCisJCQkJQlVHX09OKCFQYWdlSFdQb2lzb24ocCkpOworCQkJCXJldHVybiBTV0FQX0ZBSUw7CisJCQl9CisJCQkvKiBUSFAgaXMgc3BsaXQsIHNvIHBwYWdlIHNob3VsZCBiZSB0aGUgcmVhbCBwb2lzb25lZCBwYWdlLiAqLworCQkJcHBhZ2UgPSBwOworCQl9CisJfQorCisJLyoKIAkgKiBGaXJzdCBjb2xsZWN0IGFsbCB0aGUgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgcGFnZQogCSAqIG1hcHBlZCBpbiBkaXJ0eSBmb3JtLiAgVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgdHJ5X3RvX3VubWFwLAogCSAqIGJlY2F1c2UgdHR1IHRha2VzIHRoZSBybWFwIGRhdGEgc3RydWN0dXJlcyBkb3duLgpAQCAtOTA1LDEyICs5NDIsMTggQEAKIAkgKiB0aGVyZSdzIG5vdGhpbmcgdGhhdCBjYW4gYmUgZG9uZS4KIAkgKi8KIAlpZiAoa2lsbCkKLQkJY29sbGVjdF9wcm9jcyhocGFnZSwgJnRva2lsbCk7CisJCWNvbGxlY3RfcHJvY3MocHBhZ2UsICZ0b2tpbGwpOwogCi0JcmV0ID0gdHJ5X3RvX3VubWFwKGhwYWdlLCB0dHUpOworCWlmIChocGFnZSAhPSBwcGFnZSkKKwkJbG9ja19wYWdlX25vc3luYyhwcGFnZSk7CisKKwlyZXQgPSB0cnlfdG9fdW5tYXAocHBhZ2UsIHR0dSk7CiAJaWYgKHJldCAhPSBTV0FQX1NVQ0NFU1MpCiAJCXByaW50ayhLRVJOX0VSUiAiTUNFICUjbHg6IGZhaWxlZCB0byB1bm1hcCBwYWdlIChtYXBjb3VudD0lZClcbiIsCi0JCQkJcGZuLCBwYWdlX21hcGNvdW50KGhwYWdlKSk7CisJCQkJcGZuLCBwYWdlX21hcGNvdW50KHBwYWdlKSk7CisKKwlpZiAoaHBhZ2UgIT0gcHBhZ2UpCisJCXVubG9ja19wYWdlKHBwYWdlKTsKIAogCS8qCiAJICogTm93IHRoYXQgdGhlIGRpcnR5IGJpdCBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZQpAQCAtOTIxLDcgKzk2NCw3IEBACiAJICogdXNlIGEgbW9yZSBmb3JjZS1mdWxsIHVuY2F0Y2hhYmxlIGtpbGwgdG8gcHJldmVudAogCSAqIGFueSBhY2Nlc3NlcyB0byB0aGUgcG9pc29uZWQgbWVtb3J5LgogCSAqLwotCWtpbGxfcHJvY3NfYW8oJnRva2lsbCwgISFQYWdlRGlydHkoaHBhZ2UpLCB0cmFwbm8sCisJa2lsbF9wcm9jc19hbygmdG9raWxsLCAhIVBhZ2VEaXJ0eShwcGFnZSksIHRyYXBubywKIAkJICAgICAgcmV0ICE9IFNXQVBfU1VDQ0VTUywgcCwgcGZuKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMDIyLDE5ICsxMDY1LDIyIEBACiAJICogVGhlIGNoZWNrICh1bm5lY2Vzc2FyaWx5KSBpZ25vcmVzIExSVSBwYWdlcyBiZWluZyBpc29sYXRlZCBhbmQKIAkgKiB3YWxrZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLCBob3dldmVyIHRoYXQncyBub3QgYSBiaWcgbG9zcy4KIAkgKi8KLQlpZiAoIVBhZ2VMUlUocCkgJiYgIVBhZ2VIdWdlKHApKQotCQlzaGFrZV9wYWdlKHAsIDApOwotCWlmICghUGFnZUxSVShwKSAmJiAhUGFnZUh1Z2UocCkpIHsKLQkJLyoKLQkJICogc2hha2VfcGFnZSBjb3VsZCBoYXZlIHR1cm5lZCBpdCBmcmVlLgotCQkgKi8KLQkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgewotCQkJYWN0aW9uX3Jlc3VsdChwZm4sICJmcmVlIGJ1ZGR5LCAybmQgdHJ5IiwgREVMQVlFRCk7Ci0JCQlyZXR1cm4gMDsKKwlpZiAoIVBhZ2VIdWdlKHApICYmICFQYWdlVHJhbnNDb21wb3VuZChwKSkgeworCQlpZiAoIVBhZ2VMUlUocCkpCisJCQlzaGFrZV9wYWdlKHAsIDApOworCQlpZiAoIVBhZ2VMUlUocCkpIHsKKwkJCS8qCisJCQkgKiBzaGFrZV9wYWdlIGNvdWxkIGhhdmUgdHVybmVkIGl0IGZyZWUuCisJCQkgKi8KKwkJCWlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHsKKwkJCQlhY3Rpb25fcmVzdWx0KHBmbiwgImZyZWUgYnVkZHksIDJuZCB0cnkiLAorCQkJCQkJREVMQVlFRCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlhY3Rpb25fcmVzdWx0KHBmbiwgIm5vbiBMUlUiLCBJR05PUkVEKTsKKwkJCXB1dF9wYWdlKHApOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCQlhY3Rpb25fcmVzdWx0KHBmbiwgIm5vbiBMUlUiLCBJR05PUkVEKTsKLQkJcHV0X3BhZ2UocCk7Ci0JCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyoKQEAgLTEwNjQsNyArMTExMCw3IEBACiAJICogRm9yIGVycm9yIG9uIHRoZSB0YWlsIHBhZ2UsIHdlIHNob3VsZCBzZXQgUEdfaHdwb2lzb24KIAkgKiBvbiB0aGUgaGVhZCBwYWdlIHRvIHNob3cgdGhhdCB0aGUgaHVnZXBhZ2UgaXMgaHdwb2lzb25lZAogCSAqLwotCWlmIChQYWdlVGFpbChwKSAmJiBUZXN0U2V0UGFnZUhXUG9pc29uKGhwYWdlKSkgeworCWlmIChQYWdlSHVnZShwKSAmJiBQYWdlVGFpbChwKSAmJiBUZXN0U2V0UGFnZUhXUG9pc29uKGhwYWdlKSkgewogCQlhY3Rpb25fcmVzdWx0KHBmbiwgImh1Z2VwYWdlIGFscmVhZHkgaGFyZHdhcmUgcG9pc29uZWQiLAogCQkJCUlHTk9SRUQpOwogCQl1bmxvY2tfcGFnZShocGFnZSk7CkBAIC0xMjk1LDcgKzEzNDEsMTAgQEAKIAlyZXQgPSBtaWdyYXRlX2h1Z2VfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZSwgTVBPTF9NRl9NT1ZFX0FMTCwgMCwKIAkJCQl0cnVlKTsKIAlpZiAocmV0KSB7Ci0JCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CisJCXN0cnVjdCBwYWdlICpwYWdlMSwgKnBhZ2UyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZTEsIHBhZ2UyLCAmcGFnZWxpc3QsIGxydSkKKwkJCXB1dF9wYWdlKHBhZ2UxKTsKKwogCQlwcl9kZWJ1Zygic29mdCBvZmZsaW5lOiAlI2x4OiBtaWdyYXRpb24gZmFpbGVkICVkLCB0eXBlICVseFxuIiwKIAkJCSBwZm4sIHJldCwgcGFnZS0+ZmxhZ3MpOwogCQlpZiAocmV0ID4gMCkKQEAgLTE0MTksNiArMTQ2OCw3IEBACiAJCXJldCA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZSwgTVBPTF9NRl9NT1ZFX0FMTCwKIAkJCQkJCQkJMCwgdHJ1ZSk7CiAJCWlmIChyZXQpIHsKKwkJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CiAJCQlwcl9pbmZvKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IG1pZ3JhdGlvbiBmYWlsZWQgJWQsIHR5cGUgJWx4XG4iLAogCQkJCXBmbiwgcmV0LCBwYWdlLT5mbGFncyk7CiAJCQlpZiAocmV0ID4gMCkKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA0NmZlOGNjLi43NjYxMTUyIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC03NzIsNiArNzcyLDcgQEAKIHVubG9jazoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorbW92ZV9uZXdwYWdlOgogCWlmIChyYyAhPSAtRUFHQUlOKSB7CiAgCQkvKgogIAkJICogQSBwYWdlIHRoYXQgaGFzIGJlZW4gbWlncmF0ZWQgaGFzIGFsbCByZWZlcmVuY2VzCkBAIC03ODUsOCArNzg2LDYgQEAKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKLW1vdmVfbmV3cGFnZToKLQogCS8qCiAJICogTW92ZSB0aGUgbmV3IHBhZ2UgdG8gdGhlIExSVS4gSWYgbWlncmF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bAogCSAqIHRoZW4gdGhpcyB3aWxsIGZyZWUgdGhlIHBhZ2UuCkBAIC04ODgsNyArODg3LDcgQEAKICAqIGFyZSBtb3ZhYmxlIGFueW1vcmUgYmVjYXVzZSB0byBoYXMgYmVjb21lIGVtcHR5CiAgKiBvciBubyByZXRyeWFibGUgcGFnZXMgZXhpc3QgYW55bW9yZS4KICAqIENhbGxlciBzaG91bGQgY2FsbCBwdXRiYWNrX2xydV9wYWdlcyB0byByZXR1cm4gcGFnZXMgdG8gdGhlIExSVQotICogb3IgZnJlZSBsaXN0LgorICogb3IgZnJlZSBsaXN0IG9ubHkgaWYgcmV0ICE9IDAuCiAgKgogICogUmV0dXJuOiBOdW1iZXIgb2YgcGFnZXMgbm90IG1pZ3JhdGVkIG9yIGVycm9yIGNvZGUuCiAgKi8KQEAgLTk4MSwxMCArOTgwLDYgQEAKIAl9CiAJcmMgPSAwOwogb3V0OgotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBmcm9tLCBscnUpCi0JCXB1dF9wYWdlKHBhZ2UpOwotCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jCmluZGV4IDEzZTgxZWUuLmMzOTI0YzdmIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTE3OCw2ICsxNzgsMTMgQEAKIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fV1JJVEUgfCBWTV9TSEFSRUQpKSA9PSBWTV9XUklURSkKIAkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiAKKwkvKgorCSAqIFdlIHdhbnQgbWxvY2sgdG8gc3VjY2VlZCBmb3IgcmVnaW9ucyB0aGF0IGhhdmUgYW55IHBlcm1pc3Npb25zCisJICogb3RoZXIgdGhhbiBQUk9UX05PTkUuCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpCisJCWd1cF9mbGFncyB8PSBGT0xMX0ZPUkNFOworCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCiAJCWd1cF9mbGFncyB8PSBGT0xMX01MT0NLOwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOTBjMTQzOS4uYTg3M2U2MSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTA4OCw4ICsxMDg4LDEwIEBACiAJCXBzZXQgPSBwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpOwogCiAJCXBjcCA9ICZwc2V0LT5wY3A7Ci0JCWZyZWVfcGNwcGFnZXNfYnVsayh6b25lLCBwY3AtPmNvdW50LCBwY3ApOwotCQlwY3AtPmNvdW50ID0gMDsKKwkJaWYgKHBjcC0+Y291bnQpIHsKKwkJCWZyZWVfcGNwcGFnZXNfYnVsayh6b25lLCBwY3AtPmNvdW50LCBwY3ApOworCQkJcGNwLT5jb3VudCA9IDA7CisJCX0KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIH0KQEAgLTIwMzQsNiArMjAzNiwxNCBAQAogCSAqLwogCWFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzKGdmcF9tYXNrKTsKIAorCS8qCisJICogRmluZCB0aGUgdHJ1ZSBwcmVmZXJyZWQgem9uZSBpZiB0aGUgYWxsb2NhdGlvbiBpcyB1bmNvbnN0cmFpbmVkIGJ5CisJICogY3B1c2V0cy4KKwkgKi8KKwlpZiAoIShhbGxvY19mbGFncyAmIEFMTE9DX0NQVVNFVCkgJiYgIW5vZGVtYXNrKQorCQlmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgaGlnaF96b25laWR4LCBOVUxMLAorCQkJCQkmcHJlZmVycmVkX3pvbmUpOworCiAJLyogVGhpcyBpcyB0aGUgbGFzdCBjaGFuY2UsIGluIGdlbmVyYWwsIGJlZm9yZSB0aGUgZ290byBub3BhZ2UuICovCiAJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLCBvcmRlciwgem9uZWxpc3QsCiAJCQloaWdoX3pvbmVpZHgsIGFsbG9jX2ZsYWdzICYgfkFMTE9DX05PX1dBVEVSTUFSS1MsCkBAIC0yMTkyLDcgKzIyMDIsOSBAQAogCiAJZ2V0X21lbXNfYWxsb3dlZCgpOwogCS8qIFRoZSBwcmVmZXJyZWQgem9uZSBpcyB1c2VkIGZvciBzdGF0aXN0aWNzIGxhdGVyICovCi0JZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwgbm9kZW1hc2ssICZwcmVmZXJyZWRfem9uZSk7CisJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKKwkJCQlub2RlbWFzayA/IDogJmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwKKwkJCQkmcHJlZmVycmVkX3pvbmUpOwogCWlmICghcHJlZmVycmVkX3pvbmUpIHsKIAkJcHV0X21lbXNfYWxsb3dlZCgpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmMKaW5kZXggMDM2OWY1Yi4uZWI2NjNmYiAxMDA2NDQKLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmMKKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmMKQEAgLTYsNiArNiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBMaW51cyBUb3J2YWxkcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmNWQ5MGRlLi4xNDhjNmU2IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMjA4Myw3ICsyMDgzLDggQEAKIAkJCXN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZTsKIAogCQkJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGdmcF96b25lKHNjLT5nZnBfbWFzayksCi0JCQkJCQkJTlVMTCwgJnByZWZlcnJlZF96b25lKTsKKwkJCQkJCSZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJCQkmcHJlZmVycmVkX3pvbmUpOwogCQkJd2FpdF9pZmZfY29uZ2VzdGVkKHByZWZlcnJlZF96b25lLCBCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3Zpcy5jIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggY2Q0YzQyMy4uZGUxMDIyYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+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+aGxpc3QsIGhlYWQpOwogCX0KIAlyZXR1cm4gZmRiOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA3YzZhNDZmLi5iNmQwYmY4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzQ5LDcgKzc0OSw4IEBACiAgKglAaGE6IGhhcmR3YXJlIGFkZHJlc3MKICAqCiAgKglTZWFyY2ggZm9yIGFuIGludGVyZmFjZSBieSBNQUMgYWRkcmVzcy4gUmV0dXJucyBOVUxMIGlmIHRoZSBkZXZpY2UKLSAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgUkNVCisgKglpcyBub3QgZm91bmQgb3IgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UuCisgKglUaGUgY2FsbGVyIG11c3QgaG9sZCBSQ1Ugb3IgUlROTC4KICAqCVRoZSByZXR1cm5lZCBkZXZpY2UgaGFzIG5vdCBoYWQgaXRzIHJlZiBjb3VudCBpbmNyZWFzZWQKICAqCWFuZCB0aGUgY2FsbGVyIG11c3QgdGhlcmVmb3JlIGJlIGNhcmVmdWwgYWJvdXQgbG9ja2luZwogICoKQEAgLTI1NjIsNyArMjU2Myw4IEBACiAKIAltYXAgPSByY3VfZGVyZWZlcmVuY2UocnhxdWV1ZS0+cnBzX21hcCk7CiAJaWYgKG1hcCkgewotCQlpZiAobWFwLT5sZW4gPT0gMSkgeworCQlpZiAobWFwLT5sZW4gPT0gMSAmJgorCQkgICAgIXJjdV9kZXJlZmVyZW5jZV9yYXcocnhxdWV1ZS0+cnBzX2Zsb3dfdGFibGUpKSB7CiAJCQl0Y3B1ID0gbWFwLT5jcHVzWzBdOwogCQkJaWYgKGNwdV9vbmxpbmUodGNwdSkpCiAJCQkJY3B1ID0gdGNwdTsKQEAgLTM0MjMsNiArMzQyNSw4IEBACiAJX19za2JfcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOwogCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOIC0gc2tiX2hlYWRyb29tKHNrYikpOwogCXNrYi0+dmxhbl90Y2kgPSAwOworCXNrYi0+ZGV2ID0gbmFwaS0+ZGV2OworCXNrYi0+c2tiX2lpZiA9IDA7CiAKIAluYXBpLT5za2IgPSBza2I7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggMTc3NDE3OC4uZmYyMzAyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJaWYgKHJlZ3MubGVuID4gcmVnbGVuKQogCQlyZWdzLmxlbiA9IHJlZ2xlbjsKIAotCXJlZ2J1ZiA9IHZtYWxsb2MocmVnbGVuKTsKKwlyZWdidWYgPSB2emFsbG9jKHJlZ2xlbik7CiAJaWYgKCFyZWdidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDc1MGRiNTcuLjJkNjVjNmIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMTIxLDggKzExMjEsNyBAQAogCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQkJaWYgKGFmX29wcy0+dmFsaWRhdGVfbGlua19hZikgewotCQkJCWVyciA9IGFmX29wcy0+dmFsaWRhdGVfbGlua19hZihkZXYsCi0JCQkJCQkJdGJbSUZMQV9BRl9TUEVDXSk7CisJCQkJZXJyID0gYWZfb3BzLT52YWxpZGF0ZV9saW5rX2FmKGRldiwgYWYpOwogCQkJCWlmIChlcnIgPCAwKQogCQkJCQlyZXR1cm4gZXJyOwogCQkJfQpAQCAtMTY3Miw2ICsxNjcxLDkgQEAKIAkJCXNucHJpbnRmKGlmbmFtZSwgSUZOQU1TSVosICIlcyUlZCIsIG9wcy0+a2luZCk7CiAKIAkJZGVzdF9uZXQgPSBydG5sX2xpbmtfZ2V0X25ldChuZXQsIHRiKTsKKwkJaWYgKElTX0VSUihkZXN0X25ldCkpCisJCQlyZXR1cm4gUFRSX0VSUihkZXN0X25ldCk7CisKIAkJZGV2ID0gcnRubF9jcmVhdGVfbGluayhuZXQsIGRlc3RfbmV0LCBpZm5hbWUsIG9wcywgdGIpOwogCiAJCWlmIChJU19FUlIoZGV2KSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggZDMxYmIzNi4uZDg4M2RjYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTIxMCw2ICsyMTAsNyBAQAogCXNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKIAltZW1zZXQoc2hpbmZvLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBkYXRhcmVmKSk7CiAJYXRvbWljX3NldCgmc2hpbmZvLT5kYXRhcmVmLCAxKTsKKwlrbWVtY2hlY2tfYW5ub3RhdGVfdmFyaWFibGUoc2hpbmZvLT5kZXN0cnVjdG9yX2FyZyk7CiAKIAlpZiAoZmNsb25lKSB7CiAJCXN0cnVjdCBza19idWZmICpjaGlsZCA9IHNrYiArIDE7CkBAIC0yNzQ0LDggKzI3NDUsMTIgQEAKIAogbWVyZ2U6CiAJaWYgKG9mZnNldCA+IGhlYWRsZW4pIHsKLQkJc2tiaW5mby0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0gb2Zmc2V0IC0gaGVhZGxlbjsKLQkJc2tiaW5mby0+ZnJhZ3NbMF0uc2l6ZSAtPSBvZmZzZXQgLSBoZWFkbGVuOworCQl1bnNpZ25lZCBpbnQgZWF0ID0gb2Zmc2V0IC0gaGVhZGxlbjsKKworCQlza2JpbmZvLT5mcmFnc1swXS5wYWdlX29mZnNldCArPSBlYXQ7CisJCXNrYmluZm8tPmZyYWdzWzBdLnNpemUgLT0gZWF0OworCQlza2ItPmRhdGFfbGVuIC09IGVhdDsKKwkJc2tiLT5sZW4gLT0gZWF0OwogCQlvZmZzZXQgPSBoZWFkbGVuOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IGQ5MDBhYjkuLjZiMDNmNTYgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTU4Myw3ICs1ODMsNyBAQAogCXU4IHVwLCBpZHR5cGU7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoIXRiW0RDQl9BVFRSX0FQUF0gfHwgIW5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHApCisJaWYgKCF0YltEQ0JfQVRUUl9BUFBdKQogCQlnb3RvIG91dDsKIAogCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoYXBwX3RiLCBEQ0JfQVBQX0FUVFJfTUFYLCB0YltEQ0JfQVRUUl9BUFBdLApAQCAtNjA0LDcgKzYwNCwxNiBAQAogCQlnb3RvIG91dDsKIAogCWlkID0gbmxhX2dldF91MTYoYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pOwotCXVwID0gbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcChuZXRkZXYsIGlkdHlwZSwgaWQpOworCisJaWYgKG5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHApIHsKKwkJdXAgPSBuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRjYl9hcHAgYXBwID0geworCQkJCQkuc2VsZWN0b3IgPSBpZHR5cGUsCisJCQkJCS5wcm90b2NvbCA9IGlkLAorCQkJCSAgICAgfTsKKwkJdXAgPSBkY2JfZ2V0YXBwKG5ldGRldiwgJmFwcCk7CisJfQogCiAJLyogc2VuZCB0aGlzIGJhY2sgKi8KIAlkY2JubF9za2IgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhLmMgYi9uZXQvZHNhL2RzYS5jCmluZGV4IDBjODc3YTcuLjNmYjE0YjcgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhLmMKKysrIGIvbmV0L2RzYS9kc2EuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiB9CiBtb2R1bGVfZXhpdChkc2FfY2xlYW51cF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4iKQorTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSBzd2l0Y2ggY2hpcHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06ZHNhIik7CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCAxNWRjYzFhLi4wYzI4MjYzIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTI2NSwxMyArMjY1LDEzIEBACiBzdGF0aWMgaW50IGVjb25ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBzb2NrYWRkcl9lYyAqc2FkZHI9KHN0cnVjdCBzb2NrYWRkcl9lYyAqKW1zZy0+bXNnX25hbWU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZWNfYWRkciBhZGRyOwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciBwb3J0LCBjYjsKICNpZiBkZWZpbmVkKENPTkZJR19FQ09ORVRfQVVOVURQKSB8fCBkZWZpbmVkKENPTkZJR19FQ09ORVRfTkFUSVZFKQorCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGVjX2NiICplYjsKICNlbmRpZgpAQCAtNDg4LDEwICs0ODgsMTAgQEAKIAogZXJyb3JfZnJlZV9idWY6CiAJdmZyZWUodXNlcmJ1Zik7CitlcnJvcjoKICNlbHNlCiAJZXJyID0gLUVQUk9UT1RZUEU7CiAjZW5kaWYKLQllcnJvcjoKIAltdXRleF91bmxvY2soJmVjb25ldF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGYyYjYxMTAuLjQ1Yjg5ZDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTg4MCw2ICs4ODAsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW5ldF9pb2N0bCk7CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgaW5ldF9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJaW50IGVyciA9IC1FTk9JT0NUTENNRDsKKworCWlmIChzay0+c2tfcHJvdC0+Y29tcGF0X2lvY3RsKQorCQllcnIgPSBzay0+c2tfcHJvdC0+Y29tcGF0X2lvY3RsKHNrLCBjbWQsIGFyZyk7CisKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9zdHJlYW1fb3BzID0gewogCS5mYW1pbHkJCSAgID0gUEZfSU5FVCwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC05MDMsNiArOTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGluZXRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChpbmV0X3N0cmVhbV9vcHMpOwpAQCAtOTI5LDYgKzk0Myw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9vcHMpOwpAQCAtOTU5LDYgKzk3NCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAwNGM4YjY5Li43OTI3NTg5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMTAxNywxNCArMTAxNywxMyBAQAogCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgUFJPWFlfQVJQKSA9IG9uOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKF9faW5fZGV2X2dldF9yY3UoZGV2KSkgewotCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3JjdShkZXYpLCBQUk9YWV9BUlAsIG9uKTsKKwlpZiAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgeworCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSwgUFJPWFlfQVJQLCBvbik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVOWElPOwogfQogCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqLwogc3RhdGljIGludCBhcnBfcmVxX3NldF9wdWJsaWMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwcmVxICpyLAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTIzMywxMCArMTIzMiwxMCBAQAogCWlmICghKHIuYXJwX2ZsYWdzICYgQVRGX05FVE1BU0spKQogCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyLmFycF9uZXRtYXNrKS0+c2luX2FkZHIuc19hZGRyID0KIAkJCQkJCQkgICBodG9ubCgweEZGRkZGRkZGVUwpOwotCXJjdV9yZWFkX2xvY2soKTsKKwlydG5sX2xvY2soKTsKIAlpZiAoci5hcnBfZGV2WzBdKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZV9yY3UobmV0LCByLmFycF9kZXYpOworCQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIHIuYXJwX2Rldik7CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMjYzLDcgKzEyNjIsNyBAQAogCQlicmVhazsKIAl9CiBvdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAlpZiAoY21kID09IFNJT0NHQVJQICYmICFlcnIgJiYgY29weV90b191c2VyKGFyZywgJnIsIHNpemVvZihyKSkpCiAJCWVyciA9IC1FRkFVTFQ7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IGQ5YmM4NTcuLmE5NmU2NTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXSwgKioqc3RhY2twdHI7Ci0Jc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoQUZfSU5FVCk7CisJc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoZGFkZHItPmZhbWlseSk7CiAJc3RydWN0IGluZXRfcGVlciAqcDsKIAogCS8qIExvb2sgdXAgZm9yIHRoZSBhZGRyZXNzIHF1aWNrbHksIGxvY2tsZXNzLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDNmM2E5YWYuLjhiNjVhMTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bmV0L2lwaXAuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgpAQCAtMTQzNCw2ICsxNDM1LDgxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcSB7CisJc3RydWN0IGluX2FkZHIgc3JjOworCXN0cnVjdCBpbl9hZGRyIGdycDsKKwljb21wYXRfdWxvbmdfdCBwa3RjbnQ7CisJY29tcGF0X3Vsb25nX3QgYnl0ZWNudDsKKwljb21wYXRfdWxvbmdfdCB3cm9uZ19pZjsKK307CisKK3N0cnVjdCBjb21wYXRfc2lvY192aWZfcmVxIHsKKwl2aWZpX3QJdmlmaTsJCS8qIFdoaWNoIGlmYWNlICovCisJY29tcGF0X3Vsb25nX3QgaWNvdW50OworCWNvbXBhdF91bG9uZ190IG9jb3VudDsKKwljb21wYXRfdWxvbmdfdCBpYnl0ZXM7CisJY29tcGF0X3Vsb25nX3Qgb2J5dGVzOworfTsKKworaW50IGlwbXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxIHNyOworCXN0cnVjdCBjb21wYXRfc2lvY192aWZfcmVxIHZyOworCXN0cnVjdCB2aWZfZGV2aWNlICp2aWY7CisJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IG1yX3RhYmxlICptcnQ7CisKKwltcnQgPSBpcG1yX2dldF90YWJsZShuZXQsIHJhd19zayhzayktPmlwbXJfdGFibGUgPyA6IFJUX1RBQkxFX0RFRkFVTFQpOworCWlmIChtcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dFVFZJRkNOVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodnIudmlmaSA+PSBtcnQtPm1heHZpZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJdmlmID0gJm1ydC0+dmlmX3RhYmxlW3ZyLnZpZmldOworCQlpZiAoVklGX0VYSVNUUyhtcnQsIHZyLnZpZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnNyLCBhcmcsIHNpemVvZihzcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQljID0gaXBtcl9jYWNoZV9maW5kKG1ydCwgc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CisJCWlmIChjKSB7CisJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKKwkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOworCQkJc3Iud3JvbmdfaWYgPSBjLT5tZmNfdW4ucmVzLndyb25nX2lmOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3IsIHNpemVvZihzcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKyNlbmRpZgorCiAKIHN0YXRpYyBpbnQgaXBtcl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCmluZGV4IGI4ZGRjYzQuLmE1ZTUyYTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAogCWlmIChtYW5nbGUtPmZsYWdzICYgfkFSUFRfTUFOR0xFX01BU0sgfHwKIAkgICAgIShtYW5nbGUtPmZsYWdzICYgQVJQVF9NQU5HTEVfTUFTSykpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobWFuZ2xlLT50YXJnZXQgIT0gTkZfRFJPUCAmJiBtYW5nbGUtPnRhcmdldCAhPSBORl9BQ0NFUFQgJiYKIAkgICBtYW5nbGUtPnRhcmdldCAhPSBYVF9DT05USU5VRSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOworCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgYXJwdF9tYW5nbGVfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGEzZDVhYjcuLjYzOTBiYTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiBzdGF0aWMgc3RydWN0IHJhd19oYXNoaW5mbyByYXdfdjRfaGFzaGluZm8gPSB7CiAJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocmF3X3Y0X2hhc2hpbmZvLmxvY2spLApAQCAtODM4LDYgKzgzOSwyMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DT1VUUToKKwljYXNlIFNJT0NJTlE6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfSVBfTVJPVVRFCisJCXJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpOworI2Vsc2UKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgorCX0KK30KKyNlbmRpZgorCiBzdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIlJBVyIsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApAQCAtODYwLDYgKzg3OCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9yYXdfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfcmF3X2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGNvbXBhdF9yYXdfaW9jdGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDM1MWRjNGUuLjc4OGEzZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMjcwNyw2ICsyNzA3LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCiB7CiB9CkBAIC0yNzE2LDYgKzI3MjEsNyBAQAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmRlc3Ryb3kJCT0JaXB2NF9kc3RfZGVzdHJveSwKIAkuY2hlY2sJCQk9CWlwdjRfYmxhY2tob2xlX2RzdF9jaGVjaywKKwkuZGVmYXVsdF9tdHUJCT0JaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAyNTQ5YjI5Li5lYjdmODJlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNDM5OSw3ICs0Mzk5LDcgQEAKIAkJCWlmICghc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCB0cC0+dWNvcHkuaW92LCBjaHVuaykpIHsKIAkJCQl0cC0+dWNvcHkubGVuIC09IGNodW5rOwogCQkJCXRwLT5jb3BpZWRfc2VxICs9IGNodW5rOwotCQkJCWVhdGVuID0gKGNodW5rID09IHNrYi0+bGVuICYmICF0aC0+ZmluKTsKKwkJCQllYXRlbiA9IChjaHVuayA9PSBza2ItPmxlbik7CiAJCQkJdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc2spOwogCQkJfQogCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggODU2ZjY4NC4uMDJmNTgzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xOTk0LDcgKzE5OTQsNiBAQAogCQkJCX0KIAkJCQlyZXEgPSByZXEtPmRsX25leHQ7CiAJCQl9Ci0JCQlzdC0+b2Zmc2V0ID0gMDsKIAkJCWlmICgrK3N0LT5zYnVja2V0ID49IGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLmxpc3Rlbl9vcHQtPm5yX3RhYmxlX2VudHJpZXMpCiAJCQkJYnJlYWs7CiBnZXRfcmVxOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMjRhMWNmMS4uZmQ2NzgyZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yNjYxLDE0ICsyNjYxLDEyIEBACiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhOwotCUxJU1RfSEVBRChrZWVwX2xpc3QpOwotCWludCBzdGF0ZTsKKwlpbnQgc3RhdGUsIGk7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JLyogRmx1c2ggcm91dGVzIGlmIGRldmljZSBpcyBiZWluZyByZW1vdmVkIG9yIGl0IGlzIG5vdCBsb29wYmFjayAqLwotCWlmIChob3cgfHwgIShkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSkKLQkJcnQ2X2lmZG93bihuZXQsIGRldik7CisJcnQ2X2lmZG93bihuZXQsIGRldik7CisJbmVpZ2hfaWZkb3duKCZuZF90YmwsIGRldik7CiAKIAlpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwogCWlmIChpZGV2ID09IE5VTEwpCkBAIC0yNjg5LDYgKzI2ODcsMjMgQEAKIAogCX0KIAorCS8qIFN0ZXAgMjogY2xlYXIgaGFzaCB0YWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBJTjZfQUREUl9IU0laRTsgaSsrKSB7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoID0gJmluZXQ2X2FkZHJfbHN0W2ldOworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKworCQlzcGluX2xvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CisJcmVzdGFydDoKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGlmYSwgbiwgaCwgYWRkcl9sc3QpIHsKKwkJCWlmIChpZmEtPmlkZXYgPT0gaWRldikgeworCQkJCWhsaXN0X2RlbF9pbml0X3JjdSgmaWZhLT5hZGRyX2xzdCk7CisJCQkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmYSk7CisJCQkJZ290byByZXN0YXJ0OworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOworCX0KKwogCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOwogCiAJLyogU3RlcCAyOiBjbGVhciBmbGFncyBmb3Igc3RhdGVsZXNzIGFkZHJjb25mICovCkBAIC0yNzIyLDUyICsyNzM3LDIzIEBACiAJCQkJICAgICAgIHN0cnVjdCBpbmV0Nl9pZmFkZHIsIGlmX2xpc3QpOwogCQlhZGRyY29uZl9kZWxfdGltZXIoaWZhKTsKIAotCQkvKiBJZiBqdXN0IGRvaW5nIGxpbmsgZG93biwgYW5kIGFkZHJlc3MgaXMgcGVybWFuZW50Ci0JCSAgIGFuZCBub3QgbGluay1sb2NhbCwgdGhlbiByZXRhaW4gaXQuICovCi0JCWlmICghaG93ICYmCi0JCSAgICAoaWZhLT5mbGFncyZJRkFfRl9QRVJNQU5FTlQpICYmCi0JCSAgICAhKGlwdjZfYWRkcl90eXBlKCZpZmEtPmFkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkpIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZpZmEtPmlmX2xpc3QsICZrZWVwX2xpc3QpOworCQlsaXN0X2RlbCgmaWZhLT5pZl9saXN0KTsKIAotCQkJLyogSWYgbm90IGRvaW5nIERBRCBvbiB0aGlzIGFkZHJlc3MsIGp1c3Qga2VlcCBpdC4gKi8KLQkJCWlmICgoZGV2LT5mbGFncyYoSUZGX05PQVJQfElGRl9MT09QQkFDSykpIHx8Ci0JCQkgICAgaWRldi0+Y25mLmFjY2VwdF9kYWQgPD0gMCB8fAotCQkJICAgIChpZmEtPmZsYWdzICYgSUZBX0ZfTk9EQUQpKQotCQkJCWNvbnRpbnVlOworCQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCi0JCQkvKiBJZiBpdCB3YXMgdGVudGF0aXZlIGFscmVhZHksIG5vIG5lZWQgdG8gbm90aWZ5ICovCi0JCQlpZiAoaWZhLT5mbGFncyAmIElGQV9GX1RFTlRBVElWRSkKLQkJCQljb250aW51ZTsKKwkJc3Bpbl9sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOworCQlzdGF0ZSA9IGlmYS0+c3RhdGU7CisJCWlmYS0+c3RhdGUgPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7CiAKLQkJCS8qIEZsYWcgaXQgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIHdoZW4gbGluayBjb21lcyB1cCAqLwotCQkJaWZhLT5mbGFncyB8PSBJRkFfRl9URU5UQVRJVkU7Ci0JCQlpZmEtPnN0YXRlID0gSU5FVDZfSUZBRERSX1NUQVRFX0RBRDsKLQkJfSBlbHNlIHsKLQkJCWxpc3RfZGVsKCZpZmEtPmlmX2xpc3QpOwotCi0JCQkvKiBjbGVhciBoYXNoIHRhYmxlICovCi0JCQlzcGluX2xvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7Ci0JCQlobGlzdF9kZWxfaW5pdF9yY3UoJmlmYS0+YWRkcl9sc3QpOwotCQkJc3Bpbl91bmxvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7Ci0KLQkJCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCQlzcGluX2xvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7Ci0JCQlzdGF0ZSA9IGlmYS0+c3RhdGU7Ci0JCQlpZmEtPnN0YXRlID0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQ7Ci0JCQlzcGluX3VubG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKLQotCQkJaWYgKHN0YXRlICE9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEKSB7Ci0JCQkJX19pcHY2X2lmYV9ub3RpZnkoUlRNX0RFTEFERFIsIGlmYSk7Ci0JCQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmluZXQ2YWRkcl9jaGFpbiwKLQkJCQkJCQkgICBORVRERVZfRE9XTiwgaWZhKTsKLQkJCX0KLQotCQkJaW42X2lmYV9wdXQoaWZhKTsKLQkJCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCQlpZiAoc3RhdGUgIT0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQpIHsKKwkJCV9faXB2Nl9pZmFfbm90aWZ5KFJUTV9ERUxBRERSLCBpZmEpOworCQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmluZXQ2YWRkcl9jaGFpbiwgTkVUREVWX0RPV04sIGlmYSk7CiAJCX0KLQl9CisJCWluNl9pZmFfcHV0KGlmYSk7CiAKLQlsaXN0X3NwbGljZSgma2VlcF9saXN0LCAmaWRldi0+YWRkcl9saXN0KTsKKwkJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CisJfQogCiAJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIApAQCAtNDE1Niw4ICs0MTQyLDcgQEAKIAkJYWRkcmNvbmZfbGVhdmVfc29saWN0KGlmcC0+aWRldiwgJmlmcC0+YWRkcik7CiAJCWRzdF9ob2xkKCZpZnAtPnJ0LT5kc3QpOwogCi0JCWlmIChpZnAtPnN0YXRlID09IElORVQ2X0lGQUREUl9TVEFURV9ERUFEICYmCi0JCSAgICBpcDZfZGVsX3J0KGlmcC0+cnQpKQorCQlpZiAoaXA2X2RlbF9ydChpZnAtPnJ0KSkKIAkJCWRzdF9mcmVlKCZpZnAtPnJ0LT5kc3QpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCA5ZmFiMjc0Li4wZTFkNTNiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCisrKyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KQEAgLTE4MDQsNiArMTgwNSw4MCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfc2lvY19zZ19yZXE2IHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGdycDsKKwljb21wYXRfdWxvbmdfdCBwa3RjbnQ7CisJY29tcGF0X3Vsb25nX3QgYnl0ZWNudDsKKwljb21wYXRfdWxvbmdfdCB3cm9uZ19pZjsKK307CisKK3N0cnVjdCBjb21wYXRfc2lvY19taWZfcmVxNiB7CisJbWlmaV90CW1pZmk7CisJY29tcGF0X3Vsb25nX3QgaWNvdW50OworCWNvbXBhdF91bG9uZ190IG9jb3VudDsKKwljb21wYXRfdWxvbmdfdCBpYnl0ZXM7CisJY29tcGF0X3Vsb25nX3Qgb2J5dGVzOworfTsKKworaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcTYgc3I7CisJc3RydWN0IGNvbXBhdF9zaW9jX21pZl9yZXE2IHZyOworCXN0cnVjdCBtaWZfZGV2aWNlICp2aWY7CisJc3RydWN0IG1mYzZfY2FjaGUgKmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCXN0cnVjdCBtcjZfdGFibGUgKm1ydDsKKworCW1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLT5pcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOworCWlmIChtcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dFVE1JRkNOVF9JTjY6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdnIsIGFyZywgc2l6ZW9mKHZyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZyLm1pZmkgPj0gbXJ0LT5tYXh2aWYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJCXZpZiA9ICZtcnQtPnZpZjZfdGFibGVbdnIubWlmaV07CisJCWlmIChNSUZfRVhJU1RTKG1ydCwgdnIubWlmaSkpIHsKKwkJCXZyLmljb3VudCA9IHZpZi0+cGt0X2luOworCQkJdnIub2NvdW50ID0gdmlmLT5wa3Rfb3V0OworCQkJdnIuaWJ5dGVzID0gdmlmLT5ieXRlc19pbjsKKwkJCXZyLm9ieXRlcyA9IHZpZi0+Ynl0ZXNfb3V0OworCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ2ciwgc2l6ZW9mKHZyKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJY2FzZSBTSU9DR0VUU0dDTlRfSU42OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnNyLCBhcmcsIHNpemVvZihzcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJCWMgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgJnNyLnNyYy5zaW42X2FkZHIsICZzci5ncnAuc2luNl9hZGRyKTsKKwkJaWYgKGMpIHsKKwkJCXNyLnBrdGNudCA9IGMtPm1mY191bi5yZXMucGt0OworCQkJc3IuYnl0ZWNudCA9IGMtPm1mY191bi5yZXMuYnl0ZXM7CisJCQlzci53cm9uZ19pZiA9IGMtPm1mY191bi5yZXMud3JvbmdfaWY7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnNyLCBzaXplb2Yoc3IpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBpcDZtcl9mb3J3YXJkMl9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggODZjMzk1Mi4uYzViMDkxNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogCkBAIC0xMTU3LDYgKzExNTgsMjMgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DT1VUUToKKwljYXNlIFNJT0NJTlE6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKKwkJcmV0dXJuIGlwNm1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpOworI2Vsc2UKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgorCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCByYXd2Nl9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIHsKIAlpZiAoaW5ldF9zayhzayktPmluZXRfbnVtID09IElQUFJPVE9fUkFXKQpAQCAtMTIxNSw2ICsxMjMzLDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGNvbXBhdF9yYXd2Nl9pb2N0bCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMzczYmQwNC4uMWMyOWY5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC03Miw4ICs3Miw2IEBACiAjZGVmaW5lIFJUNl9UUkFDRSh4Li4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIENMT05FX09GRkxJTktfUk9VVEUgMAotCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICogaXA2X3J0X2NvcHkoc3RydWN0IHJ0Nl9pbmZvICpvcnQpOwogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkJKmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJIGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwpAQCAtMTE1LDYgKzExMywxMSBAQAogCS5sb2NhbF9vdXQJCT0JX19pcDZfbG9jYWxfb3V0LAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCiB7CiB9CkBAIC0xMjQsNiArMTI3LDcgQEAKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKKwkuZGVmYXVsdF9tdHUJCT0JaXA2X2JsYWNraG9sZV9kZWZhdWx0X210dSwKIAkudXBkYXRlX3BtdHUJCT0JaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKIH07CiAKQEAgLTE5Niw3ICsyMDAsNiBAQAogCQlpbjZfZGV2X3B1dChpZGV2KTsKIAl9CiAJaWYgKHBlZXIpIHsKLQkJQlVHX09OKCEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpKTsKIAkJcnQtPnJ0NmlfcGVlciA9IE5VTEw7CiAJCWluZXRfcHV0cGVlcihwZWVyKTsKIAl9CkBAIC0yMDYsOSArMjA5LDYgQEAKIHsKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyOwogCi0JaWYgKFdBUk5fT04oIShydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkpKQotCQlyZXR1cm47Ci0KIAlwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KCZydC0+cnQ2aV9kc3QuYWRkciwgY3JlYXRlKTsKIAlpZiAocGVlciAmJiBjbXB4Y2hnKCZydC0+cnQ2aV9wZWVyLCBOVUxMLCBwZWVyKSAhPSBOVUxMKQogCQlpbmV0X3B1dHBlZXIocGVlcik7CkBAIC03MzgsMTMgKzczOCw4IEBACiAKIAlpZiAoIXJ0LT5ydDZpX25leHRob3AgJiYgIShydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1ApKQogCQlucnQgPSBydDZfYWxsb2NfY293KHJ0LCAmZmwtPmZsNl9kc3QsICZmbC0+Zmw2X3NyYyk7Ci0JZWxzZSB7Ci0jaWYgQ0xPTkVfT0ZGTElOS19ST1VURQorCWVsc2UKIAkJbnJ0ID0gcnQ2X2FsbG9jX2Nsb25lKHJ0LCAmZmwtPmZsNl9kc3QpOwotI2Vsc2UKLQkJZ290byBvdXQyOwotI2VuZGlmCi0JfQogCiAJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCXJ0ID0gbnJ0ID8gOiBuZXQtPmlwdjYuaXA2X251bGxfZW50cnk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IGZhMWQ4ZjQuLjdjYjY1ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgogCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBlbXB0eVsxXTsKKwogc3RhdGljIGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAicm91dGUiLApAQCAtMzUsNiArMzcsMTIgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAorCXsKKwkJLnByb2NuYW1lCT0gIm5laWdoIiwKKwkJLm1heGxlbgkJPSAwLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZW1wdHksCisJfSwKIAl7IH0KIH07CiAKQEAgLTE1Miw3ICsxNjAsNiBAQAogCiBpbnQgaXB2Nl9zdGF0aWNfc3lzY3RsX3JlZ2lzdGVyKHZvaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZW1wdHlbMV07CiAJaXA2X2Jhc2UgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMobmV0X2lwdjZfY3RsX3BhdGgsIGVtcHR5KTsKIAlpZiAoaXA2X2Jhc2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDdlNzQwMjMuLmRhODc0MjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC05OCw2ICs5OCwxMCBAQAogCWlmICgheGRzdC0+dS5ydDYucnQ2aV9pZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXhkc3QtPnUucnQ2LnJ0NmlfcGVlciA9IHJ0LT5ydDZpX3BlZXI7CisJaWYgKHJ0LT5ydDZpX3BlZXIpCisJCWF0b21pY19pbmMoJnJ0LT5ydDZpX3BlZXItPnJlZmNudCk7CisKIAkvKiBTaGVpdC4uLiBJIHJlbWVtYmVyIEkgZGlkIHRoaXMgcmlnaHQuIEFwcGFyZW50bHksCiAJICogaXQgd2FzIG1hZ2ljYWxseSBsb3N0LCBzbyB0aGlzIGNvZGUgbmVlZHMgYXVkaXQgKi8KIAl4ZHN0LT51LnJ0Ni5ydDZpX2ZsYWdzID0gcnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0FOWUNBU1QgfApAQCAtMjE2LDYgKzIyMCw4IEBACiAKIAlpZiAobGlrZWx5KHhkc3QtPnUucnQ2LnJ0NmlfaWRldikpCiAJCWluNl9kZXZfcHV0KHhkc3QtPnUucnQ2LnJ0NmlfaWRldik7CisJaWYgKGxpa2VseSh4ZHN0LT51LnJ0Ni5ydDZpX3BlZXIpKQorCQlpbmV0X3B1dHBlZXIoeGRzdC0+dS5ydDYucnQ2aV9wZWVyKTsKIAl4ZnJtX2RzdF9kZXN0cm95KHhkc3QpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDU5NTBlM2EuLmI2NGI0MmIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yMjMwLDYgKzIyMzAsOSBAQAogCiAJc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKIAorCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQlnb3RvIG91dDsKKwogCWlmICh0aW1fb2Zmc2V0KQogCQkqdGltX29mZnNldCA9IDA7CiAJaWYgKHRpbV9sZW5ndGgpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCmluZGV4IDU3MDJkZTMuLjYzYTFiOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCkBAIC02Myw2ICs2Myw5IEBACiAJCSAqIHRoaXMgZG9lcyBub3QgaGFybSBhbmQgaXQgaGFwcGVucyB2ZXJ5IHJhcmVseS4gKi8KIAkJdW5zaWduZWQgbG9uZyBtaXNzZWQgPSBlLT5taXNzZWQ7CiAKKwkJaWYgKCEoKGV2ZW50cyB8IG1pc3NlZCkgJiBlLT5jdG1hc2spKQorCQkJZ290byBvdXRfdW5sb2NrOworCiAJCXJldCA9IG5vdGlmeS0+ZmNuKGV2ZW50cyB8IG1pc3NlZCwgJml0ZW0pOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCB8fCBtaXNzZWQpKSB7CiAJCQlzcGluX2xvY2tfYmgoJmN0LT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5MzI5N2FhLi5lZWFkOWRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC02NjcsNiArNjY3LDcgQEAKIAkJCWlmIChjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCQljYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCQlJUENUTkxfTVNHX0NUX05FVywgY3QpIDwgMCkgeworCQkJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCA4OGY3YzM1Li43M2MzM2E0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtNTMsMTUgKzUzLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pcHJhbmdlX2lwdjZfc3ViKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQoraXByYW5nZV9pcHY2X2x0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQogewogCXVuc2lnbmVkIGludCBpOwotCWludCByOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQlyID0gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSAtIG50b2hsKGItPnM2X2FkZHIzMltpXSk7Ci0JCWlmIChyICE9IDApCi0JCQlyZXR1cm4gcjsKKwkJaWYgKGEtPnM2X2FkZHIzMltpXSAhPSBiLT5zNl9hZGRyMzJbaV0pCisJCQlyZXR1cm4gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSA8IG50b2hsKGItPnM2X2FkZHIzMltpXSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NSwxNSArNzMsMTUgQEAKIAlib29sIG07CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewotCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNikgPCAwOwotCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWF4LmluNikgPiAwOworCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KTsKKwkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmluZm8tPnNyY19tYXguaW42LCAmaXBoLT5zYWRkcik7CiAJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKLQkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKKwkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWluLmluNik7CisJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZpbmZvLT5kc3RfbWF4LmluNiwgJmlwaC0+ZGFkZHIpOwogCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2NicS5jIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwppbmRleCBjODBkMWMyLi41ZjYzZWM1IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2NicS5jCisrKyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKQEAgLTM5MCw3ICszOTAsNiBAQAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cSk7CiAJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7CiAJCXNjaC0+cS5xbGVuKys7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQljYnFfbWFya190b3BsZXZlbChxLCBjbCk7CiAJCWlmICghY2wtPm5leHRfYWxpdmUpCiAJCQljYnFfYWN0aXZhdGVfY2xhc3MoY2wpOwpAQCAtNjQ5LDcgKzY0OCw2IEBACiAJCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cSk7CiAJCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQkJc2NoLT5xLnFsZW4rKzsKLQkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJaWYgKCFjbC0+bmV4dF9hbGl2ZSkKIAkJCQljYnFfYWN0aXZhdGVfY2xhc3MoY2wpOwogCQkJcmV0dXJuIDA7CkBAIC05NzEsNiArOTY5LDcgQEAKIAogCQlza2IgPSBjYnFfZGVxdWV1ZV8xKHNjaCk7CiAJCWlmIChza2IpIHsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKIAkJCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwppbmRleCBkZTU1ZTY0Li42YjdmZTRhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKQEAgLTM3Niw3ICszNzYsNiBAQAogCX0KIAogCWJzdGF0c191cGRhdGUoJmNsLT5ic3RhdHMsIHNrYik7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAKIAlzY2gtPnEucWxlbisrOwogCXJldHVybiBlcnI7CkBAIC00MDMsNiArNDAyLDcgQEAKIAkJCXNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLT5xZGlzYyk7CiAJCQlpZiAoY2wtPnFkaXNjLT5xLnFsZW4gPT0gMCkKIAkJCQlsaXN0X2RlbCgmY2wtPmFsaXN0KTsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCmluZGV4IDYwZjRiZGQuLjBmN2JmM2YgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwpAQCAtMjYwLDcgKzI2MCw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4rKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMjgzLDYgKzI4Miw3IEBACiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAorCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuLS07CiAKIAlpbmRleCA9IHNrYi0+dGNfaW5kZXggJiAocC0+aW5kaWNlcyAtIDEpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9maWZvLmMgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwppbmRleCBhYTRkNjMzLi5kNDY4YjQ3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZpZm8uYworKysgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwpAQCAtNDYsMTcgKzQ2LDE0IEBACiAKIHN0YXRpYyBpbnQgcGZpZm9fdGFpbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyogc2NoKQogewotCXN0cnVjdCBza19idWZmICpza2JfaGVhZDsKIAlzdHJ1Y3QgZmlmb19zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCiAJaWYgKGxpa2VseShza2JfcXVldWVfbGVuKCZzY2gtPnEpIDwgcS0+bGltaXQpKQogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAogCS8qIHF1ZXVlIGZ1bGwsIHJlbW92ZSBvbmUgc2tiIHRvIGZ1bGZpbGwgdGhlIGxpbWl0ICovCi0Jc2tiX2hlYWQgPSBxZGlzY19kZXF1ZXVlX2hlYWQoc2NoKTsKKwlfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzY2gsICZzY2gtPnEpOwogCXNjaC0+cXN0YXRzLmRyb3BzKys7Ci0Ja2ZyZWVfc2tiKHNrYl9oZWFkKTsKLQogCXFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CiAKIAlyZXR1cm4gTkVUX1hNSVRfQ047CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDJlNDU3OTEuLjE0YTc5OWRlIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuYworKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwpAQCAtMTYwMCw3ICsxNjAwLDYgQEAKIAkJc2V0X2FjdGl2ZShjbCwgcWRpc2NfcGt0X2xlbihza2IpKTsKIAogCWJzdGF0c191cGRhdGUoJmNsLT5ic3RhdHMsIHNrYik7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4rKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMTY2Niw2ICsxNjY1LDcgQEAKIAl9CiAKIAlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CisJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4tLTsKIAogCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCA5ODRjMWIwLi5mYzEyZmU2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTU3NCw3ICs1NzQsNiBAQAogCX0KIAogCXNjaC0+cS5xbGVuKys7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CiAKQEAgLTg0Miw3ICs4NDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmh0Yl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlpbnQgbGV2ZWw7CiAJcHNjaGVkX3RpbWVfdCBuZXh0X2V2ZW50OwpAQCAtODUxLDYgKzg1MCw4IEBACiAJLyogdHJ5IHRvIGRlcXVldWUgZGlyZWN0IHBhY2tldHMgYXMgaGlnaCBwcmlvICghKSB0byBtaW5pbWl6ZSBjcHUgd29yayAqLwogCXNrYiA9IF9fc2tiX2RlcXVldWUoJnEtPmRpcmVjdF9xdWV1ZSk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7CitvazoKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKIAkJc2NoLT5xLnFsZW4tLTsKIAkJcmV0dXJuIHNrYjsKQEAgLTg4NCwxMSArODg1LDggQEAKIAkJCWludCBwcmlvID0gZmZ6KG0pOwogCQkJbSB8PSAxIDw8IHByaW87CiAJCQlza2IgPSBodGJfZGVxdWV1ZV90cmVlKHEsIHByaW8sIGxldmVsKTsKLQkJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7Ci0JCQkJc2NoLT5xLnFsZW4tLTsKLQkJCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7Ci0JCQkJZ290byBmaW47Ci0JCQl9CisJCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKKwkJCQlnb3RvIG9rOwogCQl9CiAJfQogCXNjaC0+cXN0YXRzLm92ZXJsaW1pdHMrKzsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCmluZGV4IDIxZjEzZGEuLjQzNmEyZTcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwpAQCAtODMsNyArODMsNiBAQAogCiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIHFkaXNjKTsKIAlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuKys7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KQEAgLTExMiw2ICsxMTEsNyBAQAogCQkJcWRpc2MgPSBxLT5xdWV1ZXNbcS0+Y3VyYmFuZF07CiAJCQlza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7CiAJCQlpZiAoc2tiKSB7CisJCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQkJc2NoLT5xLnFsZW4tLTsKIAkJCQlyZXR1cm4gc2tiOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCmluZGV4IDFjNGJjZTguLjZhMzAwNmIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYworKysgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKQEAgLTI0MCw3ICsyNDAsNiBAQAogCiAJaWYgKGxpa2VseShyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKIAkJc2NoLT5xLnFsZW4rKzsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJfSBlbHNlIGlmIChuZXRfeG1pdF9kcm9wX2NvdW50KHJldCkpIHsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAl9CkBAIC0yODksNiArMjg4LDcgQEAKIAkJCQlza2ItPnRzdGFtcC50djY0ID0gMDsKICNlbmRpZgogCQkJcHJfZGVidWcoIm5ldGVtX2RlcXVldWU6IHJldHVybiBza2I9JXBcbiIsIHNrYik7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlyZXR1cm4gc2tiOwogCQl9CkBAIC00NzYsNyArNDc2LDYgQEAKIAkJX19za2JfcXVldWVfYWZ0ZXIobGlzdCwgc2tiLCBuc2tiKTsKIAogCQlzY2gtPnFzdGF0cy5iYWNrbG9nICs9IHFkaXNjX3BrdF9sZW4obnNrYik7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBuc2tiKTsKIAogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCmluZGV4IDk2NjE1OGQuLmZiZDcxMGQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jCisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCkBAIC04NCw3ICs4NCw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcWRpc2MpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpAQCAtMTE2LDYgKzExNSw3IEBACiAJCXN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLT5xdWV1ZXNbcHJpb107CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7CiAJCWlmIChza2IpIHsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcmVkLmMgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCmluZGV4IGE2MDA5YzUuLjlmOThkYmQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwpAQCAtOTQsNyArOTQsNiBAQAogCiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIGNoaWxkKTsKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAl9IGVsc2UgaWYgKG5ldF94bWl0X2Ryb3BfY291bnQocmV0KSkgewogCQlxLT5zdGF0cy5wZHJvcCsrOwpAQCAtMTE0LDExICsxMTMsMTMgQEAKIAlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gcS0+cWRpc2M7CiAKIAlza2IgPSBjaGlsZC0+ZGVxdWV1ZShjaGlsZCk7Ci0JaWYgKHNrYikKKwlpZiAoc2tiKSB7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbi0tOwotCWVsc2UgaWYgKCFyZWRfaXNfaWRsaW5nKCZxLT5wYXJtcykpCi0JCXJlZF9zdGFydF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOwotCisJfSBlbHNlIHsKKwkJaWYgKCFyZWRfaXNfaWRsaW5nKCZxLT5wYXJtcykpCisJCQlyZWRfc3RhcnRfb2ZfaWRsZV9wZXJpb2QoJnEtPnBhcm1zKTsKKwl9CiAJcmV0dXJuIHNrYjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKaW5kZXggMjM5ZWM1My4uZWRlYThjZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuYworKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCkBAIC00MDIsMTAgKzQwMiw4IEBACiAJCXEtPnRhaWwgPSBzbG90OwogCQlzbG90LT5hbGxvdCA9IHEtPnNjYWxlZF9xdWFudHVtOwogCX0KLQlpZiAoKytzY2gtPnEucWxlbiA8PSBxLT5saW1pdCkgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKKwlpZiAoKytzY2gtPnEucWxlbiA8PSBxLT5saW1pdCkKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7Ci0JfQogCiAJc2ZxX2Ryb3Aoc2NoKTsKIAlyZXR1cm4gTkVUX1hNSVRfQ047CkBAIC00NDUsNiArNDQzLDcgQEAKIAl9CiAJc2tiID0gc2xvdF9kZXF1ZXVlX2hlYWQoc2xvdCk7CiAJc2ZxX2RlYyhxLCBhKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gcWRpc2NfcGt0X2xlbihza2IpOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RiZi5jIGIvbmV0L3NjaGVkL3NjaF90YmYuYwppbmRleCA3NzU2NWU3Li5lOTMxNjU4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RiZi5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogCX0KIAogCXNjaC0+cS5xbGVuKys7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CiAKQEAgLTE4Nyw2ICsxODYsNyBAQAogCQkJcS0+cHRva2VucyA9IHB0b2tzOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJcmV0dXJuIHNrYjsKIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IDg0Y2U0OGUuLmQ4NGU3MzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC04Nyw3ICs4Nyw2IEBACiAKIAlpZiAocS0+cS5xbGVuIDwgZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJX19za2JfcXVldWVfdGFpbCgmcS0+cSwgc2tiKTsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KIApAQCAtMTExLDYgKzExMCw4IEBACiAJCQlkYXQtPm0tPnNsYXZlcyA9IHNjaDsKIAkJCW5ldGlmX3dha2VfcXVldWUobSk7CiAJCX0KKwl9IGVsc2UgeworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAl9CiAJc2NoLT5xLnFsZW4gPSBkYXQtPnEucWxlbiArIGRhdF9xdWV1ZS0+cWRpc2MtPnEucWxlbjsKIAlyZXR1cm4gc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA3YmQzYmJiLi5kODAyZTk0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTYwOSw5ICsxNjA5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgc3ZjX2JjX3NvY2tfZnJlZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCiB7Ci0JaWYgKHhwcnQpIHsKLQkJa2ZyZWUoeHBydC0+eHB0X2JjX3NpZCk7CisJaWYgKHhwcnQpCiAJCWtmcmVlKGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpKTsKLQl9CiB9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL01ha2VmaWxlIGIvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQppbmRleCA2Yzk0MTA1Li4xYmYwOTBhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKQEAgLTEzLDggKzEzLDggQEAKIAlyZXF1ZXN0X2tleV9hdXRoLm8gXAogCXVzZXJfZGVmaW5lZC5vCiAKLW9iai0kKENPTkZJR19UUlVTVEVEX0tFWVMpICs9IHRydXN0ZWRfZGVmaW5lZC5vCi1vYmotJChDT05GSUdfRU5DUllQVEVEX0tFWVMpICs9IGVuY3J5cHRlZF9kZWZpbmVkLm8KK29iai0kKENPTkZJR19UUlVTVEVEX0tFWVMpICs9IHRydXN0ZWQubworb2JqLSQoQ09ORklHX0VOQ1JZUFRFRF9LRVlTKSArPSBlbmNyeXB0ZWQubwogb2JqLSQoQ09ORklHX0tFWVNfQ09NUEFUKSArPSBjb21wYXQubwogb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mubwogb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5jCnJlbmFtZSB0byBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5jCmluZGV4IDI4NzkxYTYuLjllN2U0Y2UgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkX2RlZmluZWQuYworKysgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KIAotI2luY2x1ZGUgImVuY3J5cHRlZF9kZWZpbmVkLmgiCisjaW5jbHVkZSAiZW5jcnlwdGVkLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIEtFWV9UUlVTVEVEX1BSRUZJWFtdID0gInRydXN0ZWQ6IjsKIHN0YXRpYyBjb25zdCBjaGFyIEtFWV9VU0VSX1BSRUZJWFtdID0gInVzZXI6IjsKQEAgLTg4OCw2ICs4ODgsNyBAQAogb3V0OgogCWVuY3J5cHRlZF9zaGFzaF9yZWxlYXNlKCk7CiAJcmV0dXJuIHJldDsKKwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9lbmNyeXB0ZWQodm9pZCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkX2RlZmluZWQuaCBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkX2RlZmluZWQuaApyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuaApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCmluZGV4IGVkZmE1MGQuLmE1MmFhN2MgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAorKysgYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKQEAgLTg3LDEzICs4NywxMyBAQAogZXh0ZXJuIGludCBfX2tleV9saW5rX2JlZ2luKHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICAgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkJICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpOworCQkJICAgIHVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYyk7CiBleHRlcm4gaW50IF9fa2V5X2xpbmtfY2hlY2tfbGl2ZV9rZXkoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5KTsKIGV4dGVybiB2b2lkIF9fa2V5X2xpbmsoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5LAotCQkgICAgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYyk7CisJCSAgICAgICB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpOwogZXh0ZXJuIHZvaWQgX19rZXlfbGlua19lbmQoc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSAgIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJCSAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jKTsKKwkJCSAgIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2MpOwogCiBleHRlcm4ga2V5X3JlZl90IF9fa2V5cmluZ19zZWFyY2hfb25lKGtleV9yZWZfdCBrZXlyaW5nX3JlZiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCA4NGQ0ZWI1Li4xYzJkNDNkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCQkJCSAgICAgIHNpemVfdCBkYXRhbGVuLAogCQkJCSAgICAgIHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkJICAgICAgc3RydWN0IGtleSAqYXV0aGtleSwKLQkJCQkgICAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKQorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYykKIHsKIAlpbnQgcmV0LCBhd2FrZW47CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCQkJICAgICBzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJICAgICBzdHJ1Y3Qga2V5ICphdXRoa2V5KQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJaW50IHJldDsKIAogCWlmIChrZXlyaW5nKSB7CkBAIC01MjYsNyArNTI2LDcgQEAKIAkJCXN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQlzdHJ1Y3Qga2V5ICphdXRoa2V5KQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKIAlpbnQgcmV0LCBhd2FrZW4sIGxpbmtfcmV0ID0gMDsKIApAQCAtODE0LDcgKzgxNCw3IEBACiAJCQkgICAgICAga2V5X3Blcm1fdCBwZXJtLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBrZXlfdHlwZSAqa3R5cGU7CiAJc3RydWN0IGtleSAqa2V5cmluZywgKmtleSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDkyMDI0ZWQuLjU2MjBmMDggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC0yNSw2ICsyNSw4IEBACiAJCShrZXlyaW5nKS0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLAkJCVwKIAkJcndzZW1faXNfbG9ja2VkKChzdHJ1Y3Qgcndfc2VtYXBob3JlICopJihrZXlyaW5nKS0+c2VtKSkpCiAKKyNkZWZpbmUgS0VZX0xJTktfRklYUVVPVEEgMVVMCisKIC8qCiAgKiBXaGVuIHBsdW1iaW5nIHRoZSBkZXB0aHMgb2YgdGhlIGtleSB0cmVlLCB0aGlzIHNldHMgYSBoYXJkIGxpbWl0CiAgKiBzZXQgb24gaG93IGRlZXAgd2UncmUgd2lsbGluZyB0byBnby4KQEAgLTY5OSwxMSArNzAxLDExIEBACiAgKiBQcmVhbGxvY2F0ZSBtZW1vcnkgc28gdGhhdCBhIGtleSBjYW4gYmUgbGlua2VkIGludG8gdG8gYSBrZXlyaW5nLgogICovCiBpbnQgX19rZXlfbGlua19iZWdpbihzdHJ1Y3Qga2V5ICprZXlyaW5nLCBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCi0JCSAgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYykKKwkJICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKQogCV9fYWNxdWlyZXMoJmtleXJpbmctPnNlbSkKIHsKIAlzdHJ1Y3Qga2V5cmluZ19saXN0ICprbGlzdCwgKm5rbGlzdDsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCXVuc2lnbmVkIG1heDsKIAlzaXplX3Qgc2l6ZTsKIAlpbnQgbG9vcCwgcmV0OwpAQCAtNzQ2LDYgKzc0OCw3IEBACiAKIAkJCQkvKiBub3RlIHJlcGxhY2VtZW50IHNsb3QgKi8KIAkJCQlrbGlzdC0+ZGVsa2V5ID0gbmtsaXN0LT5kZWxrZXkgPSBsb29wOworCQkJCXByZWFsbG9jID0gKHVuc2lnbmVkIGxvbmcpbmtsaXN0OwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQpAQCAtNzYwLDYgKzc2Myw3IEBACiAJaWYgKGtsaXN0ICYmIGtsaXN0LT5ua2V5cyA8IGtsaXN0LT5tYXhrZXlzKSB7CiAJCS8qIHRoZXJlJ3Mgc3VmZmljaWVudCBzbGFjayBzcGFjZSB0byBhcHBlbmQgZGlyZWN0bHkgKi8KIAkJbmtsaXN0ID0gTlVMTDsKKwkJcHJlYWxsb2MgPSBLRVlfTElOS19GSVhRVU9UQTsKIAl9IGVsc2UgewogCQkvKiBncm93IHRoZSBrZXkgbGlzdCAqLwogCQltYXggPSA0OwpAQCAtNzk0LDggKzc5OCw5IEBACiAJCW5rbGlzdC0+a2V5c1tua2xpc3QtPmRlbGtleV0gPSBOVUxMOwogCX0KIAorCXByZWFsbG9jID0gKHVuc2lnbmVkIGxvbmcpbmtsaXN0IHwgS0VZX0xJTktfRklYUVVPVEE7CiBkb25lOgotCSpfcHJlYWxsb2MgPSBua2xpc3Q7CisJKl9wcmVhbGxvYyA9IHByZWFsbG9jOwogCWtsZWF2ZSgiID0gMCIpOwogCXJldHVybiAwOwogCkBAIC04MzYsMTIgKzg0MSwxMiBAQAogICogY29tYmluYXRpb24uCiAgKi8KIHZvaWQgX19rZXlfbGluayhzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5ICprZXksCi0JCXN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpCisJCXVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYykKIHsKIAlzdHJ1Y3Qga2V5cmluZ19saXN0ICprbGlzdCwgKm5rbGlzdDsKIAotCW5rbGlzdCA9ICpfcHJlYWxsb2M7Ci0JKl9wcmVhbGxvYyA9IE5VTEw7CisJbmtsaXN0ID0gKHN0cnVjdCBrZXlyaW5nX2xpc3QgKikoKl9wcmVhbGxvYyAmIH5LRVlfTElOS19GSVhRVU9UQSk7CisJKl9wcmVhbGxvYyA9IDA7CiAKIAlrZW50ZXIoIiVkLCVkLCVwIiwga2V5cmluZy0+c2VyaWFsLCBrZXktPnNlcmlhbCwgbmtsaXN0KTsKIApAQCAtODgxLDIwICs4ODYsMjIgQEAKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggX19rZXlfbGlua19iZWdpbigpIGhhdmluZyBiZWluZyBjYWxsZWQuCiAgKi8KIHZvaWQgX19rZXlfbGlua19lbmQoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2MpCisJCSAgICB1bnNpZ25lZCBsb25nIHByZWFsbG9jKQogCV9fcmVsZWFzZXMoJmtleXJpbmctPnNlbSkKIHsKIAlCVUdfT04odHlwZSA9PSBOVUxMKTsKIAlCVUdfT04odHlwZS0+bmFtZSA9PSBOVUxMKTsKLQlrZW50ZXIoIiVkLCVzLCVwIiwga2V5cmluZy0+c2VyaWFsLCB0eXBlLT5uYW1lLCBwcmVhbGxvYyk7CisJa2VudGVyKCIlZCwlcywlbHgiLCBrZXlyaW5nLT5zZXJpYWwsIHR5cGUtPm5hbWUsIHByZWFsbG9jKTsKIAogCWlmICh0eXBlID09ICZrZXlfdHlwZV9rZXlyaW5nKQogCQl1cF93cml0ZSgma2V5cmluZ19zZXJpYWxpc2VfbGlua19zZW0pOwogCiAJaWYgKHByZWFsbG9jKSB7Ci0JCWtmcmVlKHByZWFsbG9jKTsKLQkJa2V5X3BheWxvYWRfcmVzZXJ2ZShrZXlyaW5nLAotCQkJCSAgICBrZXlyaW5nLT5kYXRhbGVuIC0gS0VZUVVPVEFfTElOS19CWVRFUyk7CisJCWlmIChwcmVhbGxvYyAmIEtFWV9MSU5LX0ZJWFFVT1RBKQorCQkJa2V5X3BheWxvYWRfcmVzZXJ2ZShrZXlyaW5nLAorCQkJCQkgICAga2V5cmluZy0+ZGF0YWxlbiAtCisJCQkJCSAgICBLRVlRVU9UQV9MSU5LX0JZVEVTKTsKKwkJa2ZyZWUoKHN0cnVjdCBrZXlyaW5nX2xpc3QgKikocHJlYWxsb2MgJiB+S0VZX0xJTktfRklYUVVPVEEpKTsKIAl9CiAJdXBfd3JpdGUoJmtleXJpbmctPnNlbSk7CiB9CkBAIC05MjEsNyArOTI4LDcgQEAKICAqLwogaW50IGtleV9saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCWludCByZXQ7CiAKIAlrZXlfY2hlY2soa2V5cmluZyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggOWE3ZmIzOS4uYTNkYzBkNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtMzUyLDggKzM1Miw4IEBACiAJCQkgICAgICAgc3RydWN0IGtleV91c2VyICp1c2VyLAogCQkJICAgICAgIHN0cnVjdCBrZXkgKipfa2V5KQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlzdHJ1Y3Qga2V5ICprZXk7CiAJa2V5X3JlZl90IGtleV9yZWY7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5jCnJlbmFtZSB0byBzZWN1cml0eS9rZXlzL3RydXN0ZWQuYwppbmRleCAyODM2YzZkLi44M2ZjOTJlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5jCisrKyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHBtLmg+CiAjaW5jbHVkZSA8bGludXgvdHBtX2NvbW1hbmQuaD4KIAotI2luY2x1ZGUgInRydXN0ZWRfZGVmaW5lZC5oIgorI2luY2x1ZGUgInRydXN0ZWQuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgaG1hY19hbGdbXSA9ICJobWFjKHNoYTEpIjsKIHN0YXRpYyBjb25zdCBjaGFyIGhhc2hfYWxnW10gPSAic2hhMSI7CkBAIC0xMDMyLDYgKzEwMzIsNyBAQAogCXJldCA9IGRhdGFibG9iX3BhcnNlKGRhdGFibG9iLCBuZXdfcCwgbmV3X28pOwogCWlmIChyZXQgIT0gT3B0X3VwZGF0ZSkgewogCQlyZXQgPSAtRUlOVkFMOworCQlrZnJlZShuZXdfcCk7CiAJCWdvdG8gb3V0OwogCX0KIAkvKiBjb3B5IG9sZCBrZXkgdmFsdWVzLCBhbmQgcmVzZWFsIHdpdGggbmV3IHBjcnMgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmggYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuaApyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBlMjc2ZWI0Li5jOGQ2OTkyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zMTk4LDcgKzMxOTgsMTEgQEAKIHsKIAlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjcmVkLT5zZWN1cml0eTsKIAotCUJVR19PTigodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpOworCS8qCisJICogY3JlZC0+c2VjdXJpdHkgPT0gTlVMTCBpZiBzZWN1cml0eV9jcmVkX2FsbG9jX2JsYW5rKCkgb3IKKwkgKiBzZWN1cml0eV9wcmVwYXJlX2NyZWRzKCkgcmV0dXJuZWQgYW4gZXJyb3IuCisJICovCisJQlVHX09OKGNyZWQtPnNlY3VyaXR5ICYmICh1bnNpZ25lZCBsb25nKSBjcmVkLT5zZWN1cml0eSA8IFBBR0VfU0laRSk7CiAJY3JlZC0+c2VjdXJpdHkgPSAodm9pZCAqKSAweDdVTDsKIAlrZnJlZSh0c2VjKTsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYwppbmRleCBjM2Y4NDVjLi5hNTMzNzMyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlwLT5ib29sX3ZhbF90b19zdHJ1Y3QgPSAoc3RydWN0IGNvbmRfYm9vbF9kYXR1bSAqKikKIAkJa21hbGxvYyhwLT5wX2Jvb2xzLm5wcmltICogc2l6ZW9mKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0gKiksIEdGUF9LRVJORUwpOwogCWlmICghcC0+Ym9vbF92YWxfdG9fc3RydWN0KQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKaW5kZXggYmU5ZGUzOC4uNTczNjM1NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwpAQCAtNTAxLDggKzUwMSw4IEBACiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIAotCXJjID0gLUVOT01FTTsKLQlpZiAoY29uZF9pbml0X2Jvb2xfaW5kZXhlcyhwKSkKKwlyYyA9IGNvbmRfaW5pdF9ib29sX2luZGV4ZXMocCk7CisJaWYgKHJjKQogCQlnb3RvIG91dDsKIAogCWZvciAoaSA9IDA7IGkgPCBTWU1fTlVNOyBpKyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IDkxYWNjOWEuLjdjMWZjNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtMzAsNiArMzAsOCBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FCSJhYWNpLXBsMDQxIgogCisjZGVmaW5lIEZSQU1FX1BFUklPRF9VUwkyMQorCiAvKgogICogUE0gc3VwcG9ydCBpcyBub3QgY29tcGxldGUuICBUdXJuIGl0IG9mZi4KICAqLwpAQCAtNDgsNyArNTAsMTEgQEAKIAlpZiAodiAmIFNMRlJfMVJYVikKIAkJcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0wxUlgpOwogCi0Jd3JpdGVsKG1haW5jciwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwlpZiAobWFpbmNyICE9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUikpIHsKKwkJd3JpdGVsKG1haW5jciwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwkJcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwkJdWRlbGF5KDEpOworCX0KIH0KIAogLyoKQEAgLTY0LDggKzcwLDggQEAKIAkJCSAgICB1bnNpZ25lZCBzaG9ydCB2YWwpCiB7CiAJc3RydWN0IGFhY2kgKmFhY2kgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisJaW50IHRpbWVvdXQ7CiAJdTMyIHY7Ci0JaW50IHRpbWVvdXQgPSA1MDAwOwogCiAJaWYgKGFjOTctPm51bSA+PSA0KQogCQlyZXR1cm47CkBAIC04MSwxNCArODcsMTcgQEAKIAl3cml0ZWwodmFsIDw8IDQsIGFhY2ktPmJhc2UgKyBBQUNJX1NMMlRYKTsKIAl3cml0ZWwocmVnIDw8IDEyLCBhYWNpLT5iYXNlICsgQUFDSV9TTDFUWCk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHRoZSB0cmFuc21pc3Npb24gb2YgYm90aCBzbG90cyB0byBjb21wbGV0ZS4KLQkgKi8KKwkvKiBJbml0aWFsbHksIHdhaXQgb25lIGZyYW1lIHBlcmlvZCAqLworCXVkZWxheShGUkFNRV9QRVJJT0RfVVMpOworCisJLyogQW5kIHRoZW4gd2FpdCBhbiBhZGRpdGlvbmFsIGVpZ2h0IGZyYW1lIHBlcmlvZHMgZm9yIGl0IHRvIGJlIHNlbnQgKi8KKwl0aW1lb3V0ID0gRlJBTUVfUEVSSU9EX1VTICogODsKIAlkbyB7CisJCXVkZWxheSgxKTsKIAkJdiA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMRlIpOwogCX0gd2hpbGUgKCh2ICYgKFNMRlJfMVRYQnxTTEZSXzJUWEIpKSAmJiAtLXRpbWVvdXQpOwogCi0JaWYgKCF0aW1lb3V0KQorCWlmICh2ICYgKFNMRlJfMVRYQnxTTEZSXzJUWEIpKQogCQlkZXZfZXJyKCZhYWNpLT5kZXYtPmRldiwKIAkJCSJ0aW1lb3V0IHdhaXRpbmcgZm9yIHdyaXRlIHRvIGNvbXBsZXRlXG4iKTsKIApAQCAtMTAxLDkgKzExMCw4IEBACiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgYWFjaV9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcpCiB7CiAJc3RydWN0IGFhY2kgKmFhY2kgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisJaW50IHRpbWVvdXQsIHJldHJpZXMgPSAxMDsKIAl1MzIgdjsKLQlpbnQgdGltZW91dCA9IDUwMDA7Ci0JaW50IHJldHJpZXMgPSAxMDsKIAogCWlmIChhYzk3LT5udW0gPj0gNCkKIAkJcmV0dXJuIH4wOwpAQCAtMTE3LDM1ICsxMjUsMzQgQEAKIAkgKi8KIAl3cml0ZWwoKHJlZyA8PCAxMikgfCAoMSA8PCAxOSksIGFhY2ktPmJhc2UgKyBBQUNJX1NMMVRYKTsKIAotCS8qCi0JICogV2FpdCBmb3IgdGhlIHRyYW5zbWlzc2lvbiB0byBjb21wbGV0ZS4KLQkgKi8KKwkvKiBJbml0aWFsbHksIHdhaXQgb25lIGZyYW1lIHBlcmlvZCAqLworCXVkZWxheShGUkFNRV9QRVJJT0RfVVMpOworCisJLyogQW5kIHRoZW4gd2FpdCBhbiBhZGRpdGlvbmFsIGVpZ2h0IGZyYW1lIHBlcmlvZHMgZm9yIGl0IHRvIGJlIHNlbnQgKi8KKwl0aW1lb3V0ID0gRlJBTUVfUEVSSU9EX1VTICogODsKIAlkbyB7CisJCXVkZWxheSgxKTsKIAkJdiA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMRlIpOwogCX0gd2hpbGUgKCh2ICYgU0xGUl8xVFhCKSAmJiAtLXRpbWVvdXQpOwogCi0JaWYgKCF0aW1lb3V0KSB7CisJaWYgKHYgJiBTTEZSXzFUWEIpIHsKIAkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsICJ0aW1lb3V0IG9uIHNsb3QgMSBUWCBidXN5XG4iKTsKIAkJdiA9IH4wOwogCQlnb3RvIG91dDsKIAl9CiAKLQkvKgotCSAqIEdpdmUgdGhlIEFDJzk3IGNvZGVjIG1vcmUgdGhhbiBlbm91Z2ggdGltZQotCSAqIHRvIHJlc3BvbmQuICg0MnVzID0gfjIgZnJhbWVzIGF0IDQ4a0h6LikKLQkgKi8KLQl1ZGVsYXkoNDIpOworCS8qIE5vdyB3YWl0IGZvciB0aGUgcmVzcG9uc2UgZnJhbWUgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKIAotCS8qCi0JICogV2FpdCBmb3Igc2xvdCAyIHRvIGluZGljYXRlIGRhdGEuCi0JICovCi0JdGltZW91dCA9IDUwMDA7CisJLyogQW5kIHRoZW4gd2FpdCBhbiBhZGRpdGlvbmFsIGVpZ2h0IGZyYW1lIHBlcmlvZHMgZm9yIGRhdGEgKi8KKwl0aW1lb3V0ID0gRlJBTUVfUEVSSU9EX1VTICogODsKIAlkbyB7CisJCXVkZWxheSgxKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKSAmIChTTEZSXzFSWFZ8U0xGUl8yUlhWKTsKIAl9IHdoaWxlICgodiAhPSAoU0xGUl8xUlhWfFNMRlJfMlJYVikpICYmIC0tdGltZW91dCk7CiAKLQlpZiAoIXRpbWVvdXQpIHsKKwlpZiAodiAhPSAoU0xGUl8xUlhWfFNMRlJfMlJYVikpIHsKIAkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsICJ0aW1lb3V0IG9uIFJYIHZhbGlkXG4iKTsKIAkJdiA9IH4wOwogCQlnb3RvIG91dDsKQEAgLTE3OSw2ICsxODYsNyBAQAogCWludCB0aW1lb3V0ID0gNTAwMDsKIAogCWRvIHsKKwkJdWRlbGF5KDEpOwogCQl2YWwgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9TUik7CiAJfSB3aGlsZSAodmFsICYgbWFzayAmJiB0aW1lb3V0LS0pOwogfQpAQCAtODc0LDcgKzg4Miw3IEBACiAJICogR2l2ZSB0aGUgQUMnOTcgY29kZWMgbW9yZSB0aGFuIGVub3VnaCB0aW1lCiAJICogdG8gd2FrZSB1cC4gKDQydXMgPSB+MiBmcmFtZXMgYXQgNDhrSHouKQogCSAqLwotCXVkZWxheSg0Mik7CisJdWRlbGF5KEZSQU1FX1BFUklPRF9VUyAqIDIpOwogCiAJcmV0ID0gc25kX2FjOTdfYnVzKGFhY2ktPmNhcmQsIDAsICZhYWNpX2J1c19vcHMsIGFhY2ksICZhYzk3X2J1cyk7CiAJaWYgKHJldCkKQEAgLTk4OSw2ICs5OTcsOCBAQAogCSAqIGRpc2FibGluZyB0aGUgY2hhbm5lbCBkb2Vzbid0IGNsZWFyIHRoZSBGSUZPLgogCSAqLwogCXdyaXRlbChhYWNpLT5tYWluY3IgJiB+TUFJTkNSX0lFLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJdWRlbGF5KDEpOwogCXdyaXRlbChhYWNpLT5tYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWM5N2MuYyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKaW5kZXggMTBjM2E4Ny4uYjMxMDcwMiAxMDA2NDQKLS0tIGEvc291bmQvYXRtZWwvYWM5N2MuYworKysgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCkBAIC0zMyw5ICszMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KIAogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MQorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiYWM5N2MuaCIKIAogZW51bSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggZGEwMzU5Ny4uNWM0MjZkZiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtNTUsMTQgKzU1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KLQogLyoKICAqICAgICAgZ2xvYmFscwogICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvTWFrZWZpbGUgYi9zb3VuZC9vc3MvTWFrZWZpbGUKaW5kZXggOTZmMTRkYy4uOTBmZmI5OSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL01ha2VmaWxlCisrKyBiL3NvdW5kL29zcy9NYWtlZmlsZQpAQCAtODcsNyArODcsNyBAQAogCSQob2JqKS9iaW4yaGV4IHBzc19zeW50aCA8ICQ8ID4gJEAKIGVsc2UKICAgICAkKG9iaikvcHNzX2Jvb3QuaDoKLQkoCQkJCQkJCVwKKwkkKFEpKAkJCQkJCQlcCiAJICAgIGVjaG8gJ3N0YXRpYyB1bnNpZ25lZCBjaGFyICogcHNzX3N5bnRoID0gTlVMTDsnOwlcCiAJICAgIGVjaG8gJ3N0YXRpYyBpbnQgcHNzX3N5bnRoTGVuID0gMDsnOwkJXAogCSkgPiAkQApAQCAtMTAyLDcgKzEwMiw3IEBACiAJJChvYmopL2hleDJoZXggLWkgdHJpeF9ib290IDwgJDwgPiAkQAogZWxzZQogICAgICQob2JqKS90cml4X2Jvb3QuaDoKLQkoCQkJCQkJCVwKKwkkKFEpKAkJCQkJCQlcCiAJICAgIGVjaG8gJ3N0YXRpYyB1bnNpZ25lZCBjaGFyICogdHJpeF9ib290ID0gTlVMTDsnOwlcCiAJICAgIGVjaG8gJ3N0YXRpYyBpbnQgdHJpeF9ib290X2xlbiA9IDA7JzsJCVwKIAkpID4gJEAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDYxMTc1OTUuLjU3MzU5NGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtOTc5LDMxICs5NzksMjUgQEAKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwogCXN3aXRjaCAoYml0cmF0ZSkgewotI2RlZmluZSBBWkZfRk1UX1hMQVRFKGluX2ZyZXEsIG91dF9iaXRzKSBcCi0JZG8geyBcCi0JCWNhc2UgQVpGX0ZSRVFfICMjIGluX2ZyZXE6IFwKLQkJCWZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXyAjIyBvdXRfYml0czsgXAotCQkJYnJlYWs7IFwKLQl9IHdoaWxlICgwKTsKLQlBWkZfRk1UX1hMQVRFKDQwMDAsIFNVU1BFQ1RFRF80MDAwKQotCUFaRl9GTVRfWExBVEUoNDgwMCwgU1VTUEVDVEVEXzQ4MDApCi0JLyogdGhlIEFaRjMzMjggbmFtZXMgaXQgIjU1MTAiIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uOiAqLwotCUFaRl9GTVRfWExBVEUoNTUxMiwgNTUxMCkKLQlBWkZfRk1UX1hMQVRFKDY2MjAsIDY2MjApCi0JQVpGX0ZNVF9YTEFURSg4MDAwLCA4MDAwKQotCUFaRl9GTVRfWExBVEUoOTYwMCwgOTYwMCkKLQlBWkZfRk1UX1hMQVRFKDExMDI1LCAxMTAyNSkKLQlBWkZfRk1UX1hMQVRFKDEzMjQwLCBTVVNQRUNURURfMTMyNDApCi0JQVpGX0ZNVF9YTEFURSgxNjAwMCwgMTYwMDApCi0JQVpGX0ZNVF9YTEFURSgyMjA1MCwgMjIwNTApCi0JQVpGX0ZNVF9YTEFURSgzMjAwMCwgMzIwMDApCisJY2FzZSBBWkZfRlJFUV80MDAwOiAgZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzQwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNDgwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRX1NVU1BFQ1RFRF80ODAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzU1MTI6CisJCS8qIHRoZSBBWkYzMzI4IG5hbWVzIGl0ICI1NTEwIiBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiAqLworCQkJICAgICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV81NTEwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzY2MjA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV82NjIwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzgwMDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV84MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzk2MDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV85NjAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzExMDI1OiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8xMTAyNTsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8xMzI0MDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzEzMjQwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzE2MDAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8xNjAwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8yMjA1MDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfMjIwNTA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMzIwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzMyMDAwOyBicmVhazsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidW5rbm93biBiaXRyYXRlICVkLCBhc3N1bWluZyA0NC4xa0h6IVxuIiwgYml0cmF0ZSk7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwotCUFaRl9GTVRfWExBVEUoNDQxMDAsIDQ0MTAwKQotCUFaRl9GTVRfWExBVEUoNDgwMDAsIDQ4MDAwKQotCUFaRl9GTVRfWExBVEUoNjYyMDAsIFNVU1BFQ1RFRF82NjIwMCkKLSN1bmRlZiBBWkZfRk1UX1hMQVRFCisJY2FzZSBBWkZfRlJFUV80NDEwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfNDQxMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNDgwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzQ4MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzY2MjAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfNjYyMDA7IGJyZWFrOwogCX0KIAkvKiB2YWwgPSAweGZmMDc7IDNtMjcuOTkzcyAoNjUzMDFIejsgLT4gNjQwMDBIej8/PykgaG1tLCA2NjEyMCwgNjU5NjcsIDY2MTIzICovCiAJLyogdmFsID0gMHhmZjA5OyAxN20xNS4wOThzICgxMzEyMyw0NzhIejsgLT4gMTIwMDBIej8/PykgaG1tLCAxMzIzNy4ySHo/ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9lbGQuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCmluZGV4IDRhNjYzNDcuLjc0YjA1NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAlzbmRfcHJpbnRfcGNtX3JhdGVzKGEtPnJhdGVzLCBidWYsIHNpemVvZihidWYpKTsKIAogCWlmIChhLT5mb3JtYXQgPT0gQVVESU9fQ09ESU5HX1RZUEVfTFBDTSkKLQkJc25kX3ByaW50X3BjbV9iaXRzKGEtPnNhbXBsZV9iaXRzLCBidWYyICsgOCwgc2l6ZW9mKGJ1ZjIgLSA4KSk7CisJCXNuZF9wcmludF9wY21fYml0cyhhLT5zYW1wbGVfYml0cywgYnVmMiArIDgsIHNpemVvZihidWYyKSAtIDgpOwogCWVsc2UgaWYgKGEtPm1heF9iaXRyYXRlKQogCQlzbnByaW50ZihidWYyLCBzaXplb2YoYnVmMiksCiAJCQkJIiwgbWF4IGJpdHJhdGUgPSAlZCIsIGEtPm1heF9iaXRyYXRlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCA5YmIwMzBhLi5mYmU5N2QzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC04NSw2ICs4NSw3IEBACiAJdW5zaWduZWQgaW50IGF1dG9fbWljOwogCWludCBhdXRvX21pY19leHQ7CQkvKiBhdXRvY2ZnLmlucHV0c1tdIGluZGV4IGZvciBleHQgbWljICovCiAJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKKwloZGFfbmlkX3Qgc2xhdmVfZGlnX291dHNbMl07CiAKIAkvKiBjYXB0dXJlICovCiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKQEAgLTEyNyw2ICsxMjgsNyBAQAogCXVuc2lnbmVkIGludCBpZGVhcGFkOjE7CiAJdW5zaWduZWQgaW50IHRoaW5rcGFkOjE7CiAJdW5zaWduZWQgaW50IGhwX2xhcHRvcDoxOworCXVuc2lnbmVkIGludCBhc3VzOjE7CiAKIAl1bnNpZ25lZCBpbnQgZXh0X21pY19wcmVzZW50OwogCXVuc2lnbmVkIGludCByZWNvcmRpbmc7CkBAIC0zNTIsNiArMzU0LDggQEAKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9CiAJCQkJc3BlYy0+ZGlnX2luX25pZDsKIAkJfQorCQlpZiAoc3BlYy0+c2xhdmVfZGlnX291dHNbMF0pCisJCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQwMywxMCArNDA3LDE2IEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWM7CiAJc3RydWN0IGNvbmV4YW50X2phY2sgKmphY2s7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlzcGVjID0gY29kZWMtPnNwZWM7CiAJc25kX2FycmF5X2luaXQoJnNwZWMtPmphY2tzLCBzaXplb2YoKmphY2spLCAzMik7CisKKwlqYWNrID0gc3BlYy0+amFja3MubGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrKyspCisJCWlmIChqYWNrLT5uaWQgPT0gbmlkKQorCQkJcmV0dXJuIDAgOyAvKiBhbHJlYWR5IHByZXNlbnQgKi8KKwogCWphY2sgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5qYWNrcyk7CiAJbmFtZSA9ICh0eXBlID09IFNORF9KQUNLX0hFQURQSE9ORSkgPyAiSGVhZHBob25lIiA6ICJNaWMiIDsKIApAQCAtMjEwMCw3ICsyMTEwLDcgQEAKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9kYWNfbmlkc1sxXSA9IHsgMHgxMCB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2FkY19uaWRzWzNdID0geyAweDE0LCAweDE1LCAweDE2IH07CiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MTcgfTsKLSNkZWZpbmUgQ1hUNTA2Nl9TUERJRl9PVVQJMHgyMQorc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkc1syXSA9IHsgMHgyMCwgMHgyMiB9OwogCiAvKiBPTFBDJ3MgbWljcm9waG9uZSBwb3J0IGlzIERDIGNvdXBsZWQgZm9yIHVzZSB3aXRoIGV4dGVybmFsIHNlbnNvcnMsCiAgKiB0aGVyZWZvcmUgd2UgdXNlIGEgNTAlIG1pYyBiaWFzIGluIG9yZGVyIHRvIGNlbnRlciB0aGUgaW5wdXQgc2lnbmFsIHdpdGgKQEAgLTIzMTIsNiArMjMyMiwxOSBAQAogCX0KIH0KIAorCisvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfYXN1c19hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIHByZXNlbnQ9JWRcbiIsIHByZXNlbnQpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTcsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJICAgIHByZXNlbnQgPyAxIDogMCk7Cit9CisKKwogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjM4Nyw2ICsyNDEwLDIzIEBACiAJY3h0NTA2Nl91cGRhdGVfc3BlYWtlcihjb2RlYyk7CiB9CiAKKy8qIERpc3BhdGNoIHRoZSByaWdodCBtaWMgYXV0b3N3aXRjaCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCisJCWN4dDUwNjZfdm9zdHJvX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmlkZWFwYWQpCisJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT50aGlua3BhZCkKKwkJY3h0NTA2Nl90aGlua3BhZF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT5ocF9sYXB0b3ApCisJCWN4dDUwNjZfaHBfbGFwdG9wX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmFzdXMpCisJCWN4dDUwNjZfYXN1c19hdXRvbWljKGNvZGVjKTsKK30KKwogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtMjQwNSw2MCArMjQ0NSwxOSBAQAogfQogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X3Zvc3Ryb19ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGN4dDUwNjZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiB7Ci0Jc25kX3ByaW50ZGQoIkNYVDUwNjZfdm9zdHJvOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewogCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7CisJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CiAJCWJyZWFrOwogCX0KIH0KIAotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl9pZGVhcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X2lkZWFwYWQ6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfaHBfbGFwdG9wX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X2hwX2xhcHRvcDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X3RoaW5rcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X3RoaW5rcGFkOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfdGhpbmtwYWRfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCA9IHsKIAkubnVtX2l0ZW1zID0gNSwKQEAgLTI2MzMsNiArMjYzMiwyNyBAQAogCXNwZWMtPnJlY29yZGluZyA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbmV4YW50X2NoZWNrX2RpZ19vdXRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICBoZGFfbmlkX3QgKmRpZ19waW5zLAorCQkJCSAgICBpbnQgbnVtX3BpbnMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgKm5pZF9sb2MgPSAmc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKywgZGlnX3BpbnMrKykgeworCQl1bnNpZ25lZCBpbnQgY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAqZGlnX3BpbnMpOworCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQljb250aW51ZTsKKwkJaWYgKHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAqZGlnX3BpbnMsIG5pZF9sb2MsIDEpICE9IDEpCisJCQljb250aW51ZTsKKwkJaWYgKHNwZWMtPnNsYXZlX2RpZ19vdXRzWzBdKQorCQkJbmlkX2xvYysrOworCQllbHNlCisJCQluaWRfbG9jID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA2Nl9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CkBAIC0zMDM5LDIwICszMDU5LDExIEBACiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNjZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCiAJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGluaXRcbiIpOwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KSB7CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCi0JCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKLQkJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+dGhpbmtwYWQpCi0JCQljeHQ1MDY2X3RoaW5rcGFkX2F1dG9taWMoY29kZWMpOwotCQllbHNlIGlmIChzcGVjLT5ocF9sYXB0b3ApCi0JCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKKwkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKIAl9CiAJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKIAlyZXR1cm4gMDsKQEAgLTMwODAsNiArMzA5MSw3IEBACiAJQ1hUNTA2Nl9ERUxMX1ZPU1RSTywJLyogRGVsbCBWb3N0cm8gMTAxNWkgKi8KIAlDWFQ1MDY2X0lERUFQQUQsCS8qIExlbm92byBJZGVhUGFkIFUxNTAgKi8KIAlDWFQ1MDY2X1RISU5LUEFELAkvKiBMZW5vdm8gVGhpbmtQYWQgVDQxMHMsIG90aGVycz8gKi8KKwlDWFQ1MDY2X0FTVVMsCQkvKiBBc3VzIEs1MkpVLCBMZW5vdm8gRzU2MCAtIEludCBtaWMgYXQgMHgxYSBhbmQgRXh0IG1pYyBhdCAweDFiICovCiAJQ1hUNTA2Nl9IUF9MQVBUT1AsICAgICAgLyogSFAgTGFwdG9wICovCiAJQ1hUNTA2Nl9NT0RFTFMKIH07CkBAIC0zMDkxLDYgKzMxMDMsNyBAQAogCVtDWFQ1MDY2X0RFTExfVk9TVFJPXQk9ICJkZWxsLXZvc3RybyIsCiAJW0NYVDUwNjZfSURFQVBBRF0JPSAiaWRlYXBhZCIsCiAJW0NYVDUwNjZfVEhJTktQQURdCT0gInRoaW5rcGFkIiwKKwlbQ1hUNTA2Nl9BU1VTXQkJPSAiYXN1cyIsCiAJW0NYVDUwNjZfSFBfTEFQVE9QXQk9ICJocC1sYXB0b3AiLAogfTsKIApAQCAtMzEwMiw3ICszMTE1LDkgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAyLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVFJPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDA4LCAiRGVsbCBJbnNwaXJvbiBPbmUgMTlUIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjBiLCAiSFAgRzYwIiwgQ1hUNTA2Nl9IUF9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZjMsICJBc3VzIEE1MkoiLCBDWFQ1MDY2X0hQX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNmMywgIkFzdXMgQTUySiIsIENYVDUwNjZfQVNVUyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY0MywgIkFzdXMgSzUySlUiLCBDWFQ1MDY2X0FTVVMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBc3VzIFU1MEYiLCBDWFQ1MDY2X0FTVVMpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMWUsICJUb3NoaWJhIFNhdGVsbGl0ZSBDNjUwRCIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY1MCwgIlRvc2hpYmEgU2F0ZWxsaXRlIFA1MDAtUFNQR1NDLTAxODAwVCIsIENYVDUwNjZfT0xQQ19YT18xXzUpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmZTAsICJUb3NoaWJhIFNhdGVsbGl0ZSBQcm8gVDEzMC0xNUYiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKQEAgLTMxMTEsNyArMzEyNiw5IEBACiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIkxlbm92byBUNDAwcyIsIENYVDUwNjZfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYzUsICJUaGlua3BhZCBFZGdlIDEzIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNiwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X0FTVVMpLAogIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzhhZiwgIkxlbm92byBHNTYwIiwgQ1hUNTA2Nl9BU1VTKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBDWFQ1MDY2X0lERUFQQUQpLCAvKiBGYWxsYmFjayBmb3IgTGVub3ZvcyB3aXRob3V0IGRvY2sgbWljICovCiAJe30KIH07CkBAIC0zMTMzLDcgKzMxNTAsOCBAQAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNjZfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gY3h0NTA2Nl9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IENYVDUwNjZfU1BESUZfT1VUOworCWNvbmV4YW50X2NoZWNrX2RpZ19vdXRzKGNvZGVjLCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkcywKKwkgICAgQVJSQVlfU0laRShjeHQ1MDY2X2RpZ291dF9waW5fbmlkcykpOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CiAJc3BlYy0+YWRjX25pZHMgPSBjeHQ1MDY2X2FkY19uaWRzOwogCXNwZWMtPmNhcHNyY19uaWRzID0gY3h0NTA2Nl9jYXBzcmNfbmlkczsKQEAgLTMxNjcsMTcgKzMxODUsMjAgQEAKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMrKzsKIAkJc3BlYy0+ZGVsbF9hdXRvbXV0ZSA9IDE7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA2Nl9BU1VTOgogCWNhc2UgQ1hUNTA2Nl9IUF9MQVBUT1A6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaHBfbGFwdG9wX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJic10gPQogCQkJY3h0NTA2Nl9pbml0X3ZlcmJzX2hwX2xhcHRvcDsKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMrKzsKLQkJc3BlYy0+aHBfbGFwdG9wID0gMTsKKwkJc3BlYy0+aHBfbGFwdG9wID0gYm9hcmRfY29uZmlnID09IENYVDUwNjZfSFBfTEFQVE9QOworCQlzcGVjLT5hc3VzID0gYm9hcmRfY29uZmlnID09IENYVDUwNjZfQVNVUzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKIAkJLyogbm8gUy9QRElGIG91dCAqLwotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CisJCWlmIChib2FyZF9jb25maWcgPT0gQ1hUNTA2Nl9IUF9MQVBUT1ApCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCiAJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKQEAgLTMyMDcsNyArMzIyOCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9ERUxMX1ZPU1RSTzoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl92b3N0cm9fZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OwogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX3Zvc3RybzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwpAQCAtMzIyNCw3ICszMjQ1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X0lERUFQQUQ6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaWRlYXBhZF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZDsKQEAgLTMyNDAsNyArMzI2MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9USElOS1BBRDoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl90aGlua3BhZF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdGhpbmtwYWQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IGJlNGRmNGMuLjJmYTllZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0xNDk1NCw5ICsxNDk1NCwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwODQsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9IV0VRKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNGQsICJTb255IFZBSU8iLCBBTEMyNjlfRklYVVBfU09OWV9WQUlPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDcwLCAiRGVsbCBNMTAxeiIsIEFMQzI2OV9GSVhVUF9ERUxMX00xMDFaKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWI4LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWU5LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiVGhpbmtwYWQgU0w0MTAvNTEwIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxNWUsICJUaGlua3BhZCBMNTEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjgsICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxY2EsICJUaGlua3BhZCBMNDEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxZTksICJUaGlua3BhZCBFZGdlIDE1IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDFhMTMsICJBc3VzIEc3M0p3IiwgQUxDMjY5X0ZJWFVQX0FTVVNfRzczSlcpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDllNTQsICJMRU5PVk8gTkIiLCBBTEMyNjlfRklYVVBfTEVOT1ZPX0VBUEQpLAogCXt9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAppbmRleCBjMmFlNjNkLi5mNTM4OTdhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKQEAgLTkyLDYgKzkyLDggQEAKIAl2b2lkICgqdXBkYXRlX2RhY192b2x1bWUpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCp1cGRhdGVfZGFjX211dGUpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCp1cGRhdGVfY2VudGVyX2xmZV9taXgpKHN0cnVjdCBveHlnZW4gKmNoaXAsIGJvb2wgbWl4ZWQpOworCXVuc2lnbmVkIGludCAoKmFkanVzdF9kYWNfcm91dGluZykoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHBsYXlfcm91dGluZyk7CiAJdm9pZCAoKmdwaW9fY2hhbmdlZCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKnVhcnRfaW5wdXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCphYzk3X3N3aXRjaCkoc3RydWN0IG94eWdlbiAqY2hpcCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCmluZGV4IDliZmYxNGQuLjI2YzdlOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYwpAQCAtMTgwLDYgKzE4MCw4IEBACiAJCQkgICAgKDEgPDwgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfU0hJRlQpIHwKIAkJCSAgICAoMiA8PCBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9TSElGVCkgfAogCQkJICAgICgzIDw8IE9YWUdFTl9QTEFZX0RBQzNfU09VUkNFX1NISUZUKTsKKwlpZiAoY2hpcC0+bW9kZWwuYWRqdXN0X2RhY19yb3V0aW5nKQorCQlyZWdfdmFsdWUgPSBjaGlwLT5tb2RlbC5hZGp1c3RfZGFjX3JvdXRpbmcoY2hpcCwgcmVnX3ZhbHVlKTsKIAlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX1BMQVlfUk9VVElORywgcmVnX3ZhbHVlLAogCQkJICAgICAgT1hZR0VOX1BMQVlfREFDMF9TT1VSQ0VfTUFTSyB8CiAJCQkgICAgICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9NQVNLIHwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jCmluZGV4IDlmNzJkNDIuLjI1MjcxOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYwpAQCAtMzkyLDcgKzM5Miw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbkNTNDM5ODogNz8iKTsKLQlmb3IgKGkgPSAyOyBpIDw9IDg7ICsraSkKKwlmb3IgKGkgPSAyOyBpIDwgODsgKytpKQogCQlzbmRfaXByaW50ZihidWZmZXIsICIgJTAyeCIsIGRhdGEtPmNzNDM5OF9yZWdzW2ldKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCWR1bXBfY3M0MzYyYV9yZWdpc3RlcnMoZGF0YSwgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYwppbmRleCBlMWZhNjAyLi5iYzZlYjU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jCkBAIC0yNCw2ICsyNCwxMSBAQAogICoKICAqICAgU1BJIDAgLT4gQ1M0MjQ1CiAgKgorICogICBJwrJTIDEgLT4gQ1M0MjQ1CisgKiAgIEnCslMgMiAtPiBDUzQzNjEgKGNlbnRlci9MRkUpCisgKiAgIEnCslMgMyAtPiBDUzQzNjEgKHN1cnJvdW5kKQorICogICBJwrJTIDQgLT4gQ1M0MzYxIChmcm9udCkKKyAqCiAgKiAgIEdQSU8gMyA8LSA/CiAgKiAgIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0CiAgKiAgIEdQSU8gNSAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAoMSkKQEAgLTM2LDYgKzQxLDcgQEAKICAqICAgaW5wdXQgMSA8LSBhdXgKICAqICAgaW5wdXQgMiA8LSBmcm9udCBtaWMKICAqICAgaW5wdXQgNCA8LSBsaW5lL21pYworICogICBEQUMgb3V0IC0+IGhlYWRwaG9uZXMKICAqICAgYXV4IG91dCAtPiBmcm9udCBwYW5lbCBoZWFkcGhvbmVzCiAgKi8KIApAQCAtMjA3LDYgKzIxMywzNSBAQAogCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X0FEQ19DVFJMLCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNoaWZ0X2JpdHModW5zaWduZWQgaW50IHZhbHVlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaGlmdF9mcm9tLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaGlmdF90bywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwlpZiAoc2hpZnRfZnJvbSA8IHNoaWZ0X3RvKQorCQlyZXR1cm4gKHZhbHVlIDw8IChzaGlmdF90byAtIHNoaWZ0X2Zyb20pKSAmIG1hc2s7CisJZWxzZQorCQlyZXR1cm4gKHZhbHVlID4+IChzaGlmdF9mcm9tIC0gc2hpZnRfdG8pKSAmIG1hc2s7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWRqdXN0X2RnX2RhY19yb3V0aW5nKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJCSAgdW5zaWduZWQgaW50IHBsYXlfcm91dGluZykKK3sKKwlyZXR1cm4gKHBsYXlfcm91dGluZyAmIE9YWUdFTl9QTEFZX0RBQzBfU09VUkNFX01BU0spIHwKKwkgICAgICAgc2hpZnRfYml0cyhwbGF5X3JvdXRpbmcsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfTUFTSykgfAorCSAgICAgICBzaGlmdF9iaXRzKHBsYXlfcm91dGluZywKKwkJCSAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9NQVNLKSB8CisJICAgICAgIHNoaWZ0X2JpdHMocGxheV9yb3V0aW5nLAorCQkJICBPWFlHRU5fUExBWV9EQUMwX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzNfU09VUkNFX01BU0spOworfQorCiBzdGF0aWMgaW50IG91dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCiB7CkBAIC01NTcsNiArNTkyLDcgQEAKIAkucmVzdW1lID0gZGdfcmVzdW1lLAogCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9jczQyNDVfZGFjX3BhcmFtcywKIAkuc2V0X2FkY19wYXJhbXMgPSBzZXRfY3M0MjQ1X2FkY19wYXJhbXMsCisJLmFkanVzdF9kYWNfcm91dGluZyA9IGFkanVzdF9kZ19kYWNfcm91dGluZywKIAkuZHVtcF9yZWdpc3RlcnMgPSBkdW1wX2NzNDI0NV9yZWdpc3RlcnMsCiAJLm1vZGVsX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZGcpLAogCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfApkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaCBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKaW5kZXggYmQyNmUwOS4uNmNlOWFkNyAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaAorKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIF9fUERBVURJT0NGX0gKIAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBfb3BzLmMKaW5kZXggOTg5ZTA0YS4uZmUzM2UxMiAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInZ4cG9ja2V0LmgiCiAKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYyBiL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMKaW5kZXggZGEyMjA4ZS4uNWU0ZDQ5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAkuY3B1X2RhaV9uYW1lID0gImF0bWVsLXNzYy1kYWkuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzIzLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gImF0bWVsX3BjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAidGx2MzIwYWljMjMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ0bHYzMjBhaWMyMy1jb2RlYy4wLTAwMWEiLAogCS5pbml0ID0gYWZlYjkyNjBfdGx2MzIwYWljMjNfaW5pdCwKIAkub3BzID0gJmFmZWI5MjYwX29wcywKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYwppbmRleCBlOTAyYjI0Li5hZDI4NjYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYmY1eHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAic3NtMjYwMi1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJiZjV4eC1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gInNzbTI2MDItY29kZWMuMC0weDFiIiwKKwkuY29kZWNfbmFtZSA9ICJzc20yNjAyLWNvZGVjLjAtMDAxYiIsCiAJLm9wcyA9ICZiZjV4eF9zc20yNjAyX29wcywKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jCmluZGV4IDQ2ZGJmZDAuLjM0N2E1NjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIHN0YXRpYyBpbnQgY3E5M3ZjX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgZGF2aW5jaV92YyAqZGF2aW5jaV92YyA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRhdmluY2lfdmMgKmRhdmluY2lfdmMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCWRhdmluY2lfdmMtPmNxOTN2Yy5jb2RlYyA9IGNvZGVjOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBkYXZpbmNpX3ZjOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwppbmRleCAwM2QxZTg2Li5iYjRiZjY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwpAQCAtMzY3LDkgKzM2NywxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgdTggY3gyMDQ0Ml9yZWcgPSBDWDIwNDQyX1RFTE9VVCB8IENYMjA0NDJfTUlDOworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIGN4MjA0NDJfY29kZWNfZGV2ID0gewogCS5wcm9iZSA9IAljeDIwNDQyX2NvZGVjX3Byb2JlLAogCS5yZW1vdmUgPSAJY3gyMDQ0Ml9jb2RlY19yZW1vdmUsCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gJmN4MjA0NDJfcmVnLAogCS5yZWdfY2FjaGVfc2l6ZSA9IDEsCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAogCS5yZWFkID0gY3gyMDQ0Ml9yZWFkX3JlZ19jYWNoZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDI0N2E2YTkuLjMzNTFmNzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMjM4Niw3ICsyMzg2LDcgQEAKIAllbHNlCiAJCXZhbCA9IDA7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCByZWcpOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiB9CiAKICNkZWZpbmUgV004OTk0X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCmluZGV4IDYwNDVjYmQuLjYwOGM4NGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAllbHNlCiAJCXZhbCA9IDA7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCByZWcpOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiB9CiAKIC8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBjNDY2OTgyLi42MTNkZjVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtOTEsNiArOTEsNyBAQAogc3RhdGljIHZvaWQgY2FsaWJyYXRlX2RjX3NlcnZvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJczggb2Zmc2V0OwogCXUxNiByZWcsIHJlZ19sLCByZWdfciwgZGNzX2NmZzsKIAogCS8qIElmIHdlJ3JlIHVzaW5nIGEgZGlnaXRhbCBvbmx5IHBhdGggYW5kIGhhdmUgYSBwcmV2aW91c2x5CkBAIC0xNDksMTYgKzE1MCwxNCBAQAogCQkJaHVicy0+ZGNzX2NvZGVzKTsKIAogCQkvKiBIUE9VVDFMICovCi0JCWlmIChyZWdfbCArIGh1YnMtPmRjc19jb2RlcyA+IDAgJiYKLQkJICAgIHJlZ19sICsgaHVicy0+ZGNzX2NvZGVzIDwgMHhmZikKLQkJCXJlZ19sICs9IGh1YnMtPmRjc19jb2RlczsKLQkJZGNzX2NmZyA9IHJlZ19sIDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOworCQlvZmZzZXQgPSByZWdfbDsKKwkJb2Zmc2V0ICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyA9ICh1OClvZmZzZXQgPDwgV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7CiAKIAkJLyogSFBPVVQxUiAqLwotCQlpZiAocmVnX3IgKyBodWJzLT5kY3NfY29kZXMgPiAwICYmCi0JCSAgICByZWdfciArIGh1YnMtPmRjc19jb2RlcyA8IDB4ZmYpCi0JCQlyZWdfciArPSBodWJzLT5kY3NfY29kZXM7Ci0JCWRjc19jZmcgfD0gcmVnX3I7CisJCW9mZnNldCA9IHJlZ19yOworCQlvZmZzZXQgKz0gaHVicy0+ZGNzX2NvZGVzOworCQlkY3NfY2ZnIHw9ICh1OClvZmZzZXQ7CiAKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRENTIHJlc3VsdDogJXhcbiIsIGRjc19jZmcpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCAwYzJkNmJhLi5iMzZmMGIzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJBSUMzWCIsCiAJLmNwdV9kYWlfbmFtZT0gImRhdmluY2ktbWNhc3AuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAotCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMS0wMDE4IiwKIAkucGxhdGZvcm1fbmFtZSA9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCiAJLmluaXQgPSBldm1fYWljM3hfaW5pdCwKIAkub3BzID0gJmV2bV9vcHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCmluZGV4IDIxMDFiZGMuLjMxNjdiZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCkBAIC01MDcsOCArNTA3LDYgQEAKIAkvKiBTZXQgdXAgZGlnaXRhbCBtdXRlIGlmIG5vdCBwcm92aWRlZCBieSB0aGUgY29kZWMgKi8KIAlpZiAoIWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMpIHsKIAkJY29kZWNfZGFpLT5kcml2ZXItPm9wcyA9ICZhbXNfZGVsdGFfZGFpX29wczsKLQl9IGVsc2UgaWYgKCFjb2RlY19kYWktPmRyaXZlci0+b3BzLT5kaWdpdGFsX211dGUpIHsKLQkJY29kZWNfZGFpLT5kcml2ZXItPm9wcy0+ZGlnaXRhbF9tdXRlID0gYW1zX2RlbHRhX2RpZ2l0YWxfbXV0ZTsKIAl9IGVsc2UgewogCQlhbXNfZGVsdGFfb3BzLnN0YXJ0dXAgPSBhbXNfZGVsdGFfc3RhcnR1cDsKIAkJYW1zX2RlbHRhX29wcy5zaHV0ZG93biA9IGFtc19kZWx0YV9zaHV0ZG93bjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwppbmRleCBmYzU5MmYwLi43ODRjZmY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKKysrIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCkBAIC0zMDcsMTAgKzMwNywxMCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGNvcmdpX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg3MzEiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3MzEiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWlzMi1kYWkiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODczMS1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMtMC4wMDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMtMC4wMDFiIiwKIAkuaW5pdCA9IGNvcmdpX3dtODczMV9pbml0LAogCS5vcHMgPSAmY29yZ2lfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCmluZGV4IDYyOThlZTEuLmE3ZDQ5OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKKysrIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzMxLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy4wLTAwMWEiLAorCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy4wLTAwMWIiLAogCS5pbml0ID0gcG9vZGxlX3dtODczMV9pbml0LAogCS5vcHMgPSAmcG9vZGxlX29wcywKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggYzJhY2I2OS4uOGUxNTcxMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtMzE1LDEwICszMTUsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzcGl0el9kYWkgPSB7CiAJLm5hbWUgPSAid204NzUwIiwKIAkuc3RyZWFtX25hbWUgPSAiV004NzUwIiwKLQkuY3B1X2RhaV9uYW1lID0gInB4YS1pczIiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1MC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTAtY29kZWMuMC0wMDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTAtY29kZWMuMC0wMDFiIiwKIAkuaW5pdCA9IHNwaXR6X3dtODc1MF9pbml0LAogCS5vcHMgPSAmc3BpdHpfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCmluZGV4IDNlZWM2MTAuLjBkMGFlMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpAQCAtMzk3LDExICszOTcsMTEgQEAKIHsgLyogSGlmaSBQbGF5YmFjayAtIGZvciBzaW1pbGF0aW91cyB1c2Ugd2l0aCB2b2ljZSBiZWxvdyAqLwogCS5uYW1lID0gIldNODc1MyIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKLQkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaTJzIiwKKwkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLWhpZmkiLAogCS5pbml0ID0gbmVvMTk3M19ndGEwMl93bTg3NTNfaW5pdCwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJm5lbzE5NzNfZ3RhMDJfaGlmaV9vcHMsCiB9LAogeyAvKiBWb2ljZSB2aWEgQlQgKi8KQEAgLTQxMCw3ICs0MTAsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCiAJLm9wcyA9ICZuZW8xOTczX2d0YTAyX3ZvaWNlX29wcywKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggYzdhMjQ1MS4uZDIwODE1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC01NTksOSArNTU5LDkgQEAKIAkubmFtZSA9ICJXTTg3NTMiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3NTMgSGlGaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCisJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My1oaWZpIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IG5lbzE5NzNfd204NzUzX2luaXQsCiAJLm9wcyA9ICZuZW8xOTczX2hpZmlfb3BzLAogfSwKQEAgLTU3MSw3ICs1NzEsNyBAQAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCi0JLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMDAxYSIsCiAJLm9wcyA9ICZuZW8xOTczX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwppbmRleCBiYjQyOTJlLi4wOGZjYWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwpAQCAtOTQsOCArOTQsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNpbXRlY19kYWlfYWljMzMgPSB7CiAJLm5hbWUJCT0gInRsdjMyMGFpYzMzIiwKIAkuc3RyZWFtX25hbWUJPSAiVExWMzIwQUlDMzMiLAotCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMHgxYSIsCi0JLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWkycyIsCisJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0wMDFhIiwKKwkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmluaXQJCT0gc2ltdGVjX2hlcm1lc19pbml0LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKaW5kZXggZmJiYTRlMy4uMTE2ZTNlNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCkBAIC04NSw4ICs4NSw4IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMyMyA9IHsKIAkubmFtZQkJPSAidGx2MzIwYWljMjMiLAogCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMyMyIsCi0JLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0weDFhIiwKLQkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaTJzIiwKKwkuY29kZWNfbmFtZQk9ICJ0bHYzMjBhaWMzeC1jb2RlYy4wLTAwMWEiLAorCS5jcHVfZGFpX25hbWUJPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMzeC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuaW5pdAkJPSBzaW10ZWNfdGx2MzIwYWljMjNfaW5pdCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggY2RjOGVjYi4uMmMwOWU5MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJVREExMzRYIiwKIAkuY29kZWNfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1pMnMiLAorCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAogCS5vcHMgPSAmczNjMjR4eF91ZGExMzR4X29wcywKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGJhYzcyOTEuLmM0YjYwNjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xNjY0LDkgKzE2NjQsNiBAQAogCWdvdG8gb3V0OwogCiBmb3VuZDoKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNvZGVjLT5kZXYtPmRyaXZlci0+b3duZXIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldCA9IHNvY19wcm9iZV9jb2RlYyhjYXJkLCBjb2RlYyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDQ5OTczMGEuLjgxOTRmMTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC0xNzQyLDcgKzE3NDIsNyBAQAogCWludCBtYXggPSBtYy0+bWF4OwogCXVuc2lnbmVkIGludCBtYXNrID0gKDEgPDwgZmxzKG1heCkpIC0gMTsKIAl1bnNpZ25lZCBpbnQgaW52ZXJ0ID0gbWMtPmludmVydDsKLQl1bnNpZ25lZCBpbnQgdmFsLCB2YWxfbWFzazsKKwl1bnNpZ25lZCBpbnQgdmFsOwogCWludCBjb25uZWN0LCBjaGFuZ2U7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV91cGRhdGUgdXBkYXRlOwogCkBAIC0xNzUwLDEzICsxNzUwLDEzIEBACiAKIAlpZiAoaW52ZXJ0KQogCQl2YWwgPSBtYXggLSB2YWw7Ci0JdmFsX21hc2sgPSBtYXNrIDw8IHNoaWZ0OworCW1hc2sgPSBtYXNrIDw8IHNoaWZ0OwogCXZhbCA9IHZhbCA8PCBzaGlmdDsKIAogCW11dGV4X2xvY2soJndpZGdldC0+Y29kZWMtPm11dGV4KTsKIAl3aWRnZXQtPnZhbHVlID0gdmFsOwogCi0JY2hhbmdlID0gc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgcmVnLCB2YWxfbWFzaywgdmFsKTsKKwljaGFuZ2UgPSBzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiAJaWYgKGNoYW5nZSkgewogCQlpZiAodmFsKQogCQkJLyogbmV3IGNvbm5lY3Rpb24gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDJiNTM4N2QuLjcxNDFjNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMjA0LDEzICsyMDQsMTEgQEAKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XaW5pdC1zZWxmCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3BhY2tlZAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdyZWR1bmRhbnQtZGVjbHMKLUVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RhY2stcHJvdGVjdG9yCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N0cmljdC1hbGlhc2luZz0zCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N3aXRjaC1kZWZhdWx0CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N3aXRjaC1lbnVtCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV25vLXN5c3RlbS1oZWFkZXJzCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3VuZGVmCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhcgogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVd3cml0ZS1zdHJpbmdzCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2JhZC1mdW5jdGlvbi1jYXN0CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV21pc3NpbmctZGVjbGFyYXRpb25zCkBAIC0yOTQsNiArMjkyLDEzIEBACiAJQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKIGVuZGlmCiAKK2lmZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfSEVMTE8pLC1XZXJyb3IgLVdzdGFjay1wcm90ZWN0b3IpLHkpCisgICAgICAgQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtV3N0YWNrLXByb3RlY3RvcgorZW5kaWYKKworaWZlcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9IRUxMTyksLVdlcnJvciAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhcikseSkKKyAgICAgICBDRkxBR1MgOj0gJChDRkxBR1MpIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyCitlbmRpZgogCiAjIyMgLS0tIEVORCBDT05GSUdVUkFUSU9OIFNFQ1RJT04gLS0tCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKaW5kZXggYzA1NmNkYy4uODg3OTQ2MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQkJY29udGludWU7CiAKIAkJb2Zmc2V0ID0gc3RhcnQgKyBpOwotCQlzcHJpbnRmKGNtZCwgImFkZHIybGluZSAtZSAlcyAlMDE2bGx4IiwgZmlsZW5hbWUsIG9mZnNldCk7CisJCXNwcmludGYoY21kLCAiYWRkcjJsaW5lIC1lICVzICUwMTYiIFBSSXg2NCwgZmlsZW5hbWUsIG9mZnNldCk7CiAJCWZwID0gcG9wZW4oY21kLCAiciIpOwogCQlpZiAoIWZwKQogCQkJY29udGludWU7CkBAIC0yNzAsOSArMjcwLDkgQEAKIAogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuOyArK29mZnNldCkKIAkJaWYgKGgtPmlwW29mZnNldF0gIT0gMCkKLQkJCXByaW50ZigiJSpMeDogJUx1XG4iLCBCSVRTX1BFUl9MT05HIC8gMiwKKwkJCXByaW50ZigiJSoiIFBSSXg2NCAiOiAlIiBQUkl1NjQgIlxuIiwgQklUU19QRVJfTE9ORyAvIDIsCiAJCQkgICAgICAgc3ltLT5zdGFydCArIG9mZnNldCwgaC0+aXBbb2Zmc2V0XSk7Ci0JcHJpbnRmKCIlKnM6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsICJoLT5zdW0iLCBoLT5zdW0pOworCXByaW50ZigiJSpzOiAlIiBQUkl1NjQgIlxuIiwgQklUU19QRVJfTE9ORyAvIDIsICJoLT5zdW0iLCBoLT5zdW0pOwogfQogCiBzdGF0aWMgaW50IGhpc3RfZW50cnlfX3R0eV9hbm5vdGF0ZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCBkZWY3ZGRjLi5kOTcyNTZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKQEAgLTM3MSwxMCArMzcxLDEwIEBACiAJCQlhZGRyID0gZGF0YS0+cHRyOwogCiAJCWlmIChzeW0gIT0gTlVMTCkKLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyslTHgiLCBzeW0tPm5hbWUsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMrJSIgUFJJeDY0ICIiLCBzeW0tPm5hbWUsCiAJCQkJIGFkZHIgLSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCkpOwogCQllbHNlCi0JCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSNMeCIsIGFkZHIpOworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUjIiBQUkl4NjQgIiIsIGFkZHIpOwogCQlwcmludGYoIiAlLTM0cyB8IiwgYnVmKTsKIAogCQlwcmludGYoIiAlOWxsdS8lLTVsdSB8ICU5bGx1LyUtNWx1IHwgJThsdSB8ICU4bHUgfCAlNi4zZiUlXG4iLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKaW5kZXggYjljNmU1NC4uMmIzNmRlZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCkBAIC03ODIsOSArNzgyLDkgQEAKIAkJcHJfaW5mbygiJTEwdSAiLCBzdC0+bnJfYWNxdWlyZWQpOwogCQlwcl9pbmZvKCIlMTB1ICIsIHN0LT5ucl9jb250ZW5kZWQpOwogCi0JCXByX2luZm8oIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX3RvdGFsKTsKLQkJcHJfaW5mbygiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfbWF4KTsKLQkJcHJfaW5mbygiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfbWluID09IFVMTE9OR19NQVggPworCQlwcl9pbmZvKCIlMTUiIFBSSXU2NCAiICIsIHN0LT53YWl0X3RpbWVfdG90YWwpOworCQlwcl9pbmZvKCIlMTUiIFBSSXU2NCAiICIsIHN0LT53YWl0X3RpbWVfbWF4KTsKKwkJcHJfaW5mbygiJTE1IiBQUkl1NjQgIiAiLCBzdC0+d2FpdF90aW1lX21pbiA9PSBVTExPTkdfTUFYID8KIAkJICAgICAgIDAgOiBzdC0+d2FpdF90aW1lX21pbik7CiAJCXByX2luZm8oIlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IGZjZDI5ZTguLjYwY2FjNmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTc1OSw4ICs3NTksOCBAQAogCQlwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfbWFjaGluZXMoc2Vzc2lvbiwgZXZlbnRfX3N5bnRoZXNpemVfZ3Vlc3Rfb3MpOwogCiAJaWYgKCFzeXN0ZW1fd2lkZSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCi0JCQkJCSBzZXNzaW9uKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcCh0aHJlYWRzLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAorCQkJCQkgICAgIHNlc3Npb24pOwogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKIApAQCAtODE3LDcgKzgxNyw3IEBACiAJICogQXBwcm94aW1hdGUgUklQIGV2ZW50IHNpemU6IDI0IGJ5dGVzLgogCSAqLwogCWZwcmludGYoc3RkZXJyLAotCQkiWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlICUuM2YgTUIgJXMgKH4lbGxkIHNhbXBsZXMpIF1cbiIsCisJCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyAofiUiIFBSSXU2NCAiIHNhbXBsZXMpIF1cbiIsCiAJCShkb3VibGUpYnl0ZXNfd3JpdHRlbiAvIDEwMjQuMCAvIDEwMjQuMCwKIAkJb3V0cHV0X25hbWUsCiAJCWJ5dGVzX3dyaXR0ZW4gLyAyNCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggNzUxODNhNC4uYzI3ZTMxZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCQkJCSAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiOiAlZCAlZCAlcyAlTHVcbiIsIGV2ZW50LT5yZWFkLnBpZCwgZXZlbnQtPnJlYWQudGlkLAorCWR1bXBfcHJpbnRmKCI6ICVkICVkICVzICUiIFBSSXU2NCAiXG4iLCBldmVudC0+cmVhZC5waWQsIGV2ZW50LT5yZWFkLnRpZCwKIAkJICAgIGF0dHIgPyBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKSA6ICJGQUlMIiwKIAkJICAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCAyOWU3ZmZkOC4uMjlhY2I4OTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAl9CiAJcnVuX21lYXN1cmVtZW50X292ZXJoZWFkID0gbWluX2RlbHRhOwogCi0JcHJpbnRmKCJydW4gbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICVMZCBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKKwlwcmludGYoInJ1biBtZWFzdXJlbWVudCBvdmVyaGVhZDogJSIgUFJJdTY0ICIgbnNlY3NcbiIsIG1pbl9kZWx0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGlicmF0ZV9zbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZCh2b2lkKQpAQCAtMjExLDcgKzIxMSw3IEBACiAJbWluX2RlbHRhIC09IDEwMDAwOwogCXNsZWVwX21lYXN1cmVtZW50X292ZXJoZWFkID0gbWluX2RlbHRhOwogCi0JcHJpbnRmKCJzbGVlcCBtZWFzdXJlbWVudCBvdmVyaGVhZDogJUxkIG5zZWNzXG4iLCBtaW5fZGVsdGEpOworCXByaW50Zigic2xlZXAgbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBtaW5fZGVsdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHNjaGVkX2F0b20gKgpAQCAtNjE3LDEzICs2MTcsMTMgQEAKIAlidXJuX25zZWNzKDFlNik7CiAJVDEgPSBnZXRfbnNlY3MoKTsKIAotCXByaW50ZigidGhlIHJ1biB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7CisJcHJpbnRmKCJ0aGUgcnVuIHRlc3QgdG9vayAlIiBQUkl1NjQgIiBuc2Vjc1xuIiwgVDEgLSBUMCk7CiAKIAlUMCA9IGdldF9uc2VjcygpOwogCXNsZWVwX25zZWNzKDFlNik7CiAJVDEgPSBnZXRfbnNlY3MoKTsKIAotCXByaW50ZigidGhlIHNsZWVwIHRlc3QgdG9vayAlTGQgbnNlY3NcbiIsIFQxLVQwKTsKKwlwcmludGYoInRoZSBzbGVlcCB0ZXN0IHRvb2sgJSIgUFJJdTY0ICIgbnNlY3NcbiIsIFQxIC0gVDApOwogfQogCiAjZGVmaW5lIEZJTExfRklFTEQocHRyLCBmaWVsZCwgZXZlbnQsIGRhdGEpCVwKQEAgLTgxNiwxMCArODE2LDEwIEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAlpZiAodmVyYm9zZSkgewotCQlwcmludGYoIiAuLi4gc3dpdGNoIGZyb20gJXMvJWQgdG8gJXMvJWQgW3JhbiAlTGQgbnNlY3NdXG4iLAorCQlwcmludGYoIiAuLi4gc3dpdGNoIGZyb20gJXMvJWQgdG8gJXMvJWQgW3JhbiAlIiBQUkl1NjQgIiBuc2Vjc11cbiIsCiAJCQlzd2l0Y2hfZXZlbnQtPnByZXZfY29tbSwgc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCwKIAkJCXN3aXRjaF9ldmVudC0+bmV4dF9jb21tLCBzd2l0Y2hfZXZlbnQtPm5leHRfcGlkLAogCQkJZGVsdGEpOwpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIAkJZGVsdGEgPSAwOwogCiAJaWYgKGRlbHRhIDwgMCkKLQkJZGllKCJobSwgZGVsdGE6ICVMZCA8IDAgP1xuIiwgZGVsdGEpOworCQlkaWUoImhtLCBkZWx0YTogJSIgUFJJdTY0ICIgPCAwID9cbiIsIGRlbHRhKTsKIAogCiAJc2NoZWRfb3V0ID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHN3aXRjaF9ldmVudC0+cHJldl9waWQpOwpAQCAtMTIyMSw3ICsxMjIxLDcgQEAKIAogCWF2ZyA9IHdvcmtfbGlzdC0+dG90YWxfbGF0IC8gd29ya19saXN0LT5uYl9hdG9tczsKIAotCXByaW50ZigifCUxMS4zZiBtcyB8JTlsbHUgfCBhdmc6JTkuM2YgbXMgfCBtYXg6JTkuM2YgbXMgfCBtYXggYXQ6ICU5LjZmIHNcbiIsCisJcHJpbnRmKCJ8JTExLjNmIG1zIHwlOSIgUFJJdTY0ICIgfCBhdmc6JTkuM2YgbXMgfCBtYXg6JTkuM2YgbXMgfCBtYXggYXQ6ICU5LjZmIHNcbiIsCiAJICAgICAgKGRvdWJsZSl3b3JrX2xpc3QtPnRvdGFsX3J1bnRpbWUgLyAxZTYsCiAJCSB3b3JrX2xpc3QtPm5iX2F0b21zLCAoZG91YmxlKWF2ZyAvIDFlNiwKIAkJIChkb3VibGUpd29ya19saXN0LT5tYXhfbGF0IC8gMWU2LApAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAkJZGVsdGEgPSAwOwogCiAJaWYgKGRlbHRhIDwgMCkKLQkJZGllKCJobSwgZGVsdGE6ICVMZCA8IDAgP1xuIiwgZGVsdGEpOworCQlkaWUoImhtLCBkZWx0YTogJSIgUFJJdTY0ICIgPCAwID9cbiIsIGRlbHRhKTsKIAogCiAJc2NoZWRfb3V0ID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHN3aXRjaF9ldmVudC0+cHJldl9waWQpOwpAQCAtMTcxMyw3ICsxNzEzLDcgQEAKIAl9CiAKIAlwcmludGYoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JcHJpbnRmKCIgIFRPVEFMOiAgICAgICAgICAgICAgICB8JTExLjNmIG1zIHwlOUxkIHxcbiIsCisJcHJpbnRmKCIgIFRPVEFMOiAgICAgICAgICAgICAgICB8JTExLjNmIG1zIHwlOSIgUFJJdTY0ICIgfFxuIiwKIAkJKGRvdWJsZSlhbGxfcnVudGltZS8xZTYsIGFsbF9jb3VudCk7CiAKIAlwcmludGYoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCmluZGV4IDE1MGE2MDYuLmI3NjZjMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKQEAgLTc3LDggKzc3LDggQEAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKIAkJaWYgKGRlYnVnX21vZGUpIHsKIAkJCWlmIChzYW1wbGUtPnRpbWUgPCBsYXN0X3RpbWVzdGFtcCkgewotCQkJCXByX2VycigiU2FtcGxlcyBtaXNvcmRlcmVkLCBwcmV2aW91czogJWxsdSAiCi0JCQkJCSJ0aGlzOiAlbGx1XG4iLCBsYXN0X3RpbWVzdGFtcCwKKwkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICUiIFBSSXU2NAorCQkJCQkiIHRoaXM6ICUiIFBSSXU2NCAiXG4iLCBsYXN0X3RpbWVzdGFtcCwKIAkJCQkJc2FtcGxlLT50aW1lKTsKIAkJCQlucl91bm9yZGVyZWQrKzsKIAkJCX0KQEAgLTEyNiw3ICsxMjYsNyBAQAogCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CiAKIAlpZiAoZGVidWdfbW9kZSkKLQkJcHJfZXJyKCJNaXNvcmRlcmVkIHRpbWVzdGFtcHM6ICVsbHVcbiIsIG5yX3Vub3JkZXJlZCk7CisJCXByX2VycigiTWlzb3JkZXJlZCB0aW1lc3RhbXBzOiAlIiBQUkl1NjQgIlxuIiwgbnJfdW5vcmRlcmVkKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCAwZmYxMWQ5Li5hNDgyYTE5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTIwNiw4ICsyMDYsOCBAQAogCQl1cGRhdGVfc3RhdHMoJnBzLT5yZXNfc3RhdHNbaV0sIGNvdW50W2ldKTsKIAogCWlmICh2ZXJib3NlKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6ICVMZCAlTGQgJUxkXG4iLCBldmVudF9uYW1lKGNvdW50ZXIpLAotCQkJCWNvdW50WzBdLCBjb3VudFsxXSwgY291bnRbMl0pOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlIiBQUkl1NjQgIiAlIiBQUkl1NjQgIiAlIiBQUkl1NjQgIlxuIiwKKwkJCWV2ZW50X25hbWUoY291bnRlciksIGNvdW50WzBdLCBjb3VudFsxXSwgY291bnRbMl0pOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwppbmRleCBlZDU2OTYxLi41ZGNkYmE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkJCWlmIChsbGFicyhza2V3KSA8IHBhZ2Vfc2l6ZSkKIAkJCQkJY29udGludWU7CiAKLQkJCQlwcl9kZWJ1ZygiJSNMeDogZGlmZiBlbmQgYWRkciBmb3IgJXMgdjogJSNMeCBrOiAlI0x4XG4iLAorCQkJCXByX2RlYnVnKCIlIyIgUFJJeDY0ICI6IGRpZmYgZW5kIGFkZHIgZm9yICVzIHY6ICUjIiBQUkl4NjQgIiBrOiAlIyIgUFJJeDY0ICJcbiIsCiAJCQkJCSBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUsIHN5bS0+ZW5kLCBwYWlyLT5lbmQpOwogCQkJfSBlbHNlIHsKIAkJCQlzdHJ1Y3QgcmJfbm9kZSAqbm5kOwpAQCAtMTY4LDExICsxNjgsMTEgQEAKIAkJCQkJZ290byBkZXRvdXI7CiAJCQkJfQogCi0JCQkJcHJfZGVidWcoIiUjTHg6IGRpZmYgbmFtZSB2OiAlcyBrOiAlc1xuIiwKKwkJCQlwcl9kZWJ1ZygiJSMiIFBSSXg2NCAiOiBkaWZmIG5hbWUgdjogJXMgazogJXNcbiIsCiAJCQkJCSBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUsIHBhaXItPm5hbWUpOwogCQkJfQogCQl9IGVsc2UKLQkJCXByX2RlYnVnKCIlI0x4OiAlcyBub3Qgb24ga2FsbHN5bXNcbiIsIHN5bS0+c3RhcnQsIHN5bS0+bmFtZSk7CisJCQlwcl9kZWJ1ZygiJSMiIFBSSXg2NCAiOiAlcyBub3Qgb24ga2FsbHN5bXNcbiIsIHN5bS0+c3RhcnQsIHN5bS0+bmFtZSk7CiAKIAkJZXJyID0gLTE7CiAJfQpAQCAtMjExLDEwICsyMTEsMTAgQEAKIAogCQlpZiAocGFpci0+c3RhcnQgPT0gcG9zLT5zdGFydCkgewogCQkJcGFpci0+cHJpdiA9IDE7Ci0JCQlwcl9pbmZvKCIgJUx4LSVMeCAlTHggJXMgaW4ga2FsbHN5bXMgYXMiLAorCQkJcHJfaW5mbygiICUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiICVzIGluIGthbGxzeW1zIGFzIiwKIAkJCQlwb3MtPnN0YXJ0LCBwb3MtPmVuZCwgcG9zLT5wZ29mZiwgcG9zLT5kc28tPm5hbWUpOwogCQkJaWYgKHBvcy0+cGdvZmYgIT0gcGFpci0+cGdvZmYgfHwgcG9zLT5lbmQgIT0gcGFpci0+ZW5kKQotCQkJCXByX2luZm8oIjogXG4qJUx4LSVMeCAlTHgiLAorCQkJCXByX2luZm8oIjogXG4qJSIgUFJJeDY0ICItJSIgUFJJeDY0ICIgJSIgUFJJeDY0ICIiLAogCQkJCQlwYWlyLT5zdGFydCwgcGFpci0+ZW5kLCBwYWlyLT5wZ29mZik7CiAJCQlwcl9pbmZvKCIgJXNcbiIsIHBhaXItPmRzby0+bmFtZSk7CiAJCQlwYWlyLT5wcml2ID0gMTsKQEAgLTMwNyw3ICszMDcsNyBAQAogCX0KIAogCWlmIChldnNlbC0+Y291bnRzLT5jcHVbMF0udmFsICE9IG5yX29wZW5fY2FsbHMpIHsKLQkJcHJfZGVidWcoInBlcmZfZXZzZWxfX3JlYWRfb25fY3B1OiBleHBlY3RlZCB0byBpbnRlcmNlcHQgJWQgY2FsbHMsIGdvdCAlTGRcbiIsCisJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzLCBnb3QgJSIgUFJJdTY0ICJcbiIsCiAJCQkgbnJfb3Blbl9jYWxscywgZXZzZWwtPmNvdW50cy0+Y3B1WzBdLnZhbCk7CiAJCWdvdG8gb3V0X2Nsb3NlX2ZkOwogCX0KQEAgLTMzMiw4ICszMzIsNyBAQAogCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CiAJdW5zaWduZWQgaW50IG5yX29wZW5fY2FsbHMgPSAxMTEsIGk7Ci0JY3B1X3NldF90ICpjcHVfc2V0OwotCXNpemVfdCBjcHVfc2V0X3NpemU7CisJY3B1X3NldF90IGNwdV9zZXQ7CiAJaW50IGlkID0gdHJhY2VfZXZlbnRfX2lkKCJzeXNfZW50ZXJfb3BlbiIpOwogCiAJaWYgKGlkIDwgMCkgewpAQCAtMzUzLDEzICszNTIsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JY3B1X3NldCA9IENQVV9BTExPQyhjcHVzLT5ucik7CiAKLQlpZiAoY3B1X3NldCA9PSBOVUxMKQotCQlnb3RvIG91dF90aHJlYWRfbWFwX2RlbGV0ZTsKLQotCWNwdV9zZXRfc2l6ZSA9IENQVV9BTExPQ19TSVpFKGNwdXMtPm5yKTsKLQlDUFVfWkVST19TKGNwdV9zZXRfc2l6ZSwgY3B1X3NldCk7CisJQ1BVX1pFUk8oJmNwdV9zZXQpOwogCiAJbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOwogCWF0dHIudHlwZSA9IFBFUkZfVFlQRV9UUkFDRVBPSU5UOwpAQCAtMzY3LDcgKzM2MSw3IEBACiAJZXZzZWwgPSBwZXJmX2V2c2VsX19uZXcoJmF0dHIsIDApOwogCWlmIChldnNlbCA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19uZXdcbiIpOwotCQlnb3RvIG91dF9jcHVfZnJlZTsKKwkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7CiAJfQogCiAJaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMpIDwgMCkgewpAQCAtMzc5LDE0ICszNzMsMjkgQEAKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7ICsrY3B1KSB7CiAJCXVuc2lnbmVkIGludCBuY2FsbHMgPSBucl9vcGVuX2NhbGxzICsgY3B1OworCQkvKgorCQkgKiBYWFggZXZlbnR1YWxseSBsaWZ0IHRoaXMgcmVzdHJpY3Rpb24gaW4gYSB3YXkgdGhhdAorCQkgKiBrZWVwcyBwZXJmIGJ1aWxkaW5nIG9uIG9sZGVyIGdsaWJjIGluc3RhbGxhdGlvbnMKKwkJICogd2l0aG91dCBDUFVfQUxMT0MuIDEwMjQgY3B1cyBpbiAyMDEwIHN0aWxsIHNlZW1zCisJCSAqIGEgcmVhc29uYWJsZSB1cHBlciBsaW1pdCB0aG8gOi0pCisJCSAqLworCQlpZiAoY3B1cy0+bWFwW2NwdV0gPj0gQ1BVX1NFVFNJWkUpIHsKKwkJCXByX2RlYnVnKCJJZ25vcmluZyBDUFUgJWRcbiIsIGNwdXMtPm1hcFtjcHVdKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQkJQ1BVX1NFVChjcHUsIGNwdV9zZXQpOwotCQlzY2hlZF9zZXRhZmZpbml0eSgwLCBjcHVfc2V0X3NpemUsIGNwdV9zZXQpOworCQlDUFVfU0VUKGNwdXMtPm1hcFtjcHVdLCAmY3B1X3NldCk7CisJCWlmIChzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2YoY3B1X3NldCksICZjcHVfc2V0KSA8IDApIHsKKwkJCXByX2RlYnVnKCJzY2hlZF9zZXRhZmZpbml0eSgpIGZhaWxlZCBvbiBDUFUgJWQ6ICVzICIsCisJCQkJIGNwdXMtPm1hcFtjcHVdLAorCQkJCSBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBvdXRfY2xvc2VfZmQ7CisJCX0KIAkJZm9yIChpID0gMDsgaSA8IG5jYWxsczsgKytpKSB7CiAJCQlmZCA9IG9wZW4oIi9ldGMvcGFzc3dkIiwgT19SRE9OTFkpOwogCQkJY2xvc2UoZmQpOwogCQl9Ci0JCUNQVV9DTFIoY3B1LCBjcHVfc2V0KTsKKwkJQ1BVX0NMUihjcHVzLT5tYXBbY3B1XSwgJmNwdV9zZXQpOwogCX0KIAogCS8qCkBAIC00MDIsNiArNDExLDkgQEAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyArK2NwdSkgewogCQl1bnNpZ25lZCBpbnQgZXhwZWN0ZWQ7CiAKKwkJaWYgKGNwdXMtPm1hcFtjcHVdID49IENQVV9TRVRTSVpFKQorCQkJY29udGludWU7CisKIAkJaWYgKHBlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGV2c2VsLCBjcHUsIDApIDwgMCkgewogCQkJcHJfZGVidWcoInBlcmZfZXZzZWxfX29wZW5fcmVhZF9vbl9jcHVcbiIpOwogCQkJZ290byBvdXRfY2xvc2VfZmQ7CkBAIC00MDksOCArNDIxLDggQEAKIAogCQlleHBlY3RlZCA9IG5yX29wZW5fY2FsbHMgKyBjcHU7CiAJCWlmIChldnNlbC0+Y291bnRzLT5jcHVbY3B1XS52YWwgIT0gZXhwZWN0ZWQpIHsKLQkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzIG9uIGNwdSAlZCwgZ290ICVMZFxuIiwKLQkJCQkgZXhwZWN0ZWQsIGNwdSwgZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0udmFsKTsKKwkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzIG9uIGNwdSAlZCwgZ290ICUiIFBSSXU2NCAiXG4iLAorCQkJCSBleHBlY3RlZCwgY3B1cy0+bWFwW2NwdV0sIGV2c2VsLT5jb3VudHMtPmNwdVtjcHVdLnZhbCk7CiAJCQlnb3RvIG91dF9jbG9zZV9mZDsKIAkJfQogCX0KQEAgLTQyMCw4ICs0MzIsNiBAQAogCXBlcmZfZXZzZWxfX2Nsb3NlX2ZkKGV2c2VsLCAxLCB0aHJlYWRzLT5ucik7CiBvdXRfZXZzZWxfZGVsZXRlOgogCXBlcmZfZXZzZWxfX2RlbGV0ZShldnNlbCk7Ci1vdXRfY3B1X2ZyZWU6Ci0JQ1BVX0ZSRUUoY3B1X3NldCk7CiBvdXRfdGhyZWFkX21hcF9kZWxldGU6CiAJdGhyZWFkX21hcF9fZGVsZXRlKHRocmVhZHMpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggMDUzNDRjNi4uNWEyOWQ5YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHRpbWUuaD4KQEAgLTIxNCw3ICsyMTUsNyBAQAogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAogCXNwcmludGYoY29tbWFuZCwKLQkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPSUjMCpMeCAtLXN0b3AtYWRkcmVzcz0lIzAqTHggLWRTICVzIiwKKwkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPSUjMCoiIFBSSXg2NCAiIC0tc3RvcC1hZGRyZXNzPSUjMCoiIFBSSXg2NCAiIC1kUyAlcyIsCiAJCUJJVFNfUEVSX0xPTkcgLyA0LCBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+c3RhcnQpLAogCQlCSVRTX1BFUl9MT05HIC8gNCwgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPmVuZCksIHBhdGgpOwogCkBAIC0zMDgsNyArMzA5LDcgQEAKIAlzdHJ1Y3Qgc291cmNlX2xpbmUgKmxpbmU7CiAJY2hhciBwYXR0ZXJuW1BBVFRFUk5fTEVOICsgMV07CiAKLQlzcHJpbnRmKHBhdHRlcm4sICIlMCpMeCA8IiwgQklUU19QRVJfTE9ORyAvIDQsCisJc3ByaW50ZihwYXR0ZXJuLCAiJTAqIiBQUkl4NjQgIiA8IiwgQklUU19QRVJfTE9ORyAvIDQsCiAJCW1hcF9fcmlwXzJvYmpkdW1wKHN5bWUtPm1hcCwgc3ltYm9sLT5zdGFydCkpOwogCiAJcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwpAQCAtNTM3LDcgKzUzOCw3IEBACiAJaWYgKG5yX2NvdW50ZXJzID09IDEgfHwgIWRpc3BsYXlfd2VpZ2h0ZWQpIHsKIAkJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCQlmaXJzdCA9IGxpc3RfZW50cnkoZXZzZWxfbGlzdC5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7Ci0JCXByaW50ZigiJUxkIiwgZmlyc3QtPmF0dHIuc2FtcGxlX3BlcmlvZCk7CisJCXByaW50ZigiJSIgUFJJdTY0LCAodWludDY0X3QpZmlyc3QtPmF0dHIuc2FtcGxlX3BlcmlvZCk7CiAJCWlmIChmcmVxKQogCQkJcHJpbnRmKCJIeiAiKTsKIAkJZWxzZQpAQCAtNjQwLDcgKzY0MSw3IEBACiAKIAkJcGVyY2VudF9jb2xvcl9mcHJpbnRmKHN0ZG91dCwgIiU0LjFmJSUiLCBwY250KTsKIAkJaWYgKHZlcmJvc2UpCi0JCQlwcmludGYoIiAlMDE2bGx4Iiwgc3ltLT5zdGFydCk7CisJCQlwcmludGYoIiAlMDE2IiBQUkl4NjQsIHN5bS0+c3RhcnQpOwogCQlwcmludGYoIiAlLSouKnMiLCBzeW1fd2lkdGgsIHN5bV93aWR0aCwgc3ltLT5uYW1lKTsKIAkJcHJpbnRmKCIgJS0qLipzXG4iLCBkc29fd2lkdGgsIGRzb193aWR0aCwKIAkJICAgICAgIGRzb193aWR0aCA+PSBzeW1lLT5tYXAtPmRzby0+bG9uZ19uYW1lX2xlbiA/CkBAIC0xMzA1LDcgKzEzMDYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICh0YXJnZXRfdGlkICE9IC0xKQotCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQodGFyZ2V0X3RpZCwgZXZlbnRfX3Byb2Nlc3MsIHNlc3Npb24pOworCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHRocmVhZHMsIGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKIAllbHNlCiAJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX3Byb2Nlc3MsIHNlc3Npb24pOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCmluZGV4IDIzMDJlYzAuLjUwZDBhOTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC0yNjMsMTEgKzI2MywxMiBAQAogCQkJCQkgICAgIHByb2Nlc3MsIHNlc3Npb24pOwogfQogCi1pbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAotCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoraW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZF9tYXAoc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsCisJCQkJIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlldmVudF90ICpjb21tX2V2ZW50LCAqbW1hcF9ldmVudDsKLQlpbnQgZXJyID0gLTE7CisJaW50IGVyciA9IC0xLCB0aHJlYWQ7CiAKIAljb21tX2V2ZW50ID0gbWFsbG9jKHNpemVvZihjb21tX2V2ZW50LT5jb21tKSArIHNlc3Npb24tPmlkX2hkcl9zaXplKTsKIAlpZiAoY29tbV9ldmVudCA9PSBOVUxMKQpAQCAtMjc3LDggKzI3OCwxNSBAQAogCWlmIChtbWFwX2V2ZW50ID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfY29tbTsKIAotCWVyciA9IF9fZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKGNvbW1fZXZlbnQsIG1tYXBfZXZlbnQsIHBpZCwKLQkJCQkJIHByb2Nlc3MsIHNlc3Npb24pOworCWVyciA9IDA7CisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgKyt0aHJlYWQpIHsKKwkJaWYgKF9fZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKGNvbW1fZXZlbnQsIG1tYXBfZXZlbnQsCisJCQkJCSAgICAgICB0aHJlYWRzLT5tYXBbdGhyZWFkXSwKKwkJCQkJICAgICAgIHByb2Nlc3MsIHNlc3Npb24pKSB7CisJCQllcnIgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQogCWZyZWUobW1hcF9ldmVudCk7CiBvdXRfZnJlZV9jb21tOgogCWZyZWUoY29tbV9ldmVudCk7CkBAIC00NTksNyArNDY3LDggQEAKIGludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlIF9fdXNlZCwKIAkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0JZHVtcF9wcmludGYoIjogaWQ6JUxkOiBsb3N0OiVMZFxuIiwgc2VsZi0+bG9zdC5pZCwgc2VsZi0+bG9zdC5sb3N0KTsKKwlkdW1wX3ByaW50ZigiOiBpZDolIiBQUkl1NjQgIjogbG9zdDolIiBQUkl1NjQgIlxuIiwKKwkJICAgIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CiAJc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfbG9zdCArPSBzZWxmLT5sb3N0Lmxvc3Q7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsNyArNTg0LDcgQEAKIAl1OCBjcHVtb2RlID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIAlpbnQgcmV0ID0gMDsKIAotCWR1bXBfcHJpbnRmKCIgJWQvJWQ6IFslI0x4KCUjTHgpIEAgJSNMeF06ICVzXG4iLAorCWR1bXBfcHJpbnRmKCIgJWQvJWQ6IFslIyIgUFJJeDY0ICIoJSMiIFBSSXg2NCAiKSBAICUjIiBQUkl4NjQgIl06ICVzXG4iLAogCQkJc2VsZi0+bW1hcC5waWQsIHNlbGYtPm1tYXAudGlkLCBzZWxmLT5tbWFwLnN0YXJ0LAogCQkJc2VsZi0+bW1hcC5sZW4sIHNlbGYtPm1tYXAucGdvZmYsIHNlbGYtPm1tYXAuZmlsZW5hbWUpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCmluZGV4IDJiN2U5MTkuLmNjN2I1MmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC0xMzUsMTQgKzEzNSwxNiBAQAogdm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOwogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uOworc3RydWN0IHRocmVhZF9tYXA7CiAKIHR5cGVkZWYgaW50ICgqZXZlbnRfX2hhbmRsZXJfc3ludGhfdCkoZXZlbnRfdCAqZXZlbnQsIAogCQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogdHlwZWRlZiBpbnQgKCpldmVudF9faGFuZGxlcl90KShldmVudF90ICpldmVudCwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUsCiAJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKLWludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCi0JCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZF9tYXAoc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsCisJCQkJIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIGludCBldmVudF9fc3ludGhlc2l6ZV9rZXJuZWxfbW1hcChldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCmluZGV4IGY1Y2ZlZDYuLmQ4NTc1ZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCkBAIC05MCw3ICs5MCw3IEBACiAJaW50IGNwdSwgdGhyZWFkOwogCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmFnZ3IgPSAmZXZzZWwtPmNvdW50cy0+YWdnciwgY291bnQ7CiAKLQlhZ2dyLT52YWwgPSAwOworCWFnZ3ItPnZhbCA9IGFnZ3ItPmVuYSA9IGFnZ3ItPnJ1biA9IDA7CiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IG5jcHVzOyBjcHUrKykgewogCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IG50aHJlYWRzOyB0aHJlYWQrKykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCmluZGV4IDk4OWZhMmQuLmY2YTkyOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKQEAgLTc5OCw4ICs3OTgsOCBAQAogCQkJCSAgICAgIGludCBmZWF0LCBpbnQgZmQpCiB7CiAJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpIHsKLQkJcHJfZGVidWcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBmZWF0dXJlICVkLCAiCi0JCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPm9mZnNldCwgZmVhdCk7CisJCXByX2RlYnVnKCJGYWlsZWQgdG8gbHNlZWsgdG8gJSIgUFJJdTY0ICIgb2Zmc2V0IGZvciBmZWF0dXJlICIKKwkJCSAgIiVkLCBjb250aW51aW5nLi4uXG4iLCBzZWxmLT5vZmZzZXQsIGZlYXQpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCmluZGV4IGM3NDliYTYuLjMyZjRmMWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwpAQCAtNjM2LDEzICs2MzYsMTMgQEAKIAkJCX0KIAkJfQogCX0gZWxzZQotCQlyZXQgPSBzbnByaW50ZihzLCBzaXplLCBzZXAgPyAiJWxsZCIgOiAiJTEybGxkICIsIHBlcmlvZCk7CisJCXJldCA9IHNucHJpbnRmKHMsIHNpemUsIHNlcCA/ICIlIiBQUkl1NjQgOiAiJTEyIiBQUkl1NjQgIiAiLCBwZXJpb2QpOwogCiAJaWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcykgewogCQlpZiAoc2VwKQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyVsbGQiLCAqc2VwLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyUiIFBSSXU2NCwgKnNlcCwgcGVyaW9kKTsKIAkJZWxzZQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTFsbGQiLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTEiIFBSSXU2NCwgcGVyaW9kKTsKIAl9CiAKIAlpZiAocGFpcl9oaXN0cykgewpAQCAtOTcxLDcgKzk3MSw3IEBACiAJc3ltX3NpemUgPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAJb2Zmc2V0ID0gaXAgLSBzeW0tPnN0YXJ0OwogCi0JcHJfZGVidWczKCIlczogaXA9JSNMeFxuIiwgX19mdW5jX18sIHNlbGYtPm1zLm1hcC0+dW5tYXBfaXAoc2VsZi0+bXMubWFwLCBpcCkpOworCXByX2RlYnVnMygiJXM6IGlwPSUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sIHNlbGYtPm1zLm1hcC0+dW5tYXBfaXAoc2VsZi0+bXMubWFwLCBpcCkpOwogCiAJaWYgKG9mZnNldCA+PSBzeW1fc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC05ODAsOCArOTgwLDkgQEAKIAloLT5zdW0rKzsKIAloLT5pcFtvZmZzZXRdKys7CiAKLQlwcl9kZWJ1ZzMoIiUjTHggJXM6IHBlcmlvZCsrIFtpcDogJSNMeCwgJSNMeF0gPT4gJUxkXG4iLCBzZWxmLT5tcy5zeW0tPnN0YXJ0LAotCQkgIHNlbGYtPm1zLnN5bS0+bmFtZSwgaXAsIGlwIC0gc2VsZi0+bXMuc3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CisJcHJfZGVidWczKCIlIyIgUFJJeDY0ICIgJXM6IHBlcmlvZCsrIFtpcDogJSMiIFBSSXg2NCAiLCAlIyIgUFJJeDY0CisJCSAgIl0gPT4gJSIgUFJJdTY0ICJcbiIsIHNlbGYtPm1zLnN5bS0+c3RhcnQsIHNlbGYtPm1zLnN5bS0+bmFtZSwKKwkJICBpcCwgaXAgLSBzZWxmLT5tcy5zeW0tPnN0YXJ0LCBoLT5pcFtvZmZzZXRdKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEzMiw3ICsxMTMzLDcgQEAKIAkJZ290byBvdXRfZnJlZV9maWxlbmFtZTsKIAl9CiAKLQlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjTHgsIGVuZD0lI0x4XG4iLCBfX2Z1bmNfXywKKwlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjIiBQUkl4NjQgIiwgZW5kPSUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sCiAJCSBmaWxlbmFtZSwgc3ltLT5uYW1lLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCiAJCSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKIApAQCAtMTE0Miw3ICsxMTQzLDcgQEAKIAkJIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNucHJpbnRmKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwKLQkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAtLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAorCQkgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0ICIgLS1zdG9wLWFkZHJlc3M9MHglMDE2IiBQUkl4NjQgIiAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAogCQkgc3ltZnNfZmlsZW5hbWUsIGZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggOGJlMGI5Ni4uMzA1Yzg0OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9QRVJGX0xJTlVYX0JJVE9QU19IXwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vaHdlaWdodC5oPgogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgX19XT1JEU0laRQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCmluZGV4IDNhN2ViNmUuLmExNmVjYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTk1LDcgKzE5Niw3IEBACiAKIHNpemVfdCBtYXBfX2ZwcmludGYoc3RydWN0IG1hcCAqc2VsZiwgRklMRSAqZnApCiB7Ci0JcmV0dXJuIGZwcmludGYoZnAsICIgJUx4LSVMeCAlTHggJXNcbiIsCisJcmV0dXJuIGZwcmludGYoZnAsICIgJSIgUFJJeDY0ICItJSIgUFJJeDY0ICIgJSIgUFJJeDY0ICIgJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5wZ29mZiwgc2VsZi0+ZHNvLT5uYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGJjMjczMmUuLjEzNWY2OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCXN0YXRpYyBjaGFyIGJ1ZlszMl07CiAKIAlpZiAodHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7Ci0JCXNwcmludGYoYnVmLCAicmF3IDB4JWxseCIsIGNvbmZpZyk7CisJCXNwcmludGYoYnVmLCAicmF3IDB4JSIgUFJJeDY0LCBjb25maWcpOwogCQlyZXR1cm4gYnVmOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCmluZGV4IGI4MmNhZmIuLjQ1OGUzZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cmFjZXBvaW50X2lkX3RvX3BhdGgodTY0IGNvbmZpZyk7Ci1leHRlcm4gYm9vbCBoYXZlX3RyYWNlcG9pbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmV2c2VsX2xpc3QpOworZXh0ZXJuIGJvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpldmxpc3QpOwogCiBleHRlcm4gaW50CQkJbnJfY291bnRlcnM7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggMTI4YWFhYi4uNmUyOWQ5YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXN5bSA9IF9fZmluZF9rZXJuZWxfZnVuY3Rpb25fYnlfbmFtZSh0cC0+c3ltYm9sLCAmbWFwKTsKIAlpZiAoc3ltKSB7CiAJCWFkZHIgPSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCArIHRwLT5vZmZzZXQpOwotCQlwcl9kZWJ1ZygidHJ5IHRvIGZpbmQgJXMrJWxkQCVsbHhcbiIsIHRwLT5zeW1ib2wsCisJCXByX2RlYnVnKCJ0cnkgdG8gZmluZCAlcyslbGRAJSIgUFJJeDY0ICJcbiIsIHRwLT5zeW1ib2wsCiAJCQkgdHAtPm9mZnNldCwgYWRkcik7CiAJCXJldCA9IGZpbmRfcGVyZl9wcm9iZV9wb2ludCgodW5zaWduZWQgbG9uZylhZGRyLCBwcCk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggMzEzZGFjMi4uMTA1ZjAwYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC02NTIsMTAgKzY1MiwxMSBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JcHJpbnRmKCIuLi4gY2hhaW46IG5yOiVMdVxuIiwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yKTsKKwlwcmludGYoIi4uLiBjaGFpbjogbnI6JSIgUFJJdTY0ICJcbiIsIHNhbXBsZS0+Y2FsbGNoYWluLT5ucik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yOyBpKyspCi0JCXByaW50ZigiLi4uLi4gJTJkOiAlMDE2THhcbiIsIGksIHNhbXBsZS0+Y2FsbGNoYWluLT5pcHNbaV0pOworCQlwcmludGYoIi4uLi4uICUyZDogJTAxNiIgUFJJeDY0ICJcbiIsCisJCSAgICAgICBpLCBzYW1wbGUtPmNhbGxjaGFpbi0+aXBzW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19wcmludF90c3RhbXAoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKQEAgLTY3Miw3ICs2NzMsNyBAQAogCQlwcmludGYoIiV1ICIsIHNhbXBsZS0+Y3B1KTsKIAogCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCi0JCXByaW50ZigiJUx1ICIsIHNhbXBsZS0+dGltZSk7CisJCXByaW50ZigiJSIgUFJJdTY0ICIgIiwgc2FtcGxlLT50aW1lKTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcF9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBldmVudF90ICpldmVudCwKQEAgLTY4MSwxNiArNjgyLDE2IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlwcmludGYoIlxuJSNMeCBbJSN4XTogZXZlbnQ6ICVkXG4iLCBmaWxlX29mZnNldCwgZXZlbnQtPmhlYWRlci5zaXplLAotCSAgICAgICBldmVudC0+aGVhZGVyLnR5cGUpOworCXByaW50ZigiXG4lIyIgUFJJeDY0ICIgWyUjeF06IGV2ZW50OiAlZFxuIiwKKwkgICAgICAgZmlsZV9vZmZzZXQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnQtPmhlYWRlci50eXBlKTsKIAogCXRyYWNlX2V2ZW50KGV2ZW50KTsKIAogCWlmIChzYW1wbGUpCiAJCXBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHNlc3Npb24sIGV2ZW50LCBzYW1wbGUpOwogCi0JcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsCi0JICAgICAgIGV2ZW50X19nZXRfZXZlbnRfbmFtZShldmVudC0+aGVhZGVyLnR5cGUpKTsKKwlwcmludGYoIiUjIiBQUkl4NjQgIiBbJSN4XTogUEVSRl9SRUNPUkRfJXMiLCBmaWxlX29mZnNldCwKKwkgICAgICAgZXZlbnQtPmhlYWRlci5zaXplLCBldmVudF9fZ2V0X2V2ZW50X25hbWUoZXZlbnQtPmhlYWRlci50eXBlKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfc2FtcGxlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGV2ZW50X3QgKmV2ZW50LApAQCAtNjk5LDggKzcwMCw5IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlwcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCSAgICAgICBzYW1wbGUtPnBpZCwgc2FtcGxlLT50aWQsIHNhbXBsZS0+aXAsIHNhbXBsZS0+cGVyaW9kKTsKKwlwcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSMiIFBSSXg2NCAiIHBlcmlvZDogJSIgUFJJdTY0ICJcbiIsCisJICAgICAgIGV2ZW50LT5oZWFkZXIubWlzYywgc2FtcGxlLT5waWQsIHNhbXBsZS0+dGlkLCBzYW1wbGUtPmlwLAorCSAgICAgICBzYW1wbGUtPnBlcmlvZCk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pCiAJCWNhbGxjaGFpbl9fcHJpbnRmKHNhbXBsZSk7CkBAIC04NDMsOCArODQ1LDggQEAKIHsKIAlpZiAob3BzLT5sb3N0ID09IGV2ZW50X19wcm9jZXNzX2xvc3QgJiYKIAkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfbG9zdCAhPSAwKSB7Ci0JCXVpX193YXJuaW5nKCJQcm9jZXNzZWQgJUx1IGV2ZW50cyBhbmQgTE9TVCAlTHUhXG5cbiIKLQkJCSAgICAiQ2hlY2sgSU8vQ1BVIG92ZXJsb2FkIVxuXG4iLAorCQl1aV9fd2FybmluZygiUHJvY2Vzc2VkICUiIFBSSXU2NCAiIGV2ZW50cyBhbmQgTE9TVCAlIiBQUkl1NjQKKwkJCSAgICAiIVxuXG5DaGVjayBJTy9DUFUgb3ZlcmxvYWQhXG5cbiIsCiAJCQkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kLAogCQkJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QpOwogCX0KQEAgLTkxOCw3ICs5MjAsNyBAQAogCiAJaWYgKHNpemUgPT0gMCB8fAogCSAgICAoc2tpcCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZWxmLCAmZXZlbnQsIG9wcywgaGVhZCkpIDwgMCkgewotCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGhlYWQsIGV2ZW50LmhlYWRlci5zaXplLCBldmVudC5oZWFkZXIudHlwZSk7CiAJCS8qCiAJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCkBAIC0xMDIzLDcgKzEwMjUsNyBAQAogCiAJaWYgKHNpemUgPT0gMCB8fAogCSAgICBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIG9wcywgZmlsZV9wb3MpIDwgMCkgewotCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGZpbGVfb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAogCQkJICAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCS8qCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKaW5kZXggYjM2MzdkYi4uZmI3MzdmZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwpAQCAtMTIsNiArMTIsNyBAQAogICogb2YgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQzLDExICs0NCwxMSBAQAogCXJldHVybiBjcHUyc2xvdChjcHUpICogU0xPVF9NVUxUOwogfQogCi1zdGF0aWMgZG91YmxlIHRpbWUycGl4ZWxzKHU2NCB0aW1lKQorc3RhdGljIGRvdWJsZSB0aW1lMnBpeGVscyh1NjQgX190aW1lKQogewogCWRvdWJsZSBYOwogCi0JWCA9IDEuMCAqIHN2Z19wYWdlX3dpZHRoICogKHRpbWUgLSBmaXJzdF90aW1lKSAvIChsYXN0X3RpbWUgLSBmaXJzdF90aW1lKTsKKwlYID0gMS4wICogc3ZnX3BhZ2Vfd2lkdGggKiAoX190aW1lIC0gZmlyc3RfdGltZSkgLyAobGFzdF90aW1lIC0gZmlyc3RfdGltZSk7CiAJcmV0dXJuIFg7CiB9CiAKQEAgLTk0LDcgKzk1LDcgQEAKIAogCXRvdGFsX2hlaWdodCA9ICgxICsgcm93cyArIGNwdTJzbG90KGNwdXMpKSAqIFNMT1RfTVVMVDsKIAlmcHJpbnRmKHN2Z2ZpbGUsICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgc3RhbmRhbG9uZT1cIm5vXCI/PiBcbiIpOwotCWZwcmludGYoc3ZnZmlsZSwgIjxzdmcgd2lkdGg9XCIlaVwiIGhlaWdodD1cIiVsbHVcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIiwgc3ZnX3BhZ2Vfd2lkdGgsIHRvdGFsX2hlaWdodCk7CisJZnByaW50ZihzdmdmaWxlLCAiPHN2ZyB3aWR0aD1cIiVpXCIgaGVpZ2h0PVwiJSIgUFJJdTY0ICJcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIiwgc3ZnX3BhZ2Vfd2lkdGgsIHRvdGFsX2hlaWdodCk7CiAKIAlmcHJpbnRmKHN2Z2ZpbGUsICI8ZGVmcz5cbiAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgIDwhW0NEQVRBW1xuIik7CiAKQEAgLTQ4Myw3ICs0ODQsNyBAQAogCQkJY29sb3IgPSAxMjg7CiAJCX0KIAotCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiVsbHVcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCisJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJSIgUFJJdTY0ICJcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCiAJCQl0aW1lMnBpeGVscyhpKSwgU0xPVF9NVUxULzIsIHRpbWUycGl4ZWxzKGkpLCB0b3RhbF9oZWlnaHQsIGNvbG9yLCBjb2xvciwgY29sb3IsIHRoaWNrbmVzcyk7CiAKIAkJaSArPSAxMDAwMDAwMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCAxNWNjZmJhLi43ODIxZDBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgImJ1aWxkLWlkLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKQEAgLTE1Myw3ICsxNTQsNyBAQAogCXNlbGYtPmJpbmRpbmcgPSBiaW5kaW5nOwogCXNlbGYtPm5hbWVsZW4gPSBuYW1lbGVuIC0gMTsKIAotCXByX2RlYnVnNCgiJXM6ICVzICUjTHgtJSNMeFxuIiwgX19mdW5jX18sIG5hbWUsIHN0YXJ0LCBzZWxmLT5lbmQpOworCXByX2RlYnVnNCgiJXM6ICVzICUjIiBQUkl4NjQgIi0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKIAogCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIApAQCAtMTY3LDcgKzE2OCw3IEBACiAKIHN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQogewotCXJldHVybiBmcHJpbnRmKGZwLCAiICVsbHgtJWxseCAlYyAlc1xuIiwKKwlyZXR1cm4gZnByaW50ZihmcCwgIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlYyAlc1xuIiwKIAkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsCiAJCSAgICAgICBzZWxmLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgogCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLApAQCAtMTE2MSw2ICsxMTYyLDEzIEBACiAKIAkJc2VjdGlvbl9uYW1lID0gZWxmX3NlY19fbmFtZSgmc2hkciwgc2Vjc3Rycyk7CiAKKwkJLyogT24gQVJNLCBzeW1ib2xzIGZvciB0aHVtYiBmdW5jdGlvbnMgaGF2ZSAxIGFkZGVkIHRvCisJCSAqIHRoZSBzeW1ib2wgYWRkcmVzcyBhcyBhIGZsYWcgLSByZW1vdmUgaXQgKi8KKwkJaWYgKChlaGRyLmVfbWFjaGluZSA9PSBFTV9BUk0pICYmCisJCSAgICAobWFwLT50eXBlID09IE1BUF9fRlVOQ1RJT04pICYmCisJCSAgICAoc3ltLnN0X3ZhbHVlICYgMSkpCisJCQktLXN5bS5zdF92YWx1ZTsKKwogCQlpZiAoc2VsZi0+a2VybmVsICE9IERTT19UWVBFX1VTRVIgfHwga21vZHVsZSkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07CiAKQEAgLTEyMDgsOCArMTIxNiw4IEBACiAJCX0KIAogCQlpZiAoY3Vycl9kc28tPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlwcl9kZWJ1ZzQoIiVzOiBhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJSNMeCAiCi0JCQkJICAic2hfYWRkcjogJSNMeCBzaF9vZmZzZXQ6ICUjTHhcbiIsIF9fZnVuY19fLAorCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjIiBQUkl4NjQgIiAiCisJCQkJICAic2hfYWRkcjogJSMiIFBSSXg2NCAiIHNoX29mZnNldDogJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywKIAkJCQkgICh1NjQpc3ltLnN0X3ZhbHVlLCAodTY0KXNoZHIuc2hfYWRkciwKIAkJCQkgICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmggYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaAppbmRleCA3ZDZiODMzLi41ZjM2ODlhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHlwZXMuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaApAQCAtMSwxMiArMSwxNCBAQAogI2lmbmRlZiBfX1BFUkZfVFlQRVNfSAogI2RlZmluZSBfX1BFUkZfVFlQRVNfSAogCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKIC8qCi0gKiBXZSBkZWZpbmUgdTY0IGFzIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlCi0gKiBzbyB0aGF0IHdlIGNhbiBwcmludCBpdCB3aXRoICVMeCB3aXRob3V0IGdldHRpbmcgd2FybmluZ3MuCisgKiBXZSBkZWZpbmUgdTY0IGFzIHVpbnQ2NF90IGZvciBldmVyeSBhcmNoaXRlY3R1cmUKKyAqIHNvIHRoYXQgd2UgY2FuIHByaW50IGl0IHdpdGggIiUiUFJJeDY0IHdpdGhvdXQgZ2V0dGluZyB3YXJuaW5ncy4KICAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwotdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgczY0OwordHlwZWRlZiB1aW50NjRfdAkgICB1NjQ7Cit0eXBlZGVmIGludDY0X3QJCSAgIHM2NDsKIHR5cGVkZWYgdW5zaWduZWQgaW50CSAgIHUzMjsKIHR5cGVkZWYgc2lnbmVkIGludAkgICBzMzI7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgIHUxNjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggZWJkYThjMy4uNjBjNDYzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlmIChzZWxmLT5tcy5zeW0pCiAJCXJldHVybiBzZWxmLT5tcy5zeW0tPm5hbWU7CiAKLQlzbnByaW50ZihiZiwgYmZzaXplLCAiJSNMeCIsIHNlbGYtPmlwKTsKKwlzbnByaW50ZihiZiwgYmZzaXplLCAiJSMiIFBSSXg2NCwgc2VsZi0+aXApOwogCXJldHVybiBiZjsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jCmluZGV4IGUzNTQzN2QuLmU1MTU4MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvbWFwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiLi4vbGlic2xhbmcuaCIKICNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC01Nyw3ICs1OCw3IEBACiAJaW50IHdpZHRoOwogCiAJdWlfYnJvd3Nlcl9fc2V0X3BlcmNlbnRfY29sb3Ioc2VsZiwgMCwgY3VycmVudF9lbnRyeSk7Ci0Jc2xzbWdfcHJpbnRmKCIlKmxseCAlKmxseCAlYyAiLAorCXNsc21nX3ByaW50ZigiJSoiIFBSSXg2NCAiICUqIiBQUkl4NjQgIiAlYyAiLAogCQkgICAgIG1iLT5hZGRybGVuLCBzeW0tPnN0YXJ0LCBtYi0+YWRkcmxlbiwgc3ltLT5lbmQsCiAJCSAgICAgc3ltLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgogCQkgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnKTsKQEAgLTE1MCw2ICsxNTEsNiBAQAogCQkrK21iLmIubnJfZW50cmllczsKIAl9CiAKLQltYi5hZGRybGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVsbHgiLCBtYXhhZGRyKTsKKwltYi5hZGRybGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiUiIFBSSXg2NCwgbWF4YWRkcik7CiAJcmV0dXJuIG1hcF9icm93c2VyX19ydW4oJm1iKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwppbmRleCBjZmE1NWQ2Li5iZGQzMzQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJaWYgKHdpZHRoID4gdGlkd2lkdGgpCiAJCQl0aWR3aWR0aCA9IHdpZHRoOwogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKSB7Ci0JCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlTHUiLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKKwkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiUiIFBSSXU2NCwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCQlpZiAod2lkdGggPiBjb3VudGVyd2lkdGhbal0pCiAJCQkJY291bnRlcndpZHRoW2pdID0gd2lkdGg7CiAJCX0KQEAgLTE2NSw3ICsxNjUsNyBAQAogCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCIsIHBpZHdpZHRoLCB2YWx1ZXMtPnBpZFtpXSwKIAkJCXRpZHdpZHRoLCB2YWx1ZXMtPnRpZFtpXSk7CiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCi0JCQlmcHJpbnRmKGZwLCAiICAlKkx1IiwKKwkJCWZwcmludGYoZnAsICIgICUqIiBQUkl1NjQsCiAJCQkJY291bnRlcndpZHRoW2pdLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKIAkJZnByaW50ZihmcCwgIlxuIik7CiAJfQpAQCAtMTk2LDEzICsxOTYsMTMgQEAKIAkJd2lkdGggPSBzdHJsZW4odmFsdWVzLT5jb3VudGVybmFtZVtqXSk7CiAJCWlmICh3aWR0aCA+IG5hbWV3aWR0aCkKIAkJCW5hbWV3aWR0aCA9IHdpZHRoOwotCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlbGx4IiwgdmFsdWVzLT5jb3VudGVycmF3aWRbal0pOworCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl4NjQsIHZhbHVlcy0+Y291bnRlcnJhd2lkW2pdKTsKIAkJaWYgKHdpZHRoID4gcmF3d2lkdGgpCiAJCQlyYXd3aWR0aCA9IHdpZHRoOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykgewotCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJUx1IiwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CisJCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl1NjQsIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQkJaWYgKHdpZHRoID4gY291bnR3aWR0aCkKIAkJCQljb3VudHdpZHRoID0gd2lkdGg7CiAJCX0KQEAgLTIxNCw3ICsyMTQsNyBAQAogCQljb3VudHdpZHRoLCAiQ291bnQiKTsKIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCi0JCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCAgJSpzICAlKmxseCAgJSpMdVxuIiwKKwkJCWZwcmludGYoZnAsICIgICUqZCAgJSpkICAlKnMgICUqIiBQUkl4NjQgIiAgJSoiIFBSSXU2NCwKIAkJCQlwaWR3aWR0aCwgdmFsdWVzLT5waWRbaV0sCiAJCQkJdGlkd2lkdGgsIHZhbHVlcy0+dGlkW2ldLAogCQkJCW5hbWV3aWR0aCwgdmFsdWVzLT5jb3VudGVybmFtZVtqXSwK